DeepChat 当前架构概览

May 28, 2026 · View on GitHub

本文档描述 2026-05-28 的主架构。当前目标不是再做一次全量 main-kernel rewrite, 而是维持 typed renderer-main boundary,并把新增能力接到既有 route/runtime owner 上。

主链路

flowchart LR
    Renderer["Renderer / Stores / Views"] --> Client["renderer/api clients"]
    Client --> Bridge["window.deepchat / preload bridge"]
    Bridge --> Contracts["shared/contracts routes + events"]
    Contracts --> Routes["src/main/routes dispatcher"]
    Routes --> Services["route services / handlers"]
    Services --> Ports["presenter-backed ports"]
    Ports --> AgentSession["agentSessionPresenter"]
    AgentSession --> Runtime["agentRuntimePresenter"]
    Runtime --> Tool["toolPresenter"]
    Runtime --> SQLite["sqlitePresenter"]
    Tool --> Mcp["mcpPresenter"]
    Tool --> AgentTools["toolPresenter/agentTools"]
    Ports --> Provider["llmProviderPresenter"]
    Provider --> Acp["llmProviderPresenter/acp"]

主结论:

  • renderer 业务代码优先经过 renderer/api/*Clientwindow.deepchat 和 shared contracts。
  • src/main/routes/index.ts 是 typed route dispatcher,并装配 settings、sessions、chat、 providers、models、config、MCP、plugins、skills、sync、browser、database security、 scheduled tasks 等 route。
  • presenter 仍是 runtime owner,但 route services 只通过窄 port 或明确 client 依赖使用它们。
  • SessionPresenter 仍保留为 legacy 数据访问、导出和兼容边界,不再是当前聊天主链路 owner。

模块职责

模块位置职责
renderer/apisrc/renderer/api/typed renderer clients,吸收 bridge/channel 细节
shared contractssrc/shared/contracts/route registry、schema、typed event catalog
preload bridgesrc/preload/createBridge.ts / src/preload/index.ts暴露 window.deepchat.invoke/on
main routessrc/main/routes/typed route dispatch、services、handlers
hot path portssrc/main/routes/hotPathPorts.ts / src/main/presenter/runtimePorts.tsroute runtime 到 presenter 的最小接口
AgentSessionPresentersrc/main/presenter/agentSessionPresenter/session registry、window binding、legacy import、runtime delegation
AgentRuntimePresentersrc/main/presenter/agentRuntimePresenter/聊天 loop、stream、tool interaction、message/session persistence
ToolPresentersrc/main/presenter/toolPresenter/MCP tools 与本地 agent tools 聚合、权限预检查、调用路由
LLMProviderPresentersrc/main/presenter/llmProviderPresenter/provider 实例、model/runtime 管理、ACP helper、AI SDK runtime
StartupWorkloadCoordinatorsrc/main/presenter/startupWorkloadCoordinator/startup/settings/floating 等目标的分阶段后台任务调度
RemoteControlPresentersrc/main/presenter/remoteControlPresenter/Telegram、Feishu/Lark、QQBot、Discord、WeChat iLink 远程控制
ScheduledTasksServicesrc/main/presenter/scheduledTasks/一次性、每日、每周任务调度和 prompt/notify action dispatch
DatabaseSecurityPresentersrc/main/presenter/databaseSecurityPresenter/SQLCipher 启用、改密、关闭、safeStorage/manual unlock
Spotlight searchsrc/renderer/src/stores/ui/spotlight.ts全局搜索、会话/消息跳转、设置导航和非破坏性 action

当前分层

1. Renderer-Main Boundary

  • src/shared/contracts/routes*.tsevents*.ts 是 migrated path 的契约真源。
  • src/preload/createBridge.ts 统一 route invoke 和 typed event subscribe。
  • src/renderer/api/*Client.ts 是组件和 store 的默认入口。
  • src/renderer/api/legacy/** 是唯一 legacy quarantine。当前保留 presenters.tspresenterTransport.tsruntime.ts 三个兼容文件;新业务模块不应直接导入 legacy transport。

2. Main Route Runtime

  • src/main/routes/index.ts 根据 route registry 分发请求。
  • SessionServiceChatServiceProviderService 负责 migrated chat/session/provider hot path。
  • ProviderImportService 负责外部 provider 配置扫描与应用。
  • models routes 提供 model catalog、runtime list、config import/export、audio transcription。
  • database security 与 scheduled tasks 已经是 typed route,renderer 通过专用 client 调用。

3. Agent Runtime

  • AgentSessionPresenter 创建/恢复/激活 session,并把执行交给 AgentRuntimePresenter
  • AgentRuntimePresenter 拥有 stream loop、tool loop、pending input、manual/auto compaction、 message trace 和结构化消息持久化。
  • DeepChatMessageStore 采用头表 + 结构化子表模型,并在读路径缺行时回退旧 JSON。
  • 历史搜索使用 deepchat_search_documents 与 FTS5,FTS 不可用时回退 LIKE
  • Agent progress 使用 agent-core/update_planchat.plan.updated 和 renderer 浮层展示任务计划。

4. Provider And Media Runtime

  • ModelType 当前包含 chat、embedding、rerank、imageGeneration、videoGeneration、tts。
  • OpenAI-compatible image/video generation 和 TTS 通过 model config、provider route meta、 AI SDK runtime 与消息渲染协作。
  • 本地录音转写走 ModelClient.transcribeAudio() / models.transcribeAudio,由 provider runtime 完成。
  • provider deeplink 与 provider config import 都会在写入前做 preview、校验、冲突处理和脱敏展示。

5. Compatibility Boundary

仍保留但只承担兼容职责:

  • src/main/presenter/agentSessionPresenter/legacyImportService.ts
  • conversations/messages 数据域,作为 import-only 与导出数据源
  • src/main/presenter/sessionPresenter/,作为 main 内部 compatibility/data facade
  • src/main/eventbus.ts,继续服务未迁移路径;migrated UI 通知优先走 typed events

防回归规则

  • 新 renderer-main 能力默认走 renderer/api/*Client + window.deepchat + shared contracts。
  • legacy transport 只能留在 src/renderer/api/legacy/**,不新增第二个 quarantine 目录。
  • scripts/architecture-guard.mjs 固定 quarantine 文件数、检测 direct legacy transport、 并读取 docs/architecture/baselines/main-kernel-bridge-register.json
  • scripts/agent-cleanup-guard.mjs 用于防止已退休 agent runtime 入口回流。

推荐阅读顺序

  1. README.md
  2. guides/code-navigation.md
  3. FLOWS.md
  4. architecture/agent-system.md
  5. architecture/tool-system.md
  6. architecture/session-management.md