Skip to content

工作区

dsh 是在根 package.json 中声明的 pnpm 工作区:

json
"workspaces": [
  "vendor/*",
  "packages/*/*",
  "native/landlock-run",
  "native/landlock-run/packages/*",
  "apps/*",
  "website"
]

这里可见三种结构性模式:

  • packages/*/*——产品本体,组织为 packages/<group>/<pkg>,即「一组包」的直观形态。
  • vendor/*——内嵌的框架层(Cordis 及其伙伴),行为上像一个独立层级。
  • apps/*native/...websiteexamplespython——产品组装物与部署根。

顶层布局

apps/         产品启动器:`cli`(`dsh` 二进制)与 `web`(前端)
docs/         官方 VitePress 文档站(上游)
examples/     可运行演示,每个接口一个目录(headless、jsonrpc、mcp、acp…)
native/       原生代码:`landlock-run` 及其按平台拆分的包
packages/     产品层——49 个组目录
python/       Python SDK 及其运行时
scripts/      仓库工具(门禁、生成器、发布)
vendor/       源码内嵌的 Cordis 框架与基础库
website/      另一个 docs/VitePress 入口(`@deepseek-ai/website`)

packages 层:49 个组

按目录统计,packages/ 下共有 49 个组目录;解析 packages/*/*/package.json glob 得到 219 个 包层包——这正是首页「One command, 219 packages」标题背后的精确数值。本 commit 下可复现的数值是 49 个组、219 个包层项目,加上 apps/vendor/native/examples/website/python 后共 237 个 工作区成员。各组及其角色:

一行角色
coreagent 主循环、会话、scope、工具注册表、系统提示词
sessionSessionEvent 日志、会话领域、投影/引用材料
context喂入模型可见历史的上下文来源
compaction把长日志整理成摘要上下文
sandbox限制后端、沙箱策略、文件系统观测
fs文件系统服务、本地/沙箱提供商、文件系统工具
shellbash/pwsh 能力接缝与工具(典型接缝示例)
llmLLM 服务、DeepSeek 提供商、Token 计量
apiAPI 网关与 remotes(Host↔Client RPC)
hostHost 平台:webserver、frontend-static、apiproxy
client浏览器/运行时一侧与每个 UI 模块(ui-*
sdkJSON-RPC SDK:clientserverprotocol
subagent子代理能力接缝及其众多提供商
workflow工作流/worker-thread 编排
goal同会话目标与目标轮次驱动
plan计划模式
skill技能注册表、文件系统技能、tool-skill
mcpMCP 客户端
lspLSP 集成
acpAgent Client Protocol 服务器端
hooksClaude Code / Codex hooks 桥
storage持久化后端
settings设置服务
credentials凭据存储
guard超时 / 重复提醒守卫
feedback用户反馈采集
identity节点身份 / 会话身份
interaction运行时的命令、提问、审批
jobs后台任务服务
schedule持久提醒
spill上下文溢出(spill)
attachment消息附件
bundle组合束:baseweb-appheadless
boot启动胶水与命令行:app-bootcmdline
code-runtime代码执行运行时
e2bE2B 提供商
examples额外的示例/演示包
extensions额外扩展点
runtime-diagnostics运行时诊断工具
test-support测试框架、mock LLM 服务器
typert类型反射 / 代码生成器
util小型共享工具(home-pathstimeoutbrand…)
webweb/搜索能力工具(tool-webweb-fetch-http、搜索提供商)
workspace工作区模型(根、选择)
presetagent preset 组合
session-query会话上的查询/日志导出
subprocess进程派生
terminal持久终端(PTY)后端
todotodo 工具

(有些组把面向模型的工具放进兄弟组——例如 todo/tool-todosession-query/tool-session-query——而 非内联,这就是为什么用一行给出某个组的角色只是近似。docs/module-graph.md 是生成的、权威的依赖图。)

其余层级

packages/ 之外,工作区还包含:

成员角色
apps/cli@deepseek-ai/dsh)、web@deepseek-ai/dsh-web-frontenddsh 启动器与浏览器前端构建
vendor/9 个包(cordisloaderincludegrouphmrtimerlogger-consolecosmokitschemastery源码内嵌框架,重命名进 @deepseek-ai 作用域
native/landlock-run + Linux arm64/x64 平台包 + entryLandlock 沙箱启动器
examples/headless-agentjsonrpc-agentmcp-memoryweb-cordisweb-scheduleacp-agent可运行演示
website/@deepseek-ai/website文档站
python/sdk-runtimePython SDK 分发/部署根

vendor 层对读者而言或许是意义最大的层:产品中任何一处 importcordis,实际解析为 vendor/cordis 下的 @deepseek-ai/cordis,因此框架本身也是本仓库中一个固定、带差异防护的部分(参见内嵌(Vendor)库)。

命名约定

每个产品包都是 @deepseek-ai/dsh-<name>——即 harness 家族。值得注意的是:

  • CLI 包就叫 @deepseek-ai/dsh(无后缀),根清单是 @deepseek-ai/dsh-root,前端是 @deepseek-ai/dsh-web-frontend
  • 内嵌框架使用同样的作用域,但使用不同的家族标记:@deepseek-ai/cordis@deepseek-ai/cordis-plugin-loader 等,让 harness 包(dsh-*)与托管的框架(cordis-*)在视觉上区分开来。
  • 在同一组内,包共享 dsh- 前缀并常有角色后缀:@deepseek-ai/dsh-tool-bash@deepseek-ai/dsh-bash-local@deepseek-ai/dsh-bash-sandbox

一个能力接缝 → 若干包

命名是更深层组织原则的症状:一个能力接缝对应多个包,每包一个角色。 位于 packages/shell/ 的 bash/shell 接缝是典型示例:

角色
@deepseek-ai/dsh-shell服务定义——ShellExecutorctx.shell)+ 词汇
@deepseek-ai/dsh-bash-local服务提供商——本地子进程
@deepseek-ai/dsh-bash-sandbox服务提供商——同样的机制,经由 ctx.sandbox 限制
@deepseek-ai/dsh-tool-bash消费者——面向模型的 bash 工具

这正是 docs/architecture.md 中「服务定义 / 提供商 / 消费者」三角色模式,它在整个 monorepo 中反复 出现:子代理(定义 subagent/subagent、提供商 subagent-*、消费者 tool-subagent)、文件系统 (fs/fsfs/fs-local + fs/fs-sandboxfs/tool-fs)、LLM(llm/llmllm-* 提供商、无常设 工具)。一个包可以合并角色,但单独一个角色并非接缝——这就是仓库往往在一个组里放多个小包而非一个肥大包的 原因。

这些数字从何而来

两个生成文件给出了结构的可验证基准:

  • docs/module-graph.md —— 从每个包的 peerDependencies 推导的包间依赖图,并按 packages/<group>/<pkg> 分组。
  • docs/graph-atlas.md —— 关系图的索引(模块图、工具目录、能力接缝、应用组合、事件矩阵、生命周期)。

pnpm run gen-module-graph 重新生成模块图;用 pnpm run verify-module-graph 验证。apps/cli/composition.md 文件渲染了 CLI 组合后的 dsh-base 共享 profile。

延伸阅读