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

ChatGPT 接入网关 siddhartha-yz/dsh-mcp-gateway

MCP
siddhartha-yz56 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

把 ChatGPT 网页对话接到本地 DSH 运行时

31.2/100
综合分
3
GitHub 星标
—
npm 周下载
—/5
用户评分

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

相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/siddhartha-yz/dsh-mcp-gateway.git

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
装得上吗
该类项目属生态应用(桌面端 / Web 外壳),不以 dsh plugin add 方式安装,请按仓库说明部署
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 56 天前
档位由哪些信号合成

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

验证判据与等级说明 →
⚠︎ 实装验证未通过(unknown · 2026/10/31) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

仓库 package.json 标记 private,未发布到 npm,需从源码安装;安装清单取自 dsh-chatgpt-web-bridge-plugin/package.json

展开查看检查明细 ↓

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

✗npm 包@siddhartha-yz/dsh-chatgpt-web-bridge(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/12 01:49:45

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

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 13 处,展示前 13 条)
  • 发起网络请求
    dsh-browser-session-plugin/index.js:605
    state.network.push({ page_id: id, method: response.request().method(), status: response.status(), url: response.url().slice(0, 4000) })
  • 读取本地文件
    dsh-browser-worker/index.js:119
    const status = await readFile('/proc/self/status', 'utf8')
  • 读取本地文件
    dsh-browser-worker/index.js:122
    try { apparmor = (await readFile('/proc/self/attr/current', 'utf8')).trim() } catch {}
  • 执行外部命令固定命令
    dsh-browser-worker/index.js:155
    const result = spawnSync('/usr/bin/systemctl', ['show', 'dsh-web-host.service', '-p', 'MainPID', '--value'], {
  • 删除本地文件递归
    dsh-browser-worker/index.js:194
    if (profileDir) await rm(profileDir, { recursive: true, force: true }).catch(() => {})
  • 写入本地文件
    dsh-browser-worker/index.js:240
    await mkdir(dirname(profileDir), { recursive: true, mode: 0o700 })
  • 写入本地文件
    dsh-browser-worker/index.js:241
    await mkdir(profileDir, { mode: 0o700 })
  • 执行外部命令来自配置/变量
    dsh-browser-worker/index.js:254
    child = spawn(spec.argv[0], spec.argv.slice(1), {
  • 删除本地文件
    dsh-browser-worker/index.js:314
    await rm(socketPath, { force: true })
  • 写入本地文件
    dsh-browser-worker/index.js:326
    await chmod(socketPath, 0o600)
  • 删除本地文件
    dsh-browser-worker/index.js:338
    await rm(socketPath, { force: true }).catch(() => {})
  • 发起网络请求
    dsh-chatgpt-web-bridge-plugin/lib/client.js:25
    const response = await fetch(`${config.basePath}${path}`, { ...options, headers, cache: 'no-store' })
  • 启用终端会话(PTY)
    dsh-shell-session-plugin/index.js:163
    return await terminals.spawn(owner, request, exec?.signal)
扫描于 2026/11/4(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • MCP对接本地运行时

把 ChatGPT Web 通过 OAuth + MCP 接到本地 DSH 运行时

README

由 DeepSeek 最新模型翻译生成
dsh-mcp-gateway 为 ChatGPT Web 提供一个成熟的 DSH Harness。 ChatGPT Web 仍然是唯一的主要推理/模型智能体。本项目通过 MCP 将普通的 ChatGPT 对话连接到 DSH,因此 DSH 管理的工具、技能、任务、会话、策略、MCP 客户端以及兼容的社区扩展都可以成为 ChatGPT 的能力,而无需为每个扩展重建定制的封装。 仓库级架构契约是 AGENTS.md。当较旧的原型代码或文档与该契约冲突时,以契约为准,除非仓库所有者明确更改产品方向。有序的个人开发路线图是 docs/roadmap.md。 目标架构 ChatGPT Web Chat OAuth + MCP v ChatGPT DSH adapter v DSH Harness +-- DSH tools / skills / extensions +-- sessions / jobs / policy / MCP clients -- optional execution providers +-- local machine -- selected local-shell-mcp capabilities 适配器应尽可能薄且通用。
展开完整文档(README 剩余 1 节)
dsh-mcp-gateway

为 ChatGPT Web 提供一个成熟的 DSH Harness。

ChatGPT Web 仍然是唯一的主要推理/模型智能体。本项目通过 MCP 将普通的 ChatGPT 对话连接到 DSH,因此 DSH 管理的工具、技能、任务、会话、策略、MCP 客户端以及兼容的社区扩展都可以成为 ChatGPT 的能力,而无需为每个扩展重建定制的封装。

仓库级架构契约是 AGENTS.md。当较旧的原型代码或文档与该契约冲突时,以契约为准,除非仓库所有者明确更改产品方向。有序的个人开发路线图是 docs/roadmap.md。

目标架构

ChatGPT Web Chat

OAuth + MCP

v
ChatGPT DSH adapter

v
DSH Harness

+-- DSH tools / skills / extensions
+-- sessions / jobs / policy / MCP clients
-- optional execution providers

+-- local machine
-- selected local-shell-mcp capabilities

适配器应尽可能薄且通用。DSH 是 harness/运行时权威;local-shell-mcp 主要是经过验证的公共隧道/OAuth/远程 worker 模式以及选定的差异化执行能力的来源,而不是主要 harness。

与 local-shell-mcp 的关系

local-shell-mcp 在这里不是 harness 核心。它的有用贡献是经过验证的 ChatGPT Remote MCP/OAuth 和公共隧道模式,以及差异化执行能力,例如远程 worker 和浏览器控制。这些能力在有用时可以组合在 DSH 之后。

最近的 LSM 会话/延续工作仍然是有用的参考资料,但本仓库不会将该运行时复制到网关中。DSH 拥有 harness 生命周期和能力组合。

当前状态

第一个直接的 DSH Harness 接缝已实现。一个驻留在 DSH 中的小型 Cordis 插件使用 DSH 自己的 ctx.tools 注册表:

DSH tool/community plugin
| ctx.tools.register(...)
v
DSH ToolRuntime
| schemas() / execute()
v
loopback ChatGPT bridge

v
OAuth MCP gateway

v
ChatGPT Web

主要兼容性接口被有意设计得小而稳定。ChatGPT 可以保留相同的已批准 MCP 工具,同时 DSH 获得经过审查的社区扩展:dsh_tool_catalog 在 DSH 侧的 chatgpt-external-v1 能力配置文件完成投影后,读取实时的预设范围 ToolRuntime 目录;dsh_tool_call 仅通过 ctx.tools.execute(...) 执行仍被该配置文件批准的工具。因此 DSH 策略/防护仍然是权威的,并且此路径不要求 ChatGPT 刷新或重新批准其 MCP 工具快照。

通用 Harness 操作同时覆盖 DSH 工具和 DSH 社区技能:
- dsh_tool_catalog:读取 DSH ToolRuntime 当前的外部 ChatGPT 投影。
- dsh_tool_call:仅当某个工具仍处于已批准状态且存在于该投影中时,才通过 DSH 受保护的 ToolRuntime 流水线执行该工具。
- dsh_skill_catalog:列出 DSH 原生 SkillRegistry 中可供 Harness 工作区模型调用的条目。
- dsh_skill_load:从该注册表加载一个兼容的社区技能的指令。

默认的 chatgpt-external-v1 配置文件涵盖确定性实用工具、文件系统操作、shell/作业、Web 访问、图像读取以及 DSH 插件发现。DSH AgentLoop 生命周期/编排工具(如目标/待办控制、子代理、workflow、ralph、send_message、ask_user_question 和 exit_plan_mode)被排除在发现和猜测名称执行之外。ToolRuntime 的 skill 辅助工具也被排除,因为技能已经有专门的 dsh_skill_catalog / dsh_skill_load 接口。经过审核的社区 ToolRuntime 条目可以通过 DSH 桥接覆盖层中的 allowExtraTools 逐个添加;保留的 AgentLoop 和技能名称无法通过该通用选择加入机制启用。OAuth 网关不包含此策略的任何副本。

仓库中的 task_state 插件是一个经过明确审核的额外能力。它通过 DSH 原生的 storageDomain 存储紧凑的工程任务记录:标题/目标/工作区、当前摘要和计划、候选后续步骤、引用、状态、修订版本以及有界的检查点历史。其 resume 操作仅将暂停的记录改回 active;它不会恢复进程、调用模型、选择操作或继续工作。对现有任务的变更需要最新的 if_revision,因此过期的对话会失败关闭,而不是静默覆盖较新的检查点。

仓库中的 shell_session 插件是另一个经过审核的额外能力。它在隔离的 DSH TerminalSessionService 加上原生 terminal-bash 后端之上暴露 open/list/status/send/read/signal/close。该适配器不包含任何 PTY、进程或沙箱实现:DSH 保留精确 Agent 所有权、持久化的 cwd/环境/进程上下文、有界的回滚/输出、前台信号、超时、进程树清理以及共享沙箱策略。现有的一次性 bash 工具仍可用于更简单的命令。
该仓库的 browser_session 插件是一个经过审查的运行时扩展,用于持久化 Chromium 交互。它暴露 open/list/status/snapshot/act/script/close,且不包含内部模型循环、调度器或自主浏览器任务。浏览器会话严格按 Agent 隔离;在会话存活期间,页面、cookie、DOM 和内存中的浏览器状态在工具调用之间持续存在。Playwright 仅提供协议控制。DSH 仍是文件效果策略的权威:插件解析当前 DSH sandboxPolicy,并要求配置的 DSH 沙箱提供程序以失败关闭(fail-closed)方式对其进行验证。对于 workspace-write,Chromium 随后使用经过审查的 @deepseek-ai/dsh-sandbox-local 0.1.2-rc.1 bwrap 挂载配置(/ 只读,私有 /proc 和 /tmp,工作区以可写方式绑定挂载),因为 DSH 的 Landlock 回退会故意阻止 Chromium 为其自身用户命名空间沙箱所需的 /proc/*/uid_map 写入。一个窄范围的本地 dsh-browser-worker 仅在专用 AppArmor userns 配置文件和 NoNewPrivs=1 下启动该确切的 bwrap+Chromium argv(对于 danger-full-access 则直接启动固定版本的 Chromium)。该 worker 仅通过 Unix SO_PEERCRED 接受来自活动 dsh-web-host.service MainPID 的 spawn 请求,不包含 shell/模型/调度器,并负责浏览器进程树/配置文件的清理。运行时锁固定 playwright-core 以及用于对等凭据查找的小型 Koffi 绑定,而部署则以可复现方式安装匹配的 Chromium 构建。

默认网关模式有意设计为 meta-only:tools/list 仅暴露那四个稳定的 DSH 元工具,各个 DSH ToolRuntime schema 不会投射到 ChatGPT 中,并且网关不会通告现代工具列表变更订阅。这使得冻结快照属性成为强制执行的协议边界,而不是对客户端行为的假设。当操作者希望兼容的 DSH 工具作为一等 MCP 工具出现时,可以显式启用 --tool-surface projected 作为单独的 UX 模式。
桥接直接使用 DSH 的原生预设作用域进行发现。agentPresets.standingKeyFor(presetId) 会解析部署当前的默认预设,而无需启动 Agent、Session 或模型轮次;ToolRuntime.schemas(scope) 和 SkillRegistry 查找都使用该常驻作用域。工具执行通过 ToolRuntime.execute(...) 进行,其 0.1.2-rc.1 API 需要 Agent 来进行 agent 作用域的策略和模态检查。因此,桥接会在首次工具调用时惰性创建那个仅含元数据的执行 Agent。其持久辅助 id 是工作区 cwd、预设 id、解析后的组合路径,以及 DSH 用于检测新常驻代际的相同 mtimeMs/大小文件戳的非可逆哈希,再加上内容摘要以避免大小相等的重写产生别名。只有在那个确切的工作区/预设组合代际仍然适用时,重启才会恢复同一个辅助;不同的工作区、更改的默认预设或编辑过的组合会获得不同的辅助。Setup 在 agentPresets.mount(...) 之后重新检查预设路径/戳,如果热重载与辅助创建发生竞争,则失败关闭。Catalog/skill 读取不会创建辅助会话,普通重启也不再每次启动都累积一个新的持久辅助。

对于执行受路由模型声明模态门控的原生 DSH 工具,惰性执行 Agent 指向一个本地仅含元数据的 ChatGPT Web 路由。该路由声明 text + image 输入,以便 DSH 自己的 read_image 门控可以验证外部 ChatGPT 消费者,但其 stream() 方法总是失败,并且桥接从不向 Agent 提交提示。因此它不执行任何推理,不需要模型 API 密钥,也不可能成为隐藏的第二个模型。0.1.2-rc.1 升级冒烟测试验证了预设作用域的 bash 执行,以及原生 read_image 在未配置提供商凭据的情况下通过桥接返回图像块。

DSH 的 additionalContexts 也在外部 agent 边界上得以保留。DSH 将这些后续用户上下文用于守卫提醒,以及用于嵌套 Code Mode 结果,例如 run_code 返回的图像。桥接会在这些上下文中物化由附件支持的图像,MCP 适配器会将其可见的文本/图像块追加到工具结果中,因此用 ChatGPT Web 替换 DSH 自己的模型循环不会静默丢弃策略或嵌套多模态上下文。
这意味着添加一个兼容的技能无需 Python 包装器、网关重启或 ChatGPT 应用重新发布。新的 ToolRuntime 能力同样无需 Python 包装器,但它必须被 DSH 侧的外部能力配置文件所接纳(默认情况下为内置能力,经过审核的社区工具通过 allowExtraTools 接纳)。固定的元工具会按需发现由此产生的实时投影。仅在可选的 projected 工具表面模式下,DSH 侧桥接会跟踪原生 tools/change 失效事件,网关会发布 MCP tools/list_changed,从而让支持动态刷新的客户端获得一等公民级别的已批准条目。

DSH 侧桥接插件位于 dsh-bridge-plugin/,部署叠加层为 deploy/dsh/chatgpt-bridge.cordis.yml。

OAuth / MCP

保留现有的嵌入式 OAuth 实现。它提供持久化的动态客户端注册、PKCE/公共客户端支持、所有者批准、资源/签发者绑定的令牌、刷新轮换、撤销、有界注册状态,以及针对公共 MCP 端点的 DNS 重绑定防护。

主要 harness 模式不需要模型提供方 API 密钥。使用桥接叠加层运行 DSH Web Host,然后将 OAuth 网关指向其回环桥接:

python -m pip install --constraint deploy/server-constraints.txt -e '.[server]'

export DSH_MCP_GATEWAY_ADMIN_PIN='choose-a-long-owner-pin'

dsh-mcp-gateway \
--public-base-url https://gateway.example.com \
--dsh-harness-url http://127.0.0.1:3080 \
--state-dir .dsh-mcp-gateway

公共端点为:

https://gateway.example.com/mcp

GET /healthz 检查网关进程。在 harness 模式下,GET /readyz 检查回环 DSH 能力桥接;它从不探测 LLM 提供方。

开发

python -m pip install -e '.[dev]'
ruff check src tests scripts
python -m unittest discover -s tests -v

CI 使用的服务器依赖图固定在 deploy/server-constraints.txt 中。

设计不变量

- ChatGPT 是唯一的主要推理 Agent。
- DSH 是 harness/运行时权威。
- DSH 社区能力应通用地跨越适配器,而不是获取定制的网关包装器。
- 稳定的元工具是扩展发现/调用的正确性路径;动态一等公民工具投影是可选的用户体验。
- 工具执行保持在 DSH 自身受保护的 ToolRuntime 管道内。
- 公共 OAuth/MCP 边界保持在回环 DSH Web Host 之外。
- local-shell-mcp 是可选的执行/访问提供方和参考,而非主要 harness。
- 网关拥有的会话/延续实验是遗留工作,而非当前架构。

许可证

MIT。参见 LICENSE。安全报告指南见 SECURITY.md。
预览分享卡片长什么样 ↓siddhartha-yz/dsh-mcp-gateway
分享 · DeepSeek Harness Hub
siddhartha-yz/dsh-mcp-gateway

把 ChatGPT 网页对话接到本地 DSH 运行时

这是你的仓库?认领条目

回到顶部