🎯 目标
深入调研 Claude Code CLI 的 stream-json 输出格式,完善 CCRunner 事件类型系统,确保所有 CLI 事件都被正确处理和展示。
📊 当前状态分析
已实现的事件类型
| 事件类型 |
后端处理 |
前端显示 |
状态 |
thinking |
✅ |
✅ |
完整 |
tool_use |
✅ |
✅ |
完整 |
tool_result |
✅ |
✅ |
完整 |
answer |
✅ |
✅ |
完整 |
error |
✅ |
✅ |
完整 |
session_stats |
✅ |
❌ |
后端已支持,前端未实现 |
system |
✅ (静默) |
- |
控制消息,无需前端 |
result |
✅ |
❌ |
已提取统计,前端未展示 |
前端缺失
session_stats 事件未在前端 StreamEvent 类型中定义
EventBadge.tsx 不包含 session_stats 配置
useEventStream.ts 不处理 session_stats 事件
- 前端无法显示会话完成后的统计信息(成本、token、耗时)
🔍 待调研问题
1. CLI 事件类型完整性
通过实际 CLI 测试验证:
2. 事件元数据
3. 前端展示
🛠️ 实施计划
Phase 1: 事件类型调研 (高优先级)
# 测试 CLI 完整输出
echo "测试各种操作" | claude --print --verbose --output-format stream-json --session-id <uuid>
输出包含:
system - 初始化
assistant - 响应(含嵌套 tool_use)
user - 工具结果(含嵌套 tool_result)
result - 完成统计
- 是否有其他类型?
Phase 2: 前端完善
- 扩展
StreamEvent 类型
- 添加
session_stats 到 EventBadge
- 创建
SessionSummaryPanel 组件
- 更新
useEventStream 处理逻辑
Phase 3: 数据持久化
📁 相关文件
ai/agent/cc_runner.go - 事件处理逻辑
ai/agent/types.go - 事件类型定义
server/router/api/v1/ai/handler.go - 事件适配器
web/src/components/AIChat/EventBadge.tsx - 事件徽章
web/src/components/AIChat/hooks/useEventStream.ts - 事件流 Hook
docs/research/cc-runner-message-handling-research.md - 已完成调研
🔗 参考文档
预期成果:
- 完整的 CLI 事件类型清单
- 前端能展示所有事件(包括会话统计)
- 为后续数据持久化打好基础
🎯 目标
深入调研 Claude Code CLI 的
stream-json输出格式,完善 CCRunner 事件类型系统,确保所有 CLI 事件都被正确处理和展示。📊 当前状态分析
已实现的事件类型
thinkingtool_usetool_resultanswererrorsession_statssystemresult前端缺失
session_stats事件未在前端StreamEvent类型中定义EventBadge.tsx不包含session_stats配置useEventStream.ts不处理session_stats事件🔍 待调研问题
1. CLI 事件类型完整性
通过实际 CLI 测试验证:
status消息类型的用途和处理方式progress或其他进度相关事件2. 事件元数据
modelUsage详细结构permission_denials事件的处理3. 前端展示
session_stats到EventBadge配置useEventStream处理统计事件🛠️ 实施计划
Phase 1: 事件类型调研 (高优先级)
输出包含:
system- 初始化assistant- 响应(含嵌套 tool_use)user- 工具结果(含嵌套 tool_result)result- 完成统计Phase 2: 前端完善
StreamEvent类型session_stats到EventBadgeSessionSummaryPanel组件useEventStream处理逻辑Phase 3: 数据持久化
cc_session_stats表存储历史会话数据📁 相关文件
ai/agent/cc_runner.go- 事件处理逻辑ai/agent/types.go- 事件类型定义server/router/api/v1/ai/handler.go- 事件适配器web/src/components/AIChat/EventBadge.tsx- 事件徽章web/src/components/AIChat/hooks/useEventStream.ts- 事件流 Hookdocs/research/cc-runner-message-handling-research.md- 已完成调研🔗 参考文档
预期成果: