Repository navigation
Releases: BaronCyrus/dsh-grok-subscription
Release list
v2.0.9 — 更新插件后不再让其他插件装不上
修复
- 修复用「更新插件」升级后 24 小时内,在同一个 profile 里安装其他插件会失败(
ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION)的问题。按钮之前用pnpm add --config.minimumReleaseAge=0安装新版本,等于对这一次安装关掉了 DSH 自带 pnpm 的发布冷却检查,新版本因此没有被登记为例外。之后 pnpm 照常执行策略,lockfile 里这个“太新”的版本会让这个 profile 里的任何插件安装都被拒绝,直到它发布满 24 小时。 - 按钮现在遵守 profile 自己的 pnpm 策略:默认情况下照常立即更新,由 pnpm 自动把这个版本记进
minimumReleaseAgeExclude;如果你给 pnpm 配了更严格的策略,设置页会提示什么时候可以更新,而不是报失败。 - README 和使用指南里的手动安装命令也去掉了
--config.minimumReleaseAge=0。
从 2.0.8 或更早版本升级
旧版设置页里的「更新插件」仍会跳过冷却检查。请在「设置 → 插件」填写 dsh-grok-subscription@2.0.9 安装,不要点旧按钮。如果已经被卡住,在插件页带版本号重新安装一次当前版本即可恢复,或者等那个版本发布满 24 小时后自动恢复。
验证
- 173 项测试、构建和打包通过。
- 在 DSH 0.2.1 上按宿主的实际方式(自带 pnpm 11.28.5)实测:插件能找到 DSH 自带的 pnpm;默认策略下更新正常完成,之后安装其他插件不受影响;冷却期内的版本不会被安装,设置页给出的可更新时间与实际一致。
安装
在 DSH 的「设置 → 插件」安装 dsh-grok-subscription@2.0.9,然后完全退出并重启 DSH。
模型路由、图片输入、额度和依赖均无变化。此版本由 GitHub Actions 通过 npm trusted publishing 发布,带有 provenance。
v2.0.8 — 登录连不上 auth.x.ai 时给出原因
修复
- 修复 DSH 连不上
auth.x.ai时,登录只报Grok subscription RPC "login/cli" timed out after 20000ms、看不出原因的问题。登录开始时要依次做 OIDC discovery 和设备码请求,两步各有 20 秒超时,外层 RPC 上限也是 20 秒;连接被静默丢弃时,每一步都要约 10 秒才放弃,RPC 超时总是先到。Fixes #2。 - 两个请求现在共用一个 15 秒的总时限,赶在 RPC 上限之前结束。连不上时直接报
Cannot reach auth.x.ai (…),括号里写明是连接超时、连接被拒、DNS 失败还是 TLS 证书问题,不带出 IP 或代理地址。discovery 连不上时不再对同一台主机重试。 - 设置页在这个错误下面给出代理设置说明:DSH 不读取 macOS / Windows 的系统代理(例如 Clash、v2rayN 的“系统代理”开关),浏览器能打开 x.ai 不代表 DSH 也能。两份使用指南新增了对应的故障排查条目。
遇到这个报错时
在 ~/.dsh/.env(Windows 为 %USERPROFILE%\.dsh\.env)写入:
https_proxy=http://127.0.0.1:<端口>
端口填代理软件的 HTTP 或 mixed 端口,socks5:// 不支持。保存后完全退出并重启 DSH,或者改用代理软件的 TUN 模式。
验证
- 168 项测试、构建和打包通过。
- 不走代理直连实测:10.5 秒返回
Cannot reach auth.x.ai (connection timed out),此前为 20 秒的 RPC 超时;走代理时 1.2 秒拿到登录链接。
安装
在 DSH 的「设置 → 插件」安装 dsh-grok-subscription@2.0.8,然后完全退出并重启 DSH。
模型路由、图片输入、额度和依赖均无变化。此版本由 GitHub Actions 通过 npm trusted publishing 发布,带有 provenance。
v2.0.7 — 插件显示名支持中英文
更新
- 插件列表显示名改为英文
Grok Subscription、简体中文Grok 订阅,不再直接显示技术包名。 - 按 DSH 原生元数据约定,新增并导出包级
locale/en.json、locale/zh-CN.json,包含meta.title和本地化介绍。 - npm 安装名仍为
dsh-grok-subscription,原有图标、登录、模型路由、图片输入、额度及依赖均保持不变。
验证
- 161 项测试、构建和打包通过。
- 使用已安装 DSH 的真实元数据读取器验证发布包,中英文显示名和图标均正确读取。
安装
在 DSH 的「设置 → 插件」安装 dsh-grok-subscription@2.0.7,然后完全退出并重启 DSH。
v2.0.6 — 修复插件列表缺少图标
修复
- 为已安装插件卡片补充图标声明,沿用现有彗星领航员吉祥物。
- 新图标为 512×512 透明背景、无损 WebP,192,186 字节(约 188 KiB),低于 DSH 的 256 KiB 上限;README 原始 PNG 保持不变。
- 增加图标声明、打包、文件格式和大小限制的回归检查。
- 不改变登录、模型路由、图片输入、额度或依赖。
验证
- 160 项测试、构建和打包通过。
- 使用当前已安装 DSH 的真实元数据读取器验证发布包,图标被正确读取为 WebP data URL。
更新
在 DSH 的「设置 → 插件」安装 dsh-grok-subscription@2.0.6,然后完全退出并重启 DSH。
v2.0.5 — 修复对话 HTTP 426
没有安装 grok 命令时,每条对话都会被订阅代理以 HTTP 426 拒绝:插件在请求里声明了 x-grok-client-version: 1.0.5,而生成接口现在要求 1.0.13 或更高。设置页、模型列表和额度卡片不受这个限制,所以看起来一切正常,一发消息就失败。
此版本在没有够新的 CLI 正式版本时改发 99.0.0(2026-10-01 对线上代理实测可通过,且没有上限)。过旧的 ~/.grok/version.json 不会再把请求头拉低。仍可用启动环境里的 DSH_GROK_CLIENT_VERSION 自己指定,不要写进 ~/.dsh/.env。
更新后请完全退出并重启桌面应用。Fixes #1。
此版本由 GitHub Actions 通过 npm trusted publishing 发布,带有 provenance。
v2.0.4 — 登录不再依赖 grok CLI
登录和续期不再调用 grok 命令。设置页向 auth.x.ai 申请设备码,授权后写入 ~/.grok/auth.json;临近过期时用其中的 refresh token 续期。已有的会话文件仍可通过「读取已保存的会话」加载。
此版本由 GitHub Actions 通过 npm trusted publishing 发布,带有 provenance。
v2.0.3 — 上下文按官方文档
grok-4.7、grok-4.6、grok-4.5 的上下文改回官方文档的 500k。grok-4.7-build-fast 是同一模型的快速版,同样 500k。
订阅目录 models-v2 仍返回 context_window: 256000。那是文档里 grok-build-0.1 的窗口,不是这几个模型的。表里有的模型 id 以文档为准;表里没有的仍用目录值。
v2.0.2 — 省略的 0% 用量按剩余 100% 显示
新的一周刚开始时,账单接口会把 0% 的 creditUsagePercent 省掉。2.0.1 把这种情况显示成「没有周额度」。2.0.2 在窗口完整、并且包住当前时间时,把它读成已用 0%、剩余 100%。
规则
- 周期类型是周或月,起止都能解析,窗口包住现在,而且响应里和产品明细里都没有百分比 → 已用 0% / 剩余 100%,并标明这是零值省略。
- 字段一旦回来(非 0),仍以线上数字为准。这次发布前同一账号已经重新带上
creditUsagePercent。 - 窗口对不上现在、只有预付余额或按量上限、或者产品明细里已经有百分比 → 继续显示不可用,不编造数字。
- 显式的
0同样显示为剩余 100%,但不会标成「省略」。
输入框徽章在读数成功时会出现,所以这个 100% 也会出现在输入框旁边。
上下文 256
不是插件把窗口改小了。models-v2 现在对 grok-4.7、grok-4.7-build-fast、grok-4.6、grok-4.5 都返回 context_window: 256000。插件一直优先用这个字段;以前显示 500,是因为字段缺失时才回落到 500000。静态回落值改成了 256000,避免目录拉空时还宣传代理已经不再给的窗口。目录如果以后再给 500000,仍然以目录为准。
v2.0.1 — 用量卡片:说明上游形状,而不是报字段缺失
修掉「用量」卡片对一个上游不再返回百分比的账号吐解析器错误的文案问题。
现象
不可用: Missing creditUsagePercent (keys: config)
根因
自 2026-09-28T16:46Z 那一周周期切换起,GET /v1/billing?format=credits 对这个账号返回的 config 变成:
currentPeriod.{type,start,end}
onDemandCap.val / onDemandUsed.val
isUnifiedBillingUser : true
prepaidBalance.val
topUpMethod
billingPeriodStart / billingPeriodEnd
——没有 creditUsagePercent、没有 productUsage、也没有可推导的 used/total。而插件的所有读取代码自 1.0.20 起一行未改(2.0.0 只删了适配器),所以卡片只是按设计失败即关闭,把「上游换了个形状」写成了「字段缺失」,看起来像插件坏了。
在第二台机器、同一账号、同一构建上复现:只有时间变了,请求头一模一样。
修复
- 不可用读数现在带
code(unified-billing/missing-percent)和本周期边界;面板对已知 code 显示本地化说明,原始诊断以小字保留在下面;未命名的失败仍然显示自己的 reason。 - 没有百分比也显示周期窗口:起止时间来自同一个响应,所以卡片现在会打印
本期窗口: 2026/09/29 00:46:29 → 2026/10/06 00:46:29。重置时间不会再因为形状变化而丢失。 - 依然不编造数字:预付余额 0、按量上限 0 都不是百分比,所以不显示仪表盘、输入框徽章也保持隐藏——
parseBillingCredits用抓到的真实响应体做了断言锁住这一点。
适配器、路由、会话、RPC 接口都没有变化;sanitizeUsage 只是把这两个诊断字段透传出去。
说明
这不是 2.0.0 引入的问题。如果你的账号仍返回 creditUsagePercent(例如周期内已产生用量),卡片会照旧显示百分比仪表盘——这条路径没有改动。
v2.0.0 — 只保留宿主 pi-ai 一条适配器路径
插件不再自带适配器:grok-build 路由现在始终由宿主自带的 pi-ai 适配器服务。
删掉了什么
所有只为内置适配器存在的东西:请求构造、加密推理信封、prompt cache 与用量映射、图片收集(src/adapter.js 从 1081 行降到 467 行),同步注册的 duck 适配器,createGrokBuildAdapterSync / createDuckHostAdapter,1.2.0 加的「先释放再重注册」升级逻辑,以及 DSH_GROK_ADAPTER=fallback 开关。apply 仍然立即返回、由延迟任务构建适配器,但只注册一次。
为什么可以删
任何 DSH 安装都带着这个适配器:
@deepseek-ai/dsh → dsh-base → @deepseek-ai/dsh-llm-pi-ai → @earendil-works/pi-ai
dsh-base 的 bundle patch 里,llm-pi-ai 那一行无条件挂载(没有 disabled 门控)
已在 npm registry 上核对 dsh-base 的 0.1.5-rc.2、0.1.7-rc.2、0.2.0-rc.1,声明的整个 peer 区间都带它。
缺失时的行为:不注册任何路由,设置页「运行通路」显示不可用(两种语言都新增了这个状态)。不再编造替代适配器——半可用的替代品会把真正的问题藏到更隐蔽的症状后面,DUPLICATE_ADAPTER 那个缺陷就是这么活过七个版本的。
两个如实说明的行为变化
- token 被拒时不再中途续期并重试一次。 那个重试属于内置适配器;现在的续期是主动的——在记录的到期时间之前通过官方 CLI 续期。服务端已经撤销的会话会直接报认证错误,直到你重新登录。session 服务保留
refreshToken()(有测试,也是将来接宿主钩子的自然接缝)。 - 设置页从两种状态变成三种:
启动中、官方 pi-ai、不可用。原来的「内置回退」状态不可能再出现。
请求构造没有变化:固定的 grok:<sessionId> 缓存键和强制注入的 reasoning.encrypted_content 仍然由 withGrokRequestSemantics 写入,图片通路仍然归宿主。缓存行为、额度、登录、目录、RPC 接口都没动。
文档
按要求改成桌面版主线:README 与两份指南都以 设置 → 插件(填包名 → 重启应用)为主,去掉 --profile web、npx 和 Headless 的内容,并说明插件对宿主 pi-ai 的依赖,同时保留桌面 profile 的终端兜底命令。
测试
153 个测试通过。删掉了只针对已删除适配器的文件(stream-history、stream-toolcall、usage-cache、image-input)以及 session-renewal 里 5 个由 duck 驱动的 401 测试;保留所有仍然描述实际行为的断言。新增 tests/adapter-registration.test.mjs:每次 apply 只注册一次、宿主不可用时什么都不注册、注册被拒绝时报错而不是留下死路由。
验证
在真实的 0.2.0-rc.1 桌面运行时 + 真实订阅上验证:路由由 PiAiAdapter 服务,diagnostics 为 pi-ai / hostPeersResolved: true;用宿主自己的持久消息形态驱动的三轮对话依次回答 stored → 42 → 84,每轮都带 replay state;工具轮返回 finish: tool-calls 与 get_weather {"city":"Paris"};purpose: 'compaction' 正常完成。
本次改动:+421 / −2707 行,其中 lib/index.js 减掉 689 行。