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

订阅账号池 GooDAnDReaDY/dsh-subscriptions

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

DeepSeek Harness 的 OAuth 订阅式 LLM 服务商:ChatGPT Codex、Claude、Grok、Antigravity、Kimi、GLM、Cursor、Kiro、Copilot、Qwen、ERNIE、Spark…

46.6/100
综合分
21
GitHub 星标
8,095
npm 周下载
—/5
用户评分

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · model
装得上吗
本站已在 dsh 0.2.1-rc.5 下真实安装成功(非静态推断);本次验证针对插件 v0.7.55,当前版本为 v0.7.64
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 1 天前
档位由哪些信号合成

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

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

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

✓npm 包@goodandready/dsh-subscriptions @ 0.7.64
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/1 12:52:43

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

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

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 132 处,展示前 77 条)
  • 读取本地文件
    lib/index.js:66
    try { pkgVersion = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8')).version || '' } catch (err) { ignoreError("index.js:
  • 发起网络请求
    lib/index.js:298
    return (url, init) => shouldBypassProxy(bypass, String(url)) ? fetch(url, init) : proxied(url, init)
  • 写入剪贴板
    lib/client.js:69
    await navigator.clipboard.writeText(String(text == null ? '' : text))
  • 发起网络请求
    lib/client.js:719
    const res = await fetch('/dsh-subscriptions/reset-credits/prepare', {
  • 发起网络请求
    lib/client.js:743
    const res = await fetch('/dsh-subscriptions/reset-credits/consume', {
  • 发起网络请求
    lib/client.js:759
    fetch('/dsh-subscriptions/history?limit=50', { cache: 'no-store' })
  • 发起网络请求
    lib/client.js:773
    return fetch('/dsh-subscriptions/analyze-session', {
  • 发起网络请求
    lib/client.js:792
    fetch('/dsh-subscriptions/diagnostics', { cache: 'no-store' })
  • 发起网络请求
    lib/client.js:816
    fetch('/dsh-subscriptions/vault/sync/status')
  • 读取本地文件
    bin/dsh-subscriptions.mjs:242
    const pack = JSON.parse(await readFile(options.packFile, 'utf8'))
  • 读取本地文件
    lib/routes.js:16
    const CLIENT_CSS = readFileSync(new URL('./client.css', import.meta.url), 'utf8')
  • 写入本地文件
    lib/native-tools.js:61
    await mkdir(dir, { recursive: true })
  • 写入本地文件
    lib/native-tools.js:69
    await writeFile(file, data)
  • 发起网络请求
    lib/native-tools.js:157
    const res = await deps.subscriptions.request({
  • 发起网络请求
    lib/native-tools.js:189
    const res = await deps.subscriptions.request({
  • 发起网络请求
    lib/native-tools.js:230
    const res = await deps.subscriptions.request({
  • 发起网络请求
    lib/native-tools.js:250
    const poll = await deps.subscriptions.request({
  • 读取本地文件
    lib/coexistence.js:39
    const pkg = JSON.parse(readFileSync(path.join(dir, 'package.json'), 'utf8'))
  • 读取密钥环境变量
    lib/accounts.js:78
    const envKey = process.env.DSH_SUBSCRIPTIONS_MASTER_KEY
  • 发起网络请求
    lib/proxy.js:25
    return new Agent({
  • 发起网络请求
    lib/proxy.js:53
    return new ProxyAgent({
  • 发起网络请求
    lib/proxy.js:66
    f = (url, init = {}) => undiciFetch(url, { ...init, dispatcher: d })
  • 执行外部命令来自配置/变量
    lib/client-version-service.js:19
    const out = execFileSync(binary, ['--version'], { encoding: 'utf8', timeout: 1500, stdio: ['ignore', 'pipe', 'ignore'] })
  • 写入本地文件
    lib/history.js:39
    mkdirSync(this.dir, { recursive: true })
  • 读取本地文件
    lib/history.js:42
    const raw = JSON.parse(readFileSync(this.path, 'utf8'))
  • 写入本地文件
    lib/history.js:78
    mkdirSync(this.dir, { recursive: true })
  • 写入本地文件
    lib/history.js:79
    writeFileSync(this.path, JSON.stringify(this.rows))
  • 读取本地文件
    lib/alerts.js:10
    pkgVersion = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8')).version || ''
  • 读取本地文件
    lib/vault.js:14
    cachedVersion = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8')).version || '0.0.0'
  • 读取密钥环境变量
    lib/http.js:228
    const expectedToken = process.env.DSH_AUTH_TOKEN
  • 发起网络请求
    lib/http.js:366
    connectDispatchers.set(key, proxied ? new EnvHttpProxyAgent(options) : new Agent(options))
  • 发起网络请求
    lib/http.js:366
    connectDispatchers.set(key, proxied ? new EnvHttpProxyAgent(options) : new Agent(options))
  • 发起网络请求
    lib/http.js:431
    return (url, init = {}) => undiciFetch(url, { ...init, dispatcher: proxy })
  • 发起网络请求
    lib/http.js:435
    if (impl === nativeFetch) return (url, init = {}) => undiciFetch(url, { ...init, dispatcher })
  • 读取本地文件
    lib/routes/status.js:76
    try { pkgVersion = JSON.parse(readFileSync(new URL('../../package.json', import.meta.url), 'utf8')).version || '' } catch (err) { ignoreError("status.
  • 发起网络请求
    lib/routes/proxy.js:85
    const out = await subscriptions.request({
  • 读取本地文件
    lib/updater.js:37
    if (!existsSync(entry)) return undefined
  • 读取本地文件
    lib/updater.js:40
    if (existsSync(manifestPath)) {
  • 读取本地文件
    lib/updater.js:42
    const manifest = JSON.parse(readFileSync(manifestPath, 'utf8'))
  • 发起网络请求
    lib/updater.js:116
    const response = await fetch(`${registry.replace(/ $/, '')}/${encodeURIComponent(packageName)}/latest`, {
  • 读取本地文件
    lib/updater.js:130
    const value = JSON.parse(await readFile(manifestUrl, 'utf8'))
  • 读取本地文件
    lib/updater.js:152
    if (!existsSync(lockPath)) return undefined
  • 读取本地文件
    lib/updater.js:153
    const stat = statSync(lockPath)
  • 删除本地文件递归
    lib/updater.js:191
    rmSync(lockPath, { recursive: true, force: true })
  • 删除本地文件递归
    lib/updater.js:200
    rmSync(lockPath, { recursive: true, force: true })
  • 删除本地文件递归
    lib/updater.js:208
    rmSync(lockPath, { recursive: true, force: true })
  • 执行外部命令来自配置/变量
    lib/updater.js:227
    const child = spawn(process.execPath, [
  • 读取本地文件
    lib/accounts-config.js:17
    const content = readFileSync(p, 'utf8')
  • 写入本地文件
    lib/accounts-config.js:32
    mkdirSync(join(p, '..'), { recursive: true })
  • 写入本地文件
    lib/accounts-config.js:39
    writeFileSync(p, JSON.stringify(obj), 'utf8')
  • 发起网络请求
    lib/webhook-url.js:134
    return new Agent({
  • 读取本地文件
    lib/vault-snapshots.js:39
    const rows = JSON.parse(readFileSync(file, 'utf8'))
  • 写入本地文件
    lib/vault-snapshots.js:49
    mkdirSync(dir, { recursive: true, mode: 0o700 })
  • 写入本地文件
    lib/vault-snapshots.js:51
    writeFileSync(tmp, JSON.stringify(items), { mode: 0o600 })
  • 写入本地文件
    lib/vault-snapshots.js:52
    renameSync(tmp, file)
  • 写入本地文件
    lib/vault-snapshots.js:53
    try { chmodSync(file, 0o600) } catch (err) { ignoreError("vault-snapshots.js: best-effort", err) }
  • 读取本地文件
    lib/vault-snapshots.js:106
    try { bytes = Math.max(bytes, statSync(file).size) } catch (err) { ignoreError("vault-snapshots.js: file may not exist yet", err) }
  • 执行外部命令固定命令
    lib/import-auth.js:54
    const out = execFileSync('powershell.exe', ['-NoProfile', '-NonInteractive', '-Command', ps], {
  • 读取本地文件
    lib/import-auth.js:73
    const text = await readFile(path, 'utf8')
  • 读取密钥环境变量
    lib/import-auth.js:215
    } else if (process.env.CURSOR_ACCESS_TOKEN) {
  • 读取密钥环境变量
    lib/import-auth.js:243
    if (!detected.kiro && process.env.KIRO_API_KEY) {
  • 读取密钥环境变量
    lib/import-auth.js:308
    if (!detected.copilot && (process.env.GITHUB_COPILOT_TOKEN || process.env.GH_TOKEN)) {
  • 读取密钥环境变量
    lib/import-auth.js:312
    path: process.env.GITHUB_COPILOT_TOKEN ? 'GITHUB_COPILOT_TOKEN' : 'GH_TOKEN',
  • 读取密钥环境变量
    lib/import-auth.js:350
    let tok = process.env.GITHUB_COPILOT_TOKEN || process.env.GH_TOKEN || ''
  • 读取密钥环境变量
    lib/import-auth.js:373
    const token = process.env.CURSOR_ACCESS_TOKEN
  • 读取本地文件
    lib/vendors/copilot-cli.js:73
    if (!existsSync(filePath)) continue
  • 读取本地文件
    lib/vendors/copilot-cli.js:74
    const content = await readFile(filePath, 'utf8')
  • 读取本地文件
    lib/vendors/copilot-cli.js:145
    try { exists = existsSync(p) } catch (err) { ignoreError("copilot-cli.js: best-effort", err) }
  • 读取本地文件
    lib/vendors/copilot-cli.js:173
    if (existsSync(fullPath)) {
  • 读取本地文件
    lib/vendors/copilot-cli.js:176
    accessSync(fullPath, constants.X_OK)
  • 读取本地文件
    lib/vendors/claude-cli.js:19
    const text = await readFile(file, 'utf8')
  • 发起网络请求
    lib/client.panels.js:14
    fetch('/dsh-subscriptions/webhook/test', { method: 'POST', headers: { 'content-type': 'application/json' }, body: '{}' })
  • 发起网络请求
    lib/client.panels.js:34
    fetch('/dsh-subscriptions/vault/snapshots', { cache: 'no-store' })
  • 发起网络请求
    lib/client.panels.js:40
    const call = (url, body) => fetch(url, {
  • 发起网络请求
    lib/client.panels.js:88
    fetch('/dsh-subscriptions/config', { cache: 'no-store' })
  • 发起网络请求
    lib/client.panels.js:98
    const validate = (pack) => fetch('/dsh-subscriptions/provider-packs/validate', {
  • 发起网络请求
    lib/client.panels.js:112
    const cfg = await fetch('/dsh-subscriptions/config', { cache: 'no-store' }).then((res) => res.json())
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

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

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-credentials@deepseek-ai/dsh-host-webserver@deepseek-ai/dsh-llm@deepseek-ai/dsh-settings@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • OAuth订阅式服务商
  • 接入多家LLM服务
v0.7.642026-10-31
· [0.7.64] - 2026-10-30 · 修复 · GitHub #29 — 环境变量代理失效:设置 NODE_USE_ENV_PROXY=1 和 http(s)_proxy 后,fetchWithTimeout 仍直连主机,原因是连接调度器用的是裸 Agent(0.7.60),而改用 undici 自带的 fetch 后完全跳过了 Node 的环境变量代理处理(0.7.63)。在直连出口被地区封锁的主机上,Codex 设备登录能渲染出二维码,但 token 交换失败,报 403 unsupported_country_region_territory。现在只要环境变量约定生效,调度器就换成 EnvHttpProxyAgent,按 mode + 连接超时区分;否则仍用裸 Agent。 · 验证 · 回归测试启动本地 HTTP 代理,断言请求到达代理而非目标地址,条件是 NODE_USE_ENV_PROXY=1。 · npm test:1220 个测试;CI 覆盖率门禁通过。 --- Gitea 源:28421f08d6e295c387e409aafc4835775579ca3a
v0.7.632026-10-31
· [0.7.63] - 2026-10-30 · 修复 · Node 24 上 Codex 请求瞬间失败:/ping、/check 和 image_generate 在 Codex 下 1–2 毫秒就返回 fetch failed,而 grok 和 antigravity 正常。fetchWithTimeout 把 standalone undici 包创建的 dispatcher 交给 Node 全局 fetch,后者在建立 socket 前就以 UND_ERR_INVALID_ARG 拒绝。现在原生 fetch 改走 undici 自己的 fetch(它接受 dispatcher),而模块加载后被替换的 fetch——测试、opencode 会话头补丁——保持不动。 · 验证 · 本地复现:fetchWithTimeout(fetch, ' …) 在 9 毫秒内以 UND_ERR_INVALID_ARG 失败;修复后同一调用约 465 毫秒返回 401。 · npm test:1218 个测试;CI 覆盖率门禁通过。 --- Gitea 源:bfce468743065a7db0910c3cbe0306cb0c7bf500
v0.7.622026-10-31
· [0.7.62] - 2026-10-30 · 修复 · DSH 0.2.1-rc.4 上的设置保存:订阅设置页每次写入都返回 HTTP 400 Config field "antigravityClientSecret" is not volatile,原因是适配器把整份解析后的配置交给了宿主设置服务,而宿主会拒绝带配置档专属字段的更新。现在写入只发送可变字段;配置档专属字段一旦改动,会提前拒绝并明确提示「requires a profile edit and plugin reload」,不再抛宿主级错误,缓存的快照则从可编辑子集合并生成。 · 验证 · 在生产 Web 实例上实测(宿主 0.2.1-rc.4,插件 0.7.61):冷启动和「设置 → 订阅」渲染均无控制台报错,也没有重复注册插槽;所有面板都能加载,包括懒加载分块面板。 · npm test:1217 个测试;覆盖率门槛(分支 80%)通过。 --- Gitea 源:ec797a8644752f102ca1aa274b7e3785b288c0b1
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
📦 @goodandready/dsh-subscriptions DeepSeek Harness 个人 AI 订阅桥接、多账号池轮换与零泄漏 OAuth 插件 🇬🇧 English • 🇷🇺 Русский • 🇨🇳 中文说明 ⚡ 插件概览 dsh-subscriptions 将您现有的付费个人 AI 订阅无缝接入 DeepSeek Harness,作为第一类模型服务商。 无需为日常智能体任务支付昂贵的 API 按量计费。本插件支持标准 OAuth PKCE 鉴权、单服务商多账号池动态轮换(遭遇 429 限流时自动秒切可用账号)、前置配额平滑切换,并通过进程内 Cordis 服务 (ctx.subscriptions) 赋能 dsh-image-gen 与 dsh-grok-xsearch 等插件,实现 Token 零网络泄漏。
展开完整文档(README 剩余 1 节)
📦 @goodandready/dsh-subscriptions

DeepSeek Harness 个人 AI 订阅桥接、多账号池轮换与零泄漏 OAuth 插件

🇬🇧 English •
🇷🇺 Русский •
🇨🇳 中文说明

⚡ 插件概览

dsh-subscriptions 将您现有的付费个人 AI 订阅无缝接入 DeepSeek Harness,作为第一类模型服务商。

无需为日常智能体任务支付昂贵的 API 按量计费。本插件支持标准 OAuth PKCE 鉴权、单服务商多账号池动态轮换(遭遇 429 限流时自动秒切可用账号)、前置配额平滑切换,并通过进程内 Cordis 服务 (ctx.subscriptions) 赋能 dsh-image-gen 与 dsh-grok-xsearch 等插件,实现 Token 零网络泄漏。

graph LR
subgraph DSHCore [DeepSeek Harness 对话流]
Agent[🤖 智能体任务执行] --> Router{服务商路由器}
end

subgraph SubscriptionsCore [dsh-subscriptions 调度核心]
Router --> Pool{多账号负载池}
Pool -->|账号 1| Acc1[👤 主账号: 活跃中]
Pool -->|账号 2| Acc2[👤 副账号: 待命中]
Pool -->|账号 3| Acc3[👤 备用账号: 冷却中]
Acc1 -->|HTTP 429 / 配额耗尽| Rotate[智能配额与冷却轮换器]
Rotate -->|流量平滑切换| Acc2
end

subgraph VendorBridges [4 大服务商桥接适配]
Acc1 --> B1[ChatGPT / Codex 后端]
Acc1 --> B2[Claude Pro / Max 协议]
Acc1 --> B3[xAI / Grok 订阅]
Acc1 --> B4[Google Cloud Code Assist / Antigravity]
end

subgraph EcosystemBridge [Cordis 进程内共享: ctx.subscriptions]
Pool --> ImgGen[dsh-image-gen: 订阅零成本生图]
Pool --> XSearch[dsh-grok-xsearch: X 社交搜索]
end

style DSHCore fill:#1e1e2e,stroke:#89b4fa,stroke-width:2px,color:#cdd6f4
style SubscriptionsCore fill:#181825,stroke:#cba6f7,stroke-width:2px,color:#cdd6f4
style VendorBridges fill:#11111b,stroke:#a6e3a1,stroke-width:2px,color:#cdd6f4
style EcosystemBridge fill:#181825,stroke:#f38ba8,stroke-width:2px,color:#cdd6f4

✨ 核心功能

支持的 16 个内置订阅供应商

| 供应商 | 订阅级别 | 协议 |
| codex | ChatGPT Plus / Pro | 流式响应、工具调用、图像生成 |
| claude | Claude Pro / Max | 原生 Messages 协议、用量跟踪 |
| grok | xAI / X Premium | 实时推理、计费检查 |
| antigravity | Google Cloud Code Assist | 流式生成 |
| kimi | Moonshot Kimi | OAuth Device Flow 登录(auth.kimi.com)、OpenAI 兼容聊天 |
| glm | Z.ai GLM Coding Plan | GLM 编码端点(api.z.ai)、实时配额监控 |
| cursor | Cursor | Cursor 后端(api2.cursor.sh)、用量面板解析 |
| kiro | AWS Kiro | Kiro 桌面 OAuth(app.kiro.dev)、流式输出 |
| copilot | GitHub Copilot | GitHub Device Flow 登录、Copilot 聊天补全 |
| qwen | 阿里 Qwen(DashScope) | OpenAI 兼容端点、API Key 认证 |
| ernie | 百度 ERNIE(千帆) | OAuth2 令牌刷新(API Key + Secret Key) |
| spark | 讯飞星火 | OpenAI 兼容 HTTP API |
| jetbrains | JetBrains AI Assistant | JetBrains AI 中继(api.jetbrains.ai) |
| perplexity | Perplexity Pro | Sonar 模型目录(api.perplexity.ai) |
| replit | Replit Core | Replit AI API、connect-token 认证 |
| cody | Sourcegraph Cody Pro | Sourcegraph API、access-token 认证 |

多账号轮换与限流保护

* 每个供应商可挂多个账号(如 CODEX_OAUTH_1、CODEX_OAUTH_2)。
* 遇到 429/配额耗尽自动切换到下一个健康账号;支持按剩余量提前切换和动态冷却恢复。
* 轮换决策追踪与路由解释 (#517):实时同步记录账号选择、轮换切换、失败原因与级联回退的完整决策链路(无需事后推导),并在 WebUI 遥测与诊断报告中可视化展示。
* 动态模型目录与配额可用性 (#507):基于账号池计算模型综合可用性(单个账号隔离不影响具备可用账号的模型),展示上下文窗口、能力标签(视觉、工具、推理、编码、快速)及动态配额倒计时。

安全与无头登录

* OAuth 令牌绝不通过 HTTP API 返回,也不在 Web 界面渲染;仅存放于宿主加密凭据存储。
* 回环自动回调 (autoLoopback,v0.4.9):供应商重定向为回环地址(如 Codex :1455)时,插件自动启动临时本地服务器接收回调,无需手动粘贴链接。
* 设备码登录(Codex,v0.4.9):完全无浏览器的主机上,点击 Device login,在任意设备打开 https://auth.openai.com/codex/device 输入短码即可完成 PKCE 授权。

账号级代理(v0.4.9)

* 每个账号可配置独立代理(http://、https://、socks5://);令牌刷新、供应商检查、模型请求均走该代理。
* 账号卡片内的 Check proxy 按钮一键检测代理延迟。

本地 Ollama 网关与无缝回退(v0.4.17)

* 原生 provider (ollama):本地 Ollama 可达时(ollamaBaseUrl,默认 http://127.0.0.1:11434),自动出现在 DSH 原生模型选择器中(模型来自 /api/tags),无需密钥。
* 无缝配额回退 (ollamaFallback,默认开启):某供应商的所有账号耗尽或不可达且尚未输出任何内容时,对话自动切换到本地模型(ollamaFallbackModel 或 /api/tags 第一个模型),并记录到请求历史(kind: fallback)。
* 免费($0)应急通道:无网络、无配额也能用。

Effort、Verbosity 与 Fast Mode(v0.4.17)

* 推理力度 (Effort):Codex 模型从实时目录上报支持的力度等级,原生选择器校验后以 reasoning.effort 传入 /responses 协议;Grok 按自身目录过滤转发。
* 详略程度 (codexVerbosity):low/medium/high 以 text.verbosity 传给 Codex 推理模型;留空为协议默认。
* Fast Mode (codexFastMode):每次 Codex 请求携带 service_tier: priority(1.5x 速度计费档);启用时活动订阅芯片显示 ⚡。

按模型家族的冷却与模型过滤(v0.4.17)

* Reasoning 与 Standard 分离:推理模型(claude thinking、grok reasoning、全部 codex 模型)触发 429 时,只冷却该账号的 reasoning 家族——同账号的 standard 模型立即可用;旧版冷却仍按整账号生效。
* 隐藏过时模型 (hideDeprecatedModels):从原生选择器中过滤 test/preview/dev/alpha/beta/legacy 模型 id(同时作用于实时目录与静态回退)。

隐私模式与诊断报告(v0.4.9)

* privacyMask:一个开关即可在整个界面隐藏个人数据(邮箱显示为 jn@example.com),服务端遮蔽,适合屏幕共享。
匿名诊断报告:设置卡片内一键生成(插件/运行时版本、系统、各供应商健康状态、HTTP 状态聚合、最近错误与耗时、非敏感配置)并自动复制到剪贴板;令牌、邮箱、凭据名与代理地址严格排除。
同区块提供问题追踪器链接,便于提交 issue。

隔离管理、动态额度重置倒计时与应用内弹窗提醒 (v0.6.59)

手动隔离管理(暂停与预热探测):支持在设置面板的账户卡片中一键暂停隔离活跃账户(POST /dsh-subscriptions/quarantine/park),或立即触发真实上游预热微探测(probeWarmup)并在验证成功后即时解除隔离(POST /dsh-subscriptions/quarantine/probe)。
* 动态额度重置倒计时:在顶部会话栏 SubsPill 和账户卡片中秒级动态更新,精准展示滚动配额窗口(five_hour、seven_day、primary_window)的剩余解锁时间。
* 应用内即时弹窗提醒(Toast):当账户进入隔离、健康恢复解除隔离或额度达到预警线时,在聊天界面弹出轻量级浮动提醒。通过 enableToasts: true 控制。
enableQueue: true # v0.6.62: 账户并发请求排队与限流 accountMaxConcurrency: 2 # v0.6.62: 单账户最大并行活跃流 maxQueueSize: 20 # v0.6.62: 队列最大等待深度 queueTimeoutMs: 30000 # v0.6.62: 队列最大等待超时时间(毫秒)
* 自动化 Webhook 告警集成:通过 notifyQuarantineEntered 与 notifyQuarantineReleased 自动向外部通知系统派发隔离生命周期事件。

🩺 服务商鉴权诊断、网络延迟 RTT 指标、动态模型同步与客户端轻量化 (v0.6.72)

* 服务商错误诊断系统 (#543): 智能分析与解读服务商连接和鉴权失败原因(Cloudflare 403 / 地区限制、令牌过期、会话失效、模型权限不足、用量配额耗尽),并在卡片中直接展示修复建议。
* 延迟 RTT 指标与快速 Ping 测试 (#542): 实时测量至服务商 API 的网络往返时间,支持色彩标记状态徽章(🟢 <250ms, 🟡 <750ms, 🔴 >750ms)及独立 POST /dsh-subscriptions/ping 接口。
* 动态模型列表同步 (#541): 账户卡片一键「同步模型」按钮,直接从服务商 /v1/models 接口获取最新及账号专享模型,无需等待插件版本更新。
* 客户端包体积优化 (#540): 将 lib/client.js 体积从 217.3 KiB 缩减至 199 KiB 以下(距离 256 KiB DSH Store 门禁阈值预留超 57 KiB 安全冗余空间)。

🛡️ 弹性容灾、故障诊断与跨服务商回退 (v0.6.71)

* 跨服务商级联故障转移与优先级排序 (#536): 支持自定义跨服务商回退顺序,可在 WebUI 中通过 ▲/▼ 交互调整优先级。
* 一键链路测试与延迟检测 (#536): 在账户列表或状态弹窗中一键发起探活并显示往返延迟。
* 冷却倒计时与就绪通知 (#536): 实时展示受限账户恢复倒计时,解除冷却时自动弹出就绪通知。
* 主动 OAuth 令牌心跳 (#536): 提前预刷即将过期的访问令牌,避免用户请求时产生额外等待。
* 最近错误环形日志审查 (#536): 内存保存最近 20 条已脱敏的运行错误,支持在 Diagnostics 中查看与清空。

Antigravity 分档思考模型、工具回放哨兵与流式自愈 (v0.6.69)

* Gemini 3 工具回放哨兵 (#534):在重建的工具调用中注入 thoughtSignature: 'skip_thought_signature_validator',彻底解决多轮工具调用历史重放时 Gemini 3 的校验失败问题。
* 分档 Flash 模型与思考档位 (#534):将 gemini-3.8-flash-tiered 与 3.7 自动解析展开为 High/Medium/Low 档位选择,并在调用时自动组装 thinkingConfig.thinkingLevel。
* 流式空响应自愈与账号轮换 (#534):引入 30 秒 SSE 空闲超时保护与空响应检测,在未输出前自动重试一次,失败时通过 EMPTY_RESPONSE / TIMEOUT 自动轮换至下一个可用账号。

xAI Grok RFC 8628 设备码授权流支持 (v0.6.68)

* RFC 8628 设备码授权流 (GH #17, #532):为 xAI Grok 新增原生设备码登录授权支持。彻底解决 xAI 针对 CLI 客户端标识返回 Grok Build 验证码页面且不触发回环重定向回调导致的死锁问题。直接在槽位卡片展示用户授权码,并自动在后台轮询兑换会话令牌。

Claude 账户级计费归因隔离与动态轮次索引 (v0.6.67)

* 按账户隔离 cc_turn_index 与 cch (#530):将 Claude Code 计费归因状态(会话哈希 cch 与递增轮次 cc_turn_index)按 accountId 隔离在有界模块级映射表中,彻底消除 globalThis 跨订阅账户状态混用问题。
* 动态计算 cc_prompt_index 与禁用开关:根据多轮对话消息历史自动计算从 0 开始的 cc_prompt_index,并支持通过环境变量 CLAUDE_CODE_ATTRIBUTION_HEADER=0 或 disableBillingHeader: true 禁用归因头注入。

Antigravity 客户端密钥架构与无感 CLI 令牌刷新 (v0.6.60)

* 配置架构密钥字段 (antigravityClientSecret):支持用户在设置中自定义配置 Google Cloud OAuth 客户端密钥(Client Secret),公共接口自动脱敏掩码 (••••••),彻底解决机密型 OAuth 客户端刷新令牌被拒的问题。
* CLI 令牌零配置平滑刷新:内置官方 Gemini / Antigravity CLI 客户端的公共应用凭据 (Google Gemini CLI Client ID / Google Gemini CLI Client Secret),使通过 📥 从 CLI 导入 的会话能够持久无限刷新,不再出现 1 小时后失效问题。
* Windows 凭据管理器自动发现:原生支持在 win32 系统下自动检测 Windows 凭据管理器中的 gemini:antigravity 目标,直接完成 CLI 会话导入。
* 清晰明确的错误指引:在缺少密钥或上游凭据异常时抛出指引性错误,替代原始的 HTTP 400 提示。

HTTP API 路由(v0.4.9)

| 路由 | 方法 | 用途 |
| /dsh-subscriptions/diagnostics | GET | 匿名诊断报告(无密钥、无令牌、无代理地址) |
| /dsh-subscriptions/proxy-check | POST | 检测槽位代理到供应商基础地址的延迟 |
| /dsh-subscriptions/oauth/device/start | POST | 发起 Codex 设备码登录(返回用户码与验证地址) |
| /dsh-subscriptions/oauth/device/poll | POST | 轮询设备码授权状态 |
| /dsh-subscriptions/quarantine/park | POST | 将指定账户临时暂停隔离(支持 durationMs 与 reason) |
| /dsh-subscriptions/quarantine/probe | POST | 立即执行健康预热探测或提前解除账户隔离 |
| /dsh-subscriptions/alerts | GET | 获取近期应用内告警与通知列表 |

📦 安装指南

dsh plugin --profile web add @goodandready/dsh-subscriptions

自定义供应商与主机信任

- customVendors.authUrl、tokenUrl 和 baseUrl 必须使用 https://。明文 http:// 仅允许用于回环主机(localhost、127.0.0.1、::1)。
- Grok baseUrl 覆盖只能指向 api.x.ai、grok.com / .grok.com 或回环主机;其他主机会以 GROK_UNTRUSTED_HOST 拒绝,避免 bearer 令牌离开可信的 xAI 基础设施。
- Antigravity CLI 导入必须配置 antigravityClientSecret;内置默认值已移除。
- copilotCliPath 必须指向 copilot、github-copilot-cli 或 copilot-cli 可执行文件;自定义包装器请重命名。
- 凭据备份使用 /dsh-subscriptions/vault/export 和 /vault/import;旧路由 /export、/import、/export-backup、/import-backup 已移除。
- 错误缓冲区和诊断报告会在存储或返回前脱敏 bearer 令牌、API 密钥、JWT 和 key=value 凭据。

🧠 Claude 自适应思考与推理深度控制 (v0.6.7 新增)

支持 Anthropic 自适应思考 (thinking: { type: "adaptive" }) 及推理深度调节 (output_config: { effort }):
- 模型支持: 针对 Opus 4.6+、Opus 4.7+、Opus 5 (low, medium, high, xhigh, max) 及 Sonnet 4.6+、Sonnet 5 (low, medium, high) 自动提供对应推理级别。
- 安全降级: 不支持自适应思考的模型(如 Haiku、Fable、4.5 及更早版本)保持原始请求,防止出现 400 Bad Request 错误。
- 动态目录: 模型列表自动暴露 reasoning.efforts,供 DeepSeek Harness 界面选择。

🌐 完整双语支持 (EN / ZH) 与单账户健康探活 (v0.6.8 新增)

- 原生双语支持: 内置 UI 字典全面提供英语 (en) 与简体中文 (zh) 翻译,所有服务商获取令牌指引均具备中英双语版。
- 解耦外部翻译: 俄语等其他语种由独立语言包插件(如 dsh-russian-lang)在运行时翻译,插件源码保持纯净零硬编码。
- 单账户实时探活与延迟测量: 槽位中的“检测”按钮实时测量对应订阅账户的双向响应延迟 (latencyMs) 与健康状态。

🚀 一键插件自更新与稳定性强化 (v0.6.9 新增)

- 宿主端一键更新: 挂载于 /dsh-subscriptions/update 的就地更新机制,自动对比 npm registry 最新版本并通过宿主 DSH CLI 执行单飞安装 (dsh plugin add)。
- 安全与来源防护: 更新接口严格校验环回地址(支持 IPv4 127.0.0.1、IPv6 ::1、localhost)、x-dsh-plugin-update 请求头及同源策略,阻断未授权跨站调用。
- 状态栏徽章与更新按钮: 设置面板顶部状态栏显示当前插件版本,有新版本时提示告警徽章并提供一键更新按钮与重启提示。
- 网络超时熔断: 配额检测与冒烟测试增加 15 秒超时信号保护 (AbortSignal.timeout(15_000)),防止外部服务商接口故障导致请求挂起。
- 参数容错与逻辑去重: 状态接口兼容 provider || vendor 与 index || accountIndex 参数别名,并消除 lib/accounts.js 中的重复配额通知循环。

🛡️ Token 用量规范化与会话投影修复 (v0.6.12 新增)

- 会话投影崩溃修复 (GitHub #4):修复了使用 ChatGPT Codex 及其他流式模型时,首次回复后会话损坏、刷新页面报错 received NaN, expected number on uncachedInputTokens and outputTokens 且无法加载的问题。
- 全格式通用 TokenUsage 转换:在所有流式传输通道(codexResponsesStream、openaiChatStream、anthropicStream、googleStream)中引入统一的 toTokenUsage() 转换逻辑,将各服务商的原始用量数据标准化为 DSH 规范的 TokenUsage 接口(inputTokens、outputTokens、cacheReadTokens、cacheWriteTokens、reasoningTokens、totalTokens)。
- 严格非负整数保底与独立缓存计算:对所有 token 计数实施严格的非负整数约束(保底为 0,杜绝 NaN 与 undefined)。针对将缓存合并计入总 prompt 的供应商自动执行拆分,确保输入 token 数的准确性。
- 适配器层纵深防御:在 SubscriptionAdapter 中新增用量数据过滤与净化机制,从根源上阻止异常用量流入 DSH 会话持久化与状态恢复流程。

🔒 OAuth Client ID 校验保护与控制台地址更新 (v0.6.11 新增)

- Google OAuth Client ID 校验保护 (GitHub #2):uildAuthorizeUrl 和 ntigravity.authorizeUrl 严格要求非空 clientId。未配置时服务端返回明确的 HTTP 400 (missing_client_id),前端界面提示用户在插件设置中填写 ntigravityClientId 或使用“📥 从 CLI 导入”,避免浏览器跳转至 Google OAuth 400 报错页面。
- 配置架构新增密钥项:在插件 Config 架构中新增 ntigravityClientSecret,方便用户在设置中配置客户端密钥,并在公共接口中自动脱敏脱密。
- 智谱 GLM 控制台地址迁移 (GitHub #3):将智谱 GLM 授权与 API Key 获取链接更新为最新控制台有效路由 (https://bigmodel.cn/usercenter/proj-mgmt/apikeys),彻底解决因服务商控制台路由调整导致的 404 错误。

🛡️ 稳定性与代码质量强化 (v0.6.10 新增)

- 结构化异常降级: 全面移除运行时空 catch 块,统一采用带诊断日志的 bestEffort 安全兜底机制。
- 原生上下文日志: 所有日志统一接入 Cordis 规范子系统 ctx.logger('subscriptions')。
- 外部网络超时保护: 为所有模型商 API 网络调用(listModels、fetchFor、quotaFetch、jsonTokenRequest)建立 fetchWithTimeout 与 AbortSignal.timeout 超时熔断保护。
- 设计系统主题对齐: 将 client.js 中的静态样式硬编码替换为 DeepSeek Harness 原生 CSS 主题令牌(--dsw-alias-、color-mix),彻底消除独立的 rgba 颜色。
- 客户端依赖注入显式化: 在 package.json 清单中显式声明前端所需平台注入项(@deepseek-ai/dsh-client-locale 与 @deepseek-ai/dsh-client-ui-slots)。
- 公开仓库卫生规范: 将内部研发指令与计划文件移出 Git 跟踪并加入 .gitignore,确保公开版本干净无私有残余。

🔌 HTTP API

插件在 DSH Web 服务器上注册以下精确路由。除非另有说明,仅接受同源或 loopback 请求;写入请求必须携带与 Host 匹配的 Origin 或 Referer(#782)。除特别说明外返回 JSON。

| 方法 | 路径 | 用途 |
| GET | /dsh-subscriptions/usage?type=accounts\|calls&format=json\|csv | 面向外部配额插件的额度快照与调用账本(#687)。 |
| GET | /dsh-subscriptions/instructions | 动态供应商接入说明(#540)。 |
| GET | /dsh-subscriptions/metrics | Prometheus 文本指标(#744);仅 loopback 或同源。 |
| GET | /dsh-subscriptions/health | 供监控使用的深度健康报告(#745);公开 GET。 |
| GET | /dsh-subscriptions/models | 当前订阅的增强模型目录。 |
| POST | /dsh-subscriptions/heartbeat/run | 触发一次额度/健康刷新;返回 {ok, refreshed}。 |
| GET | /dsh-subscriptions/discover-local | 发现可导入的本地 CLI 会话。 |
| GET | /dsh-subscriptions/subscriptions | 仅限 localhost 的 HTML 订阅概览。 |
| GET | /dsh-subscriptions/session-reasoning?sessionId=…&provider=…&model=… | 读取会话的 reasoning effort 与模型能力。 |
| POST | /dsh-subscriptions/session-reasoning | 设置 {sessionId, provider, model, effort, budgetTokens}。 |
| DELETE | /dsh-subscriptions/session-reasoning?sessionId=… | 清除会话 reasoning 覆盖。 |

/discover-local 与 /subscriptions 保留为受支持的 API/UI 接口(决策记录于 docs/design/DESIGN.md)。

🌐 本地化

插件源语言仅为英语。俄语及其他翻译由独立的语言插件(如俄化插件)在运行时对注册的本地化键进行翻译,包本身不内置翻译(Changed in 0.6.1)。

📄 开源协议

MIT © GooDAnDReaDY
预览分享卡片长什么样 ↓GooDAnDReaDY/dsh-subscriptions
分享 · DeepSeek Harness Hub
GooDAnDReaDY/dsh-subscriptions

DeepSeek Harness 的 OAuth 订阅式 LLM 服务商:ChatGPT Codex、Claude、Grok、Antigravity、Kimi、GLM、Cursor、Kiro、Copilot、Qwen、ERNIE、Spark…

这是你的仓库?认领条目

回到顶部