把本机 DSH 变成外部智能体可调用的 HTTP 服务
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/9 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Elysia07291207/dsh-bridge该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · dev
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 23 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(unknown · 2026/10/9) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量
查看扫描证据(共 22 处,展示前 15 条)
- 读取本地文件bridge.mjs:67
if (existsSync(cfgPath)) { - 读取本地文件bridge.mjs:69
fileCfg = JSON.parse(readFileSync(cfgPath, "utf8")); - 读取密钥环境变量bridge.mjs:76
if (process.env.DSH_BRIDGE_TOKEN) cfg.token = process.env.DSH_BRIDGE_TOKEN; - 读取本地文件bridge.mjs:94
if (logBytes < 0) logBytes = existsSync(CFG.logFile) ? statSync(CFG.logFile).size : 0; - 读取本地文件bridge.mjs:94
if (logBytes < 0) logBytes = existsSync(CFG.logFile) ? statSync(CFG.logFile).size : 0; - 删除本地文件bridge.mjs:97
rmSync(`${CFG.logFile}.1`, { force: true }); - 写入本地文件bridge.mjs:98
renameSync(CFG.logFile, `${CFG.logFile}.1`); - 写入本地文件bridge.mjs:101
appendFileSync(CFG.logFile, line + "\n"); - 读取本地文件bridge.mjs:125
if (c && existsSync(c)) { - 读取本地文件bridge.mjs:137
text = readFileSync(cmdPath, "utf8"); - 删除本地文件bridge.mjs:160
if (liveBackendPids.size === 0) rmSync(BACKEND_PID_FILE, { force: true }); - 写入本地文件bridge.mjs:161
else writeFileSync(BACKEND_PID_FILE, [...liveBackendPids].join("\n") + "\n"); - 执行外部命令来自配置/变量bridge.mjs:350
const child = spawn(LAUNCHER.command, [...LAUNCHER.args, "--profile", CFG.profile], { - 写入本地文件bridge.mjs:701
writeFileSync(CFG.sessionFile, JSON.stringify(arr, null, 2), "utf8"); - 写入本地文件bridge.mjs:863
appendFileSync(CFG.taskLogFile, JSON.stringify({
扫描于 2026/10/31(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 供任意Agent调用
- 零依赖
把本机的 DeepSeek Harness(桌面版 DSH)变成一个任何 Agent 都能调用的本地 HTTP 服务。零依赖、不要求迁移。
README
由 DeepSeek 最新模型翻译生成dsh-bridge
把本机的 DeepSeek Harness(桌面版 DSH) 变成一个可以被外部智能体调用的本地服务。
外部智能体(Hana / Hanako / 你自己的脚本)通过一个 HTTP 接口把任务描述丢进来,桥把任务交给本机的 DSH 去真机执行,再把结果、改动清单和产物路径回传。DSH 仍然是你原来那一个——插件、账号、AGENTS.md、会话记录全部沿用,不需要迁移到任何新形态。
外部智能体(HTTP 客户端) │ POST http://127.0.0.1:3099/task ▼ dsh-bridge(单文件 Node 服务,零依赖) │ JSON-RPC 2.0 over stdio(常驻,不退出) ▼
dsh --profile sdk ← 桌面版 DSH 自带的 SDK 服务
│ 按 (cwd, permission) 分组,各自一个后端进程 ▼ 会话沙箱 / 权限预设(由 DSH 的 sandbox-policy 决定)
它是什么 / 不是什么
是
- 一个本机常驻的 HTTP 服务(默认 127.0.0.1:3099),把「派任务给 DSH」这件事变成一次 POST。
- 一个不要求你搬家的接法:它接上你已经装好、已经登录、已经配好插件的那套 DSH。
不是
- 不是 npm 插件,不会往任何 DSH profile 里装第三方包。
展开完整文档(README 剩余 1 节)
dsh-bridge
把本机的 DeepSeek Harness(桌面版 DSH) 变成一个可以被外部智能体调用的本地服务。
外部智能体(Hana / Hanako / 你自己的脚本)通过一个 HTTP 接口把任务描述丢进来,桥把任务交给本机的 DSH 去真机执行,再把结果、改动清单和产物路径回传。DSH 仍然是你原来那一个——插件、账号、AGENTS.md、会话记录全部沿用,不需要迁移到任何新形态。
外部智能体(HTTP 客户端) │ POST http://127.0.0.1:3099/task ▼ dsh-bridge(单文件 Node 服务,零依赖) │ JSON-RPC 2.0 over stdio(常驻,不退出) ▼
dsh --profile sdk ← 桌面版 DSH 自带的 SDK 服务
│ 按 (cwd, permission) 分组,各自一个后端进程 ▼ 会话沙箱 / 权限预设(由 DSH 的 sandbox-policy 决定)
它是什么 / 不是什么
是
- 一个本机常驻的 HTTP 服务(默认 127.0.0.1:3099),把「派任务给 DSH」这件事变成一次 POST。
- 一个不要求你搬家的接法:它接上你已经装好、已经登录、已经配好插件的那套 DSH。
不是
- 不是 npm 插件,不会往任何 DSH profile 里装第三方包。
- 不提供 DSH 本体,也不提供模型额度——推理走你 DSH 自己的账号通道。
- 不是远程服务、不做鉴权托管:默认只监听回环地址,谁在本机能连端口谁就能用。
前置条件
| # | 条件 | 说明 |
| 1 | 已安装桌面版 DeepSeek Harness | 默认安装位置即可;装在别处需在配置里指定 cliPath |
| 2 | Node.js 在 PATH | 启动脚本会先确认 node 可用 |
| 3 | 该 DSH 已登录(或已配好可用的服务商) | 默认 provider: deepseek-account / model: deepseek-flash,与桌面版一致;不满足会在任务里收到明确报错 |
| 4 | 一个可写的工作目录 | 它就是会话的沙箱可写根,建议在配置里设好 defaultCwd |
DSH 的 sdk profile 是内置模板:首次运行会自动在 ~/.dsh/profiles/sdk 建出来,不需要事先配置,也不需要联网下载。
快速开始
1) 启动(首次运行会从 bridge.config.example.json 生成 bridge.config.json) powershell -ExecutionPolicy Bypass -File .\start-bridge.ps1
2) 健康检查
curl http://127.0.0.1:3099/health # 或: python .\dsh_task.py --health
3) 派一个任务(Python 客户端,标准库即可,无需装依赖)
python .\dsh_task.py --cwd "D:\你的项目" "把 README 里的错别字改掉,并告诉我改了哪几处"
4) 停止 powershell -ExecutionPolicy Bypass -File .\stop-bridge.ps1
常用姿势:
python dsh_task.py "任务" --json # 完整 JSON(含 changes / artifacts / 进度 / sessionId)
python dsh_task.py "接着说" --session-id <ID> # 复用会话,保留上下文
python dsh_task.py "长任务" --background # 立刻返回 taskId,不阻塞
python dsh_task.py --status <TASKID> # 查进度
python dsh_task.py --cancel <TASKID> # 取消
python dsh_task.py --permission danger-full-access "装个插件" # 提升该任务的权限
直接发 HTTP 也行:
curl -X POST http://127.0.0.1:3099/task \
-H "Content-Type: application/json; charset=utf-8" \
-d '{"task":"统计 src 下的文件行数","cwd":"D:/proj","timeout":300}'
PowerShell 5.1 用 curl 别名传 JSON 会把内层引号吃掉,请用 Invoke-RestMethod 或上面的 Python 客户端。
配置(bridge.config.json)
| 键 | 默认 | 说明 |
| host / port | 127.0.0.1 / 3099 | 监听地址。不要改成 0.0.0.0,它没有对外的鉴权体系 |
| token | "" | 非空则要求 Authorization: Bearer <token>;空 = 不鉴权 |
| profile | sdk | 固定用 DSH 自带的 SDK profile,不要改成 desktop |
| dshHome | "" | 空 = 用真实的 ~/.dsh |
| provider / model / reasoningEffort | deepseek-account / deepseek-flash / high | 与桌面版 DSH 对齐;换供应商就改这里 |
| defaultCwd | "" | 未传 cwd 时的默认目录,同时是默认可写根;留空则每次调用都必须传 cwd |
| defaultPermission | workspace-write | read-only / workspace-write / danger-full-access |
| maxConcurrency / maxBackends | 2 / 3 | 并发与后端池上限,超出排队 |
| taskTimeoutSec / bootTimeoutSec | 300 / 180 | 单任务超时 / 后端冷启动超时 |
| cliPath | "" | 显式指定 dsh.cmd 路径(自动找不到时才需要) |
环境变量可覆盖同名项:DSH_BRIDGE_PORT / DSH_BRIDGE_TOKEN / DSH_BRIDGE_DSH_HOME / DSH_BRIDGE_CLI / DSH_BRIDGE_MAX_LOG / DSH_BRIDGE_DEBUG。
优势
1. 零依赖、零安装:服务是一个 Node 单文件(只用内置模块),客户端是标准库 Python。不往任何 profile 装包,不动你的 DSH 配置。
2. 不要求「搬家」:用的是你已有的桌面 DSH——插件、账号、AGENTS.md、会话历史全部沿用。想给外部智能体一只「手」,不必先换一套环境。
3. sdk profile 自举:空目录首次运行会自动重建 profile(实测:四个文件与本机完全一致,全程无需下载)。
4. 没有冷启动:后端进程常驻;同一个 sessionId 复用同一个智能体,上下文连续。
5. 常驻成本低:一个 Node 进程(约 40 MB),空闲时不占 CPU。
6. 改动可核对:返回里带 changes / artifacts / commands,调用方不必猜「它到底动了什么」。
7. 权限分级:按 (cwd, permission) 各自独立后端,读、写、全权三档互不污染。
8. 异步友好:--background 立刻拿到 taskId,长任务不阻塞调用方。
9. 可安全回退:只绑 127.0.0.1;系统级改动只有一个自启键;卸载 = 停服务 + 删目录。
劣势与限制
1. 绑定 Windows + 桌面版 DSH。启动器定位依赖 ...\resources\runtime\cli\bin\dsh.cmd(或 %LOCALAPPDATA% 下的默认安装位置),非 Windows 需自行改造。
2. 用量走 DSH 自己的账号通道。默认 provider: deepseek-account,账号未登录或余额不足会直接失败——不是「换个 key 就能跑」的中立通道。
3. 默认不鉴权。token 为空时,本机任何进程都能调用它,并借它读写你 DSH 可见的目录(受 permission 限制)。多人共用一台机器时必须设 token。
4. 单机、无隔离、无审计。没有多用户隔离,也没有签名审计日志。
5. 轮次边界是「推断」出来的。DSH 的 SDK 协议不把助手消息归属到某次提示词,桥用 status: running → idle 近似判定一轮结束。同一会话的请求是串行的,但这仍不是协议级保证。
6. 一次只回一个结论。result 取最后一轮的最后一条非空助手消息;中间过程只在 partialOutput / changes 里,不是完整轨迹重放。
7. 错误只能转述。桥只把 DSH 报出的失败信息原样带出(这是刻意设计:不替 DSH 编原因),深层诊断仍需看 DSH 侧日志。
8. 没有沙箱加固。安全边界完全交给 DSH 的 sandbox-policy,桥自己不加一层。
9. 并发靠排队,不靠弹性扩容:后端数受 maxBackends 限制,任务粒度太细会互相等。
10. 不提供 Windows 服务。只有 HKCU 自启;注销/关机即停。
11. 与 DSH 版本耦合。协议是 dsh --profile sdk 的 JSON-RPC;DSH 大版本升级后需要回归验证。
已实测(Windows 11 + 桌面版 DSH)
- 空环境自举:在完全空的 DSH_HOME 下启动,profiles/sdk 被自动重建(4 个文件与本机一致),后端 1.4 秒就绪并接受任务。
- 未登录时的行为:任务明确失败并给出原因,而不是静默挂起:
status=failed
error=Sign in to DeepSeek to use the account provider. The request destination must allow account authentication.(ACCOUNT_SIGN_IN_REQUIRED)
- 认证通过后的行为:请求真实抵达服务端并回传业务响应(例如余额不足会以 ACCOUNT_QUOTA / HTTP 402 的形式被带出来)。
- 失败不再被吞:轮次级错误(assistant/attempt 的 finish reason、turn/end 的 reason)会被捕获并以 status: failed + error 呈现;不会出现「成功但没有任何输出」。
排障
| 现象 | 处理 |
| /health 连不上 | 看 bridge.err.log;确认 node 在 PATH、端口未被占用 |
| 启动日志说「未找到 dsh 启动器」 | 在配置里显式写 cliPath,指向 ...\resources\runtime\cli\bin\dsh.cmd |
| 任务报 ACCOUNT_SIGN_IN_REQUIRED | 桌面版 DSH 未登录,或该账号不适用于这条 headless 通道 |
| 任务报 ACCOUNT_QUOTA / HTTP 402 | 账号余额不足 |
| 任务一直不结束 | 首次调用要拉起后端(数秒);看日志里的 [backend ...] 行;确认 timeout 够长 |
| cwd 不存在 / 提示没有可用工作目录 | 传 cwd(绝对路径,且必须已存在),或在配置里设 defaultCwd |
| 结果为空字符串 | 该轮没有产生文本(可能只做了工具调用);也可能是本轮以错误结束——现在会明确报 failed |
安全说明
- 服务只绑定 127.0.0.1,不对外网暴露。
- 它继承 DSH 的文件沙箱:任务能写哪里由 permission + cwd 决定,默认 workspace-write 只落在任务的工作目录内。
- 需要更高权限的任务(如安装插件、写工作区之外)会要求 danger-full-access——请逐个判断,不要默认放开。
- 若要多人/多脚本共用,请设置 token 并保持端口仅本机可达。
卸载
powershell -ExecutionPolicy Bypass -File .\stop-bridge.ps1 # 停服务 powershell -ExecutionPolicy Bypass -File .\autostart-off.ps1 # 关开机自启(如开过)然后直接删掉本目录即可;服务本身没有系统级安装如需连 profile 一起清掉(删掉后首次调用会自动重建): Remove-Item -Recurse -Force "$env:USERPROFILE\.dsh\profiles\sdk"
目录
| 文件 | 作用 |
| bridge.mjs | 服务本体(Node 单文件,零依赖) |
| dsh_task.py | 命令行客户端(标准库 Python) |
| start-bridge.ps1 / stop-bridge.ps1 | 启动 / 停止(后台常驻) |
| autostart-on.ps1 / autostart-off.ps1 | 开机自启开关(写 HKCU Run,可逆) |
| bridge.config.example.json | 配置模板,首次启动自动复制为 bridge.config.json |
| LICENSE | MIT |
许可证
MIT © 2026 Elysia07291207预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Elysia07291207/dsh-bridge
把本机 DSH 变成外部智能体可调用的 HTTP 服务
相关插件 · 开发 / 工程
隐私简历生成器reactive-resume/reactive-resume
Reactive Resume 已迁至 GitHub 上的…
★ 45,125已汉化MCP
71.7
AI 架构文档生成器sopaco/deepwiki-rs
🚀 Litho 已进化为 Terrain —— 给你的 AI 智能体一张会呼吸的代码库地图。
★ 3,157已汉化DSH
70.8
长时任务执行闭环AMAP-ML/LongHorizon-Harness
面向 Computer-Use Agent 的 Loop Engineering
★ 1,764已汉化DSH
70.5
AI 编程纪律方法包GanyuanRan/Aegis
让 AI 编程 agent 变得可信:少返工、更安全、说“完成”前先给证据。
★ 1,384已汉化DSH
69.6
多代理编排运行时Enderfga/claw-orchestrator
面向编程智能体的运行时。把 Claude Code、Codex、Antigravity、Grok…
★ 586已汉化MCP
69.4
记忆进化插件csyangwen/dsh-memory-evolve
dsh-memory-evolve 使用场景指南
★ 461已汉化DSH
67.9