Overview
dsh-all-usage
README / EN
Package documentation
Registry summary
dsh.pub verifies the pinned bundle contract, runtime facts, and distribution semantics. The complete README remains in the source repository.
Read the full README on GitHubLIMITATIONS
Known limitations
- **运行环境**:需要 Node.js `>=22 <25`;CI 会在 Node 22 和 Node 24 上运行测试、语法检查和 npm 包内容检查。 - **DSH 兼容**:`package.json` 声明 DSH runtime `>=0.1.1-rc.1 <0.1.5-0 || >=0.1.5-rc.1 <0.1.6-0 || >=0.1.7-rc.2 <0.1.8-0 || >=0.2.0-rc.2 <0.2.1-0 || 0.2.1-alpha.2 || 0.2.1-rc.1 || 0.2.1-rc.2`,已在本机用真实 Cordis 服务链验证 `0.2.1-rc.1` / `0.2.1-rc.2`(Node 24 严格 smoke;这两条把 Cordis 提升为稳定版 4.0.5 / loader 1.0.6 / timer 1.1.7)、`0.2.1-alpha.2` 以及 `0.2.0-rc.2`、`0.1.7-rc.2`、`0.1.5-rc.2`、`0.1.5-rc.1`、`0.1.1-rc.2`、`0.1.1-rc.1`;全部已声明版本都进了 CI smoke 矩阵(Node 22/24 双档),但 `0.2.1` 那两条因上游从未发布对应版本的 `@deepseek-ai/dsh-invariants`,CI 会**如实标记 SKIPPED,不等于通过**;`0.1.2-rc.1` 已通过实际使用验证兼容,但未纳入 CI smoke 矩阵。声明按元组逐条拆开而非写成单一区间,是因为 node-semver 只有在范围里存在与目标版本同 `major.minor.patch` 且自身带预发布标签的比较符时,才会放行该预发布版本 —— 例如必须写成 `>=0.2.0-rc.2` 才能让 `0.2.0-rc.2` 进入范围。 - **桌面客户端(Electron,Windows)**:本插件在 DSH 桌面客户端上实测运行正常(实测 `@deepseek-ai/dsh-desktop` `0.1.7-rc.2`)。桌面客户端会在窗口顶部为自身的最小化 / 最大化 / 关闭按钮保留一条 40px 顶栏,并在文档上标记 `data-windows-titlebar` 与 `--dsh-windows-titlebar-height`;面板据此从该条**下方**开始绘制,所以桌面端自己的关闭按钮永远不会被面板盖住。浏览器端没有该标记,不留白。顶栏高度优先取宿主声明,其次取 Window Controls Overlay 矩形,最后退回 UA;需要微调时可在 DevTools 执行 `localStorage.setItem('dsh-all-usage:topInset', '48')` 后刷新(`0` 表示不留白),无需重新构建。桌面客户端自带运行时,实测版本 `0.1.7-rc.2` 已纳入声明区间与 CI smoke 矩阵(见下表)。 - **Web 服务依赖**:Host 将 `webServer` 声明为必需依赖,确保服务晚挂载时由 DSH 等待后再执行插件;该包面向 DSH Web profile,不提供无 WebServer 的 headless 路由。HTTP 守卫还会检查真实 socket peer,反向代理只有在连接本身来自 loopback 时才会被接受。写接口(价格保存、立即同步、节假日抓取、别名)以**进程令牌**为授权凭据,不强制要求 `Origin`:DSH 桌面端把 UI 跑在自定义协议上、请求由 Electron 主进程转发,转发时会删掉 `Origin`(连同 `Host`/`Cookie`/`Sec-Fetch-*`),强制 Origin 会让桌面端所有写入 403;而 `Origin` 若存在仍必须是 loopback 或桌面端自身 scheme,`Host` 仍必须是 loopback(防 DNS rebinding)。 - **界面语言**:首次进入时面板跟随 DSH 的 **Language 设置**(`Settings → General → Language`,经宿主的 `locale` 服务读取);宿主未提供该服务时退回浏览器语言,最后退回英语。在面板里手动选过语言之后以面板的选择为准,宿主设置不再覆盖它。语言同时决定时区口径——中文按本地时区,英文按 UTC——所以切换语言会重新取一份对应时区的快照。 | DSH runtime | Node.js 支持 | 真实 Cordis smoke | 结论 | | --- | --- | --- | --- | | `0.2.1-rc.2` | `>=22 <25` | 通过(本机 Node 24 严格真实 Cordis smoke;稳定版 Cordis 4.0.5 / loader 1.0.6 / timer 1.1.7) | 已声明、已验证(仅此精确版本;CI 因上游缺 `dsh-invariants@0.2.1-rc.2` 如实标记 SKIPPED) | | `0.2.1-rc.1` | `>=22 <25` | 通过(本机 Node 24 严格真实 Cordis smoke;稳定版 Cordis 4.0.5 / loader 1.0.6 / timer 1.1.7) | 已声明、已验证(仅此精确版本,不代表其他 rc 版本;CI 因上游缺 `dsh-invariants@0.2.1-rc.1` 如实标记 SKIPPED) | | `0.2.1-alpha.2` | `>=22 <25` | 通过(本机 Node 24 严格真实 Cordis smoke;CI 因上游缺 `dsh-invariants@0.2.1-alpha.2` 如实标记 SKIPPED) | 已声明、已验证(仅此精确版本,不代表其他 alpha 版本) | | `0.2.0-rc.2` | `>=22 <25`,CI 覆盖 22/24 | 通过(真实 Cordis 服务链,CI 覆盖 Node 22/24) | 已声明、已验证(历史验证结果,CI 覆盖 Node 22/24) | | `0.1.7-rc.2` | `>=22 <25`,CI 覆盖 22/24 | 通过(真实 Cordis 服务链,CI 覆盖 Node 22/24) | 已声明、已验证(历史验证结果,CI 覆盖 Node 22/24) | | `0.1.5-rc.2` | `>=22 <25`,CI 覆盖 22/24 | 通过(真实 Cordis 服务链,CI 覆盖 Node 22/24) | 已声明、已验证 | | `0.1.5-rc.1` | `>=22 <25`,CI 覆盖 22/24 | 通过(真实 Cordis 服务链,CI 覆盖 Node 22/24) | 已声明、已验证 | | `0.1.2-rc.1` | `>=22 <25` | 通过(实际使用验证,未纳入 CI) | 已实际验证兼容 | | `0.1.1-rc.2` | `>=22 <25`,CI 覆盖 22/24 | 通过(真实 Cordis 服务链,CI 覆盖 Node 22/24) | 已声明、已验证 | | `0.1.1-rc.1` | `>=22 <25`,CI 覆盖 22/24 | 通过(真实 Cordis 服务链,CI 覆盖 Node 22/24) | 已声明、已验证 | | 其他版本 | `>=22 <25` | 未测试 | 不在已验证矩阵内 | 未列出的 DSH 版本不代表一定不兼容;提交问题时请附 DSH、Node.js 和插件版本。 - **中断请求**:上游请求被中断时可能只有 `assistant/chunk` 的 usage,没有最终 `assistant/message`;本插件会保留该 chunk 用量。同一 `turn / step` 后续出现最终 message 时,message 会替换 chunk。若上游完全没有 usage 事件,则无法从响应内容精确恢复 Token。 - **估算成本**:成本是基于 models.dev 价格和 DSH usage 桶的估算,不是供应商账单;目录不可用或模型没有官方匹配时不会猜测价格,而是显示未计价。缓存读取、缓存写入和 reasoning 的口径取决于 DSH 上游事件。 - **分层价格**:models.dev 的 tiered/context-dependent 价格按本次请求的输入上下文(fresh input + cache read + cache write)选择对应档位;阈值边界遵循目录定义,无法验证的异常 tier 仍显示为 unsupported。 - **工作区边界**:只有 cwd 能映射到 DSH 已注册工作区的会话才进入统计;未注册 cwd(包括已存在但未在 registry 中登记的目录)会被忽略。工作区注册列表通过 DSH 的 `domain/changed` 探针自动同步:注册表一有改动就重读并只对新增/删除的工作区做增量处理,未变化的已有工作区直接复用已计算账本,不会全量重扫。会话尚未成功 flush 前删除或损坏的日志无法由独立账本恢复。工作区被删除时历史用量不会丢失:它会被保留并汇总为一行「已删除」。
