Break assistant text into stable blocks so streaming stays responsive and tool-created files surface as openable transcript cards instead of getting buried in prose.
Break the Den DB schema into domain entrypoints and switch EE package builds to tsup so workspace development can resolve TypeScript sources directly without typeid proxy shims.
Co-authored-by: src-opn <src-opn@users.noreply.github.com>
* refactor(workspace): keep selection separate from activation
* refactor(session): create tasks in an explicit workspace
* refactor(session): address runtime actions by workspace
The server compares session.directory with strict equality, but call sites
could silently pick the wrong path formatter (normalizeDirectoryQueryPath
vs toSessionTransportDirectory) — producing forward-slash paths on Windows
where the server stores native backslashes.
Changes:
- Add TransportDirectory branded type so the compiler rejects raw strings
where a transport-formatted directory is expected.
- Fix connections/store.ts: switch path discovery from normalizeDirectoryQueryPath
to toSessionTransportDirectory — this value feeds mcp.status/disconnect calls
that use the same exact-match semantics (latent Windows bug).
- Fix workspace.ts: remote directory discovery now goes through
toSessionTransportDirectory (caught by the branded type at compile time).
- Mark normalizeDirectoryQueryPath with JSDoc deprecation for server-query use.
- Add round-trip invariant and idempotency tests that assert create-path
equals list-path for both Unix and Windows directory formats.
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>