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

本机 DSH 桥接 Elysia07291207/dsh-bridge

DeepSeek Harness
Elysia0729120723 天前有提交已提供中文文档扫描:含敏感能力

把本机 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
装得上吗
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 23 天前
档位由哪些信号合成

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

验证判据与等级说明 →
⚠︎ 实装验证未通过(unknown · 2026/10/9) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
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
预览分享卡片长什么样 ↓Elysia07291207/dsh-bridge
分享 · DeepSeek Harness Hub
Elysia07291207/dsh-bridge

把本机 DSH 变成外部智能体可调用的 HTTP 服务

回到顶部