@tecet/ollm 0.1.4-b → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/docs/README.md +3 -410
  2. package/package.json +2 -2
  3. package/docs/Context/CheckpointFlowDiagram.md +0 -673
  4. package/docs/Context/ContextArchitecture.md +0 -898
  5. package/docs/Context/ContextCompression.md +0 -1102
  6. package/docs/Context/ContextManagment.md +0 -750
  7. package/docs/Context/Index.md +0 -209
  8. package/docs/Context/README.md +0 -390
  9. package/docs/DevelopmentRoadmap/Index.md +0 -238
  10. package/docs/DevelopmentRoadmap/OLLM-CLI_Releases.md +0 -419
  11. package/docs/DevelopmentRoadmap/PlanedFeatures.md +0 -448
  12. package/docs/DevelopmentRoadmap/README.md +0 -174
  13. package/docs/DevelopmentRoadmap/Roadmap.md +0 -572
  14. package/docs/DevelopmentRoadmap/RoadmapVisual.md +0 -372
  15. package/docs/Hooks/Architecture.md +0 -885
  16. package/docs/Hooks/Index.md +0 -244
  17. package/docs/Hooks/KeyboardShortcuts.md +0 -248
  18. package/docs/Hooks/Protocol.md +0 -817
  19. package/docs/Hooks/README.md +0 -403
  20. package/docs/Hooks/UserGuide.md +0 -1483
  21. package/docs/Hooks/VisualGuide.md +0 -598
  22. package/docs/Index.md +0 -506
  23. package/docs/Installation.md +0 -586
  24. package/docs/Introduction.md +0 -367
  25. package/docs/LLM Models/Index.md +0 -239
  26. package/docs/LLM Models/LLM_GettingStarted.md +0 -748
  27. package/docs/LLM Models/LLM_Index.md +0 -701
  28. package/docs/LLM Models/LLM_MemorySystem.md +0 -337
  29. package/docs/LLM Models/LLM_ModelCompatibility.md +0 -499
  30. package/docs/LLM Models/LLM_ModelsArchitecture.md +0 -933
  31. package/docs/LLM Models/LLM_ModelsCommands.md +0 -839
  32. package/docs/LLM Models/LLM_ModelsConfiguration.md +0 -1094
  33. package/docs/LLM Models/LLM_ModelsList.md +0 -1071
  34. package/docs/LLM Models/LLM_ModelsList.md.backup +0 -400
  35. package/docs/LLM Models/README.md +0 -355
  36. package/docs/MCP/MCP_Architecture.md +0 -1086
  37. package/docs/MCP/MCP_Commands.md +0 -1111
  38. package/docs/MCP/MCP_GettingStarted.md +0 -590
  39. package/docs/MCP/MCP_Index.md +0 -524
  40. package/docs/MCP/MCP_Integration.md +0 -866
  41. package/docs/MCP/MCP_Marketplace.md +0 -160
  42. package/docs/MCP/README.md +0 -415
  43. package/docs/Prompts System/Architecture.md +0 -760
  44. package/docs/Prompts System/Index.md +0 -223
  45. package/docs/Prompts System/PromptsRouting.md +0 -1047
  46. package/docs/Prompts System/PromptsTemplates.md +0 -1102
  47. package/docs/Prompts System/README.md +0 -389
  48. package/docs/Prompts System/SystemPrompts.md +0 -856
  49. package/docs/Quickstart.md +0 -535
  50. package/docs/Tools/Architecture.md +0 -884
  51. package/docs/Tools/GettingStarted.md +0 -624
  52. package/docs/Tools/Index.md +0 -216
  53. package/docs/Tools/ManifestReference.md +0 -141
  54. package/docs/Tools/README.md +0 -440
  55. package/docs/Tools/UserGuide.md +0 -773
  56. package/docs/Troubleshooting.md +0 -1265
  57. package/docs/UI&Settings/Architecture.md +0 -729
  58. package/docs/UI&Settings/ColorASCII.md +0 -34
  59. package/docs/UI&Settings/Commands.md +0 -755
  60. package/docs/UI&Settings/Configuration.md +0 -872
  61. package/docs/UI&Settings/Index.md +0 -293
  62. package/docs/UI&Settings/Keybinds.md +0 -372
  63. package/docs/UI&Settings/README.md +0 -278
  64. package/docs/UI&Settings/Terminal.md +0 -637
  65. package/docs/UI&Settings/Themes.md +0 -604
  66. package/docs/UI&Settings/UIGuide.md +0 -550
@@ -1,729 +0,0 @@
1
- # User Interface Architecture
2
-
3
- **Last Updated:** January 26, 2026
4
-
5
- This document provides complete technical documentation of the User Interface architecture, including React + Ink integration, component hierarchy, state management, theme system, and terminal integration.
6
-
7
- ---
8
-
9
- ## Table of Contents
10
-
11
- - [System Overview](#system-overview)
12
- - [Technology Stack](#technology-stack)
13
- - [Layout Architecture](#layout-architecture)
14
- - [Component Hierarchy](#component-hierarchy)
15
- - [State Management](#state-management)
16
- - [Theme System](#theme-system)
17
- - [Terminal Integration](#terminal-integration)
18
- - [Focus Management](#focus-management)
19
- - [Rendering Optimization](#rendering-optimization)
20
- - [Best Practices](#best-practices)
21
-
22
- ---
23
-
24
- ## System Overview
25
-
26
- The OLLM CLI UI is a terminal-based interface built with React + Ink. The layout consists of three main areas: Header Bar, Main Content Area (with optional Side Panel), and Status Bar.
27
-
28
- ### Core Principles
29
-
30
- 1. **Terminal-First** - Designed for terminal environments
31
- 2. **Keyboard-Driven** - All features accessible via keyboard
32
- 3. **Responsive** - Adapts to terminal size changes
33
- 4. **Performant** - Efficient rendering and state updates
34
- 5. **Accessible** - Screen reader compatible, high contrast support
35
-
36
- ---
37
-
38
- ## Technology Stack
39
-
40
- ### Core Technologies
41
-
42
- **React + Ink:**
43
-
44
- - React 19.2.3 for component model
45
- - Ink 6.6.0 for terminal rendering
46
- - Functional components with hooks
47
- - Context API for state management
48
-
49
- **Terminal Rendering:**
50
-
51
- - ANSI escape codes for formatting
52
- - Flexbox-like layout system
53
- - Component-based architecture
54
-
55
- **State Management:**
56
-
57
- - React Context for global state
58
- - Local state with useState/useReducer
59
- - Event-driven updates
60
-
61
- ---
62
-
63
- ## Layout Architecture
64
-
65
- ### Layout Structure
66
-
67
- ```
68
- ┌─────────────────────────────────────────────────────────────────┐
69
- │ HEADER BAR (SystemBar) │
70
- │ Model | Context | Mode | Clock │
71
- ├─────────────────────────────────────────────────────────────────┤
72
- │ │
73
- │ ┌─────────────────────┬─────────────────────────────────────┐ │
74
- │ │ │ │ │
75
- │ │ MAIN CONTENT │ SIDE PANEL (Optional) │ │
76
- │ │ (Chat/Tabs) │ (Tools/Hooks/Files/MCP/Settings) │ │
77
- │ │ │ │ │
78
- │ │ - Chat History │ - Tab Navigation │ │
79
- │ │ - Input Area │ - Tab Content │ │
80
- │ │ │ - Actions │ │
81
- │ │ │ │ │
82
- │ └─────────────────────┴─────────────────────────────────────┘ │
83
- │ │
84
- ├─────────────────────────────────────────────────────────────────┤
85
- │ STATUS BAR │
86
- │ Status | Keybind Hints | Notifications │
87
- └─────────────────────────────────────────────────────────────────┘
88
- ```
89
-
90
- ### Flexbox-Style Layout
91
-
92
- ```typescript
93
- // Root Container
94
- <Box flexDirection="column" height="100%" width="100%">
95
- {/* Header Bar - Fixed height */}
96
- <Box flexShrink={0} height={1} borderStyle="single" borderBottom>
97
- <SystemBar />
98
- </Box>
99
-
100
- {/* Main Content - Flexible */}
101
- <Box flexGrow={1} flexDirection="row">
102
- {/* Left Column - Chat */}
103
- <Box flexGrow={1} flexDirection="column" minWidth="60%">
104
- <ChatTab />
105
- </Box>
106
-
107
- {/* Right Column - Side Panel (toggleable) */}
108
- {sidePanelVisible && (
109
- <Box flexShrink={0} width="40%" borderLeft>
110
- <SidePanel />
111
- </Box>
112
- )}
113
- </Box>
114
-
115
- {/* Status Bar - Fixed height */}
116
- <Box flexShrink={0} height={1} borderStyle="single" borderTop>
117
- <StatusBar />
118
- </Box>
119
- </Box>
120
- ```
121
-
122
- ---
123
-
124
- ## Component Hierarchy
125
-
126
- ### Component Tree
127
-
128
- ```mermaid
129
- graph TB
130
- App[App.tsx]
131
- App --> SystemBar[SystemBar]
132
- App --> MainContent[Main Content]
133
- App --> StatusBar[StatusBar]
134
-
135
- SystemBar --> ModelDisplay[Model Display]
136
- SystemBar --> ContextSection[Context Section]
137
- SystemBar --> ModeDisplay[Mode Display]
138
- SystemBar --> Clock[Clock]
139
-
140
- MainContent --> ChatTab[Chat Tab]
141
- MainContent --> SidePanel[Side Panel]
142
-
143
- ChatTab --> ChatHistory[Chat History]
144
- ChatTab --> ChatInput[Chat Input]
145
-
146
- ChatHistory --> Message[Message]
147
- Message --> ReasoningBox[Reasoning Box]
148
- Message --> ToolCall[Tool Call]
149
-
150
- SidePanel --> TabBar[Tab Bar]
151
- SidePanel --> TabContent[Tab Content]
152
-
153
- TabContent --> ToolsTab[Tools Tab]
154
- TabContent --> HooksTab[Hooks Tab]
155
- TabContent --> FilesTab[Files Tab]
156
- TabContent --> MCPTab[MCP Tab]
157
- TabContent --> SettingsTab[Settings Tab]
158
-
159
- style App fill:#e1f5ff
160
- style SystemBar fill:#fff4e1
161
- style MainContent fill:#f0f0f0
162
- style StatusBar fill:#fff4e1
163
- ```
164
-
165
- ### Component Locations
166
-
167
- | Component | File Path |
168
- | ------------- | --------------------------------------------------------- |
169
- | App (Root) | `packages/cli/src/ui/App.tsx` |
170
- | SystemBar | `packages/cli/src/ui/components/layout/SystemBar.tsx` |
171
- | StatusBar | `packages/cli/src/ui/components/layout/StatusBar.tsx` |
172
- | SidePanel | `packages/cli/src/ui/components/layout/SidePanel.tsx` |
173
- | TabBar | `packages/cli/src/ui/components/layout/TabBar.tsx` |
174
- | ChatTab | `packages/cli/src/ui/components/tabs/ChatTab.tsx` |
175
- | ChatHistory | `packages/cli/src/ui/components/chat/ChatHistory.tsx` |
176
- | Message | `packages/cli/src/ui/components/chat/Message.tsx` |
177
- | ChatInputArea | `packages/cli/src/ui/components/layout/ChatInputArea.tsx` |
178
- | ToolsTab | `packages/cli/src/ui/components/tabs/ToolsTab.tsx` |
179
- | HooksTab | `packages/cli/src/ui/components/tabs/HooksTab.tsx` |
180
- | FilesTab | `packages/cli/src/ui/components/tabs/FilesTab.tsx` |
181
- | MCPTab | `packages/cli/src/ui/components/tabs/MCPTab.tsx` |
182
- | SettingsTab | `packages/cli/src/ui/components/tabs/SettingsTab.tsx` |
183
-
184
- ---
185
-
186
- ## State Management
187
-
188
- ### Context Architecture
189
-
190
- ```mermaid
191
- graph TB
192
- App[App Component]
193
-
194
- App --> UIContext[UIContext]
195
- App --> ChatContext[ChatContext]
196
- App --> FocusContext[FocusContext]
197
- App --> InputRouting[InputRoutingContext]
198
- App --> Terminal1[TerminalContext]
199
- App --> Terminal2[Terminal2Context]
200
-
201
- UIContext --> Theme[Theme State]
202
- UIContext --> SidePanel[Side Panel State]
203
- UIContext --> ActiveTab[Active Tab State]
204
-
205
- ChatContext --> Messages[Messages State]
206
- ChatContext --> Input[Input State]
207
- ChatContext --> Streaming[Streaming State]
208
-
209
- FocusContext --> FocusManager[Focus Manager]
210
- FocusContext --> ActiveElement[Active Element]
211
-
212
- style App fill:#e1f5ff
213
- style UIContext fill:#fff4e1
214
- style ChatContext fill:#fff4e1
215
- style FocusContext fill:#fff4e1
216
- ```
217
-
218
- ### Context Providers
219
-
220
- #### UIContext
221
-
222
- **Location:** `packages/cli/src/ui/contexts/UIContext.tsx`
223
-
224
- **State:**
225
-
226
- ```typescript
227
- interface UIState {
228
- theme: Theme;
229
- sidePanelVisible: boolean;
230
- activeRightPanel: string;
231
- // ... other UI state
232
- }
233
- ```
234
-
235
- **Actions:**
236
-
237
- ```typescript
238
- interface UIActions {
239
- setTheme: (theme: Theme) => void;
240
- toggleSidePanel: () => void;
241
- setActiveRightPanel: (panel: string) => void;
242
- // ... other actions
243
- }
244
- ```
245
-
246
- #### ChatContext
247
-
248
- **Location:** `packages/cli/src/features/context/ChatContext.tsx`
249
-
250
- **State:**
251
-
252
- ```typescript
253
- interface ChatState {
254
- messages: Message[];
255
- input: string;
256
- isStreaming: boolean;
257
- currentMessageId: string | null;
258
- // ... other chat state
259
- }
260
- ```
261
-
262
- **Actions:**
263
-
264
- ```typescript
265
- interface ChatActions {
266
- addMessage: (message: Message) => void;
267
- updateMessage: (id: string, updates: Partial<Message>) => void;
268
- setInput: (input: string) => void;
269
- sendMessage: () => void;
270
- // ... other actions
271
- }
272
- ```
273
-
274
- #### FocusContext
275
-
276
- **Location:** `packages/cli/src/ui/contexts/FocusContext.tsx`
277
-
278
- **State:**
279
-
280
- ```typescript
281
- interface FocusState {
282
- activeElement: FocusableElement;
283
- focusHistory: FocusableElement[];
284
- }
285
-
286
- type FocusableElement = 'chat-input' | 'side-panel' | 'file-explorer' | 'dialog';
287
- ```
288
-
289
- **Actions:**
290
-
291
- ```typescript
292
- interface FocusActions {
293
- setFocus: (element: FocusableElement) => void;
294
- cycleFocus: (direction: 'forward' | 'backward') => void;
295
- restoreFocus: () => void;
296
- }
297
- ```
298
-
299
- ---
300
-
301
- ## Message Rendering Architecture
302
-
303
- ### Line-Based Rendering System
304
-
305
- **IMPORTANT:** OLLM CLI uses a **line-based rendering system** for chat history, not React component trees.
306
-
307
- **Rendering Flow:**
308
-
309
- ```mermaid
310
- sequenceDiagram
311
- participant CM as ChatContext
312
- participant CH as ChatHistory
313
- participant BL as buildChatLines()
314
- participant Render as Ink Render
315
-
316
- CM->>CM: Update message state
317
- CM->>CH: messages prop updated
318
- CH->>BL: buildChatLines(messages)
319
- BL->>BL: Convert messages to text lines
320
- BL->>BL: Apply message.expanded state
321
- BL-->>CH: AnsiLine[]
322
- CH->>Render: Render lines as Text
323
- ```
324
-
325
- **Key Insight:** Component-level state in `Message.tsx` or child components does NOT affect rendering. The actual rendering happens in the `buildChatLines()` utility function.
326
-
327
- ### Collapsible Content System
328
-
329
- **State Control:** `message.expanded` field (boolean)
330
-
331
- **Collapsible Elements:**
332
-
333
- - Reasoning blocks (thinking process)
334
- - Tool calls with large arguments
335
- - Diffs with many lines
336
- - Long outputs
337
-
338
- **Behavior:**
339
-
340
- ```typescript
341
- // ChatHistory.tsx
342
- const isExpanded = message.expanded === true;
343
-
344
- if (showReasoning && message.reasoning) {
345
- if (isExpanded) {
346
- // Show full reasoning content
347
- addLine([{ text: message.reasoning.content, ... }]);
348
- } else {
349
- addLine([{ text: 'Reasoning: (collapsed)', ... }]);
350
- }
351
- }
352
- ```
353
-
354
- ### Reasoning Box Behavior
355
-
356
- **States:**
357
-
358
- 1. **Streaming (expanded: true, complete: false)**
359
- - Reasoning shows EXPANDED with full content
360
- - Content streams in real-time
361
- - User can see the thinking process
362
-
363
- 2. **Complete (expanded: false, complete: true)**
364
- - Auto-collapses to summary view
365
- - Shows "Reasoning: (collapsed)"
366
- - Saves screen space
367
-
368
- 3. **Historical Messages**
369
- - Completed reasoning blocks start COLLAPSED
370
- - Shows summary line only
371
-
372
- **Implementation:**
373
-
374
- ```typescript
375
- // ChatContext.tsx - Message Creation
376
- const assistantMsg = addMessage({
377
- role: 'assistant',
378
- content: '',
379
- expanded: true, // Start expanded to show reasoning
380
- });
381
-
382
- // ChatContext.tsx - On Completion
383
- if (msg.reasoning) {
384
- updates.reasoning = {
385
- ...msg.reasoning,
386
- complete: true,
387
- };
388
- updates.expanded = false; // Auto-collapse when complete
389
- }
390
- ```
391
-
392
- ---
393
-
394
- ## Theme System
395
-
396
- ### Theme Architecture
397
-
398
- ```mermaid
399
- graph LR
400
- TM[ThemeManager]
401
- SS[SettingsService]
402
- UC[UIContext]
403
- Comp[Components]
404
-
405
- TM -->|load theme| UC
406
- SS -->|get/set theme| TM
407
- UC -->|provide theme| Comp
408
- Comp -->|use theme colors| Render[Rendered UI]
409
-
410
- style TM fill:#fff4e1
411
- style SS fill:#f0f0f0
412
- style UC fill:#e1f5ff
413
- ```
414
-
415
- ### Theme Structure
416
-
417
- ```typescript
418
- interface Theme {
419
- name: string;
420
- bg: {
421
- primary: string; // Main background
422
- secondary: string; // Secondary background
423
- tertiary: string; // Tertiary background
424
- };
425
- text: {
426
- primary: string; // Main text color
427
- secondary: string; // Secondary text color
428
- accent: string; // Accent/highlight color
429
- };
430
- role: {
431
- user: string; // User message color
432
- assistant: string; // Assistant message color
433
- system: string; // System message color
434
- tool: string; // Tool call color
435
- };
436
- status: {
437
- success: string; // Success state color
438
- warning: string; // Warning state color
439
- error: string; // Error state color
440
- info: string; // Info state color
441
- };
442
- border: {
443
- primary: string; // Primary border color
444
- secondary: string; // Secondary border color
445
- active: string; // Active border color
446
- style: string; // Border style (round, single, double)
447
- };
448
- diff: {
449
- added: string; // Added lines in diff
450
- removed: string; // Removed lines in diff
451
- };
452
- }
453
- ```
454
-
455
- ### Built-in Themes
456
-
457
- 1. **solarized-dark** (Default) - Precision theme for reduced eye strain
458
- 2. **neon-dark** - Balanced dark theme
459
- 3. **dracula-dark** - High-contrast theme
460
- 4. **nord-dark** - Arctic, north-bluish palette
461
- 5. **monokai-dark** - Vibrant, high-contrast theme
462
- 6. **solarized-dark-2** - Alternative Solarized variant
463
-
464
- ### Theme Application
465
-
466
- ```typescript
467
- // Accessing theme in components
468
- const { state: uiState } = useUI();
469
- const { theme } = uiState;
470
-
471
- // Using theme colors
472
- <Text color={theme.text.primary}>Content</Text>
473
- <Box borderColor={theme.border.active}>Focused</Box>
474
- ```
475
-
476
- ---
477
-
478
- ## Terminal Integration
479
-
480
- ### Terminal Architecture
481
-
482
- ```mermaid
483
- graph TB
484
- TC[TerminalContext]
485
- PTY[PTY Process]
486
- Xterm[xterm.js Headless]
487
- Ser[terminalSerializer]
488
- Comp[Terminal2 Component]
489
-
490
- TC -->|spawn| PTY
491
- TC -->|create| Xterm
492
- PTY -->|data| Xterm
493
- Xterm -->|buffer| Ser
494
- Ser -->|AnsiLine[]| TC
495
- TC -->|output| Comp
496
- Comp -->|render| UI[Terminal UI]
497
-
498
- style TC fill:#fff4e1
499
- style PTY fill:#f0f0f0
500
- style Xterm fill:#f0f0f0
501
- ```
502
-
503
- ### PTY Integration
504
-
505
- **Process Spawning:**
506
-
507
- ```typescript
508
- const isWindows = os.platform() === 'win32';
509
- const shell = isWindows ? 'powershell.exe' : 'bash';
510
-
511
- pty.spawn(shell, shellArgs, {
512
- name: 'xterm-color',
513
- cols: 80,
514
- rows: 30,
515
- cwd: process.cwd(),
516
- env: process.env,
517
- });
518
- ```
519
-
520
- ### ANSI Rendering
521
-
522
- **Token Structure:**
523
-
524
- ```typescript
525
- interface AnsiToken {
526
- text: string;
527
- bold: boolean;
528
- italic: boolean;
529
- underline: boolean;
530
- dim: boolean;
531
- inverse: boolean;
532
- fg: string; // Hex color
533
- bg: string; // Hex color
534
- }
535
-
536
- type AnsiLine = AnsiToken[];
537
- ```
538
-
539
- **Serialization Process:**
540
-
541
- 1. Read xterm.js buffer cells
542
- 2. Extract cell attributes (bold, italic, colors)
543
- 3. Group consecutive cells with same attributes
544
- 4. Convert to structured tokens
545
- 5. Emit as array of lines
546
-
547
- ---
548
-
549
- ## Focus Management
550
-
551
- ### Focus System
552
-
553
- ```mermaid
554
- stateDiagram-v2
555
- [*] --> ChatInput
556
- ChatInput --> SidePanel: Tab
557
- SidePanel --> FileExplorer: Tab
558
- FileExplorer --> Dialog: Open Dialog
559
- Dialog --> ChatInput: Close Dialog
560
- ChatInput --> SidePanel: Ctrl+P
561
- SidePanel --> ChatInput: Ctrl+Space
562
- ```
563
-
564
- ### Focusable Elements
565
-
566
- 1. **Chat Input** - Main input area
567
- 2. **Side Panel** - Side panel tabs and content
568
- 3. **File Explorer** - File tree navigation
569
- 4. **Dialogs** - Modal dialogs (when open)
570
-
571
- ### Focus Indicators
572
-
573
- - Border highlight (theme-dependent)
574
- - Cursor visibility
575
- - Keybind hints update
576
-
577
- ### Focus API
578
-
579
- ```typescript
580
- interface FocusManager {
581
- setFocus: (element: FocusableElement) => void;
582
- cycleFocus: (direction: 'forward' | 'backward') => void;
583
- restoreFocus: () => void;
584
- hasFocus: (element: FocusableElement) => boolean;
585
- }
586
- ```
587
-
588
- ---
589
-
590
- ## Rendering Optimization
591
-
592
- ### Performance Strategies
593
-
594
- **1. Virtual Scrolling**
595
-
596
- - Only render visible messages
597
- - Lazy load older messages
598
- - Pagination for long conversations
599
-
600
- **2. Message Pagination**
601
-
602
- - Keep last 100 messages in memory
603
- - Older messages in session storage
604
- - Load on demand when scrolling
605
-
606
- **3. Efficient Updates**
607
-
608
- - React reconciliation for minimal updates
609
- - Memoization for expensive computations
610
- - Debounced state updates
611
-
612
- **4. Layout Optimization**
613
-
614
- - Fixed-size components where possible
615
- - Avoid unnecessary re-renders
616
- - Use React.memo for pure components
617
-
618
- ### Memory Management
619
-
620
- **Chat History:**
621
-
622
- ```typescript
623
- // Keep recent messages in memory
624
- const recentMessages = messages.slice(-100);
625
-
626
- // Store older messages
627
- const olderMessages = messages.slice(0, -100);
628
- sessionStorage.setItem('older-messages', JSON.stringify(olderMessages));
629
- ```
630
-
631
- **File Explorer:**
632
-
633
- ```typescript
634
- // Lazy load directory contents
635
- const loadDirectory = async (path: string) => {
636
- if (expandedDirs.has(path)) return;
637
- const contents = await fs.readdir(path);
638
- setExpandedDirs((prev) => new Set([...prev, path]));
639
- };
640
- ```
641
-
642
- ---
643
-
644
- ## Responsive Behavior
645
-
646
- ### Terminal Size Adaptation
647
-
648
- **Minimum Size:** 80x24 (columns x rows)
649
- **Recommended:** 120x40
650
-
651
- **Behavior:**
652
-
653
- - Side panel auto-hides on narrow terminals (< 100 columns)
654
- - Chat history scrolls on short terminals (< 30 rows)
655
- - Input area shrinks on very short terminals
656
-
657
- ### Overflow Handling
658
-
659
- ```typescript
660
- // Chat History
661
- <Box flexDirection="column" overflow="hidden">
662
- <Box flexGrow={1} overflowY="auto">
663
- {/* Scrollable content */}
664
- </Box>
665
- </Box>
666
-
667
- // Side Panel Content
668
- <Box flexGrow={1} overflowY="auto" overflowX="hidden">
669
- {/* Scrollable, wrapped content */}
670
- </Box>
671
- ```
672
-
673
- ---
674
-
675
- ## Best Practices
676
-
677
- ### Component Design
678
-
679
- 1. **Functional Components** - Use hooks, not classes
680
- 2. **Single Responsibility** - One component, one purpose
681
- 3. **Composition** - Build complex UIs from simple components
682
- 4. **Props Validation** - Use TypeScript interfaces
683
- 5. **Error Boundaries** - Handle errors gracefully
684
-
685
- ### State Management
686
-
687
- 1. **Context for Global State** - Use Context API for shared state
688
- 2. **Local State for UI** - Use useState for component-specific state
689
- 3. **Derived State** - Use useMemo for computed values
690
- 4. **Side Effects** - Use useEffect for side effects
691
- 5. **Event Handlers** - Keep handlers simple and focused
692
-
693
- ### Performance
694
-
695
- 1. **Memoization** - Use React.memo for pure components
696
- 2. **Lazy Loading** - Load content on demand
697
- 3. **Debouncing** - Debounce expensive operations
698
- 4. **Virtual Scrolling** - Render only visible items
699
- 5. **Profiling** - Use React DevTools to identify bottlenecks
700
-
701
- ### Accessibility
702
-
703
- 1. **Keyboard Navigation** - All features accessible via keyboard
704
- 2. **Focus Indicators** - Clear visual focus indicators
705
- 3. **Screen Reader Support** - Text-based UI, ANSI formatting
706
- 4. **Color Contrast** - High contrast themes available
707
- 5. **Status Messages** - Clear, descriptive status messages
708
-
709
- ---
710
-
711
- ## File Locations
712
-
713
- | Category | Files |
714
- | ------------ | --------------------------------------------------- |
715
- | **Root** | `packages/cli/src/ui/App.tsx` |
716
- | **Layout** | `packages/cli/src/ui/components/layout/` |
717
- | **Chat** | `packages/cli/src/ui/components/chat/` |
718
- | **Tabs** | `packages/cli/src/ui/components/tabs/` |
719
- | **Contexts** | `packages/cli/src/ui/contexts/` |
720
- | **Hooks** | `packages/cli/src/ui/hooks/` |
721
- | **Utils** | `packages/cli/src/ui/utils/` |
722
- | **Themes** | `packages/cli/src/config/themes.ts` |
723
- | **Terminal** | `packages/cli/src/ui/contexts/Terminal*Context.tsx` |
724
-
725
- ---
726
-
727
- **Last Updated:** January 26, 2026
728
- **Version:** 0.1.0
729
- **Status:** Active Development