前言¶
在 DeepSeek Harness(DSH)里接 OpenAI 兼容模型,常见做法是自己维护 API Key,或依赖与官方无关的代理层。若你已有 ChatGPT Plus/Pro,并希望按 OpenAI 公开的 Sign in with ChatGPT(SIWC) 流程,用自己的账号 OAuth 换访问令牌,再调用公网 Responses API(https://api.openai.com/v1),就需要一个在 DSH 内完成登录、刷新令牌并注册 chatgpt 模型路由的客户端插件。
下面介绍社区维护的 dsh-chatgpt-siwc(SkillHub 目录条目为 calisweetleaf/dsh-chatgpt-swic,源码仓库 calisweetleaf/dsh-chatgpt-siwc)。它把「动态 OAuth 注册 → 本机 loopback 回调 → 令牌刷新 → 模型发现与调用」收成一条 LLM Provider 路线、一张设置卡片和一套 CLI,不改动 DSH 本体。
这是什么¶
dsh-chatgpt-siwc 是面向 DSH 的 bundle 插件(维护者 calisweetleaf,分类为客户端)。当前资料中的包版本为 0.2.1-rc.3,许可证 MIT。要求 DSH 宿主版本 >=0.2.2-rc.1 且 <0.3.0。
插件只做 API 面:一条 chatgpt 提供方路由、一个设置页、一个命令行工具;README 明确其不是 Codex 登录路径,也不做 sub2api 或账号池化——请求从适配器直连公网 API,使用的是该次登录为该应用签发的 SIWC 令牌。
核心功能¶
登录与令牌¶
- 动态注册:首次登录使用
client_id=dynamic_agent_client、本机稳定的ext_agent_host_id与agent_name_hint;回调后保存 ChatGPT 下发的oaiapp_…client id,用于后续 code 交换与刷新。 - 授权码 + PKCE(S256):在
127.0.0.1的 loopback 路径/auth/callback上监听;每次尝试使用新的state/nonce。 - 换票:在 token 端点用
resource=https://api.openai.com/v1交换,无 client secret。 - 校验与刷新:校验 ID token(JWKS、issuer、audience、nonce);按账号串行刷新,原子替换轮转令牌;登出时走 discovery 中的 revocation 并清除本地令牌。
控制面端点来自 OIDC discovery(https://auth.openai.com/.well-known/openid-configuration)。运行插件的机器需能访问 auth.openai.com 与 api.openai.com(或配置的 apiBaseUrl);用于登录的浏览器须与本机 DSH 在同一台机器上,以便访问 loopback 回调。
账号数据写在 Harness 目录下的 chatgpt-siwc/accounts.json(权限 0600,目录 0700),以及非机密的 host.json;写入带原子性与跨进程锁。
套餐与模型¶
仅「登录」不等于可用:模型调用需要账号授予中包含套餐使用 scope(chatgpt.tokens.use.direct)。每应用用量上限需在 ChatGPT settings → usage 中自行管理。
授权后,首次打开模型选择器会从 GET /v1/models 拉取目录;之后可从本地账号索引读取。可用 dsh-chatgpt-siwc models 重建索引并查看模型 ID、名称与 reasoning effort 等(不输出凭证)。
设置卡片与 CLI¶
插件页卡片展示连接状态、套餐权限,并提供登录、重连、刷新、断开等操作;远程接口只返回身份与套餐信息,不返回令牌明文。登录失败时会标明停在哪一步(含机器可读错误码),主机日志与卡片一致。
捆绑 CLI 用于交互式登录与诊断(与模型调用路径分离):
dsh-chatgpt-siwc login [--no-browser] [--new] # 默认复用本机注册;--new 重新注册
dsh-chatgpt-siwc doctor # 无令牌的 JSON:加载路径、账号文件、注册、锁、端口等
dsh-chatgpt-siwc status # 无令牌的账号公开视图
dsh-chatgpt-siwc models # 重建模型索引
dsh-chatgpt-siwc logout [--purge]
dsh-chatgpt-siwc help
人类可读输出支持英文或简体中文:--lang zh / --lang en,或跟随 LC_ALL / LC_MESSAGES / LANG(zh_* 选中文)。例如:
dsh-chatgpt-siwc status --lang zh
LANG=zh_CN.UTF-8 dsh-chatgpt-siwc login
JSON、错误码、模型 slug 与 URL 不翻译;任何命令均不打印令牌。
安装与配置¶
DSH 仍是宿主;安装的是已打包的 npm 包或 tarball,不要把源码目录当安装目标(发布产物 lib/ 在宿主上无需再构建)。
Web 客户端:Plugins → 按包名、Git URL、tarball 或本地路径安装 → 按提示重启 → 打开插件卡片 → Sign in with ChatGPT。
终端(--profile 须写在 pnpm/dsh 参数之前):
dsh plugin --profile web add dsh-chatgpt-siwc # npm,发布后
dsh plugin --profile web add ./dsh-chatgpt-siwc-<ver>.tgz # 本地打包的 tarball
安装后插件启动日志会输出 dsh-chatgpt-siwc <version> loaded from <path>;也可用 dsh-chatgpt-siwc doctor 核对是否被旧路径上的同名包遮蔽。
cordis.patch.yml 会向 bundle 插入一行配置,例如:
- insert:
- id: dsh-chatgpt-siwc
name: dsh-chatgpt-siwc
config:
provider: siwc-dsh-core
agentNameHint: DSH SIWC
可选配置项(资料中列出):apiBaseUrl(仅 https://api.openai.com 或 loopback 主机)、reasoningEffort、storePath(账号文件路径覆盖)、streamIdleTimeoutMs(默认 120000)。配置变更在已提交后可不重启生效;重命名 provider 会原子地重新注册路由。
典型用法¶
- 按上一节安装并重启 DSH,在插件页点击 Sign in with ChatGPT(或终端执行
dsh-chatgpt-siwc login)。 - 在浏览器完成 OpenAI 登录;若弹窗被拦截,卡片会提供 Open sign-in page 链接。
- 确认账号具备
chatgpt.tokens.use.direct等所需 scope,并在 ChatGPT 用量设置中为该应用配置上限。 - 在 DSH 模型页选择
chatgpt提供方下的模型;需要时运行dsh-chatgpt-siwc models同步模型列表。 - 排错时先
dsh-chatgpt-siwc doctor,再对照主机日志中与卡片相同的步骤名称与错误码。
适用场景与注意¶
适合:已在 DSH 内开发或运行智能体、拥有 ChatGPT Plus/Pro,希望用官方 SIWC + 公网 Responses API 走自己套餐额度,并希望在 GUI 内完成登录与状态管理的开发者。
边界(来自上游 README,使用前需知):
- 与 Codex harness、
chatgpt.com/backend-api/codex、~/.codex/auth.json等无关。 - 无多账号池化;一个 client 注册只与该账号令牌绑定。
- 登录浏览器与 DSH 必须同机(loopback 回调)。
安全与审计:插件以当前 DSH 进程权限读写账号文件并发起 HTTPS 请求。安装前请阅读 GitHub 仓库 源码与 MIT 许可证,确认网络与账号策略符合你的环境。SkillHub 等为社区目录站点,与 DeepSeek / 幻方无官方从属关系,星标与收录信息以各站点当时页面为准(目录线索中该仓库约 1 star)。
结尾¶
dsh-chatgpt-siwc 把「用自己 ChatGPT 套餐调用公网 API」收敛成 DSH 内的一条 Provider:OAuth 在本机完成,令牌本地加密存储,设置页与 CLI 分工明确。若你的目标正是 SIWC 而非 API Key 或 Codex 通道,可按官方 README 的安装命令接入,并从插件卡片或 dsh-chatgpt-siwc login 开始第一次登录。