dsh-cost-meter 1.7.47 → 1.7.48
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 +6 -6
- package/README.zh-CN.md +6 -6
- package/lib/backfill.js +9 -3
- package/lib/client.js +5 -5
- package/lib/index.js +4 -0
- package/lib/native-search-billing.js +28 -2
- package/lib/turn-cost.js +71 -0
- package/lib/typert.host.js +20 -0
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
|
|
9
9
|
Per-conversation cost · daily totals · OpenCode Go subscription quota display · budget with usage percentage · official account balance · custom provider balance · balance progress bar · history · peak/off-peak pricing hours display (peak hours UTC 01:00–04:00, 06:00–10:00; weekends and Chinese public holidays are off-peak all day, with separate labels) · pre-switch popup & system-notification alerts for peak/off-peak changes (position / lead time / alert type configurable) · one-click price sync from the official docs · Codex-style token usage heat grid · multi-vendor model pricing (built-in 90+ model price catalog with auto-matching) · mainstream Coding Plan quota queries & display (Anthropic / Z.ai / MiniMax / Kimi / OpenRouter / SiliconFlow / CommandCode / SCNet / Volcano Ark / Qwen / Xiaomi MiMo) plan/API dual-track billing (subscription quota vs pay-as-you-go money separated, per-1% & full-window token/equivalent-cost estimates with daily/weekly/monthly curves) · · quota strip above the input box (budget / Go / coding-plan usage in one row, toggleable)
|
|
10
10
|
|
|
11
|
-
[](https://github.com/Han-1413141/dsh-cost-meter)
|
|
12
12
|
|
|
13
|
-
**v1.7.
|
|
13
|
+
**v1.7.48** adds expandable costs for each turn and individual call: model responses, context compaction and native search, with token × price details, eight-decimal precision and separate API/Plan amounts. Search billing also captures saved methods that bypass its wrapper. See the [release notes](docs/release-notes/v1.7.48.md).
|
|
14
14
|
|
|
15
15
|
Desktop users: follow the [Desktop installation instructions](docs/install-troubleshooting.md#desktop-安装与更新) for the application's own CLI and `desktop` Profile.
|
|
16
16
|
|
|
@@ -319,22 +319,22 @@ On Node.js 20, use `npm install -g pnpm@10` instead. See [pnpm installation and
|
|
|
319
319
|
dsh plugin --profile web add dsh-cost-meter
|
|
320
320
|
```
|
|
321
321
|
|
|
322
|
-
**PowerShell one-click script** (copy the whole line, paste, press Enter; pnpm is provisioned automatically, git is auto-detected — no clone needed; the install chain is **pinned to the release tag `v1.7.
|
|
322
|
+
**PowerShell one-click script** (copy the whole line, paste, press Enter; pnpm is provisioned automatically, git is auto-detected — no clone needed; the install chain is **pinned to the release tag `v1.7.48`** — review the script before running):
|
|
323
323
|
|
|
324
324
|
```powershell
|
|
325
|
-
irm https://raw.githubusercontent.com/Han-1413141/dsh-cost-meter/v1.7.
|
|
325
|
+
irm https://raw.githubusercontent.com/Han-1413141/dsh-cost-meter/v1.7.48/install.ps1 | iex
|
|
326
326
|
```
|
|
327
327
|
|
|
328
328
|
**Or a plain command line** (the machine must already have pnpm and git; also pinned to the tag):
|
|
329
329
|
|
|
330
330
|
```sh
|
|
331
|
-
dsh plugin --profile web add github:Han-1413141/dsh-cost-meter#v1.7.
|
|
331
|
+
dsh plugin --profile web add github:Han-1413141/dsh-cost-meter#v1.7.48
|
|
332
332
|
```
|
|
333
333
|
|
|
334
334
|
Without git, use the GitHub tag archive:
|
|
335
335
|
|
|
336
336
|
```sh
|
|
337
|
-
dsh plugin --profile web add https://github.com/Han-1413141/dsh-cost-meter/archive/refs/tags/v1.7.
|
|
337
|
+
dsh plugin --profile web add https://github.com/Han-1413141/dsh-cost-meter/archive/refs/tags/v1.7.48.tar.gz
|
|
338
338
|
```
|
|
339
339
|
|
|
340
340
|
After installing, **restart** `dsh web` (plugin rows, the Typert manifest and the client bundle are all scanned at startup):
|
package/README.zh-CN.md
CHANGED
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
|
|
9
9
|
本会话费用 · 当日费用 · OpenCode Go 订阅额度显示 · 预算与已用百分比 · 官方账户余额 · 自定义 Provider 余额查询(可配任意 HTTP 端点) · 余额三段进度条 · 历史记录 · 峰谷计价时段显示(UTC 01:00–04:00、06:00–10:00 为峰时段;周末与中国法定假日全天按谷价,分别标注) · 峰/谷切换前弹窗与系统通知提醒(位置/提前量/提醒类型可配) · 官方价格一键同步 · 类 Codex Token 用量热图 · 多厂商多模型价格计费(内置 90+ 模型价格目录与自动匹配) · 主流 Coding Plan 额度查询与显示(Anthropic / Z.ai / MiniMax / Kimi / OpenRouter / SiliconFlow / CommandCode / SCNet / 火山方舟 / 千问 / 小米 MiMo 十一家,含 Volcano Ark AK/SK 签名与 MiMo 控制台 Cookie 查询) · Plan/API 双轨计费(订阅额度与按量金额分离统计,每 1% 额度与满窗的 token/等值金额估算及日/周/月曲线) · 输入框上方额度横条(预算/Go/Coding Plan 用量一条横排显示,可开关)
|
|
10
10
|
|
|
11
|
-
[](https://github.com/Han-1413141/dsh-cost-meter)
|
|
12
12
|
|
|
13
|
-
**v1.7.
|
|
13
|
+
**v1.7.48**:费用细化到每轮及单次调用,区分模型回复、上下文压缩、原生搜索,列出各类 Token × 单价,金额最多显示八位小数,并分开显示 API 与 Plan 等值费用。搜索计费也覆盖已保存方法绕过包装器的路径。详见[更新说明](docs/release-notes/v1.7.48.md)。
|
|
14
14
|
|
|
15
15
|
桌面端用户请按 [Desktop 安装说明](docs/install-troubleshooting.md#desktop-安装与更新),使用应用自带的 CLI 和 `desktop` Profile。
|
|
16
16
|
|
|
@@ -319,22 +319,22 @@ Node.js 20 请改用 `npm install -g pnpm@10`。版本要求见 [pnpm 官方安
|
|
|
319
319
|
dsh plugin --profile web add dsh-cost-meter
|
|
320
320
|
```
|
|
321
321
|
|
|
322
|
-
**PowerShell 一键脚本**(复制整行粘贴回车;自动补齐 pnpm、自动探测 git,无需克隆仓库;安装链**固定到发布 tag `v1.7.
|
|
322
|
+
**PowerShell 一键脚本**(复制整行粘贴回车;自动补齐 pnpm、自动探测 git,无需克隆仓库;安装链**固定到发布 tag `v1.7.48`**,建议先下载审阅再运行):
|
|
323
323
|
|
|
324
324
|
```powershell
|
|
325
|
-
irm https://raw.githubusercontent.com/Han-1413141/dsh-cost-meter/v1.7.
|
|
325
|
+
irm https://raw.githubusercontent.com/Han-1413141/dsh-cost-meter/v1.7.48/install.ps1 | iex
|
|
326
326
|
```
|
|
327
327
|
|
|
328
328
|
**或直接命令行**(机器上需已有 pnpm 与 git;同样固定到 tag):
|
|
329
329
|
|
|
330
330
|
```sh
|
|
331
|
-
dsh plugin --profile web add github:Han-1413141/dsh-cost-meter#v1.7.
|
|
331
|
+
dsh plugin --profile web add github:Han-1413141/dsh-cost-meter#v1.7.48
|
|
332
332
|
```
|
|
333
333
|
|
|
334
334
|
没有 git 时可用 GitHub tag 打包直链:
|
|
335
335
|
|
|
336
336
|
```sh
|
|
337
|
-
dsh plugin --profile web add https://github.com/Han-1413141/dsh-cost-meter/archive/refs/tags/v1.7.
|
|
337
|
+
dsh plugin --profile web add https://github.com/Han-1413141/dsh-cost-meter/archive/refs/tags/v1.7.48.tar.gz
|
|
338
338
|
```
|
|
339
339
|
|
|
340
340
|
安装后**重启** `dsh web`(插件行、Typert 清单与客户端 bundle 均在启动时扫描):
|
package/lib/backfill.js
CHANGED
|
@@ -301,7 +301,8 @@ async function* sessionBillingRecords(ledger, sessionsRoot, onlySessionIds = nul
|
|
|
301
301
|
* @param wantDates - 只统计这些日期键(YYYY-MM-DD)内的调用;null = 全部。
|
|
302
302
|
* @returns { sessionId, title, createdAt, days, seedDays }。
|
|
303
303
|
*/
|
|
304
|
-
export function replaySessionRecords(records, config, wantDates = null) {
|
|
304
|
+
export function replaySessionRecords(records, config, wantDates = null, collectSamples = false) {
|
|
305
|
+
const samples = collectSamples ? new Map() : null
|
|
305
306
|
const zeroBuckets = () => ({ input: 0, output: 0, cacheRead: 0, cacheWrite: 0, reasoning: 0, calls: 0, cost: 0, apiCost: 0 })
|
|
306
307
|
const num = value => {
|
|
307
308
|
const n = Number(value)
|
|
@@ -501,16 +502,21 @@ export function replaySessionRecords(records, config, wantDates = null) {
|
|
|
501
502
|
const cost = usdFromCost(priced, resolved.currency, config?.exchangeRate)
|
|
502
503
|
// Plan/API 双轨分类(issue #64):与 store.account() 同一分类器,回放条目
|
|
503
504
|
// 的 apiCost 只含真金白银部分(plan 类金额仅记等值);传 prices 供路由判定。
|
|
504
|
-
const
|
|
505
|
+
const plan = billingClassOf(effectiveProvider, sampleModel, config?.planBilling, enabledPlanSetOf(config), config?.prices) === 'plan'
|
|
506
|
+
const apiCost = plan ? 0 : cost
|
|
505
507
|
const providerKey = `${effectiveProvider}:${sampleModel}`
|
|
506
508
|
// 聚合目标按事件分段路由;被替换的旧样本从它当时所在的段扣回(与旧版
|
|
507
509
|
// 单流先减后加的净效果一致,仅种子段的量落到 seedDays 而非 days)。
|
|
508
510
|
if (prev !== null) shift(prev, -1, prev.seed ? seedDays : days)
|
|
509
511
|
const sample = { key, date, providerKey, buckets, cost, apiCost, seed: isSeed }
|
|
512
|
+
if (samples) {
|
|
513
|
+
if (prev) samples.delete(prev)
|
|
514
|
+
samples.set(sample, { ...sample, atMs, provider: effectiveProvider, model: sampleModel, resolved, peak, plan, kind: isCompaction ? 'compaction' : isNativeSearch ? 'search' : 'model' })
|
|
515
|
+
}
|
|
510
516
|
shift(sample, 1, isSeed ? seedDays : days)
|
|
511
517
|
if (!isNativeSearch) last = sample
|
|
512
518
|
}
|
|
513
|
-
return { sessionId, title, createdAt, days, seedDays }
|
|
519
|
+
return { sessionId, title, createdAt, days, seedDays, ...(samples ? { samples: [...samples.values()] } : {}) }
|
|
514
520
|
}
|
|
515
521
|
|
|
516
522
|
/**
|