# Components - **App** — `apps/web/src/App.tsx` - **AddProjectModal** — props: open, onOpenChange, onAdded — `apps/web/src/components/AddProjectModal.tsx` - **AgentComposerBar** — props: projectPath, value, onChange, onProviderCommandsChange, connected, agentStatus — `apps/web/src/components/AgentComposerBar.tsx` - **AgentPicker** — props: projectId, value, onChange — `apps/web/src/components/AgentPicker.tsx` - **ArenaLauncherDialog** — `apps/web/src/components/ArenaLauncherDialog.tsx` - **ArtifactPaneHeader** — props: title, defaultTitle, onDownload, downloadDisabled, onClose, onCopy, justCopied, copyDisabled — `apps/web/src/components/ArtifactPaneHeader.tsx` - **AskUserInputCard** — props: toolCall, toolResult, chatId, apiPrefix — `apps/web/src/components/AskUserInputCard.tsx` - **AttachmentChip** — props: attachment, onRemove, onPreview — `apps/web/src/components/AttachmentChip.tsx` - **AttachmentPreviewModal** — props: attachment, onClose — `apps/web/src/components/AttachmentPreviewModal.tsx` - **BottomSheet** — props: open, onClose, title — `apps/web/src/components/BottomSheet.tsx` - **CapHitSentinel** — props: message, capHitPosition, isLatest — `apps/web/src/components/CapHitSentinel.tsx` - **ChatInput** — props: disabled, projectId, agentId, onAgentChange, sessionId, webSearchEnabled, onSend, onForceSend, generating, onStop — `apps/web/src/components/ChatInput.tsx` - **ChatTabBar** — props: pane, tabs, tabNumbers, onSwitchTab, onRemoveTab, onCloseOthers, onCloseToRight, onCloseAll, onNewTab, onSplitPane — `apps/web/src/components/ChatTabBar.tsx` - **ChatThroughput** — props: chatId, className — `apps/web/src/components/ChatThroughput.tsx` - **CodeBlock** — props: code, lang — `apps/web/src/components/CodeBlock.tsx` - **ContextMeter** — props: messages, modelContextLimit, sessionCostUsd — `apps/web/src/components/ContextMeter.tsx` - **CreateProjectModal** — props: open, onOpenChange — `apps/web/src/components/CreateProjectModal.tsx` - **DoomLoopSentinel** — props: message — `apps/web/src/components/DoomLoopSentinel.tsx` - **DropOverlay** — props: visible — `apps/web/src/components/DropOverlay.tsx` - **FileMentionPopover** — props: query, files, anchorRect, onSelect, onClose — `apps/web/src/components/FileMentionPopover.tsx` - **FileViewerOverlay** — props: path, content, lang, onClose — `apps/web/src/components/FileViewerOverlay.tsx` - **FlowLauncherDialog** — `apps/web/src/components/FlowLauncherDialog.tsx` - **GitDiffView** — props: result, loading, error, mode, onSelectMode, onRefresh, mutating, mutateError, onStage, onUnstage — `apps/web/src/components/GitDiffView.tsx` - **HtmlArtifactPane** — props: chatId, state, onClose — `apps/web/src/components/HtmlArtifactPane.tsx` - **InferenceSettings** — `apps/web/src/components/InferenceSettings.tsx` - **MarkdownArtifactPane** — props: chatId, state, onClose — `apps/web/src/components/MarkdownArtifactPane.tsx` - **MarkdownRenderer** — props: content — `apps/web/src/components/MarkdownRenderer.tsx` - **MessageBubble** — props: message, sessionChats, capHitInfo, actions, hideActions, hasCheckpoint, restoreDisabled — `apps/web/src/components/MessageBubble.tsx` - **MessageList** — props: messages, sessionChats — `apps/web/src/components/MessageList.tsx` - **MobileTabSwitcher** — props: panes, activePaneIdx, chats, onSwitchPane, onRemovePane, onRenameChat — `apps/web/src/components/MobileTabSwitcher.tsx` - **ModelPicker** — props: value, onChange — `apps/web/src/components/ModelPicker.tsx` - **NewPaneMenu** — props: onAddPane, disabled, projectId — `apps/web/src/components/NewPaneMenu.tsx` - **PaneHeaderActions** — props: onNewTab, onSplitPane, onNewOrchestrator, onNewArena, onReopenPane, onShowHistory, onRemovePane, historyActive, className — `apps/web/src/components/PaneHeaderActions.tsx` - **PermissionCard** — props: prompt, onRespond, busy — `apps/web/src/components/PermissionCard.tsx` - **ProjectSidebar** — `apps/web/src/components/ProjectSidebar.tsx` - **RequestReadAccessCard** — props: toolCall, toolResult, chatId — `apps/web/src/components/RequestReadAccessCard.tsx` - **RightRail** — props: projectId, sessionId — `apps/web/src/components/RightRail.tsx` - **SessionLandingPage** — props: projectId, sessionId, agentId, onAgentChange, onSend, onSkillInvoke, createChat, chats, onOpenChat, onUnarchiveChat — `apps/web/src/components/SessionLandingPage.tsx` - **SlashCommandPicker** — props: query, items, groups, inputRef, onSelect, onClose, emptyLabel — `apps/web/src/components/SlashCommandPicker.tsx` - **StaleStreamBanner** — props: onRetry, onDiscard — `apps/web/src/components/StaleStreamBanner.tsx` - **StatusDot** — props: chatId, className — `apps/web/src/components/StatusDot.tsx` - **ThemePicker** — `apps/web/src/components/ThemePicker.tsx` - **ToolCallGroup** — props: runs — `apps/web/src/components/ToolCallGroup.tsx` - **ToolCallLine** — props: run, insideGroup — `apps/web/src/components/ToolCallLine.tsx` - **Workspace** — props: sessionId, projectId, agentId, onAgentChange, panesHook, chatsHook, session, project, onAddPane — `apps/web/src/components/Workspace.tsx` - **AddProviderModal** — props: open, onOpenChange, onAdded — `apps/web/src/components/coder/AddProviderModal.tsx` - **ProvidersSettings** — `apps/web/src/components/coder/ProvidersSettings.tsx` - **MatrixRain** — props: enabled, density, speed, opacity — `apps/web/src/components/fx/MatrixRain.tsx` - **NeonField** — props: enabled, opacity, speed — `apps/web/src/components/fx/NeonField.tsx` - **ThemeFx** — `apps/web/src/components/fx/ThemeFx.tsx` - **ClaudeIcon** — props: size, className — `apps/web/src/components/icons/ProviderIcons.tsx` - **OpenCodeIcon** — props: size, className — `apps/web/src/components/icons/ProviderIcons.tsx` - **ArenaPane** — props: state, onClose — `apps/web/src/components/panes/ArenaPane.tsx` - **ChatPane** — props: sessionId, chatId, projectId, agentId, onAgentChange, sessionChats, webSearchEnabled — `apps/web/src/components/panes/ChatPane.tsx` - **CoderMessageList** — props: messages, chatId, footer, actions, checkpointMessageIds, restoreDisabled — `apps/web/src/components/panes/CoderMessageList.tsx` - **CoderPane** — props: sessionId, paneId, chatId, chatPending, projectPath, onConnectedChange, onAgentLabelChange — `apps/web/src/components/panes/CoderPane.tsx` - **OrchestratorPane** — props: state, onClose — `apps/web/src/components/panes/OrchestratorPane.tsx` - **SettingsPane** — props: session, project, maximized, onToggleMaximize, onClose, isMobile — `apps/web/src/components/panes/SettingsPane.tsx` - **TerminalPane** — props: sessionId, paneId, label, active — `apps/web/src/components/panes/TerminalPane.tsx` - **FloatingMenu** — props: x, y, hasSelection, chatInputs, onCopy, onPaste, onSelectAll, onSearch, onSendToChat, onDismiss — `apps/web/src/components/panes/terminal/FloatingMenu.tsx` - **SearchBar** — props: searchRef, theme, onClose — `apps/web/src/components/panes/terminal/SearchBar.tsx` - **TerminalHotkeyBar** — props: ctrlArmed, onSendBytes, onArmCtrl, onFit — `apps/web/src/components/panes/terminal/TerminalHotkeyBar.tsx` - **RightRailDrawerProvider** — `apps/web/src/hooks/useRightRailDrawer.tsx` - **SidebarDrawerProvider** — `apps/web/src/hooks/useSidebarDrawer.tsx` - **PATH_REGEX** — `apps/web/src/lib/linkify-paths.tsx` - **Home** — `apps/web/src/pages/Home.tsx` - **Project** — `apps/web/src/pages/Project.tsx` - **Session** — `apps/web/src/pages/Session.tsx` - **Settings** — `apps/web/src/pages/Settings.tsx`