/** * IPC Context — 跨模块共享上下文(P2-9) * * 原 handlers.ts 1940 行巨型函数的 17 个参数收敛为单一上下文对象, * 按 13 个域模块拆分注册。broadcast() 将事件发送到所有窗口 * (P2-10 修复:原实现只发给初始 mainWindow,第二窗口收不到任何流式事件)。 */ import { BrowserWindow } from 'electron'; import type { SessionService } from '../services/session.service'; import type { ConfigService } from '../services/config.service'; import type { WorkspaceService } from '../services/workspace.service'; import type { ContextBuilder } from '../harness/prompts/context-builder'; import type { AgentEngineManager } from '../services/agent-engine-manager.service'; import type { ToolRegistry } from '../harness/tools/registry'; import type { AuditService } from '../services/audit.service'; import type { SessionRecorder } from '../services/session-recorder.service'; import type { MemoryManager } from '../harness/memory/manager'; import type { MCPManager } from '../services/mcp-manager.service'; import type { PromptInjectionDefender } from '../harness/security/prompt-injection-defense'; import type { OutputValidator } from '../harness/verification/output-validator'; import type { ConfirmationHook } from '../harness/hooks/confirmation-hook'; import type { MemoryConsolidator } from '../harness/memory/consolidator'; import type { TaskOrchestrator } from '../harness/orchestration/orchestrator'; import type { SessionSummaryService } from '../services/session-summary.service'; /** 工具就绪状态(main.ts 在 MCP 初始化完成后更新,tools.ts 的 isReady 查询读取) */ export interface ToolsReadyRef { ready: boolean; toolCount: number; } export interface IPCContext { mainWindow: BrowserWindow; sessionService: SessionService; configService: ConfigService; workspaceService: WorkspaceService; contextBuilder: ContextBuilder; agentEngineManager: AgentEngineManager; toolRegistry: ToolRegistry; auditService: AuditService; sessionRecorder: SessionRecorder; memoryManager: MemoryManager; mcpManager: MCPManager; reloadAdapter: () => boolean; promptInjectionDefender: PromptInjectionDefender; outputValidator: OutputValidator; confirmationHook: ConfirmationHook; memoryConsolidator: MemoryConsolidator; orchestrator: TaskOrchestrator; sessionSummaryService: SessionSummaryService; toolsReadyRef: ToolsReadyRef; } /** * 广播事件到所有窗口(P2-10: 多窗口支持) * * 渲染进程已按 sessionId 过滤事件,多窗口广播不会产生跨会话污染。 */ export function broadcast(channel: string, ...args: unknown[]): void { for (const win of BrowserWindow.getAllWindows()) { if (!win.isDestroyed() && win.webContents) { win.webContents.send(channel, ...args); } } }