🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

编码订阅 OAuth lninghaha/dsh-coding-subscription-oauth

DeepSeek Harnessv0.8.7
lninghaha12 天前有提交已提供中文文档扫描:含敏感能力

DeepSeek Harness 编程订阅 OAuth:SuperGrok / Grok Build、ChatGPT Plus Codex、Kimi Code、Claude Code,不用粘贴 API key。

47.2/100
综合分
25
GitHub 星标
933
npm 周下载
—/5
用户评分

数据截至 2026/10/24 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-coding-subscription-oauth
npm 源 · dsh-coding-subscription-oauth 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · model
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
数据截至 2026/10/29·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/03·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 12 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-coding-subscription-oauth @ 0.8.7
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/30 11:46:49

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 33 处,展示前 30 条)
  • 发起网络请求
    lib/bin.js:8228
    stream = session.request(headers, { endStream: false, signal });
  • 发起网络请求
    lib/bin.js:8248
    stream = session.request(headers, { endStream: false, signal });
  • 发起网络请求
    lib/bin.js:8306
    stream = session.request(headers, { endStream: shouldEndStream, signal });
  • 发起网络请求
    lib/bin.js:8310
    stream = session.request(headers, {
  • 读取本地文件
    lib/bin.js:25919
    text = await readFile(filename, "utf8");
  • 读取本地文件
    lib/bin.js:25993
    listed = await lstat(path);
  • 写入本地文件
    lib/bin.js:26441
    await mkdir(dirname(this.filename), { recursive: true, mode: 448 });
  • 删除本地文件
    lib/bin.js:26457
    await rm(this.filename, { force: true });
  • 写入本地文件
    lib/bin.js:26547
    await mkdir(dirname(this.filename), { recursive: true, mode: 448 });
  • 删除本地文件
    lib/bin.js:26548
    await withFileLock(this.filename, () => rm(this.filename, { force: true }));
  • 发起网络请求
    lib/bin.js:27180
    response = await fetch(new URL(DISCOVERY_PATH, approvedIssuer).href, {
  • 发起网络请求
    lib/bin.js:27398
    response = await fetch(tokenEndpoint, {
  • 写入本地文件
    lib/bin.js:27620
    await mkdir2(dirname2(file), { recursive: true, mode: 448 });
  • 读取本地文件
    lib/bin.js:27622
    const old = JSON.parse(await readFile2(file, "utf8"));
  • 写入本地文件
    lib/bin.js:27625
    await copyFile(file, `${file}.pre-selection-mode`, constants2.COPYFILE_EXCL);
  • 写入本地文件
    lib/bin.js:27626
    await chmod(`${file}.pre-selection-mode`, 384);
  • 读取本地文件
    lib/bin.js:27707
    this.selectedIds = parseCache(await readFile3(this.cacheFile, "utf8"));
  • 写入本地文件
    lib/bin.js:27759
    await mkdir3(dirname3(this.cacheFile), { recursive: true, mode: 448 });
  • 删除本地文件
    lib/bin.js:27760
    await rm2(this.cacheFile, { force: true });
  • 读取本地文件
    lib/bin.js:28135
    const cache = parseCache2(await readFile4(this.cacheFile, "utf8"));
  • 删除本地文件
    lib/bin.js:28200
    await rm3(this.cacheFile, { force: true });
  • 执行外部命令来自配置/变量
    lib/bin.js:28224
    const child = spawn(command.file, command.args, {
  • 执行外部命令来自配置/变量
    lib/callback-bridge-bin.js:250
    const child = spawn(name, args, { shell: false, stdio: "ignore", detached: process.platform !== "win32" });
  • 读取本地文件
    lib/callback-bridge-bin.js:896
    info = await lstat(path);
  • 读取本地文件
    lib/callback-bridge-bin.js:904
    return readFile(path, "utf8");
  • 写入本地文件
    lib/callback-bridge-bin.js:907
    await mkdir(dirname(path), { recursive: true, mode: 448 });
  • 写入本地文件
    lib/callback-bridge-bin.js:915
    secureAgent: (path) => chmod(path, 384),
  • 删除本地文件
    lib/callback-bridge-bin.js:916
    removeAgent: (path) => unlink(path),
  • 执行外部命令固定命令
    lib/callback-bridge-bin.js:964
    const child = spawn2("/bin/launchctl", args, { stdio: "ignore", shell: false });
  • 执行外部命令来自配置/变量
    lib/callback-bridge-bin.js:974
    const child = spawn2(command, args, {
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-atomic-write@deepseek-ai/dsh-attachment@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-client-web@deepseek-ai/dsh-credentials@deepseek-ai/dsh-home-paths@deepseek-ai/dsh-host-webserver@deepseek-ai/dsh-invariants@deepseek-ai/dsh-llm
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

3 张 · 点击查看大图

功能亮点

  • 编程订阅OAuth登录
  • 免粘贴APIkey
  • 支持多家订阅服务
v0.8.72026-10-23
· 修复 · 通过 engines.dsh >=0.1.1-rc.2 <0.3.0 和匹配的 peer 范围,接受 DeepSeek Harness 0.1.x–0.2.x 的安装,DSH 0.2.1-rc.2 不会再在安装校验时被拒绝(#51)。已验证的构建/冒烟 BOM 仍精确为 0.1.1-rc.2;0.2.1-rc.2 记为未验证的候选版本。 发布后从 npm 安装,或用这个 tarball 安装: dsh plugin --profile web add /path/to/dsh-coding-subscription-oauth-0.8.7.tgz 安装后重启一次现有的 DSH Web 进程。
v0.8.62026-10-17
· 新增 · 本地 Claude 回调桥接,浏览器自动返回。回调粘贴仍可作为备用方式(#50)。 · 修复 · 远程 Claude 登录完成、回调回执,以及 0.8.6 更新日志里描述的登出/清理竞态。 发布后从 npm 安装,或从这个压缩包安装: dsh plugin --profile web add /path/to/dsh-coding-subscription-oauth-0.8.6.tgz 安装后重启现有的 DSH Web 进程一次。搭配 Hub 1.13.5 使用。
v0.8.52026-09-15
· dsh-coding-subscription-oauth 0.8.5 · Fixed · Map OpenCode Go RegionError to region-opt-in-required (#47). · Lock DeepSeek model ids on the Go path away from the official DeepSeek provider catalog (#46). Install: dsh plugin --profile web add dsh-coding-subscription-oauth@0.8.5 · or from the attached tarball: dsh plugin --profile web add /path/to/dsh-coding-subscription-oauth-0.8.5.tgz Then restart DSH Web once.
原文(未汉化)
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
🔐 dsh-coding-subscription-oauth v0.8.7 · 原名 dsh-grok-build 面向 DeepSeek Harness 的编码订阅 OAuth 插件。 把 SuperGrok / X Premium(Grok Build)、ChatGPT Plus/Pro(Codex)、Kimi Code、Claude Pro/Max 和 Google Antigravity 接到 DSH——不必再开一份按量 API-key,也不要把 token 粘贴进聊天。 English · 中文版 · 日本語 · 한국어 · Português (BR) · Español · Français · Deutsch · Русский 升级: 按 INSTALL.md 的版本化步骤操作。0.8.0 新增可选 OpenCode Go 兼容(本地网关粘性 x-opencode-session);继续将共享 dispatcher runtime 固定为 dsh-coding-oauth-core@0.1.2 与 undici@7.29.0,并将 Gateway key 的 reveal/rotate 限制为 loopback 访问;无需迁移配置、凭据、数据或路由。Grok Imagine 保留显式 pinned dispatcher。
展开完整文档(README 剩余 1 节)
🔐 dsh-coding-subscription-oauth

v0.8.7 · 原名 dsh-grok-build

面向 DeepSeek Harness 的编码订阅 OAuth 插件。 把 SuperGrok / X Premium(Grok Build)、ChatGPT Plus/Pro(Codex)、Kimi Code、Claude Pro/Max 和 Google Antigravity 接到 DSH——不必再开一份按量 API-key,也不要把 token 粘贴进聊天。

English · 中文版 · 日本語 · 한국어 · Português (BR) · Español · Français · Deutsch · Русский

升级: 按 INSTALL.md 的版本化步骤操作。0.8.0 新增可选 OpenCode Go 兼容(本地网关粘性 x-opencode-session);继续将共享 dispatcher runtime 固定为 dsh-coding-oauth-core@0.1.2 与 undici@7.29.0,并将 Gateway key 的 reveal/rotate 限制为 loopback 访问;无需迁移配置、凭据、数据或路由。Grok Imagine 保留显式 pinned dispatcher。0.6.2 及之后版本已包含严格 Cordis 注入启动修复并正式支持 DSH 0.1.1-rc.2;保留 profile、配置和凭据文件,更新后再重启一次现有 DSH Web 进程。

项目更名

最初只做 Grok Build,仓库名是 dsh-grok-build。现在覆盖 SuperGrok / Grok Build、ChatGPT Plus Codex、Kimi Code、Claude Code 和 Google Antigravity,因此改为现名。

| | 请用这个 | 仍然可用 |
| npm(推荐) | 当前版本 0.8.7:dsh plugin --profile web add dsh-coding-subscription-oauth@0.8.7 | 没有发布过旧 npm 包 |
| GitHub / 开发安装 | dsh-coding-subscription-oauth | 旧仓库 dsh-grok-build 已删除 |
| CLI | dsh-coding-oauth | dsh-grok-build |
| Cordis 插件 id | llm-grok-build-oauth | 不变 |
| 设置页 HTTP API | /plugins/dsh-grok-build/ | 不变 |
| 凭据文件 | $DSH_HOME/.grok-build-auth.json 及其他 -oauth-auth.json | 不变 |

✨ 特性

- 🧳 自带订阅 —— SuperGrok、ChatGPT Plus/Pro、Kimi Code、Claude Pro/Max,不必另开按量 API-key。
- 🔑 本地 OAuth,不用贴 key —— 在设置页或 CLI 完成授权;access/refresh token 不进聊天、日志和 HTTP 状态。
- 🧩 一个插件,五大供应商 —— Grok Build(cli-chat-proxy.grok.com)、Codex、Kimi Code、Claude Code 与 Google Antigravity。
- 🛡️ 安全设计 —— 凭据文件均为 owner-only 0600、原子写、跨进程文件锁。
- ⚙️ 动态目录 —— 选择器只列出已登录路由并标注 (OAuth),含 grok-4.6 的 xhigh。
- 🌐 代理感知 —— 只代理审核过的订阅域名;Kimi 中国流量默认直连。
- 📥 手动 CLI 拉取 —— 设置页只读发现白名单内的官方 Grok/Codex/Kimi/Claude CLI OAuth 文件;预览并确认覆盖后,单向拉取一份副本。
- 🗂️ 分栏设置页 —— Accounts、Gateway、Capabilities、About;远程主机优先设备码登录并弱化 CLI 缺失提示;已登录供应商卡片默认收起,展开后再编辑。
- 🎛️ 可选能力默认关闭 —— Codex 搜索、用量/配额、图像生成/编辑、Fast、Grok Imagine 打开后立即生效。另有默认关闭的开关,允许非 Codex 模型路由调用 Codex 图像工具,同时保留 Codex 登录、会话和附件归属检查。
- 🔌 可选本地 API 网关 —— 默认关闭的 loopback OpenAI/Anthropic 兼容服务,支持复制 base URL 和 Bearer key,只给你自己的工具用,不是公网中继。
- OpenCode Go — 在账户与模型连接独立供应商 coding-opencode-go(与 DSH 原生 opencode-go 隔离),即可在 DSH 对话而无需开启网关。外部工具使用 coding-opencode-go/<model-id>(过渡期仍接受旧前缀 opencode-go/<model-id>)与对应协议,并发送稳定会话标识。若仍有旧版插件配置写在 opencode-go,请在账户卡片中迁移。

本插件解决的接入问题

下面这些搜索词和 DSH 报错,通常就是会搜到这个仓库的原因。

| 你搜到 / 看到的 | 实际坏在哪 | 本插件怎么处理 |
| SuperGrok / X Premium 接入 DSH、「Grok Build 和 api.x.ai 不是一路」 | 内置 xai 路由是按量 API。编码订阅走 cli-chat-proxy.grok.com | 独立 grok-build 路由 + 官方 CLI 指纹头(X-XAI-Token-Auth、x-grok-client-identifier、x-grok-client-version),避免静默 403 |
| 本轮运行失败 API key is invalid / AUTH | GUI 把所有 AUTH 都显示成这句。常见原因是 OAuth access token 到期(Kimi 约 15 分钟) | 过期前 5 分钟主动刷新;遇到 401 先作废本地 token,刷新后再重试该 step |
| 第二轮 Codex / Kimi 报 INVALID_REPLAY_STATE | replay state 仍带着 pi-ai 原生 provider id | 保持 Harness route id,并修复历史被污染的 replay |
| grok-4.6 没有 xhigh / Extra High Effort | 线上 GET /v1/models-v2 已返回含 xhigh 的 reasoning_efforts;套用 grok-4.5 模板会被 pi-ai 藏掉 | 解析 live reasoning_efforts。4.6 有 xhigh,4.5 仍是 low/medium/high |
| Kimi Code 401,或请求变成 Anthropic x-api-key | OAuth token 被当成 Anthropic key 发出 | api.kimi.com/coding 只走 Authorization: Bearer |
| 没登录的 Grok / Codex / Claude 仍出现在模型选择器 | 所有已注册路由都被列出来 | 未认证路由模型列表为空;已登录名称带 (OAuth) |
| 远程 / 无头 DSH 没法浏览器登录 | PKCE 回不到本机 localhost | Grok/Codex/Kimi 走设备码;Claude 可粘贴完整 localhost 回调 URL |
| 开了代理 Grok 通了、国内 Kimi 挂了 | 全局 HTTPS_PROXY 一刀切 | 白名单代理;Kimi 默认直连(proxyKimi: true 才走代理)。auth.kimi.com ≠ api.moonshot.cn |
| 想在 DSH 用 ChatGPT Plus / Claude Pro,又不想再买 API | 另开 OpenAI / Anthropic API-key | codex-oauth / claude-code-oauth 本地 OAuth,与现有 openai / kimi-coding API-key 路由共存 |
| OpenCode Go: MissingSessionID | Missing stable conversation ID | DSH: use Accounts & Models; external tools: provide x-opencode-session. See migration. |

支持的供应商

| 供应商 | 路由 | 认证 | 与现有 API-key 路由共存 |
| xAI Grok Build | grok-build | SuperGrok / X Premium OAuth | xai |
| OpenAI Codex | codex-oauth · 可选 codex-oauth-fast | ChatGPT Plus/Pro OAuth | openai |
| Kimi Code | kimi-code-oauth | Kimi Code OAuth | kimi-coding |
| Claude Code | claude-code-oauth | Claude Pro/Max OAuth | — |
| Google Antigravity | agy | dsh-agy Google OAuth | — |

Grok Build 的 device 登录、动态 /v1/models-v2 目录与 Responses 流式推理已在实机上验证。Codex/Kimi/Claude 复用 @earendil-works/pi-ai 的 provider-native OAuth/刷新协议,不重新实现各供应商流程。

🚀 快速开始

1. 安装当前 npm 发布版到 web profile
dsh plugin --profile web add dsh-coding-subscription-oauth@0.8.7

2. 可选 —— Google Antigravity(固定审核过的版本)
dsh plugin --profile web add dsh-agy@0.1.2

3. 使用本机实际配置的进程管理器重启现有 DSH Web 进程官方 dsh web 是启动 web profile 的 CLI 别名,不是服务单元名。

然后打开 设置 → 编码 OAuth 登录任一供应商即可。选择器会自动列出已认证的模型。

📚 目录

- 项目更名
- 特性
- 本插件解决的接入问题
- 支持的供应商
- 快速开始
- 安装
- 设置页
- 可选能力
- 本地 API 网关
- CLI
- Kimi 中国说明
- 网络代理
- 弹性重试
- 凭据
- 架构
- 技术方案
- 合规
- 文档
- 相关项目
- 贡献
- 许可证

安装

安装门禁通过 engines.dsh >=0.1.1-rc.2 <0.3.0 接受 DeepSeek Harness(覆盖 0.2.1-rc.2)。构建/冒烟仍锁定已验证 BOM 0.1.1-rc.2。0.1.5-rc.1、0.2.1-rc.2 等未验证候选仅记在 compatibility/dsh-bom.json,完整细节见安装说明。需要 Node.js 22.19+。OAuth profile 会初始化空的 modelErrors,避免候选宿主模型解析时对 undefined 调用 .get(#38)。

当前 npm 版本
dsh plugin --profile web add dsh-coding-subscription-oauth@0.8.7

开发 / 备用:从 GitHub 安装
dsh plugin --profile web add github:lninghaha/dsh-coding-subscription-oauth

本地开发目录(备用)
dsh plugin --profile web add ./dsh-coding-subscription-oauth

安装后重启现有 DSH Web 进程。维护者可在源码 checkout 中对实际部署做验证(npm 安装不包含这些脚本):

pnpm run verify:deployed # 核对真实 /api/llm.models 与 OAuth 状态
DSH_EXPECT_AGY_AUTH=signed-in pnpm run verify:deployed # 已登录 Google 时

DSH_RESTORE_PROVIDER=openai \
DSH_RESTORE_MODEL=gpt-5.6-sol \
DSH_RESTORE_REASONING=max \
pnpm run smoke:deployed # 真实 Codex/Kimi tool-call + 第二个用户 turn 回放

smoke:deployed 会创建临时会话、分别测试 Codex/Kimi 工具调用与第二个用户 turn(覆盖 INVALID_REPLAY_STATE 回归),恢复显式指定的默认模型后归档测试会话。

设置页

打开 设置 → 编码 OAuth。页面采用分段标签:Accounts、Gateway、Capabilities、About,并带有实时状态提示、语义化徽章与骨架屏加载。远程(非 loopback)主机上,Accounts 会优先设备码登录,并把嘈杂的 CLI 缺失提示收成一条;已登录供应商卡片默认折叠,展开后可搜索/筛选模型、查看配额进度条或使用 CLI 拉取;Gateway 提供 cURL / Python / IDE 快速配置片段,Capabilities 使用开关联动(含依赖项置灰)并显示 Imagine 状态。

DSH Web 仍只绑定 loopback。远程 Settings 必须经 SSH 隧道,或经已完成属主认证的 HTTPS 反向代理。插件优先使用 DSH 原生 ownerRequestPolicy;fallback 同时要求真实可信 TCP peer、精确 HTTPS Origin/Host、同源 Fetch Metadata、代理注入的 owner proof,以及变更请求独立的 CSRF proof。X-Forwarded- 不能授权,配置不完整会 fail closed。配置方法见 INSTALL.md。

Accounts

Gateway

Capabilities

| 供应商 | 方式 |
| Grok | 授权码 · 设备码 · 模型勾选 |
| Codex | 设备码(推荐远程 DSH)· 浏览器 PKCE |
| Kimi | 设备码 |
| Claude | 浏览器 PKCE(远程浏览器可粘贴完整 localhost redirect URL) |
| Antigravity | dsh-agy 安装状态 + profile-local CLI 命令 |

DSH 主机在远端时优先使用设备码。浏览器/PKCE 登录会打开供应商页面;如果 localhost 回调无法到达这台 DSH 主机,可把返回的授权 code 或完整 redirect URL 粘贴到等待中的设置卡片。

设置页还会只读发现白名单内的官方 Grok / Codex / Kimi / Claude CLI OAuth 文件。同步是显式的单向拉取,不是自动导入:发现 → 预览 → 冲突/指纹核对 → 确认覆盖。官方 CLI 文件从不被写入。读取会拒绝符号链接、非普通文件、非属主文件、组/其他人可读,以及超大文档(O_NOFOLLOW)。预览票据一次性、五分钟过期、最多 32 张。

选择器只列出已认证的路由;未登录供应商返回空列表。供应商名称统一带 (OAuth),登录或登出后通过 llm/adapters-updated 刷新目录。

可选能力

八项开关默认全部关闭,打开后立即生效(无需重启):codexSearch、codexImages、codexImageEdits、codexImagesAnyModel、codexUsage、codexFast、grokImagineImage、grokImagineVideo。codexImagesAnyModel 仅放宽调用模型路由限制;仍要求已登录 Codex、开启 codexImages(编辑还需 edits 开关),并保留当前会话附件归属和编辑授权检查。数值控制为 searchResults(1–20,默认 5)、imageCount(1–4,默认 1)、videoArtifactTtlMs(1 小时–7 天,默认 7 天;界面以 1–168 小时显示)。降低视频保留时间会立即缩短并清理已有产物;提高只影响之后生成的产物。管理员也可在插件配置的 capabilities 下提供不含秘密的 composition 默认值;coding-subscription-oauth 设置区中的用户值会覆盖这层 base,省略时所有开关仍保持关闭。

codex-oauth-fast 仅在最新一次 live catalog 标明至少有一个 priority 可用模型后才会出现。请求会发送 service_tier: priority 和路由提示。界面写的是 已请求 Fast,不保证延迟,也不保证上游会兑现。

Codex 搜索、用量和图像是需显式打开的私有 chatgpt.com/backend-api 端点。图像生成固定使用 gpt-image-2。图像编辑只接受当前会话顶层、且由本会话持有的附件 id。

Codex 图片工具结果会直接显示在 dsh Web 对话中。

Grok Imagine 只走官方 https://api.x.ai,模型为 grok-imagine-image-2.0 与 grok-imagine-video-1.5。凭据是独立的 DSH 凭据引用 XAI_API_KEY——不用 Grok OAuth,也不回退到进程环境变量。生成结果在 MIME / 大小 / 超时 / 重定向 / DNS 控制下,仅从冻结主机 imgen.x.ai、videogen.x.ai、vidgen.x.ai 下载,存入私有产物库(单件与唯一对象总量均硬限 256 MiB,最长七天),并只通过同源 loopback 路由提供。

本地 API 网关

默认关闭。启用后会在 127.0.0.1:18080 启动独立的 node:http 服务(不占用 DSH web 端口),复用已经登录的 OAuth 会话:

gateway:
enabled: false
bind: 127.0.0.1
port: 18080
opencodeGo:
enabled: false

端点:GET /healthz、GET /v1/models、POST /v1/chat/completions、POST /v1/responses、POST /v1/messages。Bearer key 保存在 $DSH_HOME/.coding-oauth-gateway.json(0600)。

在账户与模型连接独立供应商 coding-opencode-go(与 DSH 原生 opencode-go 隔离)。外部工具使用 coding-opencode-go/<model-id>(过渡期仍接受 opencode-go/<model-id>)。旧版插件配置可在账户卡片一键迁移。 Migration / 迁移.

在 Gateway 标签中,可以复制 OpenAI base URL(例如 http://127.0.0.1:18080/v1)、Anthropic base URL,或直接复制当前 Bearer key,不必轮换;密钥显示仅限 loopback,且不会写入浏览器存储;轮换 key 前必须确认。监听端口可直接 Apply/确定,也可用 Random/随机 填充(18100–18999);选定端口会持久化到属主专用的网关文档,运行中的监听器会重新绑定。bind 仍只能写在 YAML 中;非 loopback bind 必须配置 key。这不是远程中继。

CLI

dsh-grok-build 仍是同一命令的别名 dsh-coding-oauth login [--pkce] | import | status | logout

新供应商 dsh-coding-oauth login codex --device-auth | codex --browser | kimi | claude dsh-coding-oauth status all dsh-coding-oauth logout codex

Antigravity(先安装到 web profile)
dsh plugin --profile web exec dsh-agy login --headless

dsh-agy CLI 在 DSH 进程外修改账号池,无法发送进程内 catalog event——登录或登出后关闭并重新打开模型选择器即可。

Kimi 中国说明

Kimi Code 订阅 OAuth 使用 https://auth.kimi.com;推理使用 https://api.kimi.com/coding。https://api.moonshot.cn/v1 是按量付费的 Moonshot Open Platform API-key 通道——不存在可切换的“中国 OAuth endpoint”。本插件使用独立的 kimi-code-oauth 路由,不影响已有 kimi-coding API-key 配置。

网络代理

优先级:config.proxy → CODING_OAUTH_PROXY → GROK_BUILD_PROXY → HTTPS_PROXY/HTTP_PROXY。

- id: llm-grok-build-oauth
config:
proxy: http://127.0.0.1:7890
proxyKimi: false

插件只代理审核过的订阅域名(xAI/Grok、OpenAI Codex、Claude/Anthropic、Google Antigravity);其余 DSH 流量保持原 dispatcher。Kimi 默认直连,仅当 proxyKimi: true 时才进入代理。

弹性重试

OAuth access token 会在本地记录过期时间前 5 分钟主动刷新(pi-ai 0.84+),避免请求踩到令牌寿命的最后几秒。若服务端仍以 401/403 拒绝一个本地尚未过期的令牌(服务端提前吊销或时钟偏差),插件会把凭据的 expires 回写到过去,重试的 step 会先刷新再发请求——用户无感知自愈,而不是本轮直接失败。

请求重试走 harness 的 retry 策略:瞬时故障(RATE_LIMIT/SERVER/TIMEOUT/TRANSPORT/EMPTY_RESPONSE)以及 AUTH 会按指数退避重试(默认 5 次,5 s → 10 s → 20 s → 40 s → 80 s,约 155 s 叠加时常,10% jitter)。xAI「at capacity / high demand / priority processing」等文案会在 finish 管道重映射为 RATE_LIMIT,从而进入该策略(上游 error.code: null 时 pi-ai 会标成 PI_AI_ERROR)。配额耗尽和 refresh token 失效不重试——会立刻给出真实错误和重新登录提示。部署级覆盖:

- id: llm-grok-build-oauth
config:
retryPolicy:
mode: normal
maxRetries: 5
retryableCodes: [EMPTY_RESPONSE, RATE_LIMIT, SERVER, TIMEOUT, TRANSPORT, AUTH]
backoff: { initialDelayMs: 5000, maxDelayMs: 80000, jitterRatio: 0.1 }

凭据

owner-only 0600、原子写、跨进程文件锁:

- $DSH_HOME/.grok-build-auth.json
- $DSH_HOME/.codex-oauth-auth.json
- $DSH_HOME/.kimi-code-oauth-auth.json
- $DSH_HOME/.claude-code-oauth-auth.json

勾选/目录缓存使用对应的 -models.json 文件。Grok Imagine 使用独立的 DSH 凭据名 XAI_API_KEY(不是 Grok OAuth 文件)。任何 HTTP 状态、日志或 UI 都不得返回 token。

架构

flowchart LR
subgraph DSH["DSH Harness"]
UI[设置 / Web · 编码 OAuth] --> LLM[llm route]
LLM --> ALIA[路由别名适配器]
end
ALIA --> PI[pi-ai 原生 providerOAuth · 刷新 · 流式]
PI --> GROK[Grok Build]
PI --> COD[Codex]
PI --> KIMI[Kimi]
PI --> CLAU[Claude]
AGY[dsh-agy 插件] --> GAL[Google Antigravity]

技术方案

- Grok Build:cli-chat-proxy.grok.com/v1 的 Responses API(不是 api.x.ai)、CLI 指纹头、live /v1/models-v2(含 grok-4.6 的 reasoning.effort: xhigh)。
- Codex/Kimi/Claude:pi-ai 原生 provider 负责 OAuth 与刷新;路由别名适配器映射到原生 id,避免多轮 INVALID_REPLAY_STATE。
- Kimi access token 显式转为 Authorization: Bearer——绝不会误发成 Anthropic x-api-key。
- Codex Fast / 私有端点:codex-oauth-fast 需显式打开,目录过期则失败关闭;搜索、用量和 gpt-image-2 图像默认关闭。
- Grok Imagine:只走官方 api.x.ai,XAI_API_KEY 通过 DSH 凭据解析,下载路由为同源 /plugins/dsh-grok-build/imagine/。
- Google Antigravity 不在本项目逆向,使用固定版本的专用 DSH 插件。

合规

通过第三方 harness 使用编码订阅可能处于各供应商服务条款灰色地带,并可能触发配额、地区或账号风控。仅使用自己的账号;本项目不支持批量账号、额度转售、远程 relay、付费墙绕过或客户端伪装。商用优先选择官方 API-key 通道。

文档

| 文档 | 用途 |
| INSTALL.md | 安装与使用细节 |
| CHANGELOG.md | 版本历史 |
| docs/00-project-rules.md | 版本、发版循环、公开层与本地内参分层 |
| docs/02-architecture.md | 内部架构(路由、数据流、模块、API)· 中文 |
| docs/03-dsh-alpha-smoke.md | 未验证 DSH 候选宿主的隔离冒烟(0.1.2-alpha.、0.1.5-rc.1) |
| CONTRIBUTING.md | 贡献指南 |

相关项目

- dsh-agy —— 用于 Google Antigravity 的独立固定版本插件。

贡献

欢迎各类贡献——功能、文档、翻译、Bug 反馈。流程、提交规范与发版循环见 CONTRIBUTING。若你的语言不在列表中,欢迎 PR 一份 README 翻译,我们会加入上方语言表。

许可证

Apache-2.0 · 参见 NOTICE。部分代码派生自 dsh-xai 项目(Apache-2.0)。
预览分享卡片长什么样 ↓lninghaha/dsh-coding-subscription-oauth
分享 · DeepSeek Harness Hub
lninghaha/dsh-coding-subscription-oauth

DeepSeek Harness 编程订阅 OAuth:SuperGrok / Grok Build、ChatGPT Plus Codex、Kimi Code、Claude Code,不用粘贴 API key。

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部