Skip to content

Releases: guojinpeng/dsh-cost-meter

v0.4.7

Choose a tag to compare

@guojinpeng guojinpeng released this 22 Oct 08:10

主要更新

1. 费用口径三处跟随

费用趋势的“总费用 / 总 Token”切换,现在同时决定另外三块的统计口径:

  • “费用 & Token 构成”的圆环、百分比改为 Token 占比;
  • “时段分布”的进度条、数值与标题改为按 Token 占比;
  • “模型费用”的占比列表与提示改为按 Token 占比。

不再各自写死费用口径。费用模式下若全部模型都未定价,沿用 Token 占比兜底。

2. 趋势柱可点击筛选

点击费用趋势的任意柱子,按该柱覆盖的时间回填上方自定义日期范围并立即重新统计:

  • 单日柱:起始 = 结束 = 当天;
  • 合并柱:起始 = 首日,结束 = 末日;
  • 按月粒度(长时间范围):填该月首末日。

回填后会自动清除预设范围(今天/7 天/30 天/90 天/全部)的选中态。

3. 模型费用散点图

模型费用默认显示散点图,标题右侧可切回原来的占比列表。

  • 横轴:模型总消费,对数刻度,量程右端取到 1/2/5 整数档,并为名称留出空间。
  • 纵轴:Token 消耗,顶端取整后均分 4 个刻度。
  • 气泡:固定 16px,不随费用缩放;颜色按每 1M token 均价由浅青渐变到深靛,越浅越便宜。
  • 名称:固定显示在气泡右上角;坐标轴范围已为最长名称预留空间。
  • 图例:绘图区下方按供应商分组列出所有用过的模型,点击名称可隐藏或显示对应气泡,隐藏时坐标轴范围不变。
  • 读数:十字准线与两轴数值跟随指针,读数画在绘图区内侧;提示框自动夹在绘图区内,列出该模型四类 token 的费用与 token、合计,以及每 1M token 的均价。
  • 重叠气泡:指针同时压住多个气泡时,提示按由近到远上下排列每个模型的明细。

4. 修复侧线程继承转录重复计费

侧线程(“Side: New thread”)和继承上下文的子智能体会把父会话的完整转录写进自己的日志。过去这部分被当成子会话自己的消费,导致:

  • “费用最高的会话”出现标题不同、金额却与父会话完全相同的重复行;
  • 总费用、总 Token 偏高。

修复后计费投影在日志的 session/end-seed(inherited: true)处重置,只统计种子之后的真实用量。种子之后仍有真实用量的会话会保留自己那部分。

5. 其它修复

  • 修复散点图气泡在浅色主题下完全不显示(引用了不存在的颜色变量)。
  • 横轴刻度过于接近时只保留靠右的一个;纵轴顶端不再出现 88.33M 这类小数。
  • 十字准线读数移入绘图区内侧,不再压住坐标轴刻度。

升级

0.4.6 → 0.4.7 不需要迁移配置。以下缓存会自动失效并重算:

  • 计费投影状态版本 4 → 5;
  • overview 缓存格式 1 → 2。

升级后第一次打开费用统计页会重新折叠历史日志,耗时与首次安装相同。总费用和会话数会比之前低一些,差额就是此前重复计入的继承转录。工作区里有侧线程使用记录时才会看到这个差别。

dsh plugin update @guojinpeng/dsh-cost-meter

验证

  • 切换费用趋势的“总费用 / 总 Token”,构成、时段分布、模型费用三处的百分比与进度条应同步切换。
  • 点击趋势中的单日柱和合并柱,上方日期应被回填并触发查询。
  • 模型费用默认显示散点图;悬停圆点出现明细与均价;点击图例名称可隐藏、再点击恢复。
  • 把指针移到两个重叠气泡上,提示应上下列出两个模型的明细。
  • 费用最高的会话列表中不应再出现金额与父会话相同、标题为侧线程的行。

v0.4.6

Choose a tag to compare

@guojinpeng guojinpeng released this 22 Oct 02:14

主要更新

日均费用按有费用天数计算

今天、7 天、30 天、90 天、全部和自定义范围现在统一使用同一个口径:

日均费用 = 总费用 ÷ 范围内有费用的天数

以前固定用 1、7、30、90 天做分母,范围里有空白天时日均会被拉低。例如 30 天里只有 14 天产生费用,现在按 14 天计算。

  • 接口字段 days 改为 billedDays,客户端兼容升级前的缓存。
  • KPI 提示显示为“日均 ¥x · N 天有费用”。
  • 范围内没有计费日期时显示“无计费日期”,不再显示 ¥0.00。

四项颜色改为由深到浅

颜色顺序与图例、趋势柱、圆环、时段分布一致:

系列 颜色
未缓存输入 #2971C6
输出 #5297EC
缓存读取 #84BAFF
缓存写入 #ACD4FF

深色在柱顶,表示花钱多的未缓存输入;浅色在柱底,表示缓存命中。

升级

0.4.5 → 0.4.6 不需要迁移,配置和缓存格式不变。

dsh plugin update @guojinpeng/dsh-cost-meter

验证

  • 打开费用统计页,切换今天、7 天、30 天、90 天、全部和自定义范围,KPI 提示中的天数应等于范围内实际产生费用的天数。
  • 切到没有费用的范围,KPI 显示“无计费日期”。
  • 趋势柱、图例、圆环、时段分布的四个颜色顺序应为:未缓存输入最深,缓存写入最浅。

101 项单元测试通过。发布包已在隔离 profile 中安装成功。

Full Changelog: v0.4.5...v0.4.6

v0.4.5:修复定时刷新在浏览器中不生效

Choose a tag to compare

@guojinpeng guojinpeng released this 20 Oct 08:35

主要更新

修复 0.4.4 的“定时刷新费用统计”在浏览器中完全不生效的问题。

0.4.4 把全局 setTimeout 存进对象后以 timers.setTimeout(...) 调用。浏览器要求该方法在 window 上调用,因此抛出 TypeError: Illegal invocation,定时器从未注册:只有打开页面时的第一次预取生效,之后不再刷新。Node 测试环境允许这种调用,所以 0.4.4 的自动化测试没有发现该问题。

0.4.5 改为经箭头函数调用全局 setTimeout / clearTimeout,并新增回归测试模拟浏览器的“非法调用”行为。

升级

0.4.4 → 0.4.5 不需要迁移,配置和缓存格式不变。

dsh plugin update @guojinpeng/dsh-cost-meter

验证

  • 打开费用统计页,等待“间隔分钟数”对应时长;
  • data/cache 下五个范围文件的修改时间应同批更新(相差不超过数秒)。

100 项单元测试与隔离安装冒烟测试通过。

Full Changelog: v0.4.4...v0.4.5

v0.4.4

Choose a tag to compare

@guojinpeng guojinpeng released this 20 Oct 07:03

主要更新

  • 新增“定时刷新费用统计”开关:位于插件设置 → 通用设置,默认开启,默认间隔 5 分钟,可选 1/3/5/10/15/30/60 分钟。开启时按间隔并行加载今天、7 天、30 天、90 天、全部五个预设范围,进入费用统计页直接命中缓存。关闭后不再定时预取。右上角“刷新”逻辑不变。
  • 预设范围结果缓存从 5 分钟延长到 15 分钟。点击“刷新”或修改单价后仍重新统计。
  • 合并费用统计页提示:移除右上角“已应用缓存”徽标,缓存状态与统计时间合并显示在工具栏右侧提示行。开启定时刷新时显示“每 N 分钟自动刷新”,关闭时显示“页面数据缓存 15 分钟”。
  • 服务端合并并发折叠:五个范围的并发强制加载共用一次会话折叠,首次预热不重复解析全部会话。
  • 配置新增 autoRefreshCost(默认 true)与 autoRefreshMinutes(默认 5)。旧配置文件自动补默认值,未知间隔回退为 5 分钟。

兼容性

  • Node.js 20+,DSH 0.2.0-rc.2+。
  • 无需迁移:旧配置缺少新字段时按默认值补齐;缓存文件格式未变。

安装或更新

dsh plugin install ./guojinpeng-dsh-cost-meter-0.4.4.tgz

或更新 ~/.dsh/plugins.json 中的版本与路径后重启 DSH。

验证

  • npm test:99 个测试全部通过。新增测试覆盖刷新间隔归一化、配置校验与旧配置默认值、五路并行预取且带 refresh=1、运行中跳批、配置变更重排、关闭与释放、并发单飞、15 分钟缓存窗口。
  • npm run build 成功。
  • tests/install-smoke.mjs:在临时 DSH Home 安装本包后,启动、鉴权、配置读写、客户端资源与三个价格来源均通过。

v0.4.3

Choose a tag to compare

@guojinpeng guojinpeng released this 20 Oct 05:16

主要更新

  • 历史扫描与费用统计共用一次日志折叠:每个会话只折叠一次,一个缓存文件同时保存 history 和 cost 状态,路径为 data/cache/sessions/<会话 ID>.json。启动扫描顺带写入费用状态,费用统计页不再为同一批日志重复解码。
  • 只追加内容的日志从新帧继续折叠:缓存记录已读取的字节数及其 SHA-256。日志增长时只解码新增帧,不再重新解析整个日志;已读字节变化时自动全量重算。
  • 缓存格式升为 2。

性能

在本机 146 个会话(约 85 MB 压缩日志)上测得:

  • 启动扫描:首次冷启动折叠两种状态约 6.2 s;命中缓存约 128 ms。
  • 费用统计页:多数会话直接读缓存,只对正在进行的会话走内存投影。

兼容性

  • Node.js 20+,DSH 0.2.0-rc.2+。
  • 0.4.2 的旧缓存不兼容,首次启动会重建。旧目录 data/cache/sessions/cost 与 data/cache/sessions/history 不再读取,可以删除。

安装或更新

dsh plugin install ./guojinpeng-dsh-cost-meter-0.4.3.tgz

或更新 ~/.dsh/plugins.json 中的版本与路径后重启 DSH。

验证

  • npm test:90 个测试全部通过。
  • 新增测试覆盖:共用折叠结果被费用统计页读取;只追加日志从新帧折叠;日志重写时全量重算。
  • 在真实 146 个会话的日志上验证:全部折叠成功,0 错误。

v0.4.2

Choose a tag to compare

@guojinpeng guojinpeng released this 20 Oct 03:32

主要更新

  • 费用统计页缓存每个会话的折叠状态到 data/cache/sessions/<用途>/<会话 ID>.json。DSH 重启后直接读取缓存,不再重新解析全部日志。日志修改或计费状态版本变化时缓存自动失效。
  • 历史模型扫描复用同一份折叠缓存,启动时不再重复解析全部日志。
  • 日志折叠改为分片执行:每 32 个压缩帧或每 2000 行让出事件循环。解析期间界面和其他请求不再长时间停顿。
  • 折叠改为逐行解码并立即应用,不再先构建完整事件数组,降低解析时的内存峰值。
  • 节假日日历改为后台预取:历史扫描完成后获取所有已发现年份的日历,费用统计页多数请求直接命中本地日历。
  • 费用统计页每次统计只计算一次会话排名,KPI 和模型费用表共用该结果。
  • 费用胶囊只在明细面板打开时构建面板内容;费用统计页鼠标移动不再整页重绘;客户端按计费对象引用缓存计价结果。

性能

本机实测(145 个会话、84 MB 压缩日志):

  • 折叠全部会话:冷启动约 4.9 秒(含写缓存),缓存命中 79 毫秒。
  • 缓存文件 145 个,合计约 598 KB。
  • 首次遇到未缓存的日志仍需完整解析,耗时与日志总量相关。

兼容性

  • 无配置变更,无迁移步骤。
  • 缓存目录位于插件数据目录 data/cache/sessions/,可以随时删除;删除后会自动重建。
  • 依赖的最低 DSH 版本仍为 >=0.2.0-rc.2。

安装或更新

dsh plugin --profile web add -w ./guojinpeng-dsh-cost-meter-0.4.2.tgz

或安装 npm 包 @guojinpeng/dsh-cost-meter@0.4.2。

验证

  • node --test tests/*.test.js:87 通过,0 失败。
  • node tests/install-smoke.mjs:通过(隔离安装、启动、认证、配置保存、前端资源、三个价格源)。

0.4.1

Choose a tag to compare

@guojinpeng guojinpeng released this 20 Oct 02:40

主要更新

本版修复费用统计页的计价与展示缺陷,并补齐配置读取的错误处理。

  • 节假日日历计价:费用统计页在统计前加载范围内年份的 holiday-cn 日历。DeepSeek 规则下节假日与周末按谷价计算,未确认窗口不再误计峰价和未确认 token。此前该页面忽略日历,与费用胶囊口径不一致。
  • 模型费用表完整显示:模型费用表列出全部已计价模型,不再只保留前 8 个;KPI 与趋势口径不变。
  • 刷新失败提示:页面已有数据时刷新失败会显示错误条,同时保留上一次的数据。
  • 参数校验:days=toString、days=__proto__ 等原型键返回 400;days=custom 缺少起止日期时返回 400,不再返回 503 或全部历史。
  • 改价立即生效:统计页读取配置时跳过 1 秒的文件状态缓存,修改单价后立即使用新价格计算。
  • 币种显示:配置币种为 CNY 且没有已定价模型时,费用胶囊显示 ¥0.00,不再固定显示 $0.00。费用趋势柱顶金额小于 0.01 时显示 <0.01。
  • 配置读取错误:读取配置失败时保留 HTTP 状态码,反向代理返回文本错误体时 409 冲突仍可自动合并;超过 1 MiB 的请求体被拒绝后会读完剩余数据再结束响应。
  • 依赖与文档:最低 DSH 版本改为 0.2.0-rc.2;模块表补充费用统计相关模块,截图清单、验证命令、按月汇总条件与安装示例已对齐仓库现状。

兼容性

配置路径保持为 ~/.dsh/guojinpeng/dsh-cost-meter/config.json,无需手动迁移。

  • 本版已在 DSH 0.2.0-rc.2 上验证。
  • 费用为估算值,以服务商实际账单为准。

安装或更新

dsh plugin --profile web add -w @guojinpeng/dsh-cost-meter@0.4.1

将 web 替换为实际使用的 profile 名称;桌面配置档由桌面应用管理,请在应用的插件页安装。安装后重启 DSH。

验证

  • 84 项自动化测试通过(含日历计价、全部模型行、原型键校验、非 JSON 错误状态、显示币种等新增回归用例)。
  • 隔离 DSH 的安装冒烟测试通过:安装、启动、认证、配置保存、客户端资源与三个价格源。
  • 构建与打包通过,产物含 locale 元数据。

0.4.0

Choose a tag to compare

@guojinpeng guojinpeng released this 19 Oct 09:22

主要更新

本版新增独立的费用统计页:侧栏“插件”区域新增“费用统计”菜单,右侧主页在同一页展示总费用、趋势、Token 构成、时段分布、模型费用和费用最高的会话。

  • 侧栏入口与开关:侧栏“插件”区域新增“费用统计”菜单,图标为三根柱形。配置页“通用”分区新增“在侧栏显示费用统计”开关,默认开启;关闭后只移除菜单,页面与数据保留。
  • 费用统计页:支持今天、7 天、30 天、90 天、全部历史五种范围,也可在预设单选右侧选择起止日期统计任意区间,两者互斥。汇总卡片显示总费用与日均、总 Token、缓存命中率和活跃会话;趋势可切换金额与 Token;模型费用和时段分布按费用占比显示;费用最高的会话可点击直接打开该会话。
  • 趋势与悬停:超过 20 天时按相邻自然日合并成最多 20 根柱子,悬停提示和坐标轴显示合并的起止日期;每根柱子顶部显示当天合计,合计随柱高错落显示,不再排成一行。悬停提示改为卡片样式,按四项价格色块列出金额、占比和合计。
  • 口径统一:费用趋势、费用 & Token 构成、时段分布和模型费用使用同一套四项价格色块(缓存读取、未缓存输入、输出、缓存写入),环形图与图例也改为按费用占比计算,不再与时段分布口径不一致。
  • 速度与会话名称:费用统计页直接读取会话日志文件,不再经宿主逐事件回放,一百个会话的历史首次打开从约 53 秒降到约 3 秒,之后按日志修改时间复用结果;会话名称从日志读取,不再全部显示“未命名会话”。
  • 5 分钟缓存:预设范围的统计结果缓存 5 分钟,保存到插件数据目录 data/cache/<范围>-day-statistics.json;使用缓存时页面右上角显示“已应用缓存”,悬停说明如何获取实时数据,点击“刷新”或超过 5 分钟重新统计;配置文件变化后缓存立即失效。自定义日期范围不缓存。
  • 界面细节:页面跟随 DSH 深色和浅色主题与中英文切换;切换范围时显示毛玻璃加载遮罩;日期较少时柱状图居中显示并留白;卡片标题加粗;右上角“刷新”前新增“插件设置”按钮,点击打开插件详情页。
  • 问题修复:修复趋势柱状图与环形图不显示、点击会话无反应、保存配置被不可读会话打断、buildOverview 缺少 buildCostView 导入等问题。

兼容性

配置路径保持为 ~/.dsh/guojinpeng/dsh-cost-meter/config.json,无需手动迁移。

  • 本版已在 DSH 0.2.0-rc.2 与桌面版 0.2.1-rc.2 上验证。
  • 若宿主 harness 版本低于写入会话日志的 harness,宿主会拒绝打开该会话(例如日志含 job/registered 事件),聊天页显示“历史加载失败”。请升级 harness 或使用桌面版;插件的配置保存和费用统计页不受影响,无法读取的会话会被跳过。
  • 费用为估算值,以服务商实际账单为准。

安装或更新

dsh plugin --profile web add -w @guojinpeng/dsh-cost-meter@0.4.0

将 web 替换为实际使用的 profile 名称;桌面配置档由桌面应用管理,请在应用的插件页安装。安装后重启 DSH。安装包通过 npm 分发,GitHub Release 提供版本说明。

验证

  • 79 项自动化测试通过(含日期范围、20 根柱合并、缓存 TTL 与失效、会话日志读取、路由注册)。
  • 构建与打包通过,产物含 locale 元数据。
  • 页面渲染检查通过:范围切换、自定义日期、合并柱标签、悬停卡片、缓存标记与“插件设置”按钮。
  • 插件市场宣传图更新为三张:总览海报、费用统计页面、会话费用与价格计算公式。

0.3.3

Choose a tag to compare

@guojinpeng guojinpeng released this 19 Oct 04:01

主要更新

本版把费用入口改成价格标签图标,把本轮费用排到官方“本轮用量”之后,并新增插件市场的总览图。

  • 价格标签图标:会话费用胶囊、本轮费用胶囊和两个明细面板标题使用同一个图标,替代与会话统计重复的仪表盘图标。图标轮廓占满宿主的 16 单位网格,与旁边的宿主图标视觉大小一致;图标上的孔使用实心点,在 14 到 17 像素下不发虚。
  • 本轮费用排序:本轮费用胶囊排在官方“本轮用量”之后,时间保持在最后;本轮没有用量面板时,胶囊紧邻时间显示。
  • 总览图:新增 docs/images/overview.png(16:10),同时展示两张明细面板、两枚费用胶囊和一张价格计算公式浮层;仓库根的 screenshots.json 让插件市场的卡片和详情页显示总览、本轮费用和会话费用三张截图。

兼容性

配置路径保持为 ~/.dsh/guojinpeng/dsh-cost-meter/config.json,无需手动迁移。

  • 本版已在 DSH 0.2.0-rc.2 上验证。费用为估算值,以服务商实际账单为准。

安装或更新

dsh plugin --profile web add -w @guojinpeng/dsh-cost-meter@0.3.3

将 web 替换为实际使用的 profile 名称;桌面配置档由桌面应用管理,请在应用的插件页安装。安装后重启 DSH。安装包通过 npm 分发,GitHub Release 提供版本说明。

验证

  • 55 项自动化测试通过。
  • 构建与打包通过,产物含 locale 元数据。
  • 真实 Web GUI 核对:本轮费用胶囊位于官方“本轮用量”与时间之间;价格标签图标与宿主图标同尺寸。
  • 截图脚本生成总览、会话费用、本轮费用三张中文截图与对应英文截图,含浮层与版式断言。

0.3.2

Choose a tag to compare

@guojinpeng guojinpeng released this 16 Oct 08:16

主要更新

本版重做模型单价配置页:复用 DSH 官方控件,取消自动保存改为显式保存,价格同步改为先预览再保存。

  • 官方控件:配置页复用 DSH 官方控件(保存表单、数值字段、开关、按钮、标记);输入框、按钮、开关的尺寸、圆角、边框与字号同宿主设置页一致,深色模式跟随宿主主题。
  • 显式保存:取消自动保存;修改先保留在页面草稿中,点击页尾“保存”后写入配置;离开页面丢弃未保存的修改;保存失败显示错误并保留草稿,版本冲突时重新读取并提示再次保存。
  • 平铺分区:“基础配置”“高级配置”折叠区改为“模型单价”“通用”两个平铺分区,进入页面即显示全部内容。
  • 同步预览:“同步价格”改为预览:结果先并入草稿并显示同步报告,保存后生效;不再弹出确认对话框。
  • 无效输入反馈:无效的单价或汇率在对应输入框显示红色边框和说明文字,并禁用“保存”和“同步价格”。
  • 添加模型:增加“添加模型”输入框,可为没有调用历史的模型声明单价;声明的模型随配置保存,未被历史发现的模型可以删除。
  • 可读性:单价数字右对齐并使用等宽数字;手动编辑过的单价显示“已手动设置”标记;切换币种不再改变价格来源。
  • 页面宽度:配置页宽度限制为 760px,与宿主内置插件设置页一致。

兼容性

配置路径保持为 ~/.dsh/guojinpeng/dsh-cost-meter/config.json,无需手动迁移。配置中声明的模型随配置保存,并进入模型单价列表。

  • 本版已在 DSH 0.2.0-rc.2 上验证。费用为估算值,以服务商实际账单为准。

安装或更新

dsh plugin --profile web add -w @guojinpeng/dsh-cost-meter@0.3.2

将 web 替换为实际使用的 profile 名称;桌面配置档由桌面应用管理,请在应用的插件页安装。安装后重启 DSH。安装包通过 npm 分发,GitHub Release 提供版本说明。

验证

  • 55 项自动化测试通过。
  • 构建与打包通过,产物含 locale 元数据。
  • 隔离 DSH 安装、启动、配置接口及 models.dev、OpenRouter、DeepInfra 三个真实价格接口联调通过。
  • 桌面配置页检查通过:官方控件渲染、草稿与显式保存、同步预览、添加模型、无效输入反馈与离开丢弃。

中英文 README、架构说明、CHANGELOG 和配置页截图已更新。