Преглед изворни кода

fix(repo): close examples migration review gaps

Tianyi Cui пре 2 недеља
родитељ
комит
e73c8a9fce

+ 2 - 2
.agents/notes/implemented/simplification/2026-08-10-source-run-without-managed-installer.i18n.yaml

@@ -2,5 +2,5 @@
 # side as of the last confirmed-consistent state. Both languages carry equal authority;
 # after editing either side, bring the other along and re-record with:
 #   pnpm run verify-translation-pairing --write .agents/notes/implemented/simplification/2026-08-10-source-run-without-managed-installer.md
-2026-08-10-source-run-without-managed-installer.md: ce618c88327fc11ad0cad9042e171800a5492663
-2026-08-10-source-run-without-managed-installer.zh.md: 95dc669035bca5bd7d04fe6a7bb1eb073e0005a2
+2026-08-10-source-run-without-managed-installer.md: b9e86c3c325b41126576cbe5d5d1d53b71e80051
+2026-08-10-source-run-without-managed-installer.zh.md: 48c1fdb7cced6383e8870ab099dec5d181d5ccbf

+ 1 - 1
.agents/notes/implemented/simplification/2026-08-10-source-run-without-managed-installer.md

@@ -12,7 +12,7 @@ That lifecycle is not required to run or develop DeepSeek Harness from a source
 
 ## Decision
 
-The repository supports source execution through its root `pnpm` scripts. The `dsh` entry in `package.json` launches `apps/cli/src/bin.ts` directly through `node --import tsx/esm`; artifact generation is the separate `pnpm run build` operation defined by the [source-launch/build separation decision](2026-08-12-separate-source-launch-from-build.md). The package script forwards arguments and inherits the caller's environment, including `NODE_USE_ENV_PROXY=1` when a supporting Node version must honor `HTTP_PROXY` and `HTTPS_PROXY`. Users select Web with `pnpm dsh web` and headless execution with `pnpm dsh --profile headless "task"`. The independent ACP example remains available through `pnpm run demo:acp`.
+The repository supports source execution through its root `pnpm` scripts. The `dsh` entry in `package.json` launches `apps/cli/src/bin.ts` directly through `node --import tsx/esm`; artifact generation is the separate `pnpm run build` operation defined by the [source-launch/build separation decision](2026-08-12-separate-source-launch-from-build.md). The package script forwards arguments and inherits the caller's environment, including `NODE_USE_ENV_PROXY=1` when a supporting Node version must honor `HTTP_PROXY` and `HTTPS_PROXY`. Users select Web with `pnpm dsh web`, headless execution with `pnpm dsh --profile headless "task"`, and ACP automation with `pnpm dsh --profile acp`.
 
 The repository does not distribute a source installer, an installer test suite, or skills that assume a managed `current` symlink and timestamped staging worktrees. Users own source checkout placement, Git updates, and any launcher they create outside the repository.
 

+ 1 - 1
.agents/notes/implemented/simplification/2026-08-10-source-run-without-managed-installer.zh.md

@@ -12,7 +12,7 @@ Status: implemented
 
 ## 决策
 
-仓库通过根目录的 `pnpm` 脚本支持从源码运行。`package.json` 中的 `dsh` 项通过 `node --import tsx/esm` 直接启动 `apps/cli/src/bin.ts`;产物生成是独立的 `pnpm run build` 操作,由[源码启动与构建分离决策](2026-08-12-separate-source-launch-from-build.zh.md)规定。该包脚本会转发参数并继承调用方环境;当支持环境代理的 Node 版本必须遵循 `HTTP_PROXY` 和 `HTTPS_PROXY` 时,调用方可设置 `NODE_USE_ENV_PROXY=1`。用户使用 `pnpm dsh web` 选择 Web,使用 `pnpm dsh --profile headless "task"` 选择无头执行。独立的 ACP(Agent Client Protocol)示例仍可通过 `pnpm run demo:acp` 运行
+仓库通过根目录的 `pnpm` 脚本支持从源码运行。`package.json` 中的 `dsh` 项通过 `node --import tsx/esm` 直接启动 `apps/cli/src/bin.ts`;产物生成是独立的 `pnpm run build` 操作,由[源码启动与构建分离决策](2026-08-12-separate-source-launch-from-build.zh.md)规定。该包脚本会转发参数并继承调用方环境;当支持环境代理的 Node 版本必须遵循 `HTTP_PROXY` 和 `HTTPS_PROXY` 时,调用方可设置 `NODE_USE_ENV_PROXY=1`。用户使用 `pnpm dsh web` 选择 Web,使用 `pnpm dsh --profile headless "task"` 选择无头执行,并使用 `pnpm dsh --profile acp` 运行 ACP 自动化
 
 仓库不分发源码安装器、安装器测试套件,也不分发依赖受管理的 `current` 符号链接和带时间戳 staging worktree 的 skill。源码检出的存放位置、Git 更新,以及用户在仓库外创建的任何启动器均由用户负责。
 

+ 2 - 2
docs/user/guide/github-review.i18n.yaml

@@ -2,5 +2,5 @@
 # side as of the last confirmed-consistent state. Both languages carry equal authority;
 # after editing either side, bring the other along and re-record with:
 #   pnpm run verify-translation-pairing --write docs/user/guide/github-review.md
-github-review.md: 2f777acdd0e8b4996a29a0b78262b1ba3ff9188c
-github-review.zh.md: 7518a13f3d74801dbfb4d0810c89851f4616a2ef
+github-review.md: a104c1ec8d32d23ccbcb88a492ed2a9ede474c01
+github-review.zh.md: 4800dbc65c098e871573ac01d3904e6ab1b991f9

+ 3 - 3
docs/user/guide/github-review.md

@@ -25,7 +25,7 @@ printf '%s\n' "$DSH_GITHUB_WEBHOOK_SECRET"
 From a development checkout:
 
 ```sh
-export DSH_GITHUB_REVIEW_WORKSPACE=/Users/cty/deepseek-harness
+export DSH_GITHUB_REVIEW_WORKSPACE=/path/to/deepseek-harness
 pnpm dsh web --patch apps/cli/config/examples/github-review/cordis.yml
 ```
 
@@ -89,8 +89,8 @@ It can also map repositories to different local paths:
 
 ```js
 const workspacePath = {
-  'deepseek-harness/deepseek-harness': '/Users/cty/deepseek-harness',
-  'deepseek-harness/dsh-sdk': '/Users/cty/dsh-sdk',
+  'deepseek-harness/deepseek-harness': '/path/to/deepseek-harness',
+  'deepseek-harness/dsh-sdk': '/path/to/dsh-sdk',
 }[payload.repository.full_name]
 if (workspacePath === undefined) return null
 ```

+ 3 - 3
docs/user/guide/github-review.zh.md

@@ -25,7 +25,7 @@ printf '%s\n' "$DSH_GITHUB_WEBHOOK_SECRET"
 在开发 checkout 中运行:
 
 ```sh
-export DSH_GITHUB_REVIEW_WORKSPACE=/Users/cty/deepseek-harness
+export DSH_GITHUB_REVIEW_WORKSPACE=/path/to/deepseek-harness
 pnpm dsh web --patch apps/cli/config/examples/github-review/cordis.yml
 ```
 
@@ -89,8 +89,8 @@ if (!response.ok || (await response.json()).automaticReview !== true) return nul
 
 ```js
 const workspacePath = {
-  'deepseek-harness/deepseek-harness': '/Users/cty/deepseek-harness',
-  'deepseek-harness/dsh-sdk': '/Users/cty/dsh-sdk',
+  'deepseek-harness/deepseek-harness': '/path/to/deepseek-harness',
+  'deepseek-harness/dsh-sdk': '/path/to/dsh-sdk',
 }[payload.repository.full_name]
 if (workspacePath === undefined) return null
 ```

+ 2 - 2
packages/acp/acp/README.i18n.yaml

@@ -2,5 +2,5 @@
 # side as of the last confirmed-consistent state. Both languages carry equal authority;
 # after editing either side, bring the other along and re-record with:
 #   pnpm run verify-translation-pairing --write packages/acp/acp/README.md
-README.md: a3df8deea1541a65692f8ec31c96dd2960022931
-README.zh.md: 75b045de87073d7b164e400959edc3f82a056ee0
+README.md: 0e8689632d7115bd65f4849e2ba5d402a1cb62d4
+README.zh.md: 0dcde8c2467481454181d146a1eaae2a3ebac1dc

+ 1 - 1
packages/acp/acp/README.md

@@ -81,7 +81,7 @@ Prompt settlement precedence is explicit cancellation, committed-output failure,
 
 ## Running
 
-`pnpm --dir /path/to/deepseek-harness run demo:acp` boots the repository's automation server composition. The generic keyless conformance test drives this bin using only the ACP SDK, including model selection, MCP attachment, close, process restart, list/resume, and cancellation.
+`pnpm --dir /path/to/deepseek-harness dsh --profile acp` boots the repository's automation server profile. The generic keyless conformance test launches this profile through `dsh` and drives it using only the ACP SDK, including model selection, MCP attachment, close, process restart, list/resume, and cancellation.
 
 ## Model Experience
 

+ 1 - 1
packages/acp/acp/README.zh.md

@@ -83,7 +83,7 @@ ACP 客户端是受信任的自动化控制器。stdio 声明授权 DSH 在会
 
 ## 运行
 
-`pnpm --dir /path/to/deepseek-harness run demo:acp` 启动仓库的自动化服务器组合。通用 keyless conformance 测试只使用 ACP SDK 驱动此 bin,覆盖模型选择、MCP 挂载、关闭、进程重启、列出/恢复和取消。
+`pnpm --dir /path/to/deepseek-harness dsh --profile acp` 启动仓库的自动化服务器 profile。通用 keyless conformance 测试通过 `dsh` 启动此 profile,并只使用 ACP SDK 驱动它,覆盖模型选择、MCP 挂载、关闭、进程重启、列出/恢复和取消。
 
 ## 模型体验
 

+ 1 - 1
packages/subagent/subagent-claude-code/tests/fixtures/loader/driver.ts

@@ -70,7 +70,7 @@ try {
     .sort()
 
   process.stdout.write(`${JSON.stringify({
-    registeredProviders: ctx.subagents.list(),
+    registeredProviders: ctx.subagents.list().sort(),
     providers,
     tools,
     jobTools,

+ 1 - 1
packages/subagent/subagent-claude-code/tests/loader-composition.e2e.ts

@@ -40,7 +40,7 @@ describe('product-provider public Loader composition', () => {
 
     expect(stderr).toBe('')
     expect(JSON.parse(stdout)).toEqual({
-      registeredProviders: ['codex', 'claude-primary', 'claude-secondary', 'claude-code'],
+      registeredProviders: ['claude-code', 'claude-primary', 'claude-secondary', 'codex'],
       providers: [
         {
           name: 'codex',