🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

外部 Agent 桥接 mike-sl-ig/dsh-agent-bridge

DeepSeek Harnessv0.4.0
mike-sl-ig19 天前有提交已提供中文文档扫描:含敏感能力

把 DeepSeek Harness 接到你机器上已经装好的编码 agent CLI…

30.8/100
综合分
1
GitHub 星标
73
npm 周下载
—/5
用户评分

数据截至 2026/10/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-agent-bridge
npm 源 · dsh-agent-bridge 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · market
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
数据截至 2026/10/27·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/03·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 19 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-agent-bridge @ 0.4.0
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖要求 >=0.2.0-rc.2 <0.3.0 · 最新 0.2.1-rc.2 兼容
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/20 00:18:00

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 47 处,展示前 30 条)
  • 读取本地文件
    lib/host.js:158
    if (existsSync(STATE_PATH) || !existsSync(LEGACY_STATE_PATH)) return false
  • 读取本地文件
    lib/host.js:159
    const legacy = JSON.parse(readFileSync(LEGACY_STATE_PATH, 'utf8'))
  • 读取本地文件
    lib/host.js:178
    if (!existsSync(STATE_PATH)) {
  • 读取本地文件
    lib/host.js:180
    if (!existsSync(STATE_PATH)) return coerceState(null)
  • 读取本地文件
    lib/host.js:182
    return coerceState(JSON.parse(readFileSync(STATE_PATH, 'utf8')))
  • 写入本地文件
    lib/host.js:190
    mkdirSync(DSH_HOME, { recursive: true })
  • 写入本地文件
    lib/host.js:191
    writeFileSync(STATE_PATH, JSON.stringify(state, null, 2), 'utf8')
  • 读取本地文件
    lib/host.js:201
    if (!existsSync(LAST_RUN_PATH)) return null
  • 发起网络请求
    lib/host.js:351
    const response = await fetch(url, { signal: controller.signal, redirect: 'follow', headers: { accept: 'application/json' } })
  • 写入本地文件
    lib/host.js:366
    mkdirSync(LOCAL_RECIPE_DIR, { recursive: true })
  • 写入本地文件
    lib/host.js:378
    writeFileSync(target, JSON.stringify(candidate, null, 2), 'utf8')
  • 写入本地文件
    lib/host.js:387
    writeFileSync(log, JSON.stringify(history.slice(-50), null, 2), 'utf8')
  • 写入本地文件
    lib/host.js:531
    try { writeFileSync(path, lines.join('\r\n'), 'utf8') } catch (error) { warn('cannot write the run report', error); return '' }
  • 发起网络请求
    lib/client.js:149
    return fetch('api/agent.bridge' + (query || ''), { method: 'GET' })
  • 读取本地文件
    lib/engine.js:46
    if (rest.length === 0) return existsSync(current) ? [current] : []
  • 读取本地文件
    lib/engine.js:50
    try { entries = readdirSync(current).filter((name) => matchStar(head, name)) } catch { return [] }
  • 读取本地文件
    lib/engine.js:117
    try { if (existsSync(full) && statSync(full).isFile()) return full } catch { }
  • 读取本地文件
    lib/engine.js:117
    try { if (existsSync(full) && statSync(full).isFile()) return full } catch { }
  • 读取本地文件
    lib/engine.js:150
    if (value && existsSync(value)) found.push({ source: `env:${key}`, path: value })
  • 读取本地文件
    lib/engine.js:156
    if (existsSync(candidate)) found.push({ source: 'known-path', path: candidate })
  • 读取本地文件
    lib/catalog.js:146
    const readFile = deps.readFile || ((path) => readFileSync(path, 'utf8'))
  • 发起网络请求
    lib/balance.js:54
    const response = await fetch(url, options)
  • 读取密钥环境变量
    lib/balance.js:70
    const token = deps.token !== undefined ? deps.token : (process.env.CODEBUDDY_AUTH_TOKEN || '')
  • 写入本地文件
    lib/launch.js:54
    mkdirSync(logDir, { recursive: true })
  • 写入本地文件
    lib/launch.js:70
    writeFileSync(paths.out, raw.stdout || '', 'utf8')
  • 写入本地文件
    lib/launch.js:71
    writeFileSync(paths.err, raw.stderr || '', 'utf8')
  • 写入本地文件
    lib/launch.js:185
    writeFileSync(paths.stdin, stdinText, 'utf8')
  • 读取本地文件
    lib/launch.js:211
    try { stdout = readFileSync(paths.out, 'utf8') } catch { }
  • 读取本地文件
    lib/launch.js:212
    try { stderr = readFileSync(paths.err, 'utf8') } catch { }
  • 执行外部命令来自配置/变量
    lib/launch.js:229
    child = spawn(exe, args, { cwd, env, stdio: [inFd, outFd, errFd], windowsHide: true, shell: false })
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • JSON配方
  • 跨平台启动器
  • 配方向导

面向 DeepSeek Harness 的数据驱动智能体桥接插件:JSON 配方、跨平台启动器、配方向导、自检、注册表导入

v0.4.02026-10-13
· 0.4.0 — WorkBuddy、模型目录、提示性提醒、智能体池 · 新增 · WorkBuddy(腾讯 CodeBuddy Code)作为桥接智能体接入:无头命令行,通过承载插件的 Node 运行(interpreter.source: "self"),产品身份由 run.env(ACC_PRODUCT_CONFIG_PATH)提供。 · 按 recipe 声明模型目录(catalog):读取 JSON 文件(带 TTL 缓存),或直接询问命令行本身(kind: "argv")。过滤按字段进行(require: { supportsToolCall: true }),再加 excludeIdPattern。目录缺失或格式错误时退回 recipe 的静态列表,并附上原因。 · 模型选择器区分免费/付费档位,依据各目录自己的积分倍率(x0.00 = 免费)。 · 只读余额显示(ok / unauthenticated / unsupported / error)。schema 会拒绝 balance.write,插件连描述一个改动账户的调用都做不到。 · 在 DSH 的 agent/pre-step 瀑布上挂提示性逐轮提醒:启用的角色功能每轮自报一次,不用等用户点名某个智能体。 · 智能体池:面板多选候选,不再单选一个默认值;defaultAgent 由池推导,选哪个智能体、选几个交给模型。 · 失败会自己说明:命令行的错误事件现在会进报告、last-run.json、面板和 agent_list。 · 修复 · findOnPath 曾优先选无扩展名的 POSIX shim,而不是旁边的 .cmd/.exe。 · 发现目录时,PATH 条目不再压过那个命令行所需产品配置所在的安装。 · JSON 数组输出(CodeBuddy 打印的就是这种)按事件流解析,成功运行不再报空答案。 · catalog.kind: "argv" 校验过却没实现——schema 许了诺,代码没兑现。 · 凭据只是读不出来时,面板不再声称用户已登出。 完整测试套件:17 个测试文件,0 失败。
v0.1.22026-10-01
· 0.1.2 · 仅文档:完整的中文 README(README.zh-CN.md),带语言切换器,外加 CI / npm 版本 / 下载量 / 许可证 / node / 零依赖的徽章。两个 README 都随包发布。 · 工具链:pack-check 现在还会检查 package.json 不带字节序标记——BOM 是合法 UTF-8,但会让别处的 JSON.parse 全部报错,而 npm 却能容忍,所以其他环节都发现不了(踩坑踩出来的)。
v0.1.12026-09-30
· 0.1.1 · 修复(会导致运行中的应用崩溃):工具结果现在以内容块的形式返回。DSH 调用 render(args, value) 并把结果当作内容块处理,所以返回裸字符串会让运行中的应用里每次工具调用都失败,报 content.some is not a function。现在由 harness 按工具逐个校验这一约定。 · 修复:配方起草器会搜索嵌套对象和每个 JSONL 事件,因此流式命令行的回答(part.text)能被找回,不再漏掉。 · 修复:自测接受流式测试数据(*.jsonl),这些配方能真正回放录下的流。 · 付费的 Claude Code 适配器在测试里需手动开启(LIVE_PAID=1),默认运行不花钱。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
dsh-agent-bridge(中文说明) 把 DeepSeek Harness 接到你机器上已经装好的编码 agent CLI 上——OpenCode、Claude Code、Codex、Gemini,或者任何一个你写一份配方就能支持的 CLI——把它们当成独立工人来用:跨模型交叉验证、廉价批量执行、第二意见。 这个插件不写死任何厂商。一个 agent 就是一份 JSON 配方(recipe):新增一个 agent、或者某个 CLI 改了参数,都是改数据,不是改代码。配方刻意做成纯数据,这正是它将来适合从社区注册表分发的原因——数据可以被审阅,代码不行。 它给你什么 - 会话标题栏右侧的一个按钮:勾选一池候选 agent(每个都保留自己的模型下拉)、开关三个角色功能、看最近一次运行的报告卡。未指定 agent 的调用用池里第一个已安装的;defaultAgent 仍写在状态文件里,供 0.3.x 消费者读取。 - 四个工具(模型可调用): - agent_list —— 找到了哪些 agent、装在哪、什么成本等级、支持哪些能力;probe: true 会跑 --version,selftest: true 会校验配方 + 回放真实录制样本。
展开完整文档(README 剩余 1 节)
dsh-agent-bridge(中文说明)

把 DeepSeek Harness 接到你机器上已经装好的编码 agent CLI 上——OpenCode、Claude Code、Codex、Gemini,或者任何一个你写一份配方就能支持的 CLI——把它们当成独立工人来用:跨模型交叉验证、廉价批量执行、第二意见。

这个插件不写死任何厂商。一个 agent 就是一份 JSON 配方(recipe):新增一个 agent、或者某个 CLI 改了参数,都是改数据,不是改代码。配方刻意做成纯数据,这正是它将来适合从社区注册表分发的原因——数据可以被审阅,代码不行。

它给你什么

- 会话标题栏右侧的一个按钮:勾选一池候选 agent(每个都保留自己的模型下拉)、开关三个角色功能、看最近一次运行的报告卡。未指定 agent 的调用用池里第一个已安装的;defaultAgent 仍写在状态文件里,供 0.3.x 消费者读取。
- 四个工具(模型可调用):
- agent_list —— 找到了哪些 agent、装在哪、什么成本等级、支持哪些能力;probe: true 会跑 --version,selftest: true 会校验配方 + 回放真实录制样本。
- agent_run —— 把某个 agent 当独立工人跑一次,返回答案、会话 id、耗时、工具调用次数、tokens、成本与报告路径。
- agent_recipe —— 给陌生 CLI 生成/校验/保存/导入配方:draft(跑一次并把候选字段连同证据交给你)、validate、save(写入本地配方目录,同名覆盖随包配方)、import(从 http(s) URL 拉取,严格校验、绝不执行任何内容)。
- agent_mode —— 读写按钮上那份状态。
- 每次运行一份报告:Markdown(提示词、答案、工具调用、tokens、成本、原始日志路径)+ 面板用的 last-run.json。
- 向后兼容:旧的 opencode_run / opencode_mode 工具仍然可用,旧插件 dsh-opencode-bridge 的配置会自动迁移(旧文件保留,可回滚)。

安装

从 npm 安装:

dsh plugin --profile <你的档名> add dsh-agent-bridge

或直接从 Release 产物安装,不经过 npm:

dsh plugin --profile <你的档名> add https://github.com/mike-sl-ig/dsh-agent-bridge/releases/download/v0.1.1/dsh-agent-bridge-0.1.1.tgz

或从本地检出安装:

dsh plugin --profile <你的档名> add /绝对路径/dsh-agent-bridge

然后刷新一下页面(客户端插件要等页面重新加载客户端图之后才出现)。除了这个包本身,不会装任何东西:零运行时依赖、无安装期脚本。

四种模式(角色)

| 模式 | 会给工人加上什么 |
| default | 不加任何角色设定 |
| verify | 来自另一个模型族的独立验证者;禁止调用工具,单趟出答案 |
| bulk | 廉价机械工人;偏好直接作答,不做自检 |
| second | 独立第二意见;禁止调用工具,单趟出答案 |

verify / second 禁止工具不是审美选择,是实测结论:放任调工具时,同一次任务出现 11 次工具调用、180 秒超时且没有答案;禁止后 0 次调用、8–10 秒给出正确答案。

配方长什么样

{
"id": "opencode",
"label": "OpenCode",
"cost": "free",
"discover": {
"bin": ["opencode", "opencode-cli"],
"paths": { "linux": ["~/.opencode/bin/opencode"] },
"derive": [{ "platforms": ["win32"], "append": "node_modules/…/claude.exe" }]
},
"run": { "argv": ["run", "--auto", "--format", "json"], "prompt": { "via": "positional" } },
"output": { "format": "jsonl", "answer": { "where": { "type": "text" }, "pick": "part.text" } }
}

- discover:环境变量 → PATH → 已知安装路径 → 垫片反推真实入口(npm 在 bin 里放的是 .ps1/.cmd 垫片,真正能直接 exec 的是包内的原生入口,推导出的入口排在垫片之前);
- run.prompt.via:positional(追加到 argv 末尾)、stdin(写进子进程 stdin)、或某个 flag 名;
- output:jsonl(按事件累加)/ json(单个对象)/ text(兜底);
- caps:声明这个 CLI 支持什么(模型、会话、续跑、附件…),面板据此决定显示哪些控件;
- catalog:模型列表的真实来源——{ kind: "jsonFile", path: […], pick: "models", map: { id, label, credits, vendor }, excludeTags: […], ttlMs }。按顺序取第一个能读到的文件,结果按 ttlMs 缓存;任何失败(文件缺失、JSON 坏、列表为空)都降级到配方自带的 models,原因放在 catalogError 里。models 同时接受 0.1.x 的字符串数组和 { id, label?, tier?, credits?, vendor? } 对象。
- balance:账户余额,结构上只读——{ kind: "http", base, loginProbe, summary, map, unit },只会发出配方点名的那两个请求;没有凭证时不发请求直接返回 unauthenticated,四态(ok / unauthenticated / unsupported / error)都不会显示编造的数字。balance.write 会被校验器直接拒绝:插件在数据层面就无法描述一个会改动账户的调用。
- interpreter:{ "source": "self" } 让 JS 写的 CLI 跑在正在承载本插件的那个 Node 上,而不是把 .js 文件交给操作系统。

WorkBuddy(腾讯 CodeBuddy Code)

桌面版只随包发布了无头(headless)内核(有 dist/codebuddy-headless.js,没有 dist/codebuddy.js),所以这个安装包里不存在交互式 /login,CLI 也没有 login / auth 子命令。凭证只能来自环境变量 CODEBUDDY_AUTH_TOKEN;没有它时 CLI 会以 Authentication required 退出,面板显示 「余额:未登录」——这是诚实的现状,不是数字。

模型下拉不受影响:账号级目录(%USERPROFILE%\.workbuddy\cache\acc-product-config-v3.json)优先,安装目录的 product.json 兜底,每项都带 免费 / 付费 x0.21 标记。

成本是真实的

cost: "paid" 的配方会花你的钱(实测 Claude Code 一次三个字的回答 $0.094)。面板会给它打上付费标记并在选中时提醒;测试里付费适配器也是手动开启(LIVE_PAID=1),默认不花钱。

质量与可验证性

- 15 套离线测试 / 本机 337 项检查:真实录制样本回放、win32·darwin·linux 三平台发现矩阵、三种 prompt 传输、工具返回值的「无损 JSON」契约(这是 DSH 会整条拒绝工具调用的边界)、注册表导入的对抗性测试、打包/发布检查、客户端启动与渲染测试、模型目录的归一化与降级、余额四态、解释器 argv 拼装(录制流回放的检查数随本机日志多少而变);
- CI 在 ubuntu / macos / windows × node 20 / 22 上全绿——跨平台不是声明,是实测;
- 真实环境验证:DSH web 档 + 无头浏览器(面板、自检、从 npm 与 Release 各装一次)零控制台报错;
- 零运行时依赖、无安装期生命周期钩子、npm pack 内容与 files 字段严格一致。

常见问题

为什么不再依赖 PowerShell 脚本? 启动走 ctx.subprocess(argv 向量,DSH 自己的执行世界),没有该服务时回退到 node:child_process + 真实文件描述符。两者都不经过 shell,因此跨平台;也不再需要旧插件那个 .ps1 桥接脚本。

我的 CLI 不在列表里怎么办? agent_recipe 的 action: "draft" 跑一次,它会把草稿配方和它找到的每一个候选字段(连同证据)一起交给你,你补上 id/label/cost 就能 save。

它会不会自动运行我机器上的二进制? 不会。发现过程是只读的(环境变量、PATH、已知路径、--version)。真正运行必须由模型的显式调用、或你在面板里明确选定的默认 agent 触发。

配方从网上来安全吗? 注册表导入只接受 JSON,且是严格模式:未知顶层键直接报错、超大/非 JSON 载荷在解析前就拒绝、每次导入记入 _provenance.json 可追溯,载荷里的任何内容都不会被执行——配方最终是被本插件自己的引擎读取的数据。

许可

MIT
预览分享卡片长什么样 ↓mike-sl-ig/dsh-agent-bridge
分享 · DeepSeek Harness Hub
mike-sl-ig/dsh-agent-bridge

把 DeepSeek Harness 接到你机器上已经装好的编码 agent CLI…

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部