Files
openclaw-config/skills/delegate-to-dsh/SKILL.md
T
yangxuan 43cd42a563 feat(acp): 接入 DSH 作为 ACP harness,打通 微信→OpenClaw→DSH 派发链路
- openclaw.json
  - plugins.allow 放行 acpx(限制性白名单,缺了后端不会加载)
  - 新增 acp 策略段:enabled/dispatch、backend=acpx、defaultAgent=dsh、
    allowedAgents=[dsh]、stream.deliveryMode=live
  - 新增 plugins.entries.acpx.config:permissionMode=approve-all、
    timeoutSeconds=900、cwd、agents.dsh = dsh --profile acp(绝对路径)
  - 新增 OpenClaw agent dsh(runtime.type=acp → harness dsh),否则
    sessions_spawn 会报 dispatch_failed: Unknown agent id "dsh"
- workspace-dsh/:该 agent 的身份文件(AGENTS/SOUL/IDENTITY/USER/BOOTSTRAP.md)。
  其中的空 .git 由 `openclaw agents add` 的标准 provisioning 生成(非任何 agent 自建),
  会让父仓库把它当 gitlink,已移除后纳入版本控制
- docs/bk02-dsh-openclaw-ACP集成.md:部署/配置/验证证据/排错/回滚全文
- docs/dsh-acp-smoke.mjs:ACP 独立冒烟(initialize→session/new→prompt→close)
- docs/dsh-lang-check.mjs:全局中文指令验证(英文提问看是否回中文)
- skills/delegate-to-dsh:让「交给 dsh」稳定走 ACP 派发;缺此技能时模型会
  静默 fallback 到内嵌 subagent(已复现「假成功」并写入判据)
- agents/main/agent/workshop-skills/acp-backend-triage:ACP 后端排查技能
- plugin-skills/acp-router:acpx 插件自带技能(symlink,与既有渠道一致)
- .gitignore:workspace-dsh 沿用 workspace/ 白名单(只版本化顶层 *.md);
  新增忽略 acpx/ 插件运行产物

验证:ACP 三条途径均通过(独立冒烟、显式 sessions_spawn、自然语言「转给 dsh」),
DSH 侧会话留痕与产物落地见 docs 文档 §5 与 §7。
2026-09-16 17:40:53 +08:00

55 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: "delegate-to-dsh"
description: "把任务交给 DSHDeepSeek Harness)执行:用户说「交给 dsh」「让 dsh 干」「用 DSH 跑」「dsh 那边做」「转给 dsh」时使用;也适用于希望由外部编码 harness 承接的重活(长时间编码、批量命令、仓库级改动)。"
---
# 把任务交给 DSH
DSH 是本机通过 ACP 接入的外部编码 harnessOpenClaw agent id = `dsh`)。它有自己的模型、工作目录和工具,适合承接写代码、跑命令、仓库级改动这类"实活"。
## 唯一正确的调用方式
`sessions_spawn`,**必须显式带 ACP 运行时**:
```json
{
"task": "<完整、自包含的任务描述:目标 + 交付物 + 路径 + 验收标准>",
"runtime": "acp",
"agentId": "dsh",
"mode": "run"
}
```
- `runtime` 默认是 `subagent`OpenClaw 内嵌),**省略它就会由你自己执行** —— 那等于没交给 DSH。
- `agentId` 必须是 `dsh`(在 `agents.entries` 里已配置 `runtime.type="acp"`,解析到 acpx harness `dsh`)。
- 需要跨消息延续同一份上下文时才用 `mode: "session"`(并要求 `thread: true`,微信/飞书渠道不支持线程绑定,所以日常用 `run`)。
- 任务描述要写全:DSH 看不到本会话的历史。
## 纪律
1. **不要自己兜底执行。** 不要改用 `exec`、不要改用默认 `subagent`、不要"我先做一遍再让 dsh 看"。用户要的是 DSH 干活。
2. **不要静默降级。** ACP spawn 失败(例如 `dispatch_failed``Unknown agent id`、超时)时,如实把错误原文回给用户,不要假装已派发。
3. **结果原样回传。** 把 DSH 的回复贴回来(可加一句你自己的核对/摘要),并说明它的 runId 或子会话键,便于追溯。
4. **配对核验(可选)。** 涉及文件改动时,可自己只读核对(`exec``ls`/`cat`)后说明"我独立核验过",但要标注清楚哪句是 DSH 原话。
## 验证派发是否真的发生
只看回复文本会被骗:模型可能一边说"已交给 dsh",一边由 OpenClaw 内嵌运行时执行完了。真正的证据是:
```bash
# 1) 网关日志里出现 ACP 子会话
journalctl --user -u openclaw-gateway --since "10 minutes ago" | grep "agent:dsh:acp:"
# 2) DSH 侧新增会话目录
ls -lt ~/.dsh/sessions/--home-yangxuan-.openclaw-workspace-dsh--/ | head
```
两处都没有 → 这次并没有真的走 ACP。
## 环境事实(2026-09-16 实测,bk02
- `openclaw config get acp``backend=acpx``defaultAgent=dsh``allowedAgents=["dsh"]``stream.deliveryMode=live`
- `openclaw config get plugins.entries.acpx.config.agents.dsh``command=/home/yangxuan/.nvm/versions/node/v26.8.2/bin/dsh``args=["--profile","acp"]`
- 微信 / 飞书 / 钉钉渠道**不支持** ACP 会话绑定(`conversationBindings` 能力缺失),所以 `/acp spawn dsh --bind here` 在这些渠道不可用;持久 `bindings[] type="acp"` 同样依赖适配器的绑定钩子,三家都没有。**只能靠本次派发**。
- 完整文档:`~/.openclaw/docs/bk02-dsh-openclaw-ACP集成.md`