@mars-sea/dsh-commandcode-provider 0.14.4 → 0.15.0

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.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,72 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [0.15.0] - 2026-10-21
8
+
9
+ ### Added
10
+
11
+ - **设置页新增「服务状态」行**(「集成与显示」分组;分组折叠时标题上也带状态徽标):读取官方状态页(`status.commandcode.ai`,Upptime 部署)公开的 `history/summary.json`(状态、7/30 天可用率、近 7 天平均响应)与 `history/command-code.yml`(官方数据发布时间),并新增宿主侧 `commandcode/probe` 实时探测——对当前配置的 API 地址做一次 5 秒超时、不带密钥的 GET,不计入额度。界面分「官方」「本机」两行,左侧固定标签、各带状态点:官方行为「服务正常 · 可用率 7 天 100% / 30 天 99.98% · 平均响应 N ms · X 小时前更新」(可用率去掉多余的 0,滞后说明改为更新时间的悬停提示,不再常驻一行);本机行为「连通正常 · N ms」/「连接异常(HTTP N)」/「连接超时」/「无法连接」。行标题旁不再重复状态徽标;分组头徽标综合两者——本机探测失败时优先显示「本机无法连接/连接超时/连接异常」(警告色),否则显示官方状态(`ServiceStatusView.badge`、`compactUptime`)。另有「打开状态页」链接、`localStorage` 5 分钟缓存;获取失败保留上次成功结果并标注「上次结果」,无缓存显示「状态未知」,全程不抛异常、不写配置、不阻塞保存。颜色复用框架 `StateDot`(done / warning / error / idle),不新增颜色令牌。**语义修正**:官方 `lastUpdated` 是「最后发布时间」而非「最后探测时间」——Upptime 只在状态变化或每日 `response-time` 工作流强制提交时写盘,GitHub 还会把 5 分钟 cron 节流到数小时一次,因此文案由「最后检测」改为「官方数据更新」,实时性交给宿主探测。**已知边界**:官方只探测 `https://api.commandcode.ai` 根路径 200;本机探测只证明该宿主到网关可达,不代表推理链路可用;最近事件来自 GitHub Issues,本行不展示,仍以状态页为准。用例:`tests/service-status.test.ts` 与 `tests/service-probe.test.ts`(源回退、缓存 TTL、滞后阈值、四种探测结果、线缆编解码)。
12
+
13
+ ### Changed
14
+
15
+ - **同步 Command Code CLI `1.86.1` → `1.86.3`(纯请求头同步)。** 两个补丁在 10-21 凌晨发布(`1.86.2`T01:42Z、`1.86.3`T02:42Z,北京时间 09:42、10:42),**官方变更日志页面仍停在 `1.84.0`,`1.85.0`–`1.86.3` 全部没有条目**,结论来自产物级静态比对:模型注册表、efforts、订阅表与 ZDR 例外集逐项相同(审计 `cliDiff` 四类全空),实时目录仍是默认视图 96 / `?view=client` 104、`catalogVersion` 仍为 `2a2c334e…`;端点集合(27 个)、自定义请求头(13 个)、`/alpha/generate` 调用点、`promptCache` 与 `reasoning_effort` 字面量逐窗口一致。新增内容只属 CLI 自身:`distrustCompromisedRoots()`(拒绝一批被入侵的证书,对应 Desktop 0.1.57 的安全条目)与实验性的 taste/learn 界面,插件不经过这些路径。因此 `COMMAND_CODE_CLI_VERSION` 只随请求头更新,快照与运行时行为均不变。**证据边界**:公开 GET 采集 14 个源全部 HTTP 200;审计 `incomplete` 的 4 条 error 仍是 MiniMax M3.1 Flash 与 Ornith 四个 id 缺定价映射别名(目录侧单源,非抓取失败,与上一轮同因);未做真实账号登录、付费生成与浏览器渲染。
16
+
17
+ - **设置页统一风格(第一阶段)**:页标题 18px、分组标题加粗到 600;模型选择器从 36px 胶囊改为与输入框一致的 32px/8px 圆角描边框;超时、重试、上下文长度、输出上限的输入框带单位后缀(秒/次/tokens),标签去掉「(秒)」;「重置」改为行尾图标按钮并为未覆盖的行保留空位,控件右缘对齐;页面内散落的按钮样式(`cc-linkButton`、`cc-reset`、未定义的 `cc-btn`)换成宿主 `Button` 原语(添加账户面板里的授权链接留到第三阶段);账户区的失败与待重试信息、只读提示、高级设置的未填好提示统一为带图标的提示条;按模型覆盖的移除按钮与授权链接改用线性 SVG 图标,去掉 `×`、`↗` 字符。`tests/settings.test.ts` 的单位护栏改为断言后缀文案为秒(语义不变)。**验证边界**:类型检查、构建与全量 1079 条测试通过;未在真实宿主中渲染截图。
18
+
19
+ - **删除设置页页头「全部展开/全部收起」按钮**(用户要求);各分组仍可单独展开收起,默认只展开账户,展开状态照常按浏览器本地记住。`allExpanded`/`setAllGroups` 与 `expandAll`/`collapseAll` 文案键随之删除;决策记录第十章第4条补记此调整。
20
+
21
+ - **添加账户面板改为设计稿的分段切换**:「网页登录/粘贴密钥」分段切换在上,备注名输入框在中(粘贴模式下多一个密钥框,带显示/隐藏),右下角「取消」+「开始登录」(粘贴模式为「添加」,未填密钥时禁用),回车提交;开通进行中只显示「取消开通」,命名失败显示「取消/接受已有名称/重试保存名称」;从粘贴模式切回网页登录时清空已填密钥。开通控制器的调用参数不变。新增文案键 `accountAddStart`(开始登录)、`accountAddMethod`(添加方式);按钮状态判定抽为导出纯函数 `addAccountPanelView`,`tests/section.test.ts` 新增 6 条用例覆盖空闲、粘贴待填、只读、进行中、命名失败与结束状态。**验证**:类型检查、构建与全量 1098 条测试通过;在本机 dsh web 中实测打开面板、切换分段、取消关闭(未点击开始登录或添加,未创建账户)。
22
+
23
+ - **设置页尺寸完全按设计画布**(用户实测「添加账户明显大于效果图」,要求完全按效果图):尺寸逐项取自设计画布 `cc-kit.css`,推翻上两轮中冲突的取舍——按钮改为本页自绘(`PageButton`,32/28/36px 胶囊,次要按钮为浅灰填充、无描边,按钮图标 14px),不再使用宿主 `Button` 的 36px/描边样式;输入框与下拉改回 32px 白底 1px 描边,数字框单位放回框内;设置行间距 16 → 12px 并去掉行间细线;分组头 36px、组间 1px 分隔;账户卡片头 44px;按模型覆盖改为卡片内带表头的小表格;徽标统一 20px;「使用方式」一行补线性图标。颜色仍映射到宿主主题变量,深色模式不受影响。**验证**:类型检查、构建与全量 1093 条测试通过;在本机 dsh web 用脚本实测「添加账户」32px/14px 字/14px 图标/浅灰底、小按钮 28px、下拉 32px、数字框 160×32、行距 12px 无分隔线、分组头 36px、卡片头 44px、徽标 20px,均与设计稿一致。**已知未做**:设计稿里「添加账户」面板的分段切换(网页登录/粘贴密钥)与现有交互流程不同,本轮只改尺寸,未改交互;账户操作菜单仍是宿主 `Menu` 原语的样式。
24
+
25
+ - **设置页按钮、文字与余额收尾**(用户实测反馈后):所有带底色的按钮改为胶囊(宿主 `Button` 经新包装 `PageButton` 覆盖为全圆角),下拉与输入框圆角 12 → 8px,保存条改为与按钮同心的全圆;幽灵按钮(含「查看模型用量、成本与性能分析」)文字由纯黑改为中灰,悬停转黑;本页开启灰度抗锯齿,说明、摘要等辅助文字加深一档(字号经实测本就与设计稿一致,未改)。账户展开区首行改为「月额度剩余」大号数字——它是决定能否继续使用的最终余额,已购与赠送降为小字;剩余为 0 时标红并提示已购与赠送将无法使用。展开区原「月额度」标签(`usageMonthly`)删除,统一为「月额度剩余」。**验证**:类型检查、构建与全量 1093 条测试通过;已在本机 dsh web 中用内置浏览器实测浅色与深色,并用脚本核对 6 个按钮的实际圆角、颜色与保存条圆角。
26
+
27
+ - **设置页对齐宿主原生样式并精简信息**(用户实测反馈「不如设计图精致、显得山寨」后的修正)。用内置浏览器对照宿主「通用设置」读出真实样式后改为:每行之间加 0.5px 细线、行距 16px;下拉与输入框改为宿主同款 36px/12px 圆角浅灰填充(第一阶段的 32px 白底描边框恰与宿主相反,撤回);数字框单位移到框外并固定列宽,空值显示默认值占位(300、5、跟随目录、自动、API 默认地址);分组头摘要改为灰色文字,只有异常用彩色徽标;账户卡片展开后不再重复显示额度小条,数字块从两排 7 个改为一排 4 个(请求副行只留失败数),月额度/已购/赠送并为一行文字,重置时间去掉年份和秒。文案:页头已说「账户操作立即生效」,账户分组说明不再重复;超时、重试、上下文、输出上限、图片、联网搜索、白名单等说明压到一两行(保留决策记录第十章第3条的两条必留信息点与现有文案护栏);行内「已覆盖」统一为「已自定义」;API 地址行说明与分组说明重复,删除并移除 `apiBaseHint` 键。新增 `formatResetAtShort`。**验证**:类型检查、构建与全量 1093 条测试通过;已在本机 dsh web 中用内置浏览器实测浅色、深色、账户展开与全部展开。
28
+
29
+ - **设置页统一风格(第三阶段):账户区与保存条收敛**。账户卡片圆角 16 → 12px,状态徽标改为统一的成功/警告/错误色(当前使用、限额冷却中、密钥无效),展开箭头与操作菜单按钮换成线性 SVG;无密钥引导、浏览器登录状态(新增成功档)、移除/删除密钥确认、用量全部失败的阻断信息都改为提示条;粘贴密钥与重命名的输入放进填充面板,添加账户面板补上说明文字,授权链接带外链图标;「添加账户」(描边按钮)与「查看模型用量、成本与性能分析」(幽灵按钮)合并为列表下方一行,原虚线按钮与整行入口删除;用量数值块圆角 12 → 8px;保存条按钮换成宿主 `Button`,条圆角改为与按钮同心的 16px。删除不再使用的样式与组件(`cc-linkButton`、`cc-addButton`、`cc-usageEntry`、`cc-confirmBar`、`cc-usageBlocked`、`cc-saveBarButton` 等)。账户操作、登录与开通的逻辑未改。**验证边界**:类型检查、构建与全量 1092 条测试通过;未在真实宿主中渲染截图。
30
+
31
+ - **设置页统一风格(第二阶段):五个分组都能折叠**。账户、模型与上下文、隐私与安全、集成与显示、高级设置共用一种分组头(箭头在左、整行可点,「刷新」在按钮外);默认只展开账户,页头新增「全部展开/全部收起」,展开状态按浏览器本地记住(一个 `localStorage` 键,读不到时回落默认)。标题旁新增摘要徽标,收起也能看出现状:账户数与异常数、白名单数量与已自定义项数、ZDR 与联网搜索开关、服务状态。组内有未填好的数字时,收起的分组头挂「有未填好的数字」;保存条在校验失败时多一个「定位」按钮,展开出错分组并聚焦第一个出错字段(保存按钮仍禁用)。高级设置展开时组尾重复的「请展开修正」提示删除,行内错误已说明;文案键 `modelsInvalid`/`advancedInvalid` 随之删除,`advancedOverriddenOne/Many` 改名为通用的 `groupOverriddenOne/Many`。用例:`tests/group-fold.test.ts`(7 条)与 `tests/section.test.ts` 新增 6 条。**验证边界**:类型检查、构建与全量 1092 条测试通过;未在真实宿主中渲染,折叠、定位聚焦与本地记住未做浏览器实测。
32
+
33
+ - **设置页顶部说明段压缩到单行**(中文 48 → 38 个字符,视觉宽估算 640 → 532px;英文 156 → 132 个字符)。`账户操作立即生效;其余设置修改后点击底部「保存」。API 密钥仅保存在本机凭据服务中,不会回显。` → `账户操作立即生效;其余改动点底部「保存」。密钥仅存于本机凭据服务,不回显。`:删去「设置修改后」「点击」「API」「保存在…中」「会」等虚词,三条信息(账户操作即时生效/其余改动走底部「保存」/密钥只存本机凭据服务且不回显)逐条保留;14px 字号下折算宽度由约 640px 降到 532px,常规设置面板一行放得下。**已知取舍**:英文信息密度低,132 字符折算约 880px,在 `max-width:720px` 的 `.cc-section`(设置页容器)里仍会折行;同页 `accountsHint` 写「无需保存」,与本段「其余改动点底部「保存」」措辞不完全统一。**验证边界**:未做真实浏览器渲染截图(本机 GUI 需 `dsh web` 打印的带令牌地址,无法自动打开),宽度为按 14px 全宽字符的估算值。
34
+
35
+ - **「查看模型用量、成本与性能分析」入口从「账户」分组标题行移到「添加账户」按钮下方,并重写为整行入口行按钮。** 原先它用平台 primitives 的 ghost 小按钮(28px 高、透明底、12px 灰字),和「刷新」并排在同一条 `.cc-groupHead` 里:14 个字的标签把「账户」标题挤向左侧,窄面板下还要和标题争同一行。新形态 `.cc-usageEntry` 与上方「添加账户」同宽(100%、16px 圆角)垒成一个按钮栈,但用 40px 高度、0.5px `border-l4` 实线、12px 字、左侧线性柱状图 SVG、右侧细箭头,hover 同时提亮底色/边框/文字;颜色全部取主题别名,不写死色值,文案以 `text-overflow:ellipsis` 兜底窄面板。**层级**:入口由「标题行动作」降为「卡片底部次级出口」,与主操作「添加账户」拉开。渲染条件不变:仍在 Host 暴露 `selectPanel` 接缝时才出现。**已知取舍**:入口不再出现在账户卡片标题行,需要滚到卡片底部才看得到。**验证边界**:未做真实浏览器渲染截图,尺寸按现有页面度量(12px 字号下限、16px 圆角、44px 主按钮)对齐。
36
+
37
+ ### Fixed
38
+
39
+ - **余额不足的账号不再在每个请求里被反复重撞(issue #51 仍未关闭的另一半)。** 现场实测(2026-10-21):账户余额 $0.0874、5 小时与周窗口都未超时时,所有付费模型返回 `400 BAD_REQUEST / "insufficient credits"`,而免费模型仍 200——这证明该拒绝是「模型/余额」事实而非密钥故障,所以 `unavailable` 一直有意不落**账号**标记(否则余额为空的账号连 `:free` 模型都不可用)。但完全不记的代价是:每一次新请求都会重新选中同一个账号并再吃一次 400;在多账号池里当它是回退候选时,用户最终看到的是「自己没选过的那个账号余额不足」的报错(对应反馈者的「选了还有额度的账号却被切到没余额账号」)。现在 `unavailable` 落一条**按「密钥 + 模型」限时的偏好降级**(`markModelUnavailable()`,`MODEL_UNAVAILABLE_TTL_MS` = 5 分钟):同一模型的后续请求先跳过该账号,其它模型与 `:free` 模型不受影响;全部候选都被标记时退回全量(是降级不是禁用,唯一账号仍会交付);401 换密钥时清空该密钥的软标记。`accountUsable()`、账号卡片与 `activeAccount()` 均不受影响。用例:`tests/accounts.test.ts` 新增 5 条(按模型跳过、其它模型不受影响、唯一账号仍交付、软标记是偏好不是禁令、按时钟过期),全量 1079 条通过。
40
+
41
+ - **网关的 `400 JSON node count cannot exceed 32768` 不再落入通用 400 文案(issue #96)。** 这是请求体的**结构**上限,不是 token 上下文超限:报告现场 token 占用仅 22.6%(225,991 / 1,000,000),但 1,436 条消息、61 个 image content part、累计 675 次 tool/call 的请求体已经撞上限;`generateHttpError()` 原先没有分支命中这句,最终落到「请检查模型、套餐和请求设置」的通用文案,上游唯一点名上限的那句话被丢弃。现在 `JSON_NODE_LIMIT_REJECTION` 在上下文溢出分支之后单独接管:中英双语引用网关给出的上限数值,说明「限制的是请求结构,不是 token 长度」,建议新建会话或减少消息与图片;失败码保持 `PROVIDER_HTTP_ERROR`(不重试、不触发压缩、不轮换账号)。文案用「压缩上下文通常不足以降到该上限以内」而非「无效」——压缩会减少消息条数与 content part 数,节点数可能随之下降,只是通常不够。上游原文仍按 `generateHttpError()` 的展示层规则不回显,只引用其上限数字。用例:`tests/adapter.test.ts` 用 issue 里的双层转义真实报文回放,断言失败码、上限 32768、双语「通常不足」且只发 1 次请求。
42
+
43
+ ### Verification
44
+
45
+ - 锁文件隔离校验(`npm ci --dry-run`)退出码 0、100 包;`npm run typecheck` 退出码 0;`npm test` **1111/1111**;`npm run build` 两段通过、`lib/` 已重建(含 `x-command-code-version: 1.86.3` 与 0.15.0 版本号)。
46
+ - `npm run test:engine` **2/2**(`0.2.0-rc.2` 与 `0.2.1-rc.2`,末行 `engine-load smoke passed on all 2 declared-compatible engines`);`npm run test:install` **2/2**(pnpm 10.34.5,`engine matrix verified: 0.2.0-rc.2, 0.2.1-rc.2`)。
47
+ - `npm run test:pack` 通过(16 个文件,版本 0.15.0);`npm pack --dry-run --ignore-scripts` 16 个文件、2.5 MB/解包 3.6 MB。
48
+ - **证据边界**:未做真实账号登录、付费生成、服务端协议验证与浏览器渲染;`test:engine` 与 `test:install` 的网络与凭据为合成依赖;上游同步结论来自产物级静态比对(官方 changelog 无 `1.85.0`–`1.86.3` 条目),审计 `incomplete` 的 4 条 error 为已知的目录侧定价别名缺失。
49
+
50
+ ## [0.14.5] - 2026-10-21
51
+
52
+ ### Changed
53
+
54
+ - **同步 Command Code CLI `1.84.0` → `1.86.1`(纯请求头同步)。** 10-20 一晚连发 4 个补丁版本(`1.85.0`/`1.85.1`/`1.86.0`/`1.86.1`,UTC 17:54Z 起),**官方变更日志页面仍停在 `1.84.0`、CLI 通道没有任何新条目**,结论全部来自产物级静态比对。协议面零变化:请求头集合、`/provider/v1/*` 端点、`/alpha/generate` 的 `mode`/`permissionMode` 枚举、reasoning 重放与 `promptCache` 字面量逐项相同;唯一新增端点是 CLI 自身的 `POST /alpha/artifacts`(把报告/图表/页面发布成链接,2 MB 上限、`private`/`public`),插件不经过该路径。因此 `COMMAND_CODE_CLI_VERSION` 只随请求头更新,运行时行为不变;产物内嵌 `catalogVersion` 更新为 `2a2c334e…`,与实时目录一致。
55
+
56
+ - **ZDR(零数据保留)例外集 25 → 18,首次做到两个来源逐条一致。** `1.86.1` 产物的 `modelSupportsZdr` 集合与实时目录的 `zdr:false` 行是同一批 18 个 id(`knownModelSupportsZdr` 已从产物删除)。**新增 3**:`claude-fable-5`、`claude-fable-5-1`、`tencent/hy4-preview`。**移除 10**:9 个模型被目录改判 `zdr:true`(`meta/muse-spark-1.1`/`1.2`/`1.3`、`meta/muse-wonder-1.0`、`xai/grok-4.5`/`4.6`、`xiaomi/mimo-v2.6-flash`/`pro`、`zai-org/GLM-5.2-Fast`),另加已从两个目录视图、定价页与文档页整体下架的 `stealth/cat-jam:free`。**`cat-jam` 是用户显式决定移除**,不是「从产物消失即视为已覆盖」:保留它只是对老会话的猜测,且会与官方 18 条长期分叉,理由见[《决策记录》第七章第 14 条](docs/决策记录.md#七上游快照同步边界)。`tests/zdr.test.ts` 的成员断言按新集合有意反转,并把 9 个改判模型的「返回 true」路径补进用例。
57
+
58
+ - **MiniMax M3.1 Flash 免费促销延期一天。** 定价页到期时间由 `2026-10-21T10:45Z` 改为 `2026-10-22T10:45Z`(北京时间 10-22 18:45),`KNOWN_DEALS` 的 `expiresAt` 随之上移,FREE 徽标随之多显示一天;`tests/model-prices.test.ts` 的到期边界断言同步改到新时刻。
59
+
60
+ - **`deepseek-v4.1-flash` 月额度上调(费率不变)。** 价格表重生成:GOAT $80 → **$100**、Pro $90 → **$110**;该行仍是 $0.15/$0.60/$0.003,峰谷窗口与倍率不变。
61
+
62
+ ### Added
63
+
64
+ - **新增 Ornith 1.5 122B:付费 `ornith/ornith-1.5-122b` 与限时免费 `ornith/ornith-1.5-122b:free`。** 262,144 上下文、文本 + 图像(Vision)、`reasoning:true` 但无 `reasoningEfforts`(自动推理,选择器不提供档位)、Go 起、ZDR 覆盖。付费行 $0.16 输入 / $0.64 输出 / $0.02 缓存读(每百万 token),月额度 Go $6 / GOAT $20 / Pro $30,价格表 93 → 94 行;免费行 100% off 至 `2026-10-22T06:00Z`(北京时间 10-22 14:00,官方文案 "until 11:00 PM PT on October 21"),无每日请求上限。快照同步:`KNOWN_PLANS` 94 → 96、`KNOWN_IMAGE_MODELS` 72 → 74、`KNOWN_THINKING_MODELS` 15 → 17、`KNOWN_DEALS` 7 → 8;`KNOWN_EFFORTS` 不变(无档位)。
65
+
66
+ - **输出上限表新增 `mistral/mistral-large-4`(262,144)。** 由 `scripts/sync-output-limits.mjs` 重生成,80 → 81 行;同时 `minimax` 三行由 512,000 修正为 **524,288**(供应商元数据把十进制 512K 改成二进制)。
67
+
68
+ ### Verification
69
+
70
+ - `npm run typecheck` 退出码 0;`npm test` **1058/1058**;`npm run build` 两段通过、`lib/` 产物已重建。
71
+ - **证据边界**:公开 GET 采集(14 个源全部 HTTP 200,2026-10-21 08:34 北京时间);审计 `incomplete` 的 4 条 error 是 Ornith/MiniMax 四个 id 缺定价映射别名(目录侧单源,不是抓取失败),已按定价页人工核对。**未做**:真实账号登录、付费生成、服务端协议验证与浏览器渲染。
72
+
7
73
  ## [0.14.4] - 2026-10-20
8
74
 
9
75
  ### Changed
package/README.md CHANGED
@@ -18,6 +18,7 @@ Unofficial [DeepSeek Harness](https://deepseek-harness.github.io/deepseek-harnes
18
18
 
19
19
  - **Plugin bundle** — install into any dsh profile with `dsh plugin add`; registers a `commandcode` provider route with a live model catalog.
20
20
  - **Dedicated settings page** — one account list (keys, sign-in, live quota, dedicated models), model visibility, privacy switches, and connection options.
21
+ - **Service status** — the top of *Integrations & display* shows the official status page's published record (operational/degraded/down, 7- and 30-day uptime, 7-day average response time) with the time the official data was published, not a misleading "last checked" — Upptime only publishes on a status change or the daily summary. The host also probes the configured API base live, so the row shows an *Official* line and a *This device* line separately and answers "can I reach it right now" — when this machine cannot get through, the group heading says so; data is cached locally, a failed fetch is labeled as the last known result, and saving is never blocked.
21
22
  - **Model analysis** — open from Settings to inspect tokens, estimated cost, response timing and failures/retries by recent sessions or date range, including closed sessions with inherited fork usage excluded. Compare fixed-workload prices and objective capabilities without automatic recommendations or quality scores. Missing data and scan limits remain visible; complete date ranges can be extrapolated to 30 days. Estimates use current prices and are not invoices. See [scope and limitations](docs/模型成本与性能分析.md).
22
23
  - **Works in the terminal too** — the same install serves a [dsh-TUI](#terminal-ui-dsh-tui) profile, with its own **`/settings` → Command Code** page for the API key and the model controls.
23
24
  - **Models-page key card** — the **Settings → Models → Command Code** card carries the key status, a paste field, and the sign-in button inline.
@@ -274,7 +275,7 @@ Command Code can serve a request only through upstreams that retain no prompts o
274
275
 
275
276
  **Off by default.** Turn it on with the *"Zero data retention (ZDR)"* toggle (`zdr`) in the Privacy & security card, or in your profile config. How this plugin implements it:
276
277
 
277
- - The header is sent on **every chat request** while ZDR is on. The plugin maintains an informational exception list (`KNOWN_NON_ZDR_MODELS`, synced from the official CLI — 22 models as of 2026-10-14, e.g. `xai/grok-4.5`, `stealth/glyph-cluster:free`, `stepfun/Step-3.7-Flash`, `meta/muse-wonder-1.0`). A model without an available ZDR upstream fails with `422 cmd_zdr_no_providers`; the request is never retried without the header.
278
+ - The header is sent on **every chat request** while ZDR is on. The plugin maintains an informational exception list (`KNOWN_NON_ZDR_MODELS`, synced from the official CLI — 18 models as of 2026-10-21, e.g. `claude-fable-5`, `stealth/glyph-cluster:free`, `stepfun/Step-3.7-Flash`, `tencent/hy4-preview`). A model without an available ZDR upstream fails with `422 cmd_zdr_no_providers`; the request is never retried without the header.
278
279
  - If a refusal still happens (coverage churn, or no ZDR upstream with spare capacity at that moment), the error names the cause and how to turn ZDR off, instead of surfacing as a bare HTTP 422.
279
280
  - **ZDR usually costs more**: capacity is limited and billed at each upstream's pass-through rates, and which upstream serves a request can change per request. The session-cost readout keeps quoting the ordinary catalog rates; the real per-request price shows in Command Code's Studio usage page.
280
281
  - Works on every plan; plan credits meter ZDR requests at the plan's default allowance.
package/README.zh-CN.md CHANGED
@@ -18,6 +18,7 @@
18
18
 
19
19
  - **插件包**:一条 `dsh plugin add` 命令安装到任意 dsh 配置,注册 `commandcode` provider 路由,带实时模型目录。
20
20
  - **专属设置页**:统一的账户列表(密钥、网页登录、实时额度、专用模型)、模型显示、隐私开关与连接参数。
21
+ - **服务状态**:设置页「集成与显示」顶部显示官方状态页的公开记录(服务是否正常、7 天 / 30 天可用率、近 7 天平均响应),并注明官方数据的更新时间——官方只在状态变化或每日汇总时发布,因此不再把时间写成「最后检测」。同时由宿主对当前 API 地址做一次实时连通探测,分成「官方」与「本机」两行展示,真正回答「现在能不能连上」;本机连不上时,分组标题直接提示「本机无法连接」。数据缓存在本地,获取失败时明确标注「上次结果」且不阻塞保存。
21
22
  - **模型分析**:从设置页打开,按最近会话或日期查看历史词元、估算成本、响应速度与失败/重试,比较固定工作量在其他可见模型上的价格和客观能力。包含已关闭会话、去除分支继承用量,显示缺失数据和读取覆盖;完整时间范围可折算 30 天成本。不自动推荐、不评价任务质量。金额按当前价重算,不是账单;[统计口径与限制](docs/模型成本与性能分析.md)。
22
23
  - **终端界面同样可用**:同一次安装即可服务 [dsh-TUI](#终端界面dsh-tui) 配置,终端里有自己的 **`/settings` → Command Code** 页面来填 key 和调模型。
23
24
  - **Models 页快捷卡片**:**设置 → Models → Command Code** 卡片内直接显示 key 状态、粘贴输入框和登录按钮。
@@ -255,7 +256,7 @@ Command Code 可以让请求只经由「不留存提示词与回复、也不用
255
256
 
256
257
  **默认关闭。** 在「隐私与安全」卡片里打开「零数据保留(ZDR)」(`zdr`),或写进 profile 配置。本插件的实现方式:
257
258
 
258
- - 开启后,**每次聊天请求**都会带上 ZDR 请求头。插件仍维护官方 CLI 的例外名单(`KNOWN_NON_ZDR_MODELS`,截至 2026-10-14 共 22 个模型,例如 `xai/grok-4.5`、`stealth/glyph-cluster:free`、`stepfun/Step-3.7-Flash`、`meta/muse-wonder-1.0`)供查询。没有可用 ZDR 上游时,服务端返回 `422 cmd_zdr_no_providers`;插件不会去掉请求头重试。
259
+ - 开启后,**每次聊天请求**都会带上 ZDR 请求头。插件仍维护官方 CLI 的例外名单(`KNOWN_NON_ZDR_MODELS`,截至 2026-10-21 共 18 个模型,例如 `claude-fable-5`、`stealth/glyph-cluster:free`、`stepfun/Step-3.7-Flash`、`tencent/hy4-preview`)供查询。没有可用 ZDR 上游时,服务端返回 `422 cmd_zdr_no_providers`;插件不会去掉请求头重试。
259
260
  - 万一仍被拒绝(名单过期,或那一刻没有空闲的 ZDR 上游容量),错误信息会说明原因并给出关闭 ZDR 的办法,而不是抛出一个光秃秃的 HTTP 422。
260
261
  - **ZDR 通常更贵**:容量有限,按各上游实价透传计费,且每次请求落在哪个上游可能不同。会话费用读数仍按常规目录价估算;真实单价见 Command Code Studio 的用量页。
261
262
  - 各套餐均可使用;ZDR 请求按套餐的默认额度(而非提升额度)计量。