Skip to content

旧的 examples/ 树——可运行演示叶子(acp-agent、headless-agent、jsonrpc-agent、web-cordis、web-schedule)架在 packages/examples 演示包(acp-demo、jsonrpc-demo)之上——已被删除(commit 4125514a08)。演示不再是独立的一棵树,而是落在三处:

  1. CLI 配置覆盖层——apps/cli/config/examples/ 随产品交付一些可选用补丁,用 dsh web --patch / dsh --profile web --patch 叠到产品 Web 组合上。
  2. 测试配置——apps/cli/tests/profiles/ 是集成测试树,端到端启动真实的交付 dsh 配置(acp、headless、sdk)。
  3. 应用 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 的运行命令如今是:

sh
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 的继任者。产品运行方式不变:
    sh
    pnpm 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 栈说明
acpdsh-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)
sdkdsh-base + dsh-sdk-appstdio 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 上
headlessdsh-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/。

sh
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 获得的工作区上下文。

ts
// 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:* 脚本:

jsonc
"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 为何用具名导出。