close

DeepSeek Harness · Code-Level Reading

全书目录:一条线性阅读路径

这套页面按线性顺序讲完整个项目,并且用一条真实示例贯穿全书:官方命令 dsh web(卷零)+ 用户消息「帮我列一下当前目录」(卷一)。每页开头的「示例轨迹」块展示该页代码的真实输入输出:从 apps/cli/src/bin.ts 入口出发,沿启动链走到 agent loop 的心脏(卷零、卷一),再按 cordis.patch.yml 的挂载顺序遍历每一个能力域(卷二),最后落笔工程支撑(卷三)。每一页都标注文件路径与行号

图 0全书结构

卷零 · 入口与组装(00-04):从 argv 到活插件树 00 bin.ts → 01 args 02 loadProfile → 03 boot 04 runProfile:树热更新 卷一 · 核心循环深读(05-17):一条消息的一生 + shell 旁支 05 脊柱 kick/turn 06 Session.append 07 Inbox → 08 preStep 09 buildRequest → 10 stream 11 step → 12-14 tools 15-17 旁支:shell 三件套 卷二 · 能力全景(20-34):按 cordis.patch.yml 挂载顺序遍历每个能力域 20 持久化 21 压缩 22 子代理 23 技能 24 目标 25 工作流 26 文件 27 终端 28 Web 29 审批 30 存储 31 设置 32 SDK/API 33 客户端/Python 34 工程支撑 线性阅读:00 → 34 依次读。卷一(05-17)是「心脏深读」,卷二(20-34)是「全身扫描」——每个能力域都回到心脏的连接点上。 卷二每页统一结构:cordis.patch.yml 挂载条目 → 包文件地图(真实行数)→ 与核心循环的连接点(inject/服务/事件)→ 关键代码行级解读 → 易错点。 能力域覆盖:bundles 里 78 个 insert 条目全部有归属章节;未挂进 base bundle 的能力(mcp、e2b、subagent-codex 等)在对应章节标注「可选挂载」。
图 0-1 · 全书结构:卷零启动链 + 卷一心脏深读 + 卷二能力全景(一域一章,线性覆盖)。

图 0开读前需要知道的三件事

① 一切皆插件。模型适配器、工具注册表、会话日志、agent loop 本身,全部是插件,全部能从配置替换。不存在特权内核。

② 模型可见 ⟺ 已记录。送进模型请求的内容必须能从 session log 重建——所以模型历史来自 deriveMessages() 对日志的投影,而不是任何内存对象(在 06/09 页你会看到它的行级实现)。

③ waterfall 事件必须调 next() 才委托;serial 事件没有 next();emit 是纯通知不可否决。这是所有扩展点代码的语法基础(08/10/14 页反复出现)。

图 0全书章节表

章节覆盖的代码
卷零 · 入口与组装00-04bin.ts / args.ts / profile.ts / boot() / runProfile——配置树如何变成活插件树
卷一 · 核心循环05-17agent.ts 心脏 / session 日志 / inbox / 请求折叠 / llm seam / tools 流水线 / shell 三件套
卷二 · 能力全景20-34持久化、压缩、子代理、技能、目标、工作流、文件、终端/LSP、Web、审批沙箱、存储查询、设置凭据、SDK/API、客户端/Python/Native、工程支撑——15 个能力域,覆盖 cordis.patch.yml 全部条目