You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Add desktop-only Space Tabs so users can work in multiple Spaces without replacing the current Space's canvas, conversation or preview state. Each window continues to use one Server and one active Workspace; browser deployments retain the existing single-page experience.
Introduce an Electron shell with persistent Home and independent, sandboxed WebContentsViews for Spaces, immutable renderer identities, deduplicated navigation and lazy session restoration.
Keep the Tab strip minimal: icon-only Home, neutral Space titles and close controls, and persistent Settings/Workspace actions. Reuse the existing Home setup page for opening Workspaces.
Isolate Space storage and Chromium connection pools to avoid cross-Space state overwrites and SSE connection starvation; synchronize application preferences across partitions.
Coordinate acknowledged saves before Tab close, reload, Workspace changes, window close, application quit and update installation. Save failures retain usable pages instead of discarding them.
Route native menus, updater state and remote Basic Auth through the multi-view architecture; update the architecture documentation.
Independent review fixes included
Repeated quit/window-close requests share the same save preparation and cannot bypass pending saves, regardless of which action starts first.
Workspace restoration uses Server-confirmed identity, not stale client state after a successful activation followed by a failed query. An unconfirmed identity restores no Space pages; registration during a Workspace transition is rejected rather than queued.
A synchronous renderer input freeze covers global Canvas shortcuts, native commands and portalled controls until resume or destruction, including after an individual save acknowledgement.
Retained Home refreshes after Space creation/import and reactivation; request-generation and Workspace-identity checks prevent stale list responses.
Desktop unit suite: 75 tests passed, 1 existing todo
Real Electron integration: five concurrent Spaces, draft/document/selection/viewport isolation and retention, undo/redo, preference synchronization, failed and delayed saves, both quit-first and close-first shutdown sequences, frozen shortcuts/portals, retained Home creation/list refresh, lazy restart restoration, Workspace menu/setup routing and Workspace switching
Formatting and git diff --check
Boundaries / remaining validation
One active Workspace per window; no split views, detached Tabs or automatic Tab suspension.
Unsent drafts and in-memory undo/selection survive Tab switching, not page destruction or application restart.
Closing a Tab does not send Agent Stop; quitting a local application still shuts down its Server.
Windows real-device behavior, actual update installer execution and background Agent execution with a configured model remain unverified.
Add retained per-Space content views, workspace-aware session restoration, isolated storage and synchronized preferences. Coordinate save acknowledgements across tab/window/quit/update lifecycles and retain the minimal desktop tab and workspace navigation UI.
Include regression coverage for repeated shutdown requests, authoritative Workspace recovery, renderer input freezing and retained Home refreshes.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Preserve save ownership during competing quits, recover shutdown from unavailable pages, avoid preference echo loops, and retain keyboard Tab focus. Add unit and real Electron regressions.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Shutdown can explicitly discard unavailable pages after saving healthy pages; cancellation keeps the application open. Workspace changes remain strict.
A rejected competing quit no longer releases another operation's save barrier.
Incoming World and language preference updates hydrate local state without invoking the outbound writer; explicit Settings language selections still persist.
Keyboard Tab activation requests Shell-native focus and restores the selected button after IPC acknowledgement. Ordinary clicks still focus content.
Validation: 80 desktop tests passed (1 existing TODO), 118 focused web tests passed, repository typecheck/format/lint passed, and expanded isolated real-Electron smoke passed (competing quit ownership, rapid preference writes with exact outbound counts, continuous keyboard navigation, crashed Home shutdown cancellation/confirmation). Native OS-focus assertions were explicitly skipped because this automation environment did not activate any fixture window; native focus invocation is covered by unit tests. Architecture documentation updated. Please re-review the new commit.
Expose workspace save-barrier failures in the Store error
apps/web/src/store/workspaceStore.ts:172
[P2] Publish save-barrier failures in the Workspace Store. This await is outside the error-handling block, so a rejected save leaves the Store's error unchanged. WorkspaceSetupPage catches activation rejections and relies on that error for feedback (lines 112–136 and 201–207). When a background Space cannot save, selecting a Workspace from /setup therefore fails without showing the reason there. Record the barrier error before rethrowing, while retaining the current Workspace identity.
Ignore stale preference notifications after newer local writes
apps/web/src/utils/desktopStorage.ts:58
[P2] Ignore preference notifications older than an acknowledged local write. If A's zh-CN notification is queued while B synchronously commits en, this listener later replaces B's newer local value with zh-CN. Main remains on en; DesktopTabs.setPreference excludes the writer from broadcasts, so B receives no corrective update. This can leave language or input-mode settings inconsistent across Spaces. Include per-key revisions in snapshots, write acknowledgements and notifications, and ignore older revisions. Add a regression test that delivers A's notification after B's write succeeds.
🧠 Review effort: Balanced
This branch has not been deployed
No deployments
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Add desktop-only Space Tabs so users can work in multiple Spaces without replacing the current Space's canvas, conversation or preview state. Each window continues to use one Server and one active Workspace; browser deployments retain the existing single-page experience.
Independent review fixes included
Validation
pnpm typecheckpnpm formatpnpm lint:fix(0 errors; existing warnings remain)git diff --checkBoundaries / remaining validation
Architecture reference: Desktop Space Tabs.