Harness联盟模式(DSH Agent Preset)
让 DeepSeek Harness、Claude Code 和 Codex 共享同一个 DSH 会话生命周期,并与 DSH 原生模型选择器自由组合。
- 模型仍由 DSH 原生模型选择器决定,自动使用当前已配置的全部 provider/model。
- Harness由独立的「选择Harness」控件决定,每个回合可切换 DeepSeek Harness、Claude Code 或 Codex。
- DSH 始终拥有 history、turn、step、checkpoint、权限、取消和最终结果;外部 CLI 只负责执行当前 Agent 模型步骤。
功能
- 不替换原生 composer/model selector:模型目录与现有 DSH 配置保持单一真源。
- 严格模式隔离:Harness 选择器只在「Harness联盟模式」出现,Standard 模式完全不显示。
- 真实外部执行:选择 Claude Code/Codex 后,由对应 CLI 实际执行;提示会明确区分外部执行 Harness 与 DSH 宿主。
- 完整实时输出:Claude Code 使用 partial messages,Codex 使用 app-server
item/agentMessage/delta,正文不再等待进程结束后一次性出现。 - 可见执行过程:外部回合立即显示
Claude Code/Codex · 正在执行;thinking、reasoning summary、Bash、文件修改、WebSearch、MCP 等活动实时显示在只读Think过程区。 - 不会重复执行工具:外部活动绝不伪装成 DSH tool call,因此 Standard Agent 不会把同一命令再执行一次。
- CLI 自动检测与托管安装:优先使用
PATH中的全局 CLI;缺失时在 Harness 菜单内显示「安装」,安装到 DSH 自有目录,不使用 sudo。 - 并行委派:preset 同时提供
subagent_claude_code与subagent_codex。
环境要求
- DSH(DeepSeek Harness)Web 部署
- Node.js 与 pnpm(DSH Web Profile 已使用 pnpm)
- Claude Code / Codex CLI 二者均为可选:可以预先全局安装,也可以在「选择Harness」菜单中按需安装
- macOS、Linux、Windows
安装
# 1. 克隆到固定 preset id(Host 的隔离规则依赖 harness-ally)
git clone https://github.com/BaronCyrus/dsh-harness-ally.git ~/.dsh/.agent-presets/harness-ally
# Windows PowerShell:
# git clone https://github.com/BaronCyrus/dsh-harness-ally.git "$env:USERPROFILE\.dsh\.agent-presets\harness-ally"
# 2. 把同一仓库以 link 方式注册到 Web Profile
node ~/.dsh/.agent-presets/harness-ally/setup/install.mjs
如果设置了 DSH_HOME,将上面的 ~/.dsh 替换为对应目录。
安装后重启现有 dsh web 进程,然后新建「Harness联盟模式」会话。不要另起替代 Web server;已经打开的 GUI 只会连接原来的 DSH 进程。
使用
- 继续使用 DSH 原生模型选择器选择 provider/model。
- 打开「选择Harness」,选择 DeepSeek Harness、Claude Code 或 Codex。
- 正常发送消息。回合进行中 Harness 会锁定,停止仍由原生 composer 控制。
- 外部回合会先出现
Think · Claude Code/Codex · 正在执行;后续 thinking 和工具活动实时更新。 - 最终消息下方显示
Harness · model徽标。
缺失的 Claude Code/Codex 不可直接选择,只会显示「安装」按钮;安装完成后即可选择。CLI 解析顺序是“全局 PATH 优先,DSH 托管目录兜底”。
架构
| 平面 | 职责 |
|---|---|
| Host bundle | Harness selection、CLI 检测/托管安装、LLM waterfall router、本地模型协议 bridge、Claude partial/Codex app-server adapters、DSH sandbox、provider registry |
| Agent preset | 联盟提示、标准编码工具、subagent_claude_code / subagent_codex;不发布跨会话 Service |
| Client bundle | Harness chip、菜单内安装、回合锁定与 additive Harness · model 徽标;不替换 composer/model selector |
模型桥
每次前台外部运行都会创建短期、带随机凭据的 loopback route:
- Claude Code 使用 Anthropic Messages;
- Codex 使用 OpenAI Responses;
- bridge 把请求转换成 DSH
llm.stream,保留当前模型选择器给出的精确provider + model及 reasoning/sampling 参数; - 运行结束立即撤销 route,Host 停止时关闭 loopback server。
外部 Harness 不需要复制 DSH provider key,也不需要维护第二份模型列表。
实时过程与安全边界
- Claude
thinking_delta和 Codexitem/reasoning/summaryTextDelta映射为标准 DSH reasoning。 - 外部工具活动映射为 reasoning 中的只读状态行,不产生
tool-call-delta。 - Agent signal 会终止整个外部进程树;Codex 会先尝试
turn/interrupt。 - 非
danger-full-access模式由 DSH 外层sandbox.confine()包裹。 - prompt 通过 stdin/app-server RPC 传输,不出现在 argv。
- bridge 仅监听
127.0.0.1,每个 route 使用随机 bearer token。 - 错误诊断不会回传 CLI 原始 stderr、route token 或环境变量。
- 当前前台外部 Harness 只接受文本上下文;包含图片时会明确提示切回 DeepSeek Harness,不会静默丢图。
目录结构
├── preset.yml / agent.cordis.yml # preset 元数据与 agent-plane composition
├── ally-prompt.mjs # 联盟会话提示 section
├── cordis.patch.yml # Web Profile 的 Host bundle patch
├── lib/
│ ├── index.js # Host wiring、transport 与 teardown
│ ├── runtime.js # Agent-loop router、实时 reasoning/activity 与最终校准
│ ├── harness.js # Claude partial-message adapter
│ ├── codex-app-server.js # Codex app-server、delta、ephemeral thread、interrupt
│ ├── bridge.js # Messages/Responses → DSH LLM loopback bridge
│ ├── cli-manager.js # 全局优先/托管兜底的 CLI 生命周期
│ ├── state.js # Session 日志外的选择与 badge 状态
│ └── client.js # Harness selector、安装按钮与徽标
├── test/ # Node 回归测试
├── setup/install.mjs # 跨平台、幂等的 Web Profile link 安装器
└── docs/DEVELOPMENT.md # 开发、安全边界与版本约定
开发
仓库通过 link: 接入 Web Profile,因此同事可以直接在 clone 内迭代:
npm test
node --check lib/runtime.js
node --check lib/harness.js
node --check lib/codex-app-server.js
Host/preset/client 的生产部署变更都需要重启现有 dsh web。只有同时在 DSH checkout 运行 pnpm run dev:web 时,client-plugin HMR 才会自动重建。
详细约定见 docs/DEVELOPMENT.md。
隐私
仓库不包含 API Key、OAuth token、CLI 登录态、DSH state、用户目录、项目路径或运行日志。模型凭据继续由本机 DSH/CLI 管理,不会写入本仓库。
如果贡献 issue/log,请先删除 Authorization header、环境变量、用户名路径、bridge token 和原始 CLI stderr。
许可
MIT © 2026 BaronCyrus
No comments yet. Be the first to write one.