deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
让 DSH (DeepSeek Harness) 与 TRAE (IDE agent) 可以互相委派任务。
bin/dsh-ask.cmd 无头跑 DSH,拿回最终回答subagent_trae 工具 → 写文件队列 → TRAE 侧 /dsh skill 认领执行 → 写回结果TRAE ──(dsh-ask.cmd 无头调用)──► DSH 交付物 1
DSH ──(subagent_trae 工具→文件队列桥)──► TRAE 交付物 2
dsh-trae-bridge/
├── dsh-subagent-trae/ # DSH 侧桥接插件(subagent provider: trae)
│ └── lib/index.js
├── graph-monitor/ # DSH 侧 GRAPH 工作流可视化插件(文档见其 README.md)
│ ├── lib/index.js # 宿主:GRAPH 引擎 + HTTP API /graph-monitor/*
│ ├── lib/client.js # 客户端:Graph Monitor 页签 + 聊天内嵌卡片 + 设置编辑器
│ └── test/ # 引擎测试 19 项 + 客户端冒烟 + CDP UI 验证
├── bin/dsh-ask.cmd # TRAE→DSH 无头 CLI 包装(自动探测 DSH 安装路径)
├── trae-skills/dsh/SKILL.md # TRAE 侧 skill:处理 DSH 投递的任务(/dsh 触发)
├── trae-agents/dsh.md # TRAE 侧 agent:把任务委派给 DSH(让 DSH 执行…)
├── profiles/ # cordis.patch.yml 示例(desktop / headless)
├── test/ # 4 套测试,45+ 项
├── OPTIMIZATION-NOTES.md # 可靠性/压缩/安全设计记录
└── README.md
graph-monitor 插件的完整文档(功能 / GRAPH 词汇表 / 部署 / 验证 / 配置)单独写在 graph-monitor/README.md。
desktop-cli.js / headless profile)~/.trae-cn/skills、~/.trae-cn/agents)桥目录默认 ~/.dsh-trae/bridge(即 %USERPROFILE%\.dsh-trae\bridge),也可用环境变量覆盖:
# 可选:自定义桥目录
setx DSH_TRAE_BRIDGE_DIR "D:/path/to/your/bridge"
把 dsh-subagent-trae/ 目录放进 DSH 的 profile 依赖。desktop profile 手动布放:
$dst = "$env:USERPROFILE\.dsh\profiles\desktop\node_modules\dsh-subagent-trae"
New-Item -ItemType Directory -Path "$dst\lib" -Force | Out-Null
Copy-Item "<REPO_DIR>\dsh-subagent-trae\package.json" "$dst\"
Copy-Item "<REPO_DIR>\dsh-subagent-trae\lib\index.js" "$dst\lib\"
# 用示例配置替换 cordis.patch.yml(先按下面第 3 步填好 <BRIDGE_DIR>)
Copy-Item "<REPO_DIR>\profiles\desktop-cordis.patch.yml" "$env:USERPROFILE\.dsh\profiles\desktop\cordis.patch.yml" -Force
cordis.patch.yml参考 profiles/desktop-cordis.patch.yml,把 <BRIDGE_DIR> 换成你的桥目录:
- insert:
- id: subagent-trae
name: dsh-subagent-trae
config:
providerName: trae
bridgeDir: "C:/Users/<you>/.dsh-trae/bridge" # 或留空走默认/环境变量
timeoutMs: 900000
pollIntervalMs: 2000
# 可选优化项:
# maxConcurrent: 1
# retryCount: 0
# allowedCwdPrefixes: ["C:/Users/<you>"]
# maxFileAgeDays: 7
# sharedSecret: ""
# maxPromptChars: 20000
# maxResultChars: 20000
- id: tool-subagent-trae
name: "@deepseek-ai/dsh-tool-subagent"
config:
provider: trae
toolName: subagent_trae
enableRunInBackground: false
maxDepth: provider-managed
必须重启 DSH Desktop 并新建会话,subagent_trae 工具才会出现。
# skill:处理 DSH 投递的任务
Copy-Item -Recurse "<REPO_DIR>\trae-skills\dsh" "$env:USERPROFILE\.trae-cn\skills\dsh"
# agent:把任务委派给 DSH
Copy-Item "<REPO_DIR>\trae-agents\dsh.md" "$env:USERPROFILE\.trae-cn\agents\dsh.md"
把 trae-skills/dsh/SKILL.md 里的 <BRIDGE_DIR> 也换成你的桥目录。
DSH → TRAE(在 DSH 对话里):
用 subagent_trae 工具问 TRAE:<你的问题>
然后在 TRAE 里输入 /dsh(或说「处理DSH任务」)触发 skill 认领任务。
TRAE → DSH(在 TRAE 对话里):
让 DSH 执行:<你的任务>
TRAE 的 dsh agent 会调用 bin/dsh-ask.cmd 无头执行 DSH。
| 配置键 | 默认值 | 说明 |
|---|---|---|
providerName |
trae |
provider 名 |
bridgeDir |
~/.dsh-trae/bridge(或 DSH_TRAE_BRIDGE_DIR) |
桥目录 |
timeoutMs |
900000 |
单次超时;重试总预算 = timeoutMs×(retryCount+1) |
pollIntervalMs |
2000 |
轮询间隔上限(指数退避上限) |
pollBackoffMs |
200 |
轮询初始间隔 |
maxConcurrent |
1 |
DSH 侧并发轮询上限 |
retryCount |
0 |
error 后自动重投递次数 |
allowedCwdPrefixes |
[] |
cwd 白名单(空=不限制) |
maxFileAgeDays |
7 |
过期文件清理天数 |
sharedSecret |
"" |
非空则写 HMAC 签名(防伪造) |
maxPromptChars |
20000 |
DSH→TRAE prompt 压缩上限 |
maxResultChars |
20000 |
TRAE→DSH 结果截断上限 |
桥两端只传任务指令文本,不传对方完整会话。DSH→TRAE 超限时走滑动窗口压缩(窗口 5/step 1/min 1,最多 3 个语义窗口),关键行按权重标记(路径 +10、指令词 +5/个)全部前置且永不丢失。TRAE→DSH 方向 dsh-ask.cmd 拒绝超 15000 字符的指令。详见 OPTIMIZATION-NOTES.md。
node test/optimize-check.mjs # 20 项
node test/review-fixes-check.mjs # 6 项
node test/context-guard-check.mjs # 7 项
node test/sliding-window-check.mjs # 12 项
测试从 %USERPROFILE%\.dsh\profiles\desktop\node_modules\dsh-subagent-trae 导入插件(按 README 布放后即可运行)。
/dsh),非全自动retryCount>0 会成倍消耗sharedSecret 只防伪造不防窥| 现象 | 排查 |
|---|---|
| queue 有 pending 但 results 永不出现 | TRAE 是否运行?是否输入 /dsh?cwd 是否被白名单丢弃? |
| DSH 报 error | 看 results/*.json 的 stopReason;带 lastFailure 则是重试仍失败 |
任务 failed + orphaned |
上次进程 claimed 后崩溃,启动自愈(正常) |
| 队列文件半截 JSON | 撕裂写;双方重试,日志出现一次 corrupt 告警后恢复 |
| 结果缺尾 | truncated: true 被压缩——向对端索取缺失上下文 |
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。