Skip to content

Releases: Haoxiang-Fant/dsh-task-notice

Version 0.3.14

Choose a tag to compare

@Haoxiang-Fant Haoxiang-Fant released this 20 Oct 11:12
87b83b4

0.3.14

  • 周期编辑器视觉对齐 / 未生效状态 / 明细查询提速:
    • 周期编辑器每行改为底部对齐(开始 / 结束 / 订阅费字段定宽,跨行列对齐,删除按钮与输入行齐平);
    • Token Plan Key 管理新增「未生效(没续费)」状态:取消勾选「Token Plan 订阅」即按量计价,卡片显示未生效横幅(订阅信息与历史周期保留),一键「恢复生效」;
    • getUsageEntries(按窗口消耗)目录显示名 / keyEnv 改为单次调用内按 Key memo,消除 O(条目 × 目录条数) 逐条扫描(2 万条账目每查询约 15ms → 2ms)。
  • Token Plan 订阅计费过期感知(连续订阅 / 套餐更改 / 周期编辑器 / 订阅合并):
    • 连续订阅:Token Plan Key 管理新增「连续订阅」开关;开启后每个计费周期到期时按当前订阅信息自动开启下一轮(套餐更改选「下次续费生效」的会在续期时生效);未开启(默认)= 非连续订阅,到期保留订阅信息与周期窗口但不自动开启新周期,只有手动点「续费」或过期后仍检测到该 Key 产生有效调用时才开新周期(账本写入与打开使用分析都会检测,自动续期结果持久化)。
    • 套餐更改:重新输入订阅信息(订阅费 / Credit / 有效期 / 重置方式)后保存,弹窗询问是否覆盖本次周期:是 = 本周期立即改用新信息(本周期订阅费按新金额实时计算);否 = 记为 nextPlan,下次续费(自动或手动)生效。
    • 周期编辑器:Token Plan Key 管理新增入口,进入独立页面逐个调整每个周期的有效期(开始 / 结束时间)与订阅费(含当前周期与全部已归档周期);修改走统一草稿 + 悬浮保存,改完回本、累计金额与性价比立即实时重算(金额仍不落盘)。所有周期(含当前周期)都可删除(window.confirm 确认;归档周期删除时与 prevCycle 同窗口一并清空);删除当前周期 = 丢弃该窗口(不归档)并从现在起重开一个新周期(服务端按 resetMode/periodDays 推导),旧周期的消耗与订阅费不再计入累计。
    • 订阅合并:同一 Token Plan 换了 Key(Provider ID)时,把另一个 Key 的订阅与历史合并到保留的 Key(plan.mergedKeys);合并后来源 Key 的消耗、周期窗口与订阅费都计入目标 Key 的累计口径,订阅数据以先设置的(保留的)Key 为准,后续可用「套餐更改」手动调整。
  • 性价比改为累计口径:Token Plan Key 的性价比 = 累计消耗 tokens ÷ 累计订阅费(当前周期 + 上一轮 + 全部历史周期的订阅费之和),不再只统计当前周期、也不再显示「本周期 / 上一轮 / 正在统计」;累计金额按各模型累计金额占比摊到模型上。例:9.9/月的订阅用了两个月、共 800M tokens → 800M ÷ 19.8;第二个月换成 49.9 档 → 按累计金额 9.9 + 49.8 = 59.8 计算。Token Plan 卡片的「名下各模型消耗」与新增「累计」行同步改累计口径。
  • 算法 / 代码检查与修复:ensureCycle 由「到期一律自动轮换」改为按连续订阅 / 有效调用决策(带 400 轮上限防极端历史);累计窗口去重(当前 / 上一轮 / 历史窗口同一调用只计一次);applyNextPlan 保证续期与手动续费都正确提升待生效套餐;新增 _selfcheck-plans-0.3.14.mjs 覆盖两个需求示例、合并、周期编辑与服务层字段接线。
  • 修复使用分析页「按次调用回本提示」重复渲染两次(同一区块被复制成两份、且「性价比计算」的区块标题被顶掉):只保留一份,标题恢复为「性价比计算」。同时服务层 getUsageAnalysis 此前漏传 perCallModels(客户端永远拿不到按次模型数据),现补上并同步空数据分支。
  • 性能优化(大账本):
    • 官方价格目录改为启动时一次性建索引(CATALOG_INDEX)+ 未收录模型查询缓存,lookupCatalogModel 由「每次 O(目录条数) 扫描 + 逐条重复规范化」变为一次 Map 命中(2 万次查询 2.2s → 15ms);
    • priceFor 按价格快照做 WeakMap 缓存(同一份配置下 (Key·模型) 单价只解析一次),峰谷取档改用整数运算、不再为每个账本条目分配 Date(2 万条单价解析 845ms → 7ms);
    • 使用分析:collectCycleStats 每条账目的按量金额只算一次(原先待确认/当前周期/上一轮/历史窗口各算一遍)、实际金额按 Key 单遍归组(去掉每 Key 一次全表过滤)、全量账本不再逐条展开复制(条目身份在 analysis 内部归一);
    • 客户端:今日消耗聚合/配色/饼图、使用分析派生数据(饼图分块、全量 (Key·模型) 配色、其它合并、外圈)与按窗口消耗分组改为 useMemo,饼图悬停/搜索输入不再每次渲染重算;配置签名不再每帧 JSON.stringify 整份价格配置。
    • 基准(2 万条账目,node _bench-0.3.14.mjs):使用分析全量计算 8.5s → 约 0.05–0.08s(约 110× 以上),官方价查询与单价解析各约 120×/95×;5 万条账目分析约 0.12s。
  • 修复当前 Harness 将待处理交互发布到 uiSession.sessionStatus 后,插件仍读取旧 pendingInteractions 导致权限/提问提醒静默丢失;兼容新旧 UI API,空审批详情也会提醒。提醒仍只读,不影响原生审批与回答弹窗。
  • 新增小额模型“其它”合并(最多 25%),点击其它可查看被合并模型。
  • 修正实际金额口径:订阅 Key 的消耗只按周期订阅费计——套餐内的 tokens 不再按量计价,消耗再高实际金额也只有订阅费;非订阅 Key 实际金额 = 应付费用(按量价 / 按次价)。
  • 使用分析外圈改为比较实际消费与官方价格金额:官方金额固定为100%基准;低于基准显示节省,高于基准标红,超出100%后以更深红色继续分段。实际消费按当前生效价格,官方金额始终按官方目录价格计算。
  • 新增按次付费模型标记,并保留按量价格用于回本判断。
  • 修复使用分析金额边界:启用订阅的 Key(含 0 元免费订阅)实际金额始终按订阅费,不回退为按量价;非订阅 Key 按当前生效价格,官方金额仍独立按官方目录价格计算。
  • 官方价格与自定义价格分离:自定义价格迁移并保存到独立的 custom-pricing.json,官方目录只读,官方金额不再受自定义价格影响。
  • 模型名匹配统一规范化大小写、分隔符、v 前缀和 .0 版本写法;补充 DeepSeek 官方 deepseek-flash / DeepSeek-V4.1-Flash 别名,特殊命名继续通过目录别名表维护。

累计更新-version0.3.13

Choose a tag to compare

@Haoxiang-Fant Haoxiang-Fant released this 10 Oct 11:53
3c9e936

0.3.13

  • 修复国际模型 usage 中 cacheCreationTokens / cache_creation_* 缓存写入 tokens 未纳入消费金额统计。
  • 价格编辑模型枚举按模型名大小写不敏感去重,避免同一模型显示多行。
  • 根据《大模型API定价对比(7).csv》保留并完善 GPT、Claude 等国际模型缓存写入价格。

0.3.12 (2026-09)

  • 模型计价全部改为实时计算(不再落盘任何金额):
    • Token Plan 的计费周期配置从此只保存周期窗口 + 订阅费;prevCycle / cycles / _undo.prevCycle 里不再写 tokens / cost,lib/pricing.js 归一化时直接丢弃旧配置里残留的金额字段,客户端保存价格 / 套餐时也不再回写它们(lib/client.js 两处 sanitize);
    • 上一轮周期、历史周期、待确认临时账本的 tokens / cost 一律在每次读取时按账本 × 当前价格现算(lib/analysis.js → lib/service.js):改价格后,回本进度、上一轮 / 历史周期、每日费用、通知金额同步变化,绝不复用旧金额数据;
    • lib/service.js 的重置 / 续费流程从「冻结快照」改为「归档窗口」(cycleWindowOf),typert.host.js 的周期 schema 里 tokens / cost 改为可选(配置无、分析输出有,两个方向都兼容)。
  • (Key · 模型)为唯一条目口径:
    • 消耗聚合身份取消「按模型归属目录改判 Key」的映射——条目一律用账本自己的 Key 身份(调用路由 / Provider ID),不再出现「不同 Key 的同名模型被并成一条」;模型品牌显示仍按目录判定;
    • 饼图(今日消耗 / 使用分析)、每日费用表、按 Key·模型明细、性价比排名全部同源按 (Key · 模型) 成条:不同 Key 的同名模型分开、同一 Key 的不同模型也分开,金额与 tokens 不再跨条目相加。
  • 图例配色保证互不相同:
    • 颜色分配从「按下标取模调色板」改为按 (Key · 模型) 身份分配(colorMapOf / chartIdOf / colorAt):调色板(14 色)用尽后按黄金角生成 HSL 色相,任意条数下不会出现重复颜色;同一张图里饼图分块、图例、每日堆叠色条、每日图例共用同一映射(同一条目跨日期同色);
    • 每日费用表与饼图图例标签带上 Key 显示名(Key · 模型),Provider 图例同样不再取模。
  • 精简 package.json 的 description 与 dshhub.summary(原为万字符级堆叠版本说明,现为一段功能概述)。
  • 版本号 0.3.12。

0.3.11 (2026-09)

  • 提醒方式变化(子代理聚合通知):
    • 取消子代理完成任务时的通知:子代理会话(宿主 header.origin = 'subagent',带 parentSession)不再单独弹「任务完成」——其消耗(完成的与失败的轮次都计)折算到根主会话名下,多层子代理逐级上溯;
    • 主代理 + 所有子代理都完成后才通知:主代理某轮完成时若还有子代理在跑,该轮挂起;最后一个子代理结束(subagent/end)后,把挂起的全部轮次 + 期间累计的子代理用量合并成一条「任务完成」通知(金额 = 主轮次峰谷计价 + 子代理按模型价格累加);
    • 账本同步归属:子代理的模型调用在消耗账本里直接记到根主会话名下——按窗口消耗 / 会话饼图等统计随之合并,与通知数字一致;
    • 任务失败也通知:任务轮次以 error / max-tokens / blocked 结束时立即推送「任务失败」通知帧(新帧类型 fail,红色左边条,带本轮已消耗 tokens 与金额及失败原因;用户主动中止 aborted/interrupted 不打扰)。通知帧类型枚举同步 lib/typert.host.js。
    • 已知边界:子代理归属映射只在内存,DSH 重启后仍在运行的子代理会被视为已完成,极端情况下完成通知提前发出。
  • 入口按钮改版(含首次实测后的修正):侧边栏左下角的插件入口改为紧凑图标按钮(28px 高、仅图标 + 悬停 title + aria-label,不再显示「任务通知与消耗」长文字),不抢宽度、不被同行兄弟撑高。
    • 首次实现曾按「与设置按钮同行两半(设置占左半 50%,入口占右半)」用 data-slot + :has() 两列网格实现,实测该行是插件共享座位(同行为 cost-meter 的 6 个条目 + cordis-panel + 本插件 2 个条目),拆半会挤坏它们的显示、入口按钮也被 flex 兄弟撑高;现撤销两列拆分,恢复宿主布局,只让入口占自身内容宽。
  • 通知弹窗层移到 frame 级浮层:弹窗层(完工 / 失败 / 审批 / 提问提示)从 sidebar.footer.action 移到 shell.overlay——挂在侧栏底部时,侧栏折叠会让宿主把整块 footArea 置为 display:none,其中的 fixed 弹窗会一起消失(等待审批提示不弹);移出侧栏后与侧栏布局、其它插件条目彻底解耦,该层用 pointer-events:none !important 压回穿透(宿主会给直接子元素 pointer-events:auto)。
  • 界面修改:
    • Provider ID 管理的「所含模型」列改为每个模型单独一行(显示名(ID)逐行列出,不再只显示前 6 个加省略号),仍限制在该单元格内,超长自动折行;
    • 保存按钮统一为悬浮保存:删除 价格编辑 卡片/子卡片的内联「保存」与页底「保存价格与套餐」、设置 Token Plan Key 管理的「保存 Token Plan 设置」、工具箱二级页的内联「保存」——草稿全部由 0.3.8 的悬浮保存按钮 / 切换选项卡自动保存 / 退出确认统一保存(工具箱二级页草稿已并入该机制,返回不再丢弃草稿;峰谷规则页的「返回(保存)」改为「返回」,同样交给统一保存);

dsh-task-notice version0.3.10

Choose a tag to compare

@Haoxiang-Fant Haoxiang-Fant released this 27 Sep 19:59
8d712f6
Merge pull request #13 from Haoxiang-Fant/Haoxiang-Fant202609280352

New Version 0.3.10

dsh-task-notice version0.3.9

Choose a tag to compare

@Haoxiang-Fant Haoxiang-Fant released this 26 Sep 03:58
9b57d34

0.3.9 (2026-09)

  • 工具箱(顶部导航第五个,设置前):插件小工具的统一入口——一级页只列小工具卡片(图标 + 名称 + 简介 + 开关,开关立即生效);点击卡片进入该工具的二级设置页。本次入驻:「窗口切换提醒」(设置项 = 提醒开关 + 缓存输入阈值 + 最少完成任务轮数;与设置页共用同一份配置)。
  • 切换提醒更聪明:新增 switchMinTurns(默认 3)——窗口内至少完成这么多轮任务、且本轮缓存输入超过阈值时才提醒;第一个简单任务完成后不再弹窗。同步作用于宿主判断与工具箱设置页。
  • 按窗口消耗改版:展开窗口行后,二级内容 = 该窗口的模型消耗占比饼图(按模型 × Provider 聚合金额,悬停看明细,复用官方饼图绘制);「调用记录」下移为三级目录(饼图下方的内嵌折叠),主行 / 表格列不变。
  • 窗口显示名:按窗口消耗的主行改用前端会话显示名——官方会话列表里的会话标题(无标题回退工作目录名),悬停仍显示完整窗口 ID;搜索框同时匹配窗口名。旧宿主 / 取不到名称时回退短 ID。
  • 通知优先级与提示音:所有系统通知加 requireInteraction(桌面横幅常驻,不再几秒自动沉入操作中心);权限请求 / 提问 / 切换提醒帧到达时经 Web Audio 补一声两音提示音(系统通知在一些环境不出声时的兜底,任何失败静默)。
  • 按会话(对话窗口)消耗统计:消耗统计页的「按模型消耗」总览升级为可切换的两种分组——「按模型消耗」(原样保留,同一模型跨 Key 合并一行)/「按窗口消耗」(按会话 sessionId 分组):
    • 主次关系明确:主行 = 每个对话窗口的汇总(窗口 ID、首次 ~ 末次调用时间、调用次数、缓存输入 / 缓外输入 / 输出 / 总 tokens、金额),展开「调用记录」后只列出该窗口涉及的每一条调用(时间 · 模型(Provider)· 三类 tokens · 金额),底部合计行;
    • 按窗口消耗默认按总 tokens 降序;提供搜索框,按窗口 ID / 模型 / 提供商关键字快速过滤出目标窗口的消耗信息(Enter 或「查询」按钮应用,× 清除);
    • 数据来源:单次消耗明细 RPC(getUsageEntries)新增 sessionId 字段,前端分组,无需新的后端存储。
  • 对话切换提醒(缓存输入过高):单轮任务完成后,若本轮产生的缓存输入(cacheRead)tokens ≥ 阈值(默认 200,000,可在 设置 → 插件配置 调整,1k ~ 10M;可整体关闭)——
    • 提醒时机:任务完成(turn completed)后,与完工通知同一时机;
    • 提醒方式:页内弹窗 + 浏览器系统通知(Web Notifications,桌面横幅 + 操作中心),与完工通知共用通知管道;切换提醒弹窗不倒计时自动关闭,留给用户决定;同一会话 6 小时最多提醒一次,不刷屏;
    • 点击引导交接:点击弹窗「生成交接文档」,即通过官方会话通道向该会话发送一条指令,引导 LLM 在工作区创建或更新开发交接文档 HANDOFF.md(任务目标与进度 / 已完成与待办 / 关键文件与改动 / 下一步与注意事项),完成后开新窗口让 AI 读取该文档即可快速继续开发;会话已关闭或不在本页面时,弹窗给出提示文案。
  • 设置页新增「窗口切换提醒」开关与「缓存输入提醒阈值(tokens/轮)」输入,工具箱二级页额外提供「最少完成任务轮数」;宿主配置新增 notifyOnSwitch / switchCacheInTokens / switchMinTurns,通知帧类型新增 switch,消耗明细返回结构新增 sessionId。
  • 版本号 0.3.9。

dsh-task-notice version0.3.8

Choose a tag to compare

@Haoxiang-Fant Haoxiang-Fant released this 17 Sep 15:49
aeda846

累积更新

0.3.8 (2026-09)

  • 保存机制优化(设置页 = 「任务通知与消耗」分节,含全部顶部选项卡):
    • 悬浮保存按钮:设置页存在未保存的更改时,在设置页内容区(卡片范围)左缘浮现一个大号圆形保存按钮(保存图标,主题强调色,贴着内容区、随滚动与窗口变化实时跟随,尽量贴近 DSH 设置页的卡片范围而不遮挡内容);点击即保存当前全部未保存更改,保存完成后按钮自动消失。有未保存更改的视图:设置选项卡的插件配置(0.3.8 起改为草稿模式,见下)与 Token Plan Key 管理、价格编辑选项卡的价格草稿。
    • 插件配置改为草稿模式:设置选项卡的插件配置(通知开关 / 弹窗时长 / 保留天数 / 插件总开关 / 系统通知等)此前每拨一次开关立即写入配置;现改为先写入本地草稿、界面即时按草稿值显示,经悬浮保存按钮、切换选项卡或退出确认统一保存(一次 updateConfig 写入全部草稿项)。授权通知权限成功后自动把「系统通知」记入草稿,与其他更改一起保存。
    • 切换选项卡自动保存:在选项卡之间切换(今日消耗 ⇄ 消耗统计 ⇄ 使用分析 ⇄ 价格编辑 ⇄ 设置,含完工弹窗「修改套餐」等入口触发的跨视图跳转)时,自动保存当前页做出的设置变更再切换,更改不会因为忘记点保存而丢失。
    • 退出设置页确认保留:带着未保存的更改直接退出设置页(切到其他设置分节 / 关闭设置页)时,弹出「是否保留更改」确认浮层(保留更改 / 放弃更改);长时间未回复(10 秒)默认保留更改——自动执行保存,倒计时在浮层内实时显示。浮层为纯 DOM 实现,不依赖已卸载的页面组件。
    • 保存失败时草稿保留(设置页显示错误、悬浮按钮不消失),不静默丢数据;原有各分节的「保存」按钮(保存价格与套餐 / 保存 Token Plan 设置 / 卡片级保存)保留不变。
  • 默认价格目录按《大模型API定价对比(7).csv》刷新(默认数据写进插件本身):内置官方价目录(lib/pricing-catalog.js)与 CSV(7) 逐条核对——既有 216 条价格全部一致、无一变化;本次更新:
    • 补入 CSV(7) 新增的 9 条硅基流动代理平台条目(键加 sf- 前缀避免与官方键冲突):DeepSeek-V4-Flash(¥1/¥2/缓存命中 ¥0.02,注意与 DeepSeek 官方输出价不同)、DeepSeek-V4-Pro、GLM-5.2、GLM-4.5-Air、Kimi-K2.7-Code、Kimi-K2.6 Pro、MiniMax-M2.5、Step-3.5-Flash、Qwen2.5-7B及以下(免费),目录总计 268 条;
    • V4-Flash-Vision 按 CSV(7) 的空闲/高峰成对价重列(2026-09 降价:空闲 ¥1/¥4/缓存命中 ¥0.02 为基础价,高峰 ¥2/¥8 为峰档)——旧目录残留的是降价前的 ¥2/¥8 单价;
    • 目录来源标注与 CATALOG_SOURCE_URLS 同步改为《大模型API定价对比(7).csv》;0.3.4 目录补充条目、峰谷内嵌档与官方价默认生效逻辑不变。

0.3.7 (2026-09)

  • 显示名称(Provider ID + 模型名称):每个 Provider ID 与每个模型名称都有一个对应的显示名,用于在用户面前显示该 Key / 该模型的自定义名称。显示层名称解析顺序改为 全局模型设置里的自定义显示名 → 官方价格目录显示名(厂商 + 「 」+ 模型名称,来自《大模型API定价对比(4).csv》)→ 原始 ID:
    • Provider 显示名 = 该 Provider 在全局模型设置里的 displayName(如 scnet →「超算互联网」、bitdance-ark →「BitDance Ark MaaS」、deepseek-official →「DeepSeek」),环境变量名(keyEnv,如 SCNET_API_KEY)只作辅助展示;
    • 模型显示名 = 该 Provider 下该模型在全局模型设置里的 name(如 ark-code-latest →「GLM-5.3-Flash」、deepseek-flash →「DeepSeek-V4.1-Flash」);Provider 目录条目 models 随之由「模型 ID 字符串数组」升级为 [{ id, name }](旧配置读取自动兼容),价格编辑卡片、消耗统计按模型表 / 按 Key 模型明细、今日消耗(饼图悬停 / 图例 / tokens 表 / 单次明细)、使用分析(饼图悬停 / 图例 / Token Plan 名下模型 / 性价比排名 / 每日费用表)、顶部价格横幅与价格编辑弹窗一律改用显示名;悬停始终显示原始模型 ID。官方价格目录继续为每条收录模型携带显示名 name(目录生成器 tools/build-catalog.mjs 同步,重跑不丢失),作为全局模型设置未给显示名时的兜底。
  • 修复「模型归属的 Provider ID 错误」(Key A 的模型被分类到 Key B):根因是 Provider 目录只在插件启动时抓取一次,且抓取会与 settings/llm 服务注册竞态——一旦抓取时全局模型设置不可读,目录就退化成「账本观测」(只有调用过的模型),Provider 显示名回退内置表、各 Provider 的模型清单缺失,「模型属于哪个 Provider」也就无从按设置判定。现在:
    • 目录抓取退化(没有任何 settings/llm 来源的行)时启动后自动重试两次(间 2s);settings/updated(llm-* 命名空间,即全局模型设置变更)时立即重扫;读取目录时再按 TTL(5 分钟)/ 退化判定兜底重扫——运行期改全局模型设置后无需重启即生效;
    • 「模型 → Provider ID」的判定以全局模型设置的模型清单为准(价格编辑的 Provider ID 子卡片、Provider ID 管理的「所含模型」、消耗统计的 Provider 显示名同源),账本观测只作补集(补缺不覆盖设置里的显示名),模型显示名按 (Provider ID, 模型 ID) 精确归属、不跨 Provider 串台;
    • 消耗汇总严格按目录归属(0.3.7 补强,模型与 Provider ID 对不上的根因):使用分析 / Token Plan 的消耗聚合身份不再取运行时上报的路由——先按 Provider 目录(自动抓取的全局模型设置,Provider ID 是用户自己设置的)判定「该模型属于哪个 Provider ID」,命中即把该模型的消耗(回本 / 性价比 / 每日加权 / Key 额度 / 饼图)归到该 Provider 名下;不同 Provider ID 的同名模型按实际调用的路由归属(路由本身是目录行且声明了该模型 → 直接命中,各归各的不串台),路由缺失或不声明该模型时才按目录顺序取第一个声明者;目录未收录的模型保持账本身份兜底;
    • 模型品牌不再绑定厂商:删除内置「模型名前缀 → 厂商」表(brandOf)——品牌显示一律读本地数据 = 目录里归属 Provider 的显示名,目录未收录时回退运行时路由,都查不到显示「其他」;
    • 消耗统计 / 单次明细的环境变量名改以当前全局模型设置(目录)为准,历史账目里的旧标签只作兜底;完工弹窗里的「Key」显示 Provider 显示名,不再直接显示环境变量名。
  • 价格表大小写不敏感:价格计算使用的价格表(models 段)查找模型名不再区分大小写——已保存自定义价 DeepSeek-V4-Flash-0731 的模型,调用记录为 deepseek-v4-flash-0731(大小写不同)也按同一条价格计费;价格编辑页读取 / 新增查重 / 顶部横幅未定价判断同步改为大小写不敏感。
  • 峰谷定价机制重做(主体峰谷规则 v2):
    • 逐日生效日:每条规则可选 工作日 / 自定义 / 每天 三种生效日;「自定义」勾选周一至周日中任意几天(0 = 周日)。用户可按周一到周日逐日配置各自的高峰时间——每天单独一条规则,或用「工作日」一条覆盖周一至周五。
    • 自定义时区:主体峰谷配置新增时区设置(UTC 偏移小时,支持 0.5 步进),默认 8 = UTC+8;规则的生效星期与高峰小时都按该时区判定(旧版固定北京时间)。
    • 峰时价格计算方式:每条规则可选 倍率 / 自定义。「倍率」按倍率缩放基础价(旧行为);「自定义」在页面内直接填入峰时价格(五个单价字段),留空的字段按原价(基础价)计费,即只覆盖需要调整的字段。规则仍为条件格式式:自上而下首个命中调用时刻的规则生效,无命中按基础价。
    • 规则摘要徽标同步显示 生效日 + 时段 + 峰时价格方式;服务端 priceFor / tierForEntry 按 v2 规则取档,旧结构(weekdaysOnly + multiplier)读取时自动归一(仅工作日 → 工作日,否则 → 每天)。
  • 自定义价格倍率:
    • 模型卡片勾选「自定义价格」后可选 自定义(逐字段价)/ 倍率 两种方式;选择「倍率」时手动输入倍率,实际价 = 该模型默认价格 × 倍率(默认价 = 官方目录价,未收录模型回退全局默认价;字段级计算),页面同时只读展示按当前倍率计算的实际单价。
    • Provider ID 子卡片新增 价格倍率 调整(默认 1):对该 Provider ID 使用此模型的最终价格整体 × 倍率,与集体价 / 专属价、倍率模式叠加生效。
  • 旧版本价格数据处理(独立脚本):新增 lib/pricing-migrate.js——升级到 0.3.7 后的第一次启动自动执行:旧峰谷规则(仅工作日/倍率)归一到 v2(生效日 + 峰时价格方式),模型 / Provider 行补齐倍率字段(缺省 1,行为不变)并落盘;经 config.json 顶层 pricingVersion 标记只执行一次,幂等且失败不影响运行(读取侧兼容旧结构)。旧规则时区保持:旧版规则的高峰时段按 UTC 小时解释,v2 起按主体时区解释——迁移时携带旧规则的主体的时区固定为 0(UTC),保证已配置规则的计费行为逐刻不变(新配置的时区缺省 UTC+8)。
  • 修复 Token Plan 的 Provider ID 性价比计算错误:旧版按「订阅费 × 该模型 tokens ÷ 周期总 tokens」摊薄订阅费,数学上每个模型的性价比恒等于「周期总 tokens ÷ 订阅费」——同一 Token Plan 下所有模型的性价比完全相同、失去区分度。现改为按 「订阅费 × 该模型按模型价的消耗金额占比」加权摊薄,性价比 = 该模型调用量 ÷ 加权后的使用金额 = 1 块钱可兑换的 tokens 数量(各模型金额占比之和恒为 1,加权金额合计仍等于订阅费;各模型金额全为 0 的极端情况回退旧 tokens 摊薄),同计划下不同模型按各自按价效率区分排名。
  • 修复价格编辑页两处交互 bug:①「使用集体价格」无法取消勾选——勾选回调把新状态取反写回(取消勾选反而写回 true,勾选框弹回),现按勾选框新状态写回,取消勾选即展开该 Provider 专属价编辑并预填当前生效价;②价格倍率 / Provider 价格倍率 / 峰时倍率无法输入小数——受控输入在 onChange 立即数值化,小数点刚输入就被抹掉,现草稿保留原文(可正常输入 0.5、1.25 等),保存时统一数值化(服务端本就支持 4 位小数)。
  • 今日消耗页三项改进:①今日各模型 tokens 消耗量表每行显示该模型对应的 Provider ID(模型名后方小字),聚合按 (模型, Provider ID) 分行——不同 Provider ID 的同名模型分开统计与显示,饼图 / 图例同步分行;②tokens 表模型名后方添加小色块,色块只用于区分 Provider ID(同一 Provider 的模型共用同色,按出现顺序取色),表格下方新增图例(色卡 = Provider 显示名 · ID,不显示模型名与用量;网格布局,列宽按 Provider ID 字数自适应——ID 越短每行放的图例越多,每行至少 2 项、上下行对齐);③今日消耗明细翻页——每页最多 20 条,表格下方翻页器(上一页 / 下一页 + 页码与总条数,数据刷新后页码越界自动收敛)。

dsh-task-notice version0.3.7

Choose a tag to compare

@Haoxiang-Fant Haoxiang-Fant released this 14 Sep 13:39
193ecec

累积更新日志

0.3.7 (2026-09)

  • 显示名称(Provider ID + 模型名称):每个 Provider ID 与每个模型名称都有一个对应的显示名,用于在用户面前显示该 Key / 该模型的自定义名称。显示层名称解析顺序改为 全局模型设置里的自定义显示名 → 官方价格目录显示名(厂商 + 「 」+ 模型名称,来自《大模型API定价对比(4).csv》)→ 原始 ID:
    • Provider 显示名 = 该 Provider 在全局模型设置里的 displayName(如 scnet →「超算互联网」、bitdance-ark →「BitDance Ark MaaS」、deepseek-official →「DeepSeek」),环境变量名(keyEnv,如 SCNET_API_KEY)只作辅助展示;
    • 模型显示名 = 该 Provider 下该模型在全局模型设置里的 name(如 ark-code-latest →「GLM-5.3-Flash」、deepseek-flash →「DeepSeek-V4.1-Flash」);Provider 目录条目 models 随之由「模型 ID 字符串数组」升级为 [{ id, name }](旧配置读取自动兼容),价格编辑卡片、消耗统计按模型表 / 按 Key 模型明细、今日消耗(饼图悬停 / 图例 / tokens 表 / 单次明细)、使用分析(饼图悬停 / 图例 / Token Plan 名下模型 / 性价比排名 / 每日费用表)、顶部价格横幅与价格编辑弹窗一律改用显示名;悬停始终显示原始模型 ID。官方价格目录继续为每条收录模型携带显示名 name(目录生成器 tools/build-catalog.mjs 同步,重跑不丢失),作为全局模型设置未给显示名时的兜底。
  • 修复「模型归属的 Provider ID 错误」(Key A 的模型被分类到 Key B):根因是 Provider 目录只在插件启动时抓取一次,且抓取会与 settings/llm 服务注册竞态——一旦抓取时全局模型设置不可读,目录就退化成「账本观测」(只有调用过的模型),Provider 显示名回退内置表、各 Provider 的模型清单缺失,「模型属于哪个 Provider」也就无从按设置判定。现在:
    • 目录抓取退化(没有任何 settings/llm 来源的行)时启动后自动重试两次(间 2s);settings/updated(llm-* 命名空间,即全局模型设置变更)时立即重扫;读取目录时再按 TTL(5 分钟)/ 退化判定兜底重扫——运行期改全局模型设置后无需重启即生效;
    • 「模型 → Provider ID」的判定以全局模型设置的模型清单为准(价格编辑的 Provider ID 子卡片、Provider ID 管理的「所含模型」、消耗统计的 Provider 显示名同源),账本观测只作补集(补缺不覆盖设置里的显示名),模型显示名按 (Provider ID, 模型 ID) 精确归属、不跨 Provider 串台;
    • 消耗汇总严格按目录归属(0.3.7 补强,模型与 Provider ID 对不上的根因):使用分析 / Token Plan 的消耗聚合身份不再取运行时上报的路由——先按 Provider 目录(自动抓取的全局模型设置,Provider ID 是用户自己设置的)判定「该模型属于哪个 Provider ID」,命中即把该模型的消耗(回本 / 性价比 / 每日加权 / Key 额度 / 饼图)归到该 Provider 名下;不同 Provider ID 的同名模型按实际调用的路由归属(路由本身是目录行且声明了该模型 → 直接命中,各归各的不串台),路由缺失或不声明该模型时才按目录顺序取第一个声明者;目录未收录的模型保持账本身份兜底;
    • 模型品牌不再绑定厂商:删除内置「模型名前缀 → 厂商」表(brandOf)——品牌显示一律读本地数据 = 目录里归属 Provider 的显示名,目录未收录时回退运行时路由,都查不到显示「其他」;
    • 消耗统计 / 单次明细的环境变量名改以当前全局模型设置(目录)为准,历史账目里的旧标签只作兜底;完工弹窗里的「Key」显示 Provider 显示名,不再直接显示环境变量名。
  • 价格表大小写不敏感:价格计算使用的价格表(models 段)查找模型名不再区分大小写——已保存自定义价 DeepSeek-V4-Flash-0731 的模型,调用记录为 deepseek-v4-flash-0731(大小写不同)也按同一条价格计费;价格编辑页读取 / 新增查重 / 顶部横幅未定价判断同步改为大小写不敏感。
  • 峰谷定价机制重做(主体峰谷规则 v2):
    • 逐日生效日:每条规则可选 工作日 / 自定义 / 每天 三种生效日;「自定义」勾选周一至周日中任意几天(0 = 周日)。用户可按周一到周日逐日配置各自的高峰时间——每天单独一条规则,或用「工作日」一条覆盖周一至周五。
    • 自定义时区:主体峰谷配置新增时区设置(UTC 偏移小时,支持 0.5 步进),默认 8 = UTC+8;规则的生效星期与高峰小时都按该时区判定(旧版固定北京时间)。
    • 峰时价格计算方式:每条规则可选 倍率 / 自定义。「倍率」按倍率缩放基础价(旧行为);「自定义」在页面内直接填入峰时价格(五个单价字段),留空的字段按原价(基础价)计费,即只覆盖需要调整的字段。规则仍为条件格式式:自上而下首个命中调用时刻的规则生效,无命中按基础价。
    • 规则摘要徽标同步显示 生效日 + 时段 + 峰时价格方式;服务端 priceFor / tierForEntry 按 v2 规则取档,旧结构(weekdaysOnly + multiplier)读取时自动归一(仅工作日 → 工作日,否则 → 每天)。
  • 自定义价格倍率:
    • 模型卡片勾选「自定义价格」后可选 自定义(逐字段价)/ 倍率 两种方式;选择「倍率」时手动输入倍率,实际价 = 该模型默认价格 × 倍率(默认价 = 官方目录价,未收录模型回退全局默认价;字段级计算),页面同时只读展示按当前倍率计算的实际单价。
    • Provider ID 子卡片新增 价格倍率 调整(默认 1):对该 Provider ID 使用此模型的最终价格整体 × 倍率,与集体价 / 专属价、倍率模式叠加生效。
  • 旧版本价格数据处理(独立脚本):新增 lib/pricing-migrate.js——升级到 0.3.7 后的第一次启动自动执行:旧峰谷规则(仅工作日/倍率)归一到 v2(生效日 + 峰时价格方式),模型 / Provider 行补齐倍率字段(缺省 1,行为不变)并落盘;经 config.json 顶层 pricingVersion 标记只执行一次,幂等且失败不影响运行(读取侧兼容旧结构)。旧规则时区保持:旧版规则的高峰时段按 UTC 小时解释,v2 起按主体时区解释——迁移时携带旧规则的主体的时区固定为 0(UTC),保证已配置规则的计费行为逐刻不变(新配置的时区缺省 UTC+8)。
  • 修复 Token Plan 的 Provider ID 性价比计算错误:旧版按「订阅费 × 该模型 tokens ÷ 周期总 tokens」摊薄订阅费,数学上每个模型的性价比恒等于「周期总 tokens ÷ 订阅费」——同一 Token Plan 下所有模型的性价比完全相同、失去区分度。现改为按 「订阅费 × 该模型按模型价的消耗金额占比」加权摊薄,性价比 = 该模型调用量 ÷ 加权后的使用金额 = 1 块钱可兑换的 tokens 数量(各模型金额占比之和恒为 1,加权金额合计仍等于订阅费;各模型金额全为 0 的极端情况回退旧 tokens 摊薄),同计划下不同模型按各自按价效率区分排名。
  • 修复价格编辑页两处交互 bug:①「使用集体价格」无法取消勾选——勾选回调把新状态取反写回(取消勾选反而写回 true,勾选框弹回),现按勾选框新状态写回,取消勾选即展开该 Provider 专属价编辑并预填当前生效价;②价格倍率 / Provider 价格倍率 / 峰时倍率无法输入小数——受控输入在 onChange 立即数值化,小数点刚输入就被抹掉,现草稿保留原文(可正常输入 0.5、1.25 等),保存时统一数值化(服务端本就支持 4 位小数)。
  • 今日消耗页三项改进:①今日各模型 tokens 消耗量表每行显示该模型对应的 Provider ID(模型名后方小字),聚合按 (模型, Provider ID) 分行——不同 Provider ID 的同名模型分开统计与显示,饼图 / 图例同步分行;②tokens 表模型名后方添加小色块,色块只用于区分 Provider ID(同一 Provider 的模型共用同色,按出现顺序取色),表格下方新增图例(色卡 = Provider 显示名 · ID,不显示模型名与用量;网格布局,列宽按 Provider ID 字数自适应——ID 越短每行放的图例越多,每行至少 2 项、上下行对齐);③今日消耗明细翻页——每页最多 20 条,表格下方翻页器(上一页 / 下一页 + 页码与总条数,数据刷新后页码越界自动收敛)。

dsh-task-notice version0.3.6

Choose a tag to compare

@Haoxiang-Fant Haoxiang-Fant released this 13 Sep 04:19
51eed98

累积更新日志

0.3.6 (2026-09)

  • 顶部提示横幅(页面顶部常驻,shell.overlay 帧级浮层,所有页面显示,居中于页面顶部,可 × 关闭):
    • 通知权限横幅:系统通知开关开启但浏览器尚未授权 Web Notifications 时,页面顶部显示横幅提示「开启权限获得完整能力体验」;点击横幅即自动执行索权动作(浏览器弹出授权询问,授权成功后自动开启系统通知),无需再进设置页点「授权并开启」。权限被浏览器拒绝(denied)时横幅改为提示到地址栏站点权限中允许;点击横幅同样会尝试请求(被拒状态浏览器不再弹询问,按提示操作后刷新页面即可)。
    • 模型价格横幅:「当前使用的模型」没有规定价格(未激活自定义、官方目录未收录、也没有 Provider 专属价)时,页面顶部显示横幅提示「设置自定义价格」;点击横幅直接弹出该模型的价格编辑弹窗(五个单价字段,预填全局默认价,留空字段继续继承全局默认价),点「保存并确定」即写入配置并立即生效——消耗统计 / 使用分析 / 完工通知金额马上按新价格计算,横幅随之消失(若还有其他未定价的在使用模型则自动换成下一条)。
    • 「当前使用的模型」判定:最近一次完工通知帧携带的模型(实时)∪ 最近 7 天账本中最新使用且未定价的模型(刷新页面后仍能提示);目录未加载或插件停用时不显示。
  • deepseek-flash 价格 = deepseek-v4.1-flash:内置官方价目录为 deepseek-v4.1-flash 增加 deepseek-flash 别名(目录 match 列表),模型名 deepseek-flash 的调用按 deepseek-v4.1-flash 官方价计费(缓存命中 ¥0.02 / 缓外输入 ¥1 / 输出 ¥4,每 1M tokens);生成器 tools/build-catalog.mjs 同步更新,重跑不会丢失。
  • 价格工具函数(PRICE_KEY_LIST / cleanPrice / lookupClientModel / officialBaseOf)提升为浏览器端模块级共用(价格编辑页与横幅价格弹窗同源,行为不变)。
  • 横幅字色实时对比度修复:横幅背景是「强调色 × 主题底色」的 color-mix 混色,主题 label 色不保证与之形成对比(部分主题下字色与背景融为一体)。现改为渲染后读取横幅实际背景色实时决定字色(YIQ 亮度:浅底 ≥140 取深字 #1f1f1f,否则浅字 #fff,写入 --tn-banner-fg 覆盖主题色);主题切换时经 MutationObserver 观察 body style 变化实时重算,每次渲染后亦重算;背景解析失败或全透明时保留主题色。横幅内文字与 × 关闭按钮同用该字色。横幅同时加大:字号 12→13px(加粗 500)、内边距 7×12 → 10×16、图标 14→17px、元素间距 10→12、最大宽度 720→860px、圆角 10→12。
  • 权限横幅授权回执:点击权限横幅、浏览器授权成功后,立即直发一条系统通知「系统通知已开启」(桌面横幅 + Windows 操作中心,点击回到页面)作为确认回执。直发不经 showNativeNotify:它的「仅后台时发送」会在页面可见时把这条压掉,而这是用户手点的确认信号;updateConfig 失败不影响回执(权限已授予,与开关无关)。
  • 修复「点击权限横幅没有反应」(静默根因:授权弹窗被关闭且未选择):requestPermission() 在用户直接关掉浏览器授权弹窗时返回 default——权限没变,此前页面侧对此毫无可见变化(横幅文案不变、无任何弹窗),与「点击失效」无法区分。现在点击后任何结局都立即可见:
    • 等待中:横幅文字立即变为「正在请求浏览器授权…请选择允许」(也证明点击已送达——若点击后连这个文字都不变,说明页面还在跑旧代码,刷新即可);
    • 关闭未选择(default):横幅文字变为「授权窗口被关闭且未做选择…请再次点击并选择允许;若浏览器不再弹出询问,说明已被静默拦截,请在地址栏站点设置中改为允许」;
    • 拒绝(denied):保留原地址栏提示;
    • 授权成功:横幅消失 + 直发「系统通知已开启」系统通知回执。
    • 请求期间防重复点击;用户随后在地址栏站点设置手动改为「允许」后,窗口聚焦时横幅自动消失。

dsh-task-notice version0.3.5

Choose a tag to compare

@Haoxiang-Fant Haoxiang-Fant released this 11 Sep 11:11
caf0e18

更新日志

0.3.5 (2026-09)

  • 修复「偶发需要回答 / 需要授权时没有弹出通知」(根因:去重键误用内容签名):操作提醒(提问 / 授权)此前按内容签名(问题 id 拼接、工具名+原因)做页内去重且 60 秒不重弹——而问题 id 是模型自选、复用极常见(confirm / mode 等),用户回答后代理再用相同 id 提问(或无 callId 的同类工具连续请求授权)时,新请求被静默吞掉,页内弹窗与系统通知都不发。现改用官方 UI 待处理交互自带的每请求唯一 key 做去重身份,请求离开待处理列表(已回答 / 已关闭)即清出去重表,同一仍挂起的请求保留 60 秒防抖;帧 id 随之每请求唯一,同时消除同内容两请求并存时弹窗列表 React key 冲突的隐患。
  • 跨标签页系统通知去重与帧 id 解耦:系统通知的跨标签页 30 秒去重改用独立的内容签名 dedupeKey(各标签页交互计数器独立,帧 id 已不再跨页一致);问题签名并入首题文本,仅完全相同文本的提问 30 秒内合并横幅(防刷屏底线,页内弹窗每次必弹),仅复用 id、文本不同的新提问不再被吞。
  • 修复插件先于 uiSession / slots 就绪时操作提醒整体失效:浏览器端此前在 apply 里一次性 ctx.get('uiSession') / ctx.get('slots'),加载时序靠前时提问 / 授权监听或弹窗插槽注册被静默跳过,该页面生命周期内不再弹通知;现声明 inject: ['remote', 'uiSession', 'slots'],由 Cordis 停靠等待服务就绪后再激活(与官方 UI 插件一致)。
  • 修复断线重连后完工通知静默失效:subscribeNotifications 通知流随连接断开结束后此前不再重订阅,重连后完工 / Token Plan 通知全部失效直到刷新页面;现连接重置时重拉通知流(pumping 守卫防止并发双订阅产生重复帧)。
  • 健康信息中插件版本号修正为 0.3.5(常量此前残留 0.3.4)。
  • 价格编辑页重设:改为「模型卡片 + Provider ID 子卡片」结构——每张卡片显示一个模型的名字与集体价格(未自定义时显示官方价,勾选「自定义价格」解锁编辑),卡片右下角「保存 / 设置」;点击卡片非价格区域展开该模型所在的 Provider ID 子卡片,子卡片带「使用集体价格」开关(默认勾选)与右侧「保存 / 设置」,取消勾选即展开该 Provider 的专属价编辑(自动预填当前生效价)。
  • Provider ID 专属价:pricing.models 增加 providers 段({ useCollective, price }),priceFor 以 Provider ID(账目归一身份)解析 专属价 → 集体价 → 官方价;消耗统计 / 使用分析 / 单次明细 / 完工通知全链路计价点改按 Provider 身份解析。
  • 主体峰谷规则(条件格式式):卡片 / 子卡片的「设置」按钮进入该主体(模型集体 或 模型 × Provider ID)的峰谷计价临时页:启用开关 + 可增删的规则列表(峰时段 / 仅工作日 / 峰时倍率),自上而下首个命中调用时刻的规则按倍率缩放基础价,无命中按基础价;主体规则优先于官方目录内嵌峰谷档,Provider 规则优先于集体规则;退出临时页即保存此页的一切更改。启用峰谷计价后对应卡片显示「峰谷」徽标与规则摘要(峰谷编辑样式);全局峰谷窗口(官方目录档取档)保留在页首卡片。
  • 价格目录换源《大模型API定价对比(4).csv》:内置官方价目录按参考数据 CSV 重建(214 条;列映射:输入价格→缓外输入、输出价格→输出、缓存命中输入→缓存命中、缓存写入→缓存写入、推理过程→推理过程);DeepSeek 官方「(空闲)/(高峰)」成对行内嵌为峰谷子档(谷 = 基础价);0.3.4 目录中 CSV 未收录的 45 条保留为补充(标「0.3.4 目录补充」);USD 价按固定汇率 7.2 由 CNY 推导。目录文件由 tools/build-catalog.mjs 从 CSV 生成,改价后可重跑。
  • 服务端新增 normalizePeakRules;typert pricing schema 扩展 providers / peak(主体规则)段;旧配置读取兼容(无新字段时行为与 0.3.4 一致)。
  • 性价比计算表删除「品牌」列(排名数据不变,仅不再展示);每日费用消耗表的模型图例与堆叠色条改按模型名全局分配颜色——同一模型跨日期颜色一致,且与饼图图例同色。

dsh-task-notice version0.3.4

Choose a tag to compare

@Haoxiang-Fant Haoxiang-Fant released this 10 Sep 09:37
8b2e8ae

累积更新

0.3.4 (2026-09)

  • Token Plan 提示重置(402/429):模型调用流抛错且错误属于 Token Plan 错误码(HTTP 402/429 或 DSH 归一化码 QUOTA/RATE_LIMIT,沿 cause 链识别)时,若该 Provider 启用了 Token Plan,自动标记该 Provider ID 待确认(持久化 plan.pending)并弹出「需要重置 Token Plan 吗?」;弹窗内嵌重置流程(4 位验证码 + 两次确认,即进入 Token Plan 重置页),「稍后」或未回应不阻塞。
  • 续费确认弹窗:待确认的 Provider 下次正常调用时弹出「是否已续费?」——「是 + 确认」执行续费重置(冻结旧周期并开启新周期、清除待确认),随后再弹「是否更改了本次套餐?」,选「是」切到 设置 → Token Plan Key 管理 修改套餐(订阅费 / Credit / 有效期 / 自动重置);「否 + 确定」仅清除待确认、不重置周期。
  • 临时账本:429/402 之后该 Provider 产生的消耗进入临时账本——不参与当前周期回本 / 性价比计算,每日费用表按「待确认」标记展示;用户回应后:续费(重置)时临时账本并入被冻结的原周期合并显示,未续费时并回当前周期统计。
  • 周期唯一 TID:每个计费周期分配唯一 TID(插件内部身份,不向用户显示),随配置持久化;重置 / 自动轮换时旧 TID 冻结(tokens/cost 落盘,此后不再变化)并写入周期历史。
  • 性价比 / 回本只统计当前生效 TID:性价比排名不再优先用上一轮周期,Token Plan 的 Key 一律按当前周期(当前 TID)加权平均分配订阅费,无周期数据时才回退展示范围并标注「正在统计」。
  • 历史周期按钮:Token Plan 回本卡片新增「历史」按钮,点击展开查阅全部已冻结周期(起止时间 / 订阅费 / tokens / 金额)。
  • 每日费用消耗表同 TID 加权:Token Plan 加权平均严格限定在同一 TID 内(各 TID 用各自「订阅费 ÷ 该 TID 周期总 tokens」费率);同一天同一 Provider 出现在不同 TID 时,当天各 TID 数据相加合并为同一 Provider 显示。
  • 撤回保留 TID:重置撤回(undoPlanCycle)恢复周期边界的同时恢复原 TID,并把该 TID 的冻结快照移出周期历史;服务端与客户端保存套餐时原样保留 tid / cycles / pending / _undo(修复 0.3.3 保存套餐会丢失撤回快照的隐患)。
  • 服务端新增 RPC:renewPlanCycle(key, planChanged, fromMs, toMs)(续费确认重置)/ dismissPlanPending(key, fromMs, toMs)(未续费清除待确认);通知流新增 plan 帧类型(plan.action = reset / renew);客户端 CONTRIBUTION 与 api 同步声明。
  • 版本号 0.3.4。

0.3.3.1 (2026-09)

  • 修复「今日消耗」页面完全空白:今日消耗明细表的渲染引用了未定义的 entries(应为 data.entries),数据就绪后渲染直接抛 ReferenceError,整个设置页变空白;现补上 entries 取值,今日消耗正常显示(消费卡片 / 金额占比饼图 / 各模型 tokens 表 / 单次消耗明细)。
  • 修复完工通知显示消耗为 0:会话折叠(fold.js)此前只监听 assistant/chunk 事件累计 usage,而当前 DSH 的会话事件格式(v2/v3)已移除该事件——每次模型调用的用量改由结算事件携带(assistant/message 的 data.usage,或 assistant/message / assistant/attempt 的 data.stream 内 usage 记录);现按官方事件格式读取结算用量,完工通知的 tokens 与金额恢复真实值。旧宿主(格式 v0)的 assistant/chunk 逐块通道保留兼容,同一会话只认一种来源,不会重复计数。
  • 后台统计不受影响:消耗统计 / 今日消耗 / 使用分析的数据来自 llm/stream 瀑布记账(usage.json),与折叠通道独立,账本数据一直正常;本轮仅修复通知链路与其页面渲染。
  • 防御悬停越界:饼图数据刷新(切片变少/清空)时悬停索引可能越界导致渲染崩溃,今日消耗与使用分析两处饼图气泡均加越界防护。
  • 版本号 0.3.3.1。

0.3.3 (2026-09)

  • 顶部导航栏常驻页面顶部:导航栏 sticky 固定在页面顶部,往下翻阅时内容从其下方滚动;滚动超过阈值后页面右侧出现「回到顶部」箭头按钮,点击平滑回到页面顶部。
  • 今日消耗新增单次消耗明细:每次模型调用产生消耗的单条记录(时间 / 模型 / Provider / 缓存输入 / 缓外输入 / 输出 / 合计 / 金额),按时间倒序展示;服务端新增 RPC getUsageEntries(fromMs, toMs),金额按当前价格与峰谷档逐条现算,客户端 CONTRIBUTION 与 typert 清单同步声明(旧宿主无此 RPC 时该明细块自动隐藏,不影响统计)。
  • 修复单模型饼图不显示:SVG 弧线在起点=终点(单模型占满 360°)时整段不渲染,饼图会变成空白;现把整圆切成两个 180° 半环(颜色/悬停信息不变),单模型时显示完整 100% 圆环(今日消耗与使用分析两处饼图同修)。
  • 顶部导航新增「今日消耗」标签页(第一位):展示今天的模型消耗金额占比饼状图、各模型 tokens 消耗量(缓存输入/缓外输入/输出/合计)与今天的消费情况(总 tokens / 调用次数 / 金额);数据按今日 00:00(本地)到现在的账本计算,金额按当前价格与峰谷档现算,悬停饼图与数字可看精确值。
  • Token Plan 重置保护:重置按钮按下后需输入随机 4 位数字验证码、再两次点击不同位置的确认按钮才真正执行重置(防止误触)。重置完成后显示「撤回重置」按钮,同样输入 4 位验证码 + 两次确认后可撤回重置:恢复重置前的周期边界,重置期间产生的消耗自动并入恢复的周期(周期成本按账本时间现算)。撤回状态(plan._undo 快照)随配置持久化,重启 DSH 后仍可撤回。
  • 每日费用消耗表补图例:每日记录的每个模型行前新增颜色图例(与当日堆叠色条一致),便于对照。
  • 服务端新增 RPC undoPlanCycle(key, fromMs, toMs)(撤回重置,返回最新分析);客户端 CONTRIBUTION 与 api 同步声明

dsh-task-notice version0.3.2

Choose a tag to compare

@Haoxiang-Fant Haoxiang-Fant released this 10 Sep 04:48
adf7080

更新日志

注意 本版本为过渡版本,下一个版本很快更新

0.3.2 (2026-09)

  • Key 身份 = Provider ID(全局模型设置路由):消耗统计与使用分析的「按 Key」行、Token Plan 归属都改以全局模型设置里的 Provider 路由为身份(如 scnet / ten / deepseek-official),显示名用该 Provider 的 displayName(如 超算互联网 / DeepSeek);环境变量名(apiKeyEnv,如 SCNET_API_KEY)只作辅助展示。账本旧 key 标签自动迁移/兼容:plans 里按旧 env 名或 Provider 名设置的套餐在读取与启动时归一为 Provider id(目录未就绪时按内置路由提示表推导,查不到的键保留原样供手动删除)。
  • 设置页新增「Token Plan Key 管理」(取代原「价格编辑-Token订阅」):管理所有 Key(Provider 目录 ∪ 消耗记录 ∪ 已有计划键)的 Token Plan 设置(开关 / 订阅费 / Credit / 套餐起效 / 有效期或每月 1 号重置 / 回本进度 / Credit 换算),并支持删除该 Key 原有的 Token plan 属性(删除后该 Key 不再按订阅计费,消耗记录与金额保留)。
  • 设置页新增「Provider ID 管理」:插件自维护 Provider 目录(Provider ID + 显示名 + 环境变量名 + 所含模型),提供重置(重新抓取全局模型设置 + 账本观测并持久化)与手动删除失效 Provider ID(移出目录 + 删除其 Token Plan,重扫不再复活)。
  • 首次启动 / 无数据时自动抓取 Provider 目录:从全局模型设置(设置 → 模型,llm-* 命名空间 + 已注册 provider 路由)获取所有已配置 Provider 的 ID / 显示名 / 所含模型;价格编辑页在无消耗记录时也列出 Provider 目录所含模型,可提前定价。
  • 顶部导航按钮顺序调整:设置 → 任务通知与消耗 页顶部导航顺序改为 消耗统计 → 使用分析 → 价格编辑 → 设置。
  • 配置结构新增 providers 覆盖段({ version, updatedAt, removed, list }),由宿主维护;plans 键以 Provider id 为准(读取侧归一,旧 env 标签兼容)。
  • 服务端新增 RPC:getProviderDirectory() / refreshProviderDirectory() / deleteProviderId(id);统计与使用分析行携带 keyEnv / providerName 辅助展示字段。