# UI 组件与前端分析 ## UI 架构 Claude Code 使用 React + Ink 构建 Terminal UI,组件层次分明。 ```mermaid graph TB subgraph 入口层 Main[main.tsx
CLI 入口] Ink[ink.ts
Ink 渲染器包装] App[App.tsx
根组件] end subgraph 全屏界面 Screens[screens/
Doctor, REPL, Resume] end subgraph 布局组件 Fullscreen[FullscreenLayout.tsx] StatusLine[StatusLine.tsx
状态栏] TextInput[TextInput.tsx
文本输入] VimInput[VimTextInput.tsx
Vim 输入] end subgraph 消息组件 Messages[Messages.tsx
消息列表] MessageRow[MessageRow.tsx
消息行] Message[Message.tsx
单条消息] MessageResp[MessageResponse.tsx
响应消息] VirtualList[VirtualMessageList.tsx
虚拟滚动列表] end subgraph 工具组件 ToolLoader[ToolUseLoader.tsx
工具加载器] FileEditDiff[FileEditToolDiff.tsx
编辑差异] BashProgress[BashModeProgress.tsx
Bash 进度] NotebookReject[NotebookEditToolUseRejectedMessage.tsx] end subgraph 对话框组件 TrustDialog[TrustDialog/
信任对话框] MCPDialog[MCPServerApprovalDialog.tsx
MCP 审批] ExportDialog[ExportDialog.tsx
导出对话框] AutoMode[AutoModeOptInDialog.tsx
自动模式确认] CostDialog[CostThresholdDialog.tsx
成本阈值] BridgeDialog[BridgeDialog.tsx
桥接对话框] end subgraph 输入组件 PromptInput[PromptInput/
提示输入] BaseInput[BaseTextInput.tsx
基础文本输入] SearchBox[SearchBox.tsx
搜索框] 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
移动操作] A --> C[operators.ts
操作符] A --> D[textObjects.ts
文本对象] A --> E[transitions.ts
状态转换] A --> F[types.ts
类型定义] G[VimTextInput.tsx] --> A H[useVimInput.ts] --> A I[vim 命令
/commands/vim] --> J[切换 Vim 模式] ``` ## 快捷键系统 ```mermaid flowchart TD A[keybindings/] --> B[defaultBindings.ts
默认绑定] A --> C[parser.ts
快捷键解析] A --> D[resolver.ts
快捷键解析器] A --> E[match.ts
快捷键匹配] A --> F[schema.ts
Schema 定义] A --> G[template.ts
模板] A --> H[validate.ts
验证] A --> I[reservedShortcuts.ts
保留快捷键] A --> J[shortcutFormat.ts
格式化] A --> K[loadUserBindings.ts
用户自定义] 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
用户设置] A --> C[systemTheme
系统检测] A --> D[currentTheme
实际渲染主题] B --> E[light / dark / auto] C --> F[终端主题监听
自动检测变化] D --> G[动态切换
实时预览] ``` ## Buddy 伙伴精灵 (buddy/) 终端伙伴精灵系统,提供视觉陪伴和交互反馈: ```mermaid flowchart TD A[CompanionSprite
主精灵组件] --> B[动画系统] A --> C[对话气泡] A --> D[交互功能] B --> E[idle
空闲动画] B --> F[fidget
活动动画] B --> G[blink
眨眼动画] B --> H[15帧循环序列] C --> I[提示信息气泡
~10秒显示] C --> J[淡出效果
最后3秒渐暗] D --> K[pet
抚摸交互] D --> L[burst
Hearts 爆发动画
~2.5秒] ```