Skip to content
签到签到

5. 源码地图与推荐阅读顺序

推荐顺序不是按目录字母排序,而是按认知依赖和运行链路排序。

第一批:建立项目全景

文件阅读目的关键符号或配置读完应能回答
README.md知道产品入口、运行方式和 preview 状态npx @deepseek-ai/dsh web这个项目如何快速启动
docs/cordis-primer.md理解 Cordis 五思想Serviceinjectctx.effect、四种 dispatch为什么“一切皆插件”能成立
docs/architecture.md理解核心包、turn flow、session log、extension pointsCore packagesTurn flowWhere new behavior goes新功能应该挂在哪里
packages/core/README.md认识产品 API spinectx.sessions/llm/tools/agents/agentLoop六个核心服务各负责什么
packages/bundle/base/cordis.patch.yml看真实默认组合llmsessiontoolsagent-loop、sandbox rows一个最小 Agent 需要哪些插件
apps/cli/src/bin.ts找到真正入口runProfileCLI 如何进入 profile

第二批:理解主执行链路

文件阅读目的关键符号或行号读完应能回答
packages/core/session/src/types.ts理解事件词汇和 formatSessionEventMapSurfaceEventTypeSESSION_FORMAT_VERSION哪些事件会进入模型历史
packages/core/session/src/index.ts理解 append 和派生历史Session.appendderiveMessagesrequestHeader模型上下文如何生成
packages/core/session/src/surface.ts理解 surface append/replacederiveEventMessageSurfaceManagercompaction 如何替换历史
packages/core/agent/src/runtime-types.ts理解 Agent 接口和事件AgentPreStepDecisionagent/pre-stepUI 如何驱动 Agent
packages/core/agent-loop/src/agent.ts理解 turn/step/stream/toolReactLoopAgentturn()step()一个请求怎样变成模型调用和工具执行
packages/core/agent-loop/src/index.ts理解创建/恢复/销毁AgentLoopcreate/resumesetupAndPublishAgent 生命周期如何管理
packages/core/agent-loop/src/tool-calls.ts理解工具调度和并发executeToolCalls工具如何并行或串行
packages/core/system-prompt/src/index.ts理解 prompt 和 schema 装配section/context/tools/variable/assemble插件如何给模型加上下文
packages/core/tools/src/index.ts理解工具注册和管线register/restrict/guard/execute工具如何被校验和执行
packages/llm/llm/src/index.ts理解模型流式和 adapterregisterAdapter/prepareCall/stream如何接入新模型厂商

第三批:理解组合、持久化和前端

文件阅读目的关键符号读完应能回答
packages/boot/app-boot/src/profile.ts理解 profile/bundle/patchloadProfilecomposeEntries配置树如何生成
apps/cli/src/profile-boot.ts理解 runProfile 和 HMRrunProfilecomposeLive启动时如何 mount/热更新
packages/session/session-persistence/src/index.ts理解持久化 seamSessionPersistence如何换 JSONL/SQLite
packages/session/session-persistence/src/coordinator.ts理解 write coordinationappendflushresume会话如何可靠落盘
.agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.md理解浏览器插件树和对象层React-free object layerslot systemWeb UI 为什么这样设计
packages/api/session-controller/src/client/sessions/session.ts理解前端 Session 快照getSnapshotsubscribeReact 如何订阅流式状态
packages/client/ui-renderer/src/client/scoped-slots.tsx理解 slot 渲染和 uSESuseSyncExternalStoreslot 如何变成 React 树
docs/cookbook/extension-cookbook.md理解扩展点地图feature -> mechanism新功能用哪种扩展机制

调试时需要关注的文件

  • packages/core/agent-loop/src/agent.ts:断点放在 turn()preStep()step()buildRequest()executeToolCalls() 附近。
  • packages/core/agent-loop/src/tool-calls.ts:观察工具组并发和结果。
  • packages/core/session/src/index.ts:观察每次 append()seqsurface
  • packages/core/system-prompt/src/index.ts:观察组装出的 sections/contexts/tools/variables。
  • packages/llm/llm/src/index.ts:观察 adapter selection 和 llm/stream waterfall。

二次开发时最可能修改的文件

  • 增加工具:新建 packages/<group>/<pkg>,在 src/index.ts 调用 ctx.tools.register(),并准备 README/tests。
  • 增加模型:新建 packages/llm/<adapter>,继承 LlmAdapter,调用 ctx.llm.registerAdapter()
  • 增加 prompt/context:注册 ctx.systemPrompt.section/context/variable
  • 增加权限:监听 tools/pre-execute 或使用 ctx.tools.guard()
  • 增加 UI:在 client plugin 的 src/client/index.ts 注册 slot。

暂时可以跳过的目录

  • vendor/:除非要深入 Cordis 本身或修改 vendored 包。
  • website/:文档站点投影,学习架构时不是主链路。
  • python/native/:涉及 Python SDK 或原生 Landlock,不是理解核心 Agent 的第一优先。
  • docs/subsystems/:可在需要查具体服务类型时再读。
  • 生成式 catalog:docs/config-catalog.mddocs/tool-catalog.md 等,适合查询不适合通读。