# UI 组件与前端分析

## UI 架构

Claude Code 使用 React + Ink 构建 Terminal UI，组件层次分明。

```mermaid
graph TB
    subgraph 入口层
        Main[main.tsx<br/>CLI 入口]
        Ink[ink.ts<br/>Ink 渲染器包装]
        App[App.tsx<br/>根组件]
    end

    subgraph 全屏界面
        Screens[screens/<br/>Doctor, REPL, Resume]
    end

    subgraph 布局组件
        Fullscreen[FullscreenLayout.tsx]
        StatusLine[StatusLine.tsx<br/>状态栏]
        TextInput[TextInput.tsx<br/>文本输入]
        VimInput[VimTextInput.tsx<br/>Vim 输入]
    end

    subgraph 消息组件
        Messages[Messages.tsx<br/>消息列表]
        MessageRow[MessageRow.tsx<br/>消息行]
        Message[Message.tsx<br/>单条消息]
        MessageResp[MessageResponse.tsx<br/>响应消息]
        VirtualList[VirtualMessageList.tsx<br/>虚拟滚动列表]
    end

    subgraph 工具组件
        ToolLoader[ToolUseLoader.tsx<br/>工具加载器]
        FileEditDiff[FileEditToolDiff.tsx<br/>编辑差异]
        BashProgress[BashModeProgress.tsx<br/>Bash 进度]
        NotebookReject[NotebookEditToolUseRejectedMessage.tsx]
    end

    subgraph 对话框组件
        TrustDialog[TrustDialog/<br/>信任对话框]
        MCPDialog[MCPServerApprovalDialog.tsx<br/>MCP 审批]
        ExportDialog[ExportDialog.tsx<br/>导出对话框]
        AutoMode[AutoModeOptInDialog.tsx<br/>自动模式确认]
        CostDialog[CostThresholdDialog.tsx<br/>成本阈值]
        BridgeDialog[BridgeDialog.tsx<br/>桥接对话框]
    end

    subgraph 输入组件
        PromptInput[PromptInput/<br/>提示输入]
        BaseInput[BaseTextInput.tsx<br/>基础文本输入]
        SearchBox[SearchBox.tsx<br/>搜索框]
    end

    Main --> Ink --> App
    App --> Screens
    App --> Fullscreen
    App --> StatusLine
    App --> TextInput
    App --> Messages
    Messages --> VirtualList --> MessageRow --> Message
    App --> ToolLoader
    App --> PromptInput
```

## 组件分类

### 核心布局组件
| 组件 | 文件 | 功能 |
|------|------|------|
| App | `App.tsx` | 应用根组件 |
| FullscreenLayout | `FullscreenLayout.tsx` | 全屏布局 |
| StatusLine | `StatusLine.tsx` | 底部状态栏 |
| TextInput | `TextInput.tsx` | 主输入框 |
| VimTextInput | `VimTextInput.tsx` | Vim 模式输入框 |
| PromptInput | `PromptInput/` | 提示输入组件 |
| VirtualMessageList | `VirtualMessageList.tsx` | 虚拟滚动消息列表 |

### 消息展示组件
| 组件 | 文件 | 功能 |
|------|------|------|
| Messages | `Messages.tsx` | 消息容器 |
| MessageRow | `MessageRow.tsx` | 消息行 |
| Message | `Message.tsx` | 单条消息 |
| MessageResponse | `MessageResponse.tsx` | 响应消息 |
| MessageModel | `MessageModel.tsx` | 模型信息 |
| MessageTimestamp | `MessageTimestamp.tsx` | 时间戳 |
| CompactSummary | `CompactSummary.tsx` | 压缩摘要 |
| Markdown | `Markdown.tsx` | Markdown 渲染 |

### 工具相关组件
| 组件 | 文件 | 功能 |
|------|------|------|
| ToolUseLoader | `ToolUseLoader.tsx` | 工具使用加载动画 |
| BashModeProgress | `BashModeProgress.tsx` | Bash 命令进度 |
| FileEditToolDiff | `FileEditToolDiff.tsx` | 文件编辑差异展示 |
| FileEditToolUpdatedMessage | `FileEditToolUpdatedMessage.tsx` | 编辑更新消息 |
| StructuredDiff | `StructuredDiff.tsx` | 结构化差异展示 |
| StructuredDiffList | `StructuredDiffList.tsx` | 差异列表 |

### 对话框组件
| 组件 | 功能 |
|------|------|
| TrustDialog/ | 信任确认对话框 |
| MCPServerApprovalDialog | MCP 服务器审批 |
| MCPServerMultiselectDialog | MCP 多选对话框 |
| ExportDialog | 导出对话框 |
| AutoModeOptInDialog | 自动模式选择 |
| AutoUpdater(AutoUpdaterWrapper) | 自动更新 |
| CostThresholdDialog | 成本阈值确认 |
| BridgeDialog | IDE 桥接对话框 |
| IdleReturnDialog | 空闲返回对话框 |
| BypassPermissionsModeDialog | 权限绕过确认 |
| WorktreeExitDialog | Worktree 退出对话框 |
| GlobalSearchDialog | 全局搜索 |
| HistorySearchDialog | 历史搜索 |
| QuickOpenDialog | 快速打开 |

### 导航和信息组件
| 组件 | 功能 |
|------|------|
| Stats | `Stats.tsx` 统计信息 |
| Spinner | `Spinner.tsx` 加载动画 |
| EffortIndicator | `EffortIndicator.ts` 思考力度指示 |
| ModelPicker | `ModelPicker.tsx` 模型选择器 |
| ThemePicker | `ThemePicker.tsx` 主题选择器 |
| LanguagePicker | `LanguagePicker.tsx` 语言选择器 |
| OutputStylePicker | `OutputStylePicker.tsx` 输出样式选择器 |
| ThinkingToggle | `ThinkingToggle.tsx` 思考模式切换 |
| FastIcon | `FastIcon.tsx` 快速模式图标 |
| ContextVisualization | `ContextVisualization.tsx` 上下文可视化 |

### 团队和代理组件
| 组件 | 功能 |
|------|------|
| CoordinatorAgentStatus | 协调器代理状态 |
| AgentProgressLine | 代理进度行 |
| TeammateViewHeader | 队友视图头部 |
| TaskListV2 | 任务列表 V2 |
| PrBadge | PR 徽章 |

### IDE 集成组件
| 组件 | 功能 |
|------|------|
| IdeStatusIndicator | IDE 状态指示器 |
| IdeAutoConnectDialog | IDE 自动连接 |
| IdeOnboardingDialog | IDE 新手引导 |
| ShowInIDEPrompt | 在 IDE 中显示提示 |
| FilePathLink | 文件路径链接 |
| LogSelector | 日志选择器 |

## Vim 模式

```mermaid
flowchart TD
    A[vim/] --> B[motions.ts<br/>移动操作]
    A --> C[operators.ts<br/>操作符]
    A --> D[textObjects.ts<br/>文本对象]
    A --> E[transitions.ts<br/>状态转换]
    A --> F[types.ts<br/>类型定义]

    G[VimTextInput.tsx] --> A
    H[useVimInput.ts] --> A

    I[vim 命令<br/>/commands/vim] --> J[切换 Vim 模式]
```

## 快捷键系统

```mermaid
flowchart TD
    A[keybindings/] --> B[defaultBindings.ts<br/>默认绑定]
    A --> C[parser.ts<br/>快捷键解析]
    A --> D[resolver.ts<br/>快捷键解析器]
    A --> E[match.ts<br/>快捷键匹配]
    A --> F[schema.ts<br/>Schema 定义]
    A --> G[template.ts<br/>模板]
    A --> H[validate.ts<br/>验证]
    A --> I[reservedShortcuts.ts<br/>保留快捷键]
    A --> J[shortcutFormat.ts<br/>格式化]
    A --> K[loadUserBindings.ts<br/>用户自定义]

    L[KeybindingContext.tsx] --> M[快捷键上下文]
    N[KeybindingProviderSetup.tsx] --> M
    O[useKeybinding.ts] --> P[使用快捷键]
    Q[useShortcutDisplay.ts] --> R[快捷键显示]
```

## React Hooks

项目包含约 70 个自定义 React Hooks：

### 核心 Hooks
| Hook | 功能 |
|------|------|
| `useCanUseTool` | 工具权限检查 |
| `useMergedTools` | 合并内置和 MCP 工具 |
| `useMergedCommands` | 合并命令列表 |
| `useMergedClients` | 合并客户端 |
| `useMainLoopModel` | 主循环模型管理 |
| `useGlobalKeybindings` | 全局快捷键 |
| `useCommandKeybindings` | 命令快捷键 |
| `useTextInput` | 文本输入管理 |

### 状态 Hooks
| Hook | 功能 |
|------|------|
| `useDynamicConfig` | 动态配置 |
| `useSettings` | 设置管理 |
| `useSettingsChange` | 设置变更监听 |
| `useTasksV2` | 任务管理 V2 |
| `useTaskListWatcher` | 任务列表监听 |
| `useMemoryUsage` | 内存使用 |
| `useScheduledTasks` | 定时任务 |

### IDE 集成 Hooks
| Hook | 功能 |
|------|------|
| `useIDEIntegration` | IDE 集成 |
| `useIdeSelection` | IDE 选择 |
| `useIdeAtMentioned` | IDE @ 提及 |
| `useIdeConnectionStatus` | IDE 连接状态 |
| `useIdeLogging` | IDE 日志 |

### 会话 Hooks
| Hook | 功能 |
|------|------|
| `useReplBridge` | REPL Bridge |
| `useRemoteSession` | 远程会话 |
| `useSSHSession` | SSH 会话 |
| `useSessionBackgrounding` | 会话后台化 |
| `useBackgroundTaskNavigation` | 后台任务导航 |

### 代理 Hooks
| Hook | 功能 |
|------|------|
| `useSwarmInitialization` | 集群初始化 |
| `useSwarmPermissionPoller` | 集群权限轮询 |
| `useTeammateViewAutoExit` | 队友视图自动退出 |

### 其他 Hooks
| Hook | 功能 |
|------|------|
| `useVoiceIntegration` / `useVoice` | 语音集成 |
| `useClipboardImageHint` | 剪贴板图片提示 |
| `usePasteHandler` | 粘贴处理 |
| `useTypeahead` | 自动补全 |
| `useHistorySearch` | 历史搜索 |
| `useDiffData` | 差异数据 |
| `useDiffInIDE` | IDE 差异显示 |
| `useVirtualScroll` | 虚拟滚动 |
| `useTerminalSize` | 终端尺寸 |
| `useCommandQueue` | 命令队列 |

## 设计系统 (design-system/)

内置组件库提供一致的 UI 基础：

| 组件 | 功能 |
|------|------|
| ThemedBox / ThemedText | 主题感知的容器/文本 |
| Dialog | 对话框组件 |
| Tabs | 标签页组件 |
| Button | 按钮组件 |
| ProgressBar | 进度条 |
| FuzzyPicker | 模糊选择器 |
| CheckboxInput | 复选框输入 |

### 布局系统

使用 **Yoga Layout**（Flexbox 引擎）进行终端布局计算，支持：
- Flexbox 弹性布局
- 响应式终端尺寸适配
- 基于 `useTerminalSize` 的动态调整

### 主题系统

```mermaid
flowchart TD
    A[ThemeProvider] --> B[themeSetting<br/>用户设置]
    A --> C[systemTheme<br/>系统检测]
    A --> D[currentTheme<br/>实际渲染主题]

    B --> E[light / dark / auto]
    C --> F[终端主题监听<br/>自动检测变化]
    D --> G[动态切换<br/>实时预览]
```

## Buddy 伙伴精灵 (buddy/)

终端伙伴精灵系统，提供视觉陪伴和交互反馈：

```mermaid
flowchart TD
    A[CompanionSprite<br/>主精灵组件] --> B[动画系统]
    A --> C[对话气泡]
    A --> D[交互功能]

    B --> E[idle<br/>空闲动画]
    B --> F[fidget<br/>活动动画]
    B --> G[blink<br/>眨眼动画]
    B --> H[15帧循环序列]

    C --> I[提示信息气泡<br/>~10秒显示]
    C --> J[淡出效果<br/>最后3秒渐暗]

    D --> K[pet<br/>抚摸交互]
    D --> L[burst<br/>Hearts 爆发动画<br/>~2.5秒]
```
