全部插件

DSH / BUNDLE / CLIENT-UI

dsh-token-billing

v0.2.0MrTomTao / dsh-token-billing5c1f6adad4

可安装组合包UI 与客户端插件社区 · Topic 自动分析Web UI

概览

dsh-token-billing

Session token billing for the DeepSeek Harness: a host-registered cost projection plus a live cost badge, and an account-balance badge, in the web session header

README / ZH

插件文档

目录摘要

Session token billing for the DeepSeek Harness: a host-registered cost projection plus a live cost badge, and an account-balance badge, in the web session header

dsh.pub 核对固定版本的组合包契约、运行时事实与分发语义;完整 README 请查看源仓库。

在 GitHub 阅读完整 README

LIMITATIONS

已知限制

- **文案是中文写死的**,没有接 locale 字典(接了就要引入 `ctx.locale` 与字典注册)。要英文界面直接改 `src/client.js` 里的字符串并重新构建。 - **币种只有 CNY / USD** 两套(官方就这两套)。要加第三个币种:在 `src/host.js` 的 `DEFAULT_PRICES` 和 `CURRENCIES` 里加上,并在 `src/client.js` 的 `symbolOf` 里给出符号。 - **不自动抓官网价格。** 页面结构一变抓取就断,宁可让价格是显式配置。价格变动请按上面的「改价格」处理。 - **只覆盖会话内用量。** 不做跨会话汇总、不做预算拦截(拦截属于 gate,不属于展示)。想加的话,同样可以走一个 Host 投影 + 另一个 entry。 - **余额是「现在剩多少」,不是「本会话花了多少」。** 两者来自不同事实源:花费由会话日志折叠而来,余额是每次现查的外部快照。余额不会随投影推送更新,只按 `refreshMs` 轮询,所以刚发生的大额消费可能要过几十秒才反映在徽标上;想立刻看就点面板里的「刷新」(它会跳过 Host 端缓存)。 - **余额有两条取数路径,取到哪条取决于账户形态。** 登录了 DeepSeek 账号走平台接口(充值 / 赠送两个钱包分列,总额由插件相加);只有 API Key 就走 `GET /user/balance`(官方直接给出总额与两个分项)。两条都拿不到时显示 `--` 并说明原因,**绝不会把失败显示成 ¥0**。 - **余额徽标要求 Web 表面。** 它读的是 Host 半注册在 `webServer` 上的同源路由;纯终端 / ACP 环境里路由不存在,徽标也不会出现(Host 半用 `ctx.inject(['webServer'], …)` 注册,缺这个服务时插件照常加载,投影仍然工作)。 - **依赖 `conversation.session.header.utilities` 这个 slot**(由 `@deepseek-ai/dsh-client-ui-conversation` 声明)。纯终端 / ACP 等没有 Web 会话头的界面看不到徽标;Host 半的投影仍然照常工作,`tokenBilling` 键对其他消费者(例如自定义视图)也是可读的。 - **`--dump-config` 不是只读的**:它会重写 profile 里的 `cordis.yml`,在受限环境下需要该目录写权限。 - **样式对齐官方头部控件**:徽标按同 slot 官方按钮的规格写(28px 行高、`0.5px solid var(--dsw-alias-border-l4)` 发丝边框、`14px` 胶囊圆角、11px/400 字号、hover 用 `--dsw-alias-interactive-bg-hover` 铺底),规格抄自 `packages/client/ui-open-in-app/src/client/OpenInAppAction.module.css`。注意 `--dsw-alias-border-l4`、`--dsw-alias-interactive-bg-hover`、`--dsw-font-family` **不在**运行时 token 查询/覆盖列表里(那份列表只暴露 13 个 alias,边框类只有 `-l1`/`-l2`),但它们在上游主题表里真实存在、官方组件也在用,因此在页面里能正常解析;只是不能用 `theme.overrideTokens` 覆盖它们。