Initial Release: OpenQode Public Alpha v1.3

This commit is contained in:
Gemini AI
2025-12-14 00:40:14 +04:00
Unverified
commit 8e8d80c110
119 changed files with 31174 additions and 0 deletions

120
docs/tui-redesign-plan.md Normal file
View File

@@ -0,0 +1,120 @@
# TUI Professional Visual Redesign - Implementation Plan
## Goal
Improve TUI text rendering to be professional-grade like Claude Code, fixing HTML entities, text wrapping, streaming jitter, and layout consistency. **VISUAL ONLY - NO functionality changes.**
---
## User Review Required
> [!IMPORTANT]
> **New Dependencies Required**: This plan requires installing `he` (HTML entity decoder) and `wrap-ansi` (width-aware text wrapping). Both are lightweight, pure ESM-compatible, and widely used.
---
## Root Cause Analysis
| Issue | Source | Fix |
|-------|--------|-----|
| `'` showing literally | `marked` outputs HTML entities, no decoder | Add `he.decode()` before rendering |
| Text bleeding into borders | No width calculation for wrapping | Use `wrap-ansi` with calculated width |
| Inconsistent spacing | No theme system, hardcoded values | Create centralized theme module |
| Streaming jitter | React re-renders on every token | Add batched streaming component |
| List indentation broken | Inline tokens not properly wrapped | Fix list rendering in markdown |
---
## Proposed Changes
### Phase 1: Add Dependencies
```bash
npm install he wrap-ansi
```
---
### Phase 2: Create Theme Module
#### [NEW] bin/tui-theme.mjs
Central theme configuration:
- Spacing scale: xs=0, sm=1, md=2, lg=3
- Semantic colors: fg, muted, info, warning, error, accent, border
- Border styles with fallback for non-unicode terminals
- Consistent component styling
---
### Phase 3: Fix Markdown Renderer
#### [MODIFY] bin/ink-markdown-esm.mjs
**Changes:**
1. Import `he` for HTML entity decoding
2. Import `wrap-ansi` for width-aware wrapping
3. Apply `he.decode()` to all text content before rendering
4. Fix inline token rendering to decode entities
5. Improve list item wrapping and indentation
6. Add terminal width awareness for proper wrapping
---
### Phase 4: Update Card Components
#### [MODIFY] bin/opencode-ink.mjs (lines 477-590)
**Changes:**
1. Import theme module
2. Update SystemCard, UserCard, AgentCard, ErrorCard to use theme
3. Add consistent padding/margin from theme
4. Add flex-based width constraints
5. Ensure proper overflow handling
---
### Phase 5: Add Streaming Stability (Optional)
#### [MODIFY] bin/opencode-ink.mjs
**Changes:**
1. Add batched state update for streaming content
2. Implement 16ms throttle to reduce jitter
3. Use stable keys for message list
---
## Verification Plan
### Manual Testing (User)
Since there are no automated TUI tests in this project, verification is manual:
1. **HTML Entity Test**:
- Launch TUI: `node bin/opencode-ink.mjs`
- Send message containing apostrophes: "what's the best approach?"
- ✅ Verify: apostrophes render as `'` not `'`
2. **Text Wrapping Test**:
- Resize terminal to 80 columns
- Send long message
- ✅ Verify: text wraps cleanly, doesn't touch borders
3. **List Rendering Test**:
- Ask AI to list something: "list 5 programming languages"
- ✅ Verify: bullet points render with proper indentation
4. **Code Block Test**:
- Ask AI for code: "write a hello world in Python"
- ✅ Verify: code block has border, syntax highlighting
5. **Streaming Stability Test**:
- Send message requiring long response
- ✅ Verify: output streams without major jitter
6. **Functionality Preservation Test**:
- `/help` → Shows help card
- `/agents` → Shows agent menu with scrolling
- `/context` → Toggles context
- `/clear` → Clears messages
- ✅ All commands work exactly as before
### Cross-Platform Testing
- Windows Terminal + PowerShell
- Windows CMD
- Linux bash (if available)