Skip to content

fix: 内置服务统计期间的今日用量只显示已用量,不再写「暂不限量」 - #225

Merged
sunerpy merged 1 commit into
mainfrom
fix/usage-counting-period
Nov 7, 2026
Merged

sunerpy merged 1 commit into
mainfrom
fix/usage-counting-period

Conversation

@sunerpy

@sunerpy sunerpy commented Nov 7, 2026

Copy link
Copy Markdown
Owner

内置服务在只统计用量、不设上限的阶段(服务端 mode=count),电脑和手机上原来写「暂不限量」「统计期间不设上限」。按 2026-11-07 用户的决定(「今日用量 无需展示为暂不限量」),这一阶段改为只显示已用的量,例如「今日已用 12 分钟」;服务端设了上限后照旧显示「已用 x / y」,不需要更新应用。

每一处的改动(统计期)

限额模式(「已用 x / y」、剩余量、进度条、80% 变黄、已用完、无法获取、重置时刻)不变。

位置 之前 之后
电脑侧栏卡片 标题右侧「暂不限量」,行「识别 23 分钟」「润色 41 次」,底部「统计期间不设上限」 标题右侧「00:00 重置」,两行不变,没有底部说明
侧栏收成一行 「今日用量 · 暂不限量」 「今日用量 · 识别 23 分钟」
侧栏收起后的圆环提示 「今日用量:识别 23 分钟,润色 41 次 · 暂不限量」 「今日用量:识别 23 分钟,润色 41 次 · 00:00 重置」
首页模型下方 「内置服务 · 今日已用 23 分钟 · 暂不限量」「· 今日已用 41 次 · 暂不限量」 「内置服务 · 今日已用 23 分钟」「· 今日已用 41 次」
「用量」页服务卡片 「23分钟」旁「暂不限量」 只有「23分钟」(近 7 天图照旧没有上限虚线)
语音模型 / AI 模型页的内置服务卡片 「今日已用 23 分钟 · 暂不限量」 「今日已用 23 分钟」
内置服务的抽屉 状态「暂不限量」、「今日已用 23 分钟」、底部「统计期间不设上限 · 明天 00:00 重置 · 还有…」 「今日已用 23 分钟」,底部「明天 00:00 重置 · 还有…」
同上,英文 「No limit yet」「41 uses used today」「No limit while usage is being measured」 「Used today: 41 uses」
手机说话页 「内置服务 · 今日已用 23 分钟 · 暂不限量」 「内置服务 · 今日已用 23 分钟」
手机 设置 › 用量 行 「识别 23 分钟 · 润色 41 次 · 暂不限量」 「识别 23 分钟 · 润色 41 次」
手机用量页卡片 状态「暂不限量」,数字「23 分钟 · 统计期间不设上限」 数字「23 分钟」,重置时刻照旧
手机悬浮球 「使用内置服务时计入这部手机的用量 · 今日已用 23 分钟 · 暂不限量」 「… · 今日已用 23 分钟」
Tauri 手机壳的模型页卡片与抽屉 同电脑(共用 packages/ui) 同电脑
  • 数字的写法在 packages/shared/src/usage.ts,三个前端共用;改动在 packages/ui/src/features/usage/Usage.tsx、apps/desktop/src/features/usage/SidebarUsage.tsx、apps/desktop/src/pages/Usage.tsx、apps/mobile-rn/src/features/Usage.tsx。
  • 删除不再使用的 i18n 键(中英文各 4 个):usage.unlimited、usage.unlimitedNote、usage.unlimitedShort、usage.inline.unlimited;两种语言的键集一致。英文 usage.todayUsed 由「{amount} used today」改为「Used today: {amount}」,与中文「今日已用 {amount}」语序一致。
  • 侧栏在两个服务都不用内置服务时写的「未使用内置服务,不限量」是本机统计的说明,与统计期无关,保留。

服务端切换时自动更新

服务端从统计期改为限额,或从限额改回统计期,界面会自己跟着变,不用重启或更新应用:每个回答里的 X-Voltip-Quota 用量头(Metering::report)和每 10 分钟的用量查询(UsageProbe)都进入 UsageRuntime::reported,整份替换核心里的回报,随后 CoreEvent::Usage 整份替换界面的 UiState.usage(crates/voltip-core/src/ui.rs、packages/shared/src/schema.ts 的 applyEvent,电脑和两个手机端都用它),界面按新的模式和上限重新显示。这条路径原来就是这样,本 PR 没有改 Rust 产品代码,加了测试把两个方向固定下来:

  • Rust:runtime::usage::tests::the_view_follows_the_service_from_counting_to_limits_and_back(回答的头与用量查询各一次,计数 → 限额 → 计数 → 限额 → 计数)
  • 前端各一个来回切换的测试:packages/shared/src/usage.test.ts、packages/ui/src/features/usage/Usage.test.tsx(含英文和模型页卡片、抽屉)、apps/desktop/src/features/usage/usage.test.tsx(侧栏卡片和首页)、apps/mobile-rn/src/features/Usage.test.tsx(说话页、设置行、用量页)、apps/mobile/src/screens/SpeechModels.test.tsx(Tauri 手机壳,新文件)

文档:docs/site 的「云端识别」页中英文同步(统计期只显示已用量,开始限量后下一次使用内置服务或 10 分钟内的用量查询改为「已用 12 / 60 分钟」,无需更新 Voltip);docs/dictation.md §27.5、§27.7、§27.8 与 docs/acceptance.md 同步。截图没有重拍:站点里显示用量的 24 张截图都是限额模式或本机统计,没有统计期的画面。

验证

  • make verify(干净的 HEAD):首行 verify-all: 2026-11-07T08:32:55Z host=Linux 7.0.0-1014-aws x86_64,commit=3b28255059e92379da4dce0a3acf29b10e6f29a6 dirty_paths=0 gates=all,末行 verify-all: overall_exit=0 commit=3b28255059e92379da4dce0a3acf29b10e6f29a6。覆盖率(行):Rust 92.91%,packages/shared 95.6%,packages/ui 97.9%,apps/desktop 97.52%,apps/mobile 97.69%,apps/mobile-rn 97.32%。
  • 先失败后通过:把 7 个产品文件换回基线 f909b335 的内容、保留本 PR 的测试,5 个测试文件共 17 个失败(packages/shared 4、packages/ui 4、apps/desktop 4、apps/mobile 1、apps/mobile-rn 4),收到的都是旧写法「暂不限量」「统计期间不设上限」「No limit yet」;恢复后全部通过。17 个里 11 个是新测试;6 个是已有测试,只把它们统计期的期望值改成新写法,限额模式的断言没有改。没有删除、跳过或放宽测试。
  • Rust 测试在基线上本来就通过(它固定的是已有行为)。把 reported 改成保留第一次回报的模式与上限时,它失败(left: (Count, 120, None, None),right: (Limit, 120, Some(3600), Some(100))),恢复后通过。
  • Windows 真机(scripts/windows-remote.sh,3b282550):gate clippy 通过;gate test 只有基线就有的两个失败(voltip-relay --test socket、voltip-transport --test link),新 Rust 测试通过。
  • IPC 夹具:UPDATE_IPC_FIXTURES=1 cargo test -p voltip-tauri-bridge --test contract 通过,夹具没有变化。
  • 站点检查:firlab 的 sync-voltip-docs.sh 内容检查通过。
  • 开发版前端(mock 后端,?usage=count)手动看过侧栏卡片、首页、用量页、模型页卡片、抽屉、收起后的圆环提示。

需要在真机上确认

  1. 正式构建连上内置服务、服务端处在统计期时:电脑的侧栏卡片、首页、用量页、语音模型 / AI 模型页、抽屉,以及手机的说话页、设置 › 用量、用量页、悬浮球都只写已用量,没有「暂不限量」「统计期间不设上限」。
  2. 在管理台把服务端改为限额:不重启应用,下一次使用内置服务或 10 分钟内的用量查询之后,上述各处改为「已用 x / y」;再改回统计期,又只写已用量。

风险与回退

只改显示文字、i18n 键和测试,不改数据、协议或安全边界。回退即还原这个提交。

服务端只统计、不设上限时,电脑与手机上显示内置服务用量的地方
(侧栏卡片、「用量」页、首页、语音模型与 AI 模型页的服务商卡片、
内置服务的抽屉、对话页与悬浮球的提示、手机的设置行)只写已用的量,
例如「今日已用 12 分钟」;不再出现「暂不限量」「统计期间不设上限」
及对应英文。服务端设了上限后照旧显示「已用 x / y」。

界面一直随回答里的用量头和每 10 分钟的用量查询整体替换,计数与限额
之间来回切换无需重启或更新应用;新增测试覆盖两个方向。

删除不再使用的 i18n 键 usage.unlimited、usage.unlimitedNote、
usage.unlimitedShort、usage.inline.unlimited;英文 usage.todayUsed
改为 "Used today: {amount}"。docs/site 的云端识别页中英文同步更新。

用户决定(2026-11-07):「今日用量 无需展示为暂不限量」。
@codecov

codecov Bot commented Nov 7, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 97.91667% with 1 line in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
apps/desktop/src/features/usage/SidebarUsage.tsx 83.33% 0 Missing and 1 partial ⚠️

Impacted file tree graph

@@            Coverage Diff             @@
##             main     #225      +/-   ##
==========================================
+ Coverage   93.51%   93.53%   +0.02%     
==========================================
  Files         482      482              
  Lines       83966    83995      +29     
  Branches     4902     4899       -3     
==========================================
+ Hits        78518    78562      +44     
+ Misses       4776     4764      -12     
+ Partials      672      669       -3     
Flag Coverage Δ
rust 93.76% <100.00%> (+0.02%) ⬆️
web 92.38% <93.33%> (+0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
apps/desktop/src/pages/Usage.tsx 86.88% <100.00%> (+3.01%) ⬆️
crates/voltip-core/src/runtime/usage.rs 93.87% <100.00%> (+0.95%) ⬆️
packages/shared/src/i18n/en.ts 100.00% <ø> (ø)
packages/shared/src/i18n/zh-CN.ts 100.00% <ø> (ø)
packages/shared/src/usage.ts 92.50% <100.00%> (-0.07%) ⬇️
packages/ui/src/features/usage/Usage.tsx 95.83% <100.00%> (+0.04%) ⬆️
apps/desktop/src/features/usage/SidebarUsage.tsx 90.41% <83.33%> (-0.38%) ⬇️

... and 9 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@sunerpy
sunerpy merged commit f0001e2 into main Nov 7, 2026
17 checks passed
@sunerpy
sunerpy deleted the fix/usage-counting-period branch November 7, 2026 10:03
@github-actions github-actions Bot mentioned this pull request Nov 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant