singularity-forge/web/components/gsd
Tom Boucher 21f66058ad feat(web): add "Change project root" button to web UI (#2355)
Adds a visible control to change the devRoot directory from both the
project selection gate and the slide-out projects panel, so users no
longer need to hand-edit ~/.gsd/web-preferences.json.

- New /api/switch-root POST endpoint: validates path (exists, is dir),
  persists to web-preferences.json (clearing lastActiveProject), and
  returns discovered projects under the new root
- ProjectSelectionGate: shows current devRoot with "Change" link above
  the project list; also shows "Change project root" link when no
  projects are found under the current root
- ProjectsPanel: shows "Change" link next to the devRoot path in the
  slide-out header
- Both views use the existing FolderPickerDialog for directory browsing
- 17 tests covering path validation, preference persistence, tilde
  expansion, and end-to-end switch scenarios

Fixes #2264

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 07:18:05 -06:00
..
onboarding feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
activity-view.tsx feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
app-shell.tsx fix(web): persist auth token in sessionStorage to survive page refreshes (#1877) 2026-03-21 15:25:27 -06:00
chat-mode.tsx feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
code-editor.tsx feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
command-surface.tsx feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
dashboard.tsx feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
diagnostics-panels.tsx feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
dual-terminal.tsx feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
file-content-viewer.tsx feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
files-view.tsx feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
focused-panel.tsx feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
guided-dialog.tsx feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
knowledge-captures-panel.tsx feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
loading-skeletons.tsx feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
main-session-terminal.tsx feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
onboarding-gate.tsx feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
project-welcome.tsx feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
projects-view.tsx feat(web): add "Change project root" button to web UI (#2355) 2026-03-24 07:18:05 -06:00
remaining-command-panels.tsx feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
roadmap.tsx feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
scope-badge.tsx feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
settings-panels.tsx feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
shell-terminal.tsx feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
sidebar.tsx feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
status-bar.tsx feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
terminal.tsx feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
update-banner.tsx feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
visualizer-view.tsx feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00