Claude Code Desktop UI 层流式消息处理深度分析
本文分析 UI 层(Desktop/VSCode Plugin) 是如何发送查询请求、监听流式消息、保证消息顺序的,与之前分析的 query.ts 内部实现不同,本文档聚焦于 UI 交互层面。
一、整体架构概览
1.1 分层架构
┌─────────────────────────────────────────────────────────────┐
│ UI 层 (React Components) │
│ ┌─────────────┐ ┌──────────────┐ ┌─────────────────┐ │
│ │ REPL.tsx │ │ Messages.tsx │ │ PromptInput.tsx │ │
│ └──────┬──────┘ └──────┬───────┘ └────────┬────────┘ │
└─────────┼──────────────────┼───────────────────┼────────────┘
│ │ │
│ onQueryEvent │ handlePromptSubmit│
│ │ │
┌─────────▼──────────────────▼───────────────────▼────────────┐
│ 消息状态管理层 (AppState Store) │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ messages: Message[] (核心消息数组) │ │
│ │ setMessages() (通过 useState / useAppState) │ │
│ └──────────────────────────────────────────────────────┘ │
└───────────────────── ────────────────────────────────────────┘
│
│ query()
│
┌──────────────────────────▼────────────────────────────────────┐
│ 查询引擎层 (query.ts / QueryEngine.ts) │
│ - 调用模型 API │
│ - 流式生成响应 │
│ - 调用工具 (grep, read, write, search) │
│ - 通过 AsyncGenerator 产生流式事件 │
└─────────────────────────────────────────────────────────────┘