前言¶
DeepSeek Harness(DSH)桌面端的启动器在代码里写死 --port 0,因此每次启动时 web 端口都由操作系统随机分配。同一台机器上连续几次启动,端口可能依次变成 59507、65361、54266、58834 这类数值。桌宠、IDE 插件、浏览器书签或本地反向代理如果写死了 DSH 地址,每次重启 DSH 都要改配置。
社区插件 dsh-fixed-port-bridge(GitHub:Alice-Marx/dsh-fixed-port-bridge,npm:@ljwei-stak/dsh-fixed-port-bridge)在 DSH 进程内监听你在配置里指定的端口,把 TCP 连接原样转发到宿主当次真实绑定的随机端口。客户端从此只需记住一个固定地址。
这是什么¶
维护者仓库为 Alice-Marx/dsh-fixed-port-bridge,在 SkillHub 等社区目录中归类为「联网工具」。插件不单独起守护进程:生命周期跟着 DSH 走,DSH 起来它就在。
数据流可以概括为:
你的客户端 ──固定端口──► 本插件(跑在 DSH 进程里)──► DSH 真实端口(随机)
核心功能¶
进程内 TCP 转发¶
插件通过 ctx.inject(['webServer']) 拿到宿主 web 服务,惰性读取真实绑定的 listenedPort,再用 net.createServer 在配置的 port 上监听;每个连接用 socket.pipe 原样转发。不需要扫描端口、不需要开机自启。
端口配置与热切¶
装好后重启一次 DSH,设置里会出现「固定端口」板块(settings.section)。在面板里填端口并保存即可热切到新值,不必再重启 DSH;桌宠或脚本侧同步改成同一端口即可。
端口取值优先级(先到先得):
<profileDir>/.dsh-fixed-port-bridge.json(设置面板保存时写入)- 插件
cordis.patch.yml里的config.port - 内置默认
19387
一旦存在第 1 项,它会一直盖住 yml 里的 config.port。若要交回 yml 控制,需删除 <profileDir>/.dsh-fixed-port-bridge.json 再重启 DSH。
首次安装尚未落盘时,默认来自 cordis.patch.yml:
- insert:
- id: fixed-port-bridge
name: "@ljwei-stak/dsh-fixed-port-bridge"
required: false
config:
port: 19387 # ← 首次安装的默认值
修改 yml 需要重启 DSH,并记得把客户端地址改成新端口。
设置面板 HTTP 端点¶
设置 UI 通过宿主 web 面上的两个 exact 路由读写状态(同源,走 DSH 当次真实端口或固定端口均可):
| 方法 | 路径 | 作用 |
|---|---|---|
GET |
/coopanion/fixed-port-bridge/state |
读状态:{ ok, port, source, listening, hostPort, canPersist, configPath } |
POST |
/coopanion/fixed-port-bridge/port |
热切端口并落盘,body 为 { "port": 19387 } |
source 为 file(状态文件)或 config(尚未落盘时的 config.port)。常见错误包括:403 forbidden(Host 非 localhost)、400 invalid-port(端口不在 1024–65535)、400 port-in-use(新端口绑不上时旧端口继续监听)等。详见仓库 README 错误码表。
兼容与容错¶
插件不声明 engines.dsh,bundle 上带 required: false;apply 全程 try/catch,异常只记日志,避免拖垮整个 DSH。固定端口默认只绑 127.0.0.1。
安装与启用¶
1. 插件市场(桌面端推荐)¶
在 DSH 插件市场里,来源填仓库地址:
https://github.com/Alice-Marx/dsh-fixed-port-bridge
桌面端的 desktop profile 由 Electron 应用独占管理,命令行 dsh plugin 按设计不能改它,桌面端请走插件市场。
2. npm(web profile)¶
dsh plugin add @ljwei-stak/dsh-fixed-port-bridge
3. 手工放置¶
把包目录放进 <profile>/node_modules/@ljwei-stak/dsh-fixed-port-bridge,在该 profile 的 package.json 里把包名追加进 dsh.profile.bundles,然后重启 DSH。
当前 package 版本为 1.1.1,许可证 MIT,要求 Node >= 22。
典型用法¶
验证固定端口¶
固定端口生效后,用 curl 访问你客户端关心的路径(示例默认端口 19387):
curl -s http://127.0.0.1:19387/<your-client-path>
在 Windows 上可对照 PID 是否等于 DSH 主进程(若固定端口上是独立的 node.exe,说明被其他进程占用,本插件会 warn 后让位,宿主不受影响):
netstat -ano | findstr :19387
tasklist | findstr "DeepSeek Harness"
仓库自测¶
克隆仓库后可在插件目录执行:
npm test
preflight.mjs 用桩宿主验证导入、监听、转发与换端口行为,不依赖真实 DSH。
适用场景与注意¶
适合谁: 需要在 DSH 重启后仍用同一 localhost 端口对接桌宠、脚本、书签或本地代理的开发者。
权限与安全: 插件在 DSH 进程内运行,权限与当前 DSH 一致;安装前建议阅读源码与 MIT 许可证。固定端口暴露的是整个 DSH web 面(含 GUI),只做整端口 TCP 直通,不做路径过滤。
已知边界:
- 依赖宿主
webServer服务及其listenedPort等字段;DSH 大版本若改变该服务形状,固定端口可能无人监听。 - 目标端口被占用时不抢占,只记 warn,宿主照常运行。
- 设置里改过并落盘后,仅改 yml 不会生效,需按上文删除状态文件或走设置面板。
DSH 生态强调「一切皆插件」;SkillHub 等目录是社区站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-fixed-port-bridge 用进程内中继把「每次随机的 DSH web 端口」收敛成「一个可配置的固定本地端口」,并支持设置面板热切与状态落盘,减少外围客户端反复改地址的成本。
- 社区目录页:https://www.skillhub.cn/plugins/Alice-Marx/dsh-fixed-port-bridge
- 源码与文档:https://github.com/Alice-Marx/dsh-fixed-port-bridge