dsh-plugin-subagent-bridge 0.10.0 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -269,14 +269,14 @@ dsh-plugin-subagent-bridge(宿主进程内)
269
269
  | Skill | 装给谁 | 作用 |
270
270
  | --- | --- | --- |
271
271
  | `deepseek-worker` | Codex | 让 Codex 把任务当 subagent 派给 DSH(`dsh_task`),一次调用等结果 |
272
- | `delegate-to-codex` | DSH | 让 DSH 的 agent 在需要独立视角/复核时派给 Codex(`codex_dispatch`) |
272
+ | `delegate-to-external-agent` | DSH | 让 DSH 的 agent 在需要独立视角/复核时派给外部 agent:Codex(`codex_dispatch`)或 Claude Code(`claude_dispatch`),含两者的差别与续接方式 |
273
273
 
274
274
  ```bash
275
275
  # Codex 侧
276
276
  mkdir -p ~/.codex/skills && cp -R skills/deepseek-worker ~/.codex/skills/
277
277
 
278
278
  # DSH 侧
279
- mkdir -p ~/.dsh/skills && cp -R skills/delegate-to-codex ~/.dsh/skills/
279
+ mkdir -p ~/.dsh/skills && cp -R skills/delegate-to-external-agent ~/.dsh/skills/
280
280
  ```
281
281
 
282
282
  两份都是标准 `SKILL.md`:YAML frontmatter(`name` + `description`)+ 正文。**触发靠 description**——模型平时只看到名字和描述,判断相关了才读正文,所以描述里写满了中英触发语和"不要用"的边界。改完立刻生效,不用重启:Codex 下一次会话、DSH 下一轮就能看到。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-plugin-subagent-bridge",
3
- "version": "0.10.0",
3
+ "version": "0.10.1",
4
4
  "type": "module",
5
5
  "description": "Subagent bridge: lets Codex delegate a task to DeepSeek Harness the way it would spawn a subagent (one call, waits for the answer), plus a codex_dispatch tool for the reverse direction.",
6
6
  "keywords": [
@@ -0,0 +1,118 @@
1
+ ---
2
+ name: delegate-to-external-agent
3
+ description: 交给外部 agent / 让另一个 agent 审一下 / review / 第二意见 / 交叉验证 / 用另一个模型验证 / 交给 Codex / 交给 Claude 实现时使用。用 codex_dispatch 或 claude_dispatch 把任务派给本机的 Codex 或 Claude Code,一次调用阻塞到它退出拿到回答,可用 resume 续同一会话。不用于几行改动,也不用于对应的 CLI 未安装或未登录时。
4
+ ---
5
+
6
+ # 把任务交给外部 agent
7
+
8
+ 同一台机器上可能装着另一个编码代理:**Codex**(`codex_dispatch`)或 **Claude Code**(`claude_dispatch`)。两者都是「一次调用 → 阻塞到它退出 → 返回最终回答 + 可续接的会话 id」。
9
+
10
+ ## 先确认可用
11
+
12
+ - 工具列表里有 `codex_dispatch` / `claude_dispatch` 才能用。没有 → 这个部署没装 `dsh-plugin-subagent-bridge`,或者对应二进制没找到。
13
+ - 返回 `codex executable not found` / `claude executable not found` → CLI 不在 PATH。告诉用户在插件配置 `codexBin` / `claudeBin` 里指绝对路径,不要反复重试。
14
+ - 返回 `exited with …` → 多半是未登录、额度用尽或模型名不被支持。把后面几行原样转述,别自己编原因。
15
+
16
+ ## 选哪个
17
+
18
+ | 情况 | 选 |
19
+ | --- | --- |
20
+ | 用户点名了(「让 Codex」「叫 Claude 看看」) | 听用户的 |
21
+ | 只是要个独立视角/第二意见 | 优先选和自己**不同模型家族**的那个 |
22
+ | 其中一个不可用 | 用另一个,并在回报里说明 |
23
+
24
+ 两个工具都**看不到这段对话**,prompt 的写法完全一样。
25
+
26
+ ## 基本调用
27
+
28
+ ```jsonc
29
+ // Codex
30
+ codex_dispatch({
31
+ "prompt": "自足的审查/实现任务 + 验收标准",
32
+ "cwd": "/Users/.../当前仓库",
33
+ "sandbox": "read-only" // 只审不改;要它改代码时用 workspace-write(默认)
34
+ })
35
+
36
+ // Claude Code
37
+ claude_dispatch({
38
+ "prompt": "自足的审查/实现任务 + 验收标准",
39
+ "cwd": "/Users/.../当前仓库",
40
+ "model": "sonnet" // 可选,不传就用 CLI 自己的设置
41
+ })
42
+ ```
43
+
44
+ 返回(工具视图里会附带一行 `[codex thread …]` 或 `[claude session …]`):
45
+
46
+ ```jsonc
47
+ // Codex
48
+ { "ok": true, "text": "审完了,两个问题…", "threadId": "01a1…", "exitCode": 0, "durationMs": 34000 }
49
+
50
+ // Claude
51
+ { "ok": true, "text": "审完了,两个问题…", "sessionId": "b47f…", "exitCode": 0, "durationMs": 5000 }
52
+ ```
53
+
54
+ ## 两者的差别
55
+
56
+ | | Codex | Claude Code |
57
+ | --- | --- | --- |
58
+ | 权限控制 | `sandbox`:`read-only` / `workspace-write` / `danger-full-access` | 没有这个参数,用 Claude 自己的权限设置 |
59
+ | 续接参数 | `resume: "<threadId>"` | `resume: "<sessionId>"` |
60
+ | 继续时的限制 | `cwd` 与 `sandbox` **不生效**(沿用线程创建时的设置) | `cwd` 照常生效 |
61
+ | 失败判定 | `turn.failed` / 错误事件 | `is_error` 或 `subtype ≠ success` |
62
+
63
+ Codex 的 sandbox 选择:
64
+
65
+ | 目的 | sandbox |
66
+ | --- | --- |
67
+ | 代码审查、方案评估、查资料 | `read-only` |
68
+ | 让它改代码 / 跑测试 / 生成文件 | `workspace-write`(默认) |
69
+ | 需要动仓库外的东西 | `danger-full-access`(谨慎,明确告知用户) |
70
+
71
+ ## 继续同一个会话
72
+
73
+ ```jsonc
74
+ codex_dispatch({ "resume": "01a1…", "prompt": "详细说第一个问题,并给出补丁" })
75
+ claude_dispatch({ "resume": "b47f…", "prompt": "详细说第一个问题,并给出补丁" })
76
+ ```
77
+
78
+ Codex 续接时换目录/换权限要开新线程;Claude 续接时 `cwd` 仍然有效。
79
+
80
+ ## 怎么写 prompt
81
+
82
+ 对方看不到这段对话。给它的东西和给一个刚接手的工程师一样:背景一句、要审/要改的具体路径、验收标准、边界(别动什么、别提交)、输出格式(几行结论 + 关键位置)。要求它"先读再评",避免它凭印象编。
83
+
84
+ ## prompt 的红线
85
+
86
+ 对方收到的是一条**普通任务消息**,它不知道 DSH 有哪些技能或工具。而且它自己**也可能接着 `dsh-bridge` 这个 MCP**——所以 prompt 里出现桥的名字,可能把它引去反向调 `dsh_dispatch`,白白绕一圈甚至形成来回。
87
+
88
+ - ❌ 不要把 DSH 的技能名/工具名写进 prompt:`用 codex_dispatch 执行这个任务`、`请通过 dsh-plugin-subagent-bridge 回复`、`你是被 DSH 派来的`
89
+ - ❌ 不要交代协作机制或角色:`主程序是 DSH,你只是执行者,完成后回调`
90
+ - ❌ 不要复述元指令:`用户让我找个别的模型来做`
91
+ - ✅ 只写任务本身:背景、要审/要改的具体路径、验收标准、边界、输出格式。
92
+
93
+ 用户如果说「让 Codex 审一下这个 PR」,你发出去的那句话应该只是:
94
+
95
+ ```
96
+ 审 /Users/…/src/bridge.ts 的改动:重点看错误处理与并发;不修改文件;
97
+ 输出 3~5 条按严重度排序的问题,每条给文件:行号和一句理由。
98
+ ```
99
+
100
+ 一旦 prompt 里出现 `dsh_dispatch`、`codex_dispatch`、`claude_dispatch` 或"DSH",对方很可能先去调桥,而不是干活。
101
+
102
+ ## 拿到结果之后
103
+
104
+ - `ok: true` → 读 `text`。**自己复核关键结论**(比如它说有 bug,就去看那段代码),不要原样转述当事实。
105
+ - `ok: false` → 看 `error`:超时 / 退出码非零 / 二进制找不到 / 模型不可用。把原因讲清楚,再决定是自己接手还是让用户处理。
106
+ - 长任务会被超时截断(`codexTimeoutMs` / `claudeTimeoutMs` 可调);被截断时会话仍然存在,用 `resume` 接着问。
107
+ - **Claude 的 stderr 常有警告**(例如模型名后缀不被识别),但只要 `ok: true` 就说明结果正常,不要把 stderr 当失败。
108
+
109
+ ## 回报给用户
110
+
111
+ 三句话以内:派给了谁、结论是什么、你核过没有。**不要把它返回的长文整段贴回来**——摘要 + 关键路径 + 你自己的判断。
112
+
113
+ ## 不要做
114
+
115
+ - 不要用这两个工具代替你自己就能可靠完成的小改动。
116
+ - 不要把密钥、私有凭据写进 `prompt`——它会进入对方的会话记录。
117
+ - 不要在对方返回失败时假装成功,也不要把它的推测当结论转述。
118
+ - 不要在 `read-only` 下指望 Codex 真的改了文件。
@@ -1,85 +0,0 @@
1
- ---
2
- name: delegate-to-codex
3
- description: 让 Codex 审一下 / review / 用另一个模型验证 / 要第二意见 / 交叉验证 / 交给 Codex 实现 时使用。用 codex_dispatch 把任务派给 Codex,一次调用阻塞到它退出拿到回答,可用 resume 续同一线程。不用于几行改动,也不用于 Codex 未安装或未登录时。
4
- ---
5
-
6
- # 把任务交给 Codex
7
-
8
- Codex 是同一台机器上的另一个编码代理。`codex_dispatch` 会跑一次 `codex exec`,**阻塞到它退出**,返回它的最终回答和线程 id。
9
-
10
- ## 先确认可用
11
-
12
- - 工具列表里有 `codex_dispatch` 才能用。没有 → 说明这个部署没装 `dsh-plugin-subagent-bridge`,或者 Codex 二进制没找到。
13
- - 调用返回 `codex executable not found` → Codex CLI 不在 PATH,也没有落在常见目录。告诉用户在插件 `config.codexBin` 里指一个绝对路径,不要反复重试。
14
- - 用户机器上 Codex 未登录 / 额度用尽时,返回会是 `codex exited with …`,把后面那几行原样转述,别自己编原因。
15
-
16
- ## 基本调用
17
-
18
- ```jsonc
19
- codex_dispatch({
20
- "prompt": "自足的审查/实现任务 + 验收标准",
21
- "cwd": "/Users/.../当前仓库",
22
- "sandbox": "read-only" // 只审不改;要它改代码时用 workspace-write(默认)
23
- })
24
- ```
25
-
26
- 返回(工具视图里会附带一行 `[codex thread <id> · <耗时>s]`):
27
-
28
- ```jsonc
29
- { "ok": true, "text": "审完了,两个问题…", "threadId": "01a1…", "exitCode": 0, "durationMs": 34000 }
30
- ```
31
-
32
- ## 什么时候用哪种 sandbox
33
-
34
- | 目的 | sandbox |
35
- | --- | --- |
36
- | 代码审查、方案评估、查资料 | `read-only` |
37
- | 让它改代码 / 跑测试 / 生成文件 | `workspace-write`(默认) |
38
- | 需要动仓库外的东西 | `danger-full-access`(谨慎,明确告知用户) |
39
-
40
- ## 继续同一个线程
41
-
42
- ```jsonc
43
- codex_dispatch({ "resume": "01a1…", "prompt": "详细说第一个问题,并给出补丁" })
44
- ```
45
-
46
- `resume` 时 **`cwd` 与 `sandbox` 不生效**——Codex 沿用该线程创建时的设置。需要换目录/换权限就开新线程。
47
-
48
- ## 怎么写 prompt
49
-
50
- Codex 看不到这段对话。给它的东西和给一个刚接手的工程师一样:背景一句、要审/要改的具体路径、验收标准、边界(别动什么、别提交)、输出格式(几行结论 + 关键位置)。要求它"先读再评",避免它凭印象编。
51
-
52
- ## prompt 的红线
53
-
54
- Codex 收到的是一条**普通任务消息**,它不知道 DSH 有哪些技能或工具。而且它自己**也接着 `dsh-bridge` 这个 MCP**——所以 prompt 里出现桥的名字,可能把它引去反向调 `dsh_dispatch`,白白绕一圈甚至形成来回。
55
-
56
- - ❌ 不要把 DSH 的技能名/工具名写进 prompt:`用 codex_dispatch 执行这个任务`、`请通过 dsh-plugin-subagent-bridge 回复`、`你是被 DSH 派来的`
57
- - ❌ 不要交代协作机制或角色:`主程序是 DSH,你只是执行者,完成后回调`
58
- - ❌ 不要复述元指令:`用户让我找个别的模型来做`
59
- - ✅ 只写任务本身:背景、要审/要改的具体路径、验收标准、边界、输出格式。
60
-
61
- 用户如果说「让 Codex 审一下这个 PR」,你发出去的那句话应该只是:
62
-
63
- ```
64
- 审 /Users/…/src/bridge.ts 的改动:重点看错误处理与并发;不修改文件;
65
- 输出 3~5 条按严重度排序的问题,每条给文件:行号和一句理由。
66
- ```
67
-
68
- 一旦 prompt 里出现 `dsh_dispatch`、`codex_dispatch` 或"DSH",Codex 很可能先去调桥,而不是干活。
69
-
70
- ## 拿到结果之后
71
-
72
- - `ok: true` → 读 `text`。**自己复核关键结论**(比如它说有 bug,就去看那段代码),不要原样转述当事实。
73
- - `ok: false` → 看 `error`:超时 / 退出码非零 / 二进制找不到。把原因讲清楚,再决定是自己接手还是让用户处理。
74
- - 长任务(>5 分钟)会被超时截断,`codexTimeoutMs` 可调;被截断时线程仍然存在,用 `resume` 接着问。
75
-
76
- ## 回报给用户
77
-
78
- 三句话以内:派给了谁、结论是什么、你核过没有。**不要把 Codex 的长文整段贴回来**——摘要 + 关键路径 + 你自己的判断。
79
-
80
- ## 不要做
81
-
82
- - 不要用 `codex_dispatch` 代替你自己就能可靠完成的小改动。
83
- - 不要把密钥、私有凭据写进 `prompt`——它会进入 Codex 的会话记录。
84
- - 不要在 Codex 返回失败时假装成功,也不要把它的推测当结论转述。
85
- - 不要在 `read-only` 下指望它真的改了文件。