| innate-executable Playground | Current innate-desktop Workbench | |
|---|---|---|
| Framework | Next.js 16.2 (App Router) | Vite + React 19 |
| Renderer | Tauri v2 | Tauri v2 |
| UI Primitives | Radix UI | Base UI |
| Styling | Tailwind CSS v4 | Tailwind CSS v4 |
| State Management | Zustand | React useState/useCallback |
| Icons | lucide-react | lucide-react |
┌─────────────────────────────────────────────────────────────┐
│ Sidebar (collapsible) │ Menu Bar │
│ ┌───────────────────┐ ├───────────────────────────────────┤
│ │ Brand + Logo │ │ │
│ ├───────────────────┤ │ SidebarInset (main content) │
│ │ Navigation │ │ │
│ │ - 首页 │ │ │
│ │ - 教程中心 │ │ │
│ │ - 学习工作台 │ │ │
│ ├───────────────────┤ │ │
│ │ Courses (expand) │ │ │
│ │ ├─ Skill 1 │ │ │
│ │ ├─ Skill 2 │ ├───────────────────────────────────┤
│ ├───────────────────┤ │ Terminal Panel (bottom/right) │
│ │ Admin / 管理 │ └───────────────────────────────────┘
│ ├───────────────────┤ │ Status Bar │
│ │ Platform Info │ └───────────────────────────────────┘
│ └───────────────────┘
Key features:
- Collapsible sidebar via
SidebarProvider— can collapse to icon-only mode - Menu Bar at top — app-level navigation/actions
- Terminal Panel — embedded terminal (xterm.js), positionable right or bottom
- Status Bar at bottom — system info, platform detection
- Course navigation — dynamic collapsible course/skill tree with auto-scan
┌─────────────────────────────────────────────────────────────┐
│ Sidebar Rail (88px) │ Header (brand + toolbar) │
│ ┌─────┐ ├───────────────────────────────────┤
│ │ ⚙️ │ │ │
│ │Icon │ │ ┌─────────┐ ┌──────────────────┐ │
│ │Label│ │ │ Left │ │ Main Content │ │
│ ├─────┤ │ │ Panel │ │ │ │
│ │ 📁 │ │ │ │ │ │ │
│ │Work │ │ ├─────────┤ │ │ │
│ ├─────┤ │ │ │ │ │ │
│ │ 📦 │ │ │ │ ├──────────────────┤ │
│ │QA │ │ └─────────┘ │ Right Panel │ │
│ ├─────┤ │ │ (Capabilities) │ │
│ │ ⚙️ │ │ └──────────────────┘ │
│ │Set │ │ │
│ └─────┘ │ Git Status Bar │
│ └───────────────────────────────────┘
Key features:
- Fixed icon+label rail (88px) — always visible, compact
- Header with brand and toolbar badges
- Three-column layout — left panel (product nav), main (content), right panel (capabilities)
- Git Status Bar — branch info, refresh
- Agent Chat Panel — integrated AI agent interaction
| Feature | innate-executable | Current Workbench |
|---|---|---|
| Width | 16rem expanded / 3rem collapsed |
Fixed 88px |
| Style | Full text + icons | Stacked icon-above-label |
| Collapsible | ✅ Yes (SidebarProvider) | ❌ No (fixed rail) |
| Group headers | ✅ Yes (Navigation, Courses, Admin) | ❌ No (flat list) |
| Nested items | ✅ Yes (course → skills) | ❌ No |
| Dynamic content | ✅ Auto-scanned courses/skills | ❌ Static nav items |
| Active state | isActive prop on menu button |
Manual activeItemId check |
Verdict: innate-executable's sidebar is richer for content-heavy apps with hierarchical navigation. Current workbench's rail is simpler and more space-efficient for a fixed set of tools.
| Feature | innate-executable | Current Workbench |
|---|---|---|
| Component | MenuBar |
<header> in WorkbenchShell |
| Content | Breadcrumbs, actions | Brand name, badges, settings button |
| Height | Standard | h-11 (compact) |
Verdict: innate-executable's MenuBar is more conventional. Current workbench's header is minimal and clean.
| Feature | innate-executable | Current Workbench |
|---|---|---|
| Terminal | ✅ xterm.js embedded | ❌ None |
| Position | Right panel or bottom | N/A |
| Toggle | Via store (Zustand) | N/A |
Verdict: innate-executable has a significant advantage for developer tooling. This is a unique feature worth preserving.
| Feature | innate-executable | Current Workbench |
|---|---|---|
| Content | Platform detection, version | Git status, host info |
| Component | StatusBar |
Inline footer div |
Verdict: Both are functional. innate-executable's platform badge is a nice touch.
| Feature | innate-executable | Current Workbench |
|---|---|---|
| Framework | Next.js pages (App Router) | Single-page React |
| Routing | File-based (/tutorials, /learn) |
Tab switch (workspace/settings/qa) |
| Layout | SidebarInset with scroll |
Grid-based panels |
| Preview | Tutorial markdown rendering | File tree + code preview |
Verdict: Different use cases. innate-executable is content/tutorial-focused. Current workbench is file/workspace-focused.
Strengths:
- Rich sidebar navigation — collapsible groups, nested skills, auto-discovery
- Embedded terminal — xterm.js with PTY support
- Course/tutorial system — dynamic content scanning
- Next.js ecosystem — SSR, file-based routing, font optimization
- Platform awareness — detects macOS/Windows/Linux in status bar
- Zustand store — clean state management with persistence
Weaknesses:
- Framework lock-in — Next.js App Router makes it harder to embed in non-Next contexts
- Heavy dependencies — Radix UI primitives, next-mdx-remote, recharts, etc.
- Nested monorepo — adds complexity to outer monorepo integration
- No workbench concept — lacks file browser, git integration, agent chat
Strengths:
- Framework-agnostic — Vite + React, easy to embed anywhere
- Compact density — small icons, tight spacing (参考 qaworkspace)
- Workbench model — file tree, preview, agent chat, git status
- Shared packages —
@innate/ui,@innate/platformreused across apps - Theme provider — light/dark/system mode switching
- Simpler dependencies — Base UI is lighter than Radix
Weaknesses:
- No terminal — missing embedded terminal
- Static sidebar — no collapsible groups or nested navigation
- No content system — no tutorial/course auto-discovery
- No menu bar — less conventional desktop app feel
- Maintain both AppShells for their respective use cases
- Share Cargo target directory (already done)
- Consider extracting common Tauri commands to a shared Rust crate
- From innate-executable → Workbench: Terminal panel integration
- From Workbench → innate-executable: Theme provider, compact sizing
- Abstract layout primitives (sidebar, header, panel, status bar)
- Create pluggable layout system where terminal/courses/workbench are optional panels
- Unify
@innate/uipackages (migrate Radix → Base UI or vice versa)