singularity-forge/web/app/api
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
..
boot fix: resolve Node v24 web boot failure — ERR_UNSUPPORTED_NODE_MODULES_TYPE_STRIPPING (#1864) 2026-03-21 15:24:07 -06:00
bridge-terminal feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
browse-directories feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
captures feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
cleanup feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
dev-mode feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
doctor feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
export-data feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
files feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
forensics feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
git feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
history feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
hooks feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
inspect feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
knowledge feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
live-state feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
onboarding feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
preferences feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
projects feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
recovery feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
remote-questions feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
session feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
settings-data feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
shutdown feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
skill-health feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
steer feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
switch-root feat(web): add "Change project root" button to web UI (#2355) 2026-03-24 07:18:05 -06:00
terminal feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
undo feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
update feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
visualizer feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00