Files
cc-web/.planning/usage-statistics-dashboard-plan/progress.md

88 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 进度记录cc-web 使用统计看板计划
## 2026-08-03
### Phase 1边界与统计口径确认
- **状态:** complete
- 已确认当前只产出计划,不修改产品代码。
- 已确认可靠指标及其时间归属。
- 已排除“活跃会话”和“Skill 实际读取次数”等不可靠指标。
- 已记录“不影响现有功能”的硬性边界。
### Phase 2 至 Phase 6实施与验收
- **状态:** complete
- 用户已确认进入代码实施,并指定侧栏底部入口位置。
- 已补充看板视觉主张、内容结构和交互原则;本轮仍未改产品代码。
- 已把“先记录现有行为基线、功能开关默认关闭”设为实施第一道门禁。
- 已创建 Trellis 任务 `08-03-usage-statistics-dashboard`
- 已记录现有高级会话检索相关脏文件,后续不得覆盖或清理。
- 计划审查指出缺少独立的全部主题适配阶段;已补充 Phase 5 和对应硬性验收门槛。
- 已确认 codebase-memory 索引可用并开始定位会话写入、MCP toolCalls、composerMentions 和前端入口链路。
- 第二次计划审查已通过;已修正 `created` 字段口径并加入 schema 版本和性能阈值。
- 已完成后端数据结构、前端入口、回归落点和 11 个主题的并行只读审计。
- 已确定看板使用 `.chat-main` 局部覆盖、独立状态机、独立请求 ID 和懒加载派生索引。
- 实施清单第 1 项完成,进入只读统计聚合模块与单元测试实现。
- 新增 `lib/usage-statistics.js``scripts/usage-statistics-unit.js`;语法检查、纯夹具单测和 `git diff --check` 通过。
- 实施清单第 2 项完成,进入独立 WebSocket 统计查询协议接入。
- 独立协议、指定入口、看板 DOM、前端状态机、趋势/明细交互及基础响应式样式已完成首轮实现。
- 已通过 `node --check`、统计单测和相关文件 `git diff --check`,进入全部现有主题适配。
- 已完成 CoolVibe、Carbon/Nocturne/Cinder、Gilded、Wasteland 的限定覆盖;其他主题直接继承看板语义变量。
- 已新增 `usage-statistics` 回归目标,真实 WebSocket 验证查询不会额外发送 `session_list`,禁用开关返回 `disabled`
- 83.3 MB / 134 个真实会话最终首次回填 1.15 秒,查询 P95 51.79 ms峰值 RSS 116.7 MB索引占源数据 0.47%。
- Chrome Headless 151 完成 11 个主题 × 5 个视口共 55 组布局验收;桌面、平板、移动端均无页面级横向溢出。
- 已验证 loading、MCP 长工具名明细、空态和无效日期错误态Wasteland 根看板改为实色,避免下层输入框视觉透出。
- `gilded-theme``wasteland-theme``advanced-session-search`、统计专项和全量回归均通过。
### Phase 7最终审查与交付
- **状态:** complete
- 两轮独立审查均无高等级问题;提出的 4 个中等级问题已全部修复并补回归合同。
- 已限制 MCP/Skill 返回规模、公开 total/returned、明确明细“最近 X / 共 Y 条”,回填改为每文件让出事件循环。
- 已修复异常空文件增量可能保留旧文档,并把聚合核心单测接入统计专项和全量回归。
- 已修复 CoolVibe 选中按钮对比度和暗色日期原生图标Chrome computed style 验证通过。
- PM2 服务已在线加载,用户确认最终效果可用。
- 最终清理只删除本任务生成的临时浏览器包、截图和根目录 TODO CSV未清理既有高级检索改动。
## 本轮文件变更
- `lib/usage-statistics.js`:新增懒加载、可重建的只读统计索引与聚合器。
- `scripts/usage-statistics-unit.js`:新增统计口径、隐私、增量和损坏文件单测。
- `server.js`:新增功能开关、安全生命周期钩子和独立查询协议。
- `public/index.html`:新增固定 footer 入口和 chat-main 局部看板 DOM。
- `public/app.js`:新增独立看板状态、查询、渲染和恢复交互。
- `public/style.css`:新增基础响应式看板与现有主题限定覆盖。
- `scripts/regression.js`:新增统计专项合同和真实 WebSocket 回归。
- 计划、Trellis 和临时 CSV 仅用于过程记录;现有高级检索脏改动全部保留。
## 验证结果
| 验证项 | 预期 | 实际 | 状态 |
|---|---|---|---|
| 单元与专项 | 统计口径、隐私、协议隔离 | 全部通过 | 通过 |
| 全量回归 | 现有功能不回归 | `Regression checks passed.` | 通过 |
| 性能 | 回填 ≤3s、P95 ≤100ms、RSS ≤160MB、索引 ≤35% | 1.15s / 51.79ms / 116.7MB / 0.47% | 通过 |
| 浏览器 | 11 主题 × 5 视口、动态状态 | 55 组 + loading/detail/empty/error | 通过 |
| 风险隔离 | 独立入口、协议、索引和关闭开关 | `CC_WEB_USAGE_STATISTICS=0` 可即时关闭 | 通过 |
## 错误日志
| 时间 | 错误 | 尝试 | 处理 |
|---|---|---:|---|
| 2026-08-03 | 无 | 1 | — |
| 2026-08-03 | `task.py list-context` 不接受 action 位置参数 | 1 | 已有 `task.py validate` 通过结果,改为由实现代理读取 `implement.jsonl` |
| 2026-08-03 | Wasteland 回归把三暗色统计 selector 识别为五主题共享层 | 1 | 将统计暗色组改用等价 `:where(...)`,保留既有共享层合同 |
| 2026-08-03 | 浏览器验收把局部表格 scrollWidth 误报为页面溢出 | 1 | 以 document/body/dashboard body 为页面口径,表格保留明确的局部横向滚动 |
| 2026-08-03 | 动态状态脚本刚完成查询即刷新,命中 250ms 限流 | 1 | 按真实操作节奏增加 350ms 间隔,协议行为符合设计 |
## 5 问检查
| 问题 | 答案 |
|---|---|
| 当前在哪? | 功能与验收完成,正在最终独立审查和清理 |
| 接下来去哪? | 审查结论、运行服务激活、交付记录 |
| 目标是什么? | 不影响现有功能地增加只读使用统计看板 |
| 已学到什么? | 见 `findings.md` |
| 已完成什么? | 整体功能、全主题适配、专项/全量回归、性能和浏览器验收 |