dsh-chatgpt-siwc:用 ChatGPT 账号登录并在 DSH 内走套餐模型

前言

在 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 令牌。

核心功能

登录与令牌

  1. 动态注册:首次登录使用 client_id=dynamic_agent_client、本机稳定的 ext_agent_host_id 与 agent_name_hint;回调后保存 ChatGPT 下发的 oaiapp_… client id,用于后续 code 交换与刷新。
  2. 授权码 + PKCE(S256):在 127.0.0.1 的 loopback 路径 /auth/callback 上监听;每次尝试使用新的 state/nonce。
  3. 换票:在 token 端点用 resource=https://api.openai.com/v1 交换,无 client secret。
  4. 校验与刷新:校验 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 会原子地重新注册路由。

典型用法

  1. 按上一节安装并重启 DSH,在插件页点击 Sign in with ChatGPT(或终端执行 dsh-chatgpt-siwc login)。
  2. 在浏览器完成 OpenAI 登录;若弹窗被拦截,卡片会提供 Open sign-in page 链接。
  3. 确认账号具备 chatgpt.tokens.use.direct 等所需 scope,并在 ChatGPT 用量设置中为该应用配置上限。
  4. 在 DSH 模型页选择 chatgpt 提供方下的模型;需要时运行 dsh-chatgpt-siwc models 同步模型列表。
  5. 排错时先 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 开始第一次登录。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜