dsh-coding-subscription-oauth 0.6.2 → 0.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/CHANGELOG.md +222 -206
  2. package/CONTRIBUTING.md +129 -120
  3. package/INSTALL.md +218 -218
  4. package/LICENSE +19 -19
  5. package/NOTICE +11 -11
  6. package/README.de.md +289 -289
  7. package/README.es.md +290 -290
  8. package/README.fr.md +290 -290
  9. package/README.ja.md +290 -290
  10. package/README.ko.md +290 -290
  11. package/README.md +304 -304
  12. package/README.pt-BR.md +290 -290
  13. package/README.ru.md +290 -290
  14. package/README.zh-CN.md +302 -302
  15. package/compatibility/dsh-bom.json +0 -0
  16. package/cordis.patch.yml +13 -13
  17. package/docs/00-project-rules.md +212 -195
  18. package/docs/02-architecture.md +130 -130
  19. package/docs/02-architecture.zh-CN.md +130 -130
  20. package/lib/bin.js.map +1 -1
  21. package/lib/capability-settings.d.ts +8 -2
  22. package/lib/capability-settings.d.ts.map +1 -1
  23. package/lib/capability-tools.d.ts +7 -2
  24. package/lib/capability-tools.d.ts.map +1 -1
  25. package/lib/client.js +3 -3
  26. package/lib/client.js.map +2 -2
  27. package/lib/codex-images.d.ts +8 -0
  28. package/lib/codex-images.d.ts.map +1 -1
  29. package/lib/index.js +32 -7
  30. package/lib/index.js.map +2 -2
  31. package/lib/invariant.js.map +1 -1
  32. package/media/en/settings_accounts.png +0 -0
  33. package/media/en/settings_capabilities.png +0 -0
  34. package/media/en/settings_gateway.png +0 -0
  35. package/media/settings_accounts.png +0 -0
  36. package/media/settings_capabilities.png +0 -0
  37. package/media/settings_gateway.png +0 -0
  38. package/media/settings_overview.png +0 -0
  39. package/media/zh-CN/settings_accounts.png +0 -0
  40. package/media/zh-CN/settings_capabilities.png +0 -0
  41. package/media/zh-CN/settings_gateway.png +0 -0
  42. package/package.json +148 -148
  43. package/patches/dsh-agy@0.1.2.patch +25 -25
  44. package/scripts/release.mjs +186 -186
  45. package/scripts/smoke-deployed-routes.mjs +146 -146
  46. package/scripts/verify-deployed-catalog.mjs +87 -87
  47. package/src/adapter.ts +273 -273
  48. package/src/alias-adapter.ts +130 -130
  49. package/src/auth-routes.ts +921 -921
  50. package/src/auth.ts +67 -67
  51. package/src/bin.ts +350 -350
  52. package/src/capability-routes.ts +279 -279
  53. package/src/capability-runtime.ts +314 -313
  54. package/src/capability-settings.ts +671 -658
  55. package/src/capability-tools.ts +685 -666
  56. package/src/catalog.ts +271 -271
  57. package/src/client/GrokBuildSettings.tsx +771 -770
  58. package/src/client/api.ts +88 -88
  59. package/src/client/components/AboutTab.tsx +30 -30
  60. package/src/client/components/AccountsTab.tsx +241 -241
  61. package/src/client/components/Badge.tsx +33 -33
  62. package/src/client/components/CapabilitiesTab.tsx +265 -265
  63. package/src/client/components/CliPullPreview.tsx +116 -116
  64. package/src/client/components/CopyButton.tsx +57 -57
  65. package/src/client/components/GatewayTab.tsx +469 -469
  66. package/src/client/components/NoticeBanner.tsx +46 -46
  67. package/src/client/components/ProgressBar.tsx +53 -53
  68. package/src/client/components/ProviderCard.tsx +606 -606
  69. package/src/client/components/SettingsTabs.tsx +75 -75
  70. package/src/client/components/ToggleSwitch.tsx +71 -71
  71. package/src/client/constants.ts +230 -224
  72. package/src/client/display.ts +61 -61
  73. package/src/client/dshClientAdapter.ts +127 -127
  74. package/src/client/gatewaySnippets.ts +37 -37
  75. package/src/client/index.tsx +156 -156
  76. package/src/client/locales.ts +540 -535
  77. package/src/client/microStyles.ts +52 -52
  78. package/src/client/parsers.ts +398 -396
  79. package/src/client/styles.ts +325 -325
  80. package/src/client/types.ts +199 -197
  81. package/src/codex-http.ts +447 -447
  82. package/src/codex-images.ts +503 -485
  83. package/src/codex-model-capabilities.ts +320 -320
  84. package/src/codex-search.ts +245 -245
  85. package/src/codex-usage.ts +263 -263
  86. package/src/compatibility.ts +41 -41
  87. package/src/dsh-host-adapter.ts +173 -173
  88. package/src/gateway-anthropic-messages.ts +84 -84
  89. package/src/gateway-auth.ts +102 -102
  90. package/src/gateway-backend.ts +274 -274
  91. package/src/gateway-body.ts +49 -49
  92. package/src/gateway-config.ts +76 -76
  93. package/src/gateway-http.ts +104 -104
  94. package/src/gateway-openai-chat.ts +124 -124
  95. package/src/gateway-openai-responses.ts +53 -53
  96. package/src/gateway-parse.ts +224 -224
  97. package/src/gateway-protocol.ts +52 -52
  98. package/src/gateway-routes.ts +158 -158
  99. package/src/gateway.ts +258 -258
  100. package/src/grok-errors.ts +24 -24
  101. package/src/grok-imagine.ts +1627 -1627
  102. package/src/grok-import.ts +151 -151
  103. package/src/http-json.ts +82 -82
  104. package/src/ids.ts +59 -59
  105. package/src/imagine-routes.ts +463 -463
  106. package/src/index.ts +709 -709
  107. package/src/invariant.ts +17 -17
  108. package/src/kimi-errors.ts +26 -26
  109. package/src/media-store.ts +927 -927
  110. package/src/oauth-import-routes.ts +324 -324
  111. package/src/oauth-providers.ts +152 -152
  112. package/src/oauth-session.ts +183 -183
  113. package/src/oauth-sources.ts +1104 -1104
  114. package/src/oauth.ts +620 -620
  115. package/src/provider.ts +128 -128
  116. package/src/proxy.ts +11 -11
  117. package/src/redact.ts +72 -72
  118. package/src/session.ts +218 -218
  119. package/src/store.ts +217 -217
  120. package/src/web-origin.ts +296 -296
  121. package/src/web-routes.ts +38 -38
package/README.zh-CN.md CHANGED
@@ -1,318 +1,318 @@
1
-
2
- <!-- banner -->
3
- <div align="center">
4
-
5
- # 🔐 dsh-coding-subscription-oauth
6
-
7
- **v0.6.2** · 原名 `dsh-grok-build`
8
-
9
- **面向 [DeepSeek Harness](https://github.com/deepseek-ai/dsh) 的编码订阅 OAuth 插件。** 把 SuperGrok / X Premium(Grok Build)、ChatGPT Plus/Pro(Codex)、Kimi Code、Claude Pro/Max 和 Google Antigravity 接到 DSH——不必再开一份按量 API-key,**也不要把 token 粘贴进聊天。**
10
-
11
- [![License](https://img.shields.io/badge/license-Apache--2.0-green.svg)](LICENSE)
12
- [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](CONTRIBUTING.md)
13
-
14
- *[English](README.md) · [中文版](README.zh-CN.md) · [日本語](README.ja.md) · [한국어](README.ko.md) · [Português (BR)](README.pt-BR.md) · [Español](README.es.md) · [Français](README.fr.md) · [Deutsch](README.de.md) · [Русский](README.ru.md)*
15
-
1
+
2
+ <!-- banner -->
3
+ <div align="center">
4
+
5
+ # 🔐 dsh-coding-subscription-oauth
6
+
7
+ **v0.6.3** · 原名 `dsh-grok-build`
8
+
9
+ **面向 [DeepSeek Harness](https://github.com/deepseek-ai/dsh) 的编码订阅 OAuth 插件。** 把 SuperGrok / X Premium(Grok Build)、ChatGPT Plus/Pro(Codex)、Kimi Code、Claude Pro/Max 和 Google Antigravity 接到 DSH——不必再开一份按量 API-key,**也不要把 token 粘贴进聊天。**
10
+
11
+ [![License](https://img.shields.io/badge/license-Apache--2.0-green.svg)](LICENSE)
12
+ [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](CONTRIBUTING.md)
13
+
14
+ *[English](README.md) · [中文版](README.zh-CN.md) · [日本語](README.ja.md) · [한국어](README.ko.md) · [Português (BR)](README.pt-BR.md) · [Español](README.es.md) · [Français](README.fr.md) · [Deutsch](README.de.md) · [Русский](README.ru.md)*
15
+
16
16
  </div>
17
17
 
18
18
  ---
19
19
 
20
- > **升级:** 按 [`INSTALL.md`](INSTALL.md) 的版本化步骤操作。`0.6.2` 包含严格 Cordis 注入启动修复并正式支持 DSH `0.1.1-rc.2`;保留 profile、配置和凭据文件,更新后再重启一次现有 DSH Web 进程。`dsh-coding-oauth-core@0.1.0` 仍是共享 npm 依赖,不是需要单独安装的 DSH 插件。
20
+ > **升级:** 按 [`INSTALL.md`](INSTALL.md) 的版本化步骤操作。`0.6.3` 包含严格 Cordis 注入启动修复并正式支持 DSH `0.1.1-rc.2`;保留 profile、配置和凭据文件,更新后再重启一次现有 DSH Web 进程。`dsh-coding-oauth-core@0.1.0` 仍是共享 npm 依赖,不是需要单独安装的 DSH 插件。
21
21
 
22
22
  ---
23
-
24
- ## 项目更名
25
-
26
- 最初只做 Grok Build,仓库名是 **`dsh-grok-build`**。现在覆盖 SuperGrok / Grok Build、ChatGPT Plus Codex、Kimi Code、Claude Code 和 Google Antigravity,因此改为现名。
27
-
28
- | | 请用这个 | 仍然可用 |
29
- |---|---|---|
30
- | npm(推荐) | 当前版本是 `0.6.2`:`dsh plugin --profile web add dsh-coding-subscription-oauth@0.6.2` | 没有发布过旧 npm 包 |
31
- | GitHub / 开发安装 | [`dsh-coding-subscription-oauth`](https://github.com/lninghaha/dsh-coding-subscription-oauth) | 旧仓库 `dsh-grok-build` 已删除 |
32
- | CLI | `dsh-coding-oauth` | `dsh-grok-build` |
33
- | Cordis 插件 id | `llm-grok-build-oauth` | 不变 |
34
- | 设置页 HTTP API | `/plugins/dsh-grok-build/*` | 不变 |
35
- | 凭据文件 | `$DSH_HOME/.grok-build-auth.json` 及其他 `*-oauth-auth.json` | 不变 |
36
-
37
- ## ✨ 特性
38
-
39
- - 🧳 **自带订阅** —— SuperGrok、ChatGPT Plus/Pro、Kimi Code、Claude Pro/Max,不必另开按量 API-key。
40
- - 🔑 **本地 OAuth,不用贴 key** —— 在设置页或 CLI 完成授权;access/refresh token 不进聊天、日志和 HTTP 状态。
41
- - 🧩 **一个插件,五大供应商** —— Grok Build(`cli-chat-proxy.grok.com`)、Codex、Kimi Code、Claude Code 与 Google Antigravity。
42
- - 🛡️ **安全设计** —— 凭据文件均为 owner-only `0600`、原子写、跨进程文件锁。
43
- - ⚙️ **动态目录** —— 选择器只列出已登录路由并标注 `(OAuth)`,含 grok-4.6 的 `xhigh`。
44
- - 🌐 **代理感知** —— 只代理审核过的订阅域名;Kimi 中国流量默认直连。
45
- - 📥 **手动 CLI 拉取** —— 设置页只读发现白名单内的官方 Grok/Codex/Kimi/Claude CLI OAuth 文件;预览并确认覆盖后,单向拉取一份副本。
46
- - 🗂️ **分栏设置页** —— Accounts、Gateway、Capabilities、About;远程主机优先设备码登录并弱化 CLI 缺失提示;已登录供应商卡片默认收起,展开后再编辑。
47
- - 🎛️ **可选能力默认关闭** —— Codex 搜索、用量/配额、图像生成/编辑、Fast、Grok Imagine 打开后立即生效。
48
- - 🔌 **可选本地 API 网关** —— 默认关闭的 loopback OpenAI/Anthropic 兼容服务,支持复制 base URL 和 Bearer key,只给你自己的工具用,不是公网中继。
49
-
50
- ## 本插件解决的接入问题
51
-
52
- 下面这些搜索词和 DSH 报错,通常就是会搜到这个仓库的原因。
53
-
54
- | 你搜到 / 看到的 | 实际坏在哪 | 本插件怎么处理 |
55
- |---|---|---|
56
- | 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 |
57
- | `本轮运行失败` **API key is invalid** / `AUTH` | GUI 把所有 `AUTH` 都显示成这句。常见原因是 OAuth access token 到期(Kimi 约 15 分钟) | 过期前 **5 分钟**主动刷新;遇到 401 先作废本地 token,刷新后再**重试该 step** |
58
- | 第二轮 Codex / Kimi 报 `INVALID_REPLAY_STATE` | replay state 仍带着 pi-ai 原生 provider id | 保持 Harness route id,并修复历史被污染的 replay |
59
- | 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 |
60
- | Kimi Code 401,或请求变成 Anthropic `x-api-key` | OAuth token 被当成 Anthropic key 发出 | `api.kimi.com/coding` **只**走 `Authorization: Bearer` |
61
- | 没登录的 Grok / Codex / Claude 仍出现在模型选择器 | 所有已注册路由都被列出来 | 未认证路由模型列表为空;已登录名称带 `(OAuth)` |
62
- | **远程 / 无头** DSH 没法浏览器登录 | PKCE 回不到本机 `localhost` | Grok/Codex/Kimi 走设备码;Claude 可粘贴完整 localhost 回调 URL |
63
- | 开了代理 Grok 通了、国内 Kimi 挂了 | 全局 `HTTPS_PROXY` 一刀切 | 白名单代理;Kimi 默认**直连**(`proxyKimi: true` 才走代理)。`auth.kimi.com` ≠ `api.moonshot.cn` |
64
- | 想在 DSH 用 ChatGPT Plus / Claude Pro,又不想再买 API | 另开 OpenAI / Anthropic API-key | `codex-oauth` / `claude-code-oauth` 本地 OAuth,与现有 `openai` / `kimi-coding` API-key 路由共存 |
65
-
66
- ## 支持的供应商
67
-
68
- | 供应商 | 路由 | 认证 | 与现有 API-key 路由共存 |
69
- |---|---|---|---|
70
- | **xAI Grok Build** | `grok-build` | SuperGrok / X Premium OAuth | `xai` |
71
- | **OpenAI Codex** | `codex-oauth` · 可选 `codex-oauth-fast` | ChatGPT Plus/Pro OAuth | `openai` |
72
- | **Kimi Code** | `kimi-code-oauth` | Kimi Code OAuth | `kimi-coding` |
73
- | **Claude Code** | `claude-code-oauth` | Claude Pro/Max OAuth | — |
74
- | **Google Antigravity** | `agy` | `dsh-agy` Google OAuth | — |
75
-
76
- > Grok Build 的 device 登录、动态 `/v1/models-v2` 目录与 Responses 流式推理已在实机上验证。Codex/Kimi/Claude 复用 `@earendil-works/pi-ai` 的 provider-native OAuth/刷新协议,不重新实现各供应商流程。
77
-
78
- ## 🚀 快速开始
79
-
80
- ```bash
81
- # 1. 安装当前 npm 发布版到 web profile
82
- dsh plugin --profile web add dsh-coding-subscription-oauth@0.6.2
83
-
84
- # 2. 可选 —— Google Antigravity(固定审核过的版本)
85
- dsh plugin --profile web add dsh-agy@0.1.2
86
-
23
+
24
+ ## 项目更名
25
+
26
+ 最初只做 Grok Build,仓库名是 **`dsh-grok-build`**。现在覆盖 SuperGrok / Grok Build、ChatGPT Plus Codex、Kimi Code、Claude Code 和 Google Antigravity,因此改为现名。
27
+
28
+ | | 请用这个 | 仍然可用 |
29
+ |---|---|---|
30
+ | npm(推荐) | 当前版本是 `0.6.3`:`dsh plugin --profile web add dsh-coding-subscription-oauth@0.6.3` | 没有发布过旧 npm 包 |
31
+ | GitHub / 开发安装 | [`dsh-coding-subscription-oauth`](https://github.com/lninghaha/dsh-coding-subscription-oauth) | 旧仓库 `dsh-grok-build` 已删除 |
32
+ | CLI | `dsh-coding-oauth` | `dsh-grok-build` |
33
+ | Cordis 插件 id | `llm-grok-build-oauth` | 不变 |
34
+ | 设置页 HTTP API | `/plugins/dsh-grok-build/*` | 不变 |
35
+ | 凭据文件 | `$DSH_HOME/.grok-build-auth.json` 及其他 `*-oauth-auth.json` | 不变 |
36
+
37
+ ## ✨ 特性
38
+
39
+ - 🧳 **自带订阅** —— SuperGrok、ChatGPT Plus/Pro、Kimi Code、Claude Pro/Max,不必另开按量 API-key。
40
+ - 🔑 **本地 OAuth,不用贴 key** —— 在设置页或 CLI 完成授权;access/refresh token 不进聊天、日志和 HTTP 状态。
41
+ - 🧩 **一个插件,五大供应商** —— Grok Build(`cli-chat-proxy.grok.com`)、Codex、Kimi Code、Claude Code 与 Google Antigravity。
42
+ - 🛡️ **安全设计** —— 凭据文件均为 owner-only `0600`、原子写、跨进程文件锁。
43
+ - ⚙️ **动态目录** —— 选择器只列出已登录路由并标注 `(OAuth)`,含 grok-4.6 的 `xhigh`。
44
+ - 🌐 **代理感知** —— 只代理审核过的订阅域名;Kimi 中国流量默认直连。
45
+ - 📥 **手动 CLI 拉取** —— 设置页只读发现白名单内的官方 Grok/Codex/Kimi/Claude CLI OAuth 文件;预览并确认覆盖后,单向拉取一份副本。
46
+ - 🗂️ **分栏设置页** —— Accounts、Gateway、Capabilities、About;远程主机优先设备码登录并弱化 CLI 缺失提示;已登录供应商卡片默认收起,展开后再编辑。
47
+ - 🎛️ **可选能力默认关闭** —— Codex 搜索、用量/配额、图像生成/编辑、Fast、Grok Imagine 打开后立即生效。另有默认关闭的开关,允许非 Codex 模型路由调用 Codex 图像工具,同时保留 Codex 登录、会话和附件归属检查。
48
+ - 🔌 **可选本地 API 网关** —— 默认关闭的 loopback OpenAI/Anthropic 兼容服务,支持复制 base URL 和 Bearer key,只给你自己的工具用,不是公网中继。
49
+
50
+ ## 本插件解决的接入问题
51
+
52
+ 下面这些搜索词和 DSH 报错,通常就是会搜到这个仓库的原因。
53
+
54
+ | 你搜到 / 看到的 | 实际坏在哪 | 本插件怎么处理 |
55
+ |---|---|---|
56
+ | 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 |
57
+ | `本轮运行失败` **API key is invalid** / `AUTH` | GUI 把所有 `AUTH` 都显示成这句。常见原因是 OAuth access token 到期(Kimi 约 15 分钟) | 过期前 **5 分钟**主动刷新;遇到 401 先作废本地 token,刷新后再**重试该 step** |
58
+ | 第二轮 Codex / Kimi 报 `INVALID_REPLAY_STATE` | replay state 仍带着 pi-ai 原生 provider id | 保持 Harness route id,并修复历史被污染的 replay |
59
+ | 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 |
60
+ | Kimi Code 401,或请求变成 Anthropic `x-api-key` | OAuth token 被当成 Anthropic key 发出 | `api.kimi.com/coding` **只**走 `Authorization: Bearer` |
61
+ | 没登录的 Grok / Codex / Claude 仍出现在模型选择器 | 所有已注册路由都被列出来 | 未认证路由模型列表为空;已登录名称带 `(OAuth)` |
62
+ | **远程 / 无头** DSH 没法浏览器登录 | PKCE 回不到本机 `localhost` | Grok/Codex/Kimi 走设备码;Claude 可粘贴完整 localhost 回调 URL |
63
+ | 开了代理 Grok 通了、国内 Kimi 挂了 | 全局 `HTTPS_PROXY` 一刀切 | 白名单代理;Kimi 默认**直连**(`proxyKimi: true` 才走代理)。`auth.kimi.com` ≠ `api.moonshot.cn` |
64
+ | 想在 DSH 用 ChatGPT Plus / Claude Pro,又不想再买 API | 另开 OpenAI / Anthropic API-key | `codex-oauth` / `claude-code-oauth` 本地 OAuth,与现有 `openai` / `kimi-coding` API-key 路由共存 |
65
+
66
+ ## 支持的供应商
67
+
68
+ | 供应商 | 路由 | 认证 | 与现有 API-key 路由共存 |
69
+ |---|---|---|---|
70
+ | **xAI Grok Build** | `grok-build` | SuperGrok / X Premium OAuth | `xai` |
71
+ | **OpenAI Codex** | `codex-oauth` · 可选 `codex-oauth-fast` | ChatGPT Plus/Pro OAuth | `openai` |
72
+ | **Kimi Code** | `kimi-code-oauth` | Kimi Code OAuth | `kimi-coding` |
73
+ | **Claude Code** | `claude-code-oauth` | Claude Pro/Max OAuth | — |
74
+ | **Google Antigravity** | `agy` | `dsh-agy` Google OAuth | — |
75
+
76
+ > Grok Build 的 device 登录、动态 `/v1/models-v2` 目录与 Responses 流式推理已在实机上验证。Codex/Kimi/Claude 复用 `@earendil-works/pi-ai` 的 provider-native OAuth/刷新协议,不重新实现各供应商流程。
77
+
78
+ ## 🚀 快速开始
79
+
80
+ ```bash
81
+ # 1. 安装当前 npm 发布版到 web profile
82
+ dsh plugin --profile web add dsh-coding-subscription-oauth@0.6.3
83
+
84
+ # 2. 可选 —— Google Antigravity(固定审核过的版本)
85
+ dsh plugin --profile web add dsh-agy@0.1.2
86
+
87
87
  # 3. 使用本机实际配置的进程管理器重启现有 DSH Web 进程
88
88
  # 官方 `dsh web` 是启动 web profile 的 CLI 别名,不是服务单元名。
89
- ```
90
-
91
- 然后打开 **设置 → 编码 OAuth** 登录任一供应商即可。选择器会自动列出已认证的模型。
92
-
93
- ## 📚 目录
94
-
95
- - [项目更名](#项目更名)
96
- - [特性](#-特性)
97
- - [本插件解决的接入问题](#本插件解决的接入问题)
98
- - [支持的供应商](#支持的供应商)
99
- - [快速开始](#-快速开始)
100
- - [安装](#安装)
101
- - [设置页](#设置页)
102
- - [可选能力](#可选能力)
103
- - [本地 API 网关](#本地-api-网关)
104
- - [CLI](#cli)
105
- - [Kimi 中国说明](#kimi-中国说明)
106
- - [网络代理](#网络代理)
107
- - [弹性重试](#弹性重试)
108
- - [凭据](#凭据)
109
- - [架构](#架构)
110
- - [技术方案](#技术方案)
111
- - [合规](#合规)
112
- - [文档](#文档)
113
- - [相关项目](#相关项目)
114
- - [贡献](#贡献)
115
- - [许可证](#许可证)
116
-
117
- ## 安装
118
-
89
+ ```
90
+
91
+ 然后打开 **设置 → 编码 OAuth** 登录任一供应商即可。选择器会自动列出已认证的模型。
92
+
93
+ ## 📚 目录
94
+
95
+ - [项目更名](#项目更名)
96
+ - [特性](#-特性)
97
+ - [本插件解决的接入问题](#本插件解决的接入问题)
98
+ - [支持的供应商](#支持的供应商)
99
+ - [快速开始](#-快速开始)
100
+ - [安装](#安装)
101
+ - [设置页](#设置页)
102
+ - [可选能力](#可选能力)
103
+ - [本地 API 网关](#本地-api-网关)
104
+ - [CLI](#cli)
105
+ - [Kimi 中国说明](#kimi-中国说明)
106
+ - [网络代理](#网络代理)
107
+ - [弹性重试](#弹性重试)
108
+ - [凭据](#凭据)
109
+ - [架构](#架构)
110
+ - [技术方案](#技术方案)
111
+ - [合规](#合规)
112
+ - [文档](#文档)
113
+ - [相关项目](#相关项目)
114
+ - [贡献](#贡献)
115
+ - [许可证](#许可证)
116
+
117
+ ## 安装
118
+
119
119
  需要 DeepSeek Harness `0.1.1-rc.2` 与 Node.js 22.19+。完整细节见[安装说明](INSTALL.md)。
120
-
121
- ```bash
122
- # 当前 npm 版本
123
- dsh plugin --profile web add dsh-coding-subscription-oauth@0.6.2
124
-
125
- # 开发 / 备用:从 GitHub 安装
126
- dsh plugin --profile web add github:lninghaha/dsh-coding-subscription-oauth
127
-
128
- # 本地开发目录(备用)
129
- # dsh plugin --profile web add ./dsh-coding-subscription-oauth
130
- ```
131
-
120
+
121
+ ```bash
122
+ # 当前 npm 版本
123
+ dsh plugin --profile web add dsh-coding-subscription-oauth@0.6.3
124
+
125
+ # 开发 / 备用:从 GitHub 安装
126
+ dsh plugin --profile web add github:lninghaha/dsh-coding-subscription-oauth
127
+
128
+ # 本地开发目录(备用)
129
+ # dsh plugin --profile web add ./dsh-coding-subscription-oauth
130
+ ```
131
+
132
132
  安装后重启现有 DSH Web 进程。维护者可在源码 checkout 中对实际部署做验证(npm 安装不包含这些脚本):
133
-
134
- ```bash
135
- pnpm run verify:deployed # 核对真实 /api/llm.models 与 OAuth 状态
136
- DSH_EXPECT_AGY_AUTH=signed-in pnpm run verify:deployed # 已登录 Google 时
137
-
138
- DSH_RESTORE_PROVIDER=openai \
139
- DSH_RESTORE_MODEL=gpt-5.6-sol \
140
- DSH_RESTORE_REASONING=max \
141
- pnpm run smoke:deployed # 真实 Codex/Kimi tool-call + 第二个用户 turn 回放
142
- ```
143
-
144
- > `smoke:deployed` 会创建临时会话、分别测试 Codex/Kimi 工具调用与第二个用户 turn(覆盖 `INVALID_REPLAY_STATE` 回归),恢复显式指定的默认模型后归档测试会话。
145
-
146
- ## 设置页
147
-
133
+
134
+ ```bash
135
+ pnpm run verify:deployed # 核对真实 /api/llm.models 与 OAuth 状态
136
+ DSH_EXPECT_AGY_AUTH=signed-in pnpm run verify:deployed # 已登录 Google 时
137
+
138
+ DSH_RESTORE_PROVIDER=openai \
139
+ DSH_RESTORE_MODEL=gpt-5.6-sol \
140
+ DSH_RESTORE_REASONING=max \
141
+ pnpm run smoke:deployed # 真实 Codex/Kimi tool-call + 第二个用户 turn 回放
142
+ ```
143
+
144
+ > `smoke:deployed` 会创建临时会话、分别测试 Codex/Kimi 工具调用与第二个用户 turn(覆盖 `INVALID_REPLAY_STATE` 回归),恢复显式指定的默认模型后归档测试会话。
145
+
146
+ ## 设置页
147
+
148
148
  打开 **设置 → 编码 OAuth**。页面采用分段标签:**Accounts**、**Gateway**、**Capabilities**、**About**,并带有实时状态提示、语义化徽章与骨架屏加载。远程(非 loopback)主机上,Accounts 会优先设备码登录,并把嘈杂的 CLI 缺失提示收成一条;已登录供应商卡片默认折叠,展开后可搜索/筛选模型、查看配额进度条或使用 CLI 拉取;Gateway 提供 cURL / Python / IDE 快速配置片段,Capabilities 使用开关联动(含依赖项置灰)并显示 Imagine 状态。
149
149
 
150
150
  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](INSTALL.md#安全访问远程-settings)。
151
-
152
- <table>
153
- <tr>
154
- <td align="center" valign="top" width="33%">
151
+
152
+ <table>
153
+ <tr>
154
+ <td align="center" valign="top" width="33%">
155
155
  <a href="media/zh-CN/settings_accounts.png"><img src="media/zh-CN/settings_accounts.png" alt="编码 OAuth · Accounts 标签" width="280" /></a><br />
156
- <sub>Accounts</sub>
157
- </td>
158
- <td align="center" valign="top" width="33%">
156
+ <sub>Accounts</sub>
157
+ </td>
158
+ <td align="center" valign="top" width="33%">
159
159
  <a href="media/zh-CN/settings_gateway.png"><img src="media/zh-CN/settings_gateway.png" alt="编码 OAuth · Gateway 标签" width="280" /></a><br />
160
- <sub>Gateway</sub>
161
- </td>
162
- <td align="center" valign="top" width="33%">
160
+ <sub>Gateway</sub>
161
+ </td>
162
+ <td align="center" valign="top" width="33%">
163
163
  <a href="media/zh-CN/settings_capabilities.png"><img src="media/zh-CN/settings_capabilities.png" alt="编码 OAuth · Capabilities 标签" width="280" /></a><br />
164
- <sub>Capabilities</sub>
165
- </td>
166
- </tr>
167
- </table>
168
-
169
- | 供应商 | 方式 |
170
- |---|---|
171
- | Grok | 授权码 · 设备码 · 模型勾选 |
172
- | Codex | 设备码(推荐远程 DSH)· 浏览器 PKCE |
173
- | Kimi | 设备码 |
174
- | Claude | 浏览器 PKCE(远程浏览器可粘贴完整 localhost redirect URL) |
175
- | Antigravity | `dsh-agy` 安装状态 + profile-local CLI 命令 |
176
-
177
- DSH 主机在远端时优先使用设备码。浏览器/PKCE 登录会打开供应商页面;如果 localhost 回调无法到达这台 DSH 主机,可把返回的授权 code 或完整 redirect URL 粘贴到等待中的设置卡片。
178
-
179
- 设置页还会**只读发现**白名单内的官方 Grok / Codex / Kimi / Claude CLI OAuth 文件。同步是显式的单向**拉取**,不是自动导入:发现 → 预览 → 冲突/指纹核对 → 确认覆盖。官方 CLI 文件从不被写入。读取会拒绝符号链接、非普通文件、非属主文件、组/其他人可读,以及超大文档(`O_NOFOLLOW`)。预览票据一次性、五分钟过期、最多 32 张。
180
-
181
- 选择器只列出已认证的路由;未登录供应商返回空列表。供应商名称统一带 `(OAuth)`,登录或登出后通过 `llm/adapters-updated` 刷新目录。
182
-
183
- ## 可选能力
184
-
185
- 七项开关默认全部**关闭**,打开后**立即生效**(无需重启):`codexSearch`、`codexImages`、`codexImageEdits`、`codexUsage`、`codexFast`、`grokImagineImage`、`grokImagineVideo`。数值控制为 `searchResults`(1–20,默认 5)、`imageCount`(1–4,默认 1)、`videoArtifactTtlMs`(1 小时–7 天,默认 7 天;界面以 1–168 小时显示)。降低视频保留时间会立即缩短并清理已有产物;提高只影响之后生成的产物。管理员也可在插件配置的 `capabilities` 下提供不含秘密的 composition 默认值;`coding-subscription-oauth` 设置区中的用户值会覆盖这层 base,省略时所有开关仍保持关闭。
186
-
187
- `codex-oauth-fast` 仅在**最新一次 live catalog** 标明至少有一个 `priority` 可用模型后才会出现。请求会发送 `service_tier: priority` 和路由提示。界面写的是 **已请求 Fast**,不保证延迟,也不保证上游会兑现。
188
-
189
- Codex 搜索、用量和图像是**需显式打开**的私有 `chatgpt.com/backend-api` 端点。图像生成固定使用 `gpt-image-2`。图像编辑只接受当前会话顶层、且由本会话持有的附件 id。
190
-
191
- 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 路由提供。
192
-
193
- ## 本地 API 网关
194
-
195
- 默认**关闭**。启用后会在 `127.0.0.1:18080` 启动独立的 `node:http` 服务(不占用 DSH web 端口),复用已经登录的 OAuth 会话:
196
-
197
- ```yaml
198
- gateway:
199
- enabled: false
200
- bind: 127.0.0.1
201
- port: 18080
202
- ```
203
-
204
- 端点:`GET /healthz`、`GET /v1/models`、`POST /v1/chat/completions`、`POST /v1/responses`、`POST /v1/messages`。Bearer key 保存在 `$DSH_HOME/.coding-oauth-gateway.json`(`0600`)。
205
-
206
- 在 **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。这不是远程中继。
207
-
208
- ## CLI
209
-
210
- ```bash
211
- # `dsh-grok-build` 仍是同一命令的别名
212
- dsh-coding-oauth login [--pkce] | import | status | logout
213
-
214
- # 新供应商
215
- dsh-coding-oauth login codex --device-auth | codex --browser | kimi | claude
216
- dsh-coding-oauth status all
217
- dsh-coding-oauth logout codex
218
-
219
- # Antigravity(先安装到 web profile)
220
- dsh plugin --profile web exec dsh-agy login --headless
221
- ```
222
-
223
- > `dsh-agy` CLI 在 DSH 进程外修改账号池,无法发送进程内 catalog event——登录或登出后关闭并重新打开模型选择器即可。
224
-
225
- ## Kimi 中国说明
226
-
227
- 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 配置。
228
-
229
- ## 网络代理
230
-
231
- 优先级:`config.proxy` → `CODING_OAUTH_PROXY` → `GROK_BUILD_PROXY` → `HTTPS_PROXY`/`HTTP_PROXY`。
232
-
233
- ```yaml
234
- - id: llm-grok-build-oauth
235
- config:
236
- proxy: http://127.0.0.1:7890
237
- proxyKimi: false
238
- ```
239
-
240
- 插件只代理审核过的订阅域名(xAI/Grok、OpenAI Codex、Claude/Anthropic、Google Antigravity);其余 DSH 流量保持原 dispatcher。Kimi 默认直连,仅当 `proxyKimi: true` 时才进入代理。
241
-
242
- ## 弹性重试
243
-
244
- OAuth access token 会在本地记录过期时间前 **5 分钟**主动刷新(pi-ai 0.84+),避免请求踩到令牌寿命的最后几秒。若服务端仍以 401/403 拒绝一个本地尚未过期的令牌(服务端提前吊销或时钟偏差),插件会把凭据的 `expires` 回写到过去,重试的 step 会先刷新再发请求——用户无感知自愈,而不是本轮直接失败。
245
-
246
- 请求重试走 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 失效**不**重试——会立刻给出真实错误和重新登录提示。部署级覆盖:
247
-
248
- ```yaml
249
- - id: llm-grok-build-oauth
250
- config:
251
- retryPolicy:
252
- mode: normal
253
- maxRetries: 5
254
- retryableCodes: [EMPTY_RESPONSE, RATE_LIMIT, SERVER, TIMEOUT, TRANSPORT, AUTH]
255
- backoff: { initialDelayMs: 5000, maxDelayMs: 80000, jitterRatio: 0.1 }
256
- ```
257
-
258
- ## 凭据
259
-
260
- owner-only `0600`、原子写、跨进程文件锁:
261
-
262
- - `$DSH_HOME/.grok-build-auth.json`
263
- - `$DSH_HOME/.codex-oauth-auth.json`
264
- - `$DSH_HOME/.kimi-code-oauth-auth.json`
265
- - `$DSH_HOME/.claude-code-oauth-auth.json`
266
-
267
- 勾选/目录缓存使用对应的 `*-models.json` 文件。Grok Imagine 使用独立的 DSH 凭据名 `XAI_API_KEY`(不是 Grok OAuth 文件)。**任何 HTTP 状态、日志或 UI 都不得返回 token。**
268
-
269
- ## 架构
270
-
271
- ```mermaid
272
- flowchart LR
273
- subgraph DSH["DSH Harness"]
274
- UI[设置 / Web · 编码 OAuth] --> LLM[llm route]
275
- LLM --> ALIA[路由别名适配器]
276
- end
277
- ALIA --> PI[pi-ai 原生 provider<br/>OAuth · 刷新 · 流式]
278
- PI --> GROK[Grok Build]
279
- PI --> COD[Codex]
280
- PI --> KIMI[Kimi]
281
- PI --> CLAU[Claude]
282
- AGY[dsh-agy 插件] --> GAL[Google Antigravity]
283
- ```
284
-
285
- ## 技术方案
286
-
287
- - **Grok Build**:`cli-chat-proxy.grok.com/v1` 的 Responses API(不是 `api.x.ai`)、CLI 指纹头、live `/v1/models-v2`(含 grok-4.6 的 `reasoning.effort: xhigh`)。
288
- - **Codex/Kimi/Claude**:pi-ai 原生 provider 负责 OAuth 与刷新;路由别名适配器映射到原生 id,避免多轮 `INVALID_REPLAY_STATE`。
289
- - Kimi access token 显式转为 `Authorization: Bearer`——绝不会误发成 Anthropic `x-api-key`。
290
- - **Codex Fast / 私有端点**:`codex-oauth-fast` 需显式打开,目录过期则失败关闭;搜索、用量和 `gpt-image-2` 图像默认关闭。
291
- - **Grok Imagine**:只走官方 `api.x.ai`,`XAI_API_KEY` 通过 DSH 凭据解析,下载路由为同源 `/plugins/dsh-grok-build/imagine/*`。
292
- - Google Antigravity **不**在本项目逆向,使用固定版本的专用 DSH 插件。
293
-
294
- ## 合规
295
-
296
- 通过第三方 harness 使用编码订阅可能处于各供应商服务条款灰色地带,并可能触发配额、地区或账号风控。**仅使用自己的账号**;本项目不支持批量账号、额度转售、远程 relay、付费墙绕过或客户端伪装。商用优先选择官方 API-key 通道。
297
-
298
- ## 文档
299
-
300
- | 文档 | 用途 |
301
- |---|---|
302
- | [`INSTALL.md`](INSTALL.md) | 安装与使用细节 |
303
- | [`CHANGELOG.md`](CHANGELOG.md) | 版本历史 |
304
- | [`docs/00-project-rules.md`](docs/00-project-rules.md) | 版本、发版循环、公开层与本地内参分层 |
305
- | [`docs/02-architecture.md`](docs/02-architecture.md) | 内部架构(路由、数据流、模块、API)· [中文](docs/02-architecture.zh-CN.md) |
306
- | [`CONTRIBUTING.md`](CONTRIBUTING.md) | 贡献指南 |
307
-
308
- ## 相关项目
309
-
310
- - [`dsh-agy`](https://www.npmjs.com/package/dsh-agy) —— 用于 Google Antigravity 的独立固定版本插件。
311
-
312
- ## 贡献
313
-
314
- 欢迎各类贡献——功能、文档、翻译、Bug 反馈。流程、提交规范与发版循环见 **[CONTRIBUTING](CONTRIBUTING.md)**。若你的语言不在列表中,欢迎 PR 一份 README 翻译,我们会加入上方语言表。
315
-
316
- ## 许可证
317
-
318
- [Apache-2.0](LICENSE) · 参见 [NOTICE](NOTICE)。部分代码派生自 [dsh-xai](https://github.com/MirDie/dsh-xai) 项目(Apache-2.0)。
164
+ <sub>Capabilities</sub>
165
+ </td>
166
+ </tr>
167
+ </table>
168
+
169
+ | 供应商 | 方式 |
170
+ |---|---|
171
+ | Grok | 授权码 · 设备码 · 模型勾选 |
172
+ | Codex | 设备码(推荐远程 DSH)· 浏览器 PKCE |
173
+ | Kimi | 设备码 |
174
+ | Claude | 浏览器 PKCE(远程浏览器可粘贴完整 localhost redirect URL) |
175
+ | Antigravity | `dsh-agy` 安装状态 + profile-local CLI 命令 |
176
+
177
+ DSH 主机在远端时优先使用设备码。浏览器/PKCE 登录会打开供应商页面;如果 localhost 回调无法到达这台 DSH 主机,可把返回的授权 code 或完整 redirect URL 粘贴到等待中的设置卡片。
178
+
179
+ 设置页还会**只读发现**白名单内的官方 Grok / Codex / Kimi / Claude CLI OAuth 文件。同步是显式的单向**拉取**,不是自动导入:发现 → 预览 → 冲突/指纹核对 → 确认覆盖。官方 CLI 文件从不被写入。读取会拒绝符号链接、非普通文件、非属主文件、组/其他人可读,以及超大文档(`O_NOFOLLOW`)。预览票据一次性、五分钟过期、最多 32 张。
180
+
181
+ 选择器只列出已认证的路由;未登录供应商返回空列表。供应商名称统一带 `(OAuth)`,登录或登出后通过 `llm/adapters-updated` 刷新目录。
182
+
183
+ ## 可选能力
184
+
185
+ 八项开关默认全部**关闭**,打开后**立即生效**(无需重启):`codexSearch`、`codexImages`、`codexImageEdits`、`codexImagesAnyModel`、`codexUsage`、`codexFast`、`grokImagineImage`、`grokImagineVideo`。数值控制为 `searchResults`(1–20,默认 5)、`imageCount`(1–4,默认 1)、`videoArtifactTtlMs`(1 小时–7 天,默认 7 天;界面以 1–168 小时显示)。降低视频保留时间会立即缩短并清理已有产物;提高只影响之后生成的产物。管理员也可在插件配置的 `capabilities` 下提供不含秘密的 composition 默认值;`coding-subscription-oauth` 设置区中的用户值会覆盖这层 base,省略时所有开关仍保持关闭。
186
+
187
+ `codex-oauth-fast` 仅在**最新一次 live catalog** 标明至少有一个 `priority` 可用模型后才会出现。请求会发送 `service_tier: priority` 和路由提示。界面写的是 **已请求 Fast**,不保证延迟,也不保证上游会兑现。
188
+
189
+ Codex 搜索、用量和图像是**需显式打开**的私有 `chatgpt.com/backend-api` 端点。图像生成固定使用 `gpt-image-2`。图像编辑只接受当前会话顶层、且由本会话持有的附件 id。
190
+
191
+ 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 路由提供。
192
+
193
+ ## 本地 API 网关
194
+
195
+ 默认**关闭**。启用后会在 `127.0.0.1:18080` 启动独立的 `node:http` 服务(不占用 DSH web 端口),复用已经登录的 OAuth 会话:
196
+
197
+ ```yaml
198
+ gateway:
199
+ enabled: false
200
+ bind: 127.0.0.1
201
+ port: 18080
202
+ ```
203
+
204
+ 端点:`GET /healthz`、`GET /v1/models`、`POST /v1/chat/completions`、`POST /v1/responses`、`POST /v1/messages`。Bearer key 保存在 `$DSH_HOME/.coding-oauth-gateway.json`(`0600`)。
205
+
206
+ 在 **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。这不是远程中继。
207
+
208
+ ## CLI
209
+
210
+ ```bash
211
+ # `dsh-grok-build` 仍是同一命令的别名
212
+ dsh-coding-oauth login [--pkce] | import | status | logout
213
+
214
+ # 新供应商
215
+ dsh-coding-oauth login codex --device-auth | codex --browser | kimi | claude
216
+ dsh-coding-oauth status all
217
+ dsh-coding-oauth logout codex
218
+
219
+ # Antigravity(先安装到 web profile)
220
+ dsh plugin --profile web exec dsh-agy login --headless
221
+ ```
222
+
223
+ > `dsh-agy` CLI 在 DSH 进程外修改账号池,无法发送进程内 catalog event——登录或登出后关闭并重新打开模型选择器即可。
224
+
225
+ ## Kimi 中国说明
226
+
227
+ 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 配置。
228
+
229
+ ## 网络代理
230
+
231
+ 优先级:`config.proxy` → `CODING_OAUTH_PROXY` → `GROK_BUILD_PROXY` → `HTTPS_PROXY`/`HTTP_PROXY`。
232
+
233
+ ```yaml
234
+ - id: llm-grok-build-oauth
235
+ config:
236
+ proxy: http://127.0.0.1:7890
237
+ proxyKimi: false
238
+ ```
239
+
240
+ 插件只代理审核过的订阅域名(xAI/Grok、OpenAI Codex、Claude/Anthropic、Google Antigravity);其余 DSH 流量保持原 dispatcher。Kimi 默认直连,仅当 `proxyKimi: true` 时才进入代理。
241
+
242
+ ## 弹性重试
243
+
244
+ OAuth access token 会在本地记录过期时间前 **5 分钟**主动刷新(pi-ai 0.84+),避免请求踩到令牌寿命的最后几秒。若服务端仍以 401/403 拒绝一个本地尚未过期的令牌(服务端提前吊销或时钟偏差),插件会把凭据的 `expires` 回写到过去,重试的 step 会先刷新再发请求——用户无感知自愈,而不是本轮直接失败。
245
+
246
+ 请求重试走 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 失效**不**重试——会立刻给出真实错误和重新登录提示。部署级覆盖:
247
+
248
+ ```yaml
249
+ - id: llm-grok-build-oauth
250
+ config:
251
+ retryPolicy:
252
+ mode: normal
253
+ maxRetries: 5
254
+ retryableCodes: [EMPTY_RESPONSE, RATE_LIMIT, SERVER, TIMEOUT, TRANSPORT, AUTH]
255
+ backoff: { initialDelayMs: 5000, maxDelayMs: 80000, jitterRatio: 0.1 }
256
+ ```
257
+
258
+ ## 凭据
259
+
260
+ owner-only `0600`、原子写、跨进程文件锁:
261
+
262
+ - `$DSH_HOME/.grok-build-auth.json`
263
+ - `$DSH_HOME/.codex-oauth-auth.json`
264
+ - `$DSH_HOME/.kimi-code-oauth-auth.json`
265
+ - `$DSH_HOME/.claude-code-oauth-auth.json`
266
+
267
+ 勾选/目录缓存使用对应的 `*-models.json` 文件。Grok Imagine 使用独立的 DSH 凭据名 `XAI_API_KEY`(不是 Grok OAuth 文件)。**任何 HTTP 状态、日志或 UI 都不得返回 token。**
268
+
269
+ ## 架构
270
+
271
+ ```mermaid
272
+ flowchart LR
273
+ subgraph DSH["DSH Harness"]
274
+ UI[设置 / Web · 编码 OAuth] --> LLM[llm route]
275
+ LLM --> ALIA[路由别名适配器]
276
+ end
277
+ ALIA --> PI[pi-ai 原生 provider<br/>OAuth · 刷新 · 流式]
278
+ PI --> GROK[Grok Build]
279
+ PI --> COD[Codex]
280
+ PI --> KIMI[Kimi]
281
+ PI --> CLAU[Claude]
282
+ AGY[dsh-agy 插件] --> GAL[Google Antigravity]
283
+ ```
284
+
285
+ ## 技术方案
286
+
287
+ - **Grok Build**:`cli-chat-proxy.grok.com/v1` 的 Responses API(不是 `api.x.ai`)、CLI 指纹头、live `/v1/models-v2`(含 grok-4.6 的 `reasoning.effort: xhigh`)。
288
+ - **Codex/Kimi/Claude**:pi-ai 原生 provider 负责 OAuth 与刷新;路由别名适配器映射到原生 id,避免多轮 `INVALID_REPLAY_STATE`。
289
+ - Kimi access token 显式转为 `Authorization: Bearer`——绝不会误发成 Anthropic `x-api-key`。
290
+ - **Codex Fast / 私有端点**:`codex-oauth-fast` 需显式打开,目录过期则失败关闭;搜索、用量和 `gpt-image-2` 图像默认关闭。
291
+ - **Grok Imagine**:只走官方 `api.x.ai`,`XAI_API_KEY` 通过 DSH 凭据解析,下载路由为同源 `/plugins/dsh-grok-build/imagine/*`。
292
+ - Google Antigravity **不**在本项目逆向,使用固定版本的专用 DSH 插件。
293
+
294
+ ## 合规
295
+
296
+ 通过第三方 harness 使用编码订阅可能处于各供应商服务条款灰色地带,并可能触发配额、地区或账号风控。**仅使用自己的账号**;本项目不支持批量账号、额度转售、远程 relay、付费墙绕过或客户端伪装。商用优先选择官方 API-key 通道。
297
+
298
+ ## 文档
299
+
300
+ | 文档 | 用途 |
301
+ |---|---|
302
+ | [`INSTALL.md`](INSTALL.md) | 安装与使用细节 |
303
+ | [`CHANGELOG.md`](CHANGELOG.md) | 版本历史 |
304
+ | [`docs/00-project-rules.md`](docs/00-project-rules.md) | 版本、发版循环、公开层与本地内参分层 |
305
+ | [`docs/02-architecture.md`](docs/02-architecture.md) | 内部架构(路由、数据流、模块、API)· [中文](docs/02-architecture.zh-CN.md) |
306
+ | [`CONTRIBUTING.md`](CONTRIBUTING.md) | 贡献指南 |
307
+
308
+ ## 相关项目
309
+
310
+ - [`dsh-agy`](https://www.npmjs.com/package/dsh-agy) —— 用于 Google Antigravity 的独立固定版本插件。
311
+
312
+ ## 贡献
313
+
314
+ 欢迎各类贡献——功能、文档、翻译、Bug 反馈。流程、提交规范与发版循环见 **[CONTRIBUTING](CONTRIBUTING.md)**。若你的语言不在列表中,欢迎 PR 一份 README 翻译,我们会加入上方语言表。
315
+
316
+ ## 许可证
317
+
318
+ [Apache-2.0](LICENSE) · 参见 [NOTICE](NOTICE)。部分代码派生自 [dsh-xai](https://github.com/MirDie/dsh-xai) 项目(Apache-2.0)。
File without changes