DSH Hub / 插件 / dsh-plugin-ai-bridge SwainGao/dsh-plugin-ai-bridge ↗ ★ 0
dsh-plugin-ai-bridge DeepSeek Harness plugin that bridges to external AI models (Codex, Claude, GPT, ...) for second-opinion code review, adversarial review, and task delegation.
包名 dsh-plugin-ai-bridge
版本 0.1.0
许可证 Apache-2.0
最近更新 2026年8月15日 GitHub ↗ 文档 ↗ 简体中文 · English · 日本語 · 한국어
🌉 dsh-plugin-ai-bridge
让 DeepSeek Harness 与外部 AI 模型无缝协作 —— 第二意见审查 · 对抗性审查 · 任务委托 · 非阻塞后台调度
✨ 特性 · ⚡ 安装 · 🔧 配置 · 🎛️ 命令 · 🧰 工具 · 🏗️ 架构 · 🎬 演示 · 🧪 测试 · ⚖️ 版权
✨ 特性
DSH 目前缺少跨模型协作能力。本插件为它补上一座「桥」—— 在会话内部即可把代码审查或复杂任务委托给外部模型,再把人家的判断带回当前会话。
🔍 只读第二意见审查 —— 风格、逻辑、潜在 bug、安全性,不改动任何会话状态
⚔️ —— 挑战设计决策、架构假设、边界条件与异常处理,5–10 条"灵魂拷问"
dsh-plugin-ai-bridge · DSH Hub
对抗性审查
🛟 任务委托 / 救援 —— 打包对话历史 + 任务,结果以插件上下文注入回当前会话
⏳ 非阻塞后台任务 —— 基于 ctx.jobs 的 status / result / cancel
🧩 模型可用工具 —— ai_bridge_review / ai_bridge_delegate,让智能体自己也能主动求教
能力 触发方式 说明 第二意见审查 /bridge review 只读审查,非阻塞后台运行 对抗性审查 /bridge adversarial-review 5–10 条挑战性问题 任务委托 / 救援 /bridge rescue 历史 + 任务 → 外部模型 → 注入结果 任务进度 /bridge status列出 bridge 后台任务 读取结果 /bridge result 读取已完成任务输出 取消任务 /bridge cancel 取消运行中任务
⚡ 安装 # 1. 加入你的 DSH profile
dsh plugin --profile
add dsh-plugin-ai-bridge
# 2. 在 profile 的 cordis.patch.yml 中注册(见「配置」)
# 3. 重启 profile,然后直接输入:
/bridge help
也可以从源码安装:npm run build 后把 lib/ 链接进 profile 的 node_modules/dsh-plugin-ai-bridge。
🔧 配置 插件配置写入 profile 的 cordis.patch.yml(也可用环境变量兜底)。
键 默认值 说明 apiKey''外部模型 API Key baseUrl按 provider 自动 端点基地址(OpenAI 兼容需含 /v1;Anthropic 不含) provideropenaiopenai(GPT,Chat Completions)· codex(Responses API)· anthropic(Claude)· generic(任意 OpenAI 兼容中转站)defaultModelgpt-5-codex默认模型 id timeoutMs120000单次请求超时(毫秒) maxOutputTokens4000单次调用最大输出 token
🔵 示例一:GPT(Chat Completions)
# $DSH_HOME/profiles/
/cordis.patch.yml
- insert:
- id: ai-bridge
name: dsh-plugin-ai-bridge
config:
provider: openai
defaultModel: gpt-5-codex
baseUrl: https://api.openai.com/v1
apiKey: sk-...
⚫ 示例二:Codex(Responses API)
- insert:
- id: ai-bridge
name: dsh-plugin-ai-bridge
config:
provider: codex
defaultModel: gpt-5-codex
baseUrl: https://api.openai.com/v1
apiKey: sk-...
- insert:
- id: ai-bridge
name: dsh-plugin-ai-bridge
config:
provider: anthropic
defaultModel: claude-sonnet-4-5
baseUrl: https://api.anthropic.com
apiKey: sk-ant-...
- insert:
- id: ai-bridge
name: dsh-plugin-ai-bridge
config:
provider: generic
baseUrl: https://your-gateway.example.com/v1
defaultModel: your-model-id
apiKey: ...
🔌 中转站 / Relay(cc-switch) 插件通过 baseUrl 支持任意中转站服务。若你用 cc-switch 把 Claude / Codex 切到中转站,把同样的「中转地址 + Token + 模型名」填进来即可:
场景 providerbaseUrldefaultModelCodex(Chat Completions 中转) generichttps:///v1中转站要求的模型名 Codex(Responses API 中转) codexhttps:///v1中转站要求的模型名 Claude(Anthropic 中转) anthropichttps://中转站要求的模型名
⚠️ cc-switch 写的是 Claude Code / Codex CLI 各自 的配置文件,不会自动注入 DSH 进程。要么在上方配置里再填一次同样的中转凭据,要么导出 cc-switch 风格的环境变量(见下方),本插件会自动兜底读取。
🔑 环境变量兜底 当 cordis.patch.yml 未提供对应值时,按优先级从环境变量读取:
API Key :BRIDGE_API_KEY → ANTHROPIC_AUTH_TOKEN(仅 anthropic)→ ANTHROPIC_API_KEY(仅 anthropic)→ OPENAI_API_KEY
baseUrl :BRIDGE_BASE_URL → ANTHROPIC_BASE_URL(仅 anthropic)/ OPENAI_BASE_URL(其他)
模型 :BRIDGE_MODEL
因此,若你在 shell 里已导出 cc-switch 常见的 ANTHROPIC_BASE_URL / ANTHROPIC_AUTH_TOKEN / OPENAI_BASE_URL / OPENAI_API_KEY,本插件可直接复用。
🎛️ 命令
DSH 命令名仅允许 [a-z][a-z0-9_-]*(不含 :)。因此六个操作以单一 /bridge 命令的子命令 实现:
需求中的命令 实际触发方式 /bridge:review [文件路径或代码片段]/bridge review /bridge:adversarial-review [...]/bridge adversarial-review /bridge:rescue [任务描述]/bridge rescue /bridge:status/bridge status/bridge:result [job-id]/bridge result /bridge:cancel [job-id]/bridge cancel
🔍 /bridge review 只读审查。file 可为绝对路径,或相对当前会话工作目录的相对路径;否则输入按代码片段处理。
/bridge review src/index.ts
/bridge review function add(a, b) { return a - b }
review 与 adversarial-review 以后台任务 运行(非阻塞),立即返回 ai-bridge-N 任务 id,用 /bridge result 读取结果。
⚔️ /bridge adversarial-review 对抗性审查,输出 5–10 条"灵魂拷问"式问题。
🛟 /bridge rescue 打包任务 + 当前会话历史(最近 200 条消息、最多 60k 字符,含工具调用/结果)委托给外部模型。完成后结果自动以 [bridge rescue result] 前缀的插件上下文注入回当前会话,同时可用 /bridge result 读取。
⏳ 任务管理 /bridge status # 列出 bridge 后台任务
/bridge result # 读取已完成结果;运行中会提示等待
/bridge cancel # 取消运行中任务
🧰 模型可用工具 插件同时注册两个工具,供 DSH 智能体在无需人工输入的情况下主动使用:
工具 参数 说明 ai_bridge_reviewcode(必填)· adversarial?将代码(或文件路径)发给外部模型做只读审查 ai_bridge_delegatetask(必填)· include_history?委托任务(可选携带会话历史)并返回其延续
🏗️ 架构 依赖注入:inject = ['commands', 'jobs', 'tools'];apply() 中通过 ctx.jobs.attachController('ai-bridge') 挂载后台任务控制器。
文件 职责 src/index.ts插件入口:name / inject / Config / apply src/client.ts外部模型 HTTP 客户端(OpenAI 兼容 + Anthropic,流式/非流式) src/prompts.tsreview / adversarial / rescue 三种系统提示词 src/context.ts文件读取与会话历史序列化 src/jobs.tsctx.jobs 后台任务封装 + JobKindMap 扩展(ai-bridge)src/commands.ts/bridge 命令注册与子命令分发src/tools.ts模型可用工具注册
src/
├── index.ts # 入口:name / inject / Config / apply
├── client.ts # 外部模型客户端(OpenAI-compatible + Anthropic)
├── prompts.ts # 三种系统提示词
├── context.ts # 文件读取 + 会话历史序列化
├── jobs.ts # ctx.jobs 后台任务 + JobKind 扩展
├── commands.ts # /bridge 命令分发
└── tools.ts # ai_bridge_review / ai_bridge_delegate
🎬 演示 User ❯ /bridge review src/index.ts
Bridge ❯ Started review as background job ai-bridge-1.
Check progress: /bridge status
Get result: /bridge result ai-bridge-1
User ❯ /bridge status
Bridge ❯ ai-bridge-1 [ai-bridge] running — bridge review src/index.ts
User ❯ /bridge result ai-bridge-1
Bridge ❯ [风格] 命名清晰,但 index.ts:42 的魔法数字建议提取常量
[逻辑] parseArgs 在空输入时未短路,存在空指针风险
[安全] 用户输入直接拼接进模板字符串,建议转义
...
User ❯ /bridge rescue 修复失败的测试
Bridge ❯ Delegated rescue task as background job ai-bridge-2.
The result will be injected back into this session when ready.
Bridge ❯ [bridge rescue result]
已定位失败原因:……建议按以下顺序修复……
🧪 测试 npm install # 安装依赖
npm run typecheck # 类型检查
npm run build # 编译到 lib/
npm test # 编译并运行测试
测试文件 覆盖 test/client.test.mjsAPI 客户端对本地 mock 服务器(OpenAI/Anthropic、流式/非流式、错误处理) test/context.test.mjs文件读取与会话历史序列化 test/commands.test.mjs六个子命令端到端行为(后台任务、rescue 注入) test/integration.test.mjs使用真实 CommandRuntime 加载插件并执行 /bridge test/smoke.test.mjs插件对象形态与注册验证
⚖️ 版权与合规
此插件受 OpenAI codex-plugin-cc 启发,为独立实现,与 OpenAI 无关联。
codex-plugin-cc(Copyright OpenAI and its contributors)采用 Apache-2.0 许可证。本插件仅参考其设计思路进行独立实现,不包含、不复制、不派生其源代码;与 OpenAI 不存在任何隶属、背书或赞助关系。
相关声明同时记录于仓库根目录的 NOTICE 。
📄 License
Made with 🧡 for the DeepSeek Harness community · Inspired by OpenAI codex-plugin-cc (independent implementation)