switchWorkspace calls applyWorkspaceSelection before activateWorkspace,
which sets projectDir to the new path. When activateWorkspace later
reads projectDir() to compute workspaceChanged, oldPath === newPath
and the engine-restart block is skipped.
Capture projectDir before any presentation update and thread it into
activateWorkspace via a prevProjectDir hint. Also fix the same race
in forgetWorkspace where setProjectDir runs before activateWorkspace.
Closes#1252
Thread actual workspace skill names and config files into the template
panel instead of showing theoretical placeholders. Replace the
hard-bordered status pills and kicker pills with soft background tokens
using the den-web color language.
Keep server-side share publish and fetch traffic on the configured OpenWork publisher so bundle links cannot steer host requests to arbitrary targets. Add a warning-backed client-side fallback for manual imports from untrusted bundle URLs.
Co-authored-by: src-opn <src-opn@users.noreply.github.com>
Remove client-provided router host and port overrides so OpenWork resolves OpenCodeRouter health and apply requests from trusted server-side config only.
Co-authored-by: src-opn <src-opn@users.noreply.github.com>
Align the legacy v1 bundle publish routes with the scoped Next API protections so older deployment paths stop accepting wildcard origins or host-derived share URLs.
Co-authored-by: src-opn <src-opn@users.noreply.github.com>
Keep session model behavior local to the active session instead of mutating workspace defaults, and persist session-specific reasoning overrides alongside session model state. This lets new sessions inherit workspace defaults without leaking session edits back into settings.
Unify bundle naming across share and team-template paths so the shell only wires the flow and workspace bundles describe their portable files consistently.
Render a shell-owned blank workspace chrome while onboarding bootstraps so the app does not flash interactive session controls before the real session surface is ready.