BaronCyrus/dsh-harness-ally:让 DSH 与外部 CLI 共享同一会话生命周期

前言

DSH(DeepSeek Harness)里,模型选择、会话历史、权限、停止控制和 token 统计通常由 DSH 统一管理。若想把某些回合交给 Claude Code、Codex 或 Kimi Code 执行,常见麻烦是:额外维护一套 CLI 会话和模型配置,或者把外部 CLI 的活动混进 DSH 工具流,导致统计口径不一致、工具被重复执行。

dsh-harness-ally 的做法是把这几类执行入口放进同一个 DSH 会话生命周期:模型仍由 DSH 原生模型选择器决定,Harness 则按回合切换。

这是什么

dsh-harness-ally 是 BaronCyrus 维护的 DSH Agent Preset,许可证为 MIT。

它解决的问题是:让 DeepSeek Harness、Claude Code、Codex 和 Kimi Code 共享同一个 DSH 会话生命周期,并与 DSH 原生模型选择器自由组合。

它不替换 DSH 的 composer/model selector。模型目录仍跟随现有 DSH 配置,Harness 由独立的「选择Harness」控件决定。

核心能力

模型选择与 Harness 选择分离

  • 继续使用 DSH 原生模型选择器选择 provider/model
  • 自动使用当前已配置的全部 provider/model
  • 每个回合可切换 DeepSeek Harness、Claude Code、Codex 或 Kimi Code。
  • Harness 选择器只在「Harness联盟模式」出现,Standard 模式完全不显示。
  • 选择 Claude Code、Codex 或 Kimi Code 后,由对应 CLI 实际执行。

外部执行过程可见

  • 外部回合立即显示 Harness · 正在执行
  • 可公开的 thinking/reasoning summary、Bash、文件修改、WebSearch、MCP 等活动实时显示在只读 Think 过程区。
  • Claude Code 使用 partial messages,Codex 使用 app-server,Kimi Code 使用 ACP session/update

不把外部活动伪装成 DSH tool call

外部活动绝不伪装成 DSH tool call,避免 Standard Agent 重复执行同一命令。

CLI 自动检测与托管安装

  • 优先使用 PATH 中的全局 CLI。
  • 缺失时在 Harness 菜单内显示「安装」。
  • 安装到 DSH 自有目录,不使用 sudo。
  • preset 同时提供 subagent_claude_codesubagent_codexsubagent_kimi_code

token 统计与会话停泊

  • 外部 Harness 的 uncached/cache-read/cache-write/reasoning token 会回到 DSH 原生 token meter。
  • 有条件的原生会话停泊与续接:连续使用只发送本轮请求,跨 Harness 切回只补交离开期间的已完成 canonical history。
  • 干净完成且未取消的外部 run 会把结构化 activity 收敛为有界、版本化的工作台账,并对常见凭据形态脱敏。

环境要求

  • DSH(DeepSeek Harness)Web 部署
  • Node.js 与 pnpm(DSH Web Profile 已使用 pnpm)
  • macOS、Linux、Windows
  • Claude Code、Codex、Kimi Code CLI 均为可选:可预先全局安装,也可以在「选择Harness」菜单中按需安装

安装

先克隆到固定 preset 路径,再执行安装脚本:

git clone https://github.com/BaronCyrus/dsh-harness-ally.git ~/.dsh/.agent-presets/harness-ally
node ~/.dsh/.agent-presets/harness-ally/setup/install.mjs

如果设置了 DSH_HOME,需要将命令中的 ~/.dsh 替换为对应目录。

安装后重启现有 dsh web 进程,然后新建「Harness联盟模式」会话。不要另起替代 Web server;已经打开的 GUI 只会连接原来的 DSH 进程。

典型用法

  1. 继续使用 DSH 原生模型选择器选择 provider/model
  2. 打开「选择Harness」,选择 DeepSeek Harness、Claude Code、Codex 或 Kimi Code。
  3. 正常发送消息。回合进行中 Harness 会锁定,停止仍由原生 composer 控制。
  4. 外部回合会先出现 Think · Harness · 正在执行,后续 thinking 和工具活动实时更新。
  5. 最终消息下方显示 Harness · model 徽标。
  6. 缺失的 Claude Code、Codex 或 Kimi Code 不可直接选择,只会显示「安装」按钮;安装完成后即可选择。

CLI 解析顺序是“全局 PATH 优先,DSH 托管目录兜底”。

适用场景与注意

适合希望在 DSH 中保留统一模型选择、会话历史和统计口径,同时按回合借用外部 CLI 执行能力的开发者。

需要注意:

  • 插件会加入现有 dsh web 进程运行,受当前 DSH 配置、DSH_HOME、sandbox 和权限策略约束。
  • danger-full-access 模式由 DSH 外层 sandbox.confine() 包裹。
  • 安装前建议检查源码和 MIT 许可证,并确认当前 DSH 构建是否支持所需行为。
  • 双口径上下文修复需要 DSH 的 TokenUsage 与 token-meter 支持 contextInputTokens / contextOutputTokens;较旧的 DSH 构建会忽略新增字段。
  • 当前前台外部 Harness 只接受文本请求;最新顶层用户消息含图片时会在 dispatch 前明确提示切回。
  • prompt 通过 stdin、app-server RPC 或 ACP JSON-RPC 传输,不出现在 argv。
  • bridge 仅监听 127.0.0.1,每个 route 使用随机 bearer token。
  • 错误诊断不会回传 CLI 原始 stderr、route token 或环境变量。
  • 原生会话 lane 按 DSH session × Harness × provider × model 隔离。
  • vendor session 是可丢弃缓存,DSH Session 日志始终是唯一 canonical history。
  • Codex 的 reasoning 封装使用持久 AES-256-GCM key,key 以 0600 位于 DSH state;该机制不构成能抵御同时读取 key 与托管状态的独立安全边界。

参考

  • GitHub:https://github.com/BaronCyrus/dsh-harness-ally
  • 目录页:未提供可确认链接,可按仓库名在插件目录中检索。
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜