## 背景 PR #70(实现 #34 Human Intervention 指标)落地后,发现实际需求与实现方向有偏差: 当时实现聚焦在「人工干预」三类信号——`interrupt`(ESC 打断)/ `toolReject`(拒绝工具)/ `correction`(stop 后 60s 内的纠偏 re-prompt)。 但更想要的核心指标其实是更朴素的两个: 1. **人工对话的次数**:一个会话里人类到底发了几轮 prompt(衡量"让 agent 干完一件事需要人来回说几次")。 2. **token 用量**:这个会话/这个人累计消耗了多少 token。 `correction` 这种"猜测用户是不是在纠偏"的启发式不是重点。 ## 目标(已确认的范围) - **保留**现有的「人工干预」指标(`interrupt` / `toolReject` / `correction`),本 issue 在其之上**新增**两个指标,不删除旧的。 - 新增指标 1 —— **对话次数**:统计每个会话的 `UserPromptSubmit` 事件数(= 人类对话轮数)。 - 新增指标 2 —— **token 用量**:`input` / `output` / `cache`(cache_read + cache_creation)分桶统计,并给出总量。 - 数据来源:Claude Code transcript 里的 `message.usage`。 - ⚠️ 注意:同一条 assistant 消息(同一 `message.id`)会跨多行 JSONL 重复出现且 usage 相同,累加时**必须按 `message.id` 去重**,否则严重重复计数。 - 拿不到 transcript 的工具(如 Cursor)优雅降级:token 显示 N/A,仅保留对话次数。 ## 落地范围(三处贯通,沿用现有架构) | 层 | 文件 | 改动 | |----|------|------| | 采集 | `src/dashboard-collector.ts` | Stop 时扫 transcript 同时汇总 token(按 message.id 去重);`rebuildSessions` 统计 `promptCount` 与 `tokens`;新增 `aggregateSessionMetrics` | | 类型 | `src/types.ts` | 新增 `TokenUsage` / `SessionMetrics`;扩展 `DashboardEvent.tokens`、`DashboardSession.promptCount/tokens`、`UserStats.prompts/tokens` | | 上报 | `src/team-push.ts` | 幂等快照 / delta / merge 扩展到 prompts + tokens(沿用 `reported-interventions.json` 幂等机制) | | 汇总 | `src/digest.ts` | digest 增加团队对话次数与 token 用量汇总/排行 | | 展示 | `src/dashboard-html.ts` | 会话卡片展示对话次数与 token | | 文档 | `docs/usage-guide.md` | 补充两个新指标说明 | ## 验收标准 - [ ] dashboard 会话卡片显示该会话的人类对话轮数与 token 用量(in/out/cache + 总量)。 - [ ] `teamai pull` 幂等聚合 prompts/tokens 到 `stats/<user>.yaml`,重复 pull 不重复计数。 - [ ] `teamai digest` 给出团队对话次数与 token 用量汇总。 - [ ] Claude Code transcript 的 token 按 `message.id` 去重,无重复计数。 - [ ] Cursor 等无 transcript 工具优雅降级(token N/A,对话次数仍统计)。 - [ ] 隐私:只统计次数/数量,不落地任何 prompt 或 transcript 原文。 - [ ] `npx tsc --noEmit` + `npx vitest run` 全绿,新增覆盖采集/聚合/上报/digest。 ## 备注 - 关联:PR #70 / #34。 - 开发分支已起:`feat/conversation-token-metrics`(worktree),等本 issue 确认范围后继续。
Activity
fix(dashboard): source prompt count from the transcript snapshot (#75)
feat(dashboard): 每会话「对话次数」与「token 用量」指标 (#75) (#78)