把 DSH 上下文转发给 ChatGPT 换取单步决策
30.8/100
综合分
6
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/27 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查未通过:缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add 2025ashore/DSH-Brain-Bridge该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · model
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 69 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包dsh-chatgpt-mcp(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/12 09:37:51
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 52 处,展示前 44 条)
- 发起网络请求browser-autowake/background.js:6
const response = await fetch(GATEWAY_STATUS_URL, { cache: 'no-store' }); - 读取本地文件browser-autowake/cdp-daemon.mjs:23
const parsed = JSON.parse(readFileSync(MODEL_BINDINGS_FILE, 'utf8')); - 读取密钥环境变量browser-autowake/cdp-daemon.mjs:29
const BINDING_KEY = process.env.DSH_BRAIN_BINDING_KEY || loadBindingKey(ROUTE); - 发起网络请求browser-autowake/cdp-daemon.mjs:59
const response = await fetch(url, { cache: 'no-store', signal: controller.signal, ...options }); - 执行外部命令固定命令browser-autowake/cdp-daemon.mjs:137
const child = spawn('/bin/bash', [RECOVERY_SCRIPT, 'recover-browser'], { - 发起网络请求browser-autowake/direct-ui-browser.mjs:166
const response = await fetch(`${cdpBase}/json/new?${temporaryUrl}`, { method: 'PUT' }); - 发起网络请求browser-autowake/direct-ui-browser.mjs:185
try { await fetch(`${cdpBase}/json/close/${encodeURIComponent(target.id)}`); } catch {} - 发起网络请求browser-autowake/direct-ui-browser.mjs:193
try { await fetch(`${page.cdpBase}/json/close/${encodeURIComponent(page.id)}`); } catch {} - 读取本地文件browser-autowake/direct-ui-worker.mjs:10
const config = JSON.parse(readFileSync(process.env.DSH_DIRECT_CONFIG || `${ROOT}/config.json`, 'utf8')); - 读取密钥环境变量browser-autowake/direct-ui-worker.mjs:12
const STATIC_TOKEN = String(process.env.DSH_DIRECT_STATIC_TOKEN || config.staticToken || ''); - 发起网络请求browser-autowake/direct-ui-worker.mjs:53
const response = await fetch(`${GATEWAY}${path}`, { - 发起网络请求browser-autowake/fresh-bootstrap.mjs:15
const response = await fetch(url, options); - 发起网络请求browser-autowake/fresh-bootstrap.mjs:281
try { await fetch(`${CDP_BASE}/json/close/${encodeURIComponent(target.id)}`); } catch {} - 读取本地文件server.cjs:51
return JSON.parse(fs.readFileSync(file, 'utf8')); - 读取密钥环境变量server.cjs:60
const OWNER_PASSWORD = process.env.DSH_MCP_OWNER_PASSWORD || config.ownerPassword; - 读取密钥环境变量server.cjs:61
const STATIC_TOKEN = process.env.DSH_MCP_STATIC_TOKEN || config.staticToken; - 读取本地文件server.cjs:75
const passwdRow = fs.readFileSync('/etc/passwd', 'utf8').split(/ ? /).find(line => line.startsWith(`${COMMAND_USER}:`)); - 写入本地文件server.cjs:98
fs.mkdirSync(STATE_DIR, { recursive: true, mode: 0o700 }); - 写入本地文件server.cjs:149
fs.writeFileSync(tmp, JSON.stringify(persisted) + '\n', { mode: 0o600 }); - 写入本地文件server.cjs:150
fs.renameSync(tmp, FUSION_STATE_FILE); - 读取本地文件server.cjs:754
while (probe !== WORKSPACE_ROOT && !fs.existsSync(probe)) probe = path.dirname(probe); - 执行外部命令来自配置/变量server.cjs:883
const child = spawn(binary, args, { env: { ...minimalCommandEnv(), ...envOverrides }, stdio: ['ignore', 'pipe', 'pipe'] }); - 读取本地文件server.cjs:937
if (!fs.existsSync(presetFile)) return host; - 读取本地文件server.cjs:939
const rows = YAML.parse(fs.readFileSync(presetFile, 'utf8')); - 读取本地文件server.cjs:956
const body = fs.readFileSync(file, 'utf8'); - 执行外部命令固定命令server.cjs:1012
? spawn('/bin/setpriv', [ - 执行外部命令来自配置/变量server.cjs:1021
: spawn(program, args, { cwd, shell: false, env: minimalCommandEnv(), stdio: ['ignore', 'pipe', 'pipe'] }); - 发起网络请求server.cjs:1412
const req = http.request({ host: '127.0.0.1', port: 3080, path: '/', method: 'GET', timeout: 3000 }, res => { - 写入本地文件server.cjs:1519
fs.writeFileSync(tmp, JSON.stringify(oauth, null, 2) + '\n', { mode: 0o600 }); - 写入本地文件server.cjs:1520
fs.renameSync(tmp, OAUTH_STATE_FILE); - 写入本地文件server.cjs:1521
try { fs.chmodSync(OAUTH_STATE_FILE, 0o600); } catch {} - 读取密钥环境变量server.strict.cjs:56
const OAUTH_ACCESS_TOKEN_MS = Math.max(15 * 60 * 1000, Number(process.env.DSH_OAUTH_ACCESS_TOKEN_MS || 60 * 60 * 1000)); - 读取密钥环境变量server.strict.cjs:59
const OAUTH_REFRESH_TOKEN_MS = Math.max(24 * 60 * 60 * 1000, Number(process.env.DSH_OAUTH_REFRESH_TOKEN_MS || 180 * 24 * 60 * 60 * 1000)); - 读取本地文件server.strict.cjs:85
return JSON.parse(fs.readFileSync(file, 'utf8')); - 写入本地文件server.strict.cjs:90
fs.writeFileSync(temp, JSON.stringify(value) + '\n', { mode: 0o600 }); - 写入本地文件server.strict.cjs:91
fs.renameSync(temp, file); - 写入本地文件server.strict.cjs:92
try { fs.chmodSync(file, 0o600); } catch {} - 读取密钥环境变量server.strict.cjs:99
const OWNER_PASSWORD = process.env.DSH_MCP_OWNER_PASSWORD || config.ownerPassword; - 读取密钥环境变量server.strict.cjs:100
const STATIC_TOKEN = process.env.DSH_MCP_STATIC_TOKEN || config.staticToken; - 写入本地文件server.strict.cjs:111
fs.mkdirSync(STATE_DIR, { recursive: true, mode: 0o700 }); - 写入本地文件server.strict.cjs:112
try { fs.chmodSync(STATE_DIR, 0o700); } catch {} - 读取本地文件server.strict.cjs:227
if (fs.statSync(TRACE_FILE).size < TRACE_MAX_BYTES) return; - 删除本地文件server.strict.cjs:229
try { fs.rmSync(backup, { force: true }); } catch {} - 写入本地文件server.strict.cjs:230
fs.renameSync(TRACE_FILE, backup);
扫描于 2026/11/1(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 获取单步决策
- 接入外部推理服务
一个严格的 MCP 推理网关,把 DeepSeek Harness 智能体接到 ChatGPT Web 上,当作外部推理服务商。
README
由 DeepSeek 最新模型翻译生成DSH ⇄ ChatGPT 融合网关
一个极简的 MCP 桥接器,将 DeepSeek Harness(DSH)保持为唯一的智能体与运行时,并仅将 ChatGPT Web 用作无状态的、单轮的推理提供方。
DSH 拥有智能体、工具、权限、会话、压缩、子智能体、工作流、目标以及真实的文件/Shell 执行。网关仅将一份不可变的 DSH 上下文快照转发到 ChatGPT “Brain” 对话,并仅回传一个决策——一个最终答案、一个动作提议,或一个有界的只读批次。网关自身从不执行所提议的动作。
User
↓
DSH UI
↓
DSH Native Agent Loop → Context / Compaction
↓
ChatGPT Fusion LLM Adapter
↓
Fusion Reasoning Gateway ← this repository
↓
ChatGPT Brain Worker (a dedicated ChatGPT Web conversation + optional wake extension)
↓
final | action_proposal | readonly_batch
↓
Gateway validation
↓
展开完整文档(README 剩余 1 节)
DSH ⇄ ChatGPT 融合网关
一个极简的 MCP 桥接器,将 DeepSeek Harness(DSH)保持为唯一的智能体与运行时,并仅将 ChatGPT Web 用作无状态的、单轮的推理提供方。
DSH 拥有智能体、工具、权限、会话、压缩、子智能体、工作流、目标以及真实的文件/Shell 执行。网关仅将一份不可变的 DSH 上下文快照转发到 ChatGPT “Brain” 对话,并仅回传一个决策——一个最终答案、一个动作提议,或一个有界的只读批次。网关自身从不执行所提议的动作。
User
↓
DSH UI
↓
DSH Native Agent Loop → Context / Compaction
↓
ChatGPT Fusion LLM Adapter
↓
Fusion Reasoning Gateway ← this repository
↓
ChatGPT Brain Worker (a dedicated ChatGPT Web conversation + optional wake extension)
↓
final | action_proposal | readonly_batch
↓
Gateway validation
↓
DSH Permissions / ToolRuntime → DSH Native Tool → Next DSH Tick
功能特性
- 严格单结果推理契约 —— 每个请求都携带一份完整、不可变的快照;Brain 仅返回一个终止结果(final、action_proposal,或一个有界的 readonly_batch,包含 read/glob/grep)。
- 可恢复投递 —— 请求会被记录到磁盘日志;崩溃的网关会恢复进行中的认领,而不是丢失它们。通过快照 + nonce 实现幂等重试。
- 多工作节点故障转移 —— 多个 Brain 对话可以为同一模型路由提供支持;停滞的认领会通过轮换的 nonce 被释放并重新投递给健康的备用节点。
- OAuth 2.0(回环) —— 为公共 ChatGPT 连接器(/brain-mcp)提供可选授权,并带有轮换的访问/刷新令牌。
- 跨平台 —— 网关和 Node 守护进程可在 Linux、macOS 和 Windows 上运行。
- 可选的浏览器唤醒 —— 一个 Chrome 扩展(browser-autowake/)轮询回环队列元数据,并在有工作等待时唤醒绑定到路由的 Brain 标签页。
环境要求
- Node.js 18+(使用全局 fetch)。
- git(在 Linux 上,还需要你配置的命令用户)用于工作区工具。
DSH 本身必须可用于 DSH 原生智能体循环和工具运行时;网关会自动检测 DSH 捆绑的 node_modules,或者你可以通过 DSH_NODE_MODULES 环境变量将其指向那里。
快速开始
git clone
cd dsh-chatgpt-mcp
npm install
将真实凭据放入 config.json 和 model-bindings.json(所有值均以 REDACTED_ 占位符形式提供),然后启动:
npm run daemon:start # background, supervised with auto-restart
npm run daemon:status
……或在前台运行:
npm start # node server.strict.cjs
网关绑定 http://127.0.0.1:7688。详细的架构与不变量见 ARCHITECTURE.md。
配置
config.json
| 键 | 含义 |
| host / port | 回环绑定地址(默认 127.0.0.1:7688)。 |
| workspaceRoot | 工具可访问的项目工作区。. = 项目根目录。 |
| ownerPassword | 用于 OAuth 授权的所有者密码(≥ 16 个字符)。 |
| staticToken | 用于回环 Brain MCP 的静态 bearer token(≥ 32 个字符)。 |
| allowedPrograms | 工作区 run_command 工具可启动的可执行文件。 |
| commandUser | 仅限 Linux:沙箱化命令通过 setpriv 降权到的用户。 |
ownerPassword、staticToken 以及绑定键是必填项,使用前必须填写。
在 macOS/Windows 上没有可移植的 setuid 辅助程序,因此沙箱化命令以当前用户身份运行, commandUser 会被忽略。
model-bindings.json
将每个 modelId + reasoningEffort 路由映射到一个 bindingKey。bindingKey 是与匹配的 brain-worker-.txt 共享的密钥;请保持两者同步。
服务控制
在 Linux、macOS 和 Windows 上行为完全一致:
node scripts/daemon.mjs start # start detached supervisor + server
node scripts/daemon.mjs stop
node scripts/daemon.mjs restart
node scripts/daemon.mjs status
这些也以 npm run daemon:start|stop|restart|status 的形式暴露。仅限 Linux 的基于 screen 的脚本仍保留在 scripts/ 中(control.sh、public_quick.sh、……),用于 Cloudflare 快速隧道和无头 Chrome worker 池。
推理协议(v4)
网关与 ChatGPT“Brain”之间使用一套严格的协议通信:
fusion_wait_for_reasoning_request → one immutable snapshot + data-only action catalog
fusion_submit_reasoning_result → exactly one {final} | {action_proposal} | {readonly_batch}
fusion_fail_reasoning_request → terminal failure for the assigned snapshot
actionCatalog 仅是数据——是对 DSH 原生工具的描述,绝不会作为 ChatGPT/MCP 工具安装。action_proposal 是一项建议,由 DSH 稍后在其自身的权限/沙箱策略下执行;网关不会运行它。
公共端点是 GET|POST /brain-mcp。原先的 /mcp 和 /fusion/tasks…
路由返回 HTTP 410(已禁用)。
权限
使用原生三级 DSH 模型——read-only、workspace-write、 danger-full-access——默认使用 workspace-write。
仓库布局
server.strict.cjs active gateway (strict v4; no legacy /mcp)
server.cjs full gateway incl. workspace file/shell tools
config.json runtime configuration (secrets are placeholders)
model-bindings.json modelId → bindingKey map
scripts/daemon.mjs cross-platform daemon (start/stop/restart/status)
scripts/.sh Linux deployment helpers (screen, cloudflared, Chrome workers)
brain-worker-.txt per-route prompts for dedicated Brain conversations
browser-autowake/ optional Chrome extension that wakes Brain tabs
tests/ selftests and headless integration workers
state/ logs/ runtime artifacts (gitignored)
测试
npm install
node tests/reasoning-contract-v4-selftest.mjs # 主要协议测试
…以及 oauth、worker-recovery、failover、context-overflow、payload-limit 自测
完整的测试矩阵请参见实现说明中的 ## 验证 部分。
安全说明
- 默认绑定到 127.0.0.1;只有 quick-tunnel 脚本会暴露一个公共 URL。
- 不要提交包含真实密钥的 config.json 或 model-bindings.json —— 本仓库出于这一原因仅提供占位符。
- 在 Linux 上使用 /bin/setpriv 将沙箱化命令降权到 commandUser;在其他平台上,命令以当前用户身份运行。
DSH ⇄ ChatGPT Fusion 是一个社区桥接项目,与 OpenAI 或 DeepSeek 无关联,也未获得其认可。
使用 ChatGPT 须遵守 OpenAI 的服务条款。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
2025ashore/DSH-Brain-Bridge
把 DSH 上下文转发给 ChatGPT 换取单步决策
相关插件 · 模型接入
API 中继安全审计toby-bridges/api-relay-audit
面向 AI API 中转与 LLM 代理的本地安全审计。
★ 897已汉化DSH
69.4
免费搜索插件DDDMUC/dsh-free-search
DeepSeek Harness 免费搜索插件 —— 无需 API key,零成本,多引擎可切换。 一个给…
★ 761已汉化DSH
68.7
免费联网搜索liustack/modsearch
在官方 App 里模型能联网,切到 API 就不能了。ModSearch 把联网补回来:网页搜索、X…
★ 863已汉化DSH
68.5
OpenCode 免费模型FishBottle7/opencode2dsh
在 DSHDeepSeek Harness里原生使用 OpenCode Zen 的免费匿名模型。
★ 379已汉化DSH
67.8
AI 模型网关tingly-dev/tingly-box
Tingly Box Web UI 演示
★ 373已汉化DSH
67.4
WorkBuddy 账号池XDTrees/dsh-xdpool
把你能白嫖的模型额度接进 DSH 同一个池:WorkBuddy 多账号自动容错、十三家扫码登录、76…
★ 359已汉化DSH
67.1