{"_id":"@cassius0924/dsh-usage-dashboard","_rev":"5-6a9a6cd35e5fcb5c5f9634583262d257","name":"@cassius0924/dsh-usage-dashboard","dist-tags":{"latest":"0.6.0"},"versions":{"0.3.0":{"name":"@cassius0924/dsh-usage-dashboard","version":"0.3.0","keywords":["deepseek","dsh","deepseek-harness","plugin","dashboard","usage","quota","cost","tokens"],"author":{"name":"Cassius0924"},"license":"MIT","_id":"@cassius0924/dsh-usage-dashboard@0.3.0","maintainers":[{"name":"cassius0924","email":"2670226747@qq.com"}],"homepage":"https://github.com/Cassius0924/dsh-usage-dashboard#readme","bugs":{"url":"https://github.com/Cassius0924/dsh-usage-dashboard/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-conversation"],"platform":"web","immediately":true}},"dist":{"shasum":"0b21ecab149ef0bd8e4e9071e5abf5ed51ce4487","tarball":"https://registry.npmjs.org/@cassius0924/dsh-usage-dashboard/-/dsh-usage-dashboard-0.3.0.tgz","fileCount":26,"integrity":"sha512-l/nuouMjriRYLHiDUPM7J/36SA7BEbPcav0BiuvIrygs6B9wvpvlqgriENMNdQvKJM11M4T28QGDYX3BnObIoA==","signatures":[{"sig":"MEQCIDMTC4FoLg5yErGIMChe0rVdmchLSM6MiPSVf5mHO6ZAAiAAkqZih28p07GxrTVEoL/fNrdsh/V0nJf4hXeLlfw+Vg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":345111},"main":"lib/index.js","type":"module","types":"lib/types/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./package.json":"./package.json"},"gitHead":"11ae189bf32cb82a540f7cb293259b0bb72d4075","scripts":{"build":"node build.mjs","prepare":"node build.mjs","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cassius0924","email":"2670226747@qq.com"},"repository":{"url":"git+https://github.com/Cassius0924/dsh-usage-dashboard.git","type":"git"},"_npmVersion":"11.6.2","description":"DeepSeek 额度与用量仪表盘 —— DSH (DeepSeek Harness) Web 插件：余额还能撑几天、今日/本月花了多少、哪个模型和哪个会话最贵、缓存省了多少，以及 2026-08-17 峰谷定价后的账单预估","directories":{},"_nodeVersion":"24.13.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.2.0","esbuild":"^0.25.0","typescript":"^5.6.0","@types/node":"^24.0.0","@types/react":"^18.2.0","@deepseek-ai/cordis":"^4.0.1"},"peerDependencies":{"react":"^18.2.0","@deepseek-ai/cordis":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-usage-dashboard_0.3.0_1786772401680_0.5703530739533873","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@cassius0924/dsh-usage-dashboard","version":"0.3.1","keywords":["deepseek","dsh","deepseek-harness","plugin","dashboard","usage","quota","cost","tokens"],"author":{"name":"Cassius0924"},"license":"MIT","_id":"@cassius0924/dsh-usage-dashboard@0.3.1","maintainers":[{"name":"cassius0924","email":"2670226747@qq.com"}],"homepage":"https://github.com/Cassius0924/dsh-usage-dashboard#readme","bugs":{"url":"https://github.com/Cassius0924/dsh-usage-dashboard/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-conversation"],"platform":"web","immediately":true}},"dist":{"shasum":"4ab450b86217d62f07e93159cc39e31cbd902456","tarball":"https://registry.npmjs.org/@cassius0924/dsh-usage-dashboard/-/dsh-usage-dashboard-0.3.1.tgz","fileCount":27,"integrity":"sha512-V/9oBMVMjQujW2c7jir9TXQDhMXajQOuUDPercPGGlQBfARNMtBQYFKeFV3CX8MdDYs/qcUatvt4pQJj5o/yeg==","signatures":[{"sig":"MEQCIDAmZfxz9uZhiA8nWPZ2l6rr9L7PfYSLC2p0FzZWgGkoAiB8udO8CFiYZvjQTBhVmGz4Xhv9Vi+pDngRKHXvJIM9Cw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":357297},"main":"lib/index.js","type":"module","types":"lib/types/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./package.json":"./package.json"},"gitHead":"dd498411c8f158b45c52810af8534ce178b431cc","scripts":{"build":"node build.mjs","prepare":"node build.mjs","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cassius0924","email":"2670226747@qq.com"},"repository":{"url":"git+https://github.com/Cassius0924/dsh-usage-dashboard.git","type":"git"},"_npmVersion":"11.6.2","description":"DeepSeek 额度与用量仪表盘 —— DSH (DeepSeek Harness) Web 插件：余额还能撑几天、今日/本月花了多少、哪个模型和哪个会话最贵、缓存省了多少，以及 2026-08-17 峰谷定价后的账单预估","directories":{},"_nodeVersion":"24.13.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.2.0","esbuild":"^0.25.0","typescript":"^5.6.0","@types/node":"^24.0.0","@types/react":"^18.2.0","@deepseek-ai/cordis":"^4.0.1"},"peerDependencies":{"react":"^18.2.0","@deepseek-ai/cordis":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-usage-dashboard_0.3.1_1786775374125_0.4988356119403794","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@cassius0924/dsh-usage-dashboard","version":"0.4.0","keywords":["deepseek","dsh","deepseek-harness","plugin","dashboard","usage","quota","cost","tokens"],"author":{"name":"Cassius0924"},"license":"MIT","_id":"@cassius0924/dsh-usage-dashboard@0.4.0","maintainers":[{"name":"cassius0924","email":"2670226747@qq.com"}],"homepage":"https://github.com/Cassius0924/dsh-usage-dashboard#readme","bugs":{"url":"https://github.com/Cassius0924/dsh-usage-dashboard/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation"],"platform":"web","immediately":true}},"dist":{"shasum":"c8cf6e7032219d0c6d9dce30d9a47c7374f2c599","tarball":"https://registry.npmjs.org/@cassius0924/dsh-usage-dashboard/-/dsh-usage-dashboard-0.4.0.tgz","fileCount":35,"integrity":"sha512-TKCcEcDJt0/fVPX9bhonbhEl/Gn6HwRUao6szVDRNlyU2ZakBQJLzoHlYLn3UceLEvQz1M6cb7rXyW9iuQtzqw==","signatures":[{"sig":"MEUCIC9kTUOcgXdDSJWdbNkVP5+RJQ8Rjy8wsV3atHWGxXR5AiEA5s1G9O3z8c/i1Lf6m1rCBsuYoR8/QEABb2zK569/9b4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cassius0924%2fdsh-usage-dashboard@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":693851},"main":"lib/index.js","type":"module","types":"lib/types/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./package.json":"./package.json"},"gitHead":"8e98807c59b0866941ed0cb716c750cb027f1a00","scripts":{"test":"node test/run.mjs","build":"node build.mjs","prepare":"node build.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.test.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:572353db-be3a-498a-8101-0704e006f127"}},"repository":{"url":"git+https://github.com/Cassius0924/dsh-usage-dashboard.git","type":"git"},"_npmVersion":"12.0.2","description":"DeepSeek 额度与用量仪表盘 —— DSH (DeepSeek Harness) Web 插件：余额还能撑几天、今日/本月花了多少、哪个模型和哪个会话最贵、缓存省了多少，以及 2026-08-17 峰谷定价后的账单预估","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.2.0","esbuild":"^0.25.0","typescript":"^5.6.0","@types/node":"^24.0.0","@types/react":"^18.2.0","@deepseek-ai/cordis":"^4.0.1"},"peerDependencies":{"react":"^18.2.0","@deepseek-ai/cordis":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-usage-dashboard_0.4.0_1786897120083_0.35358730277448647","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@cassius0924/dsh-usage-dashboard","version":"0.5.0","keywords":["deepseek","dsh","deepseek-harness","plugin","dashboard","usage","quota","cost","tokens"],"author":{"name":"Cassius0924"},"license":"MIT","_id":"@cassius0924/dsh-usage-dashboard@0.5.0","maintainers":[{"name":"cassius0924","email":"2670226747@qq.com"}],"homepage":"https://github.com/Cassius0924/dsh-usage-dashboard#readme","bugs":{"url":"https://github.com/Cassius0924/dsh-usage-dashboard/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation"],"platform":"web","immediately":true}},"dist":{"shasum":"821f328e968332bc0447eed142ea76e76f820a78","tarball":"https://registry.npmjs.org/@cassius0924/dsh-usage-dashboard/-/dsh-usage-dashboard-0.5.0.tgz","fileCount":37,"integrity":"sha512-gXihOsCg0QT18TuJ+4bE16v93MjlKT4Q+0m6V/uYoK+4NhKCaFK9Mlklny/52Wl6hLF2V2Wq526fZdb2pyu9Qg==","signatures":[{"sig":"MEUCIBd282rBujiLXEG9tpkRFnhbqqu4LR8P08Z3fc5iNYJ2AiEAkHt2yFDc9hwMUihXr+qUtly0gZ8YqNzWzhnb0+pBNao=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cassius0924%2fdsh-usage-dashboard@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":742338},"main":"lib/index.js","type":"module","types":"lib/types/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./package.json":"./package.json"},"gitHead":"d7bc42867a68be199f393782f6ee484d67c1b059","scripts":{"test":"node test/run.mjs","build":"node build.mjs","prepare":"node build.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.test.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:572353db-be3a-498a-8101-0704e006f127"}},"repository":{"url":"git+https://github.com/Cassius0924/dsh-usage-dashboard.git","type":"git"},"_npmVersion":"12.0.2","description":"DeepSeek 额度与用量仪表盘 —— DSH (DeepSeek Harness) Web 插件：余额还能撑几天、今日/本月花了多少、哪个模型和哪个会话最贵、缓存省了多少，以及 2026-08-17 峰谷定价后的账单预估","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.2.0","esbuild":"^0.25.0","typescript":"^5.6.0","@types/node":"^24.0.0","@types/react":"^18.2.0","@deepseek-ai/cordis":"^4.0.1"},"peerDependencies":{"react":"^18.2.0","@deepseek-ai/cordis":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-usage-dashboard_0.5.0_1787121859737_0.14611652040394896","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@cassius0924/dsh-usage-dashboard","version":"0.6.0","description":"DeepSeek 额度与用量仪表盘 —— DSH (DeepSeek Harness) Web 插件：余额还能撑几天、今日/本月花了多少、哪个模型和哪个会话最贵、图片/多模态用量、缓存省了多少、高峰挪到闲时能省多少","keywords":["deepseek","dsh","deepseek-harness","plugin","dashboard","usage","quota","cost","tokens"],"homepage":"https://github.com/Cassius0924/dsh-usage-dashboard#readme","repository":{"type":"git","url":"git+https://github.com/Cassius0924/dsh-usage-dashboard.git"},"bugs":{"url":"https://github.com/Cassius0924/dsh-usage-dashboard/issues"},"author":{"name":"Cassius0924"},"type":"module","main":"lib/index.js","types":"lib/types/index.d.ts","exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./package.json":"./package.json"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"platform":"web","immediately":true,"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation"]}},"scripts":{"build":"node build.mjs","test":"node test/run.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.test.json","prepare":"node build.mjs"},"license":"MIT","engines":{"node":">=20"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.0","react":"^18.2.0"},"devDependencies":{"@deepseek-ai/cordis":"^4.0.1","@types/node":"^24.0.0","@types/react":"^18.2.0","esbuild":"^0.25.0","react":"^18.2.0","typescript":"^5.6.0"},"publishConfig":{"access":"public"},"gitHead":"edf7c0ac8f73cbf5149792974e4917da6920e73e","_id":"@cassius0924/dsh-usage-dashboard@0.6.0","_nodeVersion":"22.23.2","_npmVersion":"12.0.2","dist":{"integrity":"sha512-dHNoE4Xi6PckYePBbZOQgZNSAJ21jsUQPoAajGNQt4a0s0mB07zErnmSetYkLkvgUH2Nox9/+idO2C3yoK1iOA==","shasum":"106937952b8a8655587f05fcde10fcec41c45cb6","tarball":"https://registry.npmjs.org/@cassius0924/dsh-usage-dashboard/-/dsh-usage-dashboard-0.6.0.tgz","fileCount":37,"unpackedSize":805871,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cassius0924%2fdsh-usage-dashboard@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCID6W3ruVAsSmLjy5MrlRobapLl1qVz/axhtRtf3TpMs+AiEA36JMJr+mOpWi3rqSy/MlLw76JVS0B90n7wp/EFKk1LQ="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:572353db-be3a-498a-8101-0704e006f127"}},"directories":{},"maintainers":[{"name":"cassius0924","email":"2670226747@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-usage-dashboard_0.6.0_1789034417077_0.3922925115570859"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-15T05:40:01.503Z","modified":"2026-09-10T10:00:17.742Z","0.3.0":"2026-08-15T05:40:01.838Z","0.3.1":"2026-08-15T06:29:34.264Z","0.4.0":"2026-08-16T16:18:40.241Z","0.5.0":"2026-08-19T06:44:19.891Z","0.6.0":"2026-09-10T10:00:17.242Z"},"bugs":{"url":"https://github.com/Cassius0924/dsh-usage-dashboard/issues"},"author":{"name":"Cassius0924"},"license":"MIT","homepage":"https://github.com/Cassius0924/dsh-usage-dashboard#readme","keywords":["deepseek","dsh","deepseek-harness","plugin","dashboard","usage","quota","cost","tokens"],"repository":{"type":"git","url":"git+https://github.com/Cassius0924/dsh-usage-dashboard.git"},"description":"DeepSeek 额度与用量仪表盘 —— DSH (DeepSeek Harness) Web 插件：余额还能撑几天、今日/本月花了多少、哪个模型和哪个会话最贵、图片/多模态用量、缓存省了多少、高峰挪到闲时能省多少","maintainers":[{"name":"cassius0924","email":"2670226747@qq.com"}],"readme":"# dsh-usage-dashboard\n\n[![npm](https://img.shields.io/npm/v/@cassius0924/dsh-usage-dashboard?color=cb3837&logo=npm)](https://www.npmjs.com/package/@cassius0924/dsh-usage-dashboard)\n[![license](https://img.shields.io/npm/l/@cassius0924/dsh-usage-dashboard?color=blue)](./LICENSE)\n\n在 [DSH](https://github.com/deepseek-ai)（DeepSeek Harness）的 Web GUI 里，随时看得见 DeepSeek 的钱花在哪：\n**余额还能撑几天、今天花了多少、哪个模型最贵、缓存替你省了多少、钱里有多少来自图片**，以及峰谷定价生效后把任务挪到闲时能省多少。\n\n![dsh-usage-dashboard](docs/hero.png)\n\n装上之后 GUI 里多两样东西：右下角一个可拖动的**悬浮额度窗**，顶部栏多一个**「额度」tab**。\n界面支持中文与 English，直接跟随 DSH 全局的「Settings → Language」设置；切换无需刷新，选择由 DSH 持久化。\n\n---\n\n## 为什么需要它\n\n用 DSH 跑 agent，钱是一点一点漏掉的，而 DSH 自己不会告诉你：\n\n| 你真正想知道的 | 装之前 |\n|---|---|\n| 余额还能用几天？ | 只有一个余额数字 |\n| 今天花了多少？这个月呢？ | 只有「累计」，没有时间感 |\n| 钱花在哪个模型上？ | 不知道 |\n| 缓存到底帮我省了多少？ | 完全看不到 |\n| 钱里有多少来自图片？ | 多模态模型上线后更是看不见 |\n| 高峰时段多付了多少？ | 只能自己算 |\n\n这个插件把这些问题逐个翻译成一眼能看懂的数字。**费用全部为估算**，算法与单价公开可查（见[费用是怎么算的](#费用是怎么算的)）。\n\n---\n\n## 悬浮额度窗\n\n<img src=\"docs/widget.png\" width=\"300\" alt=\"悬浮额度窗\">\n\n常驻右下角，不打断你干活：\n\n- 余额 + **今日消耗**，一眼就够。\n- 可拖动，松手自动吸附四角；边界避开侧边栏、右侧详情面板、会话顶栏和输入框——**不会挡住发送按钮**。\n- 可收起成一行；**显示/隐藏、所在角落、收起状态都会记住**，刷新页面后原样回来。\n- 余额跌破预警线时，状态点和余额数字一起转成警示色。\n- 60 秒自动刷新余额。今日消耗读共享缓存，点 ↻ 同时刷新两者。\n- 插件加载时就把余额和用量预取到缓存里，所以打开「额度」tab 通常是秒开，\n  不用等那几秒的会话日志重放；预取失败不报错，交给各自挂载时再取。\n\n## 「额度」仪表盘\n\n### 余额：还能撑几天\n\n<img src=\"docs/balance.png\" width=\"720\" alt=\"账户余额与可用天数\">\n\n「还剩多少钱」不解决余额焦虑，「还能用几天」才行。按近 7 个自然日（含没用的日子）的日均消耗折算，hover 能看到估算口径；不足 3 天转红。\n\n### 今日 / 本月花了多少 —— 以及这个数怎么来的\n\n<img src=\"docs/overview.png\" width=\"860\" alt=\"消耗概览与计价说明\">\n\n今日、本月、累计三个窗口，今日带「较昨日」、本月带「较上月同期」环比（**上月同期**而不是上月整月，免得月初总是显得便宜）。\n\n展开**计价说明**能看到费用估算实际套用的单价表——估算不该是个黑箱。\n\n### 高峰时段多付了多少\n\n<img src=\"docs/peak.png\" width=\"860\" alt=\"高峰 / 闲时分布\">\n\nDeepSeek 从 2026-08-17 00:00 起改峰谷定价，高峰（北京时间 09:00–12:00、14:00–18:00）价格是闲时的两倍。\n\n这张卡告诉你用量落在峰谷两侧的比例，以及**如果高峰用量都挪到闲时能省多少**——批量、可延后的任务放到闲时跑，同样的 token 只要一半的钱。\n\n### 缓存替你省了多少\n\n<img src=\"docs/cache.png\" width=\"860\" alt=\"缓存命中与节省\">\n\n前缀缓存的命中价只有未命中价的百分之一量级，是 DSH 这类高重复 prompt 负载上**最大的省钱杠杆**——上图这份用量实付 ¥14.64，缓存省下了 ¥458.15。\n\n命中率掉到 60% 以下时，文案会换成怎么把它救回来的建议。\n\n### 钱里有多少来自图片\n\n> 截图待补拍：当前机器没有真实图片用量时，卡片显示的是空态，以下先以文字说明功能。\n\n`deepseek-v4-flash-vision-exp` 上线后，图片按尺寸折算成 token 与文本一并计费，但「看了一堆截图」和「纯文本」在账单里长得一模一样。\n\n这张卡重放会话日志时顺手数出图片：用户消息里的附件和 tool result 里的截图都会统计（不用读附件本体，日志里就有宽高）。每组数字给出**图片张数、按官方换算规则估算的 token 与费用，以及占窗口输入 / 费用的比例**，旁边是每天图片数的趋势和「图片最多的会话」排行——一个不停刷截图的循环会话，在这里一眼就能认出来。\n\n图片归属到随后一次模型调用，按该调用的时段与模型单价估算；实际 token 数以接口返回的用量为准。\n\n### 钱花在哪个模型上\n\n<img src=\"docs/models.png\" width=\"860\" alt=\"模型成本排行\">\n\n按费用降序，带占比条和输入/输出/缓存拆分。模型配色在排行、下拉选择器和图表图例三处一致。\n\n### 哪个会话最烧钱\n\n<img src=\"docs/sessions.png\" width=\"860\" alt=\"会话成本排行\">\n\n按模型、按天的视图告诉你「花在什么上」和「什么时候花的」；这张告诉你**是哪一次跑掉的**——对 agent 用户来说，这是唯一能直接动手改的东西：一个特别贵的会话，通常意味着一段值得看看的 prompt 或一个没收住的循环。上图里一个会话就占了总花费的 77.8%。\n\n会话标题直接从会话日志里读（`session/title` 事件），跟用量重放搭同一趟车，不额外读盘。\n\n### 用量的时间分布\n\n<img src=\"docs/charts.png\" width=\"860\" alt=\"逐天柱状图与热力图\">\n\n近 30 天逐天、0–23 点逐小时（可按模型多选过滤，叠成分组柱状图），外加近 12 周热力图。hover 立刻出 tooltip，不用等系统那一秒。\n\n### 余额预警\n\n<img src=\"docs/alert.png\" width=\"860\" alt=\"余额低预警警示条\">\n\n在「设置」里定一条预警线（默认 ¥10，填 0 关闭）。跌破时仪表盘顶部出现警示条——带上还能撑几天和充值入口——同时悬浮窗一起转警示色，两边不会各说各话：\n\n<img src=\"docs/widget-low.png\" width=\"300\" alt=\"悬浮窗的警示态\">\n\n---\n\n## 安装\n\n标准 DSH 插件包（bundle + client 双面包），用 `dsh plugin` 装：\n\n```sh\n# 从 npm 安装\ndsh plugin --profile web add @cassius0924/dsh-usage-dashboard\n\n# 或从 GitHub（git 依赖会跑 prepare 脚本现场构建）\ndsh plugin --profile web add github:Cassius0924/dsh-usage-dashboard\n\n# 或本地 checkout\ndsh plugin --profile web add ./path/to/dsh-usage-dashboard\n```\n\n然后**重启 dsh**（`dsh --profile web`）生效。\n\n前提：\n\n- 已配置 `DEEPSEEK_API_KEY`（「设置 → 模型」里填，或放在 `$DSH_HOME/.credentials.yaml`）——余额接口要用。\n- 本机有 pnpm（`dsh plugin` 是 pnpm 的转发器）。\n\n装好后打开 GUI，**进入任意一个会话**（「额度」tab 挂在 `conversation.view` 上，New Session 首页没有 tab 栏），顶部就能看到 `Chat / Trajectory / 额度`。\n\n> 兼容性：同时支持两代宿主接口——旧版 `readFrom(id, 0)` 与新版 handle 化 `open(id, 'read')` / `read` / `close`。\n> 宿主升级到移除 `readFrom` 的版本后，插件无需更换版本，会话日志照常重放。\n\n## 费用是怎么算的\n\n费用是**估算**，不是账单。规则都在 [`src/pricing.ts`](src/pricing.ts) 一个文件里：\n\n- 逐条用量记录按「**模型** + **是否落在高峰时段** + **当时的价目表**」计价，而不是全局一套价。\n- 2026-08-17 00:00（北京时间）之前按旧的固定价；之后按峰谷价，闲时为高峰的一半。\n- 2026-09-10 12:00 起 Flash 系列降价（V4.1-Flash），高峰时段同时收紧为**周一至周五**。\n- 2026-09-14 12:00 起 `deepseek-v4-pro` 的请求由 V4.1-Flash 承接，按 Flash 价计费。\n- 高峰时段按**北京时间**判定，不随机器时区漂移。\n- 未识别的模型按 `deepseek-v4-pro`（较贵的一侧）计价。\n\n单价（CNY / 百万 tokens，与官方价目表的两档一致）：\n\n| 模型 | 时段 | 输入·缓存命中 | 输入·未命中 | 输出 |\n|---|---|---|---|---|\n| deepseek-flash | 高峰 / 闲时 | 0.04 / 0.02 | 2 / 1 | 8 / 4 |\n| deepseek-v4-pro | 高峰 / 闲时 | 0.3 / 0.15 | 9 / 4.5 | 27 / 13.5 |\n\n`deepseek-v4-flash`、`deepseek-v4-flash-vision-exp` 是旧模型名，现由 `deepseek-flash` 承接、按 Flash 价计费；2026-09-14 12:00 起 `deepseek-v4-pro` 的请求也路由到 V4.1-Flash，按 Flash 价计费。历史各时期单价：08-17 前 pro 0.025/3/6、flash 0.02/1/2；08-17 – 09-10 12:00 的 flash 高峰 0.1/3/9、闲时 0.05/1.5/4.5。\n\n图片不另外收费，而是按尺寸折算成 token 与文本一并计费：官方规则是先把图片按比例缩放到 ~800×800（小于 ~384×384 的放大），token 与缩放后面积成正比、每张上限 384 tokens。多模态卡的估算就套这条规则。\n\nDeepSeek 再调价时，只改这张表。\n\n## 开发 / 构建\n\n```sh\npnpm install\npnpm test           # Node 内置测试运行器：计价、缓存、信任围栏与用量聚合\npnpm run build      # esbuild 出 lib/index.js（host）+ lib/client.js（client），再 tsc 出类型\npnpm run typecheck\n```\n\n产物：\n\n- `lib/index.js` —— Host 半（ESM，Node），注册 `/api/dsh-usage-dashboard/*` 路由。\n- `lib/client.js` —— Client 半（CJS 闭包），通过 `window.__ModuleLoader__` 注册进 web 启动图。\n\n改动生效方式不同：只改 `src/client/**` 时，浏览器硬刷新（Ctrl/Cmd+Shift+R）即可；改了 `src/index.ts` 等 host 端要重启 dsh。\n\n```\nsrc/\n├── index.ts        # Host 半入口（webServer 路由 + TTL 记忆化）\n├── usage.ts        # 余额 + 用量聚合（按天/小时/模型/峰谷分桶）\n├── pricing.ts      # 价目表与费用估算（唯一改价的地方）\n├── contract.ts     # host ↔ client 的 wire 类型\n├── trust-fence.ts  # 浏览器信任校验\n└── client/\n    ├── index.tsx   # Client 半入口（slots 注册）\n    ├── widget.tsx  # 悬浮额度窗\n    ├── dashboard.tsx # 「额度」tab\n    ├── charts.tsx  # 柱状图 / 热力图 / tooltip\n    ├── locales.ts  # 中英文完整词典\n    ├── i18n.tsx    # DSH locale 桥接与翻译上下文\n    ├── styles.ts   # 全部样式\n    ├── api.ts      # fetch + 客户端缓存\n    ├── cache.ts    # TTL 缓存（含 localStorage 持久化）\n    ├── prefs.ts    # 用户设置持久化\n    └── store.ts    # 两个界面共享的设置\n```\n\n样式全部走 DSH 自己的 `--dsw-alias-*` CSS 变量，跟随宿主主题，不引入独立配色。\n\n## 已知限制\n\n- 用量数据来自**本机** DSH 会话日志，不含其它机器/账户的用量。\n- 费用是估算：不含 DeepSeek 侧的折扣、赠金消耗顺序等因素，以官方账单为准。\n- 图片 token 按官方换算规则估算，且把图片归属到随后一次模型调用；若缺少图片宽高或图片后没有成功的调用，则不纳入估算（无调用即无计费）。\n- 首次加载用量需要重放全部会话日志（本机实测约 5 秒），因此有 5 分钟的服务端记忆化；界面在此期间显示骨架屏。\n\n## License\n\n[MIT](./LICENSE)\n","readmeFilename":"README.md"}