mirror of
https://github.com/hellodigua/ChatLab.git
synced 2026-10-26 02:04:37 +08:00
Move Electron-specific code (main, preload, shared) and configs (electron.vite, electron-builder) into apps/desktop/ to prepare for multi-platform support (Web Browser standalone). - Create apps/desktop/ with dedicated package.json and tsconfig - Split Electron deps (electron, electron-updater, better-sqlite3, etc.) from shared frontend deps in root package.json - Declare better-sqlite3 and @node-rs/jieba in packages/node-runtime - Add stream-json to packages/parser where it belongs - Update all path aliases (@electron/* → apps/desktop/*) in tsconfig, vite configs, and relative imports in preload/main - Keep slim root tsconfig.node.json as shared base for packages - Update CI/CD release workflow for new directory layout - Fix pre-existing type errors (pi-ai Model generic, SQLLabTab LLMChatStreamChunk, filter.test.ts empty methods)
95 lines
2.9 KiB
TypeScript
95 lines
2.9 KiB
TypeScript
/**
|
|
* IPC 主入口文件
|
|
* 模块化结构,各功能模块位于 ./ipc/ 目录下
|
|
*/
|
|
import { BrowserWindow } from 'electron'
|
|
import type { IpcContext } from './ipc/types'
|
|
|
|
// 导入各功能模块
|
|
import { registerWindowHandlers } from './ipc/window'
|
|
import { registerChatHandlers } from './ipc/chat'
|
|
import { registerMergeHandlers, initMergeModule, cleanupTempDbs } from './ipc/merge'
|
|
import { registerAIHandlers } from './ipc/ai'
|
|
import { registerMessagesHandlers } from './ipc/messages'
|
|
import { registerCacheHandlers } from './ipc/cache'
|
|
import { registerNetworkHandlers } from './ipc/network'
|
|
import { registerNlpHandlers } from './ipc/nlp'
|
|
import { registerAnalyticsHandlers } from './analytics'
|
|
import { registerApiHandlers, initApiServer, cleanupApiServer } from './ipc/api'
|
|
import { registerDemoHandlers } from './ipc/demo'
|
|
// 导入 Worker 模块(用于异步分析查询和流式导入)
|
|
import * as worker from './worker/workerManager'
|
|
|
|
/**
|
|
* 初始化所有 IPC 处理器
|
|
* @param win - 主窗口实例
|
|
*/
|
|
const mainIpcMain = (win: BrowserWindow) => {
|
|
console.log('[IpcMain] Registering IPC handlers...')
|
|
|
|
// 初始化合并模块(清理残留的临时数据库)
|
|
initMergeModule()
|
|
|
|
// 初始化 Worker
|
|
try {
|
|
worker.initWorker()
|
|
console.log('[IpcMain] Worker initialized successfully')
|
|
} catch (error) {
|
|
console.error('[IpcMain] Failed to initialize worker:', error)
|
|
}
|
|
|
|
const context: IpcContext = { win }
|
|
|
|
// 注册各模块的处理器
|
|
registerWindowHandlers(context)
|
|
registerChatHandlers(context)
|
|
registerMergeHandlers(context)
|
|
registerAIHandlers(context)
|
|
registerMessagesHandlers(context)
|
|
registerCacheHandlers(context)
|
|
registerNetworkHandlers(context)
|
|
registerNlpHandlers(context)
|
|
registerAnalyticsHandlers()
|
|
registerApiHandlers(context)
|
|
registerDemoHandlers(context)
|
|
|
|
// 启动 ChatLab API 服务(异步,不阻塞 IPC 注册)
|
|
initApiServer(context).catch((err) => {
|
|
console.error('[IpcMain] API server init failed:', err)
|
|
})
|
|
|
|
console.log('[IpcMain] All IPC handlers registered successfully')
|
|
}
|
|
|
|
export const cleanup = () => {
|
|
console.log('[IpcMain] Cleaning up resources...')
|
|
try {
|
|
// 关闭 Worker
|
|
worker.closeWorker()
|
|
// 清理临时数据库
|
|
cleanupTempDbs()
|
|
} catch (error) {
|
|
console.error('[IpcMain] Error during cleanup:', error)
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 异步清理资源(用于更新安装前,确保 Worker 完全关闭)
|
|
*/
|
|
export const cleanupAsync = async () => {
|
|
console.log('[IpcMain] Cleaning up resources (async)...')
|
|
try {
|
|
// 关闭 ChatLab API 服务
|
|
await cleanupApiServer()
|
|
// 等待 Worker 完全关闭
|
|
await worker.closeWorkerAsync()
|
|
// 清理临时数据库
|
|
cleanupTempDbs()
|
|
console.log('[IpcMain] Cleanup completed')
|
|
} catch (error) {
|
|
console.error('[IpcMain] Error during async cleanup:', error)
|
|
}
|
|
}
|
|
|
|
export default mainIpcMain
|