Skip to content

feat(workspaces): prototype the panel components on the UI tree - #1077

Draft
EhabY wants to merge 3 commits into
feat/ui-tree-suitefrom
feat/devex-621-workspaces-panel-mvp
Draft

feat(workspaces): prototype the panel components on the UI tree#1077
EhabY wants to merge 3 commits into
feat/ui-tree-suitefrom
feat/devex-621-workspaces-panel-mvp

Conversation

@EhabY

@EhabY EhabY commented Aug 13, 2026

Copy link
Copy Markdown
Collaborator

Prototype for DEVEX-621 on top of the Tree suite (#1065): the Workspaces panel rendered in the experimental coder.workspacesPanel test webview with mock data, so the row/panel components can be exercised before the real IPC wiring lands.

What's in the MVP

  • WorkspacesPanel — toolbar + tree + state panels; owns the filter/search state. No IPC yet.
  • WorkspaceFilterSelect — Mine / All / Shared radio menu on a secondary Button; Shared gated by isOwner.
  • Workspace and agent rows as rich Tree labels with status StatusPills and hover-revealed inline actions (open/dashboard/settings; terminal/logs).
  • Inline App Statuses and Agent Metadata sections under agents; metadata values carry a collected-at Tooltip.
  • Live-filter SearchInput, plus LoadingState / ErrorState / EmptyState branches.
  • Mock data lives in mockData.ts (local fixtures; @repo/mocks is lint-restricted from runtime code).

Notes

  • @repo/ui becomes a webview dependency — this webview is its first production bundler. The shared Vite config aliases its TypeScript source and #cx/#codicons subpath imports; index.css imports the UI codicon stylesheet and tokens (theme-matched via --vscode-*).
  • Intentionally out of scope: useWorkspaceData/IPC, Storybook stories, welcome/auth states, keyboard-nav acceptance tests — all belong to the full DEVEX-621 implementation.

Validation

  • pnpm typecheck, pnpm lint, pnpm format:check
  • pnpm build (all webviews + extension)
  • pnpm test:webview — 46 files, 388 tests passed (incl. new WorkspacesPanel.test.tsx)
  • pnpm test:extension — 119 files, 2098 tests passed
Implementation plan

Decisions (confirmed)

  • Base branch: feat/ui-tree-suite (PR feat(ui): add accessible VS Code-parity Tree #1065).
  • Target: packages/workspaces (coder.workspacesPanel), whose App.tsx was a TODO placeholder.
  • Scope: tree + toolbar + rows + minimal loading/error/empty states.
  • Draft PR on top of feat/ui-tree-suite.

Changes

Wiring

  • packages/workspaces: add @repo/ui dependency; add @repo/ui tsconfig path; index.css imports codicon/tokens CSS; index.tsx wraps in TooltipProvider.
  • packages/webview-shared/createWebviewConfig.ts: alias @repo/ui source and its package-internal subpath imports for bundlers.
  • vitest.config.mts + test/tsconfig.json: @repo/workspaces path for tests.

Prototype components (packages/workspaces/src/)

  • mockData.ts — local SDK-typed fixtures (own/shared/other-owner workspaces, agents with apps/statuses/metadata).
  • WorkspacesPanel.tsx — top level; filter/search state, mock→TreeNode[] mapping, toolbar + Tree (sticky scroll) + state panels.
  • WorkspaceFilterSelect.tsx — Mine / All / Shared radio menu.
  • rows.tsxworkspaceNode / agentNode / appStatusSection / metadataSection builders with rich labels, pills, and hover actions.
  • WorkspacesPanel.css — toolbar/tree layout.

Tests

  • test/webview/workspaces/WorkspacesPanel.test.tsx — tree rendering, filter select, live search, empty/loading/error states, inline sections, hover actions.

Not in scope (MVP)

  • Real IPC / useWorkspaceData / handler wiring.
  • Storybook stories, pixel snapshots, keyboard-nav acceptance tests.
  • Welcome/auth states, real command execution behind inline actions.

This pull request was created by Coder Agents on behalf of @EhabY.

MVP for DEVEX-621: render the Workspaces panel in the experimental
coder.workspacesPanel webview using the @repo/ui Tree from #1065 so the
row and panel components can be exercised with mock data before the real
IPC wiring lands.

- WorkspacesPanel with SearchInput live filtering and the Mine / All /
  Shared WorkspaceFilterSelect (Shared gated by isOwner)
- Workspace and agent rows as rich Tree labels with status pills and
  hover-revealed inline actions
- Inline App Statuses and Agent Metadata sections under agents, with a
  collected-at tooltip on metadata values
- Loading / error / empty state panels over the mock data
- @repo/ui becomes a webview dependency; the shared Vite config aliases
  its TypeScript source and package-internal subpath imports

This pull request description was generated by Coder Agents.
@linear-code

linear-code Bot commented Aug 13, 2026

Copy link
Copy Markdown

DEVEX-621

EhabY added 2 commits August 13, 2026 15:46
Keep the native My/Shared/All Workspaces views registered so both
implementations stay visible side by side while the prototype is tested.
… matches

- Row labels are flex rows; each child shrank and truncated on its own,
  splitting the ellipsis across words. Only the name span truncates now;
  owner text and pills keep their natural width.
- Search now marks the first case-insensitive match in workspace and
  agent names, mirroring the native views' highlight.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant