Release v1.01 Enhanced: Vi Control, TUI Gen5, Core Stability

This commit is contained in:
Gemini AI
2025-12-20 01:12:45 +04:00
Unverified
parent 2407c42eb9
commit 142aaeee1e
254 changed files with 44888 additions and 31025 deletions

View File

@@ -0,0 +1,54 @@
# User Request: Wire Power Features & Clean UI
The goal is to finalize the implementation of "Power Features" and "Clean UI" by wiring existing components into the main TUI (`bin/opencode-ink.mjs`) and creating the missing Fuzzy Finder.
## User Review Required
> [!NOTE]
> This plan modifies the core `opencode-ink.mjs` file.
> It introduces a new `FuzzyFinder` component and updates the Sidebar and Chat rendering.
## Proposed Changes
### 1. New Component: Fuzzy File Finder
**File**: `bin/ui/components/FuzzyFinder.mjs` [NEW]
- Create a fuzzy file finder overlay.
- Uses `glob` or recursive scan to get file list.
- Filters list based on user input.
- Displays results with `ink-select-input`.
### 2. Sidebar Integration: Todo List
**File**: `bin/opencode-ink.mjs`
- Import `CleanTodoList` from `./ui/components/CleanTodoList.mjs`.
- Import `scanTodos` from `../lib/todo-scanner.mjs`.
- Add state: `const [todos, setTodos] = useState([])`.
- Add effect: Run `scanTodos` on startup and file changes.
- Pass `todos` prop to `PremiumSidebar`.
**File**: `bin/ui/components/PremiumSidebar.mjs`
- Accept `todos` prop.
- Render `CleanTodoList` in a new section (or replace Shortcuts if crowded, or collapsible).
### 3. Chat UI Clean-up: ChatBubble
**File**: `bin/opencode-ink.mjs`
- Import `ChatBubble` from `./ui/components/ChatBubble.mjs`.
- Update `ViewportMessage` (internal component) or `ScrollableChat` to render `ChatBubble` instead of raw `Box`/`Text`.
- logic to route `system` messages through `ChatBubble` with `role="system"`.
### 4. Theme Switcher
**File**: `bin/opencode-ink.mjs`
- Convert `theme` constant to state: `const [activeTheme, setActiveTheme] = useState(THEMES.dracula)`.
- Add `/theme` command to `showCommandPalette` or command processor to allow switching.
- Ensure `activeTheme` is passed to components that need it (or they import it - might need refactoring if they import static `theme`).
- *Note*: `tui-theme.mjs` exports a static `theme`. We might need to implement a Context or pass theme props. For now, we will use a simple state and pass it where possible, or update the global if `ink` allows (unlikely pure global).
- *Strategy*: We will pass `theme` as prop to `PremiumSidebar`, `ChatBubble`, etc.
## Verification Plan
### Automated Tests
- None currently available for TUI visual regression.
### Manual Verification
1. **Fuzzy Finder**: Press `Ctrl+P` (or typed command `/find`). Type `server`. Verify `server.js` is found.
2. **Todo List**: Check Sidebar for "Tasks" section. Verify it shows TODOs from project files.
3. **Chat UI**: Send a message "hello". Verify user message is right-aligned/styled. Response is left-aligned with clean gutter.
4. **Themes**: Type `/theme monokai`. Verify Sidebar colors change.