4.4 KiB
4.4 KiB
核心数据流分析
主循环数据流
sequenceDiagram
participant User as 用户输入
participant Input as TextInput
participant QE as QueryEngine
participant API as Anthropic API
participant Tools as 工具系统
participant MCP as MCP 服务器
participant UI as Ink 渲染器
User->>Input: 输入指令
Input->>QE: 构建查询请求
QE->>QE: 附加系统提示 + 上下文
QE->>QE: 组装工具定义
QE->>API: 发送 API 请求
loop 流式响应
API-->>QE: SSE 事件流
QE-->>UI: 增量渲染
end
alt 工具调用
API-->>QE: tool_use 块
QE->>Tools: 执行工具
Tools->>MCP: MCP 调用(可选)
MCP-->>Tools: MCP 响应
Tools-->>QE: 工具结果
QE->>API: 继续对话(附带工具结果)
else 文本响应
API-->>QE: text 块
QE-->>UI: 渲染文本
end
工具调用详细流程
sequenceDiagram
participant API as Anthropic API
participant QE as QueryEngine
participant Perm as 权限系统
participant Tool as 工具实现
participant Hook as 用户 Hook
participant User as 用户
API->>QE: tool_use 事件
QE->>Perm: 检查权限
alt 自动允许
Perm-->>QE: 允许
else 需要确认
Perm->>User: 提示确认
User-->>Perm: 确认/拒绝
Perm-->>QE: 结果
end
alt 允许执行
QE->>Hook: 执行 PreToolUse Hook
Hook-->>QE: Hook 结果
alt Hook 阻止
QE->>API: 返回阻止原因
else Hook 允许
QE->>Tool: 执行工具
Tool-->>QE: 工具结果
QE->>Hook: 执行 PostToolUse Hook
QE->>API: 返回工具结果
end
else 拒绝执行
QE->>API: 返回拒绝原因
end
MCP 通信流程
sequenceDiagram
participant CLI as Claude Code
participant Mgr as MCPConnectionManager
participant Transport as InProcessTransport
participant Server as MCP Server
CLI->>Mgr: 初始化连接
Mgr->>Server: 启动/连接 MCP 服务器
Server-->>Mgr: 返回工具列表
CLI->>Mgr: 调用 MCP 工具
Mgr->>Transport: 序列化请求
Transport->>Server: 发送请求
Server-->>Transport: 返回结果
Transport-->>Mgr: 反序列化结果
Mgr-->>CLI: 返回工具结果
Note over Mgr,Server: 支持 stdio, SSE, SDK 控制传输
代理集群工作流
sequenceDiagram
participant Lead as 主代理
participant Agent as AgentTool
participant Worker1 as Worker 1
participant Worker2 as Worker 2
participant Task as TaskList
participant Msg as SendMessage
Lead->>Agent: 启动子代理
Agent->>Task: 创建任务
Task-->>Worker1: 分配任务 1
Task-->>Worker2: 分配任务 2
par 并行执行
Worker1->>Task: 更新任务状态 (in_progress)
Worker1->>Task: 完成任务 (completed)
and
Worker2->>Task: 更新任务状态 (in_progress)
Worker2->>Msg: 发送消息给 Lead
Worker2->>Task: 完成任务 (completed)
end
Task-->>Lead: 所有任务完成
Lead->>Lead: 汇总结果
上下文压缩流程
sequenceDiagram
participant User as 用户
participant Compact as /compact 命令
participant Service as compact 服务
participant API as Anthropic API
participant State as AppState
User->>Compact: /compact
Compact->>Service: 请求压缩
Service->>State: 获取当前上下文
State-->>Service: 返回消息历史
Service->>API: 请求摘要
API-->>Service: 返回压缩摘要
Service->>State: 替换消息历史
State-->>Compact: 压缩完成
Compact-->>User: 显示压缩结果
文件编辑流程
sequenceDiagram
participant API as Anthropic API
participant Edit as FileEditTool
participant FS as 文件系统
participant History as FileHistory
participant Diff as Diff 渲染
API->>Edit: Edit(file_path, old_string, new_string)
Edit->>FS: 读取当前文件内容
FS-->>Edit: 返回文件内容
Edit->>Edit: 验证 old_string 唯一性
alt old_string 不唯一
Edit-->>API: 错误:字符串不唯一
else old_string 唯一
Edit->>History: 保存文件快照
Edit->>FS: 写入修改后内容
Edit->>Diff: 生成差异展示
Edit-->>API: 返回成功结果
end