Skip to content

feat: app shell — activity bar + primary sidebar panel switching #14

@andrewchumchal

Description

@andrewchumchal

Summary

Introduce the VS Code-style app shell as the new root layout. This is the structural foundation for Phase 2 — all other workspace model features (tabs, command palette, status bar, bottom panel) are built on top of it.

Current layout

┌──────────────┬────────────────────────┐
│   Sidebar    │      Chat area         │
│ (always open)│                        │
└──────────────┴────────────────────────┘

Target layout

┌───┬──────────────┬────────────────────┐
│ A │   Primary    │    Chat area       │
│ c │   Sidebar    │                    │
│ t │   (panel     │                    │
│ . │   switches)  │                    │
│ B │              │                    │
│ a │              ├────────────────────┤
│ r │              │  Bottom panel      │
├───┴──────────────┴────────────────────┤
│              Status bar               │
└───────────────────────────────────────┘

Scope

AppShell component

  • New root layout component replacing the current top-level layout
  • Manages the three-region structure: activity bar | primary sidebar | main area
  • Sidebar collapse/expand preserved

Activity bar

  • Narrow left icon strip (VS Code style)
  • Icons: Chats, Personas, MCP, Settings
  • Active icon highlighted; clicking switches the primary sidebar panel
  • Clicking the active icon again collapses the sidebar (toggle behaviour)
  • Uses brand colours and existing icon set

Primary sidebar panel switching

  • Each activity bar icon maps to a panel:
    • Chats → current conversation list (existing Sidebar content)
    • Personas → persona list (existing SettingsPanel personas section, extracted)
    • MCP → MCP server list (existing SettingsPanel MCP section, extracted)
    • Settings → general settings (existing SettingsPanel general section)
  • Panel state persisted in uiStore

uiStore changes

  • activePanel: 'chats' | 'personas' | 'mcp' | 'settings'
  • sidebarOpen: boolean

Acceptance criteria

  • Activity bar renders on the far left with four icons
  • Clicking each icon switches the primary sidebar panel
  • Clicking the active icon collapses/expands the sidebar
  • Panel selection survives app restart (persisted in uiStore)
  • macOS traffic light clearance maintained (existing pl-[80px] logic)
  • Existing functionality (conversation list, settings, MCP, personas) is preserved — just reorganised

Prerequisites

  • None (this is the foundation)

Unlocks

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions