夜雨聆风学习资料网

ARTICLE · 1179162

00 · 源码清单:你手上到底有什么

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
Electron 壳
lib/main.js
 490KB 主进程;dsh/desktop-runtime.json 是运行时清单
G:\dsh\resources\runtime\
捆绑运行时
Node 24.18.1、pnpm 11.7.0、office-skills(SKILL.md 实例)
C:\Users\<用户名>\.dsh\profiles\desktop\本机正在跑的装配package.json
 + cordis.yml + cordis.patch.yml 三层配置
C:\Users\<用户名>\.dsh\
用户数据
sessions/
、storages/、外部插件目录
G:\dsh\plugin hub\
插件 hub
当前为空
(见第 09 篇)

这是真实 TypeScript 源码,不是反编译产物。package.json 里能看到 git 仓库路径(github.com/deepseek-ai/deepseek-harness),包目录对应 packages/core/* 这样的工作区布局。

统计口径:195 个包,全部有 src/ 与 README.md;源码文件总数约 700+ 个 .ts。


一、内核与宿主(16 个)

Cordis 框架本身 + DSH 的启动装配。这一组回答"Harness 是怎么被拉起来的"。

包
它做什么
源码文件
cordis
元框架:插件的加载、生命周期、作用域
9
cordis-plugin-loader
插件加载器 —— 装配的主干
7
cordis-plugin-group
嵌套插件组
1
cordis-plugin-include
在配置里 include 其他文件
1
cordis-plugin-timer
定时器服务
1
cordis-plugin-hmr
热重载(开发用)
2
dsh-app-boot启动胶水
:加载 .env、Loader 守卫、配置解析、启动序列
3
dsh-base核心 bundle
:每个 profile 的第一层补丁,往空 profile 上插基础插件行
2
dsh-cmdline
命令行参数从启动器交给应用插件
2
dsh-headless一次性 bundle
:无 Host/HTTP/浏览器,直接跑 Agent/Session
3
dsh-home-paths$DSH_HOME
 等路径helper
2
dsh-invariants
运行时不变式注册表
2
dsh-launch-environment
记录每个值由哪一层提供的启动环境
2
dsh-scope作用域原语
:scope 标签 + 按 scope 过滤的事件分发
4
dsh-time-context
可选的每步上下文:当前时间与已耗时
4
dsh-tmux-context
可选的每步上下文:本 agent 的 tmux 位置
2

dsh-base 的描述值得反复读:"every profile's first patch layer, inserting the base plugin rows over the empty profile root" —— 它是往空 profile 上贴的第一层,这就是"由浅入深"的字面含义。


二、agent 与循环(12 个)

包
它做什么
源码文件
dsh-agent-loop主循环本体
,6 个文件,agent.ts 是核心
6
dsh-agent
Agent 接口、注册表、发起者作用域、事件词汇
8
dsh-system-prompt
系统提示词组装注册表
2
dsh-agent-instructions
工作区指令文件加载器(AGENTS.md / CLAUDE.md)
7
dsh-agent-presets
从 preset cordis.yml 做每会话的 agent 组合
9
dsh-agent-tool-presentation
工具呈现方式选择:Code Mode / 原生 / 两者
2
dsh-agent-default-model
各入口共享的默认模型选择
2
dsh-persona
部署级 persona 段落
2
dsh-plan-mode
计划模式:引导 + 斜杠命令 + 用户审阅退出
4
dsh-timeout
零依赖超时原语(只计时与分类,不终止)
2
dsh-tool-call-timeout-policy
工具级 deadline,超时返回 TOOL_TIMEOUT
2
dsh-client-ui-agent-preset
preset 的 UI 面:默认值、本会话席位、组合编辑器
7

三、会话与记忆(16 个)—— 「记忆力」在这里

这一组是用户问的"记忆"的主场。注意 dsh-session 的描述:"Event-sourced session store" —— 事件溯源。

包
它做什么
源码文件
dsh-session事件溯源会话存储
,核心
10
dsh-session-persistence
持久化抽象缝(ctx.sessionPersistence)
6
dsh-session-persistence-jsonl
JSONL 持久化后端
7
dsh-session-projection投影
:可合并扩展的投影类型表,提供当前整值
3
dsh-session-projection-cache
持久化投影缓存:写后延迟 + 冷读阶梯
3
dsh-session-query
会话查询服务契约(读取、trace、过滤)
11
dsh-session-query-sqlite
SQLite FTS5 全文检索后端
4
dsh-session-checkpoint-policy语义检查点
:模型请求前与工具副作用前的持久化
2
dsh-session-reference
跨会话快照引用 + 不可信模型上下文
7
dsh-session-stats
全日志计数与墙钟时间投影
5
dsh-session-title
 (+ -first-prompt-llm / -llm)
会话标题生成
5+2+2
dsh-session-telemetry
 / -otel
遥测接缝与 OTel 后端
3+2
dsh-session-log-export
会话日志导出
5

四、技能与工具(33 个)

包
它做什么
源码文件
dsh-tools工具注册表与执行流水线
,10 个文件
10
dsh-tool-fs
read / write / edit
12
dsh-tool-fs-search
glob / grep(用打包的 ripgrep)
7
dsh-tool-bash
 / -bash-persistent
bash,后者是 PTY 常驻
4+2
dsh-tool-pwsh
PowerShell
4
dsh-tool-subagent
子代理委派
2
dsh-tool-subagent-control
send_message / interrupt_agent / list_agents
3
dsh-tool-subagent-report
子代理回报
2
dsh-tool-skill技能加载工具
2
dsh-tool-workflow
 / -ralph
编排脚本 / 全新 agent 循环
3+2
dsh-tool-goal
 / -todo
目标 / 待办
4+4
dsh-tool-web
web_search / web_fetch
4
dsh-tool-ask-user问人
2
dsh-tool-jobs
后台任务控制
2
dsh-tool-cordis自省运行时
:检查 live runtime、挂载/卸载模型写的插件
8
dsh-skill
技能 provider 注册表
2
dsh-skill-filesystem本地文件系统技能 provider
2
dsh-skill-badge
内置徽章技能
2
dsh-mcp-client
MCP 客户端桥:连接 MCP server 并注册其工具
5
dsh-compaction-tool-result-pruner
见下一节
4
dsh-repeat-tool-reminder
重复调用同一工具时的提醒
2
其余 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
各平台后端:bwrap / landlock / macOS Seatbelt / Windows ACL,功能探测,失败即拒
dsh-sandbox-windows-acl
Windows 受限令牌实现
dsh-sandbox-policy每次调用的策略解析
:部署缺省 + 本会话模式 + 工作区根
dsh-permission-presets
用户可选的权限预设,把沙箱模式与审批策略捆在一起
dsh-user-approval
审批缝:一次性授权,fail-closed
dsh-user-questions
问人的缝
dsh-fs-sandbox
 / dsh-bash-sandbox / dsh-pwsh-sandbox
各自能力的沙箱强制实现
dsh-fs
文件系统缝(词汇 + ctx.fs 服务 + fs/* 事件词汇)
dsh-fs-local
本地实现
dsh-fs-observation-policy
读前必读、版本守卫写入 —— 经 fs/* 事件门加,不走服务 API
dsh-credentials
 / -local
凭据缝:设置只存引用,provider 持有真值

六、压缩与溢出管理(7 个)

包
它做什么
dsh-compaction
压缩服务抽象缝
dsh-compaction-basictoken 计驱动
的压缩策略 + LLM 摘要后端
dsh-token-meter可重放
的 token 计量服务(10 文件)
dsh-spill
 / -local / -policy
工具结果超长时存盘,只回预览 + 取回定位
dsh-output-retention
有界保留:保留什么、省略什么都要说清

运行时清单里还有 compaction-image-offload 与 compaction-tool-result-pruner,后者已装在本机。


七、子代理与并行(13 个)

包
它做什么
dsh-subagent子代理缝
(18 个源码文件,本组最大),命名 provider 注册表
dsh-subagent-spawn-in-process
spawn 后端:全新子 agent
dsh-subagent-fork-in-process
fork 后端:以父代理日志的前缀为种子
dsh-subagent-in-process-driver
两种后端共用的驱动
dsh-workflow
工作流缝:ctx.workflowEngine
dsh-workflow-worker-thread
worker 线程执行编排脚本,把 agent() 桥回 ctx.subagents
dsh-code-runtime
 / -worker-thread
代码执行缝
dsh-jobs
 / -local
后台任务注册表(共享 id、属主隔离、轮询、取消)
dsh-client-ui-subagent
 / -jobs / -workflow-run
三者的 UI 面

八、模型接入(5 个)

包
它做什么
dsh-llmprovider 中立的 LLM 服务接口
(14 文件)
dsh-llm-deepseek
DeepSeek chat-completions 适配器
dsh-llm-pi-ai
pi-ai 驱动的 DeepSeek 适配器(描述说是"设计验证双胞胎")
dsh-llm-retry
按 provider 路由的重试策略
dsh-api-remotes
远程 BFF 组装与 Agent/Session 查找策略

九、文件、工作区与终端(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 · 总览:三层进程与一次提问的旅程

相关学习资料