dsh-spendingframe 0.2.3 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -2
- package/client/client.js +8 -2
- package/lib/index.js +1 -1
- package/lib/session-logs.js +1 -1
- package/lib/summary.js +1 -1
- package/package.json +1 -1
- package/tests/balance-probe.mjs +1 -1
- package/tests/client-harness-test.mjs +2 -2
package/README.md
CHANGED
|
@@ -27,7 +27,7 @@ right next to DSH's context usage pill.
|
|
|
27
27
|
- **今日花费**:北京时间自然日内的全部会话合计。
|
|
28
28
|
- **跟随宿主**:颜色、字号、字体全部取用 DSH 自己的设计 token,跟随主题与字号设置。
|
|
29
29
|
- **原生手感**:与同排的「上下文使用情况」同一套交互 —— 悬停出小气泡,点击出完整明细。
|
|
30
|
-
-
|
|
30
|
+
- **零配置**:装好即用,每分钟自动刷新,也随页面重新加载立即刷新。
|
|
31
31
|
|
|
32
32
|
## 交互
|
|
33
33
|
|
|
@@ -175,7 +175,7 @@ right next to DSH's context usage pill.
|
|
|
175
175
|
```json
|
|
176
176
|
{
|
|
177
177
|
"ok": true, "at": 1791697077790, "peak": false, "window": "空闲时段",
|
|
178
|
-
"nextChangeInMs": 69721543, "version": "0.2.
|
|
178
|
+
"nextChangeInMs": 69721543, "version": "0.2.4",
|
|
179
179
|
"session": {
|
|
180
180
|
"found": true, "id": "session-79fa1914-…", "cost": 1.611052, "calls": 112,
|
|
181
181
|
"tokens": { "hit": 12345, "miss": 6789, "out": 4321 }, "lastAt": 1791697070000,
|
|
@@ -218,6 +218,7 @@ npm run test:real # 额外读本机会话日志,断言真实血缘与金额(
|
|
|
218
218
|
| 0.2.1 | 悬停只显示两项消耗与统计时间,完整明细改为点击弹出,对齐原生「上下文使用情况」;悬停延迟、明细色块等细节与原生一致 |
|
|
219
219
|
| 0.2.2 | 发布到 npm:包名改为 `dsh-spendingframe`(原 `dshbalance` 被 npm 判定与已有的 `dsh-balance` 过于相似),只读路由随之改为 `/dsh-spendingframe/summary` |
|
|
220
220
|
| 0.2.3 | 名字全仓统一为 `dsh-spendingframe`:源码目录、README 标题、面板页脚、日志前缀不再使用旧品牌名 |
|
|
221
|
+
| 0.2.4 | 刷新间隔由 5 分钟缩短到 1 分钟(数据源是本地会话日志,落盘即带用量,所以缩短间隔真的能更快看到变化) |
|
|
221
222
|
|
|
222
223
|
## 许可
|
|
223
224
|
|
package/client/client.js
CHANGED
|
@@ -37,8 +37,14 @@ window.__ModuleLoader__.load({
|
|
|
37
37
|
const name = 'dsh-spendingframe'
|
|
38
38
|
/** 只依赖插槽服务。 */
|
|
39
39
|
const inject = ['slots']
|
|
40
|
-
/**
|
|
41
|
-
|
|
40
|
+
/**
|
|
41
|
+
* 刷新间隔:1 分钟。
|
|
42
|
+
*
|
|
43
|
+
* 数据源是本地会话日志(`session.v4.jsonl.zstd`),每条 `assistant/message`
|
|
44
|
+
* 一落盘就带着 usage,所以这里只受轮询间隔限制;DeepSeek 开放平台账单页那个
|
|
45
|
+
* 「可能延迟 5 分钟」说的是它自己的统计服务,与本插件无关。
|
|
46
|
+
*/
|
|
47
|
+
const REFRESH_MS = 60 * 1000
|
|
42
48
|
/** 宿主路由。 */
|
|
43
49
|
const ROUTE = '/dsh-spendingframe/summary'
|
|
44
50
|
/** 悬停多久后浮出小气泡(原生 ContextMeter 的 Tooltip 用的是 delayMs: 200)。 */
|
package/lib/index.js
CHANGED
package/lib/session-logs.js
CHANGED
package/lib/summary.js
CHANGED
package/package.json
CHANGED
package/tests/balance-probe.mjs
CHANGED
|
@@ -63,7 +63,7 @@ console.log('周一 17:00 距下一次切换 =', msUntilNextChange(bj('2026-10-1
|
|
|
63
63
|
// --- 版本号与 package.json 一致 -------------------------------------------
|
|
64
64
|
const pkg = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8'))
|
|
65
65
|
check('VERSION 与 package.json 一致', VERSION, pkg.version)
|
|
66
|
-
check('package.json 已是 v0.2.
|
|
66
|
+
check('package.json 已是 v0.2.4', pkg.version, '0.2.4')
|
|
67
67
|
|
|
68
68
|
// --- 本机真实数据(--real 才跑)-------------------------------------------
|
|
69
69
|
const now = Date.now()
|
|
@@ -212,7 +212,7 @@ function textOf(node) {
|
|
|
212
212
|
|
|
213
213
|
// --- canned payloads ------------------------------------------------------
|
|
214
214
|
const peakPayload = {
|
|
215
|
-
ok: true, at: Date.parse('2026-10-12T02:00:00Z'), peak: true, window: '高峰时段', version: '0.2.
|
|
215
|
+
ok: true, at: Date.parse('2026-10-12T02:00:00Z'), peak: true, window: '高峰时段', version: '0.2.4',
|
|
216
216
|
session: {
|
|
217
217
|
cost: 0.434705, calls: 60,
|
|
218
218
|
own: { cost: 0.3, calls: 57, tokens: { hit: 120000, miss: 4000, out: 900 } },
|
|
@@ -301,7 +301,7 @@ check('subagent row', rowMap['子智能体消耗'], '¥0.135(2 个会话 / 3
|
|
|
301
301
|
check('today row', rowMap['今日消耗'], '¥1.21(2 个会话 / 91 次调用)')
|
|
302
302
|
check('own token row', rowMap['本会话 Token'], '命中 120K / 未命中 4K / 输出 900')
|
|
303
303
|
check('model row', rowMap['模型'], 'deepseek-flash ¥0.435(60 次)')
|
|
304
|
-
contains('panel footer carries the version', textOf(footer), 'dsh-spendingframe v0.2.
|
|
304
|
+
contains('panel footer carries the version', textOf(footer), 'dsh-spendingframe v0.2.4')
|
|
305
305
|
check('panel carries the full breakdown, not just the hover lines', [panelText.includes('今日消耗'), panelText.includes('计费时段'), panelText.includes('统计更新时间')], [true, true, true])
|
|
306
306
|
|
|
307
307
|
// --- 4. dismissal ---------------------------------------------------------
|