Repository navigation
feat(desktop): open projects in separate windows - #55
Merged
Merged
Conversation
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
alexcstark
added a commit
that referenced
this pull request
Oct 11, 2026
* feat(desktop): open projects in separate windows * refactor(desktop): make renderer activation registration synchronous * docs: describe opening projects in separate desktop windows
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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
The desktop app was limited to one window, so you couldn't keep each project open in its own window. Now the sidebar's project filter has a window icon next to each project that opens a new window showing only that project's threads. File → New Window (
Cmd/Ctrl+Alt+Shift+N) opens an unfiltered window.Background
The desktop shell kept one
mainwindow ref. A second launch, the dock, the CLI'st3 open, menu actions, and the preview browser all assumed that single window. The sidebar already had a per-project filter (sidebarProjectScopeKey), which is the natural way to define a "project window".What changed
ElectronWindow:mainis now the most recently focused app window, not a single ref.setMainputs a window first andclearMaindrops it, so closing the focused window hands main to the previous one. Existing callers (dock activation, dialogs, CLI open, SSH prompts, snap shot) now target the window you're working in without further changes.DesktopWindow:createWindowtakes an optional project scope and passes it as?projectScope=on the load URL. It focuses each window onfocus, and new windows cascade 28px from the current window instead of stacking on the saved bounds. NewopenWindowservice method. Additional windows don't restore the maximized state or open dev-mode DevTools.PreviewManager: keeps a set of host windows instead of one (setMainWindow→addHostWindow). Webviews register from any app window. Closing one window releases picture-in-picture and recordings only for tabs whose guests it destroyed. The global teardown still runs when the last window closes.DesktopAppActivation: tracks every ready renderer and sends CLI open requests to the main window's renderer, falling back to any ready one. Before this, closing the window that had registered leftt3 openwith no renderer until it timed out.desktopBridge.openWindow({ projectScopeKey? }), with a matchingdesktop:open-windowhandler.Cmd+Shift+NandCmd+Alt+Nwere already bound to new-thread commands, so it usesCmd/Ctrl+Alt+Shift+N.uiStateStoreapplies?projectScope=over the saved filter at boot and then removes it from the URL. The sidebar project picker shows the window button only on desktop builds that exposeopenWindow.docs/user/thread-sidebar.md.Scope / surfaces
Verification
tsc --noEmitpasses forapps/desktop,apps/web, andpackages/contracts.vp test run srcinapps/desktop: 1354 passed, 34 skipped.apps/webuiStateStore.test.ts: 19 passed.clearMainand host-window logic and confirmed the new tests went red, then restored the code.vp linton changed files: no errors.t3 openwhile two windows are open).Known limitations / follow-ups
localStorage, so the saved sidebar filter comes from whichever window wrote last. The next launch may restore with that window's project filter.🤖 Generated with Claude Code