Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
19 changes: 11 additions & 8 deletions docs/ARCHITECTURE.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# DeepChat 当前架构概览

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

## 主链路

Expand All @@ -27,8 +27,8 @@ flowchart LR

- renderer 业务代码优先经过 `renderer/api/*Client`、`window.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。
providers、models、config、MCP、plugins、skills、skill sync、sync、browser、workspace
onboarding、OAuth、knowledge、upgrade、dialog、tools、database security、scheduled tasks 等 route。
- presenter 仍是 runtime owner,但 route services 只通过窄 port 或明确 client 依赖使用它们。
- `SessionPresenter` 仍保留为 legacy 数据访问、导出和兼容边界,不再是当前聊天主链路 owner。

Expand Down Expand Up @@ -58,8 +58,10 @@ flowchart LR
- `src/shared/contracts/routes*.ts` 与 `events*.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.ts`、
`presenterTransport.ts`、`runtime.ts` 三个兼容文件;新业务模块不应直接导入 legacy transport。
- `src/renderer/api/legacy/**` 已退休并从当前树删除;guard 会阻止它被重新创建。
- raw IPC 只允许存在于 `createBridge`、`window.api` dedicated preload API 这类明确边界内,
业务层不得直接调用 `presenter:call`、`remoteControlPresenter:call` 或
`window.electron.ipcRenderer`。

### 2. Main Route Runtime

Expand Down Expand Up @@ -98,8 +100,9 @@ flowchart LR
## 防回归规则

- 新 renderer-main 能力默认走 `renderer/api/*Client` + `window.deepchat` + shared contracts。
- legacy transport 只能留在 `src/renderer/api/legacy/**`,不新增第二个 quarantine 目录。
- `scripts/architecture-guard.mjs` 固定 quarantine 文件数、检测 direct legacy transport、
- legacy transport 已退休;不要重新创建 `src/renderer/api/legacy/**`,也不要新增第二个
compatibility quarantine。确有兼容需要时,应先定义窄 typed route/event 或专用 preload API。
- `scripts/architecture-guard.mjs` 检测 direct legacy transport、已退休 legacy 目录、
并读取 `docs/architecture/baselines/main-kernel-bridge-register.json`。
- `scripts/agent-cleanup-guard.mjs` 用于防止已退休 agent runtime 入口回流。

Expand Down
38 changes: 17 additions & 21 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# DeepChat 文档索引

本文档反映 `2026-05-28` 的当前代码结构。历史 SDD 已清理为“活跃目标才保留”的模型:
已经落地的实现只在当前项目文档中保留维护信息,不再保留一次性 `spec/plan/tasks`
过程文档
本文档反映 `2026-06-13` 的当前代码结构。历史 SDD 已清理为“活跃目标保留三件套、
已落地目标只保留 durable spec”的模型:`plan.md` / `tasks.md` 只服务当前执行,已完成目标
只在 `spec.md` 保留仍有维护价值的契约和回归语义

当前 renderer-main 默认路径是 typed client / typed event:

Expand All @@ -16,9 +16,9 @@ Renderer
-> agentSessionPresenter / agentRuntimePresenter / toolPresenter / llmProviderPresenter
```

`useLegacyPresenter()`、`window.electron`、`window.api` 只允许作为兼容路径留在
`src/renderer/api/legacy/**` quarantine 中。业务模块的新能力应从 `renderer/api/*Client`
shared contracts 进入。
`useLegacyPresenter()`、`presenter:call`、`remoteControlPresenter:call` 和
`src/renderer/api/legacy/**` 已经退休。业务模块的新能力应从 `renderer/api/*Client`
shared contracts 进入;少数仍需要 raw IPC 的能力只能封装在明确 allowlist 的 preload/API 边界内

## 当前必读

Expand All @@ -39,14 +39,10 @@ Renderer

| 文档 | 用途 |
| --- | --- |
| [architecture/baselines/dependency-report.md](./architecture/baselines/dependency-report.md) | 当前依赖与耦合基线 |
| [architecture/baselines/main-kernel-boundary-baseline.md](./architecture/baselines/main-kernel-boundary-baseline.md) | renderer-main 边界指标与 hot path 快照 |
| [architecture/baselines/main-kernel-bridge-register.md](./architecture/baselines/main-kernel-bridge-register.md) | legacy bridge 登记表 |
| [architecture/baselines/main-kernel-migration-scoreboard.md](./architecture/baselines/main-kernel-migration-scoreboard.md) | typed-boundary migration scoreboard |
| [architecture/baselines/test-failure-groups.md](./architecture/baselines/test-failure-groups.md) | 测试失败分组基线 |
| [architecture/baselines/main-kernel-bridge-register.json](./architecture/baselines/main-kernel-bridge-register.json) | `architecture-guard` 读取的 legacy bridge 机器登记表 |

这些基线由 `scripts/generate-architecture-baseline.mjs` 生成,`scripts/architecture-guard.mjs`
会读取其中的 JSON 文件。它们不是历史 SDD,不应随 completed feature 文档一起删除
其它 dependency、scoreboard、test failure、zero-inbound 报表属于按需生成的审计快照。当前代码
需要重新审计时,运行 `pnpm run architecture:baseline` 生成临时报表并按需提交

## 当前代码地图

Expand All @@ -62,24 +58,24 @@ docs/
│ ├── tool-system.md
│ └── baselines/
├── features/
│ └── <active-feature-goal>/
│ └── <active-feature-goal-or-retained-contract-spec>/
├── issues/
│ └── <recent-active-issue-goal>/
│ └── <active-issue-goal-or-retained-regression-spec>/
├── guides/
│ ├── getting-started.md
│ ├── code-navigation.md
│ ├── debugging.md
│ └── plugin-packaging.md
└── spec-driven-dev.md
```

## SDD 保留规则

- `docs/features/**`、`docs/issues/**`、`docs/architecture/**` 下的 goal folder 只表示活跃目标。
- 已实现能力要把当前维护事实并入 `README.md`、`ARCHITECTURE.md`、`FLOWS.md` 或对应 guide,
然后删除旧 SDD 文件夹。
- bug 修复类 issue SDD 超过两周即清理;按当前日期 `2026-05-28`,本次清理 cutoff 为
`2026-05-14` 之前。
- `docs/features/**`、`docs/issues/**`、`docs/architecture/**` 下的 active goal folder 保留
`spec.md`、`plan.md`、`tasks.md`。
- 已实现能力只保留仍有维护价值的 `spec.md`;删除对应 `plan.md` / `tasks.md`。
- 已实现能力的当前维护事实也要并入 `README.md`、`ARCHITECTURE.md`、`FLOWS.md` 或对应 guide。
- bug 修复类 issue SDD 超过两周即清理;按当前日期 `2026-06-13`,本次清理 cutoff 为
`2026-05-30` 之前。
- 过期、未开工、只描述旧实现或旧分支的 SDD 直接删除。

## 阅读建议
Expand Down
156 changes: 0 additions & 156 deletions docs/architecture/agent-fff-node-api-search/plan.md

This file was deleted.

82 changes: 0 additions & 82 deletions docs/architecture/agent-fff-node-api-search/tasks.md

This file was deleted.

4 changes: 2 additions & 2 deletions docs/architecture/agent-runtime-presenter-split/spec.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

## Problem

`src/main/presenter/agentRuntimePresenter/index.ts` is 5681 lines with 209 methods
`src/main/presenter/agentRuntimePresenter/index.ts` is 5656 lines with 209 methods
(42 public, ~167 private). It is the core of the agent loop and the most frequently modified
file in the codebase, which makes it:

Expand Down Expand Up @@ -45,7 +45,7 @@ From the 42 public methods:
- [NEEDS CLARIFICATION] Shared mutable state audit: which private fields are touched by more
than one cluster (e.g. generation tokens vs. pending-input state)? The split boundary may
need a small shared `runtimeState` object instead of per-service ownership.
- [NEEDS CLARIFICATION] `agentSessionPresenter` (3922 lines) holds a parallel structure; decide
- [NEEDS CLARIFICATION] `agentSessionPresenter` (3898 lines) holds a parallel structure; decide
whether to split it in the same effort or sequence it after.

## Success criteria
Expand Down
6 changes: 0 additions & 6 deletions docs/architecture/baselines/archive-reference-report.md

This file was deleted.

Loading