Add run-server.sh dev launcher for headless server
Details
Points at test-data/ by default (same DB as build.sh --run --with-plugins).
Use --live for the system data directory, --workspace to skip the picker.
Add interactive workspace picker to headless server
Details
When starting without --workspace, the server now:
- Single workspace: auto-selects it
- Multiple workspaces: shows an interactive numbered menu
- No workspaces: offers to create one
- Non-interactive (piped stdin): uses active workspace or errors
Also lists available workspace names when --workspace doesn't match.
Fix DI deadlock in headless server plugin discovery
Details
HeadlessPluginRegistry's constructor created PluginHostFactory eagerly,
which resolved IPluginRegistry from DI — causing a circular dependency
deadlock (DI was still constructing HeadlessPluginRegistry itself).
Fix: lazy-initialize PluginHostFactory on first use via a property.
Also switch HeadlessHost to call DiscoverAndInitializeAsync() directly
instead of the sync wrapper that used .GetAwaiter().GetResult(), and
wrap GetExportedTypes() in try-catch for ReflectionTypeLoadException
to handle assemblies with unresolvable type dependencies gracefully.
Fix "Add Project" button bypassing project picker UI
Details
The footer "Add Project" button and the "Load Projects" button in the
project picker shared the same OpenAddProjectCommand. When clicked from
the footer, ProjectOwner was empty, so it set an error message and
returned without ever transitioning to the project picker state — the
user never saw the TextBox to enter an owner name.
Split into two commands:
- ShowAddProjectCommand (footer): shows the project picker UI
- LoadProjectsCommand (State 3): validates owner and fetches projects
Get notified about new releases