From 820467c029765b817e6ec223c9f03f2758c7a1f1 Mon Sep 17 00:00:00 2001 From: Hibryda Date: Sun, 8 Mar 2026 00:10:25 +0100 Subject: [PATCH] docs: update meta files for VSCode-style sidebar redesign session --- .claude/CLAUDE.md | 6 +-- CHANGELOG.md | 12 ++--- CLAUDE.md | 2 +- README.md | 2 +- TODO.md | 5 +- docs/v3-progress.md | 34 +++++++++++++ docs/v3-task_plan.md | 115 +++++++++++-------------------------------- 7 files changed, 76 insertions(+), 100 deletions(-) diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md index adf132c..f20da18 100644 --- a/.claude/CLAUDE.md +++ b/.claude/CLAUDE.md @@ -46,7 +46,7 @@ - Layout store persists to SQLite on every addPane/removePane/setPreset/setPaneGroup change (fire-and-forget). Restores on app startup via `restoreFromDb()`. - Session groups: Pane.group? field in layout store, group_name column in sessions table, collapsible group headers in sidebar. Right-click pane to set group. - File watcher uses notify crate v6, watches parent directory (NonRecursive), emits `file-changed` Tauri events. -- Settings use key-value `settings` table in SQLite (session.rs). Frontend: `settings-bridge.ts` adapter. v3 uses SettingsTab.svelte (v2 SettingsDialog.svelte deleted in P10). SettingsTab has two sections: Global (single-column layout, split into Appearance [theme dropdown, UI font dropdown with sans-serif options + size stepper, Terminal font dropdown with monospace options + size stepper] and Defaults [shell, CWD] — all custom themed dropdowns, no native ``, all persisted via settings-bridge with keys: theme, ui_font_family, ui_font_size, term_font_family, term_font_size, default_shell, default_cwd) and Group/Project CRUD. - Notifications use ephemeral toast system: `notifications.svelte.ts` store (max 5, 4s auto-dismiss), `ToastContainer.svelte` display. Agent dispatcher emits toasts on agent complete/error/crash. - StatusBar component shows active group name, project count, agent count, tokens, cost. Uses workspace store (v3 rewrite, no longer uses layout store). - Agent tree (AgentTree.svelte) uses SVG with recursive layout. Tree data built by `agent-tree.ts` utility from agent messages. @@ -65,8 +65,8 @@ - v3 workspace store (`workspace.svelte.ts`) replaces layout store for v3. Groups loaded from `~/.config/bterminal/groups.json` via `groups-bridge.ts`. State: groups, activeGroupId, activeTab, focusedProjectId. Derived: activeGroup, activeProjects. - v3 groups backend (`groups.rs`): load_groups(), save_groups(), default_groups(). Tauri commands: groups_load, groups_save. - v3 SQLite additions: agent_messages table (per-project message persistence), project_agent_state table (sdkSessionId, cost, status per project), sessions.project_id column. -- v3 App.svelte fully rewritten: no sidebar, no TilingGrid. Renders GlobalTabBar (3 tabs + gear icon) + tab content (Sessions/Docs/Context) + settings drawer (right-side overlay, 32em, semi-transparent backdrop, Escape/click-outside to close) + StatusBar. Settings is NOT a tab — it's a collapsible side drawer toggled by gear icon in GlobalTabBar or Ctrl+,. -- v3 component tree: App -> GlobalTabBar + ProjectGrid -> ProjectBox -> (ProjectHeader + ClaudeSession + TeamAgentsPanel + TerminalTabs). See `docs/v3-task_plan.md` for full tree. +- v3 App.svelte fully rewritten: VSCode-style sidebar layout. Horizontal: left icon rail (GlobalTabBar, 36px, 4 SVG icons) + expandable drawer panel (28em, max 50%, renders active tab content) + main workspace (ProjectGrid always visible) + StatusBar. Settings is a regular sidebar tab. Keyboard: Alt+1..4 (tabs), Ctrl+B (toggle sidebar), Ctrl+, (settings), Escape (close). +- v3 component tree: App -> GlobalTabBar (icon rail) + sidebar-panel? (drawer) + workspace (ProjectGrid) + StatusBar. See `docs/v3-task_plan.md` for full tree. - Svelte 5 event syntax: use `onclick` not `on:click`. Svelte 5 requires lowercase event handler attributes (no colon syntax). ## Memora Tags diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ca5a54..3aa760b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,12 +8,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ### Changed -- Settings converted from full-page tab to collapsible side drawer: right-side overlay (32em width, semi-transparent backdrop), close via Escape/click-outside/close button -- GlobalTabBar reduced from 4 tabs (Sessions/Docs/Context/Settings) to 3 tabs + gear icon toggle for settings drawer; gear icon highlights blue when active -- `WorkspaceTab` type reduced from `'sessions' | 'docs' | 'context' | 'settings'` to `'sessions' | 'docs' | 'context'` -- Keyboard shortcuts: Alt+1..3 for tabs (was Alt+1..4), Ctrl+, toggles settings drawer (was setActiveTab('settings')), Escape closes drawer -- SettingsTab styling adjusted for drawer context: reduced padding (12px 16px), removed max-width, flex:1 for scrollable content -- App.svelte wraps tab content + settings drawer in `.content-area` container with relative positioning for drawer overlay +- UI redesigned from top tab bar + right-side settings drawer to VSCode-style left sidebar: vertical icon rail (GlobalTabBar, 36px, 4 SVG icons) + expandable drawer panel (28em, max 50%) + always-visible main workspace (ProjectGrid) +- GlobalTabBar rewritten from horizontal text tabs + gear icon to vertical icon rail with SVG icons for Sessions, Docs, Context, Settings; Props: `expanded`/`ontoggle` (was `settingsOpen`/`ontoggleSettings`) +- Settings is now a regular sidebar tab (not a special right-side drawer); `WorkspaceTab` type: `'sessions' | 'docs' | 'context' | 'settings'` +- App.svelte layout: `.main-row` flex container with icon rail + optional sidebar panel + workspace; state renamed `settingsOpen` -> `drawerOpen` +- Keyboard shortcuts: Alt+1..4 (switch tabs + open drawer), Ctrl+B (toggle sidebar), Ctrl+, (toggle settings), Escape (close drawer) +- SettingsTab CSS: `height: 100%` (was `flex: 1`) for sidebar panel context ### Added - SettingsTab split font controls: separate UI font (sans-serif options: System Sans-Serif, Inter, Roboto, Open Sans, Lato, Noto Sans, Source Sans 3, IBM Plex Sans, Ubuntu) and Terminal font (monospace options: JetBrains Mono, Fira Code, Cascadia Code, Source Code Pro, IBM Plex Mono, Hack, Inconsolata, Ubuntu Mono, monospace), each with custom themed dropdown + size stepper (8-24px), font previews in own typeface diff --git a/CLAUDE.md b/CLAUDE.md index bd2a60d..230f438 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -2,7 +2,7 @@ ## Project Overview -Terminal emulator with SSH and Claude Code session management. v1 (GTK3+VTE Python) is production-stable. v2 redesign (Tauri 2.x + Svelte 5 + Claude Agent SDK) Phases 1-7 + multi-machine (A-D) + profiles/skills complete. Packaging: .deb + AppImage via GitHub Actions CI. v3 Mission Control (All Phases 1-10 Complete): multi-project dashboard with project groups, per-project Claude sessions with session continuity, team agents panel, terminal tabs, 3 workspace tabs + settings drawer, dead v2 component cleanup. +Terminal emulator with SSH and Claude Code session management. v1 (GTK3+VTE Python) is production-stable. v2 redesign (Tauri 2.x + Svelte 5 + Claude Agent SDK) Phases 1-7 + multi-machine (A-D) + profiles/skills complete. Packaging: .deb + AppImage via GitHub Actions CI. v3 Mission Control (All Phases 1-10 Complete + Sidebar Redesign): multi-project dashboard with project groups, per-project Claude sessions with session continuity, team agents panel, terminal tabs, VSCode-style left sidebar (icon rail + expandable drawer + always-visible workspace), dead v2 component cleanup. - **Repository:** github.com/DexterFromLab/BTerminal - **License:** MIT diff --git a/README.md b/README.md index 07914f1..bf8a00a 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Terminal with session panel (MobaXterm-style), built with GTK 3 + VTE. Catppuccin Mocha theme. -> **v2 complete, v3 all phases complete.** v2: Multi-session Claude agent dashboard using Tauri 2.x + Svelte 5. v3: Multi-project mission control dashboard (All Phases 1-10 complete) -- project groups with per-project Claude sessions, session continuity (persist/restore agent messages), team agents panel, terminal tabs, 3 workspace tabs (Sessions/Docs/Context) + settings drawer, command palette with group switching. Features: **project groups** (up to 5 projects per group, horizontal layout, adaptive viewport count), **per-project Claude sessions** with session continuity, **team agents panel** (compact subagent cards), **terminal tabs** (shell/SSH/agent per project), agent panes with structured output, tree visualization with subtree cost and session resume, **subagent/agent-teams support**, **multi-machine support** (bterminal-relay WebSocket server + RemoteManager), **Claude profile/account switching** (switcher-claude integration), **skill discovery and autocomplete** (type `/` in agent prompt), SSH session management, ctx context database viewer, SQLite session persistence with layout restore, live markdown file viewer with Shiki syntax highlighting, 17 themes in 3 groups (4 Catppuccin + 7 Editor + 6 Deep Dark: Tokyo Night, Gruvbox Dark, Ayu Dark, Poimandres, Vesper, Midnight), **global font controls** (separate UI font [sans-serif] + terminal font [monospace] with live preview), .deb + AppImage packaging, GitHub Actions CI, 138 vitest + 36 cargo tests. Branch `v2-mission-control`. See [docs/v3-task_plan.md](docs/v3-task_plan.md) for v3 architecture. +> **v2 complete, v3 all phases complete.** v2: Multi-session Claude agent dashboard using Tauri 2.x + Svelte 5. v3: Multi-project mission control dashboard (All Phases 1-10 complete + sidebar redesign) -- project groups with per-project Claude sessions, session continuity (persist/restore agent messages), team agents panel, terminal tabs, **VSCode-style left sidebar** (vertical icon rail + expandable drawer panel + always-visible workspace), command palette with group switching. Features: **project groups** (up to 5 projects per group, horizontal layout, adaptive viewport count), **per-project Claude sessions** with session continuity, **team agents panel** (compact subagent cards), **terminal tabs** (shell/SSH/agent per project), agent panes with structured output, tree visualization with subtree cost and session resume, **subagent/agent-teams support**, **multi-machine support** (bterminal-relay WebSocket server + RemoteManager), **Claude profile/account switching** (switcher-claude integration), **skill discovery and autocomplete** (type `/` in agent prompt), SSH session management, ctx context database viewer, SQLite session persistence with layout restore, live markdown file viewer with Shiki syntax highlighting, 17 themes in 3 groups (4 Catppuccin + 7 Editor + 6 Deep Dark: Tokyo Night, Gruvbox Dark, Ayu Dark, Poimandres, Vesper, Midnight), **global font controls** (separate UI font [sans-serif] + terminal font [monospace] with live preview), .deb + AppImage packaging, GitHub Actions CI, 138 vitest + 36 cargo tests. Branch `v2-mission-control`. See [docs/v3-task_plan.md](docs/v3-task_plan.md) for v3 architecture. ![BTerminal](screenshot.png) diff --git a/TODO.md b/TODO.md index 98f601c..6cdb97f 100644 --- a/TODO.md +++ b/TODO.md @@ -10,7 +10,8 @@ ## Completed -- [x] **Settings drawer conversion** -- Converted Settings from full-page tab to collapsible side drawer (right side, 32em width, semi-transparent backdrop). GlobalTabBar now 3 tabs + gear icon toggle. WorkspaceTab type: 'sessions' | 'docs' | 'context'. Alt+1..3 for tabs, Ctrl+, toggles drawer, Escape closes. | Done: 2026-03-07 +- [x] **VSCode-style sidebar redesign** -- Redesigned UI from top tab bar + right-side settings drawer to VSCode-style left sidebar: vertical icon rail (36px, 4 SVG icons) + expandable drawer panel (28em) + always-visible workspace. Settings is regular tab. Ctrl+B toggles sidebar. | Done: 2026-03-08 +- [x] **Settings drawer conversion** -- Converted Settings from full-page tab to collapsible side drawer (superseded by sidebar redesign 2026-03-08). | Done: 2026-03-07 - [x] **SettingsTab global settings redesign** -- Split font into UI font (sans-serif options) + Terminal font (monospace options), each with custom dropdown + size stepper. Single-column layout with Appearance/Defaults subsections. All custom themed dropdowns (no native select). New CSS vars: --term-font-family, --term-font-size. Setting keys: ui_font_family, ui_font_size, term_font_family, term_font_size. | Done: 2026-03-07 - [x] **Global font controls** -- Font family select (9 monospace fonts) + font size +/- stepper (8-24px) in SettingsTab. Live preview via CSS vars, persisted to SQLite. initTheme() restores on startup. | Done: 2026-03-07 - [x] **Deep Dark theme group** -- 6 new themes (Tokyo Night, Gruvbox Dark, Ayu Dark, Poimandres, Vesper, Midnight). Total: 17 themes in 3 groups. | Done: 2026-03-07 @@ -19,5 +20,3 @@ - [x] **v3 Phases 6-10 Complete** -- Session continuity (persist/restore agent messages), workspace teardown on group switch, dead v2 component removal (~1,836 lines), StatusBar rewrite, subagent routing fix. | Done: 2026-03-07 - [x] **v3 Mission Control MVP (Phases 1-5)** -- Data model + groups.rs + workspace store + 12 Workspace components + App.svelte rewrite + ClaudeSession + TerminalTabs + TeamAgentsPanel. 138 vitest + 36 cargo tests. | Done: 2026-03-07 - [x] **v3 Architecture planning** -- Adversarial review (3 agents, 12 issues resolved), final architecture in docs/v3-task_plan.md. | Done: 2026-03-07 -- [x] **Claude profiles & skill discovery** -- switcher-claude integration, skill autocomplete, extended AgentQueryOptions. | Done: 2026-03-07 -- [x] **Claude CLI path auto-detection** -- findClaudeCli() + pathToClaudeCodeExecutable. | Done: 2026-03-07 diff --git a/docs/v3-progress.md b/docs/v3-progress.md index 4920a45..0a7560b 100644 --- a/docs/v3-progress.md +++ b/docs/v3-progress.md @@ -215,6 +215,40 @@ All editor themes map to the same `--ctp-*` CSS custom property names (26 vars). #### Verification - All 138 vitest tests pass +### Session: 2026-03-08 — VSCode-Style Sidebar Redesign + +#### UI Layout Redesign (Top Tab Bar -> Left Sidebar) +- [x] Redesigned GlobalTabBar.svelte from horizontal tab bar to vertical icon rail (36px wide) + - 4 SVG icon buttons: Sessions (grid), Docs (document), Context (clock), Settings (gear) + - Each button uses SVG path from `icons` record mapped by WorkspaceTab + - Props renamed: `settingsOpen` -> `expanded`, `ontoggleSettings` -> `ontoggle` + - `handleTabClick()` manages toggle: clicking active tab collapses drawer +- [x] Rewrote App.svelte layout from vertical (top tab bar + content area + settings drawer) to horizontal (icon rail + sidebar panel + workspace) + - `.main-row` flex container: GlobalTabBar | sidebar-panel (28em, max 50%) | workspace + - ProjectGrid always visible in main workspace (not inside tab content) + - Sidebar panel renders active tab content (Sessions/Docs/Context/Settings) + - Panel header with title + close button + - Removed backdrop overlay, drawer is inline sidebar not overlay +- [x] Re-added 'settings' to WorkspaceTab union type (was removed when settings was a drawer) +- [x] SettingsTab CSS: changed `flex: 1` to `height: 100%` for sidebar panel context +- [x] Updated keyboard shortcuts: + - Alt+1..4 (was Alt+1..3): switch tabs + open drawer, toggle if same tab + - Ctrl+B (new): toggle sidebar open/closed + - Ctrl+, : open settings panel (toggle if already active) + - Escape: close drawer +- [x] State variables renamed: `settingsOpen` -> `drawerOpen`, `toggleSettings()` -> `toggleDrawer()` +- [x] Added `panelTitles` record for drawer header labels + +#### Design Decisions +- VSCode-style sidebar chosen for: always-visible workspace, progressive disclosure, familiar UX +- Settings as regular tab (not special drawer) simplifies code and mental model +- Icon rail at 36px minimizes horizontal space cost +- No backdrop overlay — sidebar is inline, not modal + +#### Verification +- All 138 vitest tests pass +- svelte-check clean (only 2 third-party esrap warnings) + ### Session: 2026-03-07 — SettingsTab Global Settings Redesign #### Font Settings Split (UI Font + Terminal Font) diff --git a/docs/v3-task_plan.md b/docs/v3-task_plan.md index 77f5d28..3f64b90 100644 --- a/docs/v3-task_plan.md +++ b/docs/v3-task_plan.md @@ -4,7 +4,7 @@ Transform BTerminal from a multi-pane terminal/agent tool into a **multi-project mission control** — a helm for managing multiple development projects simultaneously, each with its own Claude agent session, team agents, terminals, and settings. -## Status: All Phases Complete (1-10) — Rev 2 +## Status: All Phases Complete (1-10) — Rev 3 (Sidebar Redesign) --- @@ -27,7 +27,7 @@ BTerminal v3: Project orchestration dashboard (projects in a workspace) 4. Per-project settings: Claude subscription, working dir, icon (nerd font), name, identifier, description, enabled 5. Project group = workspace on screen 6. Each project box: Claude session (default, resume previous) + team agents (right) + terminal tabs (below) -7. **3 workspace tabs + settings drawer**: Sessions | Docs | Context tabs, settings as collapsible side drawer (gear icon toggle) +7. **VSCode-style left sidebar**: Vertical icon rail (Sessions/Docs/Context/Settings) + expandable drawer panel + always-visible workspace 8. App launchable with `--group ` CLI arg 9. JSON config file defines all groups (`~/.config/bterminal/groups.json`) 10. Session continuity: resume previous + restore history visually @@ -156,10 +156,15 @@ CREATE TABLE IF NOT EXISTS project_agent_state ( ### Component Tree ``` -App.svelte [REWRITTEN] +App.svelte [REWRITTEN — VSCode-style sidebar] ├── CommandPalette.svelte [NEW] -├── GlobalTabBar.svelte [NEW] Sessions | Docs | Context + gear icon -├── [Tab: Sessions] +├── GlobalTabBar.svelte [NEW] Vertical icon rail (36px, 4 SVG icons) +├── [Sidebar Panel] Expandable drawer (28em, max 50%) +│ ├── [Tab: Sessions] ProjectGrid [renders in sidebar when open] +│ ├── [Tab: Docs] DocsTab +│ ├── [Tab: Context] ContextPane +│ └── [Tab: Settings] SettingsTab +├── [Main Workspace] Always visible │ └── ProjectGrid.svelte [NEW] Horizontal flex + scroll-snap │ └── ProjectBox.svelte [NEW] Per-project container │ ├── ProjectHeader.svelte [NEW] Icon + name + status dot @@ -167,18 +172,7 @@ App.svelte [REWRITTEN] │ ├── TeamAgentsPanel.svelte [NEW] Right panel for subagents │ │ └── AgentCard.svelte [NEW] Compact subagent view │ └── TerminalTabs.svelte [NEW] Tabbed terminals -│ ├── TabBar.svelte [NEW] │ └── TerminalPane.svelte [SURVIVES] -├── [Tab: Docs] -│ └── DocsTab.svelte [NEW] -│ ├── MdFilePicker.svelte [NEW] -│ └── MarkdownPane.svelte [SURVIVES] -├── [Tab: Context] -│ └── ContextPane.svelte [SURVIVES, extracted from pane] -├── [Drawer: Settings] Collapsible side drawer (right, 32em) -│ └── SettingsTab.svelte [NEW] -│ ├── ProjectSettingsEditor.svelte [NEW] -│ └── GlobalSettings.svelte [NEW] ├── StatusBar.svelte [MODIFIED] └── ToastContainer.svelte [SURVIVES] ``` @@ -291,85 +285,34 @@ No sidecar changes needed for v3.0. | Ctrl+K | Command palette | App | | Ctrl+G | Switch group (palette filtered) | App | | Ctrl+1..5 | Focus project by index | App | -| Alt+1..3 | Switch workspace tab | App | +| Alt+1..4 | Switch sidebar tab + open drawer | App | +| Ctrl+B | Toggle sidebar open/closed | App | +| Ctrl+, | Toggle settings panel | App | +| Escape | Close sidebar drawer | App | | Ctrl+N | New terminal in focused project | Workspace | | Ctrl+Shift+N | New agent query | Workspace | | Ctrl+Tab | Next terminal tab | Project | | Ctrl+W | Close terminal tab | Project | -| Ctrl+, | Toggle settings drawer | App | -| Escape | Close settings drawer | App | | Ctrl+Shift+C/V | Copy/paste in terminal | Terminal | --- ## Implementation Phases -### Phase 1: Data Model + Config [status: complete] -**Milestone: Groups config loads/saves, SQLite migrations pass, workspace store works** +All 10 phases complete. Detailed checklists in [v3-progress.md](v3-progress.md). -- [x] Create `v2/src/lib/types/groups.ts` (TypeScript interfaces) -- [x] Create `v2/src-tauri/src/groups.rs` (Rust structs + load/save) -- [x] Add `groups_load`, `groups_save` Tauri commands to lib.rs -- [x] SQLite migrations in session.rs: project_id column, agent_messages table, project_agent_state table -- [x] Create `v2/src/lib/adapters/groups-bridge.ts` (IPC wrapper) -- [x] Create `v2/src/lib/stores/workspace.svelte.ts` (replaces layout.svelte.ts) -- [x] Add `--group` CLI argument parsing in main.rs -- [x] Write tests for groups load/save and workspace store (24 vitest + 7 cargo) - -### Phase 2: Project Box Shell [status: complete] -**Milestone: Project boxes render horizontally with headers, workspace tabs switch** - -- [x] Create GlobalTabBar.svelte (Sessions | Docs | Context + gear icon) -- [x] Create ProjectGrid.svelte (flex + scroll-snap container) -- [x] Create ProjectBox.svelte (CSS grid: header | session-area | terminal-area) -- [x] Create ProjectHeader.svelte (icon + name + status dot + accent color) -- [x] Rewrite App.svelte (GlobalTabBar + tab content + StatusBar) -- [x] Create CommandPalette.svelte, DocsTab.svelte, ContextTab.svelte, SettingsTab.svelte -- [x] CSS for responsive project count + accent colors - -### Phase 3: Claude Session Integration [status: complete] -**Milestone: Claude sessions run within project boxes, per-project profile isolation** - -- [x] Create ClaudeSession.svelte (wraps AgentPane, passes project cwd/profile/config_dir) - -### Phase 4: Terminal Tabs [status: complete] -**Milestone: Each project has tabbed terminals with xterm budget enforcement** - -- [x] Create TerminalTabs.svelte (tab state per project, shell/SSH/agent tab types) - -### Phase 5: Team Agents Panel [status: complete] -**Milestone: Subagents appear in right panel, not separate panes. MVP complete.** - -- [x] Create TeamAgentsPanel.svelte (right side of session area) -- [x] Create AgentCard.svelte (compact subagent: status, messages, cost) - -### --- MVP BOUNDARY --- - -### Phase 6: Session Continuity [status: complete] -- [x] Persist agent messages to SQLite on session complete (agent-dispatcher persistSessionForProject) -- [x] Persist sdkSessionId in project_agent_state -- [x] On startup, load cached messages per project (ClaudeSession restoreMessagesFromRecords) -- [x] Session-project mapping via registerSessionProject() - -### Phase 7: Command Palette + Group Switching [status: complete] -- [x] CommandPalette.svelte (overlay, Ctrl+K, fuzzy search) -- [x] Group list with switching -- [x] Workspace teardown on switch (clearAllAgentSessions + terminal tabs reset) - -### Phase 8: Docs Tab [status: complete] -- [x] DocsTab.svelte with split layout (file picker + MarkdownPane) -- [x] Auto-discovers markdown files per project via discoverMarkdownFiles - -### Phase 9: Settings Tab [status: complete] -- [x] SettingsTab.svelte (group CRUD + project CRUD) -- [x] 5-project limit enforcement - -### Phase 10: Polish + Cleanup [status: complete] -- [x] Remove dead v2 components (TilingGrid, PaneContainer, PaneHeader, SessionList, SshSessionList, SshDialog, SettingsDialog) -- [x] Remove empty directories (Layout/, Sidebar/, Settings/, SSH/) -- [x] Rewrite StatusBar for workspace store -- [x] Fix subagent routing (skip layout pane for project-scoped agents) -- [x] All 138 vitest + cargo tests pass, vite build succeeds +| Phase | Scope | Status | +|-------|-------|--------| +| 1 | Data Model + Config (groups.rs, workspace store, SQLite migrations) | Complete | +| 2 | Project Box Shell (GlobalTabBar, ProjectGrid/Box/Header, App.svelte, sidebar redesign 2026-03-08) | Complete | +| 3 | Claude Session Integration (ClaudeSession.svelte wraps AgentPane) | Complete | +| 4 | Terminal Tabs (TerminalTabs.svelte, per-project tabbed terminals) | Complete | +| 5 | Team Agents Panel (TeamAgentsPanel, AgentCard) — **MVP boundary** | Complete | +| 6 | Session Continuity (persist/restore agent messages, sdkSessionId) | Complete | +| 7 | Command Palette + Group Switching (workspace teardown) | Complete | +| 8 | Docs Tab (DocsTab.svelte, markdown discovery) | Complete | +| 9 | Settings Tab (group/project CRUD, 5-project limit) | Complete | +| 10 | Polish + Cleanup (dead v2 components removed, StatusBar rewrite) | Complete | --- @@ -383,14 +326,14 @@ No sidecar changes needed for v3.0. | xterm budget: 4 active, unlimited suspended | WebKit2GTK OOM at ~5 instances. Serialize scrollback to text buffer, destroy xterm, recreate on focus. PTY stays alive. | 2026-03-07 | | Flexbox + scroll-snap over CSS Grid | Allows horizontal scroll on narrow screens. Scroll-snap gives clean project-to-project scrolling. | 2026-03-07 | | Team panel: inline >2560px, overlay <2560px | Adapts to available space. Collapsed when no subagents running. | 2026-03-07 | -| 3 workspace tabs + settings drawer | Sessions/Docs/Context as tabs, Settings as collapsible side drawer (32em, gear icon toggle, Escape/click-outside to close). Keeps tab bar clean, settings always accessible without losing tab context. | 2026-03-07 | +| VSCode-style left sidebar (replaces top tab bar + settings drawer) | Vertical icon rail (36px, 4 SVG icons) + expandable drawer panel (28em, max 50%) + always-visible workspace. Settings is a regular tab, not special drawer. ProjectGrid always visible. Ctrl+B toggles sidebar. | 2026-03-08 | | Project accent colors from Catppuccin palette | Visual distinction: blue/green/mauve/peach/pink per slot 1-5. Applied to border + header tint. | 2026-03-07 | | Remote machines deferred to v3.1 | Elevate to project level (project.remote_machine_id) but don't implement in MVP. | 2026-03-07 | | Keyboard shortcut layers: App > Workspace > Terminal | Prevents conflicts. Terminal captures raw keys only when focused. App layer uses Ctrl+K/G. | 2026-03-07 | | AgentPane splits into ClaudeSession + TeamAgentsPanel | Team agents shown inline in right panel, not as separate panes. Saves xterm/pane slots. | 2026-03-07 | | Unmount/remount on group switch | Serialize xterm scrollbacks, destroy, remount new group. <100ms perceived. Frees ~80MB. | 2026-03-07 | | All themes map to --ctp-* CSS vars | 17 themes in 3 groups: 4 Catppuccin + 7 Editor (VSCode Dark+, Atom One Dark, Monokai, Dracula, Nord, Solarized Dark, GitHub Dark) + 6 Deep Dark (Tokyo Night, Gruvbox Dark, Ayu Dark, Poimandres, Vesper, Midnight). All map to same 26 --ctp-* CSS custom properties — zero component changes needed. | 2026-03-07 | -| Typography via CSS custom properties | --ui-font-family and --ui-font-size defined in catppuccin.css :root, consumed by app.css body rule. Overridden at runtime by SettingsTab controls. Restored by initTheme() on startup. Persisted as font_family/font_size SQLite settings. | 2026-03-07 | +| Typography via CSS custom properties | --ui-font-family/--ui-font-size + --term-font-family/--term-font-size in catppuccin.css :root. Restored by initTheme() on startup. Persisted as ui_font_family/ui_font_size/term_font_family/term_font_size SQLite settings. | 2026-03-07 | ## Errors Encountered