/** * IPC Handlers — 统一注册入口(P2-9 从 handlers.ts 拆分) * * 原 1940 行巨型 registerAllIPCHandlers 按 13 个域模块拆分: * agent / sessions / config / tools / mcp / memory / tasks / data / workspace / app * * 注册顺序与 main.ts beforeLoad 中调用(P2-11 修复: IPC handler 在渲染进程 * 加载前注册,消除时序窗口)。 */ import type { IPCContext } from './context'; import { registerAgentHandlers } from './agent'; import { registerSessionHandlers } from './sessions'; import { registerConfigHandlers } from './config'; import { registerToolHandlers } from './tools'; import { registerMCPHandlers } from './mcp'; import { registerMemoryHandlers } from './memory'; import { registerTaskHandlers } from './tasks'; import { registerDataHandlers } from './data'; import { registerWorkspaceHandlers } from './workspace'; import { registerAppHandlers } from './app'; import log from 'electron-log'; export type { IPCContext, ToolsReadyRef } from './context'; export { broadcast } from './context'; /** 防重入标志:ipcMain.handle 重复注册同一通道会抛异常 */ let registered = false; export function registerAllIPCHandlers(ctx: IPCContext): void { // 当前仅主窗口 beforeLoad 调用一次;此保护覆盖未来任何多窗口创建路径 // 携带 beforeLoad 的场景(如 macOS activate 重建窗口)。 if (registered) { log.warn('[SYS] IPC handlers already registered, skipping duplicate registration'); return; } registered = true; registerAgentHandlers(ctx); registerSessionHandlers(ctx); registerConfigHandlers(ctx); registerToolHandlers(ctx); registerMCPHandlers(ctx); registerMemoryHandlers(ctx); registerTaskHandlers(ctx); registerDataHandlers(ctx); registerWorkspaceHandlers(ctx); registerAppHandlers(ctx); log.info('[SYS] All IPC handlers registered'); }