全部插件

DSH / BUNDLE / BUNDLES

dsh-peak-balance

v0.6.1VviLliAm-qwq / dsh-peak-balance45ce1a557f

可安装组合包组合包与其他模块社区 · Topic 自动分析

概览

dsh-peak-balance

Peak/off-peak billing clock with a provider-neutral account readout (DeepSeek balance, subscription plan windows, relay credits), per-turn spend measured from the provider's own counter, and a /hist token-history scene split per provider for dsh-tui

README / ZH

插件文档

目录摘要

Peak/off-peak billing clock with a provider-neutral account readout (DeepSeek balance, subscription plan windows, relay credits), per-turn spend measured from the provider's own counter, and a /hist token-history scene split per provider for dsh-tui

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

在 GitHub 阅读完整 README

LIMITATIONS

已知限制

- **输入框边框本身无法由插件改色**:dsh-tui 0.10 的输入框边框由其内部 `EffortInputBorder` 组件独占渲染,没有对插件开放的接缝。因此警告边框是渲染在对话栏正上方的状态贡献——这是不改宿主源码能做到的最接近效果。 - 花费为基于 token 用量的估算,实际扣费以 DeepSeek 平台账单为准。 - 价目表内置在包内,官方调价需要插件更新;未收录的模型需要你自己用 `/hist price set` 补单价。 - 账户那一段依赖 provider 自己的接口:**没有公开额度接口的 provider 不会显示任何数字**(OpenAI、Gemini、Anthropic 预付费余额、GLM/Kimi 编程套餐、Claude 订阅等),而不是显示一个猜出来的值。可以用声明文件接入自家部署或未内置的接口。 - **恢复的对话在发出第一个请求之前,账户数字来自宿主的 `/model` 路由,而不是这个对话本身**:dsh-tui 重放已恢复会话的历史时不发会话事件,所以还没有任何东西报出这个对话自己的 provider。若该对话被单独固定到与 `/model` 选择不同的 provider,它的第一个请求会把状态行纠正过来。 - **全新环境、还没发出任何请求时会落到 `deepseek-official` 路由**:既没有 `~/.dsh-tui/model.json` 偏好、也还没有任何会话事件时,宿主只报得出这一条路由。所以你若打算用别家 provider、又没配 DeepSeek 密钥,账户那一段会先显示「未配置密钥」,直到你的第一个请求报出真正的 provider——不会出错,那个请求之后状态行自己会纠正。 - **只有 DeepSeek 官方与 Command Code 两个适配器经过真实账户核对**(见上文表格);其余具名适配器按各自官方文档实现,并用文档/源码里的夹具 payload 测试,未经真实账户核对。 - **非公开端点默认关闭**:spec 里声明 `"allowUnofficial": true` 的 provider,只有在全局的 `allowUnofficialQuota` 也打开时才会被访问(如逆向的控制台接口)。Command Code 的 `/alpha/*` 不受该开关限制——那是官方 CLI 自己走的端点。 - **不内置 Command Code 的价目表**:它的模型目录不带价格、价格页是前端渲染的,编一份出来就是猜。订阅套餐里的模型在 `/hist` 只显示 token,直到你用 `/hist price set commandcode:<model> …` 给出单价;状态行的「本轮」仍然是实测扣减。 - **`/hist` 的金额一律是「元」**:成本由价目表算出(内置价目或 `/th price` 自定义费率,单位都是元/百万 token),所以合计行、按 provider 分列与模型表都按 `¥` 显示。`credits` 是状态行上账户自己的额度口径,不参与成本列。 - **历史缓存结构升级会被就地迁移,首次扫描仍然要几秒**:记录结构变化时插件用迁移函数改写旧缓存(不重扫日志),无迁移路径的旧版本才整份丢弃——0.5.1 的那次丢弃就是「升级后第一次 `/hist` 要等十几秒」的来源,现在不会再有。**真正慢的只有本机第一次全量扫描**(本机 437 份 / 112 MB 约 5~6 秒;其中约 4.3 秒是 19 万个小 zstd 帧逐帧解码的固有开销),期间边扫边落盘、边扫边出图:最新的日志先扫,不到一秒就能看到最近数周的真实数据。 - **新 fork 的会话日志在只有 2 帧时无法做帧级续读**:这类日志的第 1 帧是会话头、第 2 帧才是 `session/end-seed` 截断标记,只看到第 1 帧时无从确定截断点,插件会选择整份重读(代价以百字节计)。 - **`/quota` 的 provider 列表**来自 `ctx.llm.listConfigurableProviders()`、内置目录快照与声明文件;组合里声明但宿主当前不可路由的 provider 可能不在列表里。 - **余额按接口回报的币种显示**:接口在 `currency` 里给出币种(`CNY` / `USD` …),状态行使用对应符号(`¥` / `$`);未知币种回退成 ISO 代码(如 `12.34 CHF`),不会把美元当人民币显示。 - 富状态视图与其他插件共享 6 行预算,本插件占用 3 行,且仅在警告边框显示时占用。 - 状态行显示的是**宿主当前聚焦的那个对话**:切换对话后它跟着切。已结算的轮次按**对话**记录(不是按会话对象),所以切走再切回来仍然能看到那个对话自己的上一轮花费;只有该对话在本进程内确实还没有已结算的轮次时才显示 `本轮 —`(新开的 `/new` 会话就是这种情况),而不是拿别的对话的数字顶上。 - **子代理的花费计入「本轮」**:子代理会话(`origin: subagent` / `delegationDepth > 0`)的用量会按会话头里的 `parentSession` 折叠回**发起它的那个对话**正在进行的轮次;父轮次结束后才回来的后台子代理不再计入(那一轮已经结算)。宿主没有给出父子关系时按旧行为忽略。注意 `/hist` 的总量与状态行口径不同:历史默认把子代理**单独**统计(可用「计入子代理」开关切换),状态行则是把它并进父轮次。 - **空 marker 是稳定状态,不是反复的 `/new`**:宿主在 `/new` 以及**退出一个不可恢复的会话**时都会把 `~/.dsh-tui/resume.txt` 写成空串,所以插件只在标记**内容或 mtime 变化**时才采用它。早期版本每秒重放一次该读数,会让已经认领状态行的对话被永久静音(显示停在 `本轮 —`)。 - **轮次结束时的瞬时判定**:用量报告按其请求开始时刻(`step/start`)归入峰/谷档;一轮的费率与模型按该轮**第一次上报**时的快照计价,因此轮内换模型或跨 2026-09-14 的 Pro→Flash 换挡不会把整轮改价。结算发生在轮末,只影响没记录到任何上报的极端情况。 - **历史只覆盖本机 dsh 的用量**:日志里没有的调用(网页版、其他客户端、其他机器)不会出现在方格图里。历史起点取决于本机日志文件,现有日志从 2026-09-04 开始。 - **`/th` 单独回车会被宿主的补全菜单抢去切主题**(见上文「命令名与回车行为」):这是宿主逻辑,插件无法把命令排到补全列表前面;用 `/hist`、`/tokenhistory`、`alt+h` 或 `/th ` 带空格都可以。同理,若日后某个技能名以 `hist` 开头,也会以同样方式抢走 `/hist` 的回车。 - **本机第一次打开 `/hist`(还没有缓存)需要几秒**:全量扫描会话日志(本机 437 份 / 112 MB 约 5~6 秒),期间显示扫描进度,并**边扫边出图**(最新日志先扫,最近数周不到一秒即可见);扫描会边扫边落盘,中途被打断也能续扫。有缓存之后,打开场景直接由缓存出图。 - **鼠标悬停依赖全屏(alternate screen)**:profile 的 `fullscreen: true` 下可用;inline 模式下请用键盘(`←/→/↑/↓`)选中日期,明细卡同样会显示。 - 方格图的深浅按当前可见区间内非零日期的四分位分级,因此数据增长后同一数值的颜色档位可能变化(与 GitHub 一致);图例里始终标着当前区间的最大值。 - **终端不够宽时裁周而不是缩格**:宽度放不下完整跨度时只显示最近的若干周,标题栏徽章会写「显示 27/53 周」;`←/→` 挪到边缘时窗口跟着滚一格,选中格不会被藏掉。高度不足时按此优先级逐级降级:模型表 → 明细卡的字段(先砍模型行,再砍命中率/花费/token)→ 总计行;`<12` 行或 `<40` 列时改用兜底视图(最近若干天一行一条 + 一行总计),保证不溢出。