基于 /src/components/ 目录的实际代码分析
总文件数 : 389 个文件(.tsx + .ts)
目录结构 : 40+ 子目录
渲染引擎 : Ink (React 终端渲染器)
编译器 : React Compiler(react/compiler-runtime 自动 memo 化)
状态管理 : 自定义 useAppState / useSetAppState(基于 AppState context)
布局模式 : 全屏模式(FullscreenLayout)+ 内联模式
FpsMetricsProvider
└── StatsProvider
└── AppStateProvider
└── {children} (REPL 内容)
提供三个上下文层:FPS 指标、统计信息、应用状态。本身无 UI,纯 Provider 包装。
组件
职责
FullscreenLayout.tsx
全屏布局:scrollable 区(消息列表)+ bottom 区(输入框)+ overlay/modal 区
Messages.tsx
消息列表主容器。负责消息过滤、重排、分组、构建 lookups,渲染 LogoHeader + MessageRow 列表
VirtualMessageList.tsx
虚拟滚动消息列表。管理滚动位置、搜索导航(JumpHandle)、sticky header
MessageRow.tsx
单行消息包装。管理消息折叠/展开状态、model 标签、时间戳
Message.tsx
消息类型分发器。根据消息类型渲染对应的子组件
MessageResponse.tsx
助手回复渲染(流式输出)
Spinner.tsx
加载动画。显示旋转字符 + 任务列表 + 闪烁文字
AppState → Messages → VirtualMessageList → MessageRow → Message → 具体消息类型组件
↓
(permissions, tool use, etc.)
组件
职责
AssistantTextMessage.tsx
助手文本回复(Markdown 渲染)
AssistantThinkingMessage.tsx
助手思考过程(可折叠/展开)
AssistantRedactedThinkingMessage.tsx
加密思考块
AssistantToolUseMessage.tsx
工具调用展示(紧凑/详细模式)
组件
职责
UserTextMessage.tsx
用户文本输入
UserPromptMessage.tsx
用户 prompt 展示
UserImageMessage.tsx
用户上传图片
UserBashInputMessage.tsx
用户 bash 输入
UserBashOutputMessage.tsx
bash 输出结果
UserChannelMessage.tsx
频道消息
UserCommandMessage.tsx
用户命令
UserPlanMessage.tsx
计划模式消息
UserTeammateMessage.tsx
队友消息
UserMemoryInputMessage.tsx
Memory 输入
UserResourceUpdateMessage.tsx
资源更新
UserLocalCommandOutputMessage.tsx
本地命令输出
UserAgentNotificationMessage.tsx
Agent 通知消息
工具结果消息 (UserToolResultMessage/)
组件
职责
UserToolResultMessage.tsx
工具结果主容器(分发器)
UserToolSuccessMessage.tsx
成功结果
UserToolErrorMessage.tsx
错误结果
UserToolRejectMessage.tsx
拒绝结果
UserToolCanceledMessage.tsx
取消结果
RejectedToolUseMessage.tsx
被拒绝的工具调用
RejectedPlanMessage.tsx
被拒绝的计划
组件
职责
SystemTextMessage.tsx
系统文本消息
SystemAPIErrorMessage.tsx
API 错误消息
ShutdownMessage.tsx
关闭/退出消息
RateLimitMessage.tsx
速率限制消息
组件
职责
CollapsedReadSearchContent.tsx
折叠的 read/search 组(灰点 + "Reading…")
GroupedToolUseContent.tsx
分组工具调用
CompactBoundaryMessage.tsx
Compact 边界标记
HookProgressMessage.tsx
Hook 进度
PlanApprovalMessage.tsx
计划审批
TaskAssignmentMessage.tsx
任务分配
AdvisorMessage.tsx
Advisor 消息
AttachmentMessage.tsx
附件消息
HighlightedThinkingText.tsx
高亮思考文本
文件
职责
nullRenderingAttachments.ts
标记不渲染的附件
teamMemCollapsed.tsx
队友消息折叠逻辑
teamMemSaved.ts
队友消息保存状态
3. 权限对话框组件 (permissions/)
组件
职责
PermissionRequest.tsx
权限请求分发器。根据工具类型选择对应的权限请求组件
PermissionDialog.tsx
权限对话框容器(标题 + subtitle + children)
PermissionPrompt.tsx
权限提示(带快捷键操作)
PermissionExplanation.tsx
权限解释说明
PermissionRequestTitle.tsx
权限请求标题
PermissionRuleExplanation.tsx
权限规则解释
PermissionDecisionDebugInfo.tsx
调试信息
FallbackPermissionRequest.tsx
通用兜底权限请求
WorkerBadge.tsx
Worker 标记
WorkerPendingPermission.tsx
待处理 Worker 权限
SandboxPermissionRequest.tsx
沙箱权限
子目录/组件
工具
BashPermissionRequest/
Bash 命令执行权限
PowerShellPermissionRequest/
PowerShell 权限
FileEditPermissionRequest/
文件编辑权限
FileWritePermissionRequest/
文件写入权限(含 diff)
FilePermissionDialog/
通用文件权限对话框(含 hook、IDE diff 配置)
FilesystemPermissionRequest/
文件系统操作权限
NotebookEditPermissionRequest/
Notebook 编辑权限
SedEditPermissionRequest/
Sed 编辑权限
WebFetchPermissionRequest/
网络请求权限
SkillPermissionRequest/
Skill 执行权限
ComputerUseApproval/
Computer Use 权限
AskUserQuestionPermissionRequest/
AskUserQuestion 工具权限
EnterPlanModePermissionRequest/
进入计划模式权限
ExitPlanModePermissionRequest/
退出计划模式权限
组件
职责
AddPermissionRules.tsx
添加权限规则
PermissionRuleInput.tsx
规则输入
PermissionRuleList.tsx
规则列表
PermissionRuleDescription.tsx
规则描述
AddWorkspaceDirectory.tsx
添加工作目录
RemoveWorkspaceDirectory.tsx
移除工作目录
RecentDenialsTab.tsx
最近拒绝记录
WorkspaceTab.tsx
工作目录标签页
文件
职责
hooks.ts
权限相关 hooks
utils.ts
权限工具函数
shellPermissionHelpers.tsx
Shell 权限辅助
useShellPermissionFeedback.ts
Shell 权限反馈
4. 设计系统组件 (design-system/)
组件
职责
Dialog.tsx
对话框容器(标题、subtitle、ESC 取消、输入指南)
Pane.tsx
面板容器(边框、内边距)
Tabs.tsx
标签页(Tab 切换)
Divider.tsx
分隔线
Byline.tsx
副标题/署名
ListItem.tsx
列表项
LoadingState.tsx
加载状态
ProgressBar.tsx
进度条
StatusIcon.tsx
状态图标(✓ ✗ ⚠ 等)
Ratchet.tsx
步进器(数字递增/递减)
KeyboardShortcutHint.tsx
键盘快捷键提示
FuzzyPicker.tsx
模糊搜索选择器
ThemeProvider.tsx
主题提供者
ThemedBox.tsx
主题化 Box
ThemedText.tsx
主题化 Text
color.ts
颜色工具函数
组件
职责
PromptInput.tsx
主输入组件(~600 行)。处理键盘输入、历史导航、粘贴、快捷键、模式切换
PromptInputFooter.tsx
输入框底部(模式指示器 + 建议)
PromptInputFooterLeftSide.tsx
底部左侧内容
PromptInputFooterSuggestions.tsx
输入建议(命令、文件路径)
PromptInputHelpMenu.tsx
帮助菜单
PromptInputModeIndicator.tsx
模式指示器(编辑/vim/计划等)
PromptInputQueuedCommands.tsx
队列命令显示
PromptInputStashNotice.tsx
Stash 通知
ShimmeredInput.tsx
闪烁输入效果
VoiceIndicator.tsx
语音输入指示器
HistorySearchInput.tsx
历史搜索输入
IssueFlagBanner.tsx
Issue 标记横幅
Notifications.tsx
通知组件
SandboxPromptFooterHint.tsx
沙箱模式提示
文件
职责
inputModes.ts
输入模式定义(normal/vim/edit)
inputPaste.ts
粘贴处理逻辑
utils.ts
Vim 模式检测等工具
useMaybeTruncateInput.ts
输入截断 hook
usePromptInputPlaceholder.ts
占位符 hook
useShowFastIconHint.ts
快速模式图标提示
useSwarmBanner.ts
Swarm 横幅 hook
组件
职责
BackgroundTasksDialog.tsx
后台任务列表对话框(支持多种任务类型)
BackgroundTask.tsx
单个后台任务条目
BackgroundTaskStatus.tsx
任务状态显示
AsyncAgentDetailDialog.tsx
异步 Agent 详情对话框
InProcessTeammateDetailDialog.tsx
进程内队友详情
RemoteSessionDetailDialog.tsx
远程会话详情
RemoteSessionProgress.tsx
远程会话进度
DreamDetailDialog.tsx
Dream 任务详情
ShellDetailDialog.tsx
Shell 任务详情
ShellProgress.tsx
Shell 进度
renderToolActivity.tsx
工具活动渲染
taskStatusUtils.tsx
任务状态工具函数
支持的任务类型:
local_bash — 本地 Bash
local_agent — 本地 Agent
remote_agent — 远程 Agent
in_process_teammate — 进程内队友
dream — Dream 任务
local_shell — Shell 任务
local_workflow — Workflow 任务
monitor_mcp — MCP Monitor
组件
职责
AgentsMenu.tsx
Agent 管理主菜单(列表 → 详情 → 编辑)
AgentsList.tsx
Agent 列表(分组:project/global/built-in)
AgentDetail.tsx
Agent 详情展示
AgentEditor.tsx
Agent 配置编辑器
AgentNavigationFooter.tsx
导航底部
ColorPicker.tsx
颜色选择器
ModelSelector.tsx
模型选择器
ToolSelector.tsx
工具选择器
Agent 创建向导 (new-agent-creation/)
组件
职责
CreateAgentWizard.tsx
创建 Agent 向导主控
wizard-steps/MethodStep.tsx
选择方式(手动/AI 生成)
wizard-steps/TypeStep.tsx
Agent 类型
wizard-steps/DescriptionStep.tsx
描述
wizard-steps/PromptStep.tsx
System Prompt
wizard-steps/ToolsStep.tsx
工具选择
wizard-steps/ModelStep.tsx
模型选择
wizard-steps/ColorStep.tsx
颜色选择
wizard-steps/LocationStep.tsx
保存位置
wizard-steps/MemoryStep.tsx
Memory 配置
wizard-steps/GenerateStep.tsx
AI 生成
wizard-steps/ConfirmStep.tsx
确认
wizard-steps/ConfirmStepWrapper.tsx
确认包装
文件
职责
types.ts
Agent 类型定义
utils.ts
Agent 工具函数
validateAgent.ts
Agent 验证
agentFileUtils.ts
Agent 文件操作
generateAgent.ts
AI 生成 Agent
组件
职责
MCPSettings.tsx
MCP 设置主入口(列表 → 详情)
MCPListPanel.tsx
MCP 服务器列表
MCPStdioServerMenu.tsx
Stdio 服务器配置菜单
MCPRemoteServerMenu.tsx
远程服务器配置菜单
MCPAgentServerMenu.tsx
Agent 级 MCP 服务器菜单
MCPToolListView.tsx
MCP 工具列表
MCPToolDetailView.tsx
MCP 工具详情
CapabilitiesSection.tsx
服务器能力展示
MCPReconnect.tsx
重连组件
ElicitationDialog.tsx
MCP Elicitation 对话框
McpParsingWarnings.tsx
解析警告
9. Settings 组件 (Settings/)
组件
职责
Settings.tsx
设置主界面(Tab 切换:Status/Config/Usage)
Status.tsx
状态页(诊断信息、连接状态)
Config.tsx
配置页(设置项编辑)
Usage.tsx
使用统计页
10. Spinner 组件 (Spinner/)
组件
职责
SpinnerAnimationRow.tsx
动画行(旋转字符 + 文字)
SpinnerGlyph.tsx
旋转字符渲染
ShimmerChar.tsx
闪烁字符
FlashingChar.tsx
闪烁字符
GlimmerMessage.tsx
微光消息
TeammateSpinnerLine.tsx
队友 Spinner 行
TeammateSpinnerTree.tsx
队友 Spinner 树(递归任务树)
组件
职责
LogoV2.tsx
主 Logo + 欢迎界面(最近活动、what's new、项目入门)
WelcomeV2.tsx
欢迎消息
CondensedLogo.tsx
精简 Logo(窄终端)
Clawd.tsx
Clawd 角色
AnimatedClawd.tsx
动画 Clawd
AnimatedAsterisk.tsx
动画星号
Feed.tsx
信息流容器
FeedColumn.tsx
信息流列
feedConfigs.tsx
信息流配置(最近活动、what's new、项目入门)
EmergencyTip.tsx
紧急提示
VoiceModeNotice.tsx
语音模式通知
Opus1mMergeNotice.tsx
Opus 1M 合并通知
ChannelsNotice.tsx
频道通知
GuestPassesUpsell.tsx
Guest Pass 推广
OverageCreditUpsell.tsx
超额信用推广
组件
职责
Onboarding.tsx
首次使用引导(主题、OAuth、API Key、安全)
ExitFlow.tsx
退出流程
ExportDialog.tsx
导出对话框
GlobalSearchDialog.tsx
全局搜索(Transcript 搜索)
HistorySearchDialog.tsx
历史搜索
QuickOpenDialog.tsx
快速打开
ModelPicker.tsx
模型选择器
ThemePicker.tsx
主题选择器
LanguagePicker.tsx
语言选择器
OutputStylePicker.tsx
输出风格选择器
BridgeDialog.tsx
Bridge 对话框
CostThresholdDialog.tsx
成本阈值对话框
BypassPermissionsModeDialog.tsx
绕过权限模式对话框
ChannelDowngradeDialog.tsx
频道降级对话框
AutoModeOptInDialog.tsx
自动模式加入对话框
IdeOnboardingDialog.tsx
IDE 入门对话框
IdeAutoConnectDialog.tsx
IDE 自动连接
InvalidConfigDialog.tsx
无效配置
InvalidSettingsDialog.tsx
无效设置
IdleReturnDialog.tsx
空闲返回对话框
WorktreeExitDialog.tsx
Worktree 退出对话框
TeleportRepoMismatchDialog.tsx
仓库不匹配
ClaudeMdExternalIncludesDialog.tsx
CLAUDE.md 外部引用
DevChannelsDialog.tsx
开发频道对话框
WorkflowMultiselectDialog.tsx
Workflow 多选对话框
ManagedSettingsSecurityDialog/
托管设置安全对话框
TrustDialog/
信任对话框
MCPServerApprovalDialog.tsx
MCP 服务器审批
MCPServerDesktopImportDialog.tsx
MCP 桌面导入
MCPServerMultiselectDialog.tsx
MCP 多选对话框
MCPServerDialogCopy.tsx
MCP 对话框副本
ClaudeInChromeOnboarding.tsx
Chrome 入门
组件
职责
Markdown.tsx
Markdown 渲染(StreamingMarkdown)
MarkdownTable.tsx
Markdown 表格
HighlightedCode.tsx
代码高亮
StructuredDiff.tsx
结构化 Diff
StructuredDiffList.tsx
Diff 列表
FileEditToolDiff.tsx
文件编辑 Diff
FilePathLink.tsx
文件路径链接(可点击)
ClickableImageRef.tsx
可点击图片引用
Stats.tsx
统计信息(tokens、成本、时长)
StatusLine.tsx
状态栏(模型、权限模式、cwd、context)
StatusNotices.tsx
状态通知
ThinkingToggle.tsx
Thinking 开关
EffortCallout.tsx
Effort 提示
EffortIndicator.ts
Effort 指示器
TokenWarning.tsx
Token 警告
MemoryUsageIndicator.tsx
内存使用指示器
ToolUseLoader.tsx
工具使用加载器
SearchBox.tsx
搜索框
LogSelector.tsx
日志选择器
TagTabs.tsx
标签标签页
PrBadge.tsx
PR 标记
ContextSuggestions.tsx
上下文建议
ContextVisualization.tsx
上下文可视化
CompactSummary.tsx
Compact 摘要
ResumeTask.tsx
恢复任务
SessionPreview.tsx
会话预览
SessionBackgroundHint.tsx
会话背景提示
ShowInIDEPrompt.tsx
IDE 中显示提示
TaskListV2.tsx
任务列表 V2
TeammateViewHeader.tsx
队友视图头部
CoordinatorAgentStatus.tsx
协调者 Agent 状态
AgentProgressLine.tsx
Agent 进度行
组件
职责
DesktopHandoff.tsx
桌面端交接
TeleportError.tsx
Teleport 错误
TeleportProgress.tsx
Teleport 进度
TeleportResumeWrapper.tsx
Teleport 恢复包装
TeleportStash.tsx
Teleport Stash
RemoteCallout.tsx
远程提示
RemoteEnvironmentDialog.tsx
远程环境对话框
组件
职责
AutoUpdater.tsx
自动更新逻辑
AutoUpdaterWrapper.tsx
自动更新包装
NativeAutoUpdater.tsx
原生自动更新
PackageManagerAutoUpdater.tsx
包管理器自动更新
组件
职责
Feedback.tsx
反馈入口
FeedbackSurvey/
反馈调查(评分、transcript 分享)
SkillImprovementSurvey.tsx
Skill 改进调查
组件
职责
TextInput.tsx
文本输入组件
BaseTextInput.tsx
基础文本输入
VimTextInput.tsx
Vim 模式文本输入
ConfigurableShortcutHint.tsx
可配置快捷键提示
PressEnterToContinue.tsx
"按 Enter 继续"
CtrlOToExpand.tsx
Ctrl+O 展开提示
ScrollKeybindingHandler.tsx
滚动键绑定处理
KeybindingWarnings.tsx
键绑定警告
InterruptedByUser.tsx
用户中断显示
ValidationErrorsList.tsx
验证错误列表
ApproveApiKey.tsx
API Key 审批
AwsAuthStatusBox.tsx
AWS 认证状态
ConsoleOAuthFlow.tsx
Console OAuth 流程
目录
组件
职责
CustomSelect/
select.tsx, SelectMulti.tsx, select-option.tsx, select-input-option.tsx
自定义选择器(单选/多选/输入)
HelpV2/
HelpV2.tsx, Commands.tsx, General.tsx
帮助界面
hooks/
HooksConfigMenu.tsx, SelectEventMode.tsx, SelectHookMode.tsx 等
Hooks 配置管理
memory/
MemoryFileSelector.tsx, MemoryUpdateNotification.tsx
Memory 管理
sandbox/
SandboxSettings.tsx, SandboxConfigTab.tsx 等
沙箱设置
shell/
ShellProgressMessage.tsx, OutputLine.tsx 等
Shell 输出展示
skills/
SkillsMenu.tsx
Skills 菜单
teams/
TeamsDialog.tsx, TeamStatus.tsx
团队管理
diff/
DiffDialog.tsx, DiffDetailView.tsx, DiffFileList.tsx
Diff 查看器
grove/
Grove.tsx
Grove 功能
passes/
Passes.tsx
Passes 功能
wizard/
WizardDialogLayout.tsx, WizardProvider.tsx, useWizard.ts
通用向导框架
ui/
OrderedList.tsx, OrderedListItem.tsx, TreeSelect.tsx
通用 UI 原语
ClaudeCodeHint/
PluginHintMenu.tsx
插件提示菜单
DesktopUpsell/
DesktopUpsellStartup.tsx
桌面版推广
LspRecommendation/
LspRecommendationMenu.tsx
LSP 推荐菜单
Passes/
Passes.tsx
Passes
HighlightCode/
Fallback.tsx
代码高亮回退
StructuredDiff/
Fallback.tsx, colorDiff.ts
Diff 回退/颜色
组件
职责
messageActions.tsx
消息动作状态管理(MessageActionsState、导航)
OffscreenFreeze.tsx
离屏冻结(React Compiler 优化)
SentryErrorBoundary.ts
Sentry 错误边界
DevBar.tsx
开发者工具栏
DiagnosticsDisplay.tsx
诊断信息展示
FallbackToolUseErrorMessage.tsx
兜底工具错误消息
FallbackToolUseRejectedMessage.tsx
兜底工具拒绝消息
FileEditToolUpdatedMessage.tsx
文件编辑更新消息
FileEditToolUseRejectedMessage.tsx
文件编辑拒绝消息
NotebookEditToolUseRejectedMessage.tsx
Notebook 编辑拒绝消息
SandboxViolationExpandedView.tsx
沙箱违规展开视图
FastIcon.tsx
快速模式图标
MessageModel.tsx
消息模型标签
MessageTimestamp.tsx
消息时间戳
MessageSelector.tsx
消息选择器
App (Provider 嵌套)
└── FullscreenLayout
├── scrollable 区
│ └── Messages
│ ├── LogoHeader (LogoV2 + StatusNotices)
│ └── VirtualMessageList
│ └── MessageRow (per message)
│ ├── MessageModel
│ ├── MessageTimestamp
│ └── Message
│ ├── AssistantTextMessage → StreamingMarkdown
│ ├── AssistantThinkingMessage
│ ├── AssistantToolUseMessage
│ ├── UserTextMessage
│ ├── UserToolResultMessage → 具体结果组件
│ ├── SystemTextMessage
│ ├── CollapsedReadSearchContent
│ ├── GroupedToolUseContent
│ └── ... (30+ 种消息类型)
├── bottom 区
│ ├── Spinner (加载中)
│ └── PromptInput
│ ├── PromptInputFooter
│ │ ├── PromptInputModeIndicator
│ │ └── PromptInputFooterSuggestions
│ ├── Notifications
│ └── VoiceIndicator
├── overlay 区
│ └── PermissionRequest → 具体权限组件
└── modal 区
└── Settings / MCPSettings / AgentsMenu / BackgroundTasksDialog ...
PermissionRequest (分发器)
├── BashPermissionRequest
├── FileEditPermissionRequest
├── FileWritePermissionRequest → FileWriteToolDiff
├── NotebookEditPermissionRequest → NotebookEditToolDiff
├── WebFetchPermissionRequest
├── SkillPermissionRequest
├── PowerShellPermissionRequest
├── AskUserQuestionPermissionRequest
├── EnterPlanModePermissionRequest
├── ExitPlanModePermissionRequest
├── FilesystemPermissionRequest
├── SedEditPermissionRequest
├── ComputerUseApproval
└── FallbackPermissionRequest
所有权限组件 → PermissionDialog → PermissionRequestTitle
AgentsMenu
├── AgentsList
├── AgentDetail
├── AgentEditor
└── CreateAgentWizard (WizardProvider)
└── WizardDialogLayout → Dialog
└── wizard-steps/* (12 步)
状态源
Hook/Context
管理内容
AppState
useAppState() / useSetAppState()
全局应用状态(消息、工具、MCP、Agent 定义等)
AppStateStore
useAppStateStore()
状态存储(Footer items 等)
Settings
useSettings()
用户设置
Theme
useTheme()
主题
Modal Context
useIsInsideModal()
是否在 modal 内
Overlay Context
usePromptOverlay()
Prompt overlay 状态
Notifications
useNotifications()
通知系统
FPS Metrics
useFpsMetrics()
性能指标
Stats
useStats()
统计信息
Terminal Size
useTerminalSize()
终端尺寸
AppState 是中央状态容器,包含消息数组、工具列表、MCP 连接、Agent 定义等
PromptInput 通过 useSetAppState() 写入用户输入,触发消息处理
Messages 从 useAppState() 读取消息数组,经过过滤/重排后渲染
PermissionRequest 从 useAppState() 读取当前工具使用,显示对应权限 UI
Settings/MCP/Agents 等 modal 通过 useSetAppState() 修改配置
React Compiler : 所有组件使用 _c() memo 缓存,自动避免不必要重渲染
OffscreenFreeze : 离屏组件冻结,防止不可见区域的渲染开销
VirtualMessageList : 虚拟滚动,只渲染可见消息
React.memo : 关键子树(如 LogoHeader)显式 memo
useSyncExternalStore : 外部状态(终端尺寸、scroll 位置)订阅
分类
组件数
主应用/布局
~6
消息渲染
~40
权限对话框
~35
设计系统
~16
PromptInput
~20
任务管理
~12
Agent 管理
~20
MCP
~12
Settings
4
Spinner
~10
LogoV2
~18
其他独立组件
~50+
辅助/工具文件
~100+
总计
389 个文件