ARTICLE · 1179162
00 · 源码清单:你手上到底有什么
这篇是导航表,不是教程。先扫一眼知道 195 个包怎么分堆,后面每篇专题文档会从这里取材。 盘点方式:读每个包的
package.json的description与README.md首行,并统计src/下.ts文件数(不含.d.ts)。
材料在哪
C:\Users\<用户名>\.dsh\profiles\node_modules\@deepseek-ai\ | 195 个已安装包 | src/(TypeScript 源码)、lib/(编译产物)、README.md |
G:\dsh\resources\app.asar | lib/main.jsdsh/desktop-runtime.json 是运行时清单 | |
G:\dsh\resources\runtime\ | ||
C:\Users\<用户名>\.dsh\profiles\desktop\ | 本机正在跑的装配 | package.jsoncordis.yml + cordis.patch.yml 三层配置 |
C:\Users\<用户名>\.dsh\ | sessions/storages/、外部插件目录 | |
G:\dsh\plugin hub\ | 当前为空 |
这是真实 TypeScript 源码,不是反编译产物。package.json 里能看到 git 仓库路径(github.com/deepseek-ai/deepseek-harness),包目录对应 packages/core/* 这样的工作区布局。
统计口径:195 个包,全部有 src/ 与 README.md;源码文件总数约 700+ 个 .ts。
一、内核与宿主(16 个)
Cordis 框架本身 + DSH 的启动装配。这一组回答"Harness 是怎么被拉起来的"。
cordis | ||
cordis-plugin-loader | ||
cordis-plugin-group | ||
cordis-plugin-include | ||
cordis-plugin-timer | ||
cordis-plugin-hmr | ||
dsh-app-boot | 启动胶水.env、Loader 守卫、配置解析、启动序列 | |
dsh-base | 核心 bundle | |
dsh-cmdline | ||
dsh-headless | 一次性 bundle | |
dsh-home-paths | $DSH_HOME | |
dsh-invariants | ||
dsh-launch-environment | ||
dsh-scope | 作用域原语 | |
dsh-time-context | ||
dsh-tmux-context |
dsh-base的描述值得反复读:"every profile's first patch layer, inserting the base plugin rows over the empty profile root" —— 它是往空 profile 上贴的第一层,这就是"由浅入深"的字面含义。
二、agent 与循环(12 个)
dsh-agent-loop | 主循环本体agent.ts 是核心 | |
dsh-agent | ||
dsh-system-prompt | ||
dsh-agent-instructions | AGENTS.md / CLAUDE.md) | |
dsh-agent-presets | cordis.yml 做每会话的 agent 组合 | |
dsh-agent-tool-presentation | ||
dsh-agent-default-model | ||
dsh-persona | ||
dsh-plan-mode | ||
dsh-timeout | ||
dsh-tool-call-timeout-policy | TOOL_TIMEOUT | |
dsh-client-ui-agent-preset |
三、会话与记忆(16 个)—— 「记忆力」在这里
这一组是用户问的"记忆"的主场。注意 dsh-session 的描述:"Event-sourced session store" —— 事件溯源。
dsh-session | 事件溯源会话存储 | |
dsh-session-persistence | ctx.sessionPersistence) | |
dsh-session-persistence-jsonl | ||
dsh-session-projection | 投影 | |
dsh-session-projection-cache | ||
dsh-session-query | ||
dsh-session-query-sqlite | ||
dsh-session-checkpoint-policy | 语义检查点 | |
dsh-session-reference | ||
dsh-session-stats | ||
dsh-session-title-first-prompt-llm / -llm) | ||
dsh-session-telemetry-otel | ||
dsh-session-log-export |
四、技能与工具(33 个)
dsh-tools | 工具注册表与执行流水线 | |
dsh-tool-fs | ||
dsh-tool-fs-search | ||
dsh-tool-bash-bash-persistent | ||
dsh-tool-pwsh | ||
dsh-tool-subagent | ||
dsh-tool-subagent-control | ||
dsh-tool-subagent-report | ||
dsh-tool-skill | 技能加载工具 | |
dsh-tool-workflow-ralph | ||
dsh-tool-goal-todo | ||
dsh-tool-web | ||
dsh-tool-ask-user | 问人 | |
dsh-tool-jobs | ||
dsh-tool-cordis | 自省运行时 | |
dsh-skill | ||
dsh-skill-filesystem | 本地文件系统技能 provider | |
dsh-skill-badge | ||
dsh-mcp-client | ||
dsh-compaction-tool-result-pruner | ||
dsh-repeat-tool-reminder | ||
dsh-commands / dsh-command-* / dsh-client-ui-commands / dsh-native-command |
五、沙箱与权限(16 个)
Windows 上沙箱的具体实现在 dsh-sandbox-windows-acl(12 个源码文件,受限令牌 + capability-SID 写白名单)。
dsh-sandbox | SandboxProvider 契约 |
dsh-sandbox-local | |
dsh-sandbox-windows-acl | |
dsh-sandbox-policy | 每次调用的策略解析 |
dsh-permission-presets | |
dsh-user-approval | |
dsh-user-questions | |
dsh-fs-sandboxdsh-bash-sandbox / dsh-pwsh-sandbox | |
dsh-fs | ctx.fs 服务 + fs/* 事件词汇) |
dsh-fs-local | |
dsh-fs-observation-policy | fs/* 事件门加,不走服务 API |
dsh-credentials-local |
六、压缩与溢出管理(7 个)
dsh-compaction | |
dsh-compaction-basic | token 计驱动 |
dsh-token-meter | 可重放 |
dsh-spill-local / -policy | |
dsh-output-retention |
运行时清单里还有
compaction-image-offload与compaction-tool-result-pruner,后者已装在本机。
七、子代理与并行(13 个)
dsh-subagent | 子代理缝 |
dsh-subagent-spawn-in-process | |
dsh-subagent-fork-in-process | |
dsh-subagent-in-process-driver | |
dsh-workflow | ctx.workflowEngine |
dsh-workflow-worker-thread | ctx.subagents |
dsh-code-runtime-worker-thread | |
dsh-jobs-local | |
dsh-client-ui-subagent-jobs / -workflow-run |
八、模型接入(5 个)
dsh-llm | provider 中立的 LLM 服务接口 |
dsh-llm-deepseek | |
dsh-llm-pi-ai | |
dsh-llm-retry | |
dsh-api-remotes |
九、文件、工作区与终端(12 个)
dsh-fs(缝)· dsh-fs-local · dsh-atomic-write(排他创建 + rename 保留权限)· dsh-storage / -domain / -json(后端注册表 + schema 校验的 KV 域)· dsh-workspace(工作区实体注册表)· dsh-attachment / -local(内容寻址)· dsh-terminal / -bash(常驻 PTY)· dsh-subprocess / -local(托管进程组 + 有界输出 + 升级 kill)
十、Web 与传输(14 个)
dsh-host-webserver(2 文件,"knows no harness concepts" —— 只管路由)· dsh-host-frontend-static(SPA dist 服务)· dsh-client-connection(HTTP 上行 / WebSocket 下行,双流重连)· dsh-client-web(Web shell kernel)· dsh-client-modules(双面模块系统)· dsh-web(搜索/抓取 provider 注册表)· dsh-web-search-deepseek · dsh-typert-*(远程元数据)· dsh-web-app / -frontend
十一、客户端 UI(23 个)
dsh-client-runtime(43 文件,SlotRegistry + SessionRuntime)· dsh-client-ui-conversation(43 文件)· dsh-client-ui-slots · -primitives · -layout · -sidebar · -theme · -trajectory · -tool · -conversation · -input-trigger · -settings* 若干
十二、配置与遥测(3 个)
dsh-settings(缝)· dsh-settings-file(settings.yaml)· dsh-anonymous-user-id
十三、其余(25 个)
其他能力:dsh(CLI 入口:profile 启动 + 插件管理)、dsh-goal / -round-driver、dsh-schedule、dsh-shell / -env、dsh-pwsh-local / dsh-bash-local、dsh-cordis-host-runner / -client-runner(动态双面插件)、dsh-host-apiproxy(42 文件)、dsh-host-directory-picker*、dsh-message-feedback、schemastery(类型驱动 schema 校验)、cosmokit、dsh-brand、node-addon-landlock-run。
一个贯穿全局的设计习惯
几乎每个包都遵循同一套命名法,这本身就是要学的东西:
•缝(seam)包:只有接口,没有实现。如 dsh-fs、dsh-tools、dsh-llm、dsh-sandbox、dsh-subagent。
•实现包:后缀是 -local、-basic、-in-process。可以整包替换。
•缝挂在 ctx 上:ctx.fs、ctx.tools、ctx.sandbox、ctx.subagents、ctx.web、ctx.jobs、ctx.credentials —— 插件从 Context 上取能力,而不是互相 import。
•策略包:-policy、-presets、-observation-policy —— 决定"允不允许",不执行。
•投影(projection):session 包的一整族。事件日志 → 当前状态的读模型。
本次未展开阅读的包
以下包本次只登记了描述、未读源码,后续专题可能覆盖也可能不覆盖:
dsh-client-runtime、dsh-client-ui-conversation 与其余 20 个 UI 包、dsh-host-apiproxy(42 文件)、dsh-cordis-client-runner、dsh-workflow-worker-thread、dsh-typert-*、dsh-host-directory-picker-*、dsh-client-modules、dsh-session-log-export、dsh-schedule、dsh-skill-badge、cosmokit、schemastery、node-addon-landlock-run、dsh-brand。
未读的 195 个包里,没有一个因为"不重要"被跳过 —— 只是与本轮 9 个专题无直接关系。
下一篇 → 01 · 总览:三层进程与一次提问的旅程















































































