Skip to content

feat(stats): 增强stats能力,支持跨session的全局用量统计,参考Claude Code #4597

Description

@BenGuanRan

What would you like to be added?

增强 /stats 命令,支持跨会话的持久化用量追踪和交互式全屏仪表盘,对标 Claude Code 的 stats 体验。

当前行为

  • /stats 仅展示当前会话的指标(token、工具调用、时长)
  • CLI 退出后所有数据丢失(仅存在于内存中的 uiTelemetryService
  • 无法查看历史趋势或跨会话的聚合用量

期望行为

1. 用量持久化

会话退出时自动将用量摘要追加写入 ~/.qwen/usage-history.jsonl,包含:

  • 按模型的 token 明细(input/output/cached/thoughts)
  • 工具调用汇总
  • 文件变更统计(增/删行数)
  • 会话时长与项目路径

2. 交互式 /stats 仪表盘

交互模式下将 /stats 升级为全屏 Dialog,包含:

  • Overview 标签页:GitHub 风格活动热力图(·░▒▓█)、会话数、活跃天数、连续活跃天数、最长会话、常用模型
  • Models 标签页:ASCII 每日 token 折线图、按模型占比展示 In/Out 明细及费用估算
  • 日期范围切换:按 r 在 All time / Last 7 days / Last 30 days 之间循环
  • 标签页导航Tab/Shift+Tab 切换 Overview 和 Models

3. Report 子命令

/stats report [today|week|month|all] 输出内联文本报告,/stats report export [json|csv] 导出文件。

4. 非交互模式兼容

headless 模式(-p)下 /stats 仍返回纯文本的当前会话统计,行为不变。

Why is this needed?

对于日常使用 CLI 编程助手的用户,了解 token 消耗模式至关重要:

  1. 成本感知 — 用户无法看到跨会话的累计开销。单次会话看起来便宜,但按天/周聚合后才能看到真实花费。
  2. 用量优化 — 了解哪些模型消耗最多 token、缓存命中率随时间的变化、哪些项目最活跃,有助于用户优化工作流。
  3. 使用趋势 — 连续活跃天数、活跃天数占比、会话趋势等指标让用户直观感受自己的使用模式,类似 GitHub 贡献图。
  4. 团队管理 — 共享 API Key 的团队需要按项目的用量明细来分摊成本。

Claude Code 已经提供了包含热力图、图表和日期过滤的交互式 stats 页面,Qwen Code 应该提供同等或更好的用量可视化能力。

Additional context

参考:Claude Code 的 stats 界面

Claude Code 的 /stats 渲染一个交互式全屏面板,包含:

  • 贡献热力图日历
  • 标签页切换(Overview / Models),支持键盘操作
  • 每日 token 折线图
  • 日期范围循环(All time / Last 7 days / Last 30 days)
  • 趣味统计(最长会话、连续天数、趣味对比)
  • 按模型占比的 token 明细

实现思路

  • 持久化使用追加写入 JSONL(复用已有的 jsonl-utils.ts 中的 writeLineSync),保证崩溃安全
  • Dialog 遵循已有的 Help/MCP/Hooks 对话框模式(通过 DialogManager 全屏接管)
  • 热力图使用 Unicode 方块字符渲染;折线图使用 box-drawing 字符
  • 已有子命令(/stats model/stats tools)保持不变,仍为内联面板
  • 数据聚合复用 /insight 流水线中的 streak 计算逻辑
Image

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions