DeepSeek Harness 源码解析(一):从代码补全到仓库级 Agent
从一个取消导出的修复任务出发,比较代码补全、对话助手与 Coding Agent,解释 Harness 如何组织仓库上下文、工具执行和会话记录,再对照 DeepSeek Harness 固定源码建立阅读入口。
按源码与调用链研究 DeepSeek Harness:从插件运行时、模型与工具,到会话、权限、多 Agent、界面及工程验证。
这个系列面向希望理解 Coding Agent 实现的开发者。先从背景与完整请求链路建立认识,再逐项阅读服务、事件、配置、状态和失败处理;各篇会记录对应的源码版本与验证边界。
从开篇:从代码补全到仓库级 Agent了解 Harness 的职责,再读第二篇:一次用户请求如何经过整个 dsh 系统,沿输入、模型、工具、日志和输出追踪完整链路。随后读第三篇:源码目录、包依赖与文档地图,学习怎样从一个调用点追到接口、实现和装配配置。接着读第四篇:CLI、Web、Desktop 与 SDK 如何组装同一套运行时,比较配置层、应用启动、任务输入、就绪与退出边界。
第五篇:Context、Service 与依赖注入如何协作开始阅读 Cordis 运行时,从工具插件缺少文件系统服务的情况出发,解释服务注册、依赖激活、服务域隔离和调用方 Context。
第六篇:类型声明如何接上服务注册接着解释编辑器怎样认识 ctx.fs,区分声明合并、类型导入、运行时挂载与发布声明,并用独立语言实验、真实 Cordis 生命周期和本地 tarball 消费验证它们的差异,同时演示类型入口的排查方法。
第七篇:五种事件派发怎样执行监听器比较 emit、parallel、serial、bail 与 waterfall 的执行、等待、返回值和异常处理,再追踪监听器过滤、派发快照与重入,并附固定源码的聚焦实验。
第八篇:effect、Fiber 与 Scope 怎样清理资源追踪资源登记、逆序释放、Fiber 卸载与 Scope 退出,解释单个 effect 内的等待顺序和多个兄弟 effect 的并行清理。
第九篇:Loader 怎样把配置变成运行中的插件追踪配置树、表达式求值、volatile 引用、服务隔离、Include 读写与 dsh HMR,区分配置已保存、实例已更新和资源已清理,并附 28 组聚焦实验。
第十篇:Agent、AgentHandle 与实例所有权进入 Agent 生命周期,解释 setup、创建公告、调用方与工厂的清理责任,以及回滚、恢复和迟到资源的处理。
第十一篇:Preset、Persona 与默认模型怎样生效区分能力组合、身份提示词和会话模型选择,追踪 Preset 修订保留、空白会话切换与组装快照,并附 30 组真实运行时实验。
后续篇章处于规划阶段,随源码研究继续拆分;已发布文章会加入本页目录。
| 篇章 | 主题 | 主要研究内容 |
|---|---|---|
| 01 | 导读与系统全貌 | 背景、请求链路、源码地图和应用入口 |
| 02 | Cordis 插件运行时 | 服务、事件、依赖、生命周期与配置 |
| 03 | Agent 与模型调用 | Turn、Step、流式响应、重试与取消 |
| 04 | Prompt 与上下文 | 指令、引用、工作目录与上下文压缩 |
| 05 | 会话与持久化 | 事件、投影、存储、恢复与格式迁移 |
| 06 | 工具系统与文件操作 | 工具注册、执行、文件编辑与大输出 |
| 07 | 进程、终端与安全边界 | Shell、沙箱、审批、凭据与远程执行 |
| 08 | 外部能力与资源 | Web、MCP、Skill、浏览器、附件与交付 |
| 09 | 多 Agent 与任务执行 | Subagent、后台 Jobs、PTC 与 Workflow |
| 10 | 计划、目标与人机协作 | Plan、Todo、Goal、Schedule 与用户交互 |
| 11 | Web Host 与客户端 | 远程调用、通信、状态、渲染与设置 |
| 12 | 应用、SDK 与原生运行时 | CLI、Desktop、SDK、原生组件与分发 |
| 13 | 实验能力 | Agent Teams、Hooks、Worktree 与实验运行时 |
| 14 | 验证、扩展与工程维护 | 测试、构建、文档同步、扩展与故障复盘 |
已发布篇目基于 DeepSeek Harness 0.2.1-alpha.2 的源码进行静态分析,开篇于 2026-10-14 重写。后续文章分别标明实际分析的版本号,并提供对应源码链接。结构分析、无密钥测试和真实模型实验分别标注,旧版本结果不作为新版本证据。
从一个取消导出的修复任务出发,比较代码补全、对话助手与 Coding Agent,解释 Harness 如何组织仓库上下文、工具执行和会话记录,再对照 DeepSeek Harness 固定源码建立阅读入口。
沿固定版本的源码追踪一次 dsh 请求:从浏览器提交、Host 校验和 Agent 入队,到模型调用、工具执行、会话日志及界面更新,配合可暂停和单步推进的数据流演示。
沿 read 工具寻找真正的文件读取实现,区分 DeepSeek Harness 的目录归属、包依赖与运行时服务关系,建立从文档、manifest、插件入口到具体实现的源码阅读路线。
沿 runCli、runProfile 与 Cordis Loader 追踪 DeepSeek Harness 的配置创建、分层覆盖、启动审查与退出,比较 Web、headless、Desktop 和 SDK 的任务通道 …
沿 ctx.fs 追踪 DeepSeek Harness 的 Cordis 服务解析,解释 Context 代理、Service 注册、inject 激活条件、服务域隔离和调用方追踪,并区分 Cordis 服务域与 …
沿 ctx.fs 追踪 DeepSeek Harness 的 Context 声明合并、类型导入、运行时注册与声明产物,通过 TypeScript 实验、真实 Cordis 生命周期与独立包消费,区分编译器看见字段和进程 …
沿 Cordis EventsService 追踪 emit、parallel、serial、bail 与 waterfall 的监听器选择、执行顺序、返回值、异常及清理,结合固定源码聚焦实验解释 fs 与 Agent …
沿固定源码追踪 Cordis effect 与 Fiber 的资源所有权、逆序与并发清理、异步初始化和失败,再解释 dsh Scope 的双重释放入口与 Agent Loop 的有序卸载。
沿着 EntryTree、配置表达式、volatile 引用、服务隔离与 dsh HMR,追踪一次配置变化怎样影响插件实例,并用 28 组固定源码实验核对完成边界。
从 AgentRegistry 追到真实 AgentLoop,解释 Agent 与销毁 handle 的区别、未发布 setup、创建公告、调用方与工厂所有权,以及取消、回滚和持久化句柄的清理边界。
从真实 Preset 注册表、Persona 和 Session Controller 追踪能力组合、修订保留、空白会话切换及模型选择,解释提示词和请求怎样使用同一次模型快照。