# 进度记录: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` | | 已完成什么? | 整体功能、全主题适配、专项/全量回归、性能和浏览器验收 |