agent-ecosystem/src/renderer/components/CLAUDE.md

4.4 KiB

Components

UI components organized by feature domain.

Structure

components/
├── chat/                    # Session message display
│   ├── items/               # Individual message/tool items
│   │   ├── linkedTool/      # Tool call/result display helpers
│   │   ├── BaseItem         # Base item wrapper
│   │   ├── baseItemHelpers  # Base item utility functions
│   │   ├── ExecutionTrace   # Execution trace display
│   │   ├── LinkedToolItem   # Tool call with linked result
│   │   ├── MetricsPill      # Metrics badge display
│   │   ├── SlashItem        # Slash command display
│   │   ├── SubagentItem     # Subagent execution display
│   │   ├── TeammateMessageItem  # Team message cards
│   │   ├── ThinkingItem     # Extended thinking display
│   │   └── TextItem         # Text output display
│   ├── viewers/             # Content viewers (JSON, code, diff)
│   ├── SessionContextPanel/ # Visible context tracking panel
│   │   ├── components/      # Section wrappers (ClaudeMdFilesSection, ToolOutputsSection, UserMessagesSection, etc.)
│   │   ├── items/           # Per-injection item renderers (ClaudeMdItem, ToolOutputItem, UserMessageItem, etc.)
│   │   ├── DirectoryTree/   # CLAUDE.md directory navigation
│   │   ├── utils/           # Formatting helpers
│   │   ├── index.tsx        # Main panel component
│   │   └── types.ts         # SectionType constants, panel props
│   ├── AIChatGroup.tsx      # AI response group display
│   ├── ChatHistory.tsx      # Chat timeline container
│   ├── ChatHistoryEmptyState.tsx  # Empty state display
│   ├── ChatHistoryItem.tsx  # Individual history item
│   ├── ChatHistoryLoadingState.tsx # Loading state display
│   ├── CompactBoundary.tsx  # Compaction event boundary marker
│   ├── ContextBadge.tsx     # Per-turn context injection popover badge
│   ├── DisplayItemList.tsx  # Display item list rendering
│   ├── LastOutputDisplay.tsx # Last output display
│   ├── SystemChatGroup.tsx  # System message group display
│   ├── UserChatGroup.tsx    # User message display
│   ├── markdownComponents.tsx # Custom markdown renderers
│   └── searchHighlightUtils.ts # Search highlight utilities
├── common/                  # Shared UI primitives
│   ├── CopyButton           # Copy to clipboard button
│   ├── CopyablePath         # Clickable, copyable file path
│   ├── ErrorBoundary        # React error boundary
│   ├── OngoingIndicator     # Session in-progress indicator
│   ├── RepositoryDropdown   # Repository selector dropdown
│   ├── TokenUsageDisplay    # Token breakdown with context stats hover
│   └── WorktreeBadge        # Git worktree badge
├── dashboard/               # Overview and listing pages
├── layout/                  # App shell, sidebars, headers
├── notifications/           # Notification panels and badges
├── search/                  # Search UI and results
├── settings/                # Settings pages and controls
│   ├── components/          # Reusable setting controls (SettingRow, SettingsToggle, etc.)
│   ├── hooks/               # Settings-specific hooks
│   ├── sections/            # Setting sections (General, Notifications, Advanced)
│   └── NotificationTriggerSettings/  # Trigger config UI
│       ├── components/      # Trigger form components
│       ├── hooks/           # Trigger form hooks
│       └── utils/           # Trigger utilities
└── sidebar/                 # Project/session navigation

Adding Components

  1. Choose appropriate parent directory by feature
  2. If used across features, place in common/
  3. Use Tailwind with theme-aware CSS variables
  4. Connect to store via useStore() hook if needed
  5. Colocate related hooks/utils in same directory

Component Guidelines

  • One component per file, PascalCase naming
  • Use functional components with hooks
  • Prefer composition over prop drilling
  • Use TabUIContext for per-tab UI state

Virtual Scrolling

Use @tanstack/react-virtual for lists > 100 items:

  • Session lists in sidebar
  • Message lists in chat view