dsh-codex-gpt
Manifest validOpenAI OAuth login for ChatGPT Codex that adds ChatGPT as a selectable LLM provider (streaming, Off/Low/High/Max reasoning effort, image input) and a codex tool for per-session DeepSeek escalation, wi
dsh-codex-gpt(双脑)
中文名:双脑 —— DeepSeek 与 ChatGPT 两个脑子协作:日常由 DeepSeek 处理,难题交给 GPT 做独立分析或构建,侧边栏一块面板同时看着各家的额度与积分。
| 名称 | 值 | 说明 |
|---|---|---|
| 包名(下载名) | dsh-codex-gpt(package.json 的 name) | 安装、更新、依赖引用用的名字,不要改,改了 DSH 就认不出这是同一个插件 |
| 中文名 | 双脑(package.json 的 displayName) | 已写进包元数据;当前 DSH 版本的插件页标题只读包名,所以列表里仍显示 dsh-codex-gpt,「双脑」出现在描述与文档里 |
把 ChatGPT / OpenAI Codex 接入 DeepSeek Harness (DSH) 的插件:既能在模型选择器里把 ChatGPT 当作一个 LLM provider 直接对话,也能让 DeepSeek 在会话内按需把难任务转交给 GPT 做独立分析或代码构建。
全程使用 ChatGPT 订阅额度,走 OpenAI 官方 OAuth 登录,不需要填写 API Key,不产生 OpenAI API 计费。

接手开发 / 换新对话窗口:先读 HANDOFF.md(项目现状、坑、待办)。
特性
1. ChatGPT 作为 LLM provider(直接对话)
- 模型选择器新增 「ChatGPT」 provider(内部 id
openai-codex,与生态对齐:@dougen/dsh-deepseek-usage等按这个 id 识别 ChatGPT 订阅的插件可以直接认出来),选中后整个对话由 GPT 处理:完整上下文、流式输出、工具调用。 - 旧版本注册过的 id
chatgpt-codex仍同时注册(分组名显示为「ChatGPT(旧 id)」),升级前保存过模型选择的老会话不会变成不可路由;把老会话的模型重选一次后就只走新 id 了。 - 模型列表实时从账号可用模型拉取(
gpt-6.1-sol、gpt-6-astra、gpt-5.6-sol…),不写死。 - 支持思考强度:
Off / Low / High / Max,默认High,内部映射到 Codex 的reasoning.effort(Max → xhigh,Off → 不发送 reasoning)。 - 支持图片输入:贴图直接发给 GPT(经
ctx.attachments.readImage读取并编码为input_image)。 - 模型列表带 5 分钟缓存,并对 HTTP 429 限流自动回退,不会污染界面。
- 模型目录落盘缓存(
$DSH_HOME/dsh-codex-models.json):插件刚启动、上游还没返回时也先给上次的完整目录,并把已配置模型始终并进列表——不会出现「模型先消失、要手动重选」。刷新只在后台进行。 - 登录/刷新拿到的 OAuth 令牌会自动同步(节流 60 秒,且绝不在模型列表这种高频路径上写,避免触发 DSH 的凭证变更事件导致界面反复刷新)到
DSH_USAGE_CODEX_OAUTH_TOKEN/DSH_USAGE_CODEX_ACCOUNT_ID两个凭证引用,@dougen/dsh-deepseek-usage这类用量插件不必再手填令牌(同步失败只影响那张卡,不影响对话)。 - GPT 模式轻任务委派(独立开关):开启后,ChatGPT 处理会话时会把格式化、整理、检索归纳、润色等轻任务交给 DeepSeek V4.1 完成并收尾,复杂任务仍由 GPT 直接处理;随时可关。
2. codex 工具(DeepSeek 自主升级)
- 会话级授权:输入框左侧的胶囊按钮控制当前会话(显示名随当前模型变化:本插件 ChatGPT 时显示「DeepSeek」,其余显示「ChatGPT」);未授权会话绝不会调用 OpenAI。
- 已授权会话中,DeepSeek 按任务强度决定是否调用
codex工具;可在设置里关闭「自主调用」。 - 两种模式:
analyze(架构分析、疑难 bug 定位、方案评审、安全审计)与build(直接产出可落地代码/补丁)。
3. 用量看板(兼容 ChatGPT 的自适应看板)
支持哪些 AI、数据从哪来:
| 显示的一页 | 数据来源 | 显示内容 |
|---|---|---|
| ChatGPT | 本插件 OAuth → chatgpt.com/backend-api/wham/usage | 5 小时 / 每周限额、订阅状态与到期日、可用重置卡 |
| DeepSeek | 本插件直连 api.deepseek.com/user/balance(跟随 DEEPSEEK_BASE_URL) | 实时余额、高峰/空闲时段与倒计时 |
| Trae(可选) | dsh-connect-trae 的 /plugins/dsh-connect-trae/usage | 剩余积分(附累计发放、签到状态) |
| WorkBuddy(可选) | dsh-connect-workbuddy 的 /plugins/dsh-connect-workbuddy/usage | 剩余积分(附临近过期提示、签到状态) |
| Qoder(可选) | @dmh2002/dsh-connect-qoder 的 /plugins/dsh-connect-qoder/usage | 剩余积分(附临近过期提示) |
| Kimi / GLM / OpenRouter / MiniMax …(可选) | @dougen/dsh-deepseek-usage 的 /api/deepseek-usage/accounts | 该家余额或用量窗口 |
可选依赖只需「装了就有」,不装也不影响本插件自身(ChatGPT + DeepSeek 由本插件自带)。
- 侧边栏底部一张卡片,默认「自动」:跟着当前在用的模型走——用 ChatGPT 就显示 ChatGPT,用 DeepSeek 就显示 DeepSeek;也可以在设置里固定成某一家(
用量卡默认显示)。 - 点卡片空白处:按固定顺序循环切换 —— DeepSeek → ChatGPT → 其它已配置的 AI → WorkBuddy → Trae。
- 点当前那家的名字:立刻重新读取(刷新)这一家的数据。
- ChatGPT 页:5 小时限额 / 每周限额 / 订阅状态 / 到期时间 / 可用重置卡(设置页可消费,二次确认、不可逆)。
- DeepSeek 页(本插件自带,不依赖别的插件):
- 实时余额(人民币,10 秒缓存),标题旁标「按量计费」;
- 高峰 / 空闲指示(按官方定价页 2026-10 的规则):
- 高峰:UTC
01:00–04:00、06:00–10:00,周一至周五(北京时间09:00–12:00、14:00–18:00); - 空闲(半价):其余所有时间,含周末全天;
- 卡片显示当前处于哪一档 + 距下一次切换的倒计时;
- 已知近似:中国法定节假日官方也按半价,本插件没有节假日日历,节假日当天会按「工作日」计算(显示可能偏严格),实际计费请以官方为准;
- 高峰:UTC
- 余额读不到时显示
—(不是0.00)并给出原因:未配置DEEPSEEK_API_KEY、网络请求失败(检查连接或代理)、上游 HTTP 状态等,绝不编造数字; - 更新节奏:余额每 10 秒自动刷新;点当前那家的名字会立即强制重查;切模型 3 秒内自动跟随;
- 余额端点跟随
DEEPSEEK_BASE_URL(与 DeepSeek 适配器同口径),没设就用官方api.deepseek.com/user/balance。
- 如果机器上还装了别的用量插件(如
@dougen/dsh-deepseek-usage),它已经配好的其它 AI(Kimi / GLM / OpenRouter / MiniMax …)会自动出现在切换列表里;不装也完全可以只用本插件。 - Trae / WorkBuddy / Qoder 积分:装了
dsh-connect-trae或dsh-connect-workbuddy时,卡片会读它们各自暴露的只读用量端点(/plugins/dsh-connect-trae/usage、/plugins/dsh-connect-workbuddy/usage),把剩余积分作为独立一页显示:- Trae:显示剩余积分(
credits.available,缺省时退workAvailable + generalAvailable),并附累计发放与签到状态; - WorkBuddy:显示剩余合计(
credits.total),并在有临近过期积分时提示; - 未登录 / 未安装时这一页不出现,也不会显示成 0 误导;当前会话用的是哪一家,auto 模式就优先显示哪一家。
- Trae:显示剩余积分(
4. 看板开关(两个独立开关)
① 仅看板模式(默认关闭):关闭所有 GPT/Codex 功能,只留看板。
② 关闭看板(默认关闭):只把侧边栏那张用量卡藏起来,ChatGPT 模型、codex 工具、会话授权照旧可用。
两者互不影响:都关 = 原样;只开 ① = 纯看板;只开 ② = 只有 GPT 功能;两个都开 = 两样都没有(不推荐)。
仅看板模式
- 设置页顶部「🦭 看板开关」里有这个按钮,默认关闭;点按钮切换后必须点同一张卡里的「保存看板设置」才写入。
- 打开后:不注册 ChatGPT 模型、不注册
codex/deepseek_delegate工具、不注入会话授权策略、不再同步用量凭证,设置页只留看板相关项、输入框左侧胶囊也会移除 —— 插件退化成纯用量看板。 - 该模式是持久配置:保存后禁用 → 启用插件完全生效。
4. 诊断
- 设置页一键检查
api.openai.com、chatgpt.com、auth.openai.com三条链路。 /dsh-codex-api状态路由暴露登录态、provider 注册状态与模型目录诊断信息。
安装
DSH 中通过 插件管理 以本地 bundle 方式安装:
- 打开「插件 → 插件管理」;
install_bundle,target 指向本目录(或发布后的包名dsh-codex-gpt);- 安装后 bundle 条目 id 为
dsh-codex-gpt。
本包以
link:方式安装到 profile 时,Node 从包的真实目录解析依赖,因此node_modules/(含@deepseek-ai/schemastery等)需要随包本地存在,但不提交到 git。
登录
- 打开 设置 → ChatGPT → 点「登录 OpenAI 账号」;
- 浏览器跳转
auth.openai.com官方授权页,登录并同意; - 回调本机
http://localhost:1455/auth/callback完成授权(端口占用会明确提示)。
凭证仅保存在本机 $DSH_HOME/dsh-codex-auth.json,与 Codex CLI 的 auth.json 相互独立。
使用
方式 A:直接和 ChatGPT 对话
- 完成登录;
- 点输入框的模型选择器,选 ChatGPT 分组下的任意模型;
- 可在同一菜单里调整推理等级(Off / Low / High / Max);
- 正常对话即可,支持贴图。
方式 B:让 DeepSeek 自主调用 Codex
- 模型保持在 DeepSeek(V4.1);
- 点输入框左侧胶囊按钮授权当前会话;
- 遇到高难度任务时 DeepSeek 会调用
codex工具,并在回答中说明所用模型与耗时。
配置
以下字段可在 profile 的 cordis.patch.yml 中修改:
| 字段 | 默认 | 说明 |
|---|---|---|
defaultModel | gpt-5-codex | 默认模型(候选从 OpenAI 实时拉取) |
autoConsult | true | 允许模型自主按任务强度调用 codex 工具 |
allowLanAccess | false | 允许局域网设备只读查看插件状态(写操作始终仅限本机) |
delegateLightTasks | false | GPT 模式下允许把轻任务交给 DeepSeek V4.1 收尾(独立开关,可随时关闭) |
gptNameDetect | false | 保险开关:开启后其他 provider 的模型名形如 gpt-* / o3-* 也按 GPT 识别(影响胶囊显示名) |
deepseekModel | 空 | 轻任务委派使用的 DeepSeek 模型 id;留空自动选择当前可用模型 |
持久化数据:
| 路径 | 内容 |
|---|---|
$DSH_HOME/dsh-codex-auth.json | OAuth 凭证(access/refresh token、账号信息) |
$DSH_HOME/dsh-codex.json | 按会话的授权状态与模型选择 |
架构
| 文件 | 作用 |
|---|---|
index.js | Host 插件入口:codex 工具、会话授权、系统提示策略段、LLM 适配器注册、设置页 provider 目录、/dsh-codex-api 路由 |
llm-adapter.js | DSH LlmAdapter 适配器:模型目录、思考强度、图片输入、SSE → StreamChunk 转换 |
codex.js | Codex 后端调用层:codex/responses(SSE)、codex/models、重置卡查询/消费 |
oauth.js | OpenAI OAuth:PKCE、1455 回调服务器、token 交换/续期、凭证存储 |
usage.js | ChatGPT 订阅用量(wham/usage),插件凭证优先、兼容 Codex CLI |
network.js | 外网连通性检查 |
client.js | 浏览器侧:输入框授权胶囊、侧边栏用量卡片、设置页 |
cordis.patch.yml | 插入主机行 id: dsh-codex-gpt |
test/ | node --test 单测(114 条,含安全回归、卡片真实渲染、第三方积分解析与客户端冒烟) |
数据流(方式 A):
DSH Agent Loop
└─ llm.prepareCall → openai-codex 适配器
└─ POST chatgpt.com/backend-api/codex/responses (SSE)
└─ StreamChunk: text / reasoning / tool-call / usage / finish
开发
npm install # 或使用本地 vendored node_modules
node --test "test/codex.test.mjs" "test/usage.test.mjs" "test/host.test.mjs" "test/adapter.test.mjs"
测试全部使用 node:test + mock 网络,不需要真实 OpenAI 凭证。
安全边界
- 状态路由
/dsh-codex-api默认仅接受本机回环地址,并校验Origin、Sec-Fetch-Site、Host与Content-Type: application/json; - 同源判断兼容
127.0.0.1/localhost/[::1]等本机别名(协议与端口需一致),外部域名伪造Origin一律拒绝; - 写操作(授权、登录、登出、兑换重置卡、改配置)必须携带进程级随机令牌
x-dsh-write-token:令牌只随同源 GET 快照下发给本机页面,跨站页面读不到响应体因此拿不到,代理场景下也无法伪造写操作; - 请求带
Origin时必须与本站同源(兼容本机别名);桌面外壳等不发Origin的同源场景由上面的随机令牌兜底; - 请求若携带
X-Forwarded-For/X-Real-IP/Forwarded/CF-Connecting-IP,一律按远程处理,不再享受本机权限; Host校验不依赖getOrigin()是否可用:即使端口来源信息缺失,非回环 Host 也会被拒绝(防 DNS rebinding);allowLanAccess: true时局域网设备只能只读查询;登录、登出、兑换重置卡等写操作必须在运行 DSH 的本机执行;- OAuth 回调页回显的 URL 参数(如
error)全部做 HTML 转义,防止反射型 XSS;回调先校验state再处理错误参数; - 凭证文件以
0600权限写入(POSIX 系统),token 不会通过状态路由回传给浏览器; - 插件只读 Codex CLI 的
auth.json,不替其他应用刷新或轮换其 token; - 局域网模式下的只读数据已脱敏(不返回邮箱、姓名、订阅起止、用量、模型目录、配置细节与重置卡);
- 会话授权不继承给子代理(subagent)或 fork 出的新会话;
- 未登录 / 未授权时不会发起任何 OpenAI 请求;
- 状态路由只接受
GET/POST,其余方法一律405(不能靠PUT/PATCH/DELETE绕过写令牌); - 侧边栏「跟随当前模型」轮询走轻量端点
?meta=1(只回当前 provider/model 与默认 tab,不含邮箱、套餐、用量、写令牌,也不触发凭证写入); - 卡片外面包了一层兜底组件,单个组件渲染出错只会显示一行提示,不会让整块卡片消失;
- 设置页顶部显示当前插件版本号(直接读
package.json,避免两处版本号写歪); credentials写入做了三件事:串行化(避免并发写触发多次模型目录刷新)、写前比较现值(值没变就不写)、登出时连同镜像 token 一起unset;- 模型目录落盘缓存带账号指纹(
accountId的 SHA-256 前缀),换账号/登出会丢弃上一账号的目录; - DeepSeek 余额缓存键包含 API Key 指纹 + base URL,同一来源换了 Key 不会复用上一账号的余额;失败结果不会覆盖上次成功的金额。
威胁模型说明(诚实边界)
上面的防护针对的是浏览器跨站请求(CSRF / DNS rebinding / 恶意网页读响应)与局域网其他设备。它不能防御同一操作系统用户下的本机原生进程:那类进程可以直接读取 DSH 的凭证文件,也能自己发 HTTP 请求并拿到写令牌,因此本机的安全边界依赖操作系统的用户隔离,而不是插件的令牌。如果需要更强隔离,请让 DSH 以更低权限的独立用户运行。
已知限制
- 依赖 ChatGPT 后端的若干非公开接口(
codex/responses、codex/models、wham/usage、wham/rate-limit-reset-credits),OpenAI 调整协议时可能需要适配; codex工具与模型列表均受账号订阅额度约束,额度用尽需等待重置周期或使用重置卡;- OAuth 回调固定占用本机
1455端口(同时尝试监听127.0.0.1与::1;系统禁用 IPv6 时自动只保留 IPv4); - 不建议在 DSH 前面挂反向代理:虽然写操作有随机令牌保护、转发头也会降级为远程,但只读快照仍可能暴露给代理后的访问者,最稳妥的做法仍是仅本机暴露;
- 多个 DSH 实例共享同一个
$DSH_HOME时,会话授权状态是整文件覆写,可能互相覆盖; - 浏览器侧 UI 文案目前硬编码中文,未接入
ctx.locale本地化。
免责声明
本项目为第三方社区插件,与 OpenAI 及 DeepSeek 官方无隶属关系。使用 ChatGPT 订阅额度调用后端接口可能受服务条款约束,请自行评估合规性与风险。
License
MIT
Comments
Loading…
Similar plugins
by auggie246
OpenAI Codex (ChatGPT Plus/Pro subscription) provider for DeepSeek Harness with DSH Web OAuth, device code, and shared Codex CLI credentials
★ 0
MIT
JavaScript
Sep 29, 2026
dsh plugin --profile web add dsh-llm-openai-codexby wang-kaopu
Use ChatGPT (Codex) and Gemini Code Assist subscriptions as DeepSeek Harness LLM providers — OAuth login in the web UI, no API keys
★ 3
↓ 16/wk
TypeScript
Aug 21, 2026
dsh plugin --profile web add @kelvinwww/dsh-oauthby HaydenSmith1121
Codex (ChatGPT) model provider for DeepSeek Harness - serves the ChatGPT subscription models the Codex CLI uses, over OAuth session credentials instead of an API key
★ 1
↓ 39/wk
MIT
JavaScript
Sep 18, 2026
dsh plugin --profile web add dsh-codex-providerby callqh
Sign in to OpenAI Codex from DeepSeek Harness with a ChatGPT Plus/Pro subscription, by driving the authorization flow llm-pi-ai already registers.
★ 0
MIT
JavaScript
Sep 30, 2026
dsh plugin --profile web add dsh-codex-oauthby zhangxiubo
ChatGPT Plus/Pro OAuth model provider for DeepSeek Harness using pi-ai openai-codex.
★ 0
MIT
JavaScript
Aug 19, 2026
dsh plugin --profile web add dsh-llm-chatgpt-oauthby AdonisSheldon
Use ChatGPT OAuth and OpenAI Codex models in DeepSeek Harness—no API key or Codex CLI required.
★ 9
↓ 284/wk
MIT
TypeScript
Oct 23, 2026
dsh plugin --profile web add dsh-openai-oauth