singularity-forge/web
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
..
app feat(web): add "Change project root" button to web UI (#2355) 2026-03-24 07:18:05 -06:00
components feat(web): add "Change project root" button to web UI (#2355) 2026-03-24 07:18:05 -06:00
hooks feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
lib fix(web): persist auth token in sessionStorage to survive page refreshes (#1877) 2026-03-21 15:25:27 -06:00
public feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
styles feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
.gitignore feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
components.json feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
eslint.config.mjs feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
left-native-tui-main-session-plan.md feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
next-env.d.ts feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
next.config.mjs feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
package-lock.json feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
package.json feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
postcss.config.mjs feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
proxy.ts feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
tsconfig.json feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00