* feat(worktrees): archive and restore a workspace's checkout (backend, off)
* fix(worktrees): keep archived rows through startup GC and Windows path checks
* fix(worktrees): serialize archive and restore, finish interrupted restores
* fix(worktrees): restore prior archive flag, drop leftover marks, keep archived rows out of offline listings
* test(worktrees): fixed timestamp in archived GC test; drop path cast
* feat(workspace-cleanup): archive inactive workspaces from the runner once archive is on
* fix(worktrees): queue bare-id restores and forget the archive mark when deleting an archived workspace
* fix(worktrees): import archive params from their new contract folder
A paired desktop that sleeps with its socket open let every agent tab create
wait out the full 15 s host-request timeout until the server's heartbeat
dropped the socket. The request registry now remembers a desktop that let an
ask time out and fails the next ask for it at once, until the desktop answers
anything or subscribes again. A new subscription also gets any ask that is
still pending.
When a desktop is paired, a tab the server's own agent opens (orca tab create
with no placement) goes on that desktop as a This-device page; otherwise it
stays in the server's own browser. orcad engine tabs reach no client, so on
Linux servers agent tabs were invisible even with a desktop paired.
With a browser of its own to fall back on, the server asks a desktop each time:
a desktop on "Server (streamed)" declines and the tab streams, and a desktop
that does not answer (asleep or gone) leaves it on the server after the
request times out.
* test: remove low-value push and relay coverage
* test: delete orphaned fixture and closure support
* test: trim runner and mobile recording matrices
---------
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
* test: remove low-value automation and shared suites
* test: retire stale gate references and stabilize retained fixture date
---------
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
Pageless agent commands prefer the workspace's active client page, and creating
an offscreen or renderer tab never cleared it, so the next command after
`orca tab create` acted on the user's page. Yield client selection wherever a
create moves the bridge's active tab, as orcad already does.
The idle sweep stopped any still-starting agent whose chat had been quiet past the idle window on
the wall clock, which counts sleep. A message sent just before the Mac slept was rejected on wake
as "Claude couldn't start". A start's own deadline already runs on awake time, so the sweep now
leaves a start alone while that deadline still times it.
The streamed pane's context menu opened the page or link URL as-is in
the desktop's default browser, so a server's localhost page opened this
machine's localhost. Use resolveRemoteFailureExternalUrl, as the
streamed error page already does, and leave the items out when it
refuses.
The desktop's screencast subscription dropped the stream's dialog and
dialogClosed events, so an alert, confirm or prompt on a Server
(streamed) page froze it with nothing to answer. Ask with the local
browser's dialog, answer through browser.dialogAccept/dialogDismiss,
and close it when the host closes the dialog or the stream stops.
Streamed (offscreen) pages only republished their session-tab row on commit,
in-page navigation, first favicon and load failure. A title parsed after
commit, a live document.title change and the end of a load never reached the
desktop tab strip or the phone, and the row hardcoded loading and back/forward
as false. Publish title and load-state changes through a per-page coalescer
and read real loading and history state into the row.