旧的 examples/ 树——可运行演示叶子(acp-agent、headless-agent、jsonrpc-agent、web-cordis、web-schedule)架在 packages/examples 演示包(acp-demo、jsonrpc-demo)之上——已被删除(commit 4125514a08)。演示不再是独立的一棵树,而是落在三处:
- CLI 配置覆盖层——
apps/cli/config/examples/随产品交付一些可选用补丁,用dsh web --patch/dsh --profile web --patch叠到产品 Web 组合上。 - 测试配置——
apps/cli/tests/profiles/是集成测试树,端到端启动真实的交付dsh配置(acp、headless、sdk)。 - 应用 bundle——可运行产品是新的
packages/bundle/acp-app(dsh --profile acp)、bundle/sdk-app(dsh --profile sdk)与独立的bundle/sdk-minimal,由packages/boot/app-boot/src/profile.ts里的配置模板叠在dsh-base之上。
packages/examples/ 如今只保留一个包:agent-spine-demo。
CLI 配置覆盖层(apps/cli/config/examples/)
这些是叠在交付 Web 组合(dsh-base + dsh-web-app bundle 层)之上的补丁覆盖层——「不是树」:dsh web --patch <file> 在同一个 include 级别再应用一个兄弟补丁列表,而补丁会整体替换目标行的 config。据 apps/cli/tests/profiles/AGENTS.md,它们是产品资产,不是测试夹具。
| 覆盖层 | 文件 | 演示内容 |
|---|---|---|
cordis/ | cordis.yml | 移到这里来的自指 Cordis 工具演示:插入 @deepseek-ai/dsh-cordis-host-runner + @deepseek-ai/dsh-tool-cordis;把 webserver 钉在端口 3081,避开默认 3080 |
github-review/ | cordis.yml + github-ready-review-rule.mjs | 可选用 GitHub webhook 覆盖层:dsh-webhook + dsh-webhook-github(第二个 webserver 隔离在自己的 realm,端口 DSH_GITHUB_WEBHOOK_PORT ?? 3081)+ 一个本地规则模块,注册 kind: 'github' 的 webhook 规则:PR 变为 ready_for_review 时启动一个只读 Workspace Session 评审 |
mcp-memory/ | memorix.cordis.yml、mcp-reference-memory.cordis.yml、engram.cordis.yml | 经 @deepseek-ai/dsh-mcp-client 连接外部记忆系统的三个默认关闭参考配置(Memorix 1.3.0、@modelcontextprotocol/server-memory 2026.7.4、Engram 1.20.0);DSH 启动 stdio 子进程 / 连接 HTTP 服务,但不安装或监管它 |
schedule/ | cordis.yml | 可选用 Schedule 覆盖层:插入 dsh-time-context + dsh-schedule 并启用 ui-schedule,模型可用 schedule_create/list/delete,时间上下文带 IANA 时区 |
mcp-memory 的运行命令如今是:
dsh web --patch "$PWD/apps/cli/config/examples/mcp-memory/memorix.cordis.yml"
# 或 mcp-reference-memory.cordis.yml,或 engram.cordis.yml测试配置(apps/cli/tests/profiles/)
apps/cli/tests/profiles/AGENTS.md:这棵树拥有交付 dsh 配置的跨包行为,而 config examples 是产品资产、不是夹具。
acp/—cordis.yml(叠在交付acp配置上的 ACP 快照录制补丁:带视觉模型的llm-deepseek、由DSH_PERMISSION_MODE驱动的sandbox-policy/approval、JSONL 会话)加无密钥 ACP e2e 套件(tests/):acp、cleanup、control-surface、escalation、goal、hooks、image-offload——旧examples/acp-agent/tests/snapshots/故事的直接继任者。headless/—cordis.yml(一次性组合基底:settings-file、credentials-local、官方 DeepSeek 扩展、agent spine、goal、retry…)外加九个录制会话覆盖层(*.cordis.snapshot.yml:credentials、goal、retry、semantic-checkpoint、subagent-diagnostic/inheritance/settlement、team、workspace-context-resume)——examples/headless-agent的继任者。产品运行方式不变:shpnpm dsh --profile headless "fix the failing test in this workspace"sdk/—keyless-smoke.e2e.ts(+fixtures/)以--profile sdk启动 bin,在无模型凭据的情况下验证 JSON-RPC 表面。
应用 bundle(packages/bundle/acp-app、sdk-app、sdk-minimal)
可运行的演示产品如今是真正的配置 bundle。packages/boot/app-boot/src/profile.ts(PROFILE_TEMPLATES)的映射:
| 配置 | Bundle 栈 | 说明 |
|---|---|---|
acp | dsh-base + dsh-acp-app | 纯自动化的 ACP,走 JSON-RPC stdio;cordis.patch.yml 禁用 session-title-llm,插入 acp-app-startup + acp(provider: deepseek-official、model: deepseek-v4-flash) |
sdk | dsh-base + dsh-sdk-app | stdio JSON-RPC 伺服与进程生命周期(sdk-app-startup 带 profile: sdk + sdk-jsonrpc-server) |
sdk-minimal | 仅 dsh-sdk-minimal | 完整独立树——sdk-jsonrpc-server、单个 DeepSeek 适配器、持久 shell、str_replace_editor、JSONL 会话——故意不叠在 dsh-base 上 |
headless | dsh-base + dsh-headless | 一次性编码 agent,stdout 格式纯净(缝未变,如今从 apps/cli/tests/profiles/headless/ 被演练) |
首次使用把模板具现为 $DSH_HOME/profiles/<name>(pnpm-workspace.yaml、cordis.patch.yml、dsh.profile.bundles),此后可用 dsh plugin --profile <name> add <package> 扩充。ACP 测试在 apps/cli/tests/profiles/acp/。
dsh --profile acp # 启动 ACP bundle
dsh --profile sdk # 启动 SDK JSON-RPC bundle
dsh --profile sdk-minimal # 独立最小 SDK 树packages/examples/:只剩 spine
packages/examples/ 只保留 agent-spine-demo(@deepseek-ai/dsh-agent-spine-demo)——「作为单个 Cordis bundle 插件的默认无执行器、无 UI agent spine:固定服务集、具体循环,以及应用包靠加入口与后端来组合的模型面向消费者」。acp-demo 与 jsonrpc-demo 已删除(其角色并入 dsh-acp-app 与 dsh-sdk-app bundle)。
agent-spine-demo:即「spine」
spine 是共享的、无执行器、无 UI 的 agent bundle——公共服务、后台任务注册表与控制、可选持久化目标、具体 agent 循环、本地 skill 与 agent-instructions provider、模型面向的 shell/skill 消费者。部署方仍自行选择 LLM 适配器、bash 执行器与呈现。它挂载 dsh-llm、dsh-session、dsh-system-prompt、dsh-tools、dsh-skill + dsh-skill-filesystem、dsh-agent、dsh-goal + dsh-goal-round-driver、dsh-jobs-local、dsh-invariants(带四个核心同伴)、dsh-agent-loop 与 dsh-llm-retry——外加 dsh-tool-bash、dsh-tool-skill、dsh-tool-jobs,以及经 dsh-agent-instructions 获得的工作区上下文。
// packages/examples/agent-spine-demo/src/index.ts(摘录)
export const name = 'agent-spine-demo'
// …imports Timer, LlmRuntime, SessionStore, SessionTitleService, SystemPrompt,
// ToolRuntime, SkillRegistry, AgentRegistry, GoalService, LocalJobRegistry,
// InvariantRegistry + invariant companions, AgentLoop, llmRetry, …该插件刻意只暴露具名导出——Loader 的默认解包会丢掉它的 Config schema(见 docs/postmortem/0001-acp-default-export-drops-inject.md)。
本版本的根脚本
旧的 demo:acp / demo:cordis / demo:code-mode 脚本已删除。根 package.json 只剩两个 demo:* 脚本:
"demo:ptc": "node scripts/demo-ptc.mjs",
"demo:inspector":"node --import tsx/esm apps/cli/src/bin.ts web --patch ./packages/experimental/inspector/cordis.source.patch.yml",
"mock:llm": "node --import tsx packages/test-support/llm-mock-server/src/bin.ts"demo:ptc经托管的 PTC 模式组合(dsh --profile headless且DSH_TOOLS_MODE=ptc)跑一次 headless 任务;需要模型凭据。demo:inspector带实验性 inspector 覆盖层启动 web 配置。mock:llm启动可脚本化 LLM 故障服务器,供本地恢复测试使用(不变)。
版本表
延伸阅读
- 测试策略 — 启动
apps/cli/tests/profiles/*的配置 e2e 套件。 - Vendored 库 — 每个
cordis.yml加载的 Cordis 框架。 - Agent Client Protocol(ACP) —
dsh --profile acp伺服什么。 apps/cli/tests/profiles/AGENTS.md— 配置测试树约定。packages/boot/app-boot/src/profile.ts—PROFILE_TEMPLATES,权威的配置→bundle 映射。packages/examples/agent-spine-demo/README.md— spine 包的配置表面。docs/postmortem/0001-acp-default-export-drops-inject.md— spine 为何用具名导出。