bowenliang123/dsh-context
bowenliang123/dsh-contextDSH 上下文洞察面板:Context 仪表盘 + /context命令 + Context 浏览器,查看 Context的分类组成、内容详情、演进趋势、压缩/注入事件、统计等一站式 Context 全生命周期管理。
DSH 本地计费面板:多平台、按平台/模型明细汇总调用次数、token 与花费,支持峰谷/阶梯计价、按次计费、CSV 人工导入价格(含峰时窗口)、官方账单对齐,以及 HTML/PDF/CSV 导出。
utcOffsetHours 调整)。usdToCny 折成人民币;匹配不到时退回内置参考价。每种价格来源在页面上都有标记。deepseek / deepseek-official / deepseek-account,或 baseURL 的 host 是 api.deepseek.com 时,自动启用官方峰谷价并内置一份官方价表;打开「人工导入价格」前会先读官网 Markdown 最新价,失败则用上次缓存或内置表。只对官方 API 生效,第三方平台上的 DeepSeek 模型不会套用官方价。09:00-12:00, 14:00-18:00,选每天 / 工作日 / 周末)填峰时价,峰时以外按基础价。还可以下载 CSV 模板 用 Excel 填好后导入。人工价持久化,后续目录刷新不会覆盖;DeepSeek 官方 API 默认以官方自动价为准,只有在弹窗里显式保存才会转为人工覆盖,平台行会出现 改用官方价 按钮可随时恢复。旧版遗留的官方人工价会自动收起,不参与计价。chargeFailedCalls: true 可改成所有请求都收费。usage.json v2),每天的明细可以下钻到小时。dsh-billing-statistics 是 DSH 的本地计费账本:把经过 llm/stream 的模型调用按平台、模型和小时记下来,用价格表估算花费,并提供报表与官方账单对照。它不接管模型请求,也不替你登录任何平台。
llm/stream 的调用;DSH 未运行、直连 API、其他客户端的请求不在账本里。$DSH_HOME/llm-usage-insights/,没有云同步或多机合并;卸载不会自动删除账本,需要清理时手动删目录。>=0.2.1-rc.5 <0.3.0,Node.js >=20;目前已在 Windows 11 + DSH 0.2.1-rc.5、0.2.2-rc.1 实机验证。pdfkit;缺少中文字体时会直接报错,不会静默生成乱码报表。安装方式(本地目录):
# 1. 把本目录放到工作区
# 2. 在 profile 的 package.json 里登记为依赖(link: 形式即可)
# 3. 重启应用,在侧栏看到「计费统计」入口
依赖:@deepseek-ai/schemastery(peer,可选);PDF 另需 pdfkit(已列在 package.json 的 dependencies,安装时自动装),无需构建。
兼容性:DSH >=0.2.1-rc.5 <0.3.0,Node.js >=20;当前已在 Windows 11 + DSH 0.2.1-rc.5、0.2.2-rc.1 实机验证。完整兼容范围、权限边界与已知局限见 PLUGIN-DECLARATION.md。
从 1.12.x 升级:旧包名是 dsh-billing-insights(更早是 llm-usage-insights)。请先在 Plugin Manager 卸载旧 bundle,再安装 dsh-billing-statistics,避免两个 bundle 同时注册侧栏页面。数据目录与 API 前缀沿用旧名,账本不会丢。
| 配置项 | 默认 | 说明 |
|---|---|---|
retainDays | 30 | 按天明细保留天数(1–3660);更早的小时桶在下次启动时清理,月度汇总长期保留。 |
showCost | true | 页面是否显示花费列与合计。 |
priceSync | true | 每天刷新一次 models.dev 价格目录;当天没开程序则下次启动补刷。 |
usdToCny | 7.1 | models.dev 的美元价折成人民币用的汇率。 |
peakHolidays | [] | 视为空闲时段的日期(YYYY-MM-DD,北京时间),如法定节假日。 |
utcOffsetHours | 8 | 峰谷判断与按天分桶用的时区偏移(-12 ~ +14),0 = UTC;已有分桶不重排。 |
pricing | {} | 自定义价格表,键可为 provider / provider/model / *;同名键整体覆盖 models.dev 价,全 0 视为未定价。每个价格对象可写 input / output / cacheRead / cacheWrite / perCall。 |
chargeFailedCalls | false | 按次计价时是否对失败 / 中断的请求也收一次费;默认 false,只对成功调用计费。 |
价格匹配顺序:自定义 pricing → 人工导入价格 → DeepSeek 官方自动价(仅官方 API)→ models.dev 目录 → 内置参考价。其中 DeepSeek 官方平台默认把官方自动价排在旧人工价之前:旧版遗留人工价不参与计价,只有你在弹窗里显式保存后才会成为人工覆盖;平台行的「改用官方价」可清除覆盖。
models.dev 目录会缓存在 $DSH_HOME/llm-usage-insights/models-dev.json(历史兼容目录),每天刷新;在线失败时自动用缓存,首次无缓存则用插件内置的目录快照。DeepSeek 官方价每小时最多读一次官网,失败时依次退回上次缓存和内置价表;官网峰时按 UTC 解释,页面会按 utcOffsetHours 显示对应本地时段。
$DSH_HOME/llm-usage-insights/(历史兼容目录,默认 ~/.dsh/llm-usage-insights)。usage.json 只含计数、token 与价格来源,不保存任何 prompt / 回复内容;manual-prices.json 只存人工导入的价格表。usage.json 损坏,会先改名为 usage.json.corrupt-<时间> 备份,再按空数据启动;连备份都失败时进入只读模式,不会用空文件覆盖原数据。usage.lock(短临界区),并把盘上已有的桶逐字段取大合并进来,避免多开时整段覆盖。requestRejection 判定。utcOffsetHours 决定,改它不会重排已有分桶(旧数据仍按旧口径)。usage.json 有 usage.lock 轻量互斥,但多实例同时写只能「逐字段取大」合并,同一小时的并发调用可能被少算;建议只开一个窗口。导出支持自包含 HTML 报表(主入口)、PDF 文档与 CSV(兼容保留)。PDF 依赖本机中文字体(Windows 默认用黑体),找不到字体时请改用 HTML。node --test "test/*.test.js"
测试覆盖:峰谷 / 阶梯计价与汇率折算、DeepSeek 官方 API 识别与官方价表 / 官网解析 / UTC 峰谷、models.dev 目录匹配与参考价、人工导入价格与峰时时段、v1→v2 迁移、保留期裁剪与月汇总保留、年 / 全部视图、价格表优先级、落盘与重开一致性、损坏文件备份、中英文案键对齐。
MIT,见 LICENSE。