Files
cc-web/.planning/usage-statistics-reference-refit/findings.md

13 KiB
Raw Blame History

使用统计原型返工发现

产品化优化三项论点

  • 视觉论点:把统计页做成连续、克制、带明确阅读节奏的 cc-web 运营工作台;用留白、分隔线和字号建立层级,减少卡片马赛克、重复边框和多色竞争。
  • 内容计划顶部用周期与五项核心数据回答“发生了什么”中部用趋势、MCP 与 Skill 回答“功能如何被使用”;底部用最近会话提供可追溯证据。
  • 交互论点时间筛选固定在浏览起点排行和成功率保持明确可点击MCP 明细从页面内跳转改为右侧抽屉;移动端指标带支持横向吸附浏览。

本轮范围

  • 保留五项指标、趋势、三组真实构成、MCP 排行、Skill 排行、最近会话与全部日期能力。
  • 不新增环比、独立用户、会话时长等统计协议不存在的数据。
  • 不修改聊天消息 DOM、草稿、附件、生成状态、会话 JSON 与统计后端。
  • 复用现有 11 个主题的语义变量,不新增主题 ID不引入运行时图片资产。
  • 根据用户要求,本轮不派额外审计代理。

产品化实现后的视觉证据

  • 桌面端指标已变为一条连续指标带,图标改为文档、轨迹、节点、警示、火花五种 cc-web 原生线性符号;不再复制原型的圆形彩色图标。
  • 趋势与 MCP 面板通过中间分隔线形成两栏,六行 Top MCP 加“查看其余”入口后高度约 346px与趋势区约 348px 对齐;不再由长工具清单撑高右栏。
  • MCP 默认只渲染前 6 项,其余数量使用面板底部的展开按钮;展开仍复用同一真实数据和成功率明细入口。
  • MCP 调用明细已从页面内滚动改为右侧抽屉有遮罩、独立滚动和关闭入口Esc/遮罩/关闭按钮均可退出,背景上下文保持不变。
  • 手机端指标改为 218px 横向吸附带;首屏可以先看到两项核心指标,趋势和 MCP 表格纵向继续阅读,表格保持横向滚动而不压缩成功率列。
  • 产品化视觉脚本第一轮报告4 个视口与 11 个主题 dashboard/body 横向溢出均为 0文字溢出为 0会话表在移动端恢复合理横向滚动宽度

现版与原型视觉复核后的优化点

  • 现版已经正确承接原型的信息架构,但五张彩色指标卡、两个主卡、三张内嵌环图卡和底部卡片连续叠加,形成明显的“卡片马赛克”。
  • 状态区同时存在外层面板、内层三卡、环图与图例,边框层级重复;应保留数据,移除内层盒子,用分栏与细分隔线建立关系。
  • 五项指标目前各自使用高饱和图标色和折线色,注意力被平均分散;应统一为主题主强调,失败只保留状态色。
  • 标题旁重复信息图标与辅助说明密度过高;只在统计口径确有必要的位置保留一句说明,其他由标题、标签和数值自身表达。
  • MCP 表成功率是明确交互入口,但现版点击后滚动到页面中部的大明细区,破坏阅读上下文;抽屉更符合 cc-web 已有“主工作区 + 次级上下文”的应用结构。
  • 手机版五张大卡纵向堆叠会消耗过多首屏,应改为横向吸附的紧凑指标带,用户可以先读前两项,再按需横滑。

用户反馈

  • 现有实现与用户提供原型的版式、信息密度和视觉层级明显不一致。
  • 原型的关键不是配色,而是完整的大盘信息架构和组件比例。

参考图初步拆解

  • 顶部:左侧标题和时间切换,右侧全局操作。
  • 第一行:五张等宽指标卡,每张含彩色圆形图标、指标、数值、环比和小趋势。
  • 第二行:约 1:1 的双栏;左侧大趋势图,右侧 MCP 工具明细表。
  • 第三行:左侧状态统计,内含三个环图;右侧 Skill 排名表。
  • 底部:横跨整行的最近会话表。
  • 视觉:浅灰页面底、白色面板、细边线、小圆角、轻阴影、蓝色主强调,高密度但不拥挤。

参考图量化基线

  • 原始尺寸1467 × 943pxPNG RGBA文件大小 1,412,493 字节。
  • SHA-256ddbcc605cdcd4ea6aab943b4fa101c1e4af7e1c729fa090d1c89d847e2fdf91d。
  • 归档路径:.trellis/tasks/08-03-usage-statistics-dashboard-refit/references/source-assets/usage-statistics-dashboard-reference.png。
  • 页面外边距约 8px指标卡间距约 12px主要面板圆角约 12px边线约 1px。
  • 五张指标卡总高约 112px主趋势/MCP 明细行高约 310px状态/Skill 行高约 225px。
  • 桌面双栏以近似 1:1 展开,不采用当前实现的窄侧栏或散落卡片结构。

实现边界

  • 复用现有统计结果和交互,不增加无法从现有数据得到的“组织、独立用户、会话时长、人工/自动消息”等字段。
  • 不新增主题,不改变统计后端协议。
  • 需要同步桌面和移动端,不强行在手机上维持五列与双栏。

代码定位

  • codebase-memory 项目 home-cc-web4,720 节点、10,178 条边,索引状态 ready。
  • 看板总渲染入口public/app.js 的 renderUsageDashboard。
  • 趋势渲染renderUsageTrendSkill 排行renderUsageSkills最近会话renderUsageSessions。
  • 数据聚合与索引在 lib/usage-statistics.js当前返工不修改其协议和统计口径。
  • 后续需要继续定位 MCP 表格、状态统计、日期控件和事件绑定函数,再建立“参考区域 → DOM → 数据 → CSS”映射。

当前渲染能力

  • renderUsageDashboard 只负责填充 overview 指标、消息拆分、MCP 失败率、更新时间与覆盖说明,然后调用五个子渲染函数。
  • 当前共有 6 个 usage 渲染函数Dashboard、Trend、McpStatus、McpTools、Skills、Sessions。
  • 现有数据已经足够支撑原型中的五个顶层指标、趋势区、MCP 表格、状态区、Skill 排行与最近会话;主要缺口是 DOM 信息架构和视觉表达,不是后端数据。
  • renderUsageDashboard 由 handleUsageStatisticsResult 和 openUsageDashboard 调用,重构时保持这两个入口不变。

当前 DOM 与原型偏差

  • 当前第二行是“趋势 + MCP 状态”,原型要求“使用趋势 + MCP 使用明细”。
  • 当前 MCP 工具表独占整行,原型要求它位于趋势右侧。
  • 当前第三行是“Skill + 最近会话”,原型要求“状态统计 + Skill 排行”。
  • 当前最近会话只占半行,原型要求底部横跨整行。
  • 当前指标卡只有文字/数字/说明,缺少原型中的图标、色彩编码、微趋势和清晰的左右信息分区。
  • 日期控件拆成两个原生 input 和“应用”,原型是一个紧凑日期范围控件;保留现有两个 input 的交互语义,但外观合并为一个控件组。

参考区域到现有 DOM 映射

  • 顶部标题/筛选 → usage-dashboard__header + usage-dashboard__toolbar。
  • 五项概览 → usage-dashboard__metric-grid 与 data-usage-metric。
  • 使用趋势 → usage-dashboard__panel--trend + usage-dashboard-trend SVG。
  • MCP 使用明细 → usage-dashboard-mcp-rows。
  • 状态统计 → usage-dashboard-mcp-status将现有条形状态改为原型式环图卡。
  • Skill 排行 → usage-dashboard-skill-rows改造成表格行与占比条。
  • 最近会话 → usage-dashboard-session-rows改为全宽底部表。
  • MCP 调用明细 → usage-dashboard-detail作为工具表下方/浮层扩展状态继续保留。

渲染与样式重构决策

  • 当前主内容列宽为 2.4fr : 1fr直接导致右侧 MCP 状态变成窄边栏;返工为近似 1fr : 1fr。
  • 顶部指标卡保留五列,但增加图标区、信息区和按 data.trend 生成的真实 sparkline不使用静态假曲线。
  • 趋势图改为“消息/MCP 柱 + 会话/Skill 线”的混合表达,更接近原型且完全来自现有 trend 数据。
  • MCP 工具表改为“排名、Server / Tool、调用、成功、失败、成功率”成功率单元格同时承担详情入口。
  • 状态统计改为三张真实环图卡MCP 结果、直接/跨会话消息来源、MCP/Skill 功能使用构成。
  • Skill 排行增加使用占比和进度条;不展示协议没有的独立用户数。
  • 最近会话改为全宽表,增加明确“查看”操作;不展示协议没有的用户和会话时长。
  • 浅色基础视觉对齐参考图;深色/特殊主题只覆盖语义 token 和局部圆角,不复制业务布局。

日期范围交互

  • 现有状态只绑定“本周/本月”,但 syncUsageDashboardPeriod 已允许其他 period 值且不会覆盖日期输入。
  • 新增“自定义”按钮时只需增加 DOM 引用、aria-pressed 同步和事件绑定;查询仍复用 usageRangeFromInputs 与 usage_stats_query。
  • 两个 date input 保持真实可编辑和可访问性CSS 将它们组合成原型中的单一日期范围控件外观。

趋势字段核对

  • lib/usage-statistics.js 的每日 bucket 已包含 newSessions、messages、directMessages、crossConversationMessages、mcpCalls、mcpFailures、skillMentions。
  • 因此五张指标卡都能生成真实 sparklineMCP 失败卡不需要用静态图或按总失败率推测每日值。

浏览器验收环境

  • 现有 cc-web 服务 http://127.0.0.1:8002/ 返回 200远程命名空间地址为 11.144.144.11。
  • PATH 中没有 Chrome但可复用 /home/hdzx/.cache/ms-playwright/chromium-1228/chrome-linux64/chrome。
  • 项目已有 ws 依赖,可通过 Chrome DevTools Protocol 完成登录、打开看板、读取几何和截图,无需安装新包。
  • 为避免读取或输出线上密码,视觉验收使用单独端口和临时已知测试密码启动同一代码,不重启线上服务。
  • 打开看板会立即触发默认范围查询;自定义日期脚本必须等待该查询结束,否则 disabled 的“应用”按钮不会响应程序化 click。
  • 服务端对同一 WebSocket 的统计查询设置 250ms 间隔;浏览器验收在默认查询完成后等待 320ms再提交自定义范围。

首轮真实视觉结果

  • 1467×943、washi 主题下,五卡横排,每卡约 222px主区趋势与 MCP 面板均约 573.5px,严格等宽。
  • 状态与 Skill 面板同样等宽,最近会话从首屏底部露出,整体信息架构已与参考原型一致。
  • 看板和 body 横向溢出均为 011 个主题的页面/面板背景均取到对应语义颜色。
  • 待修 1222px 指标卡中 copy 列过窄,标题和说明出现省略号。
  • 待修 2MCP 表继承 640px 最小宽度,大于 573.5px 面板内宽,导致成功率百分比需要横向滚动。

第二轮真实视觉结果

  • 指标卡标题/数字/说明已无截断1467、1024、768、390 四档 textOverflow 均为 0。
  • MCP 表最小宽度降为 520px 后,桌面端六列完整显示,成功率进度条和百分比均可见。
  • 1467×943 下仍保持五卡约 222px、主双栏各 573.5px;看板和 body 横向溢出继续为 0。
  • 与原型相比,顶部筛选和五卡的 y/高度已经接近;主行和下排行略高,导致最近会话首屏只露出标题,需要结合移动端与暗色截图决定是否继续压缩。

移动与暗色对照

  • 390×844 下筛选、日期、五张单列指标卡完整显示,未发生控件重叠;趋势图按页面纵向继续滚动。
  • wasteland 1440×900 下结构、环图、表格和强调色均正确,主题专属 2px 圆角继续生效。
  • 需要隐藏手机标题下过长覆盖说明并进一步收紧最长指标标题、MCP 行和 Skill 行。

第三轮几何结果

  • 四档视口继续保持横向溢出 0、文字溢出 0手机标题说明已隐藏。
  • 11 主题中仅 coolvibe 在 1440×900 对最长 Skill 指标标题出现 1 处省略,其他主题均为 0。
  • MCP 紧凑 padding 首次放在通用 table padding 之前,被后置同权重规则覆盖;需调整声明顺序后再测。

最终视觉验收结果

  • 1467×943五卡横排主趋势/MCP 各 573.5px 宽、309px 高;状态/Skill 各 573.5px 宽、247.5px 高;最近会话 y=819.2,可见表头与首行。
  • 1024×768、768×1024、390×844按断点折叠无页面横向溢出、无检测到的文字溢出。
  • 11 个主题在 1440×900 均为 dashboardOverflowX=0、bodyOverflowX=0、textOverflowCount=0。
  • MCP 调用明细已真实点击展开并截图,成功/失败/其他状态、会话和 Agent 列可见。
  • 共保留 16 张真实 Chrome 截图和 visual-report.json数据来自临时真实会话与真实 usage_stats_query。

视觉验收数据

  • 视觉夹具复用真实会话 JSON 结构composerMentions 表达 Skillassistant.toolCalls 表达 MCP时间戳覆盖完整自定义日期范围。
  • 夹具仅写入系统临时目录,通过 CC_WEB_CONFIG_DIR / CC_WEB_SESSIONS_DIR / CC_WEB_LOGS_DIR 注入,不污染项目会话数据。
  • 浏览器会设置自定义日期后触发真实 usage_stats_query截图不是静态 HTML mock。
  • 直接/跨会话消息由 user message 的 crossConversation 布尔值决定MCP 状态取 toolCall.meta.statusSkill 取 composerMentions因此视觉夹具可覆盖三个环图的全部分段。