跳到主内容

dsh-chatgpt-bridge

9Star1Fork0Issue0Watching

通过官方 MCP 协议把 ChatGPT Web 桥接到本地 DSH,让 ChatGPT 直接创建、查看并继续 DSH 代理会话与受监督目标。

机审证据5/5方法论数据来源安装命令持续维护DSH 版本风险扫描
机审证据安装命令仓库已核验dsh-plugin Topic许可证READMEAI 百科
语言
JavaScript
License
MIT
分支
main
chatgptdeepseekdeepseek-harnessdshdsh-pluginmcpmodel-context-protocol

安装

命令web profile
$ dsh plugin --profile web add dsh-chatgpt-bridge

在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程

对话式安装

帮我安装 DeepSeek Harness 插件 jiezeng2004-design/dsh-chatgpt-bridge:先查看仓库 https://github.com/jiezeng2004-design/dsh-chatgpt-bridge 确认安全性,然后执行安装命令并验证插件加载成功。

把这段指令粘贴给 DSH Web GUI 里的助手,由它代你完成安装与验证。

一句话定位

这是一个 DSH(DeepSeek Harness)的官方插件,给 ChatGPT Web 和本地 DSH 之间架一座 MCP 桥,让 ChatGPT 通过标准协议直接创建、查看、继续并监督 DSH 的代理会话与多步目标。插件只负责连接,不重写 DSH 的会话、代理、工具、审批、沙箱与工作区安全模型。

核心能力

  • 让 ChatGPT 通过 15 个 dsh_* 工具调用 DSH(健康检查、工作区列表、会话创建/查看/继续、任务状态与结果、审批与提问决策)
  • 支持长任务监督(Goal Supervision):用 dsh_start_goal 发起多步目标,dsh_wait_goal 长轮询,dsh_update_goal 修订/挂起/恢复,dsh_stop_goal 幂等停止
  • 提供两种 MCP 传输:默认 Streamable HTTP(127.0.0.1:3456/mcp)和 stdio;首启动自动生成并持久化鉴权 token
  • 在 DSH Web 设置里新增「ChatGPT Bridge」面板,托管并监控一个 plugin-owned 的 tunnel-client 子进程(含 Start/Stop/Restart、分层诊断、日志查看)
  • 复用 DSH 自身的会话日志($DSH_HOME/sessions/<workspace>/<session-id>/session.jsonl.zstd)作为会话身份权威,桥接、ChatGPT、DSH 重启都不丢失会话
  • 严格继承 DSH 的工作区边界、审批一次性许可、沙箱路径限制,不暴露任意 shell 工具

技术实现

  • 语言: TypeScript(Node.js ESM,源码含 type: "module")
  • 关键依赖: @modelcontextprotocol/sdk(MCP 协议)、@deepseek-ai/cordis(DSH 插件容器)、@deepseek-ai/dsh-agent / dsh-session / dsh-llm(代理与模型接入)、zod + @deepseek-ai/schemastery(配置/入参校验)
  • 架构模式: 作为一条 DSH(Cordis)plugin row 通过 dsh.bundle.patch(cordis.patch.yml)注入宿主;插件启动时 apply(ctx, config) 拉起 Bridge,由 McpServer 注册 15 个工具并经 Streamable HTTP 或 StdioServerTransport 对外;HTTP 服务支持 Bearer token 鉴权
  • 入口文件: src/index.ts(apply 启动入口) + src/bridge.ts(DSH 接缝适配核心) + src/mcp.ts(15 个 dsh_* 工具声明) + src/client/index.js(DSH Web 设置面板)

适用场景

当你已经在本地或自托管环境跑 DSH,想用 ChatGPT 来直接给它派活、看进度、续聊,而不是把内容复制粘贴到 Web UI 里时,这个插件把 DSH 暴露成 ChatGPT 可识别的 MCP 应用。同时它也适合需要长任务监督(执行计划、目标修订、2FA 卡住时挂起 npm 发布等分支)的场景,因为 Goal Supervision 协议让 ChatGPT 在同一回合里持续轮询。

前置依赖与兼容性

依赖最低版本说明
DeepSeek Harness (DSH)0.1.0-rc.6插件声明的 @deepseek-ai/dsh-* peer/dev 依赖全部锁到 0.1.0-rc.6;需要在同一 profile 下启用 web(推荐)或自定义 headless profile(参考 cordis.headless.patch.yml)
Node.js>= 22package.json#engines.node 写 "node": ">=22";npm run typecheck / npm test 脚本使用 Node 22+ 的测试隔离 flag
平台macOS / Windows / Linux源码使用 process.platform 区分 win32(taskkill /T /F)与 POSIX(SIGTERM/SIGKILL)流程;process-tunnel-runtime.ts 显式支持 platform: NodeJS.Platform 注入做跨平台测试
原生模块无依赖列表(@deepseek-ai/cordis、@modelcontextprotocol/sdk、zod、@deepseek-ai/schemastery 等)全部为纯 JS;无 node-gyp / node-pty / node:sqlite 等原生绑定

安装方式

dsh plugin --profile web add dsh-chatgpt-bridge

配置项

配置类型说明默认值
transport枚举 (http / stdio)MCP 传输方式;HTTP 走 127.0.0.1:3456/mcp 给 ChatGPT Web 用,stdio 留给本机 MCP 客户端http
host字符串HTTP 服务绑定地址127.0.0.1(仅本地环回)
port数字 (1–65535)HTTP 服务绑定端口3456
authMode枚举 (token / none)鉴权模式;选 none 时不要求 Bearer token(仅环回时可用)token
authToken字符串静态 token;留空则回退到 authTokenEnv 环境变量,再回退到自动生成并写入 tokenFile 的随机 token空
authTokenEnv字符串当 authToken 为空时读取的 token 环境变量名DSH_CHATGPT_BRIDGE_TOKEN
tokenFile字符串自动生成 token 的落盘路径;留空则写入 $DSH_HOME/chatgpt-bridge.token空
resultMaxChars数字dsh_get_result 返回的助手文本最大字符数8000
resultMaxItems数字dsh_get_result 返回的工具调用条数上限50
sessionMaxItems数字dsh_get_session 返回的消息条数上限20
sessionMaxChars数字dsh_get_session 中每条消息的字符上限4000
logLevel枚举 (debug / info / warn / error)桥接日志级别;日志写到 $DSH_HOME/chatgpt-bridge.log 并脱敏,stdio 模式下不会污染 stdoutinfo

常见问题

Q: 安装后还需要额外配置吗?

A: 不需要。默认监听 127.0.0.1:3456、启用 token 鉴权,首次启动会自动生成一个随机 token 并持久化到 ~/.dsh/chatgpt-bridge.token。如果想用固定 token,可设置环境变量 DSH_CHATGPT_BRIDGE_TOKEN 或在配置里填 authToken。

Q: ChatGPT 怎么访问到我本机的 MCP 端点?

A: ChatGPT Web 是远程 MCP 客户端,无法直接打到 127.0.0.1。需要走 OpenAI 当前支持的 Secure MCP Tunnel 或自定义连接器,把请求转发到 http://127.0.0.1:3456/mcp,并把生成的 token 作为 Authorization: Bearer <token> 带上。桥接自身不暴露公网接口,也不自带隧道。

Q: 这个插件会改动 DSH 核心吗?

A: 不会。插件仅通过 DSH 公开的接缝(ctx.agents、ctx.sessions、ctx.sessionPersistence、ctx.workspaceRegistry、ctx.approval、ctx.userQuestions 等)驱动 DSH,DSH 的会话、代理、工具、审批、沙箱与工作区安全模型保持原样;不修改任何 DSH 核心文件。

Q: 会话保存在哪里?会跨重启丢失吗?

A: 由 DSH 自己落盘到 $DSH_HOME/sessions/<workspace>/<session-id>/session.jsonl.zstd。桥接、ChatGPT、DSH 任意一方重启后,dsh_send_message 仍能命中同一个 session_id,并通过 ctx.agents.resume() 把日志重放进模型上下文。

Q: 报 401 Unauthorized 怎么办?

A: token 是与运行时绑定的。切换过 $DSH_HOME、token 重新生成、或 DSH_CHATGPT_BRIDGE_TOKEN 与已落盘 token 不一致都会触发。读取当前 runtime 实际生成的 token(在 $HOME/.dsh/chatgpt-bridge.token)后让 ChatGPT 重新连接即可。

Q: 端口 3456 被占用怎么解决?

A: 先用 lsof -iTCP:3456 -sTCP:LISTEN(macOS/Linux)或 Get-NetTCPConnection -LocalPort 3456(Windows)查占用进程,不要直接 kill 陌生进程。如果是旧的 DSH/桥接进程就正常停止;否则修改 profile 配置里的 port 字段,或者释放该端口。

Q: 怎么彻底卸载?

A: 执行 dsh plugin --profile chatgpt-bridge remove dsh-chatgpt-bridge,或在 profile 配置文件里把 chatgpt-bridge 行加 disabled: true 重启。桥接创建的会话日志会保留在 DSH 中,可被任何共享 $DSH_HOME 的 profile 继续恢复。

Q: stdio 传输能给 ChatGPT 用吗?

A: 不能。ChatGPT Web 不会在本地拉起进程。stdio 只适合与同机运行的 MCP 客户端对接;ChatGPT 必须走 HTTP + 安全隧道。切到 stdio 后还要保证引导进程不向 stdout 输出任何内容,否则会污染 MCP 协议帧。

上手难度

进阶 — 需要先把 DSH 装好、跑通一个 web profile,再让 ChatGPT 通过 MCP tunnel 连到 127.0.0.1:3456/mcp;只要 token 流程和端口/防火墙没卡住,剩下 15 个工具的语义都比较直观。

已知问题与限制

  • ChatGPT 是远程 MCP 客户端,桥接只能监听 127.0.0.1;必须配合 OpenAI 当前支持的 Secure MCP Tunnel 才能连通,桥接本身不提供公网入口
  • 挂在桥接进程里的 waiting_for_approval / waiting_for_user 决策是进程内对象,桥接在它们仍处于挂起状态时重启会被判为 cancelled(fail-closed)
  • dsh_get_result.changed_files 是从会话日志里编辑类工具的参数里解析出来的,不是文件 diff 查看器
  • waiting_for_user 提供方槽位是单例;当 Web UI 已经占用时,问题会走 Web UI 而不是桥接
  • 单 profile 部署才会看到冷启动会话的标题;并发 profile 共享 projection cache 会出现互相覆盖的标题
  • v0.4.0 未实现:原生运行时(NativeManagedTunnelRuntime)、运行时热切换、进程崩溃后的 PID 接管恢复;当前由 ProcessTunnelRuntime 负责子进程托管
  • 销毁性 kill(SIGKILL / taskkill /T /F)每次都重新校验 PID + 规范化可执行路径 + 进程启动时间;任一不一致或读取失败都拒绝强杀,避免误杀 PID 被复用的进程

查看使用指南 →

该插件的安装步骤、关键要点、FAQ 与兼容性说明(基于已收录字段派生)。

收录徽章

Listed on deepseek-plugin.org
[![Listed on deepseek-plugin.org](https://img.shields.io/badge/listed_on-deepseek--plugin.org-007EC6)](https://deepseek-plugin.org/plugins/jiezeng2004-design/dsh-chatgpt-bridge)

把这段 markdown 粘贴到你的 GitHub README,链接回本插件详情页。徽章只声明已被本站收录,不代表安全认证。

返回插件目录