前言¶
在 DeepSeek Harness(DSH)里接大模型,常见路径是内置 provider 或自备 API Key。OpenAI 为开源、本地运行的客户端提供了 Sign in with ChatGPT(SIWC),允许符合条件的 ChatGPT Plus / Pro 用户用账号与套餐额度调用模型,而不是把 SIWC 令牌当成 API Key 走另一套计费。
@hackforjoy/dsh-openai-siwc 是社区维护的 LLM provider 插件(维护组织 HackForJoy,npm 包 @hackforjoy/dsh-openai-siwc,当前版本 0.1.2,MIT 许可证)。它按 OpenAI 官方文档实现 SIWC,让 DSH 通过浏览器登录 ChatGPT 并使用 ChatGPT plan usage。插件与 OpenAI、DeepSeek 均无隶属或背书关系;协议说明见仓库内 docs/research/openai-siwc-protocol.md。
下面介绍它是什么、能做什么、如何安装与登录使用,以及与其它 provider 的差异和注意事项。
这是什么¶
一句话:@hackforjoy/dsh-openai-siwc 是 DSH 的 LLM provider 插件,挂载 id 为 openai-siwc,用 OpenAI 官方 SIWC 流程把 ChatGPT 账号绑到 DSH,请求走 ChatGPT 套餐额度(eligible Plus / Pro),不是传统 Codex OAuth(DSH 内置 openai-codex 所用),也不是 API Key provider——不会在失败时回退到其它计费路径。
环境与兼容性¶
- OpenAI 要求:ChatGPT plan usage 面向符合条件的 ChatGPT Plus / Pro 用户在开源、本地应用中使用;不符合的账号(例如 Free)在 code exchange 阶段会被拒绝(
invalid_grant)。 - 插件侧:已在 DSH 0.2.1-rc.3(
@deepseek-ai/cordis ~4.0.5)上验证;Node.js ≥ 22。DSH SDK 仍为预发布阶段,peer 依赖版本与 DSH 更新需对齐。 - Plus 用户的五小时用量限额在所有使用该套餐的应用间共享,可在 ChatGPT Usage 设置 管理。
核心功能¶
经 README 核实,登录成功后插件支持:
- 在模型选择器中使用 ChatGPT plan (Sign in with ChatGPT) 下的模型;列表来自账号
GET /v1/models(仅visibility: "list"),切换账号时会刷新。 - 文本、流式输出、多轮对话、工具调用(按文档要求包装在名为
dsh的 namespace)、图像输入、reasoning effort;能力与上下文窗口等来自账号模型目录,不做猜测。 - OpenAI 端点不可配置,避免篡改配置把令牌发往其它地址。
- 斜杠命令(DSH 挂载 commands 服务时):
/siwc login [new]、/siwc status、/siwc models、/siwc logout。
与其它 DSH provider 的差异(节选):temperature、stop 会返回 UNSUPPORTED_PARAMETER;reasoningEffort 映射为 reasoning.effort;maxTokens 按文档不发送;图像默认单请求 base64 预算 20 MiB(可配置 maxRequestImageBytes);reasoning replay 不回放。
安装与启用¶
先用 DSH CLI 把插件记入 profile 的 dependencies 与 dsh.profile.bundles,再启动 profile。官方安装示例:
DSH="/Applications/DeepSeek Harness.app/Contents/Resources/runtime/cli/bin/dsh" # macOS
"$DSH" plugin --profile <profile> add @hackforjoy/dsh-openai-siwc
然后启动 profile,例如 "$DSH" <profile>。捆绑的 cordis.patch.yml 会以 id openai-siwc 挂载插件。
建议先在独立 profile 或独立 DSH_HOME(如 DSH_HOME=~/.dsh-siwc-test)试跑,再并入日常 profile。pnpm 对缺失的 @deepseek-ai/* peer 警告属预期,由 DSH 宿主提供。
升级指定版本:
"$DSH" plugin --profile <profile> add @hackforjoy/dsh-openai-siwc@<new version>
重启 DSH 后生效。
可选配置¶
在 profile 的 cordis.patch.yml 中按 id 覆盖:
- id: openai-siwc
name: '@hackforjoy/dsh-openai-siwc'
config:
defaultContextWindow: 128000
models:
some-model-slug:
contextWindow: 200000
streamIdleTimeoutMs: 300000
maxRequestImageBytes: 20971520
defaultContextWindow 仅用于目录项无 context_window 的模型;streamIdleTimeoutMs 为流式最长静默时间;超出 maxRequestImageBytes 时 DSH 会 offload 最旧的图像。
登录与典型用法¶
DSH 0.2.1 设置界面尚无第三方授权入口,登录须在对话内执行斜杠命令(首页空 composer 不显示命令输出):
- 在会话中运行
/siwc login(/siwc login new可添加另一个 ChatGPT 账号)。 - 插件打开系统浏览器,登录 ChatGPT,确认 agent 名称「DSH OpenAI SIWC」,并允许 ChatGPT plan usage。
- 浏览器回调
http://127.0.0.1:<随机端口>/auth/callback显示完成;命令行输出「Signed in to ChatGPT as …」。授权 URL 仅进入浏览器,不会出现在命令输出或会话日志。
使用步骤:在模型选择器选 ChatGPT plan (Sign in with ChatGPT) 下模型即可对话。可用 /siwc status 查看登录状态、plan usage、scope、令牌生命周期及最近错误(不输出令牌);/siwc models 拉取当前账号模型列表。
若登录时未允许 plan usage,请求会失败并报 SIWC_PLAN_USAGE_DISABLED,需重新 /siwc login 并勾选允许。
登出与卸载¶
登出:
/siwc logout
会停止使用令牌、向 OpenAI 撤销 refresh token(失败会重试),并删除本地令牌;client id 与 host id 保留供下次登录。若无法确认撤销成功,可在 ChatGPT 设置中断开应用。仅删除 DSH 设置里的 openai-siwc/session 不会远程撤销会话。
卸载顺序:
- 先
/siwc logout; "$DSH" plugin --profile <profile> remove @hackforjoy/dsh-openai-siwc,重启 DSH;- 卸载不会自动删除凭证记录;完整清理需删除设置中的
openai-siwc/session与openai-siwc/registry(无 registry 时下次登录会注册新 client 与 host id)。
凭证默认存于 DSH 凭证库(如 ~/.dsh/.credentials.yaml,权限 0600),记录 openai-siwc/registry 与 openai-siwc/session。
适用场景与注意¶
适合:已在 DSH 中开发或运行智能体、具备 eligible ChatGPT Plus / Pro、希望用官方 SIWC 与套餐额度而非自管 OpenAI API Key 的开发者。
务必注意:
- 插件以当前 DSH 进程权限运行;安装前请阅读源码与 MIT 许可证,并理解仓库中的
docs/security/threat-model.md。 - DSH 生态理念是「一切皆插件」;SkillHub 目录页 为社区站点,与 DeepSeek / 幻方无官方从属关系。
- 常见问题:
MISSING_CREDENTIAL表示未登录;invalid_grant多为非 Plus/Pro 账号;无法打开系统浏览器时需检查桌面环境。
结尾¶
@hackforjoy/dsh-openai-siwc 把 OpenAI SIWC 与 ChatGPT plan usage 接到 DSH,在遵守官方协议的前提下提供可配置的 provider 行为与 /siwc 命令管理登录态。进一步细节与故障表见 GitHub README。
- 目录页:https://www.skillhub.cn/plugins/HackForJoy/dsh-openai-siwc
- 仓库:https://github.com/HackForJoy/dsh-openai-siwc