From 658953dc23b90d3c637a20951669089f3ed04df8 Mon Sep 17 00:00:00 2001
From: Neil <4138956+nwparker@users.noreply.github.com>
Date: Sun, 18 Oct 2026 07:26:10 -0700
Subject: [PATCH 01/15] refactor(ssh): group system-ssh transport, ssh config
and remote exec into ssh/{system-transport,config,remote-exec}/ (#30355)
git mv plus import, vi.mock and path-literal rewrites; one e2e route regex follows the moved
dynamic-forward process.
---
.../process-host-direct-import-baseline.txt | 10 ++--
config/reliability-gates.jsonc | 14 ++---
config/scripts/ci-shard-timings.json | 54 +++++++++----------
.../scripts/pr-e2e-route-contracts.test.mjs | 2 +-
config/scripts/pr-e2e-source-routing.mjs | 2 +-
.../active-view-persistence-boundary.test.ts | 2 +-
.../wsl-hook-relay-sentinel.test.ts | 2 +-
.../agent-hooks/wsl-hook-relay-sentinel.ts | 2 +-
.../automation-worker-durability.test.ts | 2 +-
.../ssh-browser-network-execution-route.ts | 2 +-
.../github-enterprise-repository.test.ts | 2 +-
...repository-identity.ssh-host-alias.test.ts | 2 +-
.../github-ssh-host-alias-resolution.ts | 2 +-
.../orca-profiles-switch-persistence.test.ts | 2 +-
.../pty/pane/pane-owner-replacement.test.ts | 2 +-
...-shutdown-checkpoint-sleep-records.test.ts | 2 +-
src/main/ipc/session-window-view-save.test.ts | 2 +-
.../ipc/settings-delayed-response.test.ts | 2 +-
src/main/ipc/shell.ts | 2 +-
src/main/ipc/ssh-app-shutdown.test.ts | 2 +-
.../ssh-connect-decision-cancellation.test.ts | 2 +-
src/main/ipc/ssh-credential-cancel.test.ts | 2 +-
.../ipc/ssh-disconnect-cancellation.test.ts | 2 +-
.../ipc/ssh-handler-reregistration.test.ts | 2 +-
src/main/ipc/ssh-host-user-disconnect.test.ts | 2 +-
src/main/ipc/ssh-sign-in-requirement.test.ts | 2 +-
.../ipc/ssh-state-broadcast-fanout.test.ts | 2 +-
src/main/ipc/ssh-target-crud-handlers.ts | 2 +-
src/main/ipc/ssh-target-registry.test.ts | 2 +-
src/main/ipc/ssh.test.ts | 2 +-
.../orcad-activation-crash-recovery.test.ts | 6 +--
.../orcad-activation-fence-generation.test.ts | 6 +--
.../orcad-activation-fence-scope.ts | 2 +-
.../orcad-activation-host-test-harness.ts | 2 +-
.../activation/orcad-activation-lock.ts | 2 +-
.../orcad-activation-record-store.ts | 2 +-
.../orcad-activation-transaction.test.ts | 6 +--
.../orcad-activation-transaction.ts | 2 +-
.../host-state/orcad-machine-claim-command.ts | 2 +-
.../host-state/orcad-machine-home.test.ts | 6 +--
.../host-state/orcad-machine-home.ts | 2 +-
.../orcad-state-mutation-exec.test.ts | 2 +-
.../host-state/orcad-state-mutation-exec.ts | 5 +-
.../orcad-state-mutation-timeout.test.ts | 6 +--
.../install/orcad-remote-context.ts | 2 +-
.../install/orcad-remote-decommission.test.ts | 6 +--
.../install/orcad-remote-gc.test.ts | 6 +--
.../managed-server/install/orcad-remote-gc.ts | 7 ++-
.../orcad-remote-install-termination.test.ts | 6 +--
.../install/orcad-remote-install.ts | 5 +-
.../install/orcad-remote-launch.ts | 2 +-
.../orcad-remote-lifecycle-windows.test.ts | 6 +--
.../install/orcad-remote-log-tail.test.ts | 4 +-
.../install/orcad-remote-log-tail.ts | 2 +-
...remote-node-runtime-promotion-lock.test.ts | 6 +--
...remote-node-runtime-recorded-probe.test.ts | 6 +--
...rcad-remote-node-runtime-slow-hash.test.ts | 6 +--
.../orcad-remote-node-runtime-windows.test.ts | 6 +--
.../install/orcad-remote-node-runtime.ts | 5 +-
.../install/orcad-remote-preflight.ts | 2 +-
.../install/orcad-remote-primitives.test.ts | 6 +--
.../install/orcad-remote-record-file.ts | 2 +-
.../install/orcad-remote-rollback.test.ts | 6 +--
.../orcad-remote-runtime-control.test.ts | 6 +--
.../install/orcad-remote-runtime-control.ts | 5 +-
.../orcad-remote-windows-commands.test.ts | 6 +--
.../orcad-remote-windows-decommission.test.ts | 6 +--
.../install/orcad-remote-windows-node.ts | 7 ++-
...emote-install-gc-claim-termination.test.ts | 6 +--
.../install/remote-install-gc-claim.ts | 4 +-
.../remote-install-gc-listing.test-fixture.ts | 2 +-
.../remote-install-gc-termination.test.ts | 6 +--
.../install/remote-install-gc-tombstone.ts | 5 +-
.../install/remote-install-gc.ts | 6 +--
.../remote-install-lock-termination.test.ts | 6 +--
.../install/remote-install-lock.test.ts | 6 +--
.../install/remote-install-lock.ts | 4 +-
.../install/remote-install-transfers.ts | 2 +-
.../remote-node-runtime-store-gc.test.ts | 6 +--
.../install/remote-node-runtime-store-gc.ts | 5 +-
.../remote-node-runtime-store-inventory.ts | 2 +-
...de-runtime-store-lock-host-release.test.ts | 6 +--
.../install/remote-node-runtime-store-lock.ts | 6 +--
.../remote-node-runtime-store-windows.test.ts | 6 +--
.../remote-node-runtime-store-windows.ts | 2 +-
...mote-versioned-install-termination.test.ts | 6 +--
.../install/remote-versioned-install.test.ts | 9 ++--
.../install/remote-versioned-install.ts | 6 +--
.../lifecycle/orcad-decommission-stop.ts | 2 +-
.../lifecycle/orcad-managed-remote-stop.ts | 2 +-
.../orcad-managed-tunnel-bridge-port.test.ts | 4 +-
.../orcad-managed-tunnel-transport.ts | 2 +-
.../lifecycle/orcad-managed-wake.test.ts | 6 +--
.../lifecycle/orcad-rollback-transition.ts | 2 +-
.../lifecycle/orcad-runtime-target.test.ts | 6 +--
.../lifecycle/orcad-stdio-bridge-script.ts | 2 +-
.../profile-active-transfer-worker.test.ts | 2 +-
.../profile-active-transfer.test.ts | 2 +-
...untime-daemon-adoption.integration.test.ts | 6 +--
.../persistence-async-write-syscalls.test.ts | 2 +-
...stence-automation-extra-agent-args.test.ts | 2 +-
src/main/persistence-automations.test.ts | 2 +-
...ence-clipboard-selection-migration.test.ts | 2 +-
...ence-cohort-and-identity-migration.test.ts | 2 +-
...sistence-deregistered-repo-residue.test.ts | 2 +-
...ersistence-floating-terminal-trust.test.ts | 2 +-
...sistence-flush-and-save-scheduling.test.ts | 2 +-
...istence-folder-scan-project-groups.test.ts | 2 +-
...persistence-folder-workspace-notes.test.ts | 2 +-
...sistence-host-partitioned-sessions.test.ts | 2 +-
src/main/persistence-initial-load.test.ts | 2 +-
...nce-invalid-workspace-layout-purge.test.ts | 2 +-
...ersistence-layout-binding-recovery.test.ts | 2 +-
...persistence-load-repair-durability.test.ts | 2 +-
...rsistence-loading-store-extraction.test.ts | 2 +-
...sistence-loading-store-write-risks.test.ts | 2 +-
...sistence-native-chat-tab-view-mode.test.ts | 2 +-
...ersistence-pane-identity-migration.test.ts | 2 +-
...tence-protected-secret-fail-closed.test.ts | 2 +-
...stence-protected-secret-write-race.test.ts | 2 +-
.../persistence-proxy-secret-recovery.test.ts | 2 +-
...istence-pty-binding-reconciliation.test.ts | 2 +-
...persistence-remote-session-startup.test.ts | 2 +-
src/main/persistence-repo-lifecycle.test.ts | 2 +-
.../persistence-settings-ui-defaults.test.ts | 2 +-
src/main/persistence-settings-update.test.ts | 2 +-
src/main/persistence-single-serialize.test.ts | 2 +-
...stence-source-control-ai-migration.test.ts | 2 +-
...persistence-split-pane-incarnation.test.ts | 2 +-
...e-ssh-remote-cli-control-migration.test.ts | 2 +-
...ence-ssh-remote-pty-binding-replay.test.ts | 2 +-
.../persistence-ssh-remote-pty-leases.test.ts | 2 +-
...sistence-ssh-targets-and-pane-keys.test.ts | 2 +-
...ence-terminal-option-key-migration.test.ts | 2 +-
src/main/persistence-ui-state.test.ts | 2 +-
src/main/persistence-update-repo.test.ts | 2 +-
...tence-workspace-session-scrollback.test.ts | 2 +-
...sistence-workspace-status-workflow.test.ts | 2 +-
...rsistence-worktree-card-properties.test.ts | 2 +-
...sistence-worktree-deletion-fencing.test.ts | 2 +-
...tence-worktree-lineage-and-backups.test.ts | 2 +-
...orktree-meta-and-folder-workspaces.test.ts | 2 +-
.../persistence-worktree-visibility.test.ts | 2 +-
.../profile-state-checkpoints.test.ts | 2 +-
.../profile-state-direct-flush.test.ts | 2 +-
.../profile-state-durable-writes.test.ts | 2 +-
.../profile-state-import-lifetime.test.ts | 2 +-
...le-state-maintenance-compatibility.test.ts | 2 +-
...rofile-state-maintenance-contracts.test.ts | 2 +-
.../profile-state-settings-writes.test.ts | 2 +-
.../profile-state-sqlite-authority.test.ts | 2 +-
.../profile-state-store-backups.test.ts | 2 +-
...rofile-state-temp-cleanup-lifetime.test.ts | 2 +-
.../profile-state-update-quit.test.ts | 2 +-
.../pty-binding-placement-inertness.test.ts | 2 +-
.../pty-reattach-failure-routing.test.ts | 2 +-
...retirement-publication-during-read.test.ts | 2 +-
.../pty-spawn-exit-durability.test.ts | 2 +-
.../pty-spawn-handle-publication.test.ts | 2 +-
.../pty-spawn-replacement-durability.test.ts | 2 +-
.../pty-spawn-restore-durability.test.ts | 2 +-
.../terminal-close-async-durability.test.ts | 2 +-
.../profile-state-cutover-fixture.test.ts | 2 +-
.../profile-state-authority-bootstrap.test.ts | 2 +-
.../profile-state-authority-marker.test.ts | 2 +-
...e-state-bootstrap-publication-race.test.ts | 2 +-
...ile-state-database-rollback-export.test.ts | 2 +-
.../profile-state-fragment-validation.test.ts | 2 +-
...-state-json-compatibility-recovery.test.ts | 2 +-
.../profile-state-live-store-factory.test.ts | 2 +-
...le-state-recovery-crash-boundaries.test.ts | 2 +-
.../profile-state-startup-authority.test.ts | 2 +-
.../profile-state-startup-secrets.test.ts | 2 +-
.../profile-state-startup-snapshot.test.ts | 2 +-
.../profile-state-store-factory.test.ts | 2 +-
.../profile-state-worker-authority.test.ts | 2 +-
.../duplicate-pty-pane-repair.test.ts | 2 +-
.../editor-tab-layout-apply.test.ts | 2 +-
.../open-in-new-group-layout-apply.test.ts | 2 +-
.../terminal-late-bind-layout-rules.test.ts | 2 +-
.../terminal-layout-apply.test.ts | 2 +-
.../terminal-layout-create.test.ts | 2 +-
...rminal-layout-default-tabs-applied.test.ts | 2 +-
.../terminal-layout-pane-ops.test.ts | 2 +-
.../terminal-layout-sleep-wake.test.ts | 2 +-
.../terminal-owner-report-only.test.ts | 2 +-
...rminal-pane-admission-layout-owner.test.ts | 2 +-
.../terminal-sleep-quit-resume.test.ts | 2 +-
.../terminal-stale-pane-tree-client.test.ts | 2 +-
.../terminal-topology-model.test.ts | 2 +-
.../quit-path-durable-write-blocking.test.ts | 2 +-
...remote-layout-snapshot-persistence.test.ts | 2 +-
...t-agent-launch-settings-durability.test.ts | 2 +-
...headless-browser-group-persistence.test.ts | 2 +-
.../ssh-config-alias-claim.test.ts | 0
.../{ => config}/ssh-config-alias-claim.ts | 2 +-
.../ssh-config-host-picker.test.ts | 2 +-
.../{ => config}/ssh-config-host-picker.ts | 6 +--
.../ssh-config-include-expander.ts | 0
.../ssh-config-loader-regression.test.ts | 0
.../{ => config}/ssh-config-loader.test.ts | 0
.../ssh-config-parser-host-patterns.test.ts | 0
.../{ => config}/ssh-config-parser.test.ts | 0
.../ssh/{ => config}/ssh-config-parser.ts | 2 +-
.../{ => config}/ssh-config-path-expansion.ts | 0
.../{ => config}/ssh-config-resolver.test.ts | 0
.../ssh-g-config-resolution.test.ts | 0
.../{ => config}/ssh-g-config-resolution.ts | 0
.../ssh-known-hosts-source.test.ts | 0
.../{ => config}/ssh-known-hosts-source.ts | 0
.../ssh/{ => config}/ssh-known-hosts.test.ts | 0
src/main/ssh/{ => config}/ssh-known-hosts.ts | 0
.../{ => config}/vscode-ssh-authority.test.ts | 2 +-
.../ssh/{ => config}/vscode-ssh-authority.ts | 4 +-
.../legacy-relay-endpoints.test.ts | 4 +-
.../legacy-relay/legacy-relay-endpoints.ts | 4 +-
.../ssh-host-relay-endpoint-census.test.ts | 4 +-
.../ssh-host-relay-endpoint-census.ts | 4 +-
.../ssh-host-relay-terminals-on-connect.ts | 2 +-
.../ssh-host-relay-windows-census.test.ts | 4 +-
.../ssh-host-relay-windows-census.ts | 4 +-
.../ssh-host-relay-windows-inventory.ts | 2 +-
.../ssh-relay-endpoint-incumbent.test.ts | 4 +-
.../ssh-relay-endpoint-incumbent.ts | 2 +-
.../ssh-relay-endpoint-runtime.ts | 2 +-
.../ssh-relay-incumbent-process.test.ts | 4 +-
.../ssh-relay-sentinel-copy-budget.test.ts | 2 +-
.../legacy-relay/ssh-relay-sentinel.test.ts | 2 +-
.../ssh/legacy-relay/ssh-relay-sentinel.ts | 2 +-
.../ssh/orcad-candidate-launch-verdict.ts | 2 +-
src/main/ssh/orcad-deployment-target.test.ts | 6 +--
src/main/ssh/orcad-deployment-target.ts | 2 +-
...cad-exited-own-fence-mutation-race.test.ts | 4 +-
src/main/ssh/orcad-exited-own-fence.test.ts | 6 +--
.../ssh/orcad-exited-own-install-lock.test.ts | 6 +--
.../ssh/orcad-exited-own-lock-windows.test.ts | 4 +-
.../orcad-fence-lost-classification.test.ts | 5 +-
src/main/ssh/orcad-gc-transaction-pins.ts | 2 +-
src/main/ssh/orcad-incumbent-recovery.ts | 2 +-
src/main/ssh/orcad-installed-activation.ts | 2 +-
...-migration-terminal-gate-host-wide.test.ts | 4 +-
src/main/ssh/orcad-remote-deploy.test.ts | 6 +--
.../ssh/orcad-remote-node-runtime-report.ts | 2 +-
.../port-forwarding/ssh-port-forward.test.ts | 2 +-
.../system-ssh-port-forward-provider.ts | 4 +-
src/main/ssh/relay-bundle-paths.ts | 2 +-
.../remote-exec-closed-stdin.test.ts | 2 +-
.../remote-exec-command.test.ts | 0
.../{ => remote-exec}/remote-exec-command.ts | 10 ++--
.../remote-exec-input.test.ts | 4 +-
.../remote-frame-protocol.test.ts | 2 +-
.../remote-frame-protocol.ts | 2 +-
...te-host-answered-failure-producers.test.ts | 22 ++++----
.../remote-host-answered-failure.test.ts | 4 +-
.../remote-host-answered-failure.ts | 4 +-
.../ssh/{ => remote-exec}/remote-host-exec.ts | 4 +-
src/main/ssh/ssh-agent-identity-filter.ts | 2 +-
src/main/ssh/ssh-auth-resolution.ts | 6 +--
...h-channel-multiplexer-backpressure.test.ts | 2 +-
...annel-multiplexer-saturation-wedge.test.ts | 6 ++-
src/main/ssh/ssh-channel-multiplexer.test.ts | 2 +-
src/main/ssh/ssh-channel-multiplexer.ts | 2 +-
.../ssh/ssh-connection-auth-fallback.test.ts | 16 +++---
.../ssh/ssh-connection-channel-error.test.ts | 14 ++---
.../ssh/ssh-connection-channel-open.test.ts | 14 ++---
.../ssh/ssh-connection-direct-startup.test.ts | 16 +++---
.../ssh/ssh-connection-file-transfer.test.ts | 23 ++++----
src/main/ssh/ssh-connection-file-transfers.ts | 9 ++--
.../ssh/ssh-connection-github-probe.test.ts | 16 +++---
.../ssh-connection-gssapi-fallback.test.ts | 16 +++---
...h-connection-host-key-store-wiring.test.ts | 4 +-
...h-connection-host-key-verification.test.ts | 14 ++---
.../ssh-connection-manager-registry.test.ts | 14 ++---
...h-connection-manager-sign-in-reuse.test.ts | 14 ++---
...onnection-reconnect-handshake-loss.test.ts | 14 ++---
.../ssh-connection-reconnect-ladder.test.ts | 16 +++---
.../ssh/ssh-connection-sftp-namespace.test.ts | 26 +++++----
...h-connection-store-orcad-ownership.test.ts | 2 +-
src/main/ssh/ssh-connection-store.test.ts | 2 +-
src/main/ssh/ssh-connection-store.ts | 2 +-
.../ssh-connection-system-transport.test.ts | 18 +++----
src/main/ssh/ssh-connection-test-fixtures.ts | 2 +-
src/main/ssh/ssh-connection-test-harness.ts | 14 ++---
src/main/ssh/ssh-connection-utils.test.ts | 2 +-
src/main/ssh/ssh-connection-utils.ts | 4 +-
.../ssh/ssh-connection-wake-retry.test.ts | 16 +++---
src/main/ssh/ssh-connection.test.ts | 14 ++---
src/main/ssh/ssh-connection.ts | 10 ++--
src/main/ssh/ssh-control-socket.ts | 2 +-
...credential-prompt-login-grace-wire.test.ts | 6 +--
src/main/ssh/ssh-exec-rc-stdout-noise.test.ts | 2 +-
.../ssh/ssh-exec-stdin-file-transfer.test.ts | 2 +-
src/main/ssh/ssh-exec-stdin-file-transfer.ts | 6 +--
src/main/ssh/ssh-host-key-decision.ts | 2 +-
src/main/ssh/ssh-host-key-store.ts | 2 +-
src/main/ssh/ssh-host-key-verifier.test.ts | 2 +-
src/main/ssh/ssh-host-key-verifier.ts | 2 +-
.../ssh/ssh-keyboard-interactive-wire.test.ts | 6 +--
.../ssh-multi-factor-authentication.test.ts | 2 +-
.../ssh/ssh-multi-key-authentication.test.ts | 4 +-
src/main/ssh/ssh-proxy-command.ts | 4 +-
.../ssh/ssh-remote-node-install-guidance.ts | 2 +-
.../ssh/ssh-remote-node-resolution.test.ts | 4 +-
src/main/ssh/ssh-remote-node-resolution.ts | 2 +-
.../ssh/ssh-remote-platform-detection.test.ts | 6 +--
src/main/ssh/ssh-remote-platform-detection.ts | 4 +-
src/main/ssh/ssh-remote-platform.ts | 2 +-
...-remote-windows-command-line-limit.test.ts | 2 +-
.../ssh/ssh-security-key-identity.test.ts | 2 +-
.../ssh-system-transport.integration.test.ts | 2 +-
src/main/ssh/ssh-transport-selection.ts | 8 +--
.../{ => system-transport}/system-ssh-args.ts | 4 +-
.../system-ssh-binary.test.ts | 0
.../system-ssh-binary.ts | 0
.../system-ssh-command.ts | 4 +-
...system-ssh-dynamic-forward-process.test.ts | 0
.../system-ssh-dynamic-forward-process.ts | 2 +-
.../system-ssh-file-binary-transfer.ts | 10 ++--
.../system-ssh-file-transfer.ts | 14 +++--
.../system-ssh-forward-process.test.ts | 2 +-
.../system-ssh-forward-process.ts | 2 +-
.../system-ssh-operation-lifecycle.ts | 0
.../system-ssh-operations.test.ts | 6 +--
.../system-ssh-orphaned-forward.test.ts | 0
.../system-ssh-orphaned-forward.ts | 6 +--
.../system-ssh-sftp-args.test.ts | 0
.../system-ssh-sftp-args.ts | 0
.../system-ssh-sftp-path.test.ts | 0
.../system-ssh-sftp-path.ts | 2 +-
.../system-ssh-sftp-transfer.ts | 2 +-
.../system-ssh-upload-plan-budget.test.ts | 2 +-
.../system-ssh-windows-file-write.ts | 6 +--
.../system-ssh-windows-upload.test.ts | 4 +-
...tem-ssh-windows-write-capabilities.test.ts | 2 +-
.../system-ssh-windows-write-capabilities.ts | 4 +-
.../system-ssh-windows-write-strategy.ts | 2 +-
.../headless-serve-ssh-registration.test.ts | 2 +-
.../worktree-removal-close-records.test.ts | 2 +-
...-removal-session-partition-fencing.test.ts | 2 +-
src/main/wsl/wsl-command-loop.test.ts | 2 +-
src/main/wsl/wsl-directory-upload.ts | 7 ++-
src/main/wsl/wsl-guest-process-identity.ts | 2 +-
src/main/wsl/wsl-host-ssh-orcad-conflict.ts | 2 +-
src/main/wsl/wsl-orcad-deploy.test.ts | 2 +-
src/main/wsl/wsl-orcad-deploy.ts | 2 +-
.../wsl-orcad-host-transport-loops.test.ts | 2 +-
src/main/wsl/wsl-orcad-host-transport.test.ts | 2 +-
.../wsl/wsl-orcad-real-distro-lane.test.ts | 2 +-
src/wsl-guest/protocol-json-payload.test.ts | 2 +-
src/wsl-guest/protocol.ts | 2 +-
.../released-relay-transport.ts | 2 +-
...nch-settings-hook-bookkeeping.unit.test.ts | 2 +-
352 files changed, 692 insertions(+), 637 deletions(-)
rename src/main/ssh/{ => config}/ssh-config-alias-claim.test.ts (100%)
rename src/main/ssh/{ => config}/ssh-config-alias-claim.ts (98%)
rename src/main/ssh/{ => config}/ssh-config-host-picker.test.ts (98%)
rename src/main/ssh/{ => config}/ssh-config-host-picker.ts (97%)
rename src/main/ssh/{ => config}/ssh-config-include-expander.ts (100%)
rename src/main/ssh/{ => config}/ssh-config-loader-regression.test.ts (100%)
rename src/main/ssh/{ => config}/ssh-config-loader.test.ts (100%)
rename src/main/ssh/{ => config}/ssh-config-parser-host-patterns.test.ts (100%)
rename src/main/ssh/{ => config}/ssh-config-parser.test.ts (100%)
rename src/main/ssh/{ => config}/ssh-config-parser.ts (99%)
rename src/main/ssh/{ => config}/ssh-config-path-expansion.ts (100%)
rename src/main/ssh/{ => config}/ssh-config-resolver.test.ts (100%)
rename src/main/ssh/{ => config}/ssh-g-config-resolution.test.ts (100%)
rename src/main/ssh/{ => config}/ssh-g-config-resolution.ts (100%)
rename src/main/ssh/{ => config}/ssh-known-hosts-source.test.ts (100%)
rename src/main/ssh/{ => config}/ssh-known-hosts-source.ts (100%)
rename src/main/ssh/{ => config}/ssh-known-hosts.test.ts (100%)
rename src/main/ssh/{ => config}/ssh-known-hosts.ts (100%)
rename src/main/ssh/{ => config}/vscode-ssh-authority.test.ts (97%)
rename src/main/ssh/{ => config}/vscode-ssh-authority.ts (90%)
rename src/main/ssh/{ => remote-exec}/remote-exec-closed-stdin.test.ts (95%)
rename src/main/ssh/{ => remote-exec}/remote-exec-command.test.ts (100%)
rename src/main/ssh/{ => remote-exec}/remote-exec-command.ts (96%)
rename src/main/ssh/{ => remote-exec}/remote-exec-input.test.ts (91%)
rename src/main/ssh/{ => remote-exec}/remote-frame-protocol.test.ts (99%)
rename src/main/ssh/{ => remote-exec}/remote-frame-protocol.ts (98%)
rename src/main/ssh/{ => remote-exec}/remote-host-answered-failure-producers.test.ts (90%)
rename src/main/ssh/{ => remote-exec}/remote-host-answered-failure.test.ts (94%)
rename src/main/ssh/{ => remote-exec}/remote-host-answered-failure.ts (92%)
rename src/main/ssh/{ => remote-exec}/remote-host-exec.ts (74%)
rename src/main/ssh/{ => system-transport}/system-ssh-args.ts (99%)
rename src/main/ssh/{ => system-transport}/system-ssh-binary.test.ts (100%)
rename src/main/ssh/{ => system-transport}/system-ssh-binary.ts (100%)
rename src/main/ssh/{ => system-transport}/system-ssh-command.ts (98%)
rename src/main/ssh/{ => system-transport}/system-ssh-dynamic-forward-process.test.ts (100%)
rename src/main/ssh/{ => system-transport}/system-ssh-dynamic-forward-process.ts (98%)
rename src/main/ssh/{ => system-transport}/system-ssh-file-binary-transfer.ts (96%)
rename src/main/ssh/{ => system-transport}/system-ssh-file-transfer.ts (96%)
rename src/main/ssh/{ => system-transport}/system-ssh-forward-process.test.ts (99%)
rename src/main/ssh/{ => system-transport}/system-ssh-forward-process.ts (99%)
rename src/main/ssh/{ => system-transport}/system-ssh-operation-lifecycle.ts (100%)
rename src/main/ssh/{ => system-transport}/system-ssh-operations.test.ts (99%)
rename src/main/ssh/{ => system-transport}/system-ssh-orphaned-forward.test.ts (100%)
rename src/main/ssh/{ => system-transport}/system-ssh-orphaned-forward.ts (96%)
rename src/main/ssh/{ => system-transport}/system-ssh-sftp-args.test.ts (100%)
rename src/main/ssh/{ => system-transport}/system-ssh-sftp-args.ts (100%)
rename src/main/ssh/{ => system-transport}/system-ssh-sftp-path.test.ts (100%)
rename src/main/ssh/{ => system-transport}/system-ssh-sftp-path.ts (96%)
rename src/main/ssh/{ => system-transport}/system-ssh-sftp-transfer.ts (99%)
rename src/main/ssh/{ => system-transport}/system-ssh-upload-plan-budget.test.ts (96%)
rename src/main/ssh/{ => system-transport}/system-ssh-windows-file-write.ts (97%)
rename src/main/ssh/{ => system-transport}/system-ssh-windows-upload.test.ts (99%)
rename src/main/ssh/{ => system-transport}/system-ssh-windows-write-capabilities.test.ts (98%)
rename src/main/ssh/{ => system-transport}/system-ssh-windows-write-capabilities.ts (94%)
rename src/main/ssh/{ => system-transport}/system-ssh-windows-write-strategy.ts (99%)
diff --git a/config/process-host-direct-import-baseline.txt b/config/process-host-direct-import-baseline.txt
index e76e1eb7b151..80709a6a6d54 100644
--- a/config/process-host-direct-import-baseline.txt
+++ b/config/process-host-direct-import-baseline.txt
@@ -102,11 +102,11 @@ src/main/runtime/windows-mobile-firewall.ts
src/main/skills/skill-update-run.ts
src/main/ssh/ssh-connection.ts
src/main/ssh/ssh-proxy-command.ts
-src/main/ssh/system-ssh-command.ts
-src/main/ssh/system-ssh-dynamic-forward-process.ts
-src/main/ssh/system-ssh-file-transfer.ts
-src/main/ssh/system-ssh-forward-process.ts
-src/main/ssh/system-ssh-operation-lifecycle.ts
+src/main/ssh/system-transport/system-ssh-command.ts
+src/main/ssh/system-transport/system-ssh-dynamic-forward-process.ts
+src/main/ssh/system-transport/system-ssh-file-transfer.ts
+src/main/ssh/system-transport/system-ssh-forward-process.ts
+src/main/ssh/system-transport/system-ssh-operation-lifecycle.ts
src/main/startup/ensure-virtual-display.ts
src/main/windows-process-tree-kill.ts
src/main/zsh-startup-hook-pty-harness.ts
diff --git a/config/reliability-gates.jsonc b/config/reliability-gates.jsonc
index 0575434081e3..f343f7292f57 100644
--- a/config/reliability-gates.jsonc
+++ b/config/reliability-gates.jsonc
@@ -6349,7 +6349,7 @@
"pnpm exec vitest run --config config/vitest.config.ts src/shared/browser-client-host-protocol.test.ts src/main/browser/browser-client-host-attach-request.test.ts src/main/browser/browser-client-network-route-registry.test.ts src/main/browser/paired-runtime-browser-client-host-composition.test.ts src/main/browser/paired-runtime-browser-client-host.test.ts src/main/browser/paired-runtime-browser-client-host-reconnect.test.ts src/main/browser/paired-runtime-browser-host-lease.test.ts src/main/browser/paired-runtime-browser-host-lease-reconnect.test.ts src/main/browser/browser-host-lease-reconnect-delay.test.ts src/main/browser/paired-runtime-browser-network-route.test.ts src/main/runtime/browser-host/browser-host-command-ledger.test.ts src/main/runtime/browser-host/browser-host-command-ledger-capacity.test.ts src/main/runtime/browser-host/browser-host-lease-placement-retirement.test.ts src/main/runtime/browser-host/browser-host-lease-registry.test.ts src/main/runtime/runtime-rpc-browser-host-admission.test.ts src/main/runtime/rpc/methods/browser-client-host.test.ts",
"pnpm exec vitest run --config config/vitest.config.ts src/main/browser/browser-client-network-route-registry.test.ts src/main/browser/paired-runtime-browser-client-host-composition.test.ts src/main/browser/paired-runtime-browser-client-host-registry.test.ts src/main/browser/paired-runtime-browser-client-host-runtime.test.ts src/main/browser/browser-client-page-command-executor.test.ts src/main/browser/browser-session-startup.test.ts src/main/ipc/runtime-environments-subscription-teardown.test.ts",
"pnpm exec vitest run --config config/vitest.config.ts src/main/runtime/browser-host/browser-host-command-ledger.test.ts src/main/runtime/browser-host/browser-host-command-ledger-capacity.test.ts src/main/runtime/browser-host/browser-host-lease-registry.test.ts src/main/runtime/rpc/methods/browser-client-host.test.ts",
- "pnpm exec vitest run --config config/vitest.config.ts src/main/runtime/browser-host/browser-host-lease-registry.test.ts src/main/browser/browser-network-deferred-socket.test.ts src/main/browser/browser-network-execution-route.test.ts src/main/browser/paired-runtime-browser-network-route.test.ts src/main/runtime/rpc/methods/browser-network-tunnel.test.ts src/main/browser/ssh-browser-network-execution-route.test.ts src/main/browser/system-ssh-socks-client-socket.test.ts src/main/ssh/system-ssh-dynamic-forward-process.test.ts src/shared/browser-client-host-protocol.test.ts src/main/ssh/system-ssh-forward-process.test.ts src/main/ssh/system-ssh-operations.test.ts src/main/ssh/port-forwarding/ssh-port-forward.test.ts",
+ "pnpm exec vitest run --config config/vitest.config.ts src/main/runtime/browser-host/browser-host-lease-registry.test.ts src/main/browser/browser-network-deferred-socket.test.ts src/main/browser/browser-network-execution-route.test.ts src/main/browser/paired-runtime-browser-network-route.test.ts src/main/runtime/rpc/methods/browser-network-tunnel.test.ts src/main/browser/ssh-browser-network-execution-route.test.ts src/main/browser/system-ssh-socks-client-socket.test.ts src/main/ssh/system-transport/system-ssh-dynamic-forward-process.test.ts src/shared/browser-client-host-protocol.test.ts src/main/ssh/system-transport/system-ssh-forward-process.test.ts src/main/ssh/system-transport/system-ssh-operations.test.ts src/main/ssh/port-forwarding/ssh-port-forward.test.ts",
"ORCA_RUN_DOCKER_SSH_BROWSER_E2E=1 pnpm exec vitest run --config config/vitest.config.ts tests/e2e/ssh-browser-network-execution-route.docker.unit.test.ts",
"ORCA_RUN_DOCKER_SSH_BROWSER_E2E=1 node_modules/.bin/vitest run --config config/vitest.config.ts tests/e2e/ssh-browser-network-execution-route.docker.unit.test.ts"
],
@@ -6405,7 +6405,7 @@
"src/main/browser/paired-runtime-browser-network-route.test.ts",
"src/main/browser/ssh-browser-network-execution-route.test.ts",
"src/main/browser/system-ssh-socks-client-socket.test.ts",
- "src/main/ssh/system-ssh-dynamic-forward-process.test.ts",
+ "src/main/ssh/system-transport/system-ssh-dynamic-forward-process.test.ts",
"src/main/ssh/port-forwarding/ssh-port-forward.test.ts",
"src/main/browser/remote-browser-socks-server.test.ts",
"src/main/runtime/runtime-binary-message-router.test.ts",
@@ -6889,7 +6889,7 @@
]
},
{
- "file": "src/main/ssh/system-ssh-dynamic-forward-process.test.ts",
+ "file": "src/main/ssh/system-transport/system-ssh-dynamic-forward-process.test.ts",
"assertions": [
"system SSH uses BatchMode=yes, disables ControlMaster, and positions one dynamic forward before the destination",
"authority invalidation cancels an in-progress SSH launch and destroys its active readiness probe immediately"
@@ -18736,13 +18736,13 @@
"invariant": "For one connected SSH authority, a renderer snapshot may update Forwarded or Detected state only if no newer push for that target and stream arrived after the snapshot began. Active tunnels and persisted intent remain authoritative through scan refresh and reconnect until explicit removal or a real connection-lifecycle transition.",
"oracle": "Hold empty initial Forwarded and Detected snapshot promises, publish live events, release the snapshots, and require each target and stream to preserve only its own newer push while applying unaffected snapshots. Reject one target's Detected snapshot and require its Forwarded snapshot plus later targets to hydrate independently. Begin another target with partial connected authority and require its snapshots to hydrate after same-watermark authority reconciliation. In headed Electron, hold an authoritative empty Forwarded snapshot across renderer reload, add a forward through the Ports panel, release and confirm the wrapped main handler resumed, then complete a later renderer-to-main listPortForwards round trip as the ordered hydration-continuation barrier. Before checking the Forwarded row, require main inventory, persisted intent, HTTP, remote process identity, and close warnings to prove the tunnel remained authoritative. Then forward two real Docker listeners, refresh detection, force an in-place relay-channel reconnect, perform a full transport reconnect, reject a bound local-port collision, remove one row, and require all signals to agree.",
"commands": [
- "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/hooks/useIpcEvents-agent-status-ssh-authority.test.ts src/main/ssh/port-forwarding/ssh-port-forward.test.ts src/main/ssh/system-ssh-forward-process.test.ts src/main/ipc/ssh.test.ts --reporter=dot",
+ "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/hooks/useIpcEvents-agent-status-ssh-authority.test.ts src/main/ssh/port-forwarding/ssh-port-forward.test.ts src/main/ssh/system-transport/system-ssh-forward-process.test.ts src/main/ipc/ssh.test.ts --reporter=dot",
"pnpm exec electron-vite build --mode e2e"
],
"testFiles": [
"src/renderer/src/hooks/useIpcEvents-agent-status-ssh-authority.test.ts",
"src/main/ssh/port-forwarding/ssh-port-forward.test.ts",
- "src/main/ssh/system-ssh-forward-process.test.ts",
+ "src/main/ssh/system-transport/system-ssh-forward-process.test.ts",
"src/main/ipc/ssh.test.ts"
],
"assertionRefs": [
@@ -18755,7 +18755,7 @@
"assertions": ["lists forwards filtered by connectionId", "removes a forward by id"]
},
{
- "file": "src/main/ssh/system-ssh-forward-process.test.ts",
+ "file": "src/main/ssh/system-transport/system-ssh-forward-process.test.ts",
"assertions": [
"does not spawn ssh when the requested local forward port is already in use",
"sends SIGTERM then SIGKILL when the process does not exit",
@@ -18775,7 +18775,7 @@
"date": "2026-07-30",
"runner": "local",
"platform": "macos",
- "command": "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/hooks/useIpcEvents-agent-status-ssh-authority.test.ts src/main/ssh/port-forwarding/ssh-port-forward.test.ts src/main/ssh/system-ssh-forward-process.test.ts src/main/ipc/ssh.test.ts --reporter=dot",
+ "command": "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/hooks/useIpcEvents-agent-status-ssh-authority.test.ts src/main/ssh/port-forwarding/ssh-port-forward.test.ts src/main/ssh/system-transport/system-ssh-forward-process.test.ts src/main/ipc/ssh.test.ts --reporter=dot",
"result": "passed",
"durationSeconds": 6.77,
"summary": "Six renderer, main-process, and barrier lifecycle files passed with 215 tests, including deterministic stale-snapshot, rejected-stream, partial-authority, and single-capture isolation plus existing collision, delayed-exit, reconnect, persistence, re-registration, and unrelated-forward contracts."
diff --git a/config/scripts/ci-shard-timings.json b/config/scripts/ci-shard-timings.json
index 64ecfee2c1e5..dee8bb06ee32 100644
--- a/config/scripts/ci-shard-timings.json
+++ b/config/scripts/ci-shard-timings.json
@@ -5685,7 +5685,7 @@
"src/main/ssh/pinned-runtime-host-target.test.ts": 51,
"src/main/ssh/relay-bundle-paths.test.ts": 32,
"src/main/ssh/relay-install-artifacts.test.ts": 37,
- "src/main/ssh/remote-frame-protocol.test.ts": 113,
+ "src/main/ssh/remote-exec/remote-frame-protocol.test.ts": 113,
"src/main/managed-server/install/remote-install-gc-termination.test.ts": 187,
"src/main/managed-server/install/remote-install-model.test.ts": 184,
"src/main/managed-server/install/remote-node-runtime-store-gc.test.ts": 1625,
@@ -5704,13 +5704,13 @@
"src/main/ssh/ssh-channel-multiplexer-saturation-wedge.test.ts": 61,
"src/main/ssh/ssh-channel-multiplexer-settlement.test.ts": 37,
"src/main/ssh/ssh-channel-multiplexer.test.ts": 120,
- "src/main/ssh/ssh-config-alias-claim.test.ts": 58,
- "src/main/ssh/ssh-config-host-picker.test.ts": 223,
- "src/main/ssh/ssh-config-loader-regression.test.ts": 132,
- "src/main/ssh/ssh-config-loader.test.ts": 114,
- "src/main/ssh/ssh-config-parser-host-patterns.test.ts": 49,
- "src/main/ssh/ssh-config-parser.test.ts": 331,
- "src/main/ssh/ssh-config-resolver.test.ts": 40,
+ "src/main/ssh/config/ssh-config-alias-claim.test.ts": 58,
+ "src/main/ssh/config/ssh-config-host-picker.test.ts": 223,
+ "src/main/ssh/config/ssh-config-loader-regression.test.ts": 132,
+ "src/main/ssh/config/ssh-config-loader.test.ts": 114,
+ "src/main/ssh/config/ssh-config-parser-host-patterns.test.ts": 49,
+ "src/main/ssh/config/ssh-config-parser.test.ts": 331,
+ "src/main/ssh/config/ssh-config-resolver.test.ts": 40,
"src/main/ssh/ssh-connect-attempt-cancellation.test.ts": 85,
"src/main/ssh/ssh-connection-attribution.test.ts": 34,
"src/main/ssh/ssh-connection-auth-fallback.test.ts": 269,
@@ -5741,7 +5741,7 @@
"src/main/ssh/ssh-exec-rc-stdout-noise.test.ts": 260,
"src/main/ssh/ssh-exec-stdin-file-transfer.test.ts": 334,
"src/main/ssh/ssh-file-transfer-abort.test.ts": 77,
- "src/main/ssh/ssh-g-config-resolution.test.ts": 128,
+ "src/main/ssh/config/ssh-g-config-resolution.test.ts": 128,
"src/main/ssh/ssh-host-key-decision.test.ts": 67,
"src/main/ssh/ssh-host-key-store.test.ts": 207,
"src/main/ssh/ssh-host-key-verifier.test.ts": 77,
@@ -5760,8 +5760,8 @@
"src/main/ssh/hostile-host-test-support/ssh-hostile-hosts.docker.test.ts": 574,
"src/main/ssh/ssh-keyboard-interactive-wire.test.ts": 261,
"src/main/ssh/ssh-keyboard-interactive.test.ts": 41,
- "src/main/ssh/ssh-known-hosts-source.test.ts": 106,
- "src/main/ssh/ssh-known-hosts.test.ts": 89,
+ "src/main/ssh/config/ssh-known-hosts-source.test.ts": 106,
+ "src/main/ssh/config/ssh-known-hosts.test.ts": 89,
"src/main/ssh/ssh-multi-factor-authentication.test.ts": 109,
"src/main/ssh/ssh-multi-key-authentication.test.ts": 87,
"src/main/ssh/ssh-multiplexer-transport-writer.test.ts": 75,
@@ -5773,16 +5773,16 @@
"src/main/ssh/ssh-quit-abort-upload.test.ts": 252,
"src/main/ssh/ssh-reconnect-error-classification.test.ts": 98,
"src/main/ssh/ssh-reconnect-ladder.test.ts": 75,
- "src/main/ssh/remote-host-answered-failure-producers.test.ts": 321,
+ "src/main/ssh/remote-exec/remote-host-answered-failure-producers.test.ts": 321,
"src/main/ssh/legacy-relay/ssh-relay-endpoint-incumbent-shell.integration.test.ts": 1326,
"src/main/ssh/legacy-relay/ssh-relay-endpoint-incumbent.test.ts": 100,
"src/main/ssh/legacy-relay/ssh-relay-endpoint-pty-count.test.ts": 90,
"src/main/ssh/legacy-relay/ssh-relay-endpoint-runtime.test.ts": 69,
- "src/main/ssh/remote-exec-closed-stdin.test.ts": 89,
- "src/main/ssh/remote-exec-command.test.ts": 130,
- "src/main/ssh/remote-exec-input.test.ts": 92,
+ "src/main/ssh/remote-exec/remote-exec-closed-stdin.test.ts": 89,
+ "src/main/ssh/remote-exec/remote-exec-command.test.ts": 130,
+ "src/main/ssh/remote-exec/remote-exec-input.test.ts": 92,
"src/main/managed-server/install/remote-install-gc-claim-termination.test.ts": 249,
- "src/main/ssh/remote-host-answered-failure.test.ts": 101,
+ "src/main/ssh/remote-exec/remote-host-answered-failure.test.ts": 101,
"src/main/ssh/legacy-relay/ssh-relay-incumbent-process.test.ts": 5329,
"src/main/managed-server/install/remote-install-lock-exited-owner.test.ts": 380,
"src/main/managed-server/install/remote-install-lock-termination.test.ts": 276,
@@ -5802,7 +5802,7 @@
"src/main/ssh/ssh-request-outcome-verdict.test.ts": 37,
"src/main/ssh/ssh-security-key-identity.test.ts": 147,
"src/main/ssh/ssh-session-limit-error.test.ts": 27,
- "src/main/ssh/system-ssh-operations.test.ts": 275,
+ "src/main/ssh/system-transport/system-ssh-operations.test.ts": 275,
"src/main/ssh/ssh-system-transport.integration.test.ts": 277,
"src/main/ssh/ssh-target-id-migration.test.ts": 46,
"src/main/ssh/ssh-target-orcad-claims.test.ts": 306,
@@ -5812,16 +5812,16 @@
"src/main/ssh/ssh-tcp-forwarding-probe.test.ts": 810,
"src/main/ssh/ssh-windows-host-cells.test.ts": 39,
"src/main/ssh/port-forwarding/ssh2-port-forward-listen.test.ts": 30,
- "src/main/ssh/system-ssh-binary.test.ts": 35,
- "src/main/ssh/system-ssh-dynamic-forward-process.test.ts": 240,
- "src/main/ssh/system-ssh-forward-process.test.ts": 251,
- "src/main/ssh/system-ssh-orphaned-forward.test.ts": 86,
- "src/main/ssh/system-ssh-sftp-args.test.ts": 44,
- "src/main/ssh/system-ssh-sftp-path.test.ts": 38,
- "src/main/ssh/system-ssh-upload-plan-budget.test.ts": 336,
- "src/main/ssh/system-ssh-windows-upload.test.ts": 343,
- "src/main/ssh/system-ssh-windows-write-capabilities.test.ts": 35,
- "src/main/ssh/vscode-ssh-authority.test.ts": 48,
+ "src/main/ssh/system-transport/system-ssh-binary.test.ts": 35,
+ "src/main/ssh/system-transport/system-ssh-dynamic-forward-process.test.ts": 240,
+ "src/main/ssh/system-transport/system-ssh-forward-process.test.ts": 251,
+ "src/main/ssh/system-transport/system-ssh-orphaned-forward.test.ts": 86,
+ "src/main/ssh/system-transport/system-ssh-sftp-args.test.ts": 44,
+ "src/main/ssh/system-transport/system-ssh-sftp-path.test.ts": 38,
+ "src/main/ssh/system-transport/system-ssh-upload-plan-budget.test.ts": 336,
+ "src/main/ssh/system-transport/system-ssh-windows-upload.test.ts": 343,
+ "src/main/ssh/system-transport/system-ssh-windows-write-capabilities.test.ts": 35,
+ "src/main/ssh/config/vscode-ssh-authority.test.ts": 48,
"src/main/star-nag/service-direct-star.test.ts": 323,
"src/main/star-nag/service-force-show-races.test.ts": 322,
"src/main/star-nag/service-outcome-telemetry.test.ts": 354,
diff --git a/config/scripts/pr-e2e-route-contracts.test.mjs b/config/scripts/pr-e2e-route-contracts.test.mjs
index 5bfed39aca87..af525da7c2e3 100644
--- a/config/scripts/pr-e2e-route-contracts.test.mjs
+++ b/config/scripts/pr-e2e-route-contracts.test.mjs
@@ -288,7 +288,7 @@ describe('ssh-browser-e2e-routing', () => {
'src/main/browser/browser-network-deferred-socket.ts',
'src/main/browser/browser-network-execution-route.ts',
'src/main/browser/system-ssh-socks-client-socket.ts',
- 'src/main/ssh/system-ssh-dynamic-forward-process.ts',
+ 'src/main/ssh/system-transport/system-ssh-dynamic-forward-process.ts',
'tests/e2e/helpers/docker-ssh-host-target.ts',
'tests/e2e/helpers/docker-ssh-host-image.ts'
]) {
diff --git a/config/scripts/pr-e2e-source-routing.mjs b/config/scripts/pr-e2e-source-routing.mjs
index 46f6f0265aeb..44105317e0f4 100644
--- a/config/scripts/pr-e2e-source-routing.mjs
+++ b/config/scripts/pr-e2e-source-routing.mjs
@@ -276,7 +276,7 @@ export const PR_E2E_SOURCE_ROUTES = [
file === 'tests/e2e/ssh-browser-network-execution-route.docker.unit.test.ts' ||
/^tests\/e2e\/helpers\/docker-ssh-host-(?:image|target)\.ts$/.test(file) ||
(isProductSource(file) &&
- /^src\/main\/(?:browser\/(?:ssh-browser-network-execution-route|browser-network-deferred-socket|browser-network-execution-route|system-ssh-socks-client-socket)|ssh\/system-ssh-dynamic-forward-process)\.ts$/.test(
+ /^src\/main\/(?:browser\/(?:ssh-browser-network-execution-route|browser-network-deferred-socket|browser-network-execution-route|system-ssh-socks-client-socket)|ssh\/system-transport\/system-ssh-dynamic-forward-process)\.ts$/.test(
file
))
},
diff --git a/src/main/active-view-persistence-boundary.test.ts b/src/main/active-view-persistence-boundary.test.ts
index 54112b2b08f1..a951cb361000 100644
--- a/src/main/active-view-persistence-boundary.test.ts
+++ b/src/main/active-view-persistence-boundary.test.ts
@@ -22,7 +22,7 @@ vi.mock('electron', () => ({
vi.mock('./telemetry/client', () => ({ track: vi.fn() }))
vi.mock('./telemetry/cohort-classifier', () => ({ getCohortAtEmit: vi.fn() }))
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: vi.fn(),
sshConfigHostsToTargets: vi.fn()
}))
diff --git a/src/main/agent-hooks/wsl-hook-relay-sentinel.test.ts b/src/main/agent-hooks/wsl-hook-relay-sentinel.test.ts
index 613352b29e76..5503704b86b7 100644
--- a/src/main/agent-hooks/wsl-hook-relay-sentinel.test.ts
+++ b/src/main/agent-hooks/wsl-hook-relay-sentinel.test.ts
@@ -5,7 +5,7 @@ import { EventEmitter } from 'node:events'
import type { ChildProcessWithoutNullStreams } from 'node:child_process'
import { afterEach, describe, expect, it, vi } from 'vitest'
-import { RELAY_SENTINEL, RELAY_SENTINEL_TIMEOUT_MS } from '../ssh/remote-frame-protocol'
+import { RELAY_SENTINEL, RELAY_SENTINEL_TIMEOUT_MS } from '../ssh/remote-exec/remote-frame-protocol'
import {
MAX_STARTUP_BUFFER_BYTES,
waitForWslRelaySentinel,
diff --git a/src/main/agent-hooks/wsl-hook-relay-sentinel.ts b/src/main/agent-hooks/wsl-hook-relay-sentinel.ts
index 47b50eaacfd0..eb392f1b524c 100644
--- a/src/main/agent-hooks/wsl-hook-relay-sentinel.ts
+++ b/src/main/agent-hooks/wsl-hook-relay-sentinel.ts
@@ -4,7 +4,7 @@
// ChildProcess instead of a ClientChannel.
import type { ChildProcessWithoutNullStreams } from 'node:child_process'
-import { RELAY_SENTINEL, RELAY_SENTINEL_TIMEOUT_MS } from '../ssh/remote-frame-protocol'
+import { RELAY_SENTINEL, RELAY_SENTINEL_TIMEOUT_MS } from '../ssh/remote-exec/remote-frame-protocol'
import type { MultiplexerTransport } from '../ssh/ssh-channel-multiplexer'
export const MAX_STARTUP_BUFFER_BYTES = 64 * 1024
diff --git a/src/main/automations/automation-worker-durability.test.ts b/src/main/automations/automation-worker-durability.test.ts
index 22d13899e3b6..1cd77cd8518c 100644
--- a/src/main/automations/automation-worker-durability.test.ts
+++ b/src/main/automations/automation-worker-durability.test.ts
@@ -10,7 +10,7 @@ vi.mock('../telemetry/client', () => ({ track: vi.fn() }))
vi.mock('../telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../ssh/ssh-config-parser', () => ({
+vi.mock('../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/browser/ssh-browser-network-execution-route.ts b/src/main/browser/ssh-browser-network-execution-route.ts
index cadf3597c446..96abc6952bdc 100644
--- a/src/main/browser/ssh-browser-network-execution-route.ts
+++ b/src/main/browser/ssh-browser-network-execution-route.ts
@@ -5,7 +5,7 @@ import type { Client as SshClient } from 'ssh2'
import {
startSystemSshDynamicForwardProcess,
type SystemSshDynamicForwardProcess
-} from '../ssh/system-ssh-dynamic-forward-process'
+} from '../ssh/system-transport/system-ssh-dynamic-forward-process'
import { BrowserNetworkDeferredSocket } from './browser-network-deferred-socket'
import {
browserNetworkExecutionHostKey,
diff --git a/src/main/github/github-enterprise-repository.test.ts b/src/main/github/github-enterprise-repository.test.ts
index d6db52e01b96..1d0be8313406 100644
--- a/src/main/github/github-enterprise-repository.test.ts
+++ b/src/main/github/github-enterprise-repository.test.ts
@@ -16,7 +16,7 @@ vi.mock('../git/runner', () => ({
gitExecFileAsync: gitExecFileAsyncMock
}))
-vi.mock('../ssh/ssh-g-config-resolution', () => ({
+vi.mock('../ssh/config/ssh-g-config-resolution', () => ({
resolveWithSshG: resolveWithSshGMock
}))
diff --git a/src/main/github/github-repository-identity.ssh-host-alias.test.ts b/src/main/github/github-repository-identity.ssh-host-alias.test.ts
index 5b718e397abe..cbc8cb995235 100644
--- a/src/main/github/github-repository-identity.ssh-host-alias.test.ts
+++ b/src/main/github/github-repository-identity.ssh-host-alias.test.ts
@@ -23,7 +23,7 @@ vi.mock('./local-git-config-signature', () => ({
readLocalGitConfigSignature: readLocalGitConfigSignatureMock
}))
-vi.mock('../ssh/ssh-g-config-resolution', () => ({
+vi.mock('../ssh/config/ssh-g-config-resolution', () => ({
resolveWithSshG: resolveWithSshGMock
}))
diff --git a/src/main/github/github-ssh-host-alias-resolution.ts b/src/main/github/github-ssh-host-alias-resolution.ts
index 8decd2ec8d09..8aa033a6b4d1 100644
--- a/src/main/github/github-ssh-host-alias-resolution.ts
+++ b/src/main/github/github-ssh-host-alias-resolution.ts
@@ -1,7 +1,7 @@
import type { GitHubOwnerRepo } from '../../shared/github/pull-request-types'
import { commandExecFileAsync } from '../git/runner'
import { parseWslPath } from '../wsl'
-import { resolveWithSshG } from '../ssh/ssh-g-config-resolution'
+import { resolveWithSshG } from '../ssh/config/ssh-g-config-resolution'
import {
gitHubSshConfigHostAlias,
parseGitHubOwnerRepo,
diff --git a/src/main/ipc/orca-profiles-switch-persistence.test.ts b/src/main/ipc/orca-profiles-switch-persistence.test.ts
index 6365291fd21d..2ec29383d0b9 100644
--- a/src/main/ipc/orca-profiles-switch-persistence.test.ts
+++ b/src/main/ipc/orca-profiles-switch-persistence.test.ts
@@ -30,7 +30,7 @@ vi.mock('../telemetry/client', () => ({ track: vi.fn() }))
vi.mock('../telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../ssh/ssh-config-parser', () => ({
+vi.mock('../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/ipc/pty/pane/pane-owner-replacement.test.ts b/src/main/ipc/pty/pane/pane-owner-replacement.test.ts
index 07ba7d410e36..714f0c095eca 100644
--- a/src/main/ipc/pty/pane/pane-owner-replacement.test.ts
+++ b/src/main/ipc/pty/pane/pane-owner-replacement.test.ts
@@ -7,7 +7,7 @@ vi.mock('../../../telemetry/client', () => ({ track: vi.fn() }))
vi.mock('../../../telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../../../ssh/ssh-config-parser', () => ({
+vi.mock('../../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/ipc/renderer-shutdown-checkpoint-sleep-records.test.ts b/src/main/ipc/renderer-shutdown-checkpoint-sleep-records.test.ts
index d5121cc5f83e..eb9370efcd53 100644
--- a/src/main/ipc/renderer-shutdown-checkpoint-sleep-records.test.ts
+++ b/src/main/ipc/renderer-shutdown-checkpoint-sleep-records.test.ts
@@ -37,7 +37,7 @@ vi.mock('electron', () => ({
}))
vi.mock('../telemetry/client', () => ({ track: vi.fn() }))
vi.mock('../telemetry/cohort-classifier', () => ({ getCohortAtEmit: vi.fn().mockReturnValue({}) }))
-vi.mock('../ssh/ssh-config-parser', () => ({
+vi.mock('../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: vi.fn(),
sshConfigHostsToTargets: vi.fn()
}))
diff --git a/src/main/ipc/session-window-view-save.test.ts b/src/main/ipc/session-window-view-save.test.ts
index 8508d7d5ba5e..3d5e2784c1e4 100644
--- a/src/main/ipc/session-window-view-save.test.ts
+++ b/src/main/ipc/session-window-view-save.test.ts
@@ -30,7 +30,7 @@ vi.mock('electron', () => ({
}))
vi.mock('../telemetry/client', () => ({ track: vi.fn() }))
vi.mock('../telemetry/cohort-classifier', () => ({ getCohortAtEmit: vi.fn().mockReturnValue({}) }))
-vi.mock('../ssh/ssh-config-parser', () => ({
+vi.mock('../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: vi.fn(),
sshConfigHostsToTargets: vi.fn()
}))
diff --git a/src/main/ipc/settings-delayed-response.test.ts b/src/main/ipc/settings-delayed-response.test.ts
index 3b0d5b2ecd5a..ff162527dad9 100644
--- a/src/main/ipc/settings-delayed-response.test.ts
+++ b/src/main/ipc/settings-delayed-response.test.ts
@@ -28,7 +28,7 @@ vi.mock('../telemetry/client', () => ({ track: vi.fn() }))
vi.mock('../telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../ssh/ssh-config-parser', () => ({
+vi.mock('../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/ipc/shell.ts b/src/main/ipc/shell.ts
index 409ff6488579..2591055ae183 100644
--- a/src/main/ipc/shell.ts
+++ b/src/main/ipc/shell.ts
@@ -16,7 +16,7 @@ import {
resolveExternalEditorLaunchSpec,
resolveVsCodeRemoteSshLaunchSpec
} from '../external-editor-launch'
-import { resolveVsCodeSshAuthority } from '../ssh/vscode-ssh-authority'
+import { resolveVsCodeSshAuthority } from '../ssh/config/vscode-ssh-authority'
import { toSshExecutionHostId } from '../../shared/execution-host'
import {
isLocallyOwned,
diff --git a/src/main/ipc/ssh-app-shutdown.test.ts b/src/main/ipc/ssh-app-shutdown.test.ts
index a299063c4b38..cb887bbac1cb 100644
--- a/src/main/ipc/ssh-app-shutdown.test.ts
+++ b/src/main/ipc/ssh-app-shutdown.test.ts
@@ -5,7 +5,7 @@ const mocks = await vi.hoisted(async () => {
return createSshIpcMocks()
})
-vi.mock('../ssh/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
+vi.mock('../ssh/config/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
vi.mock('electron', () => mocks.electron)
vi.mock('../ssh/ssh-connection-store', () => mocks.sshConnectionStore)
vi.mock('./ssh-host-server-connect', () => mocks.hostServerConnect)
diff --git a/src/main/ipc/ssh-connect-decision-cancellation.test.ts b/src/main/ipc/ssh-connect-decision-cancellation.test.ts
index 2685189af841..fb406cec1c04 100644
--- a/src/main/ipc/ssh-connect-decision-cancellation.test.ts
+++ b/src/main/ipc/ssh-connect-decision-cancellation.test.ts
@@ -5,7 +5,7 @@ const mocks = await vi.hoisted(async () => {
return createSshIpcMocks()
})
-vi.mock('../ssh/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
+vi.mock('../ssh/config/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
vi.mock('electron', () => mocks.electron)
vi.mock('../ssh/ssh-connection-store', () => mocks.sshConnectionStore)
vi.mock('./ssh-host-server-connect', () => mocks.hostServerConnect)
diff --git a/src/main/ipc/ssh-credential-cancel.test.ts b/src/main/ipc/ssh-credential-cancel.test.ts
index 5a7766956bdf..f318ba954e23 100644
--- a/src/main/ipc/ssh-credential-cancel.test.ts
+++ b/src/main/ipc/ssh-credential-cancel.test.ts
@@ -5,7 +5,7 @@ const mocks = await vi.hoisted(async () => {
return createSshIpcMocks()
})
-vi.mock('../ssh/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
+vi.mock('../ssh/config/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
vi.mock('electron', () => mocks.electron)
vi.mock('../ssh/ssh-connection-store', () => mocks.sshConnectionStore)
vi.mock('./ssh-host-server-connect', () => mocks.hostServerConnect)
diff --git a/src/main/ipc/ssh-disconnect-cancellation.test.ts b/src/main/ipc/ssh-disconnect-cancellation.test.ts
index 13587401ebb9..403a55b28341 100644
--- a/src/main/ipc/ssh-disconnect-cancellation.test.ts
+++ b/src/main/ipc/ssh-disconnect-cancellation.test.ts
@@ -5,7 +5,7 @@ const mocks = await vi.hoisted(async () => {
return createSshIpcMocks()
})
-vi.mock('../ssh/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
+vi.mock('../ssh/config/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
vi.mock('electron', () => mocks.electron)
vi.mock('../ssh/ssh-connection-store', () => mocks.sshConnectionStore)
vi.mock('./ssh-host-server-connect', () => mocks.hostServerConnect)
diff --git a/src/main/ipc/ssh-handler-reregistration.test.ts b/src/main/ipc/ssh-handler-reregistration.test.ts
index fc9a83dbb825..fb8f5c27aead 100644
--- a/src/main/ipc/ssh-handler-reregistration.test.ts
+++ b/src/main/ipc/ssh-handler-reregistration.test.ts
@@ -5,7 +5,7 @@ const mocks = await vi.hoisted(async () => {
return createSshIpcMocks()
})
-vi.mock('../ssh/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
+vi.mock('../ssh/config/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
vi.mock('electron', () => mocks.electron)
vi.mock('../ssh/ssh-connection-store', () => mocks.sshConnectionStore)
vi.mock('./ssh-host-server-connect', () => mocks.hostServerConnect)
diff --git a/src/main/ipc/ssh-host-user-disconnect.test.ts b/src/main/ipc/ssh-host-user-disconnect.test.ts
index 0b98be00fb41..fe055533d03e 100644
--- a/src/main/ipc/ssh-host-user-disconnect.test.ts
+++ b/src/main/ipc/ssh-host-user-disconnect.test.ts
@@ -9,7 +9,7 @@ const runtime = vi.hoisted(() => {
return { environments, activate: vi.fn(), getStatusOwner: vi.fn(), invalidate: vi.fn() }
})
-vi.mock('../ssh/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
+vi.mock('../ssh/config/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
vi.mock('electron', () => mocks.electron)
vi.mock('../ssh/ssh-connection-store', () => mocks.sshConnectionStore)
vi.mock('./ssh-host-server-connect', () => mocks.hostServerConnect)
diff --git a/src/main/ipc/ssh-sign-in-requirement.test.ts b/src/main/ipc/ssh-sign-in-requirement.test.ts
index a8d0c6ae65a9..6b7a672c3a72 100644
--- a/src/main/ipc/ssh-sign-in-requirement.test.ts
+++ b/src/main/ipc/ssh-sign-in-requirement.test.ts
@@ -5,7 +5,7 @@ const mocks = await vi.hoisted(async () => {
return createSshIpcMocks()
})
-vi.mock('../ssh/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
+vi.mock('../ssh/config/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
vi.mock('electron', () => mocks.electron)
vi.mock('../ssh/ssh-connection-store', () => mocks.sshConnectionStore)
vi.mock('./ssh-host-server-connect', () => mocks.hostServerConnect)
diff --git a/src/main/ipc/ssh-state-broadcast-fanout.test.ts b/src/main/ipc/ssh-state-broadcast-fanout.test.ts
index 8e1fa64bb1f8..8859f63230c2 100644
--- a/src/main/ipc/ssh-state-broadcast-fanout.test.ts
+++ b/src/main/ipc/ssh-state-broadcast-fanout.test.ts
@@ -5,7 +5,7 @@ const mocks = await vi.hoisted(async () => {
return createSshIpcMocks()
})
-vi.mock('../ssh/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
+vi.mock('../ssh/config/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
vi.mock('electron', () => mocks.electron)
vi.mock('../ssh/ssh-connection-store', () => mocks.sshConnectionStore)
vi.mock('./ssh-host-server-connect', () => mocks.hostServerConnect)
diff --git a/src/main/ipc/ssh-target-crud-handlers.ts b/src/main/ipc/ssh-target-crud-handlers.ts
index ab5ea2d2cdb1..abd803fe872d 100644
--- a/src/main/ipc/ssh-target-crud-handlers.ts
+++ b/src/main/ipc/ssh-target-crud-handlers.ts
@@ -10,7 +10,7 @@ import type {
import {
listUserSshConfigHostSummaries,
resolveUserSshConfigHost
-} from '../ssh/ssh-config-host-picker'
+} from '../ssh/config/ssh-config-host-picker'
import { getManagedOrcadFenceEnvironmentId } from '../../shared/managed-orcad-ssh-owner'
import { closeOrcadManagedTunnel } from '../managed-server/lifecycle/orcad-managed-tunnel'
import { rotateSshProviderAuthority } from '../ssh/ssh-provider-authority'
diff --git a/src/main/ipc/ssh-target-registry.test.ts b/src/main/ipc/ssh-target-registry.test.ts
index e4444a3dcc03..d56d6807bd9e 100644
--- a/src/main/ipc/ssh-target-registry.test.ts
+++ b/src/main/ipc/ssh-target-registry.test.ts
@@ -5,7 +5,7 @@ const mocks = await vi.hoisted(async () => {
return createSshIpcMocks()
})
-vi.mock('../ssh/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
+vi.mock('../ssh/config/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
vi.mock('electron', () => mocks.electron)
vi.mock('../ssh/ssh-connection-store', () => mocks.sshConnectionStore)
vi.mock('./ssh-host-server-connect', () => mocks.hostServerConnect)
diff --git a/src/main/ipc/ssh.test.ts b/src/main/ipc/ssh.test.ts
index 96ab716211d2..b261a9283550 100644
--- a/src/main/ipc/ssh.test.ts
+++ b/src/main/ipc/ssh.test.ts
@@ -5,7 +5,7 @@ const mocks = await vi.hoisted(async () => {
return createSshIpcMocks()
})
-vi.mock('../ssh/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
+vi.mock('../ssh/config/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
vi.mock('electron', () => mocks.electron)
vi.mock('../ssh/ssh-connection-store', () => mocks.sshConnectionStore)
vi.mock('./ssh-host-server-connect', () => mocks.hostServerConnect)
diff --git a/src/main/managed-server/activation/orcad-activation-crash-recovery.test.ts b/src/main/managed-server/activation/orcad-activation-crash-recovery.test.ts
index f3fa0e0d6b53..4edbef24b431 100644
--- a/src/main/managed-server/activation/orcad-activation-crash-recovery.test.ts
+++ b/src/main/managed-server/activation/orcad-activation-crash-recovery.test.ts
@@ -1,5 +1,5 @@
import { beforeEach, describe, expect, it, vi } from 'vitest'
-import type * as ExecCommandModule from '../../ssh/remote-exec-command'
+import type * as ExecCommandModule from '../../ssh/remote-exec/remote-exec-command'
import type * as RecordFile from '../install/orcad-remote-record-file'
import type * as InstallLock from '../install/remote-install-lock'
import type * as VersionedInstall from '../install/remote-versioned-install'
@@ -11,7 +11,7 @@ vi.mock('node:crypto', async (importOriginal) => {
return { ...actual, randomUUID: () => uuid.fixed ?? actual.randomUUID() }
})
-vi.mock('../../ssh/remote-exec-command', async (importOriginal) => ({
+vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand: vi.fn()
}))
@@ -38,7 +38,7 @@ vi.mock('../../ssh/orcad-local-build-hash', () => ({
computeLocalOrcadBuildHash: () => 'abc123def4567890'
}))
-import { execCommand } from '../../ssh/remote-exec-command'
+import { execCommand } from '../../ssh/remote-exec/remote-exec-command'
import { acquireInstallLock } from '../install/remote-install-lock'
import { writeAtomicOrcadRemoteRecord } from '../install/orcad-remote-record-file'
import { deployOrcad } from '../../ssh/orcad-remote-deploy'
diff --git a/src/main/managed-server/activation/orcad-activation-fence-generation.test.ts b/src/main/managed-server/activation/orcad-activation-fence-generation.test.ts
index 4517d8c43a54..66664d53f74a 100644
--- a/src/main/managed-server/activation/orcad-activation-fence-generation.test.ts
+++ b/src/main/managed-server/activation/orcad-activation-fence-generation.test.ts
@@ -11,18 +11,18 @@ import {
import { tmpdir } from 'node:os'
import { join } from 'node:path'
import { afterEach, describe, expect, it, vi } from 'vitest'
-import type * as ExecCommandModule from '../../ssh/remote-exec-command'
+import type * as ExecCommandModule from '../../ssh/remote-exec/remote-exec-command'
// Every remote command runs in a real local shell, so the host-side checks are the real ones.
const shell = vi.hoisted((): { env: NodeJS.ProcessEnv | undefined } => ({ env: undefined }))
-vi.mock('../../ssh/remote-exec-command', async (importOriginal) => {
+vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => {
const { runProcess } = await import('@orca/process-host')
return {
...(await importOriginal()),
execCommand: async (_conn: unknown, command: string) => {
const result = await runProcess({ program: '/bin/sh', args: ['-c', command], env: shell.env })
if (result.code !== 0) {
- const { sshCommandExitError } = await import('../../ssh/remote-exec-command')
+ const { sshCommandExitError } = await import('../../ssh/remote-exec/remote-exec-command')
throw sshCommandExitError(command, result.code ?? 1, result.stdout)
}
return result.stdout
diff --git a/src/main/managed-server/activation/orcad-activation-fence-scope.ts b/src/main/managed-server/activation/orcad-activation-fence-scope.ts
index 13504db08348..910b4c6adbdb 100644
--- a/src/main/managed-server/activation/orcad-activation-fence-scope.ts
+++ b/src/main/managed-server/activation/orcad-activation-fence-scope.ts
@@ -9,7 +9,7 @@
*/
import { AsyncLocalStorage } from 'node:async_hooks'
import { shellEscape } from '../../ssh/ssh-connection-utils'
-import { isSshCommandExitError } from '../../ssh/remote-exec-command'
+import { isSshCommandExitError } from '../../ssh/remote-exec/remote-exec-command'
export const ORCAD_FENCE_OWNER_FILENAME = '.orca-fence-owner'
export const ORCAD_FENCE_LOST_MARKER = '__ORCAD_FENCE_LOST__'
diff --git a/src/main/managed-server/activation/orcad-activation-host-test-harness.ts b/src/main/managed-server/activation/orcad-activation-host-test-harness.ts
index 08aa143edee3..0373e798c55e 100644
--- a/src/main/managed-server/activation/orcad-activation-host-test-harness.ts
+++ b/src/main/managed-server/activation/orcad-activation-host-test-harness.ts
@@ -10,7 +10,7 @@ import {
type OrcadActivationRecord
} from './orcad-activation-record'
import { isSnapshotCaptureCommand } from '../../ssh/orcad-snapshot-capture-command'
-import { sshCommandExitError } from '../../ssh/remote-exec-command'
+import { sshCommandExitError } from '../../ssh/remote-exec/remote-exec-command'
export const OLD = '0.1.0+aa01'
export const NEW = '0.2.0+bb01'
diff --git a/src/main/managed-server/activation/orcad-activation-lock.ts b/src/main/managed-server/activation/orcad-activation-lock.ts
index 7300e3f9299e..7be50609818a 100644
--- a/src/main/managed-server/activation/orcad-activation-lock.ts
+++ b/src/main/managed-server/activation/orcad-activation-lock.ts
@@ -12,7 +12,7 @@ import {
withoutAbortSignal,
type OrcadRemoteExecTarget
} from '../install/orcad-remote-runtime-control'
-import { isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec-command'
+import { isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec/remote-exec-command'
import { acquireInstallLock, RemoteInstallLockBusyError } from '../install/remote-install-lock'
import {
orphanInstallLockCommand,
diff --git a/src/main/managed-server/activation/orcad-activation-record-store.ts b/src/main/managed-server/activation/orcad-activation-record-store.ts
index 693820b9f4e3..9879b89c3eff 100644
--- a/src/main/managed-server/activation/orcad-activation-record-store.ts
+++ b/src/main/managed-server/activation/orcad-activation-record-store.ts
@@ -6,7 +6,7 @@
* activated" would deploy over a live install and lose its rollback target.
*/
import type { OrcadHostTransport } from '../../ssh/orcad-host-transport'
-import { RELAY_REMOTE_DIR } from '../../ssh/remote-frame-protocol'
+import { RELAY_REMOTE_DIR } from '../../ssh/remote-exec/remote-frame-protocol'
import {
ORCAD_ACTIVATION_FILENAME,
emptyOrcadActivationRecord,
diff --git a/src/main/managed-server/activation/orcad-activation-transaction.test.ts b/src/main/managed-server/activation/orcad-activation-transaction.test.ts
index b51e187acaef..e75b55103efb 100644
--- a/src/main/managed-server/activation/orcad-activation-transaction.test.ts
+++ b/src/main/managed-server/activation/orcad-activation-transaction.test.ts
@@ -1,8 +1,8 @@
import { describe, expect, it, vi } from 'vitest'
-import type * as ExecCommandModule from '../../ssh/remote-exec-command'
+import type * as ExecCommandModule from '../../ssh/remote-exec/remote-exec-command'
import type * as InstallLock from '../install/remote-install-lock'
-vi.mock('../../ssh/remote-exec-command', async (importOriginal) => ({
+vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand: vi.fn().mockResolvedValue('')
}))
@@ -11,7 +11,7 @@ vi.mock('../install/remote-install-lock', async (importOriginal) => ({
acquireInstallLock: vi.fn().mockResolvedValue(undefined)
}))
-import { execCommand } from '../../ssh/remote-exec-command'
+import { execCommand } from '../../ssh/remote-exec/remote-exec-command'
import { acquireInstallLock, RemoteInstallLockBusyError } from '../install/remote-install-lock'
import {
parseOrcadActivationTransaction,
diff --git a/src/main/managed-server/activation/orcad-activation-transaction.ts b/src/main/managed-server/activation/orcad-activation-transaction.ts
index 2de8fd077b3c..0e7ba2f36cfc 100644
--- a/src/main/managed-server/activation/orcad-activation-transaction.ts
+++ b/src/main/managed-server/activation/orcad-activation-transaction.ts
@@ -25,7 +25,7 @@ import {
} from '../lifecycle/orcad-decommission-transaction'
import { errorMessage } from '../../../shared/error-message'
import { RELAY_INSTALL_LOCK_NAME } from '../../../shared/relay-install-lock-name'
-import { RELAY_REMOTE_DIR } from '../../ssh/remote-frame-protocol'
+import { RELAY_REMOTE_DIR } from '../../ssh/remote-exec/remote-frame-protocol'
import { joinRemotePath, type RemoteHostPlatform } from '../../ssh/ssh-remote-platform'
export const ORCAD_ACTIVATION_TRANSACTION_FILENAME = 'transaction.json'
diff --git a/src/main/managed-server/host-state/orcad-machine-claim-command.ts b/src/main/managed-server/host-state/orcad-machine-claim-command.ts
index ad8c6e60dc91..6c6058f4a5b8 100644
--- a/src/main/managed-server/host-state/orcad-machine-claim-command.ts
+++ b/src/main/managed-server/host-state/orcad-machine-claim-command.ts
@@ -1,6 +1,6 @@
import { randomUUID } from 'node:crypto'
import { shellEscape } from '../../ssh/ssh-connection-utils'
-import { RELAY_REMOTE_DIR } from '../../ssh/remote-frame-protocol'
+import { RELAY_REMOTE_DIR } from '../../ssh/remote-exec/remote-frame-protocol'
import {
ORCAD_MACHINE_CLAIM_FILENAME,
ORCAD_MACHINE_CLAIM_SCHEMA_VERSION
diff --git a/src/main/managed-server/host-state/orcad-machine-home.test.ts b/src/main/managed-server/host-state/orcad-machine-home.test.ts
index e728ffb65055..1d55ce1ae95a 100644
--- a/src/main/managed-server/host-state/orcad-machine-home.test.ts
+++ b/src/main/managed-server/host-state/orcad-machine-home.test.ts
@@ -12,7 +12,7 @@ import {
import { tmpdir } from 'node:os'
import { join } from 'node:path'
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
-import type * as ExecCommandModule from '../../ssh/remote-exec-command'
+import type * as ExecCommandModule from '../../ssh/remote-exec/remote-exec-command'
import type { OrcadMachineHomeProbe } from './orcad-machine-home'
import type { OrcadHostTransport } from '../../ssh/orcad-host-transport'
import type { RemoteHostPlatform } from '../../ssh/ssh-remote-platform'
@@ -21,7 +21,7 @@ import type { RemoteHostPlatform } from '../../ssh/ssh-remote-platform'
const shell = vi.hoisted((): { env: NodeJS.ProcessEnv | undefined } => ({
env: undefined
}))
-vi.mock('../../ssh/remote-exec-command', async (importOriginal) => {
+vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => {
const { runProcess } = await import('@orca/process-host')
return {
...(await importOriginal()),
@@ -32,7 +32,7 @@ vi.mock('../../ssh/remote-exec-command', async (importOriginal) => {
env: conn.env ?? shell.env
})
if (result.code !== 0) {
- const { sshCommandExitError } = await import('../../ssh/remote-exec-command')
+ const { sshCommandExitError } = await import('../../ssh/remote-exec/remote-exec-command')
throw sshCommandExitError(command, result.code ?? 1, result.stdout)
}
return result.stdout
diff --git a/src/main/managed-server/host-state/orcad-machine-home.ts b/src/main/managed-server/host-state/orcad-machine-home.ts
index 7ca9beb35626..1404fd542210 100644
--- a/src/main/managed-server/host-state/orcad-machine-home.ts
+++ b/src/main/managed-server/host-state/orcad-machine-home.ts
@@ -12,7 +12,7 @@
*/
import { createHash } from 'node:crypto'
import { shellEscape } from '../../ssh/ssh-connection-utils'
-import { RELAY_REMOTE_DIR } from '../../ssh/remote-frame-protocol'
+import { RELAY_REMOTE_DIR } from '../../ssh/remote-exec/remote-frame-protocol'
import { ORCAD_ACTIVATION_FILENAME } from '../activation/orcad-activation-record'
import { parseDarwinPlatformUuid } from '../../persistence/profile-state/profile-state-access-identity'
import {
diff --git a/src/main/managed-server/host-state/orcad-state-mutation-exec.test.ts b/src/main/managed-server/host-state/orcad-state-mutation-exec.test.ts
index fde1f054db0a..6865d6d08a7e 100644
--- a/src/main/managed-server/host-state/orcad-state-mutation-exec.test.ts
+++ b/src/main/managed-server/host-state/orcad-state-mutation-exec.test.ts
@@ -7,7 +7,7 @@ import {
execOrcadStateMutationOr
} from './orcad-state-mutation-exec'
import { execOrcadRemoteOr } from '../install/orcad-remote-runtime-control'
-import { isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec-command'
+import { isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec/remote-exec-command'
import { getRemoteHostPlatform } from '../../ssh/ssh-remote-platform'
import type { OrcadHostTransport } from '../../ssh/orcad-host-transport'
diff --git a/src/main/managed-server/host-state/orcad-state-mutation-exec.ts b/src/main/managed-server/host-state/orcad-state-mutation-exec.ts
index 69dc25e495d3..86cd33909f38 100644
--- a/src/main/managed-server/host-state/orcad-state-mutation-exec.ts
+++ b/src/main/managed-server/host-state/orcad-state-mutation-exec.ts
@@ -12,7 +12,10 @@ import {
ORCAD_STATE_MUTATION_DEADLINE
} from './orcad-state-snapshot-members'
import type { OrcadRemoteExecTarget } from '../install/orcad-remote-runtime-control'
-import { execCommand, isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec-command'
+import {
+ execCommand,
+ isUnconfirmedSshCommandTermination
+} from '../../ssh/remote-exec/remote-exec-command'
import { isOrcadFenceLost, OrcadFenceLostError } from '../activation/orcad-activation-fence-scope'
// Longer than the host's own deadline, so the host kills the work before the client gives up.
diff --git a/src/main/managed-server/host-state/orcad-state-mutation-timeout.test.ts b/src/main/managed-server/host-state/orcad-state-mutation-timeout.test.ts
index 8e883245041c..9af2a8287664 100644
--- a/src/main/managed-server/host-state/orcad-state-mutation-timeout.test.ts
+++ b/src/main/managed-server/host-state/orcad-state-mutation-timeout.test.ts
@@ -5,12 +5,12 @@
* command shape) runs beside it, as the two restores did on a real host.
*/
import { beforeEach, describe, expect, it, vi } from 'vitest'
-import type * as ExecCommandModule from '../../ssh/remote-exec-command'
+import type * as ExecCommandModule from '../../ssh/remote-exec/remote-exec-command'
import type * as RecordFile from '../install/orcad-remote-record-file'
import type * as InstallLock from '../install/remote-install-lock'
import type * as VersionedInstall from '../install/remote-versioned-install'
-vi.mock('../../ssh/remote-exec-command', async (importOriginal) => ({
+vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand: vi.fn()
}))
@@ -39,7 +39,7 @@ import {
execCommand,
SSH_EXEC_TIMEOUT_CODE,
isUnconfirmedSshCommandTermination
-} from '../../ssh/remote-exec-command'
+} from '../../ssh/remote-exec/remote-exec-command'
import { acquireInstallLock } from '../install/remote-install-lock'
import { writeAtomicOrcadRemoteRecord } from '../install/orcad-remote-record-file'
import { deployOrcad } from '../../ssh/orcad-remote-deploy'
diff --git a/src/main/managed-server/install/orcad-remote-context.ts b/src/main/managed-server/install/orcad-remote-context.ts
index 07401dba139e..9d5b318de482 100644
--- a/src/main/managed-server/install/orcad-remote-context.ts
+++ b/src/main/managed-server/install/orcad-remote-context.ts
@@ -23,7 +23,7 @@ import { orcadMachineClaimCommand } from '../host-state/orcad-machine-claim-comm
import { execOrcadRemote, type OrcadRemoteExecTarget } from './orcad-remote-runtime-control'
import { readRemoteHomeCommand } from '../../ssh/ssh-remote-commands'
import { shellEscape } from '../../ssh/ssh-connection-utils'
-import { RELAY_REMOTE_DIR } from '../../ssh/remote-frame-protocol'
+import { RELAY_REMOTE_DIR } from '../../ssh/remote-exec/remote-frame-protocol'
import {
isWindowsRemoteHost,
joinRemotePath,
diff --git a/src/main/managed-server/install/orcad-remote-decommission.test.ts b/src/main/managed-server/install/orcad-remote-decommission.test.ts
index a6419c4bdd86..873b24cd9f74 100644
--- a/src/main/managed-server/install/orcad-remote-decommission.test.ts
+++ b/src/main/managed-server/install/orcad-remote-decommission.test.ts
@@ -1,9 +1,9 @@
import { beforeEach, describe, expect, it, vi } from 'vitest'
-import type * as ExecCommandModule from '../../ssh/remote-exec-command'
+import type * as ExecCommandModule from '../../ssh/remote-exec/remote-exec-command'
import type * as RecordFile from './orcad-remote-record-file'
import type * as InstallLock from './remote-install-lock'
-vi.mock('../../ssh/remote-exec-command', async (importOriginal) => ({
+vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand: vi.fn()
}))
@@ -17,7 +17,7 @@ vi.mock('./orcad-remote-record-file', async (importOriginal) => ({
writeAtomicOrcadRemoteRecord: vi.fn()
}))
-import { execCommand } from '../../ssh/remote-exec-command'
+import { execCommand } from '../../ssh/remote-exec/remote-exec-command'
import { acquireInstallLock } from './remote-install-lock'
import { writeAtomicOrcadRemoteRecord } from './orcad-remote-record-file'
import { decommissionRemoteOrcad } from './orcad-remote-decommission'
diff --git a/src/main/managed-server/install/orcad-remote-gc.test.ts b/src/main/managed-server/install/orcad-remote-gc.test.ts
index 372b548a3285..4be62080738c 100644
--- a/src/main/managed-server/install/orcad-remote-gc.test.ts
+++ b/src/main/managed-server/install/orcad-remote-gc.test.ts
@@ -1,7 +1,7 @@
-import type * as ExecCommandModule from '../../ssh/remote-exec-command'
+import type * as ExecCommandModule from '../../ssh/remote-exec/remote-exec-command'
import { beforeEach, describe, expect, it, vi } from 'vitest'
-vi.mock('../../ssh/remote-exec-command', async (importOriginal) => ({
+vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand: vi.fn()
}))
@@ -21,7 +21,7 @@ vi.mock('./remote-install-lock', () => ({
isRelayInstallLockStale: vi.fn().mockResolvedValue(false)
}))
-import { execCommand } from '../../ssh/remote-exec-command'
+import { execCommand } from '../../ssh/remote-exec/remote-exec-command'
import { gcOldOrcadVersions } from './orcad-remote-gc'
import { emptyOrcadActivationRecord } from '../activation/orcad-activation-record'
import { serializeOrcadActivationTransaction } from '../activation/orcad-activation-transaction'
diff --git a/src/main/managed-server/install/orcad-remote-gc.ts b/src/main/managed-server/install/orcad-remote-gc.ts
index e9a66f8f4043..7bf3eafcec57 100644
--- a/src/main/managed-server/install/orcad-remote-gc.ts
+++ b/src/main/managed-server/install/orcad-remote-gc.ts
@@ -14,7 +14,10 @@
* pinned too, and an unreadable journal skips the pass entirely.
*/
import type { OrcadHostTransport } from '../../ssh/orcad-host-transport'
-import { execCommand, isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec-command'
+import {
+ execCommand,
+ isUnconfirmedSshCommandTermination
+} from '../../ssh/remote-exec/remote-exec-command'
import { ORCAD_INSTALL_MODEL } from './remote-install-model'
import { gcOldRemoteInstallVersions } from './remote-install-gc'
import {
@@ -33,7 +36,7 @@ import {
joinRemotePath,
type RemoteHostPlatform
} from '../../ssh/ssh-remote-platform'
-import { RELAY_REMOTE_DIR } from '../../ssh/remote-frame-protocol'
+import { RELAY_REMOTE_DIR } from '../../ssh/remote-exec/remote-frame-protocol'
import { orcadWindowsHomeOpCommand } from './orcad-remote-windows-node'
import { ORCAD_WINDOWS_LIVENESS_MANY_MARKER } from '../host-state/orcad-windows-host-script'
diff --git a/src/main/managed-server/install/orcad-remote-install-termination.test.ts b/src/main/managed-server/install/orcad-remote-install-termination.test.ts
index 127a0298ee4a..99ad8ccd9ff8 100644
--- a/src/main/managed-server/install/orcad-remote-install-termination.test.ts
+++ b/src/main/managed-server/install/orcad-remote-install-termination.test.ts
@@ -1,7 +1,7 @@
-import type * as ExecCommandModule from '../../ssh/remote-exec-command'
+import type * as ExecCommandModule from '../../ssh/remote-exec/remote-exec-command'
import { beforeEach, describe, expect, it, vi } from 'vitest'
-vi.mock('../../ssh/remote-exec-command', async (importOriginal) => ({
+vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand: vi.fn()
}))
@@ -18,7 +18,7 @@ vi.mock('./orcad-remote-node-runtime', () => ({
}))
import type { OrcadHostTransport } from '../../ssh/orcad-host-transport'
-import { execCommand } from '../../ssh/remote-exec-command'
+import { execCommand } from '../../ssh/remote-exec/remote-exec-command'
import { uploadRelayDirectory, writeRelayFile } from './remote-install-transfers'
import { installOrcadBundle } from './orcad-remote-install'
import { getRemoteHostPlatform } from '../../ssh/ssh-remote-platform'
diff --git a/src/main/managed-server/install/orcad-remote-install.ts b/src/main/managed-server/install/orcad-remote-install.ts
index 59372409cab2..260e2c45ad46 100644
--- a/src/main/managed-server/install/orcad-remote-install.ts
+++ b/src/main/managed-server/install/orcad-remote-install.ts
@@ -4,7 +4,10 @@ import { orcadAgentBrowserNativeName } from '../../../shared/orcad-agent-browser
import type { NodeRuntimeTarget } from '../../../shared/node-runtime-pin'
import { ensureRemoteOrcadNodeRuntime } from './orcad-remote-node-runtime'
import { recordedRemoteNodeRuntimeProbeCommand } from './orcad-remote-node-runtime-recorded-probe'
-import { execCommand, isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec-command'
+import {
+ execCommand,
+ isUnconfirmedSshCommandTermination
+} from '../../ssh/remote-exec/remote-exec-command'
import { shellEscape } from '../../ssh/ssh-connection-utils'
import type { OrcadHostTransport } from '../../ssh/orcad-host-transport'
import { joinRemotePath, type RemoteHostPlatform } from '../../ssh/ssh-remote-platform'
diff --git a/src/main/managed-server/install/orcad-remote-launch.ts b/src/main/managed-server/install/orcad-remote-launch.ts
index 38726eb80776..e20ffdbdfef0 100644
--- a/src/main/managed-server/install/orcad-remote-launch.ts
+++ b/src/main/managed-server/install/orcad-remote-launch.ts
@@ -25,7 +25,7 @@ import {
remoteDirname,
type RemoteHostPlatform
} from '../../ssh/ssh-remote-platform'
-import { RELAY_REMOTE_DIR } from '../../ssh/remote-frame-protocol'
+import { RELAY_REMOTE_DIR } from '../../ssh/remote-exec/remote-frame-protocol'
import { ORCAD_WSL_HOST_ENV } from '../../ipc/wsl-guest-windows-drive-path'
import {
assertPosixOrcadHost as assertPosixHost,
diff --git a/src/main/managed-server/install/orcad-remote-lifecycle-windows.test.ts b/src/main/managed-server/install/orcad-remote-lifecycle-windows.test.ts
index bb7a72827c88..ce516ffbde5d 100644
--- a/src/main/managed-server/install/orcad-remote-lifecycle-windows.test.ts
+++ b/src/main/managed-server/install/orcad-remote-lifecycle-windows.test.ts
@@ -1,4 +1,4 @@
-import type * as ExecCommandModule from '../../ssh/remote-exec-command'
+import type * as ExecCommandModule from '../../ssh/remote-exec/remote-exec-command'
import type * as TerminalBarrier from '../lifecycle/orcad-rollback-terminal-barrier'
/**
* The deploy and rollback drivers end to end against a Windows host whose every host op is answered by a
@@ -7,7 +7,7 @@ import type * as TerminalBarrier from '../lifecycle/orcad-rollback-terminal-barr
import { beforeEach, describe, expect, it, vi } from 'vitest'
import type * as RecordFile from './orcad-remote-record-file'
-vi.mock('../../ssh/remote-exec-command', async (importOriginal) => ({
+vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand: vi.fn()
}))
@@ -50,7 +50,7 @@ vi.mock('./remote-versioned-install', async (importOriginal) => ({
abandonInstall: vi.fn().mockResolvedValue(undefined)
}))
-import { execCommand } from '../../ssh/remote-exec-command'
+import { execCommand } from '../../ssh/remote-exec/remote-exec-command'
import { deployOrcad, type OrcadDeployOptions } from '../../ssh/orcad-remote-deploy'
import { rollbackOrcad } from './orcad-remote-rollback'
import { emptyOrcadActivationRecord } from '../activation/orcad-activation-record'
diff --git a/src/main/managed-server/install/orcad-remote-log-tail.test.ts b/src/main/managed-server/install/orcad-remote-log-tail.test.ts
index 04aaa6406911..7827d56999b4 100644
--- a/src/main/managed-server/install/orcad-remote-log-tail.test.ts
+++ b/src/main/managed-server/install/orcad-remote-log-tail.test.ts
@@ -1,4 +1,4 @@
-import type * as ExecCommandModule from '../../ssh/remote-exec-command'
+import type * as ExecCommandModule from '../../ssh/remote-exec/remote-exec-command'
import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
@@ -15,7 +15,7 @@ import { ORCAD_WINDOWS_HOST_SCRIPT } from '../host-state/orcad-windows-host-scri
import { getRemoteHostPlatform } from '../../ssh/ssh-remote-platform'
const execCommand = vi.hoisted(() => vi.fn())
-vi.mock('../../ssh/remote-exec-command', async (importOriginal) => ({
+vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand
}))
diff --git a/src/main/managed-server/install/orcad-remote-log-tail.ts b/src/main/managed-server/install/orcad-remote-log-tail.ts
index b06882659ad9..e4b4d336af8e 100644
--- a/src/main/managed-server/install/orcad-remote-log-tail.ts
+++ b/src/main/managed-server/install/orcad-remote-log-tail.ts
@@ -6,7 +6,7 @@
import { redactString } from '../../observability/redactor'
import { shellEscape } from '../../ssh/ssh-connection-utils'
import { ORCAD_LOG_FILENAME } from './orcad-remote-host-support'
-import { execCommand } from '../../ssh/remote-exec-command'
+import { execCommand } from '../../ssh/remote-exec/remote-exec-command'
import {
isWindowsRemoteHost,
joinRemotePath,
diff --git a/src/main/managed-server/install/orcad-remote-node-runtime-promotion-lock.test.ts b/src/main/managed-server/install/orcad-remote-node-runtime-promotion-lock.test.ts
index 014bbfc9713b..dccfcdffdc5b 100644
--- a/src/main/managed-server/install/orcad-remote-node-runtime-promotion-lock.test.ts
+++ b/src/main/managed-server/install/orcad-remote-node-runtime-promotion-lock.test.ts
@@ -1,4 +1,4 @@
-import type * as ExecCommandModule from '../../ssh/remote-exec-command'
+import type * as ExecCommandModule from '../../ssh/remote-exec/remote-exec-command'
import { mkdtempSync, rmSync, writeFileSync } from 'node:fs'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
@@ -13,10 +13,10 @@ import {
REMOTE_NODE_RUNTIME_READY
} from '../../ssh/orcad-remote-node-runtime-report'
import { RUNTIME_STORE_LOCK_NAME } from './remote-node-runtime-store-lock'
-import { execCommand } from '../../ssh/remote-exec-command'
+import { execCommand } from '../../ssh/remote-exec/remote-exec-command'
import { getRemoteHostPlatform } from '../../ssh/ssh-remote-platform'
-vi.mock('../../ssh/remote-exec-command', async (importOriginal) => ({
+vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand: vi.fn()
}))
diff --git a/src/main/managed-server/install/orcad-remote-node-runtime-recorded-probe.test.ts b/src/main/managed-server/install/orcad-remote-node-runtime-recorded-probe.test.ts
index be196c52d08b..8462ec5fd6ca 100644
--- a/src/main/managed-server/install/orcad-remote-node-runtime-recorded-probe.test.ts
+++ b/src/main/managed-server/install/orcad-remote-node-runtime-recorded-probe.test.ts
@@ -28,11 +28,11 @@ import {
recordedRemoteNodeRuntimeProbeCommand,
REMOTE_NODE_RUNTIME_HASHED_STAT_FILENAME
} from './orcad-remote-node-runtime-recorded-probe'
-import { execCommand } from '../../ssh/remote-exec-command'
-import type * as ExecCommandModule from '../../ssh/remote-exec-command'
+import { execCommand } from '../../ssh/remote-exec/remote-exec-command'
+import type * as ExecCommandModule from '../../ssh/remote-exec/remote-exec-command'
import { getRemoteHostPlatform } from '../../ssh/ssh-remote-platform'
-vi.mock('../../ssh/remote-exec-command', async (importOriginal) => ({
+vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand: vi.fn()
}))
diff --git a/src/main/managed-server/install/orcad-remote-node-runtime-slow-hash.test.ts b/src/main/managed-server/install/orcad-remote-node-runtime-slow-hash.test.ts
index 19a97fcda204..132de1faee2d 100644
--- a/src/main/managed-server/install/orcad-remote-node-runtime-slow-hash.test.ts
+++ b/src/main/managed-server/install/orcad-remote-node-runtime-slow-hash.test.ts
@@ -1,4 +1,4 @@
-import type * as ExecCommandModule from '../../ssh/remote-exec-command'
+import type * as ExecCommandModule from '../../ssh/remote-exec/remote-exec-command'
import { existsSync, mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
@@ -16,11 +16,11 @@ import {
REMOTE_NODE_RUNTIME_VERIFIED_MARKER
} from '../../ssh/orcad-remote-node-runtime-report'
import { RUNTIME_STORE_LOCK_NAME, withRuntimeStoreLock } from './remote-node-runtime-store-lock'
-import { execCommand } from '../../ssh/remote-exec-command'
+import { execCommand } from '../../ssh/remote-exec/remote-exec-command'
import { uploadRelayDirectory } from './remote-install-transfers'
import { getRemoteHostPlatform } from '../../ssh/ssh-remote-platform'
-vi.mock('../../ssh/remote-exec-command', async (importOriginal) => ({
+vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand: vi.fn()
}))
diff --git a/src/main/managed-server/install/orcad-remote-node-runtime-windows.test.ts b/src/main/managed-server/install/orcad-remote-node-runtime-windows.test.ts
index 2ececda46fc8..afa80f46cfb7 100644
--- a/src/main/managed-server/install/orcad-remote-node-runtime-windows.test.ts
+++ b/src/main/managed-server/install/orcad-remote-node-runtime-windows.test.ts
@@ -1,9 +1,9 @@
-import type * as ExecCommandModule from '../../ssh/remote-exec-command'
+import type * as ExecCommandModule from '../../ssh/remote-exec/remote-exec-command'
import path from 'node:path'
import { beforeEach, describe, expect, it, vi } from 'vitest'
import { NODE_RUNTIME_ASSETS, NODE_RUNTIME_PIN } from '../../../shared/node-runtime-pin'
import type { OrcadHostTransport } from '../../ssh/orcad-host-transport'
-import { execCommand } from '../../ssh/remote-exec-command'
+import { execCommand } from '../../ssh/remote-exec/remote-exec-command'
import { uploadRelayDirectory } from './remote-install-transfers'
import {
ensureRemoteOrcadNodeRuntime,
@@ -25,7 +25,7 @@ import {
import { getRemoteHostPlatform } from '../../ssh/ssh-remote-platform'
import { decodeRemotePowerShellScript } from '../../ssh/ssh-remote-powershell'
-vi.mock('../../ssh/remote-exec-command', async (importOriginal) => ({
+vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand: vi.fn()
}))
diff --git a/src/main/managed-server/install/orcad-remote-node-runtime.ts b/src/main/managed-server/install/orcad-remote-node-runtime.ts
index 62cebf3276df..b06cbf5a818e 100644
--- a/src/main/managed-server/install/orcad-remote-node-runtime.ts
+++ b/src/main/managed-server/install/orcad-remote-node-runtime.ts
@@ -24,7 +24,10 @@ import {
} from '../../../shared/orcad-artifacts'
import type { OrcadHostTransport } from '../../ssh/orcad-host-transport'
import { shellEscape } from '../../ssh/ssh-connection-utils'
-import { execCommand, isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec-command'
+import {
+ execCommand,
+ isUnconfirmedSshCommandTermination
+} from '../../ssh/remote-exec/remote-exec-command'
import { uploadRelayDirectory } from './remote-install-transfers'
import {
isWindowsRemoteHost,
diff --git a/src/main/managed-server/install/orcad-remote-preflight.ts b/src/main/managed-server/install/orcad-remote-preflight.ts
index 9be9ffa4d487..2386779569cc 100644
--- a/src/main/managed-server/install/orcad-remote-preflight.ts
+++ b/src/main/managed-server/install/orcad-remote-preflight.ts
@@ -15,7 +15,7 @@ import {
import { readWindowsOrcadSlotEntry } from './orcad-remote-launch-windows'
import { ORCAD_WINDOWS_RUNTIME_MARKER } from '../host-state/orcad-windows-host-script'
import { orcadNodeSlotRuntimeCommand, selectOrcadSlotEntryCommand } from './orcad-remote-runtime'
-import { execCommand } from '../../ssh/remote-exec-command'
+import { execCommand } from '../../ssh/remote-exec/remote-exec-command'
import { shellEscape } from '../../ssh/ssh-connection-utils'
import {
isWindowsRemoteHost,
diff --git a/src/main/managed-server/install/orcad-remote-primitives.test.ts b/src/main/managed-server/install/orcad-remote-primitives.test.ts
index 4ff84ffd914b..071534b41f36 100644
--- a/src/main/managed-server/install/orcad-remote-primitives.test.ts
+++ b/src/main/managed-server/install/orcad-remote-primitives.test.ts
@@ -1,7 +1,7 @@
-import type * as ExecCommandModule from '../../ssh/remote-exec-command'
+import type * as ExecCommandModule from '../../ssh/remote-exec/remote-exec-command'
import { beforeEach, describe, expect, it, vi } from 'vitest'
-vi.mock('../../ssh/remote-exec-command', async (importOriginal) => ({
+vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand: vi.fn(),
isUnconfirmedSshCommandTermination: (error: unknown) =>
@@ -13,7 +13,7 @@ vi.mock('../host-state/orcad-windows-host-preparation', () => ({
prepareWindowsOrcadHost: vi.fn()
}))
-import { execCommand } from '../../ssh/remote-exec-command'
+import { execCommand } from '../../ssh/remote-exec/remote-exec-command'
import { detectRemoteHostPlatform } from '../../ssh/ssh-remote-platform-detection'
import { prepareWindowsOrcadHost } from '../host-state/orcad-windows-host-preparation'
import { resolveOrcadRemoteContext } from './orcad-remote-context'
diff --git a/src/main/managed-server/install/orcad-remote-record-file.ts b/src/main/managed-server/install/orcad-remote-record-file.ts
index fca3bdd6626a..35c61db49246 100644
--- a/src/main/managed-server/install/orcad-remote-record-file.ts
+++ b/src/main/managed-server/install/orcad-remote-record-file.ts
@@ -8,7 +8,7 @@ import { randomUUID } from 'node:crypto'
import { shellEscape } from '../../ssh/ssh-connection-utils'
import { removeRemoteFileCommand } from '../../ssh/ssh-remote-commands'
import { execOrcadRemote, type OrcadRemoteExecTarget } from './orcad-remote-runtime-control'
-import { isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec-command'
+import { isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec/remote-exec-command'
import { isWindowsRemoteHost } from '../../ssh/ssh-remote-platform'
import {
orcadRemoteBaseDir,
diff --git a/src/main/managed-server/install/orcad-remote-rollback.test.ts b/src/main/managed-server/install/orcad-remote-rollback.test.ts
index 071de4d2cef7..19a5fbd4a1d5 100644
--- a/src/main/managed-server/install/orcad-remote-rollback.test.ts
+++ b/src/main/managed-server/install/orcad-remote-rollback.test.ts
@@ -1,10 +1,10 @@
-import type * as ExecCommandModule from '../../ssh/remote-exec-command'
+import type * as ExecCommandModule from '../../ssh/remote-exec/remote-exec-command'
import { beforeEach, describe, expect, it, vi } from 'vitest'
import type * as RecordFile from './orcad-remote-record-file'
import type * as InstallLock from './remote-install-lock'
import type * as TerminalBarrier from '../lifecycle/orcad-rollback-terminal-barrier'
-vi.mock('../../ssh/remote-exec-command', async (importOriginal) => ({
+vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand: vi.fn()
}))
@@ -52,7 +52,7 @@ vi.mock('../lifecycle/orcad-rollback-terminal-barrier', async (importOriginal) =
}
}))
-import { execCommand } from '../../ssh/remote-exec-command'
+import { execCommand } from '../../ssh/remote-exec/remote-exec-command'
import { writeAtomicOrcadRemoteRecord } from './orcad-remote-record-file'
import { rollbackOrcad, type OrcadRollbackOptions } from './orcad-remote-rollback'
import {
diff --git a/src/main/managed-server/install/orcad-remote-runtime-control.test.ts b/src/main/managed-server/install/orcad-remote-runtime-control.test.ts
index e288f917e547..69623e1d6e39 100644
--- a/src/main/managed-server/install/orcad-remote-runtime-control.test.ts
+++ b/src/main/managed-server/install/orcad-remote-runtime-control.test.ts
@@ -1,14 +1,14 @@
-import type * as ExecCommandModule from '../../ssh/remote-exec-command'
+import type * as ExecCommandModule from '../../ssh/remote-exec/remote-exec-command'
import { beforeEach, describe, expect, it, vi } from 'vitest'
-vi.mock('../../ssh/remote-exec-command', async (importOriginal) => ({
+vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand: vi.fn(),
isUnconfirmedSshCommandTermination: (error: unknown) =>
error instanceof Error && error.message === 'unconfirmed'
}))
-import { execCommand } from '../../ssh/remote-exec-command'
+import { execCommand } from '../../ssh/remote-exec/remote-exec-command'
import { launchOrcadAndAwaitReadiness } from './orcad-remote-runtime-control'
import { getRemoteHostPlatform } from '../../ssh/ssh-remote-platform'
import type { OrcadLaunchSpec } from './orcad-remote-launch'
diff --git a/src/main/managed-server/install/orcad-remote-runtime-control.ts b/src/main/managed-server/install/orcad-remote-runtime-control.ts
index 14a0ad1250d5..3435312090da 100644
--- a/src/main/managed-server/install/orcad-remote-runtime-control.ts
+++ b/src/main/managed-server/install/orcad-remote-runtime-control.ts
@@ -20,7 +20,10 @@ import {
} from './orcad-remote-readiness-wait'
import type { OrcadHostTransport } from '../../ssh/orcad-host-transport'
import { errorMessage } from '../../../shared/error-message'
-import { execCommand, isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec-command'
+import {
+ execCommand,
+ isUnconfirmedSshCommandTermination
+} from '../../ssh/remote-exec/remote-exec-command'
import {
currentOrcadFence,
isOrcadFenceLost,
diff --git a/src/main/managed-server/install/orcad-remote-windows-commands.test.ts b/src/main/managed-server/install/orcad-remote-windows-commands.test.ts
index 6b2508303ce2..fe705520f0de 100644
--- a/src/main/managed-server/install/orcad-remote-windows-commands.test.ts
+++ b/src/main/managed-server/install/orcad-remote-windows-commands.test.ts
@@ -1,12 +1,12 @@
-import type * as ExecCommandModule from '../../ssh/remote-exec-command'
+import type * as ExecCommandModule from '../../ssh/remote-exec/remote-exec-command'
import { beforeEach, describe, expect, it, vi } from 'vitest'
-vi.mock('../../ssh/remote-exec-command', async (importOriginal) => ({
+vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand: vi.fn()
}))
-import { execCommand } from '../../ssh/remote-exec-command'
+import { execCommand } from '../../ssh/remote-exec/remote-exec-command'
import type { OrcadHostTransport } from '../../ssh/orcad-host-transport'
import { getRemoteHostPlatform } from '../../ssh/ssh-remote-platform'
import { orcadLivenessProbeCommand, type OrcadLaunchSpec } from './orcad-remote-launch'
diff --git a/src/main/managed-server/install/orcad-remote-windows-decommission.test.ts b/src/main/managed-server/install/orcad-remote-windows-decommission.test.ts
index 75ed326fd34f..de2ec5635b3f 100644
--- a/src/main/managed-server/install/orcad-remote-windows-decommission.test.ts
+++ b/src/main/managed-server/install/orcad-remote-windows-decommission.test.ts
@@ -3,12 +3,12 @@
* a staged managed request run by the slot's node.exe, and GC screens every candidate in one
* node.exe instead of one per version dir.
*/
-import type * as ExecCommandModule from '../../ssh/remote-exec-command'
+import type * as ExecCommandModule from '../../ssh/remote-exec/remote-exec-command'
import { beforeEach, describe, expect, it, vi } from 'vitest'
import type * as RecordFile from './orcad-remote-record-file'
import type * as InstallLock from './remote-install-lock'
-vi.mock('../../ssh/remote-exec-command', async (importOriginal) => ({
+vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand: vi.fn()
}))
@@ -25,7 +25,7 @@ vi.mock('./remote-install-gc', async (importOriginal) => ({
gcOldRemoteInstallVersions: vi.fn().mockResolvedValue(undefined)
}))
-import { execCommand } from '../../ssh/remote-exec-command'
+import { execCommand } from '../../ssh/remote-exec/remote-exec-command'
import { writeAtomicOrcadRemoteRecord } from './orcad-remote-record-file'
import { gcOldRemoteInstallVersions } from './remote-install-gc'
import { decommissionRemoteOrcad } from './orcad-remote-decommission'
diff --git a/src/main/managed-server/install/orcad-remote-windows-node.ts b/src/main/managed-server/install/orcad-remote-windows-node.ts
index 5451b82be6fc..fc6c8d837b67 100644
--- a/src/main/managed-server/install/orcad-remote-windows-node.ts
+++ b/src/main/managed-server/install/orcad-remote-windows-node.ts
@@ -19,8 +19,11 @@ import {
import { pinnedNodeRuntimeAsset, type NodeRuntimeTarget } from '../../../shared/node-runtime-pin'
import { randomUUID } from 'node:crypto'
import type { OrcadHostTransport } from '../../ssh/orcad-host-transport'
-import { execCommand, isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec-command'
-import { RELAY_REMOTE_DIR } from '../../ssh/remote-frame-protocol'
+import {
+ execCommand,
+ isUnconfirmedSshCommandTermination
+} from '../../ssh/remote-exec/remote-exec-command'
+import { RELAY_REMOTE_DIR } from '../../ssh/remote-exec/remote-frame-protocol'
import {
joinRemotePath,
remoteDirname,
diff --git a/src/main/managed-server/install/remote-install-gc-claim-termination.test.ts b/src/main/managed-server/install/remote-install-gc-claim-termination.test.ts
index 0aed0bccfffa..360c3cae0a01 100644
--- a/src/main/managed-server/install/remote-install-gc-claim-termination.test.ts
+++ b/src/main/managed-server/install/remote-install-gc-claim-termination.test.ts
@@ -1,13 +1,13 @@
-import type * as ExecCommandModule from '../../ssh/remote-exec-command'
+import type * as ExecCommandModule from '../../ssh/remote-exec/remote-exec-command'
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
-vi.mock('../../ssh/remote-exec-command', async (importOriginal) => ({
+vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand: vi.fn()
}))
import type { SshConnection } from '../../ssh/ssh-connection'
-import { execCommand } from '../../ssh/remote-exec-command'
+import { execCommand } from '../../ssh/remote-exec/remote-exec-command'
import {
isRelayGcClaimOwned,
releaseRelayGcClaim,
diff --git a/src/main/managed-server/install/remote-install-gc-claim.ts b/src/main/managed-server/install/remote-install-gc-claim.ts
index 1199022abb43..d51bcd71a5ec 100644
--- a/src/main/managed-server/install/remote-install-gc-claim.ts
+++ b/src/main/managed-server/install/remote-install-gc-claim.ts
@@ -1,8 +1,8 @@
import { randomUUID } from 'node:crypto'
import type { RemoteInstallTransport } from './remote-install-transport'
import { shellEscape } from '../../ssh/ssh-connection-utils'
-import { execHostCommand } from '../../ssh/remote-host-exec'
-import { isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec-command'
+import { execHostCommand } from '../../ssh/remote-exec/remote-host-exec'
+import { isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec/remote-exec-command'
import {
probeInstallLockExistsCommand,
tryCreateInstallLockCommand,
diff --git a/src/main/managed-server/install/remote-install-gc-listing.test-fixture.ts b/src/main/managed-server/install/remote-install-gc-listing.test-fixture.ts
index 3be335b0219d..e5b4c070463d 100644
--- a/src/main/managed-server/install/remote-install-gc-listing.test-fixture.ts
+++ b/src/main/managed-server/install/remote-install-gc-listing.test-fixture.ts
@@ -7,7 +7,7 @@ import type { ClientChannel } from 'ssh2'
import { runProcess, spawnProcess } from '@orca/process-host'
import type { SshConnection } from '../../ssh/ssh-connection'
import { shellEscape } from '../../ssh/ssh-connection-utils'
-import { execCommand } from '../../ssh/remote-exec-command'
+import { execCommand } from '../../ssh/remote-exec/remote-exec-command'
export const SSH_EXEC_OUTPUT_CAP_CHARS = 1024 * 1024
diff --git a/src/main/managed-server/install/remote-install-gc-termination.test.ts b/src/main/managed-server/install/remote-install-gc-termination.test.ts
index 2f7d762b7ac6..d4e8fca9eca1 100644
--- a/src/main/managed-server/install/remote-install-gc-termination.test.ts
+++ b/src/main/managed-server/install/remote-install-gc-termination.test.ts
@@ -1,7 +1,7 @@
import { beforeEach, describe, expect, it, vi } from 'vitest'
-import type * as ExecCommandModule from '../../ssh/remote-exec-command'
+import type * as ExecCommandModule from '../../ssh/remote-exec/remote-exec-command'
-vi.mock('../../ssh/remote-exec-command', async (importOriginal) => ({
+vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand: vi.fn()
}))
@@ -9,7 +9,7 @@ vi.mock('../../ssh/remote-exec-command', async (importOriginal) => ({
import type { SshConnection } from '../../ssh/ssh-connection'
import { gcOldRemoteInstallVersions } from './remote-install-gc'
import { ORCAD_INSTALL_MODEL } from './remote-install-model'
-import { execCommand } from '../../ssh/remote-exec-command'
+import { execCommand } from '../../ssh/remote-exec/remote-exec-command'
import { getRemoteHostPlatform } from '../../ssh/ssh-remote-platform'
// oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: all connection access is replaced by execCommand's mock.
diff --git a/src/main/managed-server/install/remote-install-gc-tombstone.ts b/src/main/managed-server/install/remote-install-gc-tombstone.ts
index ee85cadc04a7..0723209099c3 100644
--- a/src/main/managed-server/install/remote-install-gc-tombstone.ts
+++ b/src/main/managed-server/install/remote-install-gc-tombstone.ts
@@ -1,5 +1,8 @@
import type { RemoteInstallTransport } from './remote-install-transport'
-import { execCommand, isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec-command'
+import {
+ execCommand,
+ isUnconfirmedSshCommandTermination
+} from '../../ssh/remote-exec/remote-exec-command'
import { remoteInstallGcTombstoneRegex, type RemoteInstallModel } from './remote-install-model'
import { removeRemoteTreeCommand } from '../../ssh/ssh-remote-commands'
import {
diff --git a/src/main/managed-server/install/remote-install-gc.ts b/src/main/managed-server/install/remote-install-gc.ts
index e82b276ba5a8..68e7bef5bba1 100644
--- a/src/main/managed-server/install/remote-install-gc.ts
+++ b/src/main/managed-server/install/remote-install-gc.ts
@@ -6,8 +6,8 @@
* until the relay-era upgrade window closes.
*/
import type { RemoteInstallTransport } from './remote-install-transport'
-import { RELAY_REMOTE_DIR } from '../../ssh/remote-frame-protocol'
-import { execHostCommand } from '../../ssh/remote-host-exec'
+import { RELAY_REMOTE_DIR } from '../../ssh/remote-exec/remote-frame-protocol'
+import { execHostCommand } from '../../ssh/remote-exec/remote-host-exec'
import { probeInstallLockExistsCommand } from './remote-install-lock-commands'
import { isRelayInstallLockStale, RELAY_INSTALL_LOCK_NAME } from './remote-install-lock'
import {
@@ -34,7 +34,7 @@ import {
remoteBasename,
type RemoteHostPlatform
} from '../../ssh/ssh-remote-platform'
-import { isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec-command'
+import { isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec/remote-exec-command'
const DEFAULT_REMOTE_HOST = getRemoteHostPlatform('linux-x64')
diff --git a/src/main/managed-server/install/remote-install-lock-termination.test.ts b/src/main/managed-server/install/remote-install-lock-termination.test.ts
index 9c36a5a67dbd..5b090d53c830 100644
--- a/src/main/managed-server/install/remote-install-lock-termination.test.ts
+++ b/src/main/managed-server/install/remote-install-lock-termination.test.ts
@@ -1,13 +1,13 @@
-import type * as ExecCommandModule from '../../ssh/remote-exec-command'
+import type * as ExecCommandModule from '../../ssh/remote-exec/remote-exec-command'
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
-vi.mock('../../ssh/remote-exec-command', async (importOriginal) => ({
+vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand: vi.fn()
}))
import type { SshConnection } from '../../ssh/ssh-connection'
-import { execCommand } from '../../ssh/remote-exec-command'
+import { execCommand } from '../../ssh/remote-exec/remote-exec-command'
import { acquireInstallLock, isRelayInstallLockStale } from './remote-install-lock'
import { getRemoteHostPlatform } from '../../ssh/ssh-remote-platform'
diff --git a/src/main/managed-server/install/remote-install-lock.test.ts b/src/main/managed-server/install/remote-install-lock.test.ts
index f0e977714b0c..69bad2258e45 100644
--- a/src/main/managed-server/install/remote-install-lock.test.ts
+++ b/src/main/managed-server/install/remote-install-lock.test.ts
@@ -1,8 +1,8 @@
-import type * as ExecCommandModule from '../../ssh/remote-exec-command'
+import type * as ExecCommandModule from '../../ssh/remote-exec/remote-exec-command'
import { afterEach, describe, expect, it, vi } from 'vitest'
import type { SshConnection } from '../../ssh/ssh-connection'
-vi.mock('../../ssh/remote-exec-command', async (importOriginal) => ({
+vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand: vi.fn(),
isUnconfirmedSshCommandTermination: (error: unknown) =>
@@ -15,7 +15,7 @@ vi.mock('./remote-install-gc-claim', () => ({
waitForRelayGcClaimRelease: vi.fn().mockResolvedValue(undefined)
}))
-import { execCommand } from '../../ssh/remote-exec-command'
+import { execCommand } from '../../ssh/remote-exec/remote-exec-command'
import { acquireInstallLock, RemoteInstallLockBusyError } from './remote-install-lock'
import { getRemoteHostPlatform } from '../../ssh/ssh-remote-platform'
diff --git a/src/main/managed-server/install/remote-install-lock.ts b/src/main/managed-server/install/remote-install-lock.ts
index 99919c6b521b..f70258d2b780 100644
--- a/src/main/managed-server/install/remote-install-lock.ts
+++ b/src/main/managed-server/install/remote-install-lock.ts
@@ -1,7 +1,7 @@
import type { RemoteInstallTransport } from './remote-install-transport'
-import { execHostCommand } from '../../ssh/remote-host-exec'
+import { execHostCommand } from '../../ssh/remote-exec/remote-host-exec'
import { RELAY_DEPLOY_TIMEOUT_MS } from './remote-deploy-timing'
-import { isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec-command'
+import { isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec/remote-exec-command'
import { isRelayGcClaimed, waitForRelayGcClaimRelease } from './remote-install-gc-claim'
import {
acquireInstallLockParentCommand,
diff --git a/src/main/managed-server/install/remote-install-transfers.ts b/src/main/managed-server/install/remote-install-transfers.ts
index 4c1db6143216..b03a1b691bb1 100644
--- a/src/main/managed-server/install/remote-install-transfers.ts
+++ b/src/main/managed-server/install/remote-install-transfers.ts
@@ -8,7 +8,7 @@ import {
uploadDirectoryViaExecStdin,
writeStringViaExecStdin
} from '../../ssh/ssh-exec-stdin-file-transfer'
-import { isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec-command'
+import { isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec/remote-exec-command'
import {
describeSandboxedSftpFailure,
isSandboxedSftpNamespaceError
diff --git a/src/main/managed-server/install/remote-node-runtime-store-gc.test.ts b/src/main/managed-server/install/remote-node-runtime-store-gc.test.ts
index 15836a505f53..75151b5e56c2 100644
--- a/src/main/managed-server/install/remote-node-runtime-store-gc.test.ts
+++ b/src/main/managed-server/install/remote-node-runtime-store-gc.test.ts
@@ -13,9 +13,9 @@ import { once } from 'node:events'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
-import type * as ExecCommandModule from '../../ssh/remote-exec-command'
+import type * as ExecCommandModule from '../../ssh/remote-exec/remote-exec-command'
-vi.mock('../../ssh/remote-exec-command', async (importOriginal) => ({
+vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand: vi.fn()
}))
@@ -34,7 +34,7 @@ import {
runtimeStoreInventoryCommand,
type RuntimeStoreInventory
} from './remote-node-runtime-store-inventory'
-import { execCommand } from '../../ssh/remote-exec-command'
+import { execCommand } from '../../ssh/remote-exec/remote-exec-command'
import { getRemoteHostPlatform } from '../../ssh/ssh-remote-platform'
// oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: all connection access is replaced by execCommand's mock.
diff --git a/src/main/managed-server/install/remote-node-runtime-store-gc.ts b/src/main/managed-server/install/remote-node-runtime-store-gc.ts
index 5dea21421d98..f1725ffb30a5 100644
--- a/src/main/managed-server/install/remote-node-runtime-store-gc.ts
+++ b/src/main/managed-server/install/remote-node-runtime-store-gc.ts
@@ -28,7 +28,10 @@ import {
tryWithRuntimeStoreLock
} from './remote-node-runtime-store-lock'
import { shellEscape } from '../../ssh/ssh-connection-utils'
-import { execCommand, isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec-command'
+import {
+ execCommand,
+ isUnconfirmedSshCommandTermination
+} from '../../ssh/remote-exec/remote-exec-command'
import { INSTALL_LOCK_STALE_MS } from './remote-install-lock'
import {
moveRemoteTreeCommand,
diff --git a/src/main/managed-server/install/remote-node-runtime-store-inventory.ts b/src/main/managed-server/install/remote-node-runtime-store-inventory.ts
index c98d21acdf09..c3c0ad47688a 100644
--- a/src/main/managed-server/install/remote-node-runtime-store-inventory.ts
+++ b/src/main/managed-server/install/remote-node-runtime-store-inventory.ts
@@ -8,7 +8,7 @@ import {
ORCAD_RUNTIMES_DIRNAME
} from '../../../shared/orcad-artifacts'
import { shellEscape } from '../../ssh/ssh-connection-utils'
-import { RELAY_REMOTE_DIR } from '../../ssh/remote-frame-protocol'
+import { RELAY_REMOTE_DIR } from '../../ssh/remote-exec/remote-frame-protocol'
import { joinRemotePath, type RemoteHostPlatform } from '../../ssh/ssh-remote-platform'
/** A version dir names a runtime it needs with an empty file of this prefix + sha (design D5). */
diff --git a/src/main/managed-server/install/remote-node-runtime-store-lock-host-release.test.ts b/src/main/managed-server/install/remote-node-runtime-store-lock-host-release.test.ts
index 724f1444003f..db6b24c1154b 100644
--- a/src/main/managed-server/install/remote-node-runtime-store-lock-host-release.test.ts
+++ b/src/main/managed-server/install/remote-node-runtime-store-lock-host-release.test.ts
@@ -1,4 +1,4 @@
-import type * as ExecCommandModule from '../../ssh/remote-exec-command'
+import type * as ExecCommandModule from '../../ssh/remote-exec/remote-exec-command'
import { existsSync, mkdtempSync, readFileSync, rmSync } from 'node:fs'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
@@ -10,11 +10,11 @@ import {
RUNTIME_STORE_LOCK_OWNER_FILENAME,
withRuntimeStoreLock
} from './remote-node-runtime-store-lock'
-import { execCommand } from '../../ssh/remote-exec-command'
+import { execCommand } from '../../ssh/remote-exec/remote-exec-command'
import { tryCreateInstallLockCommand } from './remote-install-lock-commands'
import { getRemoteHostPlatform } from '../../ssh/ssh-remote-platform'
-vi.mock('../../ssh/remote-exec-command', async (importOriginal) => ({
+vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand: vi.fn()
}))
diff --git a/src/main/managed-server/install/remote-node-runtime-store-lock.ts b/src/main/managed-server/install/remote-node-runtime-store-lock.ts
index f51ae6359ae5..81beda6dc43d 100644
--- a/src/main/managed-server/install/remote-node-runtime-store-lock.ts
+++ b/src/main/managed-server/install/remote-node-runtime-store-lock.ts
@@ -7,15 +7,15 @@ import { randomUUID } from 'node:crypto'
import { ORCAD_RUNTIMES_DIRNAME } from '../../../shared/orcad-artifacts'
import type { RemoteInstallTransport } from './remote-install-transport'
import { shellEscape } from '../../ssh/ssh-connection-utils'
-import { execHostCommand } from '../../ssh/remote-host-exec'
-import { isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec-command'
+import { execHostCommand } from '../../ssh/remote-exec/remote-host-exec'
+import { isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec/remote-exec-command'
import { acquireInstallLock, INSTALL_LOCK_STALE_SECONDS } from './remote-install-lock'
import {
tryCreateInstallLockCommand,
tryStealInstallLockCommand,
type InstallLockOwnerFile
} from './remote-install-lock-commands'
-import { RELAY_REMOTE_DIR } from '../../ssh/remote-frame-protocol'
+import { RELAY_REMOTE_DIR } from '../../ssh/remote-exec/remote-frame-protocol'
import { removeRemoteTreeCommand } from '../../ssh/ssh-remote-commands'
import {
isWindowsRemoteHost,
diff --git a/src/main/managed-server/install/remote-node-runtime-store-windows.test.ts b/src/main/managed-server/install/remote-node-runtime-store-windows.test.ts
index 91c8a8b992d9..a289137657b4 100644
--- a/src/main/managed-server/install/remote-node-runtime-store-windows.test.ts
+++ b/src/main/managed-server/install/remote-node-runtime-store-windows.test.ts
@@ -3,9 +3,9 @@ import { copyFileSync, mkdirSync, mkdtempSync, utimesSync, writeFileSync } from
import { tmpdir } from 'node:os'
import { join } from 'node:path'
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
-import type * as ExecCommandModule from '../../ssh/remote-exec-command'
+import type * as ExecCommandModule from '../../ssh/remote-exec/remote-exec-command'
-vi.mock('../../ssh/remote-exec-command', async (importOriginal) => ({
+vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand: vi.fn()
}))
@@ -18,7 +18,7 @@ import {
windowsRuntimeStoreInventoryCommand,
windowsSweepStaleRuntimeStagesCommand
} from './remote-node-runtime-store-windows'
-import { execCommand } from '../../ssh/remote-exec-command'
+import { execCommand } from '../../ssh/remote-exec/remote-exec-command'
import { getRemoteHostPlatform } from '../../ssh/ssh-remote-platform'
import { decodeRemotePowerShellScript } from '../../ssh/ssh-remote-powershell'
import { removeTreeSync } from '../../../shared/windows-transient-lock-removal'
diff --git a/src/main/managed-server/install/remote-node-runtime-store-windows.ts b/src/main/managed-server/install/remote-node-runtime-store-windows.ts
index 42428f5342fe..3dbd48cd8984 100644
--- a/src/main/managed-server/install/remote-node-runtime-store-windows.ts
+++ b/src/main/managed-server/install/remote-node-runtime-store-windows.ts
@@ -22,7 +22,7 @@ import {
RUNTIME_STORE_TOMBSTONE_PREFIX,
runtimeStoreInventoryCommand
} from './remote-node-runtime-store-inventory'
-import { RELAY_REMOTE_DIR } from '../../ssh/remote-frame-protocol'
+import { RELAY_REMOTE_DIR } from '../../ssh/remote-exec/remote-frame-protocol'
import {
isWindowsRemoteHost,
joinRemotePath,
diff --git a/src/main/managed-server/install/remote-versioned-install-termination.test.ts b/src/main/managed-server/install/remote-versioned-install-termination.test.ts
index e602a752e42a..9b22a3fb098e 100644
--- a/src/main/managed-server/install/remote-versioned-install-termination.test.ts
+++ b/src/main/managed-server/install/remote-versioned-install-termination.test.ts
@@ -1,14 +1,14 @@
-import type * as ExecCommandModule from '../../ssh/remote-exec-command'
+import type * as ExecCommandModule from '../../ssh/remote-exec/remote-exec-command'
import { beforeEach, describe, expect, it, vi } from 'vitest'
-vi.mock('../../ssh/remote-exec-command', async (importOriginal) => ({
+vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand: vi.fn()
}))
import type { SshConnection } from '../../ssh/ssh-connection'
import { REMOTE_INSTALL_MODELS } from './remote-install-model'
-import { execCommand } from '../../ssh/remote-exec-command'
+import { execCommand } from '../../ssh/remote-exec/remote-exec-command'
import {
abandonInstall,
finalizeInstall,
diff --git a/src/main/managed-server/install/remote-versioned-install.test.ts b/src/main/managed-server/install/remote-versioned-install.test.ts
index eb977dfa72a3..0fff3cda2345 100644
--- a/src/main/managed-server/install/remote-versioned-install.test.ts
+++ b/src/main/managed-server/install/remote-versioned-install.test.ts
@@ -1,12 +1,12 @@
import { beforeEach, describe, expect, it, vi } from 'vitest'
-import type * as ExecCommandModule from '../../ssh/remote-exec-command'
+import type * as ExecCommandModule from '../../ssh/remote-exec/remote-exec-command'
vi.mock('fs', () => ({
existsSync: vi.fn(),
readFileSync: vi.fn()
}))
-vi.mock('../../ssh/remote-exec-command', async (importOriginal) => ({
+vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand: vi.fn()
}))
@@ -24,7 +24,10 @@ import {
} from './remote-versioned-install'
import { gcOldRemoteInstallVersions } from './remote-install-gc'
import { ORCAD_INSTALL_MODEL } from './remote-install-model'
-import { isUnconfirmedSshCommandTermination, execCommand } from '../../ssh/remote-exec-command'
+import {
+ isUnconfirmedSshCommandTermination,
+ execCommand
+} from '../../ssh/remote-exec/remote-exec-command'
import { acquireInstallLock } from './remote-install-lock'
import {
isRelayGcClaimed,
diff --git a/src/main/managed-server/install/remote-versioned-install.ts b/src/main/managed-server/install/remote-versioned-install.ts
index 7a69c6f22cbd..b4a8dd594fb1 100644
--- a/src/main/managed-server/install/remote-versioned-install.ts
+++ b/src/main/managed-server/install/remote-versioned-install.ts
@@ -5,10 +5,10 @@
import { join } from 'node:path'
import { existsSync, readFileSync } from 'node:fs'
import type { RemoteInstallTransport } from './remote-install-transport'
-import { execHostCommand } from '../../ssh/remote-host-exec'
-import { isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec-command'
+import { execHostCommand } from '../../ssh/remote-exec/remote-host-exec'
+import { isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec/remote-exec-command'
import { RELAY_INSTALL_LOCK_NAME } from './remote-install-lock'
-import { RELAY_REMOTE_DIR } from '../../ssh/remote-frame-protocol'
+import { RELAY_REMOTE_DIR } from '../../ssh/remote-exec/remote-frame-protocol'
import { remoteInstallDirName, type RemoteInstallModel } from './remote-install-model'
import {
probeRemoteInstallCompleteCommand,
diff --git a/src/main/managed-server/lifecycle/orcad-decommission-stop.ts b/src/main/managed-server/lifecycle/orcad-decommission-stop.ts
index 2d482f6c87f1..644fb6124e8f 100644
--- a/src/main/managed-server/lifecycle/orcad-decommission-stop.ts
+++ b/src/main/managed-server/lifecycle/orcad-decommission-stop.ts
@@ -5,7 +5,7 @@
* lost answer is `unverifiable`, never exit; cancelling is how a stop that did not finish is
* withdrawn, and only an orcad-confirmed cancellation lets the fence go.
*/
-import { isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec-command'
+import { isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec/remote-exec-command'
import {
cancelRemoteOrcadManagedStop,
completeRemoteOrcadManagedStop
diff --git a/src/main/managed-server/lifecycle/orcad-managed-remote-stop.ts b/src/main/managed-server/lifecycle/orcad-managed-remote-stop.ts
index f85f406f7466..70d58af0952a 100644
--- a/src/main/managed-server/lifecycle/orcad-managed-remote-stop.ts
+++ b/src/main/managed-server/lifecycle/orcad-managed-remote-stop.ts
@@ -16,7 +16,7 @@ import { execOrcadRemote } from '../install/orcad-remote-runtime-control'
import { readBoundedOrcadRemoteRecord } from '../install/orcad-remote-record-file'
import { orcadSlotDir, type OrcadSlotOptions } from '../../ssh/orcad-recovery-slot'
import { isWindowsRemoteHost, joinRemotePath } from '../../ssh/ssh-remote-platform'
-import { isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec-command'
+import { isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec/remote-exec-command'
import {
orcadWindowsNodeCommandLine,
orcadWindowsSlotOpCommand,
diff --git a/src/main/managed-server/lifecycle/orcad-managed-tunnel-bridge-port.test.ts b/src/main/managed-server/lifecycle/orcad-managed-tunnel-bridge-port.test.ts
index d00c8d4a2985..50135d4a903a 100644
--- a/src/main/managed-server/lifecycle/orcad-managed-tunnel-bridge-port.test.ts
+++ b/src/main/managed-server/lifecycle/orcad-managed-tunnel-bridge-port.test.ts
@@ -1,12 +1,12 @@
import { beforeEach, describe, expect, it, vi } from 'vitest'
import type { SshConnection } from '../../ssh/ssh-connection'
import type { PortForwardStartOptions } from '../../ssh/port-forwarding/ssh-port-forward-provider'
-import type * as ForwardProcess from '../../ssh/system-ssh-forward-process'
+import type * as ForwardProcess from '../../ssh/system-transport/system-ssh-forward-process'
const { reserveLocalForwardPort } = vi.hoisted(() => ({
reserveLocalForwardPort: vi.fn(async (port: number, _orphanArgs?: readonly string[]) => port)
}))
-vi.mock('../../ssh/system-ssh-forward-process', async (importOriginal) => ({
+vi.mock('../../ssh/system-transport/system-ssh-forward-process', async (importOriginal) => ({
...(await importOriginal()),
reserveLocalForwardPort
}))
diff --git a/src/main/managed-server/lifecycle/orcad-managed-tunnel-transport.ts b/src/main/managed-server/lifecycle/orcad-managed-tunnel-transport.ts
index 833f5204bda6..fa7d15d2f2d7 100644
--- a/src/main/managed-server/lifecycle/orcad-managed-tunnel-transport.ts
+++ b/src/main/managed-server/lifecycle/orcad-managed-tunnel-transport.ts
@@ -23,7 +23,7 @@ import {
import {
buildSystemSshPortForwardArgs,
reserveLocalForwardPort
-} from '../../ssh/system-ssh-forward-process'
+} from '../../ssh/system-transport/system-ssh-forward-process'
type OrcadManagedTunnelTransportDependencies = {
forwards: SshPortForwardProvider[]
diff --git a/src/main/managed-server/lifecycle/orcad-managed-wake.test.ts b/src/main/managed-server/lifecycle/orcad-managed-wake.test.ts
index 43035d1c8bce..6854a5dfea54 100644
--- a/src/main/managed-server/lifecycle/orcad-managed-wake.test.ts
+++ b/src/main/managed-server/lifecycle/orcad-managed-wake.test.ts
@@ -1,8 +1,8 @@
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
-import type * as ExecCommandModule from '../../ssh/remote-exec-command'
+import type * as ExecCommandModule from '../../ssh/remote-exec/remote-exec-command'
import type * as InstallLock from '../install/remote-install-lock'
-vi.mock('../../ssh/remote-exec-command', async (importOriginal) => ({
+vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand: vi.fn()
}))
@@ -12,7 +12,7 @@ vi.mock('../install/remote-install-lock', async (importOriginal) => ({
acquireInstallLock: vi.fn()
}))
-import { execCommand } from '../../ssh/remote-exec-command'
+import { execCommand } from '../../ssh/remote-exec/remote-exec-command'
import { acquireInstallLock, RemoteInstallLockBusyError } from '../install/remote-install-lock'
import { wakeStoppedManagedOrcad } from './orcad-managed-wake'
import { getRemoteHostPlatform } from '../../ssh/ssh-remote-platform'
diff --git a/src/main/managed-server/lifecycle/orcad-rollback-transition.ts b/src/main/managed-server/lifecycle/orcad-rollback-transition.ts
index e0961fd9cce4..0a33e31152b3 100644
--- a/src/main/managed-server/lifecycle/orcad-rollback-transition.ts
+++ b/src/main/managed-server/lifecycle/orcad-rollback-transition.ts
@@ -2,7 +2,7 @@
import { orcadRemoteBaseDir } from '../install/orcad-remote-windows-node'
import { randomUUID } from 'node:crypto'
import type { OrcadRollbackOptions, OrcadRollbackResult } from '../install/orcad-remote-rollback'
-import { isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec-command'
+import { isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec/remote-exec-command'
import { withRolledBackVersion } from '../activation/orcad-activation-record'
import { writeOrcadActivationRecord } from '../activation/orcad-activation-record-store'
import { launchAndJudgeOrcadSlot } from '../../ssh/orcad-candidate-launch-verdict'
diff --git a/src/main/managed-server/lifecycle/orcad-runtime-target.test.ts b/src/main/managed-server/lifecycle/orcad-runtime-target.test.ts
index e95579e78e8f..780e936f4aef 100644
--- a/src/main/managed-server/lifecycle/orcad-runtime-target.test.ts
+++ b/src/main/managed-server/lifecycle/orcad-runtime-target.test.ts
@@ -1,12 +1,12 @@
-import type * as ExecCommandModule from '../../ssh/remote-exec-command'
+import type * as ExecCommandModule from '../../ssh/remote-exec/remote-exec-command'
import { beforeEach, describe, expect, it, vi } from 'vitest'
import { resolveOrcadRuntimeTarget } from './orcad-runtime-target'
import { SshConnection } from '../../ssh/ssh-connection'
import { createCallbacks, createTarget } from '../../ssh/ssh-connection-test-fixtures'
-import { execCommand } from '../../ssh/remote-exec-command'
+import { execCommand } from '../../ssh/remote-exec/remote-exec-command'
import { getRemoteHostPlatform } from '../../ssh/ssh-remote-platform'
-vi.mock('../../ssh/remote-exec-command', async (importOriginal) => ({
+vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand: vi.fn()
}))
diff --git a/src/main/managed-server/lifecycle/orcad-stdio-bridge-script.ts b/src/main/managed-server/lifecycle/orcad-stdio-bridge-script.ts
index 9c8ceb28a801..5e6baa259a34 100644
--- a/src/main/managed-server/lifecycle/orcad-stdio-bridge-script.ts
+++ b/src/main/managed-server/lifecycle/orcad-stdio-bridge-script.ts
@@ -14,7 +14,7 @@ import {
ORCAD_RUNTIMES_DIRNAME
} from '../../../shared/orcad-artifacts'
import { shellEscape } from '../../ssh/ssh-connection-utils'
-import { RELAY_REMOTE_DIR } from '../../ssh/remote-frame-protocol'
+import { RELAY_REMOTE_DIR } from '../../ssh/remote-exec/remote-frame-protocol'
import { ORCAD_MACHINE_HOMES_DIRNAME } from '../host-state/orcad-machine-home'
export type OrcadStdioBridgeMode = 'raw' | 'base64'
diff --git a/src/main/orca-profiles/profile-active-transfer-worker.test.ts b/src/main/orca-profiles/profile-active-transfer-worker.test.ts
index 2e19eaf73f0b..fef3884a54c5 100644
--- a/src/main/orca-profiles/profile-active-transfer-worker.test.ts
+++ b/src/main/orca-profiles/profile-active-transfer-worker.test.ts
@@ -18,7 +18,7 @@ vi.mock('../telemetry/client', () => ({ track: vi.fn() }))
vi.mock('../telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../ssh/ssh-config-parser', () => ({
+vi.mock('../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/orca-profiles/profile-active-transfer.test.ts b/src/main/orca-profiles/profile-active-transfer.test.ts
index 0cfd80d7eefb..c1b1328a3ffa 100644
--- a/src/main/orca-profiles/profile-active-transfer.test.ts
+++ b/src/main/orca-profiles/profile-active-transfer.test.ts
@@ -30,7 +30,7 @@ vi.mock('../telemetry/client', () => ({ track: vi.fn() }))
vi.mock('../telemetry/cohort-classifier', () => ({
getCohortAtEmit: vi.fn(() => ({ nth_repo_added: 2 }))
}))
-vi.mock('../ssh/ssh-config-parser', () => ({
+vi.mock('../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: vi.fn(() => ({ hosts: [] })),
sshConfigHostsToTargets: vi.fn(() => [])
}))
diff --git a/src/main/orcad/orcad-cross-runtime-daemon-adoption.integration.test.ts b/src/main/orcad/orcad-cross-runtime-daemon-adoption.integration.test.ts
index 8ff8858a1cf9..afdb5efc29c3 100644
--- a/src/main/orcad/orcad-cross-runtime-daemon-adoption.integration.test.ts
+++ b/src/main/orcad/orcad-cross-runtime-daemon-adoption.integration.test.ts
@@ -4,7 +4,7 @@
* are installed side by side as `~/.orca-remote/orcad-/`, launched and stopped with
* the client's own deploy commands, and share one data root.
*/
-import type * as ExecCommandModule from '../ssh/remote-exec-command'
+import type * as ExecCommandModule from '../ssh/remote-exec/remote-exec-command'
import { build } from 'esbuild'
import {
copyFileSync,
@@ -58,7 +58,7 @@ import {
parseOrcadStopOutcome,
stopOrcadCommand
} from '../managed-server/install/orcad-remote-process-control'
-import { RELAY_REMOTE_DIR } from '../ssh/remote-frame-protocol'
+import { RELAY_REMOTE_DIR } from '../ssh/remote-exec/remote-frame-protocol'
import { getRemoteHostPlatform } from '../ssh/ssh-remote-platform'
import {
skipForMissingInputs,
@@ -68,7 +68,7 @@ import {
// GC runs its real commands, against this machine instead of an SSH host.
const { execMock } = vi.hoisted(() => ({ execMock: vi.fn() }))
-vi.mock('../ssh/remote-exec-command', async (importOriginal) => ({
+vi.mock('../ssh/remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand: execMock
}))
diff --git a/src/main/persistence-async-write-syscalls.test.ts b/src/main/persistence-async-write-syscalls.test.ts
index e70218edb7f6..eea5515762f3 100644
--- a/src/main/persistence-async-write-syscalls.test.ts
+++ b/src/main/persistence-async-write-syscalls.test.ts
@@ -64,7 +64,7 @@ vi.mock('node:fs/promises', async (importOriginal) => {
})
vi.mock('./telemetry/client', () => ({ track: vi.fn() }))
vi.mock('./telemetry/cohort-classifier', () => ({ getCohortAtEmit: () => ({ nth_repo_added: 2 }) }))
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence-automation-extra-agent-args.test.ts b/src/main/persistence-automation-extra-agent-args.test.ts
index c64fc3ec9b0d..19b374531614 100644
--- a/src/main/persistence-automation-extra-agent-args.test.ts
+++ b/src/main/persistence-automation-extra-agent-args.test.ts
@@ -10,7 +10,7 @@ import { rmSync, mkdtempSync } from 'node:fs'
import { join } from 'node:path'
import { tmpdir } from 'node:os'
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: vi.fn(),
sshConfigHostsToTargets: vi.fn()
}))
diff --git a/src/main/persistence-automations.test.ts b/src/main/persistence-automations.test.ts
index fcd61b77ec39..7b9b985159ad 100644
--- a/src/main/persistence-automations.test.ts
+++ b/src/main/persistence-automations.test.ts
@@ -19,7 +19,7 @@ const { loadUserSshConfigMock, sshConfigHostsToTargetsMock } = vi.hoisted(() =>
sshConfigHostsToTargetsMock: vi.fn()
}))
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: loadUserSshConfigMock,
sshConfigHostsToTargets: sshConfigHostsToTargetsMock
}))
diff --git a/src/main/persistence-clipboard-selection-migration.test.ts b/src/main/persistence-clipboard-selection-migration.test.ts
index 552aa10b6f76..8bdd5d190e01 100644
--- a/src/main/persistence-clipboard-selection-migration.test.ts
+++ b/src/main/persistence-clipboard-selection-migration.test.ts
@@ -17,7 +17,7 @@ const { loadUserSshConfigMock, sshConfigHostsToTargetsMock } = vi.hoisted(() =>
sshConfigHostsToTargetsMock: vi.fn()
}))
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: loadUserSshConfigMock,
sshConfigHostsToTargets: sshConfigHostsToTargetsMock
}))
diff --git a/src/main/persistence-cohort-and-identity-migration.test.ts b/src/main/persistence-cohort-and-identity-migration.test.ts
index 02afa7e3da57..ca40d13e34f9 100644
--- a/src/main/persistence-cohort-and-identity-migration.test.ts
+++ b/src/main/persistence-cohort-and-identity-migration.test.ts
@@ -24,7 +24,7 @@ const { loadUserSshConfigMock, sshConfigHostsToTargetsMock } = vi.hoisted(() =>
sshConfigHostsToTargetsMock: vi.fn()
}))
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: loadUserSshConfigMock,
sshConfigHostsToTargets: sshConfigHostsToTargetsMock
}))
diff --git a/src/main/persistence-deregistered-repo-residue.test.ts b/src/main/persistence-deregistered-repo-residue.test.ts
index b519b04cad82..e2d74ffa42d0 100644
--- a/src/main/persistence-deregistered-repo-residue.test.ts
+++ b/src/main/persistence-deregistered-repo-residue.test.ts
@@ -18,7 +18,7 @@ import { composeWorktreeHostIdentity } from '../shared/worktree/host-qualified-i
import { folderWorkspaceKey, worktreeWorkspaceKey } from '../shared/workspace-scope'
import type { PersistedState } from '../shared/persisted-state-types'
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: vi.fn(),
sshConfigHostsToTargets: vi.fn()
}))
diff --git a/src/main/persistence-floating-terminal-trust.test.ts b/src/main/persistence-floating-terminal-trust.test.ts
index 49ea6457e6da..b4fefc2b392c 100644
--- a/src/main/persistence-floating-terminal-trust.test.ts
+++ b/src/main/persistence-floating-terminal-trust.test.ts
@@ -18,7 +18,7 @@ const { loadUserSshConfigMock, sshConfigHostsToTargetsMock } = vi.hoisted(() =>
sshConfigHostsToTargetsMock: vi.fn()
}))
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: loadUserSshConfigMock,
sshConfigHostsToTargets: sshConfigHostsToTargetsMock
}))
diff --git a/src/main/persistence-flush-and-save-scheduling.test.ts b/src/main/persistence-flush-and-save-scheduling.test.ts
index dbe4ce8262f1..782459df025f 100644
--- a/src/main/persistence-flush-and-save-scheduling.test.ts
+++ b/src/main/persistence-flush-and-save-scheduling.test.ts
@@ -29,7 +29,7 @@ const { loadUserSshConfigMock, sshConfigHostsToTargetsMock } = vi.hoisted(() =>
sshConfigHostsToTargetsMock: vi.fn()
}))
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: loadUserSshConfigMock,
sshConfigHostsToTargets: sshConfigHostsToTargetsMock
}))
diff --git a/src/main/persistence-folder-scan-project-groups.test.ts b/src/main/persistence-folder-scan-project-groups.test.ts
index d217c39529af..55cc9b088e9e 100644
--- a/src/main/persistence-folder-scan-project-groups.test.ts
+++ b/src/main/persistence-folder-scan-project-groups.test.ts
@@ -29,7 +29,7 @@ vi.mock('electron', () => ({
}
}))
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: vi.fn(() => ({ hosts: [] })),
sshConfigHostsToTargets: vi.fn(() => [])
}))
diff --git a/src/main/persistence-folder-workspace-notes.test.ts b/src/main/persistence-folder-workspace-notes.test.ts
index 43abe5b74125..0031a6a571ce 100644
--- a/src/main/persistence-folder-workspace-notes.test.ts
+++ b/src/main/persistence-folder-workspace-notes.test.ts
@@ -19,7 +19,7 @@ const { loadUserSshConfigMock, sshConfigHostsToTargetsMock } = vi.hoisted(() =>
sshConfigHostsToTargetsMock: vi.fn()
}))
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: loadUserSshConfigMock,
sshConfigHostsToTargets: sshConfigHostsToTargetsMock
}))
diff --git a/src/main/persistence-host-partitioned-sessions.test.ts b/src/main/persistence-host-partitioned-sessions.test.ts
index 1314d8e2ff58..887a20a2a378 100644
--- a/src/main/persistence-host-partitioned-sessions.test.ts
+++ b/src/main/persistence-host-partitioned-sessions.test.ts
@@ -26,7 +26,7 @@ const { loadUserSshConfigMock, sshConfigHostsToTargetsMock } = vi.hoisted(() =>
sshConfigHostsToTargetsMock: vi.fn()
}))
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: loadUserSshConfigMock,
sshConfigHostsToTargets: sshConfigHostsToTargetsMock
}))
diff --git a/src/main/persistence-initial-load.test.ts b/src/main/persistence-initial-load.test.ts
index a539d5efa193..ee663d302a2e 100644
--- a/src/main/persistence-initial-load.test.ts
+++ b/src/main/persistence-initial-load.test.ts
@@ -32,7 +32,7 @@ const { loadUserSshConfigMock, sshConfigHostsToTargetsMock } = vi.hoisted(() =>
sshConfigHostsToTargetsMock: vi.fn()
}))
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: loadUserSshConfigMock,
sshConfigHostsToTargets: sshConfigHostsToTargetsMock
}))
diff --git a/src/main/persistence-invalid-workspace-layout-purge.test.ts b/src/main/persistence-invalid-workspace-layout-purge.test.ts
index 9912753499a4..84403e351134 100644
--- a/src/main/persistence-invalid-workspace-layout-purge.test.ts
+++ b/src/main/persistence-invalid-workspace-layout-purge.test.ts
@@ -24,7 +24,7 @@ import { WorkspaceLayoutStream } from './runtime/workspace-layout-stream'
import { windowViewSaveForMain } from './persistence/window-save-view'
vi.mock('../shared/layout-owner-switch', () => ({ ORCA_LAYOUT_OWNER_IS_MAIN: true }))
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: vi.fn(),
sshConfigHostsToTargets: vi.fn()
}))
diff --git a/src/main/persistence-layout-binding-recovery.test.ts b/src/main/persistence-layout-binding-recovery.test.ts
index ef903b820bd2..261da79955b1 100644
--- a/src/main/persistence-layout-binding-recovery.test.ts
+++ b/src/main/persistence-layout-binding-recovery.test.ts
@@ -24,7 +24,7 @@ const { loadUserSshConfigMock, sshConfigHostsToTargetsMock } = vi.hoisted(() =>
sshConfigHostsToTargetsMock: vi.fn()
}))
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: loadUserSshConfigMock,
sshConfigHostsToTargets: sshConfigHostsToTargetsMock
}))
diff --git a/src/main/persistence-load-repair-durability.test.ts b/src/main/persistence-load-repair-durability.test.ts
index 5cb2bbe8f4f1..5b8ad6033373 100644
--- a/src/main/persistence-load-repair-durability.test.ts
+++ b/src/main/persistence-load-repair-durability.test.ts
@@ -23,7 +23,7 @@ const { loadUserSshConfigMock, sshConfigHostsToTargetsMock } = vi.hoisted(() =>
sshConfigHostsToTargetsMock: vi.fn()
}))
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: loadUserSshConfigMock,
sshConfigHostsToTargets: sshConfigHostsToTargetsMock
}))
diff --git a/src/main/persistence-loading-store-extraction.test.ts b/src/main/persistence-loading-store-extraction.test.ts
index 3acec0d56a47..8a07ccf6084c 100644
--- a/src/main/persistence-loading-store-extraction.test.ts
+++ b/src/main/persistence-loading-store-extraction.test.ts
@@ -48,7 +48,7 @@ vi.mock('electron', () => ({
vi.mock('./telemetry/client', () => ({ track: trackMock }))
vi.mock('./telemetry/cohort-classifier', () => ({ getCohortAtEmit: getCohortAtEmitMock }))
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: vi.fn(() => ({ hosts: [] })),
sshConfigHostsToTargets: vi.fn(() => [])
}))
diff --git a/src/main/persistence-loading-store-write-risks.test.ts b/src/main/persistence-loading-store-write-risks.test.ts
index 11b463c631d0..4ad78d87c5b3 100644
--- a/src/main/persistence-loading-store-write-risks.test.ts
+++ b/src/main/persistence-loading-store-write-risks.test.ts
@@ -4,7 +4,7 @@ import {
maintenanceBarrier
} from './persistence/loading-store/profile-state-maintenance-fixture'
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: vi.fn(),
sshConfigHostsToTargets: vi.fn()
}))
diff --git a/src/main/persistence-native-chat-tab-view-mode.test.ts b/src/main/persistence-native-chat-tab-view-mode.test.ts
index 96de2f21f678..04b5774fb583 100644
--- a/src/main/persistence-native-chat-tab-view-mode.test.ts
+++ b/src/main/persistence-native-chat-tab-view-mode.test.ts
@@ -16,7 +16,7 @@ const { loadUserSshConfigMock, sshConfigHostsToTargetsMock } = vi.hoisted(() =>
sshConfigHostsToTargetsMock: vi.fn()
}))
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: loadUserSshConfigMock,
sshConfigHostsToTargets: sshConfigHostsToTargetsMock
}))
diff --git a/src/main/persistence-pane-identity-migration.test.ts b/src/main/persistence-pane-identity-migration.test.ts
index c39a93636a39..882cd8fa2e81 100644
--- a/src/main/persistence-pane-identity-migration.test.ts
+++ b/src/main/persistence-pane-identity-migration.test.ts
@@ -25,7 +25,7 @@ const { loadUserSshConfigMock, sshConfigHostsToTargetsMock } = vi.hoisted(() =>
sshConfigHostsToTargetsMock: vi.fn()
}))
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: loadUserSshConfigMock,
sshConfigHostsToTargets: sshConfigHostsToTargetsMock
}))
diff --git a/src/main/persistence-protected-secret-fail-closed.test.ts b/src/main/persistence-protected-secret-fail-closed.test.ts
index 2fd8404a3af1..01117d763484 100644
--- a/src/main/persistence-protected-secret-fail-closed.test.ts
+++ b/src/main/persistence-protected-secret-fail-closed.test.ts
@@ -19,7 +19,7 @@ const cipherState = {
decryptionThrows: false
}
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: vi.fn(),
sshConfigHostsToTargets: vi.fn()
}))
diff --git a/src/main/persistence-protected-secret-write-race.test.ts b/src/main/persistence-protected-secret-write-race.test.ts
index 8388a3ba1deb..d352ad11114f 100644
--- a/src/main/persistence-protected-secret-write-race.test.ts
+++ b/src/main/persistence-protected-secret-write-race.test.ts
@@ -6,7 +6,7 @@ import {
} from './persistence/loading-store/profile-state-maintenance-fixture'
import { Store } from './persistence/loading-store/store'
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: vi.fn(),
sshConfigHostsToTargets: vi.fn()
}))
diff --git a/src/main/persistence-proxy-secret-recovery.test.ts b/src/main/persistence-proxy-secret-recovery.test.ts
index 842aa015baca..2d9e949b2098 100644
--- a/src/main/persistence-proxy-secret-recovery.test.ts
+++ b/src/main/persistence-proxy-secret-recovery.test.ts
@@ -19,7 +19,7 @@ import { installFakeAppEnvironment } from '../../config/scripts/vitest-host-port
const testState = { dir: '' }
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: vi.fn(),
sshConfigHostsToTargets: vi.fn()
}))
diff --git a/src/main/persistence-pty-binding-reconciliation.test.ts b/src/main/persistence-pty-binding-reconciliation.test.ts
index c4fbf61f07b4..364960a1c5a7 100644
--- a/src/main/persistence-pty-binding-reconciliation.test.ts
+++ b/src/main/persistence-pty-binding-reconciliation.test.ts
@@ -19,7 +19,7 @@ const { loadUserSshConfigMock, sshConfigHostsToTargetsMock } = vi.hoisted(() =>
sshConfigHostsToTargetsMock: vi.fn()
}))
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: loadUserSshConfigMock,
sshConfigHostsToTargets: sshConfigHostsToTargetsMock
}))
diff --git a/src/main/persistence-remote-session-startup.test.ts b/src/main/persistence-remote-session-startup.test.ts
index 0a27afc8d054..91328732cd37 100644
--- a/src/main/persistence-remote-session-startup.test.ts
+++ b/src/main/persistence-remote-session-startup.test.ts
@@ -6,7 +6,7 @@ import { tmpdir } from 'node:os'
import { getDefaultWorkspaceSession } from '../shared/constants'
import type { BrowserPage, BrowserWorkspace } from '../shared/browser-workspace-types'
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: vi.fn(),
sshConfigHostsToTargets: vi.fn()
}))
diff --git a/src/main/persistence-repo-lifecycle.test.ts b/src/main/persistence-repo-lifecycle.test.ts
index e954cd05c20c..4187db59eecb 100644
--- a/src/main/persistence-repo-lifecycle.test.ts
+++ b/src/main/persistence-repo-lifecycle.test.ts
@@ -36,7 +36,7 @@ const { loadUserSshConfigMock, sshConfigHostsToTargetsMock } = vi.hoisted(() =>
sshConfigHostsToTargetsMock: vi.fn()
}))
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: loadUserSshConfigMock,
sshConfigHostsToTargets: sshConfigHostsToTargetsMock
}))
diff --git a/src/main/persistence-settings-ui-defaults.test.ts b/src/main/persistence-settings-ui-defaults.test.ts
index 3e75cc7d021d..ac4ab6ed1048 100644
--- a/src/main/persistence-settings-ui-defaults.test.ts
+++ b/src/main/persistence-settings-ui-defaults.test.ts
@@ -21,7 +21,7 @@ const { loadUserSshConfigMock, sshConfigHostsToTargetsMock } = vi.hoisted(() =>
sshConfigHostsToTargetsMock: vi.fn()
}))
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: loadUserSshConfigMock,
sshConfigHostsToTargets: sshConfigHostsToTargetsMock
}))
diff --git a/src/main/persistence-settings-update.test.ts b/src/main/persistence-settings-update.test.ts
index aced61e0ac40..b1978ed4eadb 100644
--- a/src/main/persistence-settings-update.test.ts
+++ b/src/main/persistence-settings-update.test.ts
@@ -27,7 +27,7 @@ const { loadUserSshConfigMock, sshConfigHostsToTargetsMock } = vi.hoisted(() =>
sshConfigHostsToTargetsMock: vi.fn()
}))
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: loadUserSshConfigMock,
sshConfigHostsToTargets: sshConfigHostsToTargetsMock
}))
diff --git a/src/main/persistence-single-serialize.test.ts b/src/main/persistence-single-serialize.test.ts
index 72967bc50cad..d5c36011c249 100644
--- a/src/main/persistence-single-serialize.test.ts
+++ b/src/main/persistence-single-serialize.test.ts
@@ -17,7 +17,7 @@ import { installFakeAppEnvironment } from '../../config/scripts/vitest-host-port
const testState = { dir: '' }
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: vi.fn(),
sshConfigHostsToTargets: vi.fn()
}))
diff --git a/src/main/persistence-source-control-ai-migration.test.ts b/src/main/persistence-source-control-ai-migration.test.ts
index f3969da6ef0c..f478c136ebff 100644
--- a/src/main/persistence-source-control-ai-migration.test.ts
+++ b/src/main/persistence-source-control-ai-migration.test.ts
@@ -21,7 +21,7 @@ const { loadUserSshConfigMock, sshConfigHostsToTargetsMock } = vi.hoisted(() =>
sshConfigHostsToTargetsMock: vi.fn()
}))
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: loadUserSshConfigMock,
sshConfigHostsToTargets: sshConfigHostsToTargetsMock
}))
diff --git a/src/main/persistence-split-pane-incarnation.test.ts b/src/main/persistence-split-pane-incarnation.test.ts
index b628c28384bb..9be1133cb665 100644
--- a/src/main/persistence-split-pane-incarnation.test.ts
+++ b/src/main/persistence-split-pane-incarnation.test.ts
@@ -21,7 +21,7 @@ const { loadUserSshConfigMock, sshConfigHostsToTargetsMock } = vi.hoisted(() =>
sshConfigHostsToTargetsMock: vi.fn()
}))
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: loadUserSshConfigMock,
sshConfigHostsToTargets: sshConfigHostsToTargetsMock
}))
diff --git a/src/main/persistence-ssh-remote-cli-control-migration.test.ts b/src/main/persistence-ssh-remote-cli-control-migration.test.ts
index 02d6fbbabafa..fa9f75a443dd 100644
--- a/src/main/persistence-ssh-remote-cli-control-migration.test.ts
+++ b/src/main/persistence-ssh-remote-cli-control-migration.test.ts
@@ -13,7 +13,7 @@ import type { SshTarget } from '../shared/ssh-types'
import { isRemoteCliControlAllowed } from '../shared/ssh-remote-cli-control'
import { SshConnectionStore } from './ssh/ssh-connection-store'
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: vi.fn(),
sshConfigHostsToTargets: vi.fn()
}))
diff --git a/src/main/persistence-ssh-remote-pty-binding-replay.test.ts b/src/main/persistence-ssh-remote-pty-binding-replay.test.ts
index 83608e1c9d2f..0f94df1b178e 100644
--- a/src/main/persistence-ssh-remote-pty-binding-replay.test.ts
+++ b/src/main/persistence-ssh-remote-pty-binding-replay.test.ts
@@ -18,7 +18,7 @@ const { loadUserSshConfigMock, sshConfigHostsToTargetsMock } = vi.hoisted(() =>
sshConfigHostsToTargetsMock: vi.fn()
}))
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: loadUserSshConfigMock,
sshConfigHostsToTargets: sshConfigHostsToTargetsMock
}))
diff --git a/src/main/persistence-ssh-remote-pty-leases.test.ts b/src/main/persistence-ssh-remote-pty-leases.test.ts
index 32f419359a56..d74f55ca3e4e 100644
--- a/src/main/persistence-ssh-remote-pty-leases.test.ts
+++ b/src/main/persistence-ssh-remote-pty-leases.test.ts
@@ -20,7 +20,7 @@ const { loadUserSshConfigMock, sshConfigHostsToTargetsMock } = vi.hoisted(() =>
sshConfigHostsToTargetsMock: vi.fn()
}))
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: loadUserSshConfigMock,
sshConfigHostsToTargets: sshConfigHostsToTargetsMock
}))
diff --git a/src/main/persistence-ssh-targets-and-pane-keys.test.ts b/src/main/persistence-ssh-targets-and-pane-keys.test.ts
index 6cfb5332a8ed..9b9d30bdff14 100644
--- a/src/main/persistence-ssh-targets-and-pane-keys.test.ts
+++ b/src/main/persistence-ssh-targets-and-pane-keys.test.ts
@@ -23,7 +23,7 @@ const { loadUserSshConfigMock, sshConfigHostsToTargetsMock } = vi.hoisted(() =>
sshConfigHostsToTargetsMock: vi.fn()
}))
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: loadUserSshConfigMock,
sshConfigHostsToTargets: sshConfigHostsToTargetsMock
}))
diff --git a/src/main/persistence-terminal-option-key-migration.test.ts b/src/main/persistence-terminal-option-key-migration.test.ts
index 9d1711783229..152808fb467c 100644
--- a/src/main/persistence-terminal-option-key-migration.test.ts
+++ b/src/main/persistence-terminal-option-key-migration.test.ts
@@ -18,7 +18,7 @@ const { loadUserSshConfigMock, sshConfigHostsToTargetsMock } = vi.hoisted(() =>
sshConfigHostsToTargetsMock: vi.fn()
}))
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: loadUserSshConfigMock,
sshConfigHostsToTargets: sshConfigHostsToTargetsMock
}))
diff --git a/src/main/persistence-ui-state.test.ts b/src/main/persistence-ui-state.test.ts
index 8320854cb24b..436d5f424973 100644
--- a/src/main/persistence-ui-state.test.ts
+++ b/src/main/persistence-ui-state.test.ts
@@ -24,7 +24,7 @@ const { loadUserSshConfigMock, sshConfigHostsToTargetsMock } = vi.hoisted(() =>
sshConfigHostsToTargetsMock: vi.fn()
}))
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: loadUserSshConfigMock,
sshConfigHostsToTargets: sshConfigHostsToTargetsMock
}))
diff --git a/src/main/persistence-update-repo.test.ts b/src/main/persistence-update-repo.test.ts
index cebcf5f6b14d..fe8096bcb91f 100644
--- a/src/main/persistence-update-repo.test.ts
+++ b/src/main/persistence-update-repo.test.ts
@@ -30,7 +30,7 @@ const { loadUserSshConfigMock, sshConfigHostsToTargetsMock } = vi.hoisted(() =>
sshConfigHostsToTargetsMock: vi.fn()
}))
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: loadUserSshConfigMock,
sshConfigHostsToTargets: sshConfigHostsToTargetsMock
}))
diff --git a/src/main/persistence-workspace-session-scrollback.test.ts b/src/main/persistence-workspace-session-scrollback.test.ts
index 8afd69d70b07..873e82615bb5 100644
--- a/src/main/persistence-workspace-session-scrollback.test.ts
+++ b/src/main/persistence-workspace-session-scrollback.test.ts
@@ -32,7 +32,7 @@ const { loadUserSshConfigMock, sshConfigHostsToTargetsMock } = vi.hoisted(() =>
sshConfigHostsToTargetsMock: vi.fn()
}))
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: loadUserSshConfigMock,
sshConfigHostsToTargets: sshConfigHostsToTargetsMock
}))
diff --git a/src/main/persistence-workspace-status-workflow.test.ts b/src/main/persistence-workspace-status-workflow.test.ts
index 1804d04dc410..f4a328b6f8c1 100644
--- a/src/main/persistence-workspace-status-workflow.test.ts
+++ b/src/main/persistence-workspace-status-workflow.test.ts
@@ -24,7 +24,7 @@ const { loadUserSshConfigMock, sshConfigHostsToTargetsMock } = vi.hoisted(() =>
sshConfigHostsToTargetsMock: vi.fn()
}))
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: loadUserSshConfigMock,
sshConfigHostsToTargets: sshConfigHostsToTargetsMock
}))
diff --git a/src/main/persistence-worktree-card-properties.test.ts b/src/main/persistence-worktree-card-properties.test.ts
index 555ae14caf7a..5fb262aea849 100644
--- a/src/main/persistence-worktree-card-properties.test.ts
+++ b/src/main/persistence-worktree-card-properties.test.ts
@@ -10,7 +10,7 @@ const { loadUserSshConfigMock, sshConfigHostsToTargetsMock } = vi.hoisted(() =>
sshConfigHostsToTargetsMock: vi.fn()
}))
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: loadUserSshConfigMock,
sshConfigHostsToTargets: sshConfigHostsToTargetsMock
}))
diff --git a/src/main/persistence-worktree-deletion-fencing.test.ts b/src/main/persistence-worktree-deletion-fencing.test.ts
index 10cb684027bd..496ba1af89c8 100644
--- a/src/main/persistence-worktree-deletion-fencing.test.ts
+++ b/src/main/persistence-worktree-deletion-fencing.test.ts
@@ -18,7 +18,7 @@ const { loadUserSshConfigMock, sshConfigHostsToTargetsMock } = vi.hoisted(() =>
sshConfigHostsToTargetsMock: vi.fn()
}))
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: loadUserSshConfigMock,
sshConfigHostsToTargets: sshConfigHostsToTargetsMock
}))
diff --git a/src/main/persistence-worktree-lineage-and-backups.test.ts b/src/main/persistence-worktree-lineage-and-backups.test.ts
index a9890f661644..270c700d4492 100644
--- a/src/main/persistence-worktree-lineage-and-backups.test.ts
+++ b/src/main/persistence-worktree-lineage-and-backups.test.ts
@@ -27,7 +27,7 @@ const { loadUserSshConfigMock, sshConfigHostsToTargetsMock } = vi.hoisted(() =>
sshConfigHostsToTargetsMock: vi.fn()
}))
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: loadUserSshConfigMock,
sshConfigHostsToTargets: sshConfigHostsToTargetsMock
}))
diff --git a/src/main/persistence-worktree-meta-and-folder-workspaces.test.ts b/src/main/persistence-worktree-meta-and-folder-workspaces.test.ts
index 632e4ebf25a4..d7f17f6ecb0d 100644
--- a/src/main/persistence-worktree-meta-and-folder-workspaces.test.ts
+++ b/src/main/persistence-worktree-meta-and-folder-workspaces.test.ts
@@ -21,7 +21,7 @@ const { loadUserSshConfigMock, sshConfigHostsToTargetsMock } = vi.hoisted(() =>
sshConfigHostsToTargetsMock: vi.fn()
}))
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: loadUserSshConfigMock,
sshConfigHostsToTargets: sshConfigHostsToTargetsMock
}))
diff --git a/src/main/persistence-worktree-visibility.test.ts b/src/main/persistence-worktree-visibility.test.ts
index ab593396b72b..600a76effb2f 100644
--- a/src/main/persistence-worktree-visibility.test.ts
+++ b/src/main/persistence-worktree-visibility.test.ts
@@ -19,7 +19,7 @@ const { loadUserSshConfigMock, sshConfigHostsToTargetsMock } = vi.hoisted(() =>
sshConfigHostsToTargetsMock: vi.fn()
}))
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: loadUserSshConfigMock,
sshConfigHostsToTargets: sshConfigHostsToTargetsMock
}))
diff --git a/src/main/persistence/loading-store/profile-state-checkpoints.test.ts b/src/main/persistence/loading-store/profile-state-checkpoints.test.ts
index 6ee7e7c7c8d4..6900ca939342 100644
--- a/src/main/persistence/loading-store/profile-state-checkpoints.test.ts
+++ b/src/main/persistence/loading-store/profile-state-checkpoints.test.ts
@@ -15,7 +15,7 @@ vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
vi.mock('../../telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/loading-store/profile-state-direct-flush.test.ts b/src/main/persistence/loading-store/profile-state-direct-flush.test.ts
index 7b8b77259f4a..a000e04dface 100644
--- a/src/main/persistence/loading-store/profile-state-direct-flush.test.ts
+++ b/src/main/persistence/loading-store/profile-state-direct-flush.test.ts
@@ -29,7 +29,7 @@ vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
vi.mock('../../telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/loading-store/profile-state-durable-writes.test.ts b/src/main/persistence/loading-store/profile-state-durable-writes.test.ts
index 829d2eb403ad..b70c92dd79ea 100644
--- a/src/main/persistence/loading-store/profile-state-durable-writes.test.ts
+++ b/src/main/persistence/loading-store/profile-state-durable-writes.test.ts
@@ -13,7 +13,7 @@ vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
vi.mock('../../telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/loading-store/profile-state-import-lifetime.test.ts b/src/main/persistence/loading-store/profile-state-import-lifetime.test.ts
index dd201c81cd3b..7cc2376d4c1b 100644
--- a/src/main/persistence/loading-store/profile-state-import-lifetime.test.ts
+++ b/src/main/persistence/loading-store/profile-state-import-lifetime.test.ts
@@ -18,7 +18,7 @@ vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
vi.mock('../../telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/loading-store/profile-state-maintenance-compatibility.test.ts b/src/main/persistence/loading-store/profile-state-maintenance-compatibility.test.ts
index c56e1a23eafd..42e6b6150aed 100644
--- a/src/main/persistence/loading-store/profile-state-maintenance-compatibility.test.ts
+++ b/src/main/persistence/loading-store/profile-state-maintenance-compatibility.test.ts
@@ -7,7 +7,7 @@ vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
vi.mock('../../telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/loading-store/profile-state-maintenance-contracts.test.ts b/src/main/persistence/loading-store/profile-state-maintenance-contracts.test.ts
index d3b4ad1b58ae..23a329b99ab0 100644
--- a/src/main/persistence/loading-store/profile-state-maintenance-contracts.test.ts
+++ b/src/main/persistence/loading-store/profile-state-maintenance-contracts.test.ts
@@ -10,7 +10,7 @@ vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
vi.mock('../../telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/loading-store/profile-state-settings-writes.test.ts b/src/main/persistence/loading-store/profile-state-settings-writes.test.ts
index 7ab1bf071883..3feaeea91608 100644
--- a/src/main/persistence/loading-store/profile-state-settings-writes.test.ts
+++ b/src/main/persistence/loading-store/profile-state-settings-writes.test.ts
@@ -15,7 +15,7 @@ vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
vi.mock('../../telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/loading-store/profile-state-sqlite-authority.test.ts b/src/main/persistence/loading-store/profile-state-sqlite-authority.test.ts
index b693bb640ac6..829337efe4c0 100644
--- a/src/main/persistence/loading-store/profile-state-sqlite-authority.test.ts
+++ b/src/main/persistence/loading-store/profile-state-sqlite-authority.test.ts
@@ -48,7 +48,7 @@ vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
vi.mock('../../telemetry/cohort-classifier', () => ({
getCohortAtEmit: vi.fn(() => ({ nth_repo_added: 2 }))
}))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: vi.fn(() => ({ hosts: [] })),
sshConfigHostsToTargets: vi.fn(() => [])
}))
diff --git a/src/main/persistence/loading-store/profile-state-store-backups.test.ts b/src/main/persistence/loading-store/profile-state-store-backups.test.ts
index d91a813099fd..6da24ee87442 100644
--- a/src/main/persistence/loading-store/profile-state-store-backups.test.ts
+++ b/src/main/persistence/loading-store/profile-state-store-backups.test.ts
@@ -32,7 +32,7 @@ vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
vi.mock('../../telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/loading-store/profile-state-temp-cleanup-lifetime.test.ts b/src/main/persistence/loading-store/profile-state-temp-cleanup-lifetime.test.ts
index 2cbdd1c59ff4..006d64efa395 100644
--- a/src/main/persistence/loading-store/profile-state-temp-cleanup-lifetime.test.ts
+++ b/src/main/persistence/loading-store/profile-state-temp-cleanup-lifetime.test.ts
@@ -15,7 +15,7 @@ vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
vi.mock('../../telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/loading-store/profile-state-update-quit.test.ts b/src/main/persistence/loading-store/profile-state-update-quit.test.ts
index 088d10eeee49..1563ddb78285 100644
--- a/src/main/persistence/loading-store/profile-state-update-quit.test.ts
+++ b/src/main/persistence/loading-store/profile-state-update-quit.test.ts
@@ -7,7 +7,7 @@ vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
vi.mock('../../telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/loading-store/pty-binding-placement-inertness.test.ts b/src/main/persistence/loading-store/pty-binding-placement-inertness.test.ts
index 95007aaa380f..1ca2e60f7c92 100644
--- a/src/main/persistence/loading-store/pty-binding-placement-inertness.test.ts
+++ b/src/main/persistence/loading-store/pty-binding-placement-inertness.test.ts
@@ -26,7 +26,7 @@ vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
vi.mock('../../telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/loading-store/pty-reattach-failure-routing.test.ts b/src/main/persistence/loading-store/pty-reattach-failure-routing.test.ts
index 244f0a6336df..dfe3217a1dcb 100644
--- a/src/main/persistence/loading-store/pty-reattach-failure-routing.test.ts
+++ b/src/main/persistence/loading-store/pty-reattach-failure-routing.test.ts
@@ -13,7 +13,7 @@ vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
vi.mock('../../telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/loading-store/pty-retirement-publication-during-read.test.ts b/src/main/persistence/loading-store/pty-retirement-publication-during-read.test.ts
index 34b6e742804e..e646672e71d7 100644
--- a/src/main/persistence/loading-store/pty-retirement-publication-during-read.test.ts
+++ b/src/main/persistence/loading-store/pty-retirement-publication-during-read.test.ts
@@ -7,7 +7,7 @@ vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
vi.mock('../../telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/loading-store/pty-spawn-exit-durability.test.ts b/src/main/persistence/loading-store/pty-spawn-exit-durability.test.ts
index 427152b3d1e5..afaf6023ad20 100644
--- a/src/main/persistence/loading-store/pty-spawn-exit-durability.test.ts
+++ b/src/main/persistence/loading-store/pty-spawn-exit-durability.test.ts
@@ -23,7 +23,7 @@ vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
vi.mock('../../telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/loading-store/pty-spawn-handle-publication.test.ts b/src/main/persistence/loading-store/pty-spawn-handle-publication.test.ts
index e8cad7828eec..1ae7cdadd782 100644
--- a/src/main/persistence/loading-store/pty-spawn-handle-publication.test.ts
+++ b/src/main/persistence/loading-store/pty-spawn-handle-publication.test.ts
@@ -11,7 +11,7 @@ vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
vi.mock('../../telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/loading-store/pty-spawn-replacement-durability.test.ts b/src/main/persistence/loading-store/pty-spawn-replacement-durability.test.ts
index 75f154074e27..ae5ee3a66c50 100644
--- a/src/main/persistence/loading-store/pty-spawn-replacement-durability.test.ts
+++ b/src/main/persistence/loading-store/pty-spawn-replacement-durability.test.ts
@@ -16,7 +16,7 @@ vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
vi.mock('../../telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/loading-store/pty-spawn-restore-durability.test.ts b/src/main/persistence/loading-store/pty-spawn-restore-durability.test.ts
index 032dc60bce50..b3b7c0df7568 100644
--- a/src/main/persistence/loading-store/pty-spawn-restore-durability.test.ts
+++ b/src/main/persistence/loading-store/pty-spawn-restore-durability.test.ts
@@ -12,7 +12,7 @@ vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
vi.mock('../../telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/loading-store/terminal-close-async-durability.test.ts b/src/main/persistence/loading-store/terminal-close-async-durability.test.ts
index 090d2340932a..7cd83816a6f1 100644
--- a/src/main/persistence/loading-store/terminal-close-async-durability.test.ts
+++ b/src/main/persistence/loading-store/terminal-close-async-durability.test.ts
@@ -7,7 +7,7 @@ vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
vi.mock('../../telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/profile-state-cutover-fixture.test.ts b/src/main/persistence/profile-state-cutover-fixture.test.ts
index 311c15ae450f..7bb24fe99e17 100644
--- a/src/main/persistence/profile-state-cutover-fixture.test.ts
+++ b/src/main/persistence/profile-state-cutover-fixture.test.ts
@@ -40,7 +40,7 @@ vi.mock('electron', () => ({
vi.mock('../telemetry/client', () => ({ track: trackMock }))
vi.mock('../telemetry/cohort-classifier', () => ({ getCohortAtEmit: getCohortAtEmitMock }))
-vi.mock('../ssh/ssh-config-parser', () => ({
+vi.mock('../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: vi.fn(() => ({ hosts: [] })),
sshConfigHostsToTargets: vi.fn(() => [])
}))
diff --git a/src/main/persistence/profile-state/profile-state-authority-bootstrap.test.ts b/src/main/persistence/profile-state/profile-state-authority-bootstrap.test.ts
index 21c13c3808f5..d83fa5981c0f 100644
--- a/src/main/persistence/profile-state/profile-state-authority-bootstrap.test.ts
+++ b/src/main/persistence/profile-state/profile-state-authority-bootstrap.test.ts
@@ -45,7 +45,7 @@ vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
vi.mock('../../telemetry/cohort-classifier', () => ({
getCohortAtEmit: vi.fn(() => ({ nth_repo_added: 2 }))
}))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: vi.fn(() => ({ hosts: [] })),
sshConfigHostsToTargets: vi.fn(() => [])
}))
diff --git a/src/main/persistence/profile-state/profile-state-authority-marker.test.ts b/src/main/persistence/profile-state/profile-state-authority-marker.test.ts
index 93650a198fc0..33a84c71c259 100644
--- a/src/main/persistence/profile-state/profile-state-authority-marker.test.ts
+++ b/src/main/persistence/profile-state/profile-state-authority-marker.test.ts
@@ -23,7 +23,7 @@ vi.mock('../../telemetry/client', () => ({ track: () => {} }))
vi.mock('../../telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/profile-state/profile-state-bootstrap-publication-race.test.ts b/src/main/persistence/profile-state/profile-state-bootstrap-publication-race.test.ts
index b93b05b1b317..ece6f9b707ee 100644
--- a/src/main/persistence/profile-state/profile-state-bootstrap-publication-race.test.ts
+++ b/src/main/persistence/profile-state/profile-state-bootstrap-publication-race.test.ts
@@ -14,7 +14,7 @@ vi.mock('../../telemetry/client', () => ({ track: () => {} }))
vi.mock('../../telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/profile-state/profile-state-database-rollback-export.test.ts b/src/main/persistence/profile-state/profile-state-database-rollback-export.test.ts
index d5a2faaed72d..8ca6e7ebf420 100644
--- a/src/main/persistence/profile-state/profile-state-database-rollback-export.test.ts
+++ b/src/main/persistence/profile-state/profile-state-database-rollback-export.test.ts
@@ -35,7 +35,7 @@ vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
vi.mock('../../telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/profile-state/profile-state-fragment-validation.test.ts b/src/main/persistence/profile-state/profile-state-fragment-validation.test.ts
index 1fcb85eb108c..3702b4acc1f7 100644
--- a/src/main/persistence/profile-state/profile-state-fragment-validation.test.ts
+++ b/src/main/persistence/profile-state/profile-state-fragment-validation.test.ts
@@ -18,7 +18,7 @@ vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
vi.mock('../../telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/profile-state/profile-state-json-compatibility-recovery.test.ts b/src/main/persistence/profile-state/profile-state-json-compatibility-recovery.test.ts
index 5bd76ab842be..915a10153209 100644
--- a/src/main/persistence/profile-state/profile-state-json-compatibility-recovery.test.ts
+++ b/src/main/persistence/profile-state/profile-state-json-compatibility-recovery.test.ts
@@ -28,7 +28,7 @@ vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
vi.mock('../../telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/profile-state/profile-state-live-store-factory.test.ts b/src/main/persistence/profile-state/profile-state-live-store-factory.test.ts
index e7be8ee4185b..99ab80890a4a 100644
--- a/src/main/persistence/profile-state/profile-state-live-store-factory.test.ts
+++ b/src/main/persistence/profile-state/profile-state-live-store-factory.test.ts
@@ -17,7 +17,7 @@ vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
vi.mock('../../telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/profile-state/profile-state-recovery-crash-boundaries.test.ts b/src/main/persistence/profile-state/profile-state-recovery-crash-boundaries.test.ts
index 65fd09bcbb58..ef731b131095 100644
--- a/src/main/persistence/profile-state/profile-state-recovery-crash-boundaries.test.ts
+++ b/src/main/persistence/profile-state/profile-state-recovery-crash-boundaries.test.ts
@@ -54,7 +54,7 @@ vi.mock('../../telemetry/client', () => ({ track: () => {} }))
vi.mock('../../telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/profile-state/profile-state-startup-authority.test.ts b/src/main/persistence/profile-state/profile-state-startup-authority.test.ts
index 04f955c066e3..615c15b40e51 100644
--- a/src/main/persistence/profile-state/profile-state-startup-authority.test.ts
+++ b/src/main/persistence/profile-state/profile-state-startup-authority.test.ts
@@ -65,7 +65,7 @@ vi.mock('../../telemetry/client', () => ({ track: () => {} }))
vi.mock('../../telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/profile-state/profile-state-startup-secrets.test.ts b/src/main/persistence/profile-state/profile-state-startup-secrets.test.ts
index f37cb9820364..f3ab2832cd91 100644
--- a/src/main/persistence/profile-state/profile-state-startup-secrets.test.ts
+++ b/src/main/persistence/profile-state/profile-state-startup-secrets.test.ts
@@ -30,7 +30,7 @@ vi.mock('../../telemetry/client', () => ({ track: () => {} }))
vi.mock('../../telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/profile-state/profile-state-startup-snapshot.test.ts b/src/main/persistence/profile-state/profile-state-startup-snapshot.test.ts
index e53c425465dd..84401b47d28b 100644
--- a/src/main/persistence/profile-state/profile-state-startup-snapshot.test.ts
+++ b/src/main/persistence/profile-state/profile-state-startup-snapshot.test.ts
@@ -33,7 +33,7 @@ vi.mock('../../telemetry/client', () => ({ track: () => {} }))
vi.mock('../../telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/profile-state/profile-state-store-factory.test.ts b/src/main/persistence/profile-state/profile-state-store-factory.test.ts
index d22fe0496c1b..234005c0002a 100644
--- a/src/main/persistence/profile-state/profile-state-store-factory.test.ts
+++ b/src/main/persistence/profile-state/profile-state-store-factory.test.ts
@@ -45,7 +45,7 @@ vi.mock('../../telemetry/client', () => ({ track: () => {} }))
vi.mock('../../telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/profile-state/profile-state-worker-authority.test.ts b/src/main/persistence/profile-state/profile-state-worker-authority.test.ts
index cc42f3505815..60f3b09c580a 100644
--- a/src/main/persistence/profile-state/profile-state-worker-authority.test.ts
+++ b/src/main/persistence/profile-state/profile-state-worker-authority.test.ts
@@ -11,7 +11,7 @@ vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
vi.mock('../../telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/terminal-topology/duplicate-pty-pane-repair.test.ts b/src/main/persistence/terminal-topology/duplicate-pty-pane-repair.test.ts
index 4ede4b1e57b5..c7eef2733abf 100644
--- a/src/main/persistence/terminal-topology/duplicate-pty-pane-repair.test.ts
+++ b/src/main/persistence/terminal-topology/duplicate-pty-pane-repair.test.ts
@@ -19,7 +19,7 @@ import {
} from './terminal-topology-profile-fixture'
vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/terminal-topology/editor-tab-layout-apply.test.ts b/src/main/persistence/terminal-topology/editor-tab-layout-apply.test.ts
index 8252c343d188..b61ef3b725ff 100644
--- a/src/main/persistence/terminal-topology/editor-tab-layout-apply.test.ts
+++ b/src/main/persistence/terminal-topology/editor-tab-layout-apply.test.ts
@@ -16,7 +16,7 @@ import {
} from './terminal-topology-profile-fixture'
vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/terminal-topology/open-in-new-group-layout-apply.test.ts b/src/main/persistence/terminal-topology/open-in-new-group-layout-apply.test.ts
index 67f8d6346536..c4b8ec07eda8 100644
--- a/src/main/persistence/terminal-topology/open-in-new-group-layout-apply.test.ts
+++ b/src/main/persistence/terminal-topology/open-in-new-group-layout-apply.test.ts
@@ -14,7 +14,7 @@ import {
} from './terminal-topology-profile-fixture'
vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/terminal-topology/terminal-late-bind-layout-rules.test.ts b/src/main/persistence/terminal-topology/terminal-late-bind-layout-rules.test.ts
index 54af1c9101a0..67372b9c1614 100644
--- a/src/main/persistence/terminal-topology/terminal-late-bind-layout-rules.test.ts
+++ b/src/main/persistence/terminal-topology/terminal-late-bind-layout-rules.test.ts
@@ -15,7 +15,7 @@ import { WindowSession, withoutLeaf } from './terminal-topology-window-session-f
import { checkWorkspaceLayoutRules } from '../../../shared/workspace-layout/workspace-layout-rules'
vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/terminal-topology/terminal-layout-apply.test.ts b/src/main/persistence/terminal-topology/terminal-layout-apply.test.ts
index 5c3f9906fdd6..96570d2fa439 100644
--- a/src/main/persistence/terminal-topology/terminal-layout-apply.test.ts
+++ b/src/main/persistence/terminal-topology/terminal-layout-apply.test.ts
@@ -14,7 +14,7 @@ import {
} from './terminal-topology-profile-fixture'
vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/terminal-topology/terminal-layout-create.test.ts b/src/main/persistence/terminal-topology/terminal-layout-create.test.ts
index f96d38e11cde..fc20ba6de033 100644
--- a/src/main/persistence/terminal-topology/terminal-layout-create.test.ts
+++ b/src/main/persistence/terminal-topology/terminal-layout-create.test.ts
@@ -15,7 +15,7 @@ import {
} from './terminal-topology-profile-fixture'
vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/terminal-topology/terminal-layout-default-tabs-applied.test.ts b/src/main/persistence/terminal-topology/terminal-layout-default-tabs-applied.test.ts
index 22a0b04071d9..7fa2708af82d 100644
--- a/src/main/persistence/terminal-topology/terminal-layout-default-tabs-applied.test.ts
+++ b/src/main/persistence/terminal-topology/terminal-layout-default-tabs-applied.test.ts
@@ -11,7 +11,7 @@ import {
} from './terminal-topology-profile-fixture'
vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/terminal-topology/terminal-layout-pane-ops.test.ts b/src/main/persistence/terminal-topology/terminal-layout-pane-ops.test.ts
index acc556a0a455..f1015fbae72c 100644
--- a/src/main/persistence/terminal-topology/terminal-layout-pane-ops.test.ts
+++ b/src/main/persistence/terminal-topology/terminal-layout-pane-ops.test.ts
@@ -19,7 +19,7 @@ import {
} from './terminal-topology-profile-fixture'
vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/terminal-topology/terminal-layout-sleep-wake.test.ts b/src/main/persistence/terminal-topology/terminal-layout-sleep-wake.test.ts
index 6d91d7b078ae..a13dd0f93e96 100644
--- a/src/main/persistence/terminal-topology/terminal-layout-sleep-wake.test.ts
+++ b/src/main/persistence/terminal-topology/terminal-layout-sleep-wake.test.ts
@@ -14,7 +14,7 @@ import {
} from './terminal-topology-profile-fixture'
vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/terminal-topology/terminal-owner-report-only.test.ts b/src/main/persistence/terminal-topology/terminal-owner-report-only.test.ts
index 9a304756392d..06dba1ac1897 100644
--- a/src/main/persistence/terminal-topology/terminal-owner-report-only.test.ts
+++ b/src/main/persistence/terminal-topology/terminal-owner-report-only.test.ts
@@ -14,7 +14,7 @@ import { ProfileStateSqliteAuthority } from '../profile-state/profile-state-sqli
import type * as OwnerInvariants from '../../../shared/workspace-layout/terminal-owner-invariants'
vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/terminal-topology/terminal-pane-admission-layout-owner.test.ts b/src/main/persistence/terminal-topology/terminal-pane-admission-layout-owner.test.ts
index cfaec407e8aa..4f435be8102d 100644
--- a/src/main/persistence/terminal-topology/terminal-pane-admission-layout-owner.test.ts
+++ b/src/main/persistence/terminal-topology/terminal-pane-admission-layout-owner.test.ts
@@ -13,7 +13,7 @@ import {
vi.mock('../../../shared/layout-owner-switch', () => ({ ORCA_LAYOUT_OWNER_IS_MAIN: true }))
vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/terminal-topology/terminal-sleep-quit-resume.test.ts b/src/main/persistence/terminal-topology/terminal-sleep-quit-resume.test.ts
index ba1b9dc63323..b83a7af59282 100644
--- a/src/main/persistence/terminal-topology/terminal-sleep-quit-resume.test.ts
+++ b/src/main/persistence/terminal-topology/terminal-sleep-quit-resume.test.ts
@@ -14,7 +14,7 @@ import {
} from './terminal-topology-profile-fixture'
vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/terminal-topology/terminal-stale-pane-tree-client.test.ts b/src/main/persistence/terminal-topology/terminal-stale-pane-tree-client.test.ts
index e3e7f9b6db22..55eac763f0b9 100644
--- a/src/main/persistence/terminal-topology/terminal-stale-pane-tree-client.test.ts
+++ b/src/main/persistence/terminal-topology/terminal-stale-pane-tree-client.test.ts
@@ -19,7 +19,7 @@ import { leafIds, WindowSession } from './terminal-topology-window-session-fixtu
import { checkWorkspaceLayoutRules } from '../../../shared/workspace-layout/workspace-layout-rules'
vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/persistence/terminal-topology/terminal-topology-model.test.ts b/src/main/persistence/terminal-topology/terminal-topology-model.test.ts
index f68b7595dbb8..9437c582aa7d 100644
--- a/src/main/persistence/terminal-topology/terminal-topology-model.test.ts
+++ b/src/main/persistence/terminal-topology/terminal-topology-model.test.ts
@@ -29,7 +29,7 @@ import {
} from './terminal-topology-profile-fixture'
vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/quit-path-durable-write-blocking.test.ts b/src/main/quit-path-durable-write-blocking.test.ts
index 11bea685c7e0..95eef5037347 100644
--- a/src/main/quit-path-durable-write-blocking.test.ts
+++ b/src/main/quit-path-durable-write-blocking.test.ts
@@ -89,7 +89,7 @@ vi.mock('node:fs/promises', async (importOriginal) => {
return { ...patched, default: patched }
})
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: vi.fn(),
sshConfigHostsToTargets: vi.fn()
}))
diff --git a/src/main/remote-layout-snapshot/remote-layout-snapshot-persistence.test.ts b/src/main/remote-layout-snapshot/remote-layout-snapshot-persistence.test.ts
index 06d9d0536da6..9b80228c4c37 100644
--- a/src/main/remote-layout-snapshot/remote-layout-snapshot-persistence.test.ts
+++ b/src/main/remote-layout-snapshot/remote-layout-snapshot-persistence.test.ts
@@ -22,7 +22,7 @@ vi.mock('electron', () => ({
BrowserWindow: { getAllWindows: () => [] }
}))
vi.mock('../telemetry/client', () => ({ track: vi.fn() }))
-vi.mock('../ssh/ssh-config-parser', () => ({
+vi.mock('../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/runtime/runtime-client-agent-launch-settings-durability.test.ts b/src/main/runtime/runtime-client-agent-launch-settings-durability.test.ts
index f14c23cc8b33..46c1c4e45aa4 100644
--- a/src/main/runtime/runtime-client-agent-launch-settings-durability.test.ts
+++ b/src/main/runtime/runtime-client-agent-launch-settings-durability.test.ts
@@ -10,7 +10,7 @@ vi.mock('../telemetry/client', () => ({ track: vi.fn() }))
vi.mock('../telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../ssh/ssh-config-parser', () => ({
+vi.mock('../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/runtime/session-tabs/headless-browser-group-persistence.test.ts b/src/main/runtime/session-tabs/headless-browser-group-persistence.test.ts
index 9c29dd4e8f5e..f2f4af77de46 100644
--- a/src/main/runtime/session-tabs/headless-browser-group-persistence.test.ts
+++ b/src/main/runtime/session-tabs/headless-browser-group-persistence.test.ts
@@ -13,7 +13,7 @@ import { OrcaRuntimeService } from '../orca-runtime'
import { getRuntimeBrowserPageRegistry } from '../runtime-browser-page-registry'
vi.mock('../../telemetry/client', () => ({ track: vi.fn() }))
-vi.mock('../../ssh/ssh-config-parser', () => ({
+vi.mock('../../ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
diff --git a/src/main/ssh/ssh-config-alias-claim.test.ts b/src/main/ssh/config/ssh-config-alias-claim.test.ts
similarity index 100%
rename from src/main/ssh/ssh-config-alias-claim.test.ts
rename to src/main/ssh/config/ssh-config-alias-claim.test.ts
diff --git a/src/main/ssh/ssh-config-alias-claim.ts b/src/main/ssh/config/ssh-config-alias-claim.ts
similarity index 98%
rename from src/main/ssh/ssh-config-alias-claim.ts
rename to src/main/ssh/config/ssh-config-alias-claim.ts
index 11da6543e453..cc95edbbb3f6 100644
--- a/src/main/ssh/ssh-config-alias-claim.ts
+++ b/src/main/ssh/config/ssh-config-alias-claim.ts
@@ -1,7 +1,7 @@
import { existsSync, statSync } from 'node:fs'
import { homedir } from 'node:os'
import { join } from 'node:path'
-import { normalizeSshConfigAlias } from '../../shared/ssh-config-alias'
+import { normalizeSshConfigAlias } from '../../../shared/ssh-config-alias'
import { expandSshConfigIncludes } from './ssh-config-include-expander'
import { parseSshConfigAliasClaims, type SshConfigAliasClaims } from './ssh-config-parser'
diff --git a/src/main/ssh/ssh-config-host-picker.test.ts b/src/main/ssh/config/ssh-config-host-picker.test.ts
similarity index 98%
rename from src/main/ssh/ssh-config-host-picker.test.ts
rename to src/main/ssh/config/ssh-config-host-picker.test.ts
index 783eef679cae..e2307be2cd85 100644
--- a/src/main/ssh/ssh-config-host-picker.test.ts
+++ b/src/main/ssh/config/ssh-config-host-picker.test.ts
@@ -8,7 +8,7 @@ vi.mock('./ssh-config-parser', async (importOriginal) => ({
loadUserSshConfig: loadUserSshConfigMock
}))
-import { SSH_CONFIG_HOST_RESULT_LIMIT } from '../../shared/ssh-types'
+import { SSH_CONFIG_HOST_RESULT_LIMIT } from '../../../shared/ssh-types'
import {
invalidateUserSshConfigHostCache,
listUserSshConfigHostSummaries,
diff --git a/src/main/ssh/ssh-config-host-picker.ts b/src/main/ssh/config/ssh-config-host-picker.ts
similarity index 97%
rename from src/main/ssh/ssh-config-host-picker.ts
rename to src/main/ssh/config/ssh-config-host-picker.ts
index d1870ad1b69b..bbd0370da93b 100644
--- a/src/main/ssh/ssh-config-host-picker.ts
+++ b/src/main/ssh/config/ssh-config-host-picker.ts
@@ -3,9 +3,9 @@ import type {
SshConfigHostResolution,
SshConfigHostSummary,
SshTarget
-} from '../../shared/ssh-types'
-import { SSH_CONFIG_HOST_RESULT_LIMIT } from '../../shared/ssh-types'
-import { normalizeSshConfigAlias } from '../../shared/ssh-config-alias'
+} from '../../../shared/ssh-types'
+import { SSH_CONFIG_HOST_RESULT_LIMIT } from '../../../shared/ssh-types'
+import { normalizeSshConfigAlias } from '../../../shared/ssh-config-alias'
import { loadUserSshConfig, type SshConfigHost } from './ssh-config-parser'
import { resolveWithSshG, type SshResolvedConfig } from './ssh-g-config-resolution'
diff --git a/src/main/ssh/ssh-config-include-expander.ts b/src/main/ssh/config/ssh-config-include-expander.ts
similarity index 100%
rename from src/main/ssh/ssh-config-include-expander.ts
rename to src/main/ssh/config/ssh-config-include-expander.ts
diff --git a/src/main/ssh/ssh-config-loader-regression.test.ts b/src/main/ssh/config/ssh-config-loader-regression.test.ts
similarity index 100%
rename from src/main/ssh/ssh-config-loader-regression.test.ts
rename to src/main/ssh/config/ssh-config-loader-regression.test.ts
diff --git a/src/main/ssh/ssh-config-loader.test.ts b/src/main/ssh/config/ssh-config-loader.test.ts
similarity index 100%
rename from src/main/ssh/ssh-config-loader.test.ts
rename to src/main/ssh/config/ssh-config-loader.test.ts
diff --git a/src/main/ssh/ssh-config-parser-host-patterns.test.ts b/src/main/ssh/config/ssh-config-parser-host-patterns.test.ts
similarity index 100%
rename from src/main/ssh/ssh-config-parser-host-patterns.test.ts
rename to src/main/ssh/config/ssh-config-parser-host-patterns.test.ts
diff --git a/src/main/ssh/ssh-config-parser.test.ts b/src/main/ssh/config/ssh-config-parser.test.ts
similarity index 100%
rename from src/main/ssh/ssh-config-parser.test.ts
rename to src/main/ssh/config/ssh-config-parser.test.ts
diff --git a/src/main/ssh/ssh-config-parser.ts b/src/main/ssh/config/ssh-config-parser.ts
similarity index 99%
rename from src/main/ssh/ssh-config-parser.ts
rename to src/main/ssh/config/ssh-config-parser.ts
index 53575749255b..e009e1083c3d 100644
--- a/src/main/ssh/ssh-config-parser.ts
+++ b/src/main/ssh/config/ssh-config-parser.ts
@@ -1,7 +1,7 @@
import { existsSync } from 'node:fs'
import { join } from 'node:path'
import { homedir } from 'node:os'
-import type { SshTarget } from '../../shared/ssh-types'
+import type { SshTarget } from '../../../shared/ssh-types'
import { expandSshConfigIncludes } from './ssh-config-include-expander'
import { resolveSshConfigHomePath } from './ssh-config-path-expansion'
diff --git a/src/main/ssh/ssh-config-path-expansion.ts b/src/main/ssh/config/ssh-config-path-expansion.ts
similarity index 100%
rename from src/main/ssh/ssh-config-path-expansion.ts
rename to src/main/ssh/config/ssh-config-path-expansion.ts
diff --git a/src/main/ssh/ssh-config-resolver.test.ts b/src/main/ssh/config/ssh-config-resolver.test.ts
similarity index 100%
rename from src/main/ssh/ssh-config-resolver.test.ts
rename to src/main/ssh/config/ssh-config-resolver.test.ts
diff --git a/src/main/ssh/ssh-g-config-resolution.test.ts b/src/main/ssh/config/ssh-g-config-resolution.test.ts
similarity index 100%
rename from src/main/ssh/ssh-g-config-resolution.test.ts
rename to src/main/ssh/config/ssh-g-config-resolution.test.ts
diff --git a/src/main/ssh/ssh-g-config-resolution.ts b/src/main/ssh/config/ssh-g-config-resolution.ts
similarity index 100%
rename from src/main/ssh/ssh-g-config-resolution.ts
rename to src/main/ssh/config/ssh-g-config-resolution.ts
diff --git a/src/main/ssh/ssh-known-hosts-source.test.ts b/src/main/ssh/config/ssh-known-hosts-source.test.ts
similarity index 100%
rename from src/main/ssh/ssh-known-hosts-source.test.ts
rename to src/main/ssh/config/ssh-known-hosts-source.test.ts
diff --git a/src/main/ssh/ssh-known-hosts-source.ts b/src/main/ssh/config/ssh-known-hosts-source.ts
similarity index 100%
rename from src/main/ssh/ssh-known-hosts-source.ts
rename to src/main/ssh/config/ssh-known-hosts-source.ts
diff --git a/src/main/ssh/ssh-known-hosts.test.ts b/src/main/ssh/config/ssh-known-hosts.test.ts
similarity index 100%
rename from src/main/ssh/ssh-known-hosts.test.ts
rename to src/main/ssh/config/ssh-known-hosts.test.ts
diff --git a/src/main/ssh/ssh-known-hosts.ts b/src/main/ssh/config/ssh-known-hosts.ts
similarity index 100%
rename from src/main/ssh/ssh-known-hosts.ts
rename to src/main/ssh/config/ssh-known-hosts.ts
diff --git a/src/main/ssh/vscode-ssh-authority.test.ts b/src/main/ssh/config/vscode-ssh-authority.test.ts
similarity index 97%
rename from src/main/ssh/vscode-ssh-authority.test.ts
rename to src/main/ssh/config/vscode-ssh-authority.test.ts
index 2816c1bc4bfd..fb8558935b27 100644
--- a/src/main/ssh/vscode-ssh-authority.test.ts
+++ b/src/main/ssh/config/vscode-ssh-authority.test.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from 'vitest'
-import type { SshTarget } from '../../shared/ssh-types'
+import type { SshTarget } from '../../../shared/ssh-types'
import { resolveVsCodeSshAuthority } from './vscode-ssh-authority'
function createTarget(overrides: Partial = {}): SshTarget {
diff --git a/src/main/ssh/vscode-ssh-authority.ts b/src/main/ssh/config/vscode-ssh-authority.ts
similarity index 90%
rename from src/main/ssh/vscode-ssh-authority.ts
rename to src/main/ssh/config/vscode-ssh-authority.ts
index 055baac65d41..7ab79de5d5ae 100644
--- a/src/main/ssh/vscode-ssh-authority.ts
+++ b/src/main/ssh/config/vscode-ssh-authority.ts
@@ -1,5 +1,5 @@
-import type { SshTarget } from '../../shared/ssh-types'
-import { isOpenSshConfigBackedTarget } from './system-ssh-args'
+import type { SshTarget } from '../../../shared/ssh-types'
+import { isOpenSshConfigBackedTarget } from '../system-transport/system-ssh-args'
export type VsCodeSshAuthorityResult =
| { ok: true; authority: string }
diff --git a/src/main/ssh/legacy-relay/legacy-relay-endpoints.test.ts b/src/main/ssh/legacy-relay/legacy-relay-endpoints.test.ts
index cde6602e4a58..da27f56ae562 100644
--- a/src/main/ssh/legacy-relay/legacy-relay-endpoints.test.ts
+++ b/src/main/ssh/legacy-relay/legacy-relay-endpoints.test.ts
@@ -1,4 +1,4 @@
-import type * as ExecCommandModule from '../remote-exec-command'
+import type * as ExecCommandModule from '../remote-exec/remote-exec-command'
import { describe, expect, it, vi } from 'vitest'
import type { SshConnection } from '../ssh-connection'
import { relaySocketNameForInstanceId } from './ssh-relay-instance-id'
@@ -6,7 +6,7 @@ import { windowsRelayPipePathsForSocketName } from './ssh-relay-endpoints'
import { getRemoteHostPlatform, joinRemotePath } from '../ssh-remote-platform'
const { execCommand } = vi.hoisted(() => ({ execCommand: vi.fn() }))
-vi.mock('../remote-exec-command', async (importOriginal) => ({
+vi.mock('../remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand
}))
diff --git a/src/main/ssh/legacy-relay/legacy-relay-endpoints.ts b/src/main/ssh/legacy-relay/legacy-relay-endpoints.ts
index 0b4cca1e7076..a254b5397ac4 100644
--- a/src/main/ssh/legacy-relay/legacy-relay-endpoints.ts
+++ b/src/main/ssh/legacy-relay/legacy-relay-endpoints.ts
@@ -7,9 +7,9 @@
*/
import type { SshConnection } from '../ssh-connection'
import { shellEscape } from '../ssh-connection-utils'
-import { RELAY_REMOTE_DIR } from '../remote-frame-protocol'
+import { RELAY_REMOTE_DIR } from '../remote-exec/remote-frame-protocol'
import { SHORT_RELAY_SOCKET_DIR_PREFIX } from '../relay-socket-path-limit'
-import { execCommand } from '../remote-exec-command'
+import { execCommand } from '../remote-exec/remote-exec-command'
import { readRelayDaemonRuntimes } from './ssh-relay-endpoint-runtime'
import { relaySocketNameForInstanceId } from './ssh-relay-instance-id'
import { readRemoteHomeCommand } from '../ssh-remote-commands'
diff --git a/src/main/ssh/legacy-relay/ssh-host-relay-endpoint-census.test.ts b/src/main/ssh/legacy-relay/ssh-host-relay-endpoint-census.test.ts
index 8bbe785e4a23..b9a1092b0ab4 100644
--- a/src/main/ssh/legacy-relay/ssh-host-relay-endpoint-census.test.ts
+++ b/src/main/ssh/legacy-relay/ssh-host-relay-endpoint-census.test.ts
@@ -1,4 +1,4 @@
-import type * as ExecCommandModule from '../remote-exec-command'
+import type * as ExecCommandModule from '../remote-exec/remote-exec-command'
import { beforeEach, describe, expect, it, vi } from 'vitest'
import type { SshConnection } from '../ssh-connection'
import {
@@ -13,7 +13,7 @@ const { execCommand, probeRelayEndpointIncumbent, countRelayEndpointPtys } = vi.
countRelayEndpointPtys: vi.fn()
}))
-vi.mock('../remote-exec-command', async (importOriginal) => ({
+vi.mock('../remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand
}))
diff --git a/src/main/ssh/legacy-relay/ssh-host-relay-endpoint-census.ts b/src/main/ssh/legacy-relay/ssh-host-relay-endpoint-census.ts
index 956bdae87263..9ffc15310f79 100644
--- a/src/main/ssh/legacy-relay/ssh-host-relay-endpoint-census.ts
+++ b/src/main/ssh/legacy-relay/ssh-host-relay-endpoint-census.ts
@@ -8,9 +8,9 @@
*/
import type { SshConnection } from '../ssh-connection'
import { shellEscape } from '../ssh-connection-utils'
-import { RELAY_REMOTE_DIR } from '../remote-frame-protocol'
+import { RELAY_REMOTE_DIR } from '../remote-exec/remote-frame-protocol'
import { SHORT_RELAY_SOCKET_DIR_PREFIX } from '../relay-socket-path-limit'
-import { execCommand } from '../remote-exec-command'
+import { execCommand } from '../remote-exec/remote-exec-command'
import {
isReapableRelayHusk,
probeRelayEndpointIncumbent,
diff --git a/src/main/ssh/legacy-relay/ssh-host-relay-terminals-on-connect.ts b/src/main/ssh/legacy-relay/ssh-host-relay-terminals-on-connect.ts
index 3a7018aa1574..cc0bc9a476cd 100644
--- a/src/main/ssh/legacy-relay/ssh-host-relay-terminals-on-connect.ts
+++ b/src/main/ssh/legacy-relay/ssh-host-relay-terminals-on-connect.ts
@@ -10,7 +10,7 @@ import {
} from './ssh-host-relay-endpoint-census'
import type { SshConnection } from '../ssh-connection'
import { censusWindowsHostRelays, windowsCensusNodePath } from './ssh-host-relay-windows-census'
-import { execCommand } from '../remote-exec-command'
+import { execCommand } from '../remote-exec/remote-exec-command'
import { readRemoteHomeCommand } from '../ssh-remote-commands'
import { resolveRemoteNodePath } from '../ssh-remote-node-resolution'
import { detectRemoteHostPlatform } from '../ssh-remote-platform-detection'
diff --git a/src/main/ssh/legacy-relay/ssh-host-relay-windows-census.test.ts b/src/main/ssh/legacy-relay/ssh-host-relay-windows-census.test.ts
index f27958da3044..fe1070a75a47 100644
--- a/src/main/ssh/legacy-relay/ssh-host-relay-windows-census.test.ts
+++ b/src/main/ssh/legacy-relay/ssh-host-relay-windows-census.test.ts
@@ -1,4 +1,4 @@
-import type * as ExecCommandModule from '../remote-exec-command'
+import type * as ExecCommandModule from '../remote-exec/remote-exec-command'
import { beforeEach, describe, expect, it, vi } from 'vitest'
import type { SshConnection } from '../ssh-connection'
import { relaySocketNameForInstanceId } from './ssh-relay-instance-id'
@@ -10,7 +10,7 @@ const { execCommand, countRelayPtysOverBridge } = vi.hoisted(() => ({
countRelayPtysOverBridge: vi.fn()
}))
-vi.mock('../remote-exec-command', async (importOriginal) => ({
+vi.mock('../remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand
}))
diff --git a/src/main/ssh/legacy-relay/ssh-host-relay-windows-census.ts b/src/main/ssh/legacy-relay/ssh-host-relay-windows-census.ts
index e040936255fc..62a19f6b8a06 100644
--- a/src/main/ssh/legacy-relay/ssh-host-relay-windows-census.ts
+++ b/src/main/ssh/legacy-relay/ssh-host-relay-windows-census.ts
@@ -9,7 +9,7 @@
* convert under it.
*/
import type { SshConnection } from '../ssh-connection'
-import { RELAY_REMOTE_DIR } from '../remote-frame-protocol'
+import { RELAY_REMOTE_DIR } from '../remote-exec/remote-frame-protocol'
import { RELAY_INSTALL_MODEL } from '../../managed-server/install/remote-install-model'
import type { HostRelayEndpointCensus } from './ssh-host-relay-endpoint-census'
import {
@@ -19,7 +19,7 @@ import {
windowsRelayInventoryCommand
} from './ssh-host-relay-windows-inventory'
import { countRelayPtysOverBridge } from './ssh-relay-endpoint-pty-count'
-import { execCommand } from '../remote-exec-command'
+import { execCommand } from '../remote-exec/remote-exec-command'
import { relaySocketNameForInstanceId } from './ssh-relay-instance-id'
import { windowsRelayConnectCommand } from './ssh-relay-windows-launch-command'
import { listRemoteInstallBaseDirsCommand } from '../ssh-remote-commands'
diff --git a/src/main/ssh/legacy-relay/ssh-host-relay-windows-inventory.ts b/src/main/ssh/legacy-relay/ssh-host-relay-windows-inventory.ts
index fc349aa2112a..96783de6e340 100644
--- a/src/main/ssh/legacy-relay/ssh-host-relay-windows-inventory.ts
+++ b/src/main/ssh/legacy-relay/ssh-host-relay-windows-inventory.ts
@@ -7,7 +7,7 @@
* names every relay pipe on the machine, and each instance leaves a credential file (and its pipe
* marker) in its version directory, which maps a listed pipe back to the instance that serves it.
*/
-import { RELAY_REMOTE_DIR } from '../remote-frame-protocol'
+import { RELAY_REMOTE_DIR } from '../remote-exec/remote-frame-protocol'
import { commandWithNodePath } from '../ssh-remote-commands'
import {
quotePowerShellLiteral as powerShellLiteral,
diff --git a/src/main/ssh/legacy-relay/ssh-relay-endpoint-incumbent.test.ts b/src/main/ssh/legacy-relay/ssh-relay-endpoint-incumbent.test.ts
index 57b6390d88eb..28bc400f21d9 100644
--- a/src/main/ssh/legacy-relay/ssh-relay-endpoint-incumbent.test.ts
+++ b/src/main/ssh/legacy-relay/ssh-relay-endpoint-incumbent.test.ts
@@ -1,9 +1,9 @@
-import type * as ExecCommandModule from '../remote-exec-command'
+import type * as ExecCommandModule from '../remote-exec/remote-exec-command'
import { describe, expect, it, vi } from 'vitest'
import { RELAY_LSOF_PROBE_JS } from '@orca/process-host/posix-lsof-probe'
const execCommand = vi.fn()
-vi.mock('../remote-exec-command', async (importOriginal) => ({
+vi.mock('../remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand: (...args: unknown[]) => execCommand(...args),
isUnconfirmedSshCommandTermination: (error: unknown) =>
diff --git a/src/main/ssh/legacy-relay/ssh-relay-endpoint-incumbent.ts b/src/main/ssh/legacy-relay/ssh-relay-endpoint-incumbent.ts
index da960c4d976a..e28d0f492b03 100644
--- a/src/main/ssh/legacy-relay/ssh-relay-endpoint-incumbent.ts
+++ b/src/main/ssh/legacy-relay/ssh-relay-endpoint-incumbent.ts
@@ -28,7 +28,7 @@ import {
RELAY_UNRECOGNIZED_CHILD_COUNT_VAR,
relayDaemonChildCensusShell
} from '../relay-daemon-service-children'
-import { execCommand, isUnconfirmedSshCommandTermination } from '../remote-exec-command'
+import { execCommand, isUnconfirmedSshCommandTermination } from '../remote-exec/remote-exec-command'
import { isWindowsRemoteHost, type RemoteHostPlatform } from '../ssh-remote-platform'
import { filesystemTypeIsLocalDisk } from '../../orcad/orcad-data-root-locality'
diff --git a/src/main/ssh/legacy-relay/ssh-relay-endpoint-runtime.ts b/src/main/ssh/legacy-relay/ssh-relay-endpoint-runtime.ts
index e0ed047265f2..844c97724ca3 100644
--- a/src/main/ssh/legacy-relay/ssh-relay-endpoint-runtime.ts
+++ b/src/main/ssh/legacy-relay/ssh-relay-endpoint-runtime.ts
@@ -7,7 +7,7 @@
* host with no PATH Node from reading every relay as unverifiable.
*/
import type { SshConnection } from '../ssh-connection'
-import { execCommand } from '../remote-exec-command'
+import { execCommand } from '../remote-exec/remote-exec-command'
const RELAY_DAEMON_MARKER = ' relay.js --detached '
diff --git a/src/main/ssh/legacy-relay/ssh-relay-incumbent-process.test.ts b/src/main/ssh/legacy-relay/ssh-relay-incumbent-process.test.ts
index 5626c4d6dee4..d5f3370f30d4 100644
--- a/src/main/ssh/legacy-relay/ssh-relay-incumbent-process.test.ts
+++ b/src/main/ssh/legacy-relay/ssh-relay-incumbent-process.test.ts
@@ -1,11 +1,11 @@
-import type * as ExecCommandModule from '../remote-exec-command'
+import type * as ExecCommandModule from '../remote-exec/remote-exec-command'
import { mkdtempSync, writeFileSync, rmSync, readFileSync } from 'node:fs'
import { join } from 'node:path'
import { tmpdir } from 'node:os'
import { createServer } from 'node:net'
import { describe, expect, it, vi } from 'vitest'
import { runProcess } from '@orca/process-host'
-vi.mock('../remote-exec-command', async (importOriginal) => ({
+vi.mock('../remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand: vi.fn()
}))
diff --git a/src/main/ssh/legacy-relay/ssh-relay-sentinel-copy-budget.test.ts b/src/main/ssh/legacy-relay/ssh-relay-sentinel-copy-budget.test.ts
index 23348b6e13df..0723b17c76b8 100644
--- a/src/main/ssh/legacy-relay/ssh-relay-sentinel-copy-budget.test.ts
+++ b/src/main/ssh/legacy-relay/ssh-relay-sentinel-copy-budget.test.ts
@@ -1,7 +1,7 @@
import { EventEmitter } from 'node:events'
import type { ClientChannel } from 'ssh2'
import { expect, it, vi } from 'vitest'
-import { RELAY_SENTINEL } from '../remote-frame-protocol'
+import { RELAY_SENTINEL } from '../remote-exec/remote-frame-protocol'
import { waitForSentinel } from './ssh-relay-sentinel'
it.each([1, 256])('copies each startup prefix once across %i chunks', async (chunks) => {
diff --git a/src/main/ssh/legacy-relay/ssh-relay-sentinel.test.ts b/src/main/ssh/legacy-relay/ssh-relay-sentinel.test.ts
index fffdbe49d850..f724401c2290 100644
--- a/src/main/ssh/legacy-relay/ssh-relay-sentinel.test.ts
+++ b/src/main/ssh/legacy-relay/ssh-relay-sentinel.test.ts
@@ -2,7 +2,7 @@ import { EventEmitter } from 'node:events'
import { describe, expect, it, vi } from 'vitest'
import type { ClientChannel } from 'ssh2'
import { waitForSentinel } from './ssh-relay-sentinel'
-import { RELAY_SENTINEL } from '../remote-frame-protocol'
+import { RELAY_SENTINEL } from '../remote-exec/remote-frame-protocol'
import {
RelayVersionMismatchError,
RELAY_EXIT_CODE_VERSION_MISMATCH
diff --git a/src/main/ssh/legacy-relay/ssh-relay-sentinel.ts b/src/main/ssh/legacy-relay/ssh-relay-sentinel.ts
index 7a63d862f474..8d5ef3969c26 100644
--- a/src/main/ssh/legacy-relay/ssh-relay-sentinel.ts
+++ b/src/main/ssh/legacy-relay/ssh-relay-sentinel.ts
@@ -1,6 +1,6 @@
import type { ClientChannel } from 'ssh2'
import { createSshOperationAbortError } from '../ssh-connection-utils'
-import { RELAY_SENTINEL, RELAY_SENTINEL_TIMEOUT_MS } from '../remote-frame-protocol'
+import { RELAY_SENTINEL, RELAY_SENTINEL_TIMEOUT_MS } from '../remote-exec/remote-frame-protocol'
import type { MultiplexerTransport } from '../ssh-channel-multiplexer'
import { buildRelayHandshakeRefusalError } from './ssh-relay-handshake-mismatch'
diff --git a/src/main/ssh/orcad-candidate-launch-verdict.ts b/src/main/ssh/orcad-candidate-launch-verdict.ts
index d0ee5b2d32fe..831f1a685aa7 100644
--- a/src/main/ssh/orcad-candidate-launch-verdict.ts
+++ b/src/main/ssh/orcad-candidate-launch-verdict.ts
@@ -8,7 +8,7 @@ import {
launchOrcadAndAwaitReadiness,
type OrcadRemoteExecTarget
} from '../managed-server/install/orcad-remote-runtime-control'
-import { isUnconfirmedSshCommandTermination } from './remote-exec-command'
+import { isUnconfirmedSshCommandTermination } from './remote-exec/remote-exec-command'
type CandidateLaunchTarget = Parameters[0] &
OrcadRemoteExecTarget & {
diff --git a/src/main/ssh/orcad-deployment-target.test.ts b/src/main/ssh/orcad-deployment-target.test.ts
index 9fbc6a94b61e..0f3cad13d735 100644
--- a/src/main/ssh/orcad-deployment-target.test.ts
+++ b/src/main/ssh/orcad-deployment-target.test.ts
@@ -1,4 +1,4 @@
-import type * as ExecCommandModule from './remote-exec-command'
+import type * as ExecCommandModule from './remote-exec/remote-exec-command'
import { beforeEach, describe, expect, it, vi } from 'vitest'
import {
parseGlibcVersion,
@@ -7,10 +7,10 @@ import {
} from './orcad-deployment-target'
import { SshConnection } from './ssh-connection'
import { createCallbacks, createTarget } from './ssh-connection-test-fixtures'
-import { execCommand } from './remote-exec-command'
+import { execCommand } from './remote-exec/remote-exec-command'
import { getRemoteHostPlatform } from './ssh-remote-platform'
-vi.mock('./remote-exec-command', async (importOriginal) => ({
+vi.mock('./remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand: vi.fn()
}))
diff --git a/src/main/ssh/orcad-deployment-target.ts b/src/main/ssh/orcad-deployment-target.ts
index 66349e65ba61..c516a6511bd8 100644
--- a/src/main/ssh/orcad-deployment-target.ts
+++ b/src/main/ssh/orcad-deployment-target.ts
@@ -7,7 +7,7 @@ import {
} from '../../shared/node-runtime-pin'
import { ORCAD_SERVER_TARGET_FILENAME } from '../../shared/orcad-artifacts'
import type { RemoteInstallTransport } from '../managed-server/install/remote-install-transport'
-import { execCommand } from './remote-exec-command'
+import { execCommand } from './remote-exec/remote-exec-command'
import type { RemoteHostPlatform } from './ssh-remote-platform'
/** The host answered the libc probe, but with nothing this client recognises. */
diff --git a/src/main/ssh/orcad-exited-own-fence-mutation-race.test.ts b/src/main/ssh/orcad-exited-own-fence-mutation-race.test.ts
index a726bea6e02f..dbc2a47acde2 100644
--- a/src/main/ssh/orcad-exited-own-fence-mutation-race.test.ts
+++ b/src/main/ssh/orcad-exited-own-fence-mutation-race.test.ts
@@ -11,10 +11,10 @@ import { hostname, tmpdir, uptime } from 'node:os'
import { join } from 'node:path'
import { afterEach, describe, expect, it, vi } from 'vitest'
import { runProcess, spawnProcess } from '@orca/process-host'
-import type * as ExecCommandModule from './remote-exec-command'
+import type * as ExecCommandModule from './remote-exec/remote-exec-command'
// The proof's remote commands run in a real local shell.
-vi.mock('./remote-exec-command', async (importOriginal) => {
+vi.mock('./remote-exec/remote-exec-command', async (importOriginal) => {
const { runProcess: run } = await import('@orca/process-host')
return {
...(await importOriginal()),
diff --git a/src/main/ssh/orcad-exited-own-fence.test.ts b/src/main/ssh/orcad-exited-own-fence.test.ts
index 084db7fe9f6f..a5425af61e02 100644
--- a/src/main/ssh/orcad-exited-own-fence.test.ts
+++ b/src/main/ssh/orcad-exited-own-fence.test.ts
@@ -11,13 +11,13 @@ import {
import { hostname, tmpdir, uptime } from 'node:os'
import { join } from 'node:path'
import { afterEach, describe, expect, it, vi } from 'vitest'
-import type * as ExecCommandModule from './remote-exec-command'
+import type * as ExecCommandModule from './remote-exec/remote-exec-command'
// Every remote command runs in a real local shell, so the host-side checks are the real ones.
const shell = vi.hoisted((): { env: NodeJS.ProcessEnv | undefined } => ({ env: undefined }))
-vi.mock('./remote-exec-command', async (importOriginal) => {
+vi.mock('./remote-exec/remote-exec-command', async (importOriginal) => {
const { runProcess } = await import('@orca/process-host')
- const { sshCommandExitError } = await import('./remote-exec-command')
+ const { sshCommandExitError } = await import('./remote-exec/remote-exec-command')
return {
...(await importOriginal()),
execCommand: async (_conn: unknown, command: string) => {
diff --git a/src/main/ssh/orcad-exited-own-install-lock.test.ts b/src/main/ssh/orcad-exited-own-install-lock.test.ts
index 4adf3070a884..4da144676c9b 100644
--- a/src/main/ssh/orcad-exited-own-install-lock.test.ts
+++ b/src/main/ssh/orcad-exited-own-install-lock.test.ts
@@ -11,12 +11,12 @@ import {
import { hostname, tmpdir, uptime } from 'node:os'
import { join } from 'node:path'
import { afterEach, describe, expect, it, vi } from 'vitest'
-import type * as ExecCommandModule from './remote-exec-command'
+import type * as ExecCommandModule from './remote-exec/remote-exec-command'
// Every remote command runs in a real local shell, so the host-side checks are the real ones.
-vi.mock('./remote-exec-command', async (importOriginal) => {
+vi.mock('./remote-exec/remote-exec-command', async (importOriginal) => {
const { runProcess } = await import('@orca/process-host')
- const { sshCommandExitError } = await import('./remote-exec-command')
+ const { sshCommandExitError } = await import('./remote-exec/remote-exec-command')
return {
...(await importOriginal()),
execCommand: async (_conn: unknown, command: string) => {
diff --git a/src/main/ssh/orcad-exited-own-lock-windows.test.ts b/src/main/ssh/orcad-exited-own-lock-windows.test.ts
index ecf397a066af..0aa79ce53fbb 100644
--- a/src/main/ssh/orcad-exited-own-lock-windows.test.ts
+++ b/src/main/ssh/orcad-exited-own-lock-windows.test.ts
@@ -2,14 +2,14 @@ import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs'
import { hostname, tmpdir, uptime } from 'node:os'
import { join } from 'node:path'
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
-import type * as ExecCommandModule from './remote-exec-command'
+import type * as ExecCommandModule from './remote-exec/remote-exec-command'
// The host script's own checks are covered against the real script; here only the client's part.
const remote = vi.hoisted((): { commands: string[]; reply: string } => ({
commands: [],
reply: ''
}))
-vi.mock('./remote-exec-command', async (importOriginal) => ({
+vi.mock('./remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand: async (_conn: unknown, command: string) => {
remote.commands.push(command)
diff --git a/src/main/ssh/orcad-fence-lost-classification.test.ts b/src/main/ssh/orcad-fence-lost-classification.test.ts
index 9566e9c2ed1c..73b8207ef96d 100644
--- a/src/main/ssh/orcad-fence-lost-classification.test.ts
+++ b/src/main/ssh/orcad-fence-lost-classification.test.ts
@@ -13,7 +13,10 @@ import {
posixOrcadFenceGuard,
runWithOrcadFence
} from '../managed-server/activation/orcad-activation-fence-scope'
-import { isUnconfirmedSshCommandTermination, sshCommandExitError } from './remote-exec-command'
+import {
+ isUnconfirmedSshCommandTermination,
+ sshCommandExitError
+} from './remote-exec/remote-exec-command'
import { getRemoteHostPlatform } from './ssh-remote-platform'
import type { OrcadHostTransport } from './orcad-host-transport'
diff --git a/src/main/ssh/orcad-gc-transaction-pins.ts b/src/main/ssh/orcad-gc-transaction-pins.ts
index 590d77711bc5..d9a1a669e830 100644
--- a/src/main/ssh/orcad-gc-transaction-pins.ts
+++ b/src/main/ssh/orcad-gc-transaction-pins.ts
@@ -9,7 +9,7 @@ import { orcadInstallDirNames } from '../managed-server/activation/orcad-activat
import type { OrcadActivationTransaction } from '../managed-server/activation/orcad-activation-transaction'
import { readOrcadActivationTransaction } from '../managed-server/activation/orcad-activation-transaction-store'
import { orcadActivationFenceExists } from '../managed-server/activation/orcad-activation-lock'
-import { isUnconfirmedSshCommandTermination } from './remote-exec-command'
+import { isUnconfirmedSshCommandTermination } from './remote-exec/remote-exec-command'
import type { OrcadRemoteExecTarget } from '../managed-server/install/orcad-remote-runtime-control'
export type OrcadGcTransactionPins = { state: 'pinned'; dirNames: string[] } | { state: 'keep-all' }
diff --git a/src/main/ssh/orcad-incumbent-recovery.ts b/src/main/ssh/orcad-incumbent-recovery.ts
index fee46eb917cc..7f3abc80c536 100644
--- a/src/main/ssh/orcad-incumbent-recovery.ts
+++ b/src/main/ssh/orcad-incumbent-recovery.ts
@@ -9,7 +9,7 @@
import { execOrcadStateMutation } from '../managed-server/host-state/orcad-state-mutation-exec'
import { orcadRemoteBaseDir } from '../managed-server/install/orcad-remote-windows-node'
import type { ServeReadiness } from '../server/serve-readiness'
-import { RELAY_REMOTE_DIR } from './remote-frame-protocol'
+import { RELAY_REMOTE_DIR } from './remote-exec/remote-frame-protocol'
import { ORCAD_STATE_SNAPSHOT_DIR } from '../managed-server/activation/orcad-activation-record'
import type { OrcadSnapshotVerdict } from '../managed-server/activation/orcad-activation-transaction'
import {
diff --git a/src/main/ssh/orcad-installed-activation.ts b/src/main/ssh/orcad-installed-activation.ts
index 50030c363b7a..ea1ad29cd53f 100644
--- a/src/main/ssh/orcad-installed-activation.ts
+++ b/src/main/ssh/orcad-installed-activation.ts
@@ -8,7 +8,7 @@
import { orcadRemoteBaseDir } from '../managed-server/install/orcad-remote-windows-node'
import { randomUUID } from 'node:crypto'
import type { OrcadDeployOptions, OrcadDeployResult } from './orcad-remote-deploy'
-import { isUnconfirmedSshCommandTermination } from './remote-exec-command'
+import { isUnconfirmedSshCommandTermination } from './remote-exec/remote-exec-command'
import {
withActivatedVersion,
type OrcadActivationRecord,
diff --git a/src/main/ssh/orcad-migration-terminal-gate-host-wide.test.ts b/src/main/ssh/orcad-migration-terminal-gate-host-wide.test.ts
index 9a48749ec598..ea7dd74d8148 100644
--- a/src/main/ssh/orcad-migration-terminal-gate-host-wide.test.ts
+++ b/src/main/ssh/orcad-migration-terminal-gate-host-wide.test.ts
@@ -1,7 +1,7 @@
// Astra pass 4 §2: desktop A leases nothing, but desktop B's live shell, under another target id on
// the same account, must never read as exited. COMPAT(legacy-relay-bridge): the host converts anyway
// and leaves B's relay alone, so the census reads `bridged` with nothing of A's to serve.
-import type * as ExecCommandModule from './remote-exec-command'
+import type * as ExecCommandModule from './remote-exec/remote-exec-command'
import { beforeEach, describe, expect, it, vi } from 'vitest'
import type { SshConnection } from './ssh-connection'
import { relaySocketNameForInstanceId } from './legacy-relay/ssh-relay-instance-id'
@@ -20,7 +20,7 @@ const {
countRelayPtysOverBridge: vi.fn()
}))
-vi.mock('./remote-exec-command', async (importOriginal) => ({
+vi.mock('./remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand
}))
diff --git a/src/main/ssh/orcad-remote-deploy.test.ts b/src/main/ssh/orcad-remote-deploy.test.ts
index 0d53cf98aa10..b9531315686f 100644
--- a/src/main/ssh/orcad-remote-deploy.test.ts
+++ b/src/main/ssh/orcad-remote-deploy.test.ts
@@ -1,4 +1,4 @@
-import type * as ExecCommandModule from './remote-exec-command'
+import type * as ExecCommandModule from './remote-exec/remote-exec-command'
import { chmodSync, mkdirSync, mkdtempSync, rmSync, statSync, writeFileSync } from 'node:fs'
import type * as RecordFile from '../managed-server/install/orcad-remote-record-file'
import { tmpdir } from 'node:os'
@@ -6,7 +6,7 @@ import { dirname, join } from 'node:path'
import { beforeEach, describe, expect, it, vi } from 'vitest'
import { runProcess } from '@orca/process-host'
-vi.mock('./remote-exec-command', async (importOriginal) => ({
+vi.mock('./remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand: vi.fn()
}))
@@ -32,7 +32,7 @@ vi.mock('./orcad-local-build-hash', () => ({
computeLocalOrcadBuildHash: () => 'abc123def4567890'
}))
-import { execCommand } from './remote-exec-command'
+import { execCommand } from './remote-exec/remote-exec-command'
import {
acquireInstallLock,
isRelayInstallLockStale
diff --git a/src/main/ssh/orcad-remote-node-runtime-report.ts b/src/main/ssh/orcad-remote-node-runtime-report.ts
index 0fd882db0ddb..50179a750ddb 100644
--- a/src/main/ssh/orcad-remote-node-runtime-report.ts
+++ b/src/main/ssh/orcad-remote-node-runtime-report.ts
@@ -1,5 +1,5 @@
/** What the host-side runtime-store scripts print, shared by the POSIX and Windows installers. */
-import { RelayHostAnsweredError } from './remote-host-answered-failure'
+import { RelayHostAnsweredError } from './remote-exec/remote-host-answered-failure'
export const REMOTE_NODE_RUNTIME_READY = 'ORCA_NODE_RUNTIME_READY'
export const REMOTE_NODE_RUNTIME_MISSING = 'ORCA_NODE_RUNTIME_MISSING'
diff --git a/src/main/ssh/port-forwarding/ssh-port-forward.test.ts b/src/main/ssh/port-forwarding/ssh-port-forward.test.ts
index 4489ff049035..fa4c5651f235 100644
--- a/src/main/ssh/port-forwarding/ssh-port-forward.test.ts
+++ b/src/main/ssh/port-forwarding/ssh-port-forward.test.ts
@@ -7,7 +7,7 @@ const { startSystemSshPortForwardProcessMock } = vi.hoisted(() => ({
startSystemSshPortForwardProcessMock: vi.fn()
}))
-vi.mock('../system-ssh-forward-process', async (importOriginal) => {
+vi.mock('../system-transport/system-ssh-forward-process', async (importOriginal) => {
const actual = (await importOriginal()) as Record
return {
...actual,
diff --git a/src/main/ssh/port-forwarding/system-ssh-port-forward-provider.ts b/src/main/ssh/port-forwarding/system-ssh-port-forward-provider.ts
index 03df12434c0a..16ef43052fae 100644
--- a/src/main/ssh/port-forwarding/system-ssh-port-forward-provider.ts
+++ b/src/main/ssh/port-forwarding/system-ssh-port-forward-provider.ts
@@ -1,9 +1,9 @@
import type { SshConnection } from '../ssh-connection'
-import type { SystemSshBuildArgsOptions } from '../system-ssh-args'
+import type { SystemSshBuildArgsOptions } from '../system-transport/system-ssh-args'
import {
startSystemSshPortForwardProcess,
systemSshForwardError
-} from '../system-ssh-forward-process'
+} from '../system-transport/system-ssh-forward-process'
import type {
ForwardChannelOpenFailure,
PortForwardStartOptions,
diff --git a/src/main/ssh/relay-bundle-paths.ts b/src/main/ssh/relay-bundle-paths.ts
index c43ef6541bbf..ac97aa344105 100644
--- a/src/main/ssh/relay-bundle-paths.ts
+++ b/src/main/ssh/relay-bundle-paths.ts
@@ -1,6 +1,6 @@
import { join } from 'node:path'
import { getAppEnvironment } from '../../shared/app-environment'
-import type { RelayPlatform } from './remote-frame-protocol'
+import type { RelayPlatform } from './remote-exec/remote-frame-protocol'
function currentAppPath(): string | undefined {
try {
diff --git a/src/main/ssh/remote-exec-closed-stdin.test.ts b/src/main/ssh/remote-exec/remote-exec-closed-stdin.test.ts
similarity index 95%
rename from src/main/ssh/remote-exec-closed-stdin.test.ts
rename to src/main/ssh/remote-exec/remote-exec-closed-stdin.test.ts
index 7e3883633ed7..596bd0420a32 100644
--- a/src/main/ssh/remote-exec-closed-stdin.test.ts
+++ b/src/main/ssh/remote-exec/remote-exec-closed-stdin.test.ts
@@ -1,6 +1,6 @@
import { Duplex, PassThrough, Readable } from 'node:stream'
import { describe, expect, it, vi } from 'vitest'
-import type { RemoteCommandChannel } from '../managed-server/install/remote-install-transport'
+import type { RemoteCommandChannel } from '../../managed-server/install/remote-install-transport'
import { execCommand } from './remote-exec-command'
function answering(output: string): RemoteCommandChannel {
diff --git a/src/main/ssh/remote-exec-command.test.ts b/src/main/ssh/remote-exec/remote-exec-command.test.ts
similarity index 100%
rename from src/main/ssh/remote-exec-command.test.ts
rename to src/main/ssh/remote-exec/remote-exec-command.test.ts
diff --git a/src/main/ssh/remote-exec-command.ts b/src/main/ssh/remote-exec/remote-exec-command.ts
similarity index 96%
rename from src/main/ssh/remote-exec-command.ts
rename to src/main/ssh/remote-exec/remote-exec-command.ts
index 691885ac6ca8..5b5b51d3723a 100644
--- a/src/main/ssh/remote-exec-command.ts
+++ b/src/main/ssh/remote-exec/remote-exec-command.ts
@@ -2,14 +2,14 @@ import type { Readable } from 'node:stream'
import type {
RemoteCommandChannel,
RemoteInstallTransport
-} from '../managed-server/install/remote-install-transport'
-import { createSshOperationAbortError, type SshExecOptions } from './ssh-connection-utils'
+} from '../../managed-server/install/remote-install-transport'
+import { createSshOperationAbortError, type SshExecOptions } from '../ssh-connection-utils'
import {
redactRelayInstallMarkerError,
redactRelayInstallMarkerTokens
-} from '../managed-server/install/remote-install-marker'
-import type { SystemSshCommandChannel } from './system-ssh-command'
-import { buildPosixStdoutFence } from '../../shared/posix-stdout-fence'
+} from '../../managed-server/install/remote-install-marker'
+import type { SystemSshCommandChannel } from '../system-transport/system-ssh-command'
+import { buildPosixStdoutFence } from '../../../shared/posix-stdout-fence'
const EXEC_TIMEOUT_MS = 30_000
const COMMAND_CLOSE_GRACE_MS = 5_000
diff --git a/src/main/ssh/remote-exec-input.test.ts b/src/main/ssh/remote-exec/remote-exec-input.test.ts
similarity index 91%
rename from src/main/ssh/remote-exec-input.test.ts
rename to src/main/ssh/remote-exec/remote-exec-input.test.ts
index b6fbe50f0dab..03618e5e01c2 100644
--- a/src/main/ssh/remote-exec-input.test.ts
+++ b/src/main/ssh/remote-exec/remote-exec-input.test.ts
@@ -5,8 +5,8 @@ import { execCommand } from './remote-exec-command'
const { spawnMock } = vi.hoisted(() => ({ spawnMock: vi.fn() }))
vi.mock('node:child_process', () => ({ spawn: spawnMock }))
-vi.mock('./system-ssh-binary', () => ({ findSystemSsh: () => '/usr/bin/ssh' }))
-import { spawnSystemSshCommand } from './system-ssh-command'
+vi.mock('../system-transport/system-ssh-binary', () => ({ findSystemSsh: () => '/usr/bin/ssh' }))
+import { spawnSystemSshCommand } from '../system-transport/system-ssh-command'
function fakeSshProcess() {
const proc = Object.assign(new EventEmitter(), {
diff --git a/src/main/ssh/remote-frame-protocol.test.ts b/src/main/ssh/remote-exec/remote-frame-protocol.test.ts
similarity index 99%
rename from src/main/ssh/remote-frame-protocol.test.ts
rename to src/main/ssh/remote-exec/remote-frame-protocol.test.ts
index 52a4e1ff5dc4..268931d9655d 100644
--- a/src/main/ssh/remote-frame-protocol.test.ts
+++ b/src/main/ssh/remote-exec/remote-frame-protocol.test.ts
@@ -1,5 +1,5 @@
import { describe, expect, it, vi } from 'vitest'
-import { HEADER_LENGTH, FrameDecoder, type DecodedFrame } from '../../shared/relay-frame-decoder'
+import { HEADER_LENGTH, FrameDecoder, type DecodedFrame } from '../../../shared/relay-frame-decoder'
import {
MessageType,
encodeFrame,
diff --git a/src/main/ssh/remote-frame-protocol.ts b/src/main/ssh/remote-exec/remote-frame-protocol.ts
similarity index 98%
rename from src/main/ssh/remote-frame-protocol.ts
rename to src/main/ssh/remote-exec/remote-frame-protocol.ts
index e27348db7b0f..235ba06b7b2f 100644
--- a/src/main/ssh/remote-frame-protocol.ts
+++ b/src/main/ssh/remote-exec/remote-frame-protocol.ts
@@ -2,7 +2,7 @@
// 13-byte framing header matching VS Code's PersistentProtocol wire format.
// See design-ssh-support.md § JSON-RPC Protocol Specification.
-import { HEADER_LENGTH, MAX_MESSAGE_SIZE } from '../../shared/relay-frame-decoder'
+import { HEADER_LENGTH, MAX_MESSAGE_SIZE } from '../../../shared/relay-frame-decoder'
export const RELAY_VERSION = '0.1.0'
export const RELAY_SENTINEL = `ORCA-RELAY v${RELAY_VERSION} READY\n`
export const RELAY_SENTINEL_TIMEOUT_MS = 10_000
diff --git a/src/main/ssh/remote-host-answered-failure-producers.test.ts b/src/main/ssh/remote-exec/remote-host-answered-failure-producers.test.ts
similarity index 90%
rename from src/main/ssh/remote-host-answered-failure-producers.test.ts
rename to src/main/ssh/remote-exec/remote-host-answered-failure-producers.test.ts
index 09b1f8edacb2..d1845fbaf31e 100644
--- a/src/main/ssh/remote-host-answered-failure-producers.test.ts
+++ b/src/main/ssh/remote-exec/remote-host-answered-failure-producers.test.ts
@@ -7,28 +7,30 @@ import { chmod, mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
-import { NODE_RUNTIME_PIN } from '../../shared/node-runtime-pin'
-import type { SshTarget } from '../../shared/ssh-types'
+import { NODE_RUNTIME_PIN } from '../../../shared/node-runtime-pin'
+import type { SshTarget } from '../../../shared/ssh-types'
import { runProcess, runProcessSync } from '@orca/process-host'
import {
REMOTE_NODE_RUNTIME_READY,
REMOTE_NODE_RUNTIME_VERIFIED_MARKER,
RemoteNodeRuntimeSelfTestError,
assertRemoteNodeRuntimePromoted
-} from './orcad-remote-node-runtime-report'
-import { remoteNodeRuntimePresentCommand } from '../managed-server/install/orcad-remote-node-runtime'
+} from '../orcad-remote-node-runtime-report'
+import { remoteNodeRuntimePresentCommand } from '../../managed-server/install/orcad-remote-node-runtime'
import { isAnsweredHostFailure } from './remote-host-answered-failure'
-import { getRemoteHostPlatform } from './ssh-remote-platform'
-import { findSystemSsh } from './system-ssh-binary'
-import { uploadDirectoryViaSystemSsh } from './system-ssh-file-transfer'
-import { runSftpBatch } from './system-ssh-sftp-transfer'
+import { getRemoteHostPlatform } from '../ssh-remote-platform'
+import { findSystemSsh } from '../system-transport/system-ssh-binary'
+import { uploadDirectoryViaSystemSsh } from '../system-transport/system-ssh-file-transfer'
+import { runSftpBatch } from '../system-transport/system-ssh-sftp-transfer'
vi.mock('@orca/process-host', async (importOriginal) => ({
...(await importOriginal>()),
runProcess: vi.fn()
}))
-vi.mock('./system-ssh-args', () => ({ buildSshArgs: () => ['--', 'host'] }))
-vi.mock('./system-ssh-binary', () => ({ findSystemSsh: vi.fn(() => '/usr/bin/ssh') }))
+vi.mock('../system-transport/system-ssh-args', () => ({ buildSshArgs: () => ['--', 'host'] }))
+vi.mock('../system-transport/system-ssh-binary', () => ({
+ findSystemSsh: vi.fn(() => '/usr/bin/ssh')
+}))
const posix = process.platform !== 'win32'
// oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: ssh args are mocked, so the target is never read.
diff --git a/src/main/ssh/remote-host-answered-failure.test.ts b/src/main/ssh/remote-exec/remote-host-answered-failure.test.ts
similarity index 94%
rename from src/main/ssh/remote-host-answered-failure.test.ts
rename to src/main/ssh/remote-exec/remote-host-answered-failure.test.ts
index 125303285240..84ea9a577009 100644
--- a/src/main/ssh/remote-host-answered-failure.test.ts
+++ b/src/main/ssh/remote-exec/remote-host-answered-failure.test.ts
@@ -2,10 +2,10 @@ import { describe, expect, it } from 'vitest'
import {
RemoteNodeRuntimeSecurityModifiedError,
RemoteNodeRuntimeSelfTestError
-} from './orcad-remote-node-runtime-report'
+} from '../orcad-remote-node-runtime-report'
import { isAnsweredHostFailure, RelayHostAnsweredError } from './remote-host-answered-failure'
import { SSH_EXEC_TIMEOUT_CODE } from './remote-exec-command'
-import { SystemSshCommandExitError } from './system-ssh-operation-lifecycle'
+import { SystemSshCommandExitError } from '../system-transport/system-ssh-operation-lifecycle'
const exitError = (code: number, message: string): Error =>
Object.assign(new Error(message), { exitCode: code, stdout: '' })
diff --git a/src/main/ssh/remote-host-answered-failure.ts b/src/main/ssh/remote-exec/remote-host-answered-failure.ts
similarity index 92%
rename from src/main/ssh/remote-host-answered-failure.ts
rename to src/main/ssh/remote-exec/remote-host-answered-failure.ts
index 119820c73637..1177fc6035de 100644
--- a/src/main/ssh/remote-host-answered-failure.ts
+++ b/src/main/ssh/remote-exec/remote-host-answered-failure.ts
@@ -4,11 +4,11 @@
* so the connect fails retryably and never launches a second relay beside one that may be running.
*/
import { isSshCommandExitError } from './remote-exec-command'
-import { isSshSessionLimitError } from './ssh-session-limit-error'
+import { isSshSessionLimitError } from '../ssh-session-limit-error'
import {
isHostAnsweredSystemSshExit,
SystemSshCommandExitError
-} from './system-ssh-operation-lifecycle'
+} from '../system-transport/system-ssh-operation-lifecycle'
/** SFTP statuses the server sent about the request itself; NO_CONNECTION/CONNECTION_LOST are transport. */
const ANSWERED_SFTP_STATUSES: ReadonlySet = new Set([1, 2, 3, 4, 5, 8])
diff --git a/src/main/ssh/remote-host-exec.ts b/src/main/ssh/remote-exec/remote-host-exec.ts
similarity index 74%
rename from src/main/ssh/remote-host-exec.ts
rename to src/main/ssh/remote-exec/remote-host-exec.ts
index f480111fc5fe..83dfa23326a3 100644
--- a/src/main/ssh/remote-host-exec.ts
+++ b/src/main/ssh/remote-exec/remote-host-exec.ts
@@ -1,6 +1,6 @@
-import type { RemoteInstallTransport } from '../managed-server/install/remote-install-transport'
+import type { RemoteInstallTransport } from '../../managed-server/install/remote-install-transport'
import { execCommand } from './remote-exec-command'
-import type { RemoteHostPlatform } from './ssh-remote-platform'
+import type { RemoteHostPlatform } from '../ssh-remote-platform'
export function execHostCommand(
conn: RemoteInstallTransport,
diff --git a/src/main/ssh/ssh-agent-identity-filter.ts b/src/main/ssh/ssh-agent-identity-filter.ts
index 35a3c0a77219..e2fb48a6595e 100644
--- a/src/main/ssh/ssh-agent-identity-filter.ts
+++ b/src/main/ssh/ssh-agent-identity-filter.ts
@@ -9,7 +9,7 @@ import {
type SignCallback,
type SigningRequestOptions
} from 'ssh2'
-import { resolveSshConfigHomePath } from './ssh-config-path-expansion'
+import { resolveSshConfigHomePath } from './config/ssh-config-path-expansion'
type AgentPublicKey = ParsedKey | Buffer | string | PublicKeyEntry
diff --git a/src/main/ssh/ssh-auth-resolution.ts b/src/main/ssh/ssh-auth-resolution.ts
index 86b4bb3dc441..d1ab583803f3 100644
--- a/src/main/ssh/ssh-auth-resolution.ts
+++ b/src/main/ssh/ssh-auth-resolution.ts
@@ -1,10 +1,10 @@
import { existsSync, readFileSync } from 'node:fs'
import { utils, type BaseAgent, type ParsedKey } from 'ssh2'
import type { SshTarget } from '../../shared/ssh-types'
-import type { SshResolvedConfig } from './ssh-g-config-resolution'
+import type { SshResolvedConfig } from './config/ssh-g-config-resolution'
import { createIdentityFilteredAgent } from './ssh-agent-identity-filter'
-import { resolveSshConfigHomePath } from './ssh-config-path-expansion'
-import { isOpenSshConfigBackedTarget } from './system-ssh-args'
+import { resolveSshConfigHomePath } from './config/ssh-config-path-expansion'
+import { isOpenSshConfigBackedTarget } from './system-transport/system-ssh-args'
// Why: ssh2 only tries keys that are explicitly provided. Users with keys in
// standard locations (e.g. ~/.ssh/id_ed25519) but no SSH agent running would
diff --git a/src/main/ssh/ssh-channel-multiplexer-backpressure.test.ts b/src/main/ssh/ssh-channel-multiplexer-backpressure.test.ts
index 1ff817c43f89..e893fa079d97 100644
--- a/src/main/ssh/ssh-channel-multiplexer-backpressure.test.ts
+++ b/src/main/ssh/ssh-channel-multiplexer-backpressure.test.ts
@@ -1,6 +1,6 @@
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
import { SshChannelMultiplexer, type MultiplexerTransport } from './ssh-channel-multiplexer'
-import { encodeFrame, encodeKeepAliveFrame, MessageType } from './remote-frame-protocol'
+import { encodeFrame, encodeKeepAliveFrame, MessageType } from './remote-exec/remote-frame-protocol'
import { HEADER_LENGTH } from '../../shared/relay-frame-decoder'
type MockTransport = MultiplexerTransport & {
diff --git a/src/main/ssh/ssh-channel-multiplexer-saturation-wedge.test.ts b/src/main/ssh/ssh-channel-multiplexer-saturation-wedge.test.ts
index 2c92c28d91e9..be31ddfbc636 100644
--- a/src/main/ssh/ssh-channel-multiplexer-saturation-wedge.test.ts
+++ b/src/main/ssh/ssh-channel-multiplexer-saturation-wedge.test.ts
@@ -1,5 +1,9 @@
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
-import { encodeKeepAliveFrame, KEEPALIVE_SEND_MS, TIMEOUT_MS } from './remote-frame-protocol'
+import {
+ encodeKeepAliveFrame,
+ KEEPALIVE_SEND_MS,
+ TIMEOUT_MS
+} from './remote-exec/remote-frame-protocol'
import { SshChannelMultiplexer, type MultiplexerTransport } from './ssh-channel-multiplexer'
type WedgedTransport = MultiplexerTransport & { writes: Buffer[]; feed: (chunk: Buffer) => void }
diff --git a/src/main/ssh/ssh-channel-multiplexer.test.ts b/src/main/ssh/ssh-channel-multiplexer.test.ts
index 3f4e058791de..5a2d82ef8d65 100644
--- a/src/main/ssh/ssh-channel-multiplexer.test.ts
+++ b/src/main/ssh/ssh-channel-multiplexer.test.ts
@@ -1,6 +1,6 @@
import { describe, expect, it, vi, beforeEach, afterEach } from 'vitest'
import { SshChannelMultiplexer, type MultiplexerTransport } from './ssh-channel-multiplexer'
-import { encodeFrame, MessageType, encodeKeepAliveFrame } from './remote-frame-protocol'
+import { encodeFrame, MessageType, encodeKeepAliveFrame } from './remote-exec/remote-frame-protocol'
import { HEADER_LENGTH } from '../../shared/relay-frame-decoder'
function createMockTransport(): MultiplexerTransport & {
diff --git a/src/main/ssh/ssh-channel-multiplexer.ts b/src/main/ssh/ssh-channel-multiplexer.ts
index 12bf62c27812..e9b2f93d5b13 100644
--- a/src/main/ssh/ssh-channel-multiplexer.ts
+++ b/src/main/ssh/ssh-channel-multiplexer.ts
@@ -12,7 +12,7 @@ import {
type JsonRpcRequest,
type JsonRpcResponse,
type JsonRpcNotification
-} from './remote-frame-protocol'
+} from './remote-exec/remote-frame-protocol'
import {
SshMultiplexerTransportWriter,
type MultiplexerTransport,
diff --git a/src/main/ssh/ssh-connection-auth-fallback.test.ts b/src/main/ssh/ssh-connection-auth-fallback.test.ts
index 4fdd70fb4c59..ffccecf5f26d 100644
--- a/src/main/ssh/ssh-connection-auth-fallback.test.ts
+++ b/src/main/ssh/ssh-connection-auth-fallback.test.ts
@@ -16,24 +16,24 @@ import {
walkInitialAuthLadder
} from './ssh-connection-test-fixtures'
import { SshConnection } from './ssh-connection'
-import { resolveWithSshG } from './ssh-g-config-resolution'
+import { resolveWithSshG } from './config/ssh-g-config-resolution'
vi.mock('ssh2', async () => (await import('./ssh-connection-test-harness')).createSsh2Module())
-vi.mock('./system-ssh-binary', async () =>
+vi.mock('./system-transport/system-ssh-binary', async () =>
(await import('./ssh-connection-test-harness')).createSystemSshBinaryModule()
)
-vi.mock('./system-ssh-args', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-args', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshArgsMocks(await importOriginal())
)
-vi.mock('./system-ssh-command', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-command', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshCommandMocks(await importOriginal())
)
-vi.mock('./system-ssh-file-binary-transfer', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-file-binary-transfer', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshFileBinaryTransferMocks(
await importOriginal()
)
)
-vi.mock('./system-ssh-file-transfer', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-file-transfer', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshFileTransferMocks(
await importOriginal()
)
@@ -41,10 +41,10 @@ vi.mock('./system-ssh-file-transfer', async (importOriginal) =>
vi.mock('./ssh-control-socket', async () =>
(await import('./ssh-connection-test-harness')).createControlSocketModule()
)
-vi.mock('./ssh-config-parser', async () =>
+vi.mock('./config/ssh-config-parser', async () =>
(await import('./ssh-connection-test-harness')).createSshConfigParserModule()
)
-vi.mock('./ssh-g-config-resolution', async (importOriginal) =>
+vi.mock('./config/ssh-g-config-resolution', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSshGConfigResolutionMocks(
await importOriginal()
)
diff --git a/src/main/ssh/ssh-connection-channel-error.test.ts b/src/main/ssh/ssh-connection-channel-error.test.ts
index 5d7420200340..717c60119445 100644
--- a/src/main/ssh/ssh-connection-channel-error.test.ts
+++ b/src/main/ssh/ssh-connection-channel-error.test.ts
@@ -6,21 +6,21 @@ import { resetSshConnectionMocks, ssh2Mock } from './ssh-connection-test-harness
import * as sshClientMock from './__tests__/ssh-connection-test-client'
vi.mock('ssh2', async () => (await import('./ssh-connection-test-harness')).createSsh2Module())
-vi.mock('./system-ssh-binary', async () =>
+vi.mock('./system-transport/system-ssh-binary', async () =>
(await import('./ssh-connection-test-harness')).createSystemSshBinaryModule()
)
-vi.mock('./system-ssh-args', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-args', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshArgsMocks(await importOriginal())
)
-vi.mock('./system-ssh-command', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-command', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshCommandMocks(await importOriginal())
)
-vi.mock('./system-ssh-file-binary-transfer', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-file-binary-transfer', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshFileBinaryTransferMocks(
await importOriginal()
)
)
-vi.mock('./system-ssh-file-transfer', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-file-transfer', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshFileTransferMocks(
await importOriginal()
)
@@ -28,10 +28,10 @@ vi.mock('./system-ssh-file-transfer', async (importOriginal) =>
vi.mock('./ssh-control-socket', async () =>
(await import('./ssh-connection-test-harness')).createControlSocketModule()
)
-vi.mock('./ssh-config-parser', async () =>
+vi.mock('./config/ssh-config-parser', async () =>
(await import('./ssh-connection-test-harness')).createSshConfigParserModule()
)
-vi.mock('./ssh-g-config-resolution', async (importOriginal) =>
+vi.mock('./config/ssh-g-config-resolution', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSshGConfigResolutionMocks(
await importOriginal()
)
diff --git a/src/main/ssh/ssh-connection-channel-open.test.ts b/src/main/ssh/ssh-connection-channel-open.test.ts
index 6ae28e10e72b..999dd9744e96 100644
--- a/src/main/ssh/ssh-connection-channel-open.test.ts
+++ b/src/main/ssh/ssh-connection-channel-open.test.ts
@@ -11,21 +11,21 @@ import { createCallbacks, createTarget } from './ssh-connection-test-fixtures'
import { SshConnection } from './ssh-connection'
vi.mock('ssh2', async () => (await import('./ssh-connection-test-harness')).createSsh2Module())
-vi.mock('./system-ssh-binary', async () =>
+vi.mock('./system-transport/system-ssh-binary', async () =>
(await import('./ssh-connection-test-harness')).createSystemSshBinaryModule()
)
-vi.mock('./system-ssh-args', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-args', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshArgsMocks(await importOriginal())
)
-vi.mock('./system-ssh-command', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-command', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshCommandMocks(await importOriginal())
)
-vi.mock('./system-ssh-file-binary-transfer', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-file-binary-transfer', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshFileBinaryTransferMocks(
await importOriginal()
)
)
-vi.mock('./system-ssh-file-transfer', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-file-transfer', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshFileTransferMocks(
await importOriginal()
)
@@ -33,10 +33,10 @@ vi.mock('./system-ssh-file-transfer', async (importOriginal) =>
vi.mock('./ssh-control-socket', async () =>
(await import('./ssh-connection-test-harness')).createControlSocketModule()
)
-vi.mock('./ssh-config-parser', async () =>
+vi.mock('./config/ssh-config-parser', async () =>
(await import('./ssh-connection-test-harness')).createSshConfigParserModule()
)
-vi.mock('./ssh-g-config-resolution', async (importOriginal) =>
+vi.mock('./config/ssh-g-config-resolution', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSshGConfigResolutionMocks(
await importOriginal()
)
diff --git a/src/main/ssh/ssh-connection-direct-startup.test.ts b/src/main/ssh/ssh-connection-direct-startup.test.ts
index 10b7731374c1..761184083e88 100644
--- a/src/main/ssh/ssh-connection-direct-startup.test.ts
+++ b/src/main/ssh/ssh-connection-direct-startup.test.ts
@@ -4,24 +4,24 @@ import { resetSshConnectionMocks, spawnSystemSshCommandMock } from './ssh-connec
import { createCallbacks, createResolvedConfig, createTarget } from './ssh-connection-test-fixtures'
import type { createSystemCommandChannel } from './ssh-connection-test-fixtures'
import { SshConnection } from './ssh-connection'
-import { resolveWithSshG } from './ssh-g-config-resolution'
+import { resolveWithSshG } from './config/ssh-g-config-resolution'
vi.mock('ssh2', async () => (await import('./ssh-connection-test-harness')).createSsh2Module())
-vi.mock('./system-ssh-binary', async () =>
+vi.mock('./system-transport/system-ssh-binary', async () =>
(await import('./ssh-connection-test-harness')).createSystemSshBinaryModule()
)
-vi.mock('./system-ssh-args', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-args', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshArgsMocks(await importOriginal())
)
-vi.mock('./system-ssh-command', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-command', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshCommandMocks(await importOriginal())
)
-vi.mock('./system-ssh-file-binary-transfer', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-file-binary-transfer', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshFileBinaryTransferMocks(
await importOriginal()
)
)
-vi.mock('./system-ssh-file-transfer', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-file-transfer', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshFileTransferMocks(
await importOriginal()
)
@@ -29,10 +29,10 @@ vi.mock('./system-ssh-file-transfer', async (importOriginal) =>
vi.mock('./ssh-control-socket', async () =>
(await import('./ssh-connection-test-harness')).createControlSocketModule()
)
-vi.mock('./ssh-config-parser', async () =>
+vi.mock('./config/ssh-config-parser', async () =>
(await import('./ssh-connection-test-harness')).createSshConfigParserModule()
)
-vi.mock('./ssh-g-config-resolution', async (importOriginal) =>
+vi.mock('./config/ssh-g-config-resolution', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSshGConfigResolutionMocks(
await importOriginal()
)
diff --git a/src/main/ssh/ssh-connection-file-transfer.test.ts b/src/main/ssh/ssh-connection-file-transfer.test.ts
index 3b176ccb1251..48a43b733014 100644
--- a/src/main/ssh/ssh-connection-file-transfer.test.ts
+++ b/src/main/ssh/ssh-connection-file-transfer.test.ts
@@ -2,31 +2,34 @@ import { describe, expect, it, vi, beforeEach } from 'vitest'
import { resetSshConnectionMocks } from './ssh-connection-test-harness'
import { createCallbacks, createResolvedConfig, createTarget } from './ssh-connection-test-fixtures'
import { SshConnection } from './ssh-connection'
-import { resolveWithSshG } from './ssh-g-config-resolution'
+import { resolveWithSshG } from './config/ssh-g-config-resolution'
import {
downloadFileViaSystemSsh,
uploadFileViaSystemSsh,
writeBufferViaSystemSsh
-} from './system-ssh-file-binary-transfer'
-import { uploadDirectoryViaSystemSsh, writeFileViaSystemSsh } from './system-ssh-file-transfer'
+} from './system-transport/system-ssh-file-binary-transfer'
+import {
+ uploadDirectoryViaSystemSsh,
+ writeFileViaSystemSsh
+} from './system-transport/system-ssh-file-transfer'
import { getRemoteHostPlatform } from './ssh-remote-platform'
vi.mock('ssh2', async () => (await import('./ssh-connection-test-harness')).createSsh2Module())
-vi.mock('./system-ssh-binary', async () =>
+vi.mock('./system-transport/system-ssh-binary', async () =>
(await import('./ssh-connection-test-harness')).createSystemSshBinaryModule()
)
-vi.mock('./system-ssh-args', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-args', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshArgsMocks(await importOriginal())
)
-vi.mock('./system-ssh-command', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-command', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshCommandMocks(await importOriginal())
)
-vi.mock('./system-ssh-file-binary-transfer', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-file-binary-transfer', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshFileBinaryTransferMocks(
await importOriginal()
)
)
-vi.mock('./system-ssh-file-transfer', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-file-transfer', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshFileTransferMocks(
await importOriginal()
)
@@ -34,10 +37,10 @@ vi.mock('./system-ssh-file-transfer', async (importOriginal) =>
vi.mock('./ssh-control-socket', async () =>
(await import('./ssh-connection-test-harness')).createControlSocketModule()
)
-vi.mock('./ssh-config-parser', async () =>
+vi.mock('./config/ssh-config-parser', async () =>
(await import('./ssh-connection-test-harness')).createSshConfigParserModule()
)
-vi.mock('./ssh-g-config-resolution', async (importOriginal) =>
+vi.mock('./config/ssh-g-config-resolution', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSshGConfigResolutionMocks(
await importOriginal()
)
diff --git a/src/main/ssh/ssh-connection-file-transfers.ts b/src/main/ssh/ssh-connection-file-transfers.ts
index c15a0880586f..930d7303dfac 100644
--- a/src/main/ssh/ssh-connection-file-transfers.ts
+++ b/src/main/ssh/ssh-connection-file-transfers.ts
@@ -14,9 +14,12 @@ import {
downloadFileViaSystemSsh,
uploadFileViaSystemSsh,
writeBufferViaSystemSsh
-} from './system-ssh-file-binary-transfer'
-import { uploadDirectoryViaSystemSsh, writeFileViaSystemSsh } from './system-ssh-file-transfer'
-import type { SystemSshBuildArgsOptions } from './system-ssh-args'
+} from './system-transport/system-ssh-file-binary-transfer'
+import {
+ uploadDirectoryViaSystemSsh,
+ writeFileViaSystemSsh
+} from './system-transport/system-ssh-file-transfer'
+import type { SystemSshBuildArgsOptions } from './system-transport/system-ssh-args'
export type SshRemoteFileOptions = {
hostPlatform?: RemoteHostPlatform
diff --git a/src/main/ssh/ssh-connection-github-probe.test.ts b/src/main/ssh/ssh-connection-github-probe.test.ts
index e825fc28a28b..43519f474d5d 100644
--- a/src/main/ssh/ssh-connection-github-probe.test.ts
+++ b/src/main/ssh/ssh-connection-github-probe.test.ts
@@ -7,24 +7,24 @@ import {
createTarget
} from './ssh-connection-test-fixtures'
import { SshConnection } from './ssh-connection'
-import { resolveWithSshG } from './ssh-g-config-resolution'
+import { resolveWithSshG } from './config/ssh-g-config-resolution'
vi.mock('ssh2', async () => (await import('./ssh-connection-test-harness')).createSsh2Module())
-vi.mock('./system-ssh-binary', async () =>
+vi.mock('./system-transport/system-ssh-binary', async () =>
(await import('./ssh-connection-test-harness')).createSystemSshBinaryModule()
)
-vi.mock('./system-ssh-args', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-args', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshArgsMocks(await importOriginal())
)
-vi.mock('./system-ssh-command', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-command', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshCommandMocks(await importOriginal())
)
-vi.mock('./system-ssh-file-binary-transfer', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-file-binary-transfer', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshFileBinaryTransferMocks(
await importOriginal()
)
)
-vi.mock('./system-ssh-file-transfer', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-file-transfer', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshFileTransferMocks(
await importOriginal()
)
@@ -32,10 +32,10 @@ vi.mock('./system-ssh-file-transfer', async (importOriginal) =>
vi.mock('./ssh-control-socket', async () =>
(await import('./ssh-connection-test-harness')).createControlSocketModule()
)
-vi.mock('./ssh-config-parser', async () =>
+vi.mock('./config/ssh-config-parser', async () =>
(await import('./ssh-connection-test-harness')).createSshConfigParserModule()
)
-vi.mock('./ssh-g-config-resolution', async (importOriginal) =>
+vi.mock('./config/ssh-g-config-resolution', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSshGConfigResolutionMocks(
await importOriginal()
)
diff --git a/src/main/ssh/ssh-connection-gssapi-fallback.test.ts b/src/main/ssh/ssh-connection-gssapi-fallback.test.ts
index 41a6e67fff04..46ad95b91457 100644
--- a/src/main/ssh/ssh-connection-gssapi-fallback.test.ts
+++ b/src/main/ssh/ssh-connection-gssapi-fallback.test.ts
@@ -17,24 +17,24 @@ import {
createTarget
} from './ssh-connection-test-fixtures'
import { SshConnection } from './ssh-connection'
-import { resolveWithSshG } from './ssh-g-config-resolution'
+import { resolveWithSshG } from './config/ssh-g-config-resolution'
vi.mock('ssh2', async () => (await import('./ssh-connection-test-harness')).createSsh2Module())
-vi.mock('./system-ssh-binary', async () =>
+vi.mock('./system-transport/system-ssh-binary', async () =>
(await import('./ssh-connection-test-harness')).createSystemSshBinaryModule()
)
-vi.mock('./system-ssh-args', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-args', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshArgsMocks(await importOriginal())
)
-vi.mock('./system-ssh-command', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-command', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshCommandMocks(await importOriginal())
)
-vi.mock('./system-ssh-file-binary-transfer', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-file-binary-transfer', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshFileBinaryTransferMocks(
await importOriginal()
)
)
-vi.mock('./system-ssh-file-transfer', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-file-transfer', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshFileTransferMocks(
await importOriginal()
)
@@ -42,10 +42,10 @@ vi.mock('./system-ssh-file-transfer', async (importOriginal) =>
vi.mock('./ssh-control-socket', async () =>
(await import('./ssh-connection-test-harness')).createControlSocketModule()
)
-vi.mock('./ssh-config-parser', async () =>
+vi.mock('./config/ssh-config-parser', async () =>
(await import('./ssh-connection-test-harness')).createSshConfigParserModule()
)
-vi.mock('./ssh-g-config-resolution', async (importOriginal) =>
+vi.mock('./config/ssh-g-config-resolution', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSshGConfigResolutionMocks(
await importOriginal()
)
diff --git a/src/main/ssh/ssh-connection-host-key-store-wiring.test.ts b/src/main/ssh/ssh-connection-host-key-store-wiring.test.ts
index 5b3a834337fa..456aefa212c1 100644
--- a/src/main/ssh/ssh-connection-host-key-store-wiring.test.ts
+++ b/src/main/ssh/ssh-connection-host-key-store-wiring.test.ts
@@ -15,7 +15,7 @@ import { chmodSync, mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:f
import { tmpdir } from 'node:os'
import { join } from 'node:path'
// Type-only, so it is erased before vi.mock's hoisted factory runs.
-import type * as SshGConfigResolution from './ssh-g-config-resolution'
+import type * as SshGConfigResolution from './config/ssh-g-config-resolution'
import type * as Ssh2 from 'ssh2'
const VALID_ED25519_HOST_KEY = Buffer.from(
@@ -76,7 +76,7 @@ vi.mock('ssh2', async (importOriginal) => {
}
})
-vi.mock('./ssh-g-config-resolution', async (importOriginal) => ({
+vi.mock('./config/ssh-g-config-resolution', async (importOriginal) => ({
...(await importOriginal()),
resolveWithSshG: vi.fn(async () => null)
}))
diff --git a/src/main/ssh/ssh-connection-host-key-verification.test.ts b/src/main/ssh/ssh-connection-host-key-verification.test.ts
index f8f82745d5f2..1e862f68b9b8 100644
--- a/src/main/ssh/ssh-connection-host-key-verification.test.ts
+++ b/src/main/ssh/ssh-connection-host-key-verification.test.ts
@@ -7,21 +7,21 @@ import { createCallbacks, createTarget } from './ssh-connection-test-fixtures'
import { SshConnection } from './ssh-connection'
vi.mock('ssh2', async () => (await import('./ssh-connection-test-harness')).createSsh2Module())
-vi.mock('./system-ssh-binary', async () =>
+vi.mock('./system-transport/system-ssh-binary', async () =>
(await import('./ssh-connection-test-harness')).createSystemSshBinaryModule()
)
-vi.mock('./system-ssh-args', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-args', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshArgsMocks(await importOriginal())
)
-vi.mock('./system-ssh-command', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-command', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshCommandMocks(await importOriginal())
)
-vi.mock('./system-ssh-file-binary-transfer', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-file-binary-transfer', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshFileBinaryTransferMocks(
await importOriginal()
)
)
-vi.mock('./system-ssh-file-transfer', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-file-transfer', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshFileTransferMocks(
await importOriginal()
)
@@ -29,10 +29,10 @@ vi.mock('./system-ssh-file-transfer', async (importOriginal) =>
vi.mock('./ssh-control-socket', async () =>
(await import('./ssh-connection-test-harness')).createControlSocketModule()
)
-vi.mock('./ssh-config-parser', async () =>
+vi.mock('./config/ssh-config-parser', async () =>
(await import('./ssh-connection-test-harness')).createSshConfigParserModule()
)
-vi.mock('./ssh-g-config-resolution', async (importOriginal) =>
+vi.mock('./config/ssh-g-config-resolution', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSshGConfigResolutionMocks(
await importOriginal()
)
diff --git a/src/main/ssh/ssh-connection-manager-registry.test.ts b/src/main/ssh/ssh-connection-manager-registry.test.ts
index 5352a1ba8906..215e0f874199 100644
--- a/src/main/ssh/ssh-connection-manager-registry.test.ts
+++ b/src/main/ssh/ssh-connection-manager-registry.test.ts
@@ -4,21 +4,21 @@ import { createCallbacks, createTarget } from './ssh-connection-test-fixtures'
import { SshConnectionManager } from './ssh-connection-manager'
vi.mock('ssh2', async () => (await import('./ssh-connection-test-harness')).createSsh2Module())
-vi.mock('./system-ssh-binary', async () =>
+vi.mock('./system-transport/system-ssh-binary', async () =>
(await import('./ssh-connection-test-harness')).createSystemSshBinaryModule()
)
-vi.mock('./system-ssh-args', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-args', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshArgsMocks(await importOriginal())
)
-vi.mock('./system-ssh-command', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-command', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshCommandMocks(await importOriginal())
)
-vi.mock('./system-ssh-file-binary-transfer', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-file-binary-transfer', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshFileBinaryTransferMocks(
await importOriginal()
)
)
-vi.mock('./system-ssh-file-transfer', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-file-transfer', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshFileTransferMocks(
await importOriginal()
)
@@ -26,10 +26,10 @@ vi.mock('./system-ssh-file-transfer', async (importOriginal) =>
vi.mock('./ssh-control-socket', async () =>
(await import('./ssh-connection-test-harness')).createControlSocketModule()
)
-vi.mock('./ssh-config-parser', async () =>
+vi.mock('./config/ssh-config-parser', async () =>
(await import('./ssh-connection-test-harness')).createSshConfigParserModule()
)
-vi.mock('./ssh-g-config-resolution', async (importOriginal) =>
+vi.mock('./config/ssh-g-config-resolution', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSshGConfigResolutionMocks(
await importOriginal()
)
diff --git a/src/main/ssh/ssh-connection-manager-sign-in-reuse.test.ts b/src/main/ssh/ssh-connection-manager-sign-in-reuse.test.ts
index 80fdc1a5b28e..8614611ace35 100644
--- a/src/main/ssh/ssh-connection-manager-sign-in-reuse.test.ts
+++ b/src/main/ssh/ssh-connection-manager-sign-in-reuse.test.ts
@@ -14,21 +14,21 @@ import {
} from './ssh-credential-decline'
vi.mock('ssh2', async () => (await import('./ssh-connection-test-harness')).createSsh2Module())
-vi.mock('./system-ssh-binary', async () =>
+vi.mock('./system-transport/system-ssh-binary', async () =>
(await import('./ssh-connection-test-harness')).createSystemSshBinaryModule()
)
-vi.mock('./system-ssh-args', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-args', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshArgsMocks(await importOriginal())
)
-vi.mock('./system-ssh-command', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-command', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshCommandMocks(await importOriginal())
)
-vi.mock('./system-ssh-file-binary-transfer', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-file-binary-transfer', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshFileBinaryTransferMocks(
await importOriginal()
)
)
-vi.mock('./system-ssh-file-transfer', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-file-transfer', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshFileTransferMocks(
await importOriginal()
)
@@ -36,10 +36,10 @@ vi.mock('./system-ssh-file-transfer', async (importOriginal) =>
vi.mock('./ssh-control-socket', async () =>
(await import('./ssh-connection-test-harness')).createControlSocketModule()
)
-vi.mock('./ssh-config-parser', async () =>
+vi.mock('./config/ssh-config-parser', async () =>
(await import('./ssh-connection-test-harness')).createSshConfigParserModule()
)
-vi.mock('./ssh-g-config-resolution', async (importOriginal) =>
+vi.mock('./config/ssh-g-config-resolution', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSshGConfigResolutionMocks(
await importOriginal()
)
diff --git a/src/main/ssh/ssh-connection-reconnect-handshake-loss.test.ts b/src/main/ssh/ssh-connection-reconnect-handshake-loss.test.ts
index 1477c08f6508..8118b0d91f63 100644
--- a/src/main/ssh/ssh-connection-reconnect-handshake-loss.test.ts
+++ b/src/main/ssh/ssh-connection-reconnect-handshake-loss.test.ts
@@ -12,21 +12,21 @@ import { SshConnection } from './ssh-connection'
import { CONNECT_TIMEOUT_MS, RECONNECT_BACKOFF_MS } from './ssh-connection-utils'
vi.mock('ssh2', async () => (await import('./ssh-connection-test-harness')).createSsh2Module())
-vi.mock('./system-ssh-binary', async () =>
+vi.mock('./system-transport/system-ssh-binary', async () =>
(await import('./ssh-connection-test-harness')).createSystemSshBinaryModule()
)
-vi.mock('./system-ssh-args', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-args', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshArgsMocks(await importOriginal())
)
-vi.mock('./system-ssh-command', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-command', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshCommandMocks(await importOriginal())
)
-vi.mock('./system-ssh-file-binary-transfer', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-file-binary-transfer', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshFileBinaryTransferMocks(
await importOriginal()
)
)
-vi.mock('./system-ssh-file-transfer', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-file-transfer', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshFileTransferMocks(
await importOriginal()
)
@@ -34,10 +34,10 @@ vi.mock('./system-ssh-file-transfer', async (importOriginal) =>
vi.mock('./ssh-control-socket', async () =>
(await import('./ssh-connection-test-harness')).createControlSocketModule()
)
-vi.mock('./ssh-config-parser', async () =>
+vi.mock('./config/ssh-config-parser', async () =>
(await import('./ssh-connection-test-harness')).createSshConfigParserModule()
)
-vi.mock('./ssh-g-config-resolution', async (importOriginal) =>
+vi.mock('./config/ssh-g-config-resolution', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSshGConfigResolutionMocks(
await importOriginal()
)
diff --git a/src/main/ssh/ssh-connection-reconnect-ladder.test.ts b/src/main/ssh/ssh-connection-reconnect-ladder.test.ts
index 53acff12fd45..28acfbd4c25f 100644
--- a/src/main/ssh/ssh-connection-reconnect-ladder.test.ts
+++ b/src/main/ssh/ssh-connection-reconnect-ladder.test.ts
@@ -17,26 +17,26 @@ import {
createTarget
} from './ssh-connection-test-fixtures'
import { SshConnection } from './ssh-connection'
-import { resolveWithSshG } from './ssh-g-config-resolution'
+import { resolveWithSshG } from './config/ssh-g-config-resolution'
import { CONNECT_TIMEOUT_MS, RECONNECT_BACKOFF_MS } from './ssh-connection-utils'
import { MIN_SSH_RELAY_GRACE_PERIOD_SECONDS } from '../../shared/ssh-types'
vi.mock('ssh2', async () => (await import('./ssh-connection-test-harness')).createSsh2Module())
-vi.mock('./system-ssh-binary', async () =>
+vi.mock('./system-transport/system-ssh-binary', async () =>
(await import('./ssh-connection-test-harness')).createSystemSshBinaryModule()
)
-vi.mock('./system-ssh-args', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-args', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshArgsMocks(await importOriginal())
)
-vi.mock('./system-ssh-command', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-command', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshCommandMocks(await importOriginal())
)
-vi.mock('./system-ssh-file-binary-transfer', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-file-binary-transfer', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshFileBinaryTransferMocks(
await importOriginal()
)
)
-vi.mock('./system-ssh-file-transfer', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-file-transfer', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshFileTransferMocks(
await importOriginal()
)
@@ -44,10 +44,10 @@ vi.mock('./system-ssh-file-transfer', async (importOriginal) =>
vi.mock('./ssh-control-socket', async () =>
(await import('./ssh-connection-test-harness')).createControlSocketModule()
)
-vi.mock('./ssh-config-parser', async () =>
+vi.mock('./config/ssh-config-parser', async () =>
(await import('./ssh-connection-test-harness')).createSshConfigParserModule()
)
-vi.mock('./ssh-g-config-resolution', async (importOriginal) =>
+vi.mock('./config/ssh-g-config-resolution', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSshGConfigResolutionMocks(
await importOriginal()
)
diff --git a/src/main/ssh/ssh-connection-sftp-namespace.test.ts b/src/main/ssh/ssh-connection-sftp-namespace.test.ts
index 59b48c3e50f6..ea2fa10dace1 100644
--- a/src/main/ssh/ssh-connection-sftp-namespace.test.ts
+++ b/src/main/ssh/ssh-connection-sftp-namespace.test.ts
@@ -7,10 +7,10 @@ import { mkdtempSync, realpathSync, rmSync, writeFileSync } from 'node:fs'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
-import type * as SystemSshArgs from './system-ssh-args'
-import type * as SystemSshFileBinaryTransfer from './system-ssh-file-binary-transfer'
-import type * as SystemSshFileTransfer from './system-ssh-file-transfer'
-import type * as SshGConfigResolution from './ssh-g-config-resolution'
+import type * as SystemSshArgs from './system-transport/system-ssh-args'
+import type * as SystemSshFileBinaryTransfer from './system-transport/system-ssh-file-binary-transfer'
+import type * as SystemSshFileTransfer from './system-transport/system-ssh-file-transfer'
+import type * as SshGConfigResolution from './config/ssh-g-config-resolution'
vi.mock('ssh2', () => ({
BaseAgent: class {},
@@ -19,25 +19,28 @@ vi.mock('ssh2', () => ({
utils: { parseKey: vi.fn() }
}))
-vi.mock('./system-ssh-args', async (importOriginal) => ({
+vi.mock('./system-transport/system-ssh-args', async (importOriginal) => ({
...(await importOriginal()),
getOrcaControlSocketPath: vi.fn().mockReturnValue(null)
}))
-vi.mock('./system-ssh-command', () => ({ spawnSystemSsh: vi.fn(), spawnSystemSshCommand: vi.fn() }))
-vi.mock('./system-ssh-file-binary-transfer', async (importOriginal) => ({
+vi.mock('./system-transport/system-ssh-command', () => ({
+ spawnSystemSsh: vi.fn(),
+ spawnSystemSshCommand: vi.fn()
+}))
+vi.mock('./system-transport/system-ssh-file-binary-transfer', async (importOriginal) => ({
...(await importOriginal()),
downloadFileViaSystemSsh: vi.fn().mockResolvedValue(undefined),
uploadFileViaSystemSsh: vi.fn().mockResolvedValue(undefined),
writeBufferViaSystemSsh: vi.fn().mockResolvedValue(undefined)
}))
-vi.mock('./system-ssh-file-transfer', async (importOriginal) => ({
+vi.mock('./system-transport/system-ssh-file-transfer', async (importOriginal) => ({
...(await importOriginal()),
uploadDirectoryViaSystemSsh: vi.fn().mockResolvedValue(undefined),
writeFileViaSystemSsh: vi.fn().mockResolvedValue(undefined)
}))
vi.mock('./ssh-control-socket', () => ({ removeControlSocketPath: vi.fn() }))
-vi.mock('./ssh-g-config-resolution', async (importOriginal) => ({
+vi.mock('./config/ssh-g-config-resolution', async (importOriginal) => ({
...(await importOriginal()),
resolveWithSshG: vi.fn().mockResolvedValue(null)
}))
@@ -46,7 +49,10 @@ import { SshConnection } from './ssh-connection'
import type { SftpNamespacePathMapping } from './sftp-namespace-resolution'
import { getRemoteHostPlatform } from './ssh-remote-platform'
import { isSshSessionLimitError } from './ssh-session-limit-error'
-import { uploadDirectoryViaSystemSsh, writeFileViaSystemSsh } from './system-ssh-file-transfer'
+import {
+ uploadDirectoryViaSystemSsh,
+ writeFileViaSystemSsh
+} from './system-transport/system-ssh-file-transfer'
import type { SshTarget } from '../../shared/ssh-types'
const SHELL_HOME = '/var/services/homes/alice'
diff --git a/src/main/ssh/ssh-connection-store-orcad-ownership.test.ts b/src/main/ssh/ssh-connection-store-orcad-ownership.test.ts
index 0b5dfd0d8b78..9d306eb8e30d 100644
--- a/src/main/ssh/ssh-connection-store-orcad-ownership.test.ts
+++ b/src/main/ssh/ssh-connection-store-orcad-ownership.test.ts
@@ -12,7 +12,7 @@ const { loadUserSshConfigMock, sshConfigHostsToTargetsMock } = vi.hoisted(() =>
sshConfigHostsToTargetsMock: vi.fn()
}))
-vi.mock('./ssh-config-parser', () => ({
+vi.mock('./config/ssh-config-parser', () => ({
loadUserSshConfig: loadUserSshConfigMock,
sshConfigHostsToTargets: sshConfigHostsToTargetsMock
}))
diff --git a/src/main/ssh/ssh-connection-store.test.ts b/src/main/ssh/ssh-connection-store.test.ts
index 03b7dd54fc9e..9507e993e301 100644
--- a/src/main/ssh/ssh-connection-store.test.ts
+++ b/src/main/ssh/ssh-connection-store.test.ts
@@ -8,7 +8,7 @@ const { loadUserSshConfigMock, sshConfigHostsToTargetsMock } = vi.hoisted(() =>
sshConfigHostsToTargetsMock: vi.fn()
}))
-vi.mock('./ssh-config-parser', () => ({
+vi.mock('./config/ssh-config-parser', () => ({
loadUserSshConfig: loadUserSshConfigMock,
sshConfigHostsToTargets: sshConfigHostsToTargetsMock
}))
diff --git a/src/main/ssh/ssh-connection-store.ts b/src/main/ssh/ssh-connection-store.ts
index e2b6ba745506..e032d1928a5a 100644
--- a/src/main/ssh/ssh-connection-store.ts
+++ b/src/main/ssh/ssh-connection-store.ts
@@ -2,7 +2,7 @@ import type { Store } from '../persistence'
import type { SshRepoReadoption, SshTarget } from '../../shared/ssh-types'
import { RUNTIME_OWNED_SSH_TARGET_ID_PREFIX } from '../../shared/execution-host'
import { normalizeSshConfigAlias } from '../../shared/ssh-config-alias'
-import { loadUserSshConfig, sshConfigHostsToTargets } from './ssh-config-parser'
+import { loadUserSshConfig, sshConfigHostsToTargets } from './config/ssh-config-parser'
import { SshTargetOrcadClaims } from './ssh-target-orcad-claims'
import {
buildRemovedSshTargetTombstone,
diff --git a/src/main/ssh/ssh-connection-system-transport.test.ts b/src/main/ssh/ssh-connection-system-transport.test.ts
index 461a541d39f3..b8c1f3e370ba 100644
--- a/src/main/ssh/ssh-connection-system-transport.test.ts
+++ b/src/main/ssh/ssh-connection-system-transport.test.ts
@@ -21,8 +21,8 @@ import {
} from './ssh-connection-test-fixtures'
import { SshConnection } from './ssh-connection'
import { shouldUseSystemSshTransport } from './ssh-transport-selection'
-import { resolveWithSshG } from './ssh-g-config-resolution'
-import { writeFileViaSystemSsh } from './system-ssh-file-transfer'
+import { resolveWithSshG } from './config/ssh-g-config-resolution'
+import { writeFileViaSystemSsh } from './system-transport/system-ssh-file-transfer'
import { CONNECT_TIMEOUT_MS } from './ssh-connection-utils'
import type { SshTarget } from '../../shared/ssh-types'
import {
@@ -31,21 +31,21 @@ import {
} from './ssh-security-key-identity.test-fixture'
vi.mock('ssh2', async () => (await import('./ssh-connection-test-harness')).createSsh2Module())
-vi.mock('./system-ssh-binary', async () =>
+vi.mock('./system-transport/system-ssh-binary', async () =>
(await import('./ssh-connection-test-harness')).createSystemSshBinaryModule()
)
-vi.mock('./system-ssh-args', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-args', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshArgsMocks(await importOriginal())
)
-vi.mock('./system-ssh-command', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-command', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshCommandMocks(await importOriginal())
)
-vi.mock('./system-ssh-file-binary-transfer', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-file-binary-transfer', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshFileBinaryTransferMocks(
await importOriginal()
)
)
-vi.mock('./system-ssh-file-transfer', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-file-transfer', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshFileTransferMocks(
await importOriginal()
)
@@ -53,10 +53,10 @@ vi.mock('./system-ssh-file-transfer', async (importOriginal) =>
vi.mock('./ssh-control-socket', async () =>
(await import('./ssh-connection-test-harness')).createControlSocketModule()
)
-vi.mock('./ssh-config-parser', async () =>
+vi.mock('./config/ssh-config-parser', async () =>
(await import('./ssh-connection-test-harness')).createSshConfigParserModule()
)
-vi.mock('./ssh-g-config-resolution', async (importOriginal) =>
+vi.mock('./config/ssh-g-config-resolution', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSshGConfigResolutionMocks(
await importOriginal()
)
diff --git a/src/main/ssh/ssh-connection-test-fixtures.ts b/src/main/ssh/ssh-connection-test-fixtures.ts
index 45de1425340f..5c8b9c568c63 100644
--- a/src/main/ssh/ssh-connection-test-fixtures.ts
+++ b/src/main/ssh/ssh-connection-test-fixtures.ts
@@ -3,7 +3,7 @@ import { vi } from 'vitest'
import type { Mock } from 'vitest'
import type { AnyAuthMethod, AuthenticationType } from 'ssh2'
import type { SshConnectionCallbacks } from './ssh-connection-utils'
-import type { SshResolvedConfig } from './ssh-g-config-resolution'
+import type { SshResolvedConfig } from './config/ssh-g-config-resolution'
import type { SshTarget } from '../../shared/ssh-types'
export function createTarget(overrides?: Partial): SshTarget {
diff --git a/src/main/ssh/ssh-connection-test-harness.ts b/src/main/ssh/ssh-connection-test-harness.ts
index 1ad441fd11df..633dbb5b57bb 100644
--- a/src/main/ssh/ssh-connection-test-harness.ts
+++ b/src/main/ssh/ssh-connection-test-harness.ts
@@ -2,14 +2,14 @@ import { vi } from 'vitest'
import { createSystemCommandChannel, createSystemSshProcess } from './ssh-connection-test-fixtures'
import type { SshConnection } from './ssh-connection'
import type { MockSystemCommandChannel, MockSystemSshProcess } from './ssh-connection-test-fixtures'
-import type { SshResolvedConfig } from './ssh-g-config-resolution'
-import type { SystemSshBuildArgsOptions } from './system-ssh-args'
+import type { SshResolvedConfig } from './config/ssh-g-config-resolution'
+import type { SystemSshBuildArgsOptions } from './system-transport/system-ssh-args'
import type { SshTarget } from '../../shared/ssh-types'
-import type * as SystemSshArgs from './system-ssh-args'
-import type * as SystemSshCommand from './system-ssh-command'
-import type * as SystemSshFileBinaryTransfer from './system-ssh-file-binary-transfer'
-import type * as SystemSshFileTransfer from './system-ssh-file-transfer'
-import type * as SshGConfigResolution from './ssh-g-config-resolution'
+import type * as SystemSshArgs from './system-transport/system-ssh-args'
+import type * as SystemSshCommand from './system-transport/system-ssh-command'
+import type * as SystemSshFileBinaryTransfer from './system-transport/system-ssh-file-binary-transfer'
+import type * as SystemSshFileTransfer from './system-transport/system-ssh-file-transfer'
+import type * as SshGConfigResolution from './config/ssh-g-config-resolution'
import { resetSsh2ClientState, ssh2Mock } from './__tests__/ssh-connection-test-client'
export {
clientInstances,
diff --git a/src/main/ssh/ssh-connection-utils.test.ts b/src/main/ssh/ssh-connection-utils.test.ts
index bd1ea5fbf7ed..9edbb5331a19 100644
--- a/src/main/ssh/ssh-connection-utils.test.ts
+++ b/src/main/ssh/ssh-connection-utils.test.ts
@@ -32,7 +32,7 @@ import { findDefaultKeyFile, resolveAgentSocket } from './ssh-auth-resolution'
import { resolveEffectiveProxy } from './ssh-proxy-command'
import { walkInitialAuthLadder } from './ssh-connection-test-fixtures'
import type { SshTarget } from '../../shared/ssh-types'
-import type { SshResolvedConfig } from './ssh-g-config-resolution'
+import type { SshResolvedConfig } from './config/ssh-g-config-resolution'
// ── isTransientError ─────────────────────────────────────────────────
diff --git a/src/main/ssh/ssh-connection-utils.ts b/src/main/ssh/ssh-connection-utils.ts
index 8a95b54c57c3..6598fee3c656 100644
--- a/src/main/ssh/ssh-connection-utils.ts
+++ b/src/main/ssh/ssh-connection-utils.ts
@@ -1,6 +1,6 @@
import type { ConnectConfig } from 'ssh2'
import type { SshTarget, SshConnectionState } from '../../shared/ssh-types'
-import type { SshResolvedConfig } from './ssh-g-config-resolution'
+import type { SshResolvedConfig } from './config/ssh-g-config-resolution'
import {
findEncryptedPrivateKeyPath,
isUnencryptedPrivateKey,
@@ -10,7 +10,7 @@ import {
resolveUnencryptedExplicitPrivateKeys
} from './ssh-auth-resolution'
import { configurePrivateKeyAuthentication } from './ssh-private-key-authentication'
-import { isOpenSshConfigBackedTarget } from './system-ssh-args'
+import { isOpenSshConfigBackedTarget } from './system-transport/system-ssh-args'
export type SshCredentialKind = 'passphrase' | 'password' | 'keyboard-interactive'
diff --git a/src/main/ssh/ssh-connection-wake-retry.test.ts b/src/main/ssh/ssh-connection-wake-retry.test.ts
index afcc34d74d2a..d431fd9c7d1f 100644
--- a/src/main/ssh/ssh-connection-wake-retry.test.ts
+++ b/src/main/ssh/ssh-connection-wake-retry.test.ts
@@ -16,27 +16,27 @@ import {
createTarget
} from './ssh-connection-test-fixtures'
import { SshConnection } from './ssh-connection'
-import { resolveWithSshG } from './ssh-g-config-resolution'
+import { resolveWithSshG } from './config/ssh-g-config-resolution'
import { SshConnectionManager } from './ssh-connection-manager'
import { RECONNECT_BACKOFF_MS } from './ssh-connection-utils'
import { recordSshUserDisconnected, resetSshUserDisconnectsForTests } from './ssh-user-disconnect'
vi.mock('ssh2', async () => (await import('./ssh-connection-test-harness')).createSsh2Module())
-vi.mock('./system-ssh-binary', async () =>
+vi.mock('./system-transport/system-ssh-binary', async () =>
(await import('./ssh-connection-test-harness')).createSystemSshBinaryModule()
)
-vi.mock('./system-ssh-args', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-args', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshArgsMocks(await importOriginal())
)
-vi.mock('./system-ssh-command', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-command', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshCommandMocks(await importOriginal())
)
-vi.mock('./system-ssh-file-binary-transfer', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-file-binary-transfer', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshFileBinaryTransferMocks(
await importOriginal()
)
)
-vi.mock('./system-ssh-file-transfer', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-file-transfer', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshFileTransferMocks(
await importOriginal()
)
@@ -44,10 +44,10 @@ vi.mock('./system-ssh-file-transfer', async (importOriginal) =>
vi.mock('./ssh-control-socket', async () =>
(await import('./ssh-connection-test-harness')).createControlSocketModule()
)
-vi.mock('./ssh-config-parser', async () =>
+vi.mock('./config/ssh-config-parser', async () =>
(await import('./ssh-connection-test-harness')).createSshConfigParserModule()
)
-vi.mock('./ssh-g-config-resolution', async (importOriginal) =>
+vi.mock('./config/ssh-g-config-resolution', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSshGConfigResolutionMocks(
await importOriginal()
)
diff --git a/src/main/ssh/ssh-connection.test.ts b/src/main/ssh/ssh-connection.test.ts
index 1239f45c1823..41c2d6cf03b0 100644
--- a/src/main/ssh/ssh-connection.test.ts
+++ b/src/main/ssh/ssh-connection.test.ts
@@ -12,21 +12,21 @@ import { createCallbacks, createTarget } from './ssh-connection-test-fixtures'
import { SshConnection } from './ssh-connection'
vi.mock('ssh2', async () => (await import('./ssh-connection-test-harness')).createSsh2Module())
-vi.mock('./system-ssh-binary', async () =>
+vi.mock('./system-transport/system-ssh-binary', async () =>
(await import('./ssh-connection-test-harness')).createSystemSshBinaryModule()
)
-vi.mock('./system-ssh-args', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-args', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshArgsMocks(await importOriginal())
)
-vi.mock('./system-ssh-command', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-command', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshCommandMocks(await importOriginal())
)
-vi.mock('./system-ssh-file-binary-transfer', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-file-binary-transfer', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshFileBinaryTransferMocks(
await importOriginal()
)
)
-vi.mock('./system-ssh-file-transfer', async (importOriginal) =>
+vi.mock('./system-transport/system-ssh-file-transfer', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSystemSshFileTransferMocks(
await importOriginal()
)
@@ -34,10 +34,10 @@ vi.mock('./system-ssh-file-transfer', async (importOriginal) =>
vi.mock('./ssh-control-socket', async () =>
(await import('./ssh-connection-test-harness')).createControlSocketModule()
)
-vi.mock('./ssh-config-parser', async () =>
+vi.mock('./config/ssh-config-parser', async () =>
(await import('./ssh-connection-test-harness')).createSshConfigParserModule()
)
-vi.mock('./ssh-g-config-resolution', async (importOriginal) =>
+vi.mock('./config/ssh-g-config-resolution', async (importOriginal) =>
(await import('./ssh-connection-test-harness')).withSshGConfigResolutionMocks(
await importOriginal()
)
diff --git a/src/main/ssh/ssh-connection.ts b/src/main/ssh/ssh-connection.ts
index d17ca46b8edd..1d638dcfdefc 100644
--- a/src/main/ssh/ssh-connection.ts
+++ b/src/main/ssh/ssh-connection.ts
@@ -25,8 +25,8 @@ import {
getOrcaControlSocketPath,
isOpenSshConfigBackedTarget,
type SystemSshBuildArgsOptions
-} from './system-ssh-args'
-import { spawnSystemSshCommand } from './system-ssh-command'
+} from './system-transport/system-ssh-args'
+import { spawnSystemSshCommand } from './system-transport/system-ssh-command'
import { removeControlSocketPath } from './ssh-control-socket'
import {
INITIAL_RETRY_ATTEMPTS,
@@ -61,7 +61,7 @@ import {
siteConfigMayRestrictHostKeys,
sshGArgsForHost,
type SshResolvedConfig
-} from './ssh-g-config-resolution'
+} from './config/ssh-g-config-resolution'
import {
boundSshHostKeyStoreFile,
loadTrustedHostKeys,
@@ -73,7 +73,7 @@ import {
loadKnownHostsEvidence,
resolveKnownHostsFiles,
resolveKnownHostsLookupHost
-} from './ssh-known-hosts-source'
+} from './config/ssh-known-hosts-source'
import {
createCancelledConnectAttemptError,
isCancelledConnectAttemptError
@@ -83,7 +83,7 @@ import {
isTransientReconnectError
} from './ssh-reconnect-error-classification'
import { SshReconnectLadder } from './ssh-reconnect-ladder'
-import { mayUserSshConfigClaimAlias } from './ssh-config-alias-claim'
+import { mayUserSshConfigClaimAlias } from './config/ssh-config-alias-claim'
import {
didDeferKeyboardInteractive,
didOfferKeyboardInteractive,
diff --git a/src/main/ssh/ssh-control-socket.ts b/src/main/ssh/ssh-control-socket.ts
index 4020a9459f8e..78cd1b490b0f 100644
--- a/src/main/ssh/ssh-control-socket.ts
+++ b/src/main/ssh/ssh-control-socket.ts
@@ -3,7 +3,7 @@ import { lstatSync, mkdirSync, rmSync } from 'node:fs'
import { tmpdir } from 'node:os'
import { isAbsolute, join as pathJoin } from 'node:path'
import type { SshTarget } from '../../shared/ssh-types'
-import type { SshResolvedConfig } from './ssh-g-config-resolution'
+import type { SshResolvedConfig } from './config/ssh-g-config-resolution'
export type SystemSshResolvedConfig = Pick<
SshResolvedConfig,
diff --git a/src/main/ssh/ssh-credential-prompt-login-grace-wire.test.ts b/src/main/ssh/ssh-credential-prompt-login-grace-wire.test.ts
index 7a6dfff5ba91..0bcc8c197ceb 100644
--- a/src/main/ssh/ssh-credential-prompt-login-grace-wire.test.ts
+++ b/src/main/ssh/ssh-credential-prompt-login-grace-wire.test.ts
@@ -7,10 +7,10 @@ import { SshConnection } from './ssh-connection'
import { INITIAL_RETRY_DELAY_MS } from './ssh-connection-utils'
import { createCallbacks, createResolvedConfig, createTarget } from './ssh-connection-test-fixtures'
import { initSshHostKeyStoreFile } from './ssh-host-key-store'
-import { resolveWithSshG } from './ssh-g-config-resolution'
-import type * as SshGConfigResolution from './ssh-g-config-resolution'
+import { resolveWithSshG } from './config/ssh-g-config-resolution'
+import type * as SshGConfigResolution from './config/ssh-g-config-resolution'
-vi.mock('./ssh-g-config-resolution', async (importOriginal) => ({
+vi.mock('./config/ssh-g-config-resolution', async (importOriginal) => ({
...(await importOriginal()),
resolveWithSshG: vi.fn()
}))
diff --git a/src/main/ssh/ssh-exec-rc-stdout-noise.test.ts b/src/main/ssh/ssh-exec-rc-stdout-noise.test.ts
index c7af6197b92d..f7e00bf66c4f 100644
--- a/src/main/ssh/ssh-exec-rc-stdout-noise.test.ts
+++ b/src/main/ssh/ssh-exec-rc-stdout-noise.test.ts
@@ -7,7 +7,7 @@ import { PassThrough } from 'node:stream'
import { describe, expect, it, vi } from 'vitest'
import { runProcess } from '@orca/process-host'
import { wrapRemoteCommandForPosixShell, type SshExecOptions } from './ssh-connection-utils'
-import { execCommand, isSshCommandExitError } from './remote-exec-command'
+import { execCommand, isSshCommandExitError } from './remote-exec/remote-exec-command'
import { readRemoteHomeCommand } from './ssh-remote-commands'
import type { SshConnection } from './ssh-connection'
import { tryResolveViaLoginShell } from './ssh-remote-node-resolution'
diff --git a/src/main/ssh/ssh-exec-stdin-file-transfer.test.ts b/src/main/ssh/ssh-exec-stdin-file-transfer.test.ts
index efd6d01d9cbb..1720c386aa88 100644
--- a/src/main/ssh/ssh-exec-stdin-file-transfer.test.ts
+++ b/src/main/ssh/ssh-exec-stdin-file-transfer.test.ts
@@ -24,7 +24,7 @@ import {
writeStringViaExecStdin
} from './ssh-exec-stdin-file-transfer'
import { getRemoteHostPlatform } from './ssh-remote-platform'
-import { makePosixWriteFileCommand } from './system-ssh-file-binary-transfer'
+import { makePosixWriteFileCommand } from './system-transport/system-ssh-file-binary-transfer'
const directories: string[] = []
afterEach(() => {
diff --git a/src/main/ssh/ssh-exec-stdin-file-transfer.ts b/src/main/ssh/ssh-exec-stdin-file-transfer.ts
index 4bbadd5ad449..d9d750353c40 100644
--- a/src/main/ssh/ssh-exec-stdin-file-transfer.ts
+++ b/src/main/ssh/ssh-exec-stdin-file-transfer.ts
@@ -13,11 +13,11 @@ import { posix } from 'node:path'
import { Readable } from 'node:stream'
import type { RemoteInstallTransport } from '../managed-server/install/remote-install-transport'
import { shellEscape } from './ssh-connection-utils'
-import { execCommand } from './remote-exec-command'
+import { execCommand } from './remote-exec/remote-exec-command'
import { RELAY_DEPLOY_TIMEOUT_MS } from '../managed-server/install/remote-deploy-timing'
import type { RemoteHostPlatform } from './ssh-remote-platform'
-import { makePosixWriteFileCommand } from './system-ssh-file-binary-transfer'
-import { collectLocalUploadPlan } from './system-ssh-file-transfer'
+import { makePosixWriteFileCommand } from './system-transport/system-ssh-file-binary-transfer'
+import { collectLocalUploadPlan } from './system-transport/system-ssh-file-transfer'
export const EXEC_STDIN_WRITE_DONE = 'ORCA_EXEC_STDIN_WRITE_DONE'
diff --git a/src/main/ssh/ssh-host-key-decision.ts b/src/main/ssh/ssh-host-key-decision.ts
index a42f04632692..02707dcade9a 100644
--- a/src/main/ssh/ssh-host-key-decision.ts
+++ b/src/main/ssh/ssh-host-key-decision.ts
@@ -5,7 +5,7 @@
* rather than importing its sources so a test states its own trust state instead of writing files.
* See docs/reference/ssh-host-key-verification.md.
*/
-import type { KnownHostsOutcome } from './ssh-known-hosts'
+import type { KnownHostsOutcome } from './config/ssh-known-hosts'
/** Phase 1 ships no dialog; `prompt` is reserved for Phase 2 and never produced today. */
export type HostKeyAction = 'accept' | 'accept-and-remember' | 'reject' | 'prompt'
diff --git a/src/main/ssh/ssh-host-key-store.ts b/src/main/ssh/ssh-host-key-store.ts
index d764084eb174..a29f009967b3 100644
--- a/src/main/ssh/ssh-host-key-store.ts
+++ b/src/main/ssh/ssh-host-key-store.ts
@@ -13,7 +13,7 @@ import {
readHostKeyType,
type KnownHostsOutcome,
type KnownHostsQuery
-} from './ssh-known-hosts'
+} from './config/ssh-known-hosts'
const STORE_FILE_NAME = 'ssh-host-keys.json'
const STORE_VERSION = 1
diff --git a/src/main/ssh/ssh-host-key-verifier.test.ts b/src/main/ssh/ssh-host-key-verifier.test.ts
index 3edb812ec3dc..01cb2a622964 100644
--- a/src/main/ssh/ssh-host-key-verifier.test.ts
+++ b/src/main/ssh/ssh-host-key-verifier.test.ts
@@ -1,5 +1,5 @@
import { describe, expect, it, vi } from 'vitest'
-import { parseKnownHosts } from './ssh-known-hosts'
+import { parseKnownHosts } from './config/ssh-known-hosts'
import {
createHostKeyVerifier,
DEFAULT_SERVER_HOST_KEY_ALGORITHMS,
diff --git a/src/main/ssh/ssh-host-key-verifier.ts b/src/main/ssh/ssh-host-key-verifier.ts
index ab1b01aa05d3..65da407ee840 100644
--- a/src/main/ssh/ssh-host-key-verifier.ts
+++ b/src/main/ssh/ssh-host-key-verifier.ts
@@ -14,7 +14,7 @@ import {
readHostKeyType,
type KnownHostsEntry,
type KnownHostsOutcome
-} from './ssh-known-hosts'
+} from './config/ssh-known-hosts'
import { decideHostKey, type HostKeyDecision } from './ssh-host-key-decision'
export type TrustedHostKeyLookup = (query: {
diff --git a/src/main/ssh/ssh-keyboard-interactive-wire.test.ts b/src/main/ssh/ssh-keyboard-interactive-wire.test.ts
index 77f74e90c9cd..494503ec137f 100644
--- a/src/main/ssh/ssh-keyboard-interactive-wire.test.ts
+++ b/src/main/ssh/ssh-keyboard-interactive-wire.test.ts
@@ -6,10 +6,10 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
import { SshConnection } from './ssh-connection'
import { createCallbacks, createResolvedConfig, createTarget } from './ssh-connection-test-fixtures'
import { initSshHostKeyStoreFile } from './ssh-host-key-store'
-import { resolveWithSshG } from './ssh-g-config-resolution'
-import type * as SshGConfigResolution from './ssh-g-config-resolution'
+import { resolveWithSshG } from './config/ssh-g-config-resolution'
+import type * as SshGConfigResolution from './config/ssh-g-config-resolution'
-vi.mock('./ssh-g-config-resolution', async (importOriginal) => ({
+vi.mock('./config/ssh-g-config-resolution', async (importOriginal) => ({
...(await importOriginal()),
resolveWithSshG: vi.fn()
}))
diff --git a/src/main/ssh/ssh-multi-factor-authentication.test.ts b/src/main/ssh/ssh-multi-factor-authentication.test.ts
index 694ee8b21dc0..cab4c2d4c954 100644
--- a/src/main/ssh/ssh-multi-factor-authentication.test.ts
+++ b/src/main/ssh/ssh-multi-factor-authentication.test.ts
@@ -18,7 +18,7 @@ import {
} from 'ssh2'
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
import type { SshTarget } from '../../shared/ssh-types'
-import type { SshResolvedConfig } from './ssh-g-config-resolution'
+import type { SshResolvedConfig } from './config/ssh-g-config-resolution'
import { buildConnectConfig, type BuildConnectConfigOptions } from './ssh-connection-utils'
vi.mock('node:os', async (importOriginal) => {
diff --git a/src/main/ssh/ssh-multi-key-authentication.test.ts b/src/main/ssh/ssh-multi-key-authentication.test.ts
index 7badbfb5cd24..afa3e2b07c17 100644
--- a/src/main/ssh/ssh-multi-key-authentication.test.ts
+++ b/src/main/ssh/ssh-multi-key-authentication.test.ts
@@ -24,10 +24,10 @@ vi.mock('fs', () => ({
import { buildConnectConfig } from './ssh-connection-utils'
import { getPassphrasePrivateKeyPath } from './ssh-private-key-authentication'
-import { buildSshArgs } from './system-ssh-args'
+import { buildSshArgs } from './system-transport/system-ssh-args'
import { walkInitialAuthLadder } from './ssh-connection-test-fixtures'
import type { SshTarget } from '../../shared/ssh-types'
-import type { SshResolvedConfig } from './ssh-g-config-resolution'
+import type { SshResolvedConfig } from './config/ssh-g-config-resolution'
function makeTarget(overrides: Partial = {}): SshTarget {
return {
diff --git a/src/main/ssh/ssh-proxy-command.ts b/src/main/ssh/ssh-proxy-command.ts
index a597ab5b55a0..8b60a1ad5c75 100644
--- a/src/main/ssh/ssh-proxy-command.ts
+++ b/src/main/ssh/ssh-proxy-command.ts
@@ -3,9 +3,9 @@ import { spawnProcess } from '@orca/process-host'
import { Duplex } from 'node:stream'
import type { Socket as NetSocket } from 'node:net'
import type { SshTarget } from '../../shared/ssh-types'
-import type { SshResolvedConfig } from './ssh-g-config-resolution'
+import type { SshResolvedConfig } from './config/ssh-g-config-resolution'
import { shellEscape } from './ssh-connection-utils'
-import { isOpenSshConfigBackedTarget } from './system-ssh-args'
+import { isOpenSshConfigBackedTarget } from './system-transport/system-ssh-args'
// Why: ProxyJump and jumpHost are syntactic sugar for ProxyCommand.
// OpenSSH internally converts `ProxyJump bastion` to
diff --git a/src/main/ssh/ssh-remote-node-install-guidance.ts b/src/main/ssh/ssh-remote-node-install-guidance.ts
index af8b1bba92c0..5e08bdc1842c 100644
--- a/src/main/ssh/ssh-remote-node-install-guidance.ts
+++ b/src/main/ssh/ssh-remote-node-install-guidance.ts
@@ -1,6 +1,6 @@
import type { SshConnection } from './ssh-connection'
import { createSshOperationAbortError } from './ssh-connection-utils'
-import { execCommand } from './remote-exec-command'
+import { execCommand } from './remote-exec/remote-exec-command'
import { isSshSessionLimitError } from './ssh-session-limit-error'
export type RemoteNodeResolutionOptions = {
diff --git a/src/main/ssh/ssh-remote-node-resolution.test.ts b/src/main/ssh/ssh-remote-node-resolution.test.ts
index 8a01050dbedf..7375c7722992 100644
--- a/src/main/ssh/ssh-remote-node-resolution.test.ts
+++ b/src/main/ssh/ssh-remote-node-resolution.test.ts
@@ -1,4 +1,4 @@
-import type * as ExecCommandModule from './remote-exec-command'
+import type * as ExecCommandModule from './remote-exec/remote-exec-command'
import { execFileSync } from 'node:child_process'
import { chmodSync, mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs'
import os from 'node:os'
@@ -9,7 +9,7 @@ import { getRemoteHostPlatform } from './ssh-remote-platform'
const execCommandMock = vi.hoisted(() => vi.fn())
-vi.mock('./remote-exec-command', async (importOriginal) => ({
+vi.mock('./remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand: execCommandMock
}))
diff --git a/src/main/ssh/ssh-remote-node-resolution.ts b/src/main/ssh/ssh-remote-node-resolution.ts
index ef58f2004d30..05ff680e6f35 100644
--- a/src/main/ssh/ssh-remote-node-resolution.ts
+++ b/src/main/ssh/ssh-remote-node-resolution.ts
@@ -7,7 +7,7 @@ import {
buildPosixNodeInstallGuidance,
type RemoteNodeResolutionOptions
} from './ssh-remote-node-install-guidance'
-import { execCommand, isSshCommandExitError } from './remote-exec-command'
+import { execCommand, isSshCommandExitError } from './remote-exec/remote-exec-command'
import {
buildPosixNodeToolchainProbe,
buildWindowsNodeToolchainProbe,
diff --git a/src/main/ssh/ssh-remote-platform-detection.test.ts b/src/main/ssh/ssh-remote-platform-detection.test.ts
index a7b3445e609e..07e91aa58b6f 100644
--- a/src/main/ssh/ssh-remote-platform-detection.test.ts
+++ b/src/main/ssh/ssh-remote-platform-detection.test.ts
@@ -1,11 +1,11 @@
-import type * as ExecCommandModule from './remote-exec-command'
+import type * as ExecCommandModule from './remote-exec/remote-exec-command'
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
import type { SshConnection } from './ssh-connection'
-import { SSH_EXEC_TIMEOUT_CODE } from './remote-exec-command'
+import { SSH_EXEC_TIMEOUT_CODE } from './remote-exec/remote-exec-command'
const execCommandMock = vi.hoisted(() => vi.fn())
-vi.mock('./remote-exec-command', async (importOriginal) => ({
+vi.mock('./remote-exec/remote-exec-command', async (importOriginal) => ({
...(await importOriginal()),
execCommand: execCommandMock
}))
diff --git a/src/main/ssh/ssh-remote-platform-detection.ts b/src/main/ssh/ssh-remote-platform-detection.ts
index 09cc9f0d6237..dd20d20fad8d 100644
--- a/src/main/ssh/ssh-remote-platform-detection.ts
+++ b/src/main/ssh/ssh-remote-platform-detection.ts
@@ -3,12 +3,12 @@ import {
getProcessOutputFields,
iterateProcessOutputLines
} from '../../shared/process-output-field-scanner'
-import { parseUnameToRelayPlatform, type RelayPlatform } from './remote-frame-protocol'
+import { parseUnameToRelayPlatform, type RelayPlatform } from './remote-exec/remote-frame-protocol'
import {
execCommand,
isSshExecTimeout,
isUnconfirmedSshCommandTermination
-} from './remote-exec-command'
+} from './remote-exec/remote-exec-command'
import { isSshSessionLimitError } from './ssh-session-limit-error'
import { getRemoteHostPlatform, type RemoteHostPlatform } from './ssh-remote-platform'
import { powerShellCommand } from './ssh-remote-powershell'
diff --git a/src/main/ssh/ssh-remote-platform.ts b/src/main/ssh/ssh-remote-platform.ts
index 1fcd9ede6d74..1b8925519006 100644
--- a/src/main/ssh/ssh-remote-platform.ts
+++ b/src/main/ssh/ssh-remote-platform.ts
@@ -1,4 +1,4 @@
-import type { RelayPlatform } from './remote-frame-protocol'
+import type { RelayPlatform } from './remote-exec/remote-frame-protocol'
export type RemotePathFlavor = 'posix' | 'windows'
export type RemoteCommandDialect = 'posix' | 'powershell'
diff --git a/src/main/ssh/ssh-remote-windows-command-line-limit.test.ts b/src/main/ssh/ssh-remote-windows-command-line-limit.test.ts
index 0db271c18bef..adc186e1f8c3 100644
--- a/src/main/ssh/ssh-remote-windows-command-line-limit.test.ts
+++ b/src/main/ssh/ssh-remote-windows-command-line-limit.test.ts
@@ -7,7 +7,7 @@ import { decodeRemotePowerShellScript, powerShellCommand } from './ssh-remote-po
import {
makeWindowsPublishStagedFileCommand,
makeWindowsWriteFileCommand
-} from './system-ssh-windows-file-write'
+} from './system-transport/system-ssh-windows-file-write'
const windows = getRemoteHostPlatform('win32-x64')
// Why: sshd runs an exec request through its DefaultShell, which is cmd.exe on a
diff --git a/src/main/ssh/ssh-security-key-identity.test.ts b/src/main/ssh/ssh-security-key-identity.test.ts
index a16f5d2d96d9..026a12d91419 100644
--- a/src/main/ssh/ssh-security-key-identity.test.ts
+++ b/src/main/ssh/ssh-security-key-identity.test.ts
@@ -15,7 +15,7 @@ import { requiresSystemSshForSecurityKey } from './ssh-transport-selection'
const { findSystemSshMock } = vi.hoisted(() => ({ findSystemSshMock: vi.fn() }))
-vi.mock('./system-ssh-binary', () => ({ findSystemSsh: findSystemSshMock }))
+vi.mock('./system-transport/system-ssh-binary', () => ({ findSystemSsh: findSystemSshMock }))
vi.mock('node:os', async (importOriginal) => {
const actual = await importOriginal<{ homedir: () => string }>()
diff --git a/src/main/ssh/ssh-system-transport.integration.test.ts b/src/main/ssh/ssh-system-transport.integration.test.ts
index 81d1daa64399..2df57ba5094a 100644
--- a/src/main/ssh/ssh-system-transport.integration.test.ts
+++ b/src/main/ssh/ssh-system-transport.integration.test.ts
@@ -7,7 +7,7 @@ vi.mock('electron', () => ({
}))
import { SshConnection } from './ssh-connection'
-import { uploadDirectoryViaSystemSsh } from './system-ssh-file-transfer'
+import { uploadDirectoryViaSystemSsh } from './system-transport/system-ssh-file-transfer'
import type { SshTarget } from '../../shared/ssh-types'
import { relayArtifactFilenames } from './relay-install-artifacts'
diff --git a/src/main/ssh/ssh-transport-selection.ts b/src/main/ssh/ssh-transport-selection.ts
index ffa311eb4d66..8434dedc4c88 100644
--- a/src/main/ssh/ssh-transport-selection.ts
+++ b/src/main/ssh/ssh-transport-selection.ts
@@ -1,16 +1,16 @@
import { constants } from 'node:fs'
import { open, stat } from 'node:fs/promises'
import type { SshTarget } from '../../shared/ssh-types'
-import type { SshResolvedConfig } from './ssh-g-config-resolution'
+import type { SshResolvedConfig } from './config/ssh-g-config-resolution'
import { listDefaultIdentityFilePaths, resolveIdentityFilePaths } from './ssh-auth-resolution'
-import { resolveSshConfigHomePath } from './ssh-config-path-expansion'
+import { resolveSshConfigHomePath } from './config/ssh-config-path-expansion'
import {
MAX_SSH_IDENTITY_FILE_BYTES,
isOpenSshSecurityKeyPrivateKey,
isOpenSshSecurityKeyPublicKey
} from './ssh-security-key-identity'
-import { isOpenSshConfigBackedTarget } from './system-ssh-args'
-import { findSystemSsh } from './system-ssh-binary'
+import { isOpenSshConfigBackedTarget } from './system-transport/system-ssh-args'
+import { findSystemSsh } from './system-transport/system-ssh-binary'
type TransportResolvedConfig = Pick<
SshResolvedConfig,
diff --git a/src/main/ssh/system-ssh-args.ts b/src/main/ssh/system-transport/system-ssh-args.ts
similarity index 99%
rename from src/main/ssh/system-ssh-args.ts
rename to src/main/ssh/system-transport/system-ssh-args.ts
index 6cf77af4b101..e2134681fa78 100644
--- a/src/main/ssh/system-ssh-args.ts
+++ b/src/main/ssh/system-transport/system-ssh-args.ts
@@ -1,5 +1,5 @@
-import type { SshTarget } from '../../shared/ssh-types'
-import { getControlSocketPath, type SystemSshResolvedConfig } from './ssh-control-socket'
+import type { SshTarget } from '../../../shared/ssh-types'
+import { getControlSocketPath, type SystemSshResolvedConfig } from '../ssh-control-socket'
export type SystemSshBuildArgsOptions = {
configFile?: string
diff --git a/src/main/ssh/system-ssh-binary.test.ts b/src/main/ssh/system-transport/system-ssh-binary.test.ts
similarity index 100%
rename from src/main/ssh/system-ssh-binary.test.ts
rename to src/main/ssh/system-transport/system-ssh-binary.test.ts
diff --git a/src/main/ssh/system-ssh-binary.ts b/src/main/ssh/system-transport/system-ssh-binary.ts
similarity index 100%
rename from src/main/ssh/system-ssh-binary.ts
rename to src/main/ssh/system-transport/system-ssh-binary.ts
diff --git a/src/main/ssh/system-ssh-command.ts b/src/main/ssh/system-transport/system-ssh-command.ts
similarity index 98%
rename from src/main/ssh/system-ssh-command.ts
rename to src/main/ssh/system-transport/system-ssh-command.ts
index 15f099a5f881..f75931588a0f 100644
--- a/src/main/ssh/system-ssh-command.ts
+++ b/src/main/ssh/system-transport/system-ssh-command.ts
@@ -1,8 +1,8 @@
import { spawn, type ChildProcess } from 'node:child_process'
import { Duplex } from 'node:stream'
import type { ClientChannel } from 'ssh2'
-import type { SshTarget } from '../../shared/ssh-types'
-import { wrapRemoteCommandForPosixShell, type SshExecOptions } from './ssh-connection-utils'
+import type { SshTarget } from '../../../shared/ssh-types'
+import { wrapRemoteCommandForPosixShell, type SshExecOptions } from '../ssh-connection-utils'
import { buildSshArgs, type SystemSshBuildArgsOptions } from './system-ssh-args'
import { findSystemSsh } from './system-ssh-binary'
diff --git a/src/main/ssh/system-ssh-dynamic-forward-process.test.ts b/src/main/ssh/system-transport/system-ssh-dynamic-forward-process.test.ts
similarity index 100%
rename from src/main/ssh/system-ssh-dynamic-forward-process.test.ts
rename to src/main/ssh/system-transport/system-ssh-dynamic-forward-process.test.ts
diff --git a/src/main/ssh/system-ssh-dynamic-forward-process.ts b/src/main/ssh/system-transport/system-ssh-dynamic-forward-process.ts
similarity index 98%
rename from src/main/ssh/system-ssh-dynamic-forward-process.ts
rename to src/main/ssh/system-transport/system-ssh-dynamic-forward-process.ts
index e036dacd9270..07cc7d1f101d 100644
--- a/src/main/ssh/system-ssh-dynamic-forward-process.ts
+++ b/src/main/ssh/system-transport/system-ssh-dynamic-forward-process.ts
@@ -1,6 +1,6 @@
import { spawn, type ChildProcess } from 'node:child_process'
import { connect, createServer, type AddressInfo, type Socket } from 'node:net'
-import type { SshTarget } from '../../shared/ssh-types'
+import type { SshTarget } from '../../../shared/ssh-types'
import { buildSshArgs, type SystemSshBuildArgsOptions } from './system-ssh-args'
import { findSystemSsh } from './system-ssh-binary'
import { waitForSystemSshForwardStop } from './system-ssh-forward-process'
diff --git a/src/main/ssh/system-ssh-file-binary-transfer.ts b/src/main/ssh/system-transport/system-ssh-file-binary-transfer.ts
similarity index 96%
rename from src/main/ssh/system-ssh-file-binary-transfer.ts
rename to src/main/ssh/system-transport/system-ssh-file-binary-transfer.ts
index 8ab036563c9f..e7ce97f0bf3b 100644
--- a/src/main/ssh/system-ssh-file-binary-transfer.ts
+++ b/src/main/ssh/system-transport/system-ssh-file-binary-transfer.ts
@@ -4,16 +4,16 @@ import { tmpdir } from 'node:os'
import { join } from 'node:path'
import type { Writable } from 'node:stream'
import { pipeline } from 'node:stream/promises'
-import type { SshTarget } from '../../shared/ssh-types'
-import { shellEscape } from './ssh-connection-utils'
+import type { SshTarget } from '../../../shared/ssh-types'
+import { shellEscape } from '../ssh-connection-utils'
import {
getSystemSshBuildArgsFromOperationOptions,
type SystemSshBuildArgsOptions
} from './system-ssh-args'
import { spawnSystemSshCommand } from './system-ssh-command'
-import { isWindowsRemoteHost, type RemoteHostPlatform } from './ssh-remote-platform'
-import { powerShellCommand } from './ssh-remote-powershell'
-import { quotePowerShellLiteral as powerShellLiteral } from '../../shared/powershell-native-argument'
+import { isWindowsRemoteHost, type RemoteHostPlatform } from '../ssh-remote-platform'
+import { powerShellCommand } from '../ssh-remote-powershell'
+import { quotePowerShellLiteral as powerShellLiteral } from '../../../shared/powershell-native-argument'
import {
awaitWithSystemSshAbort,
throwIfAborted,
diff --git a/src/main/ssh/system-ssh-file-transfer.ts b/src/main/ssh/system-transport/system-ssh-file-transfer.ts
similarity index 96%
rename from src/main/ssh/system-ssh-file-transfer.ts
rename to src/main/ssh/system-transport/system-ssh-file-transfer.ts
index 377435440fe0..4c6ea1e16e23 100644
--- a/src/main/ssh/system-ssh-file-transfer.ts
+++ b/src/main/ssh/system-transport/system-ssh-file-transfer.ts
@@ -1,10 +1,10 @@
-import { DirectoryTransferBudget } from './ssh-directory-transfer-budget'
+import { DirectoryTransferBudget } from '../ssh-directory-transfer-budget'
import { spawn, type ChildProcess } from 'node:child_process'
import { lstat, opendir } from 'node:fs/promises'
import { join as pathJoin } from 'node:path'
import { pipeline } from 'node:stream/promises'
-import type { SshTarget } from '../../shared/ssh-types'
-import { shellEscape, wrapRemoteCommandForPosixShell } from './ssh-connection-utils'
+import type { SshTarget } from '../../../shared/ssh-types'
+import { shellEscape, wrapRemoteCommandForPosixShell } from '../ssh-connection-utils'
import { findSystemSsh } from './system-ssh-binary'
import {
buildSshArgs,
@@ -12,8 +12,12 @@ import {
type SystemSshBuildArgsOptions
} from './system-ssh-args'
import { spawnSystemSshCommand } from './system-ssh-command'
-import { isWindowsRemoteHost, joinRemotePath, type RemoteHostPlatform } from './ssh-remote-platform'
-import { powerShellCommand } from './ssh-remote-powershell'
+import {
+ isWindowsRemoteHost,
+ joinRemotePath,
+ type RemoteHostPlatform
+} from '../ssh-remote-platform'
+import { powerShellCommand } from '../ssh-remote-powershell'
import {
awaitWithSystemSshAbort,
killProcess,
diff --git a/src/main/ssh/system-ssh-forward-process.test.ts b/src/main/ssh/system-transport/system-ssh-forward-process.test.ts
similarity index 99%
rename from src/main/ssh/system-ssh-forward-process.test.ts
rename to src/main/ssh/system-transport/system-ssh-forward-process.test.ts
index cefc09915db1..05c4b299e2dd 100644
--- a/src/main/ssh/system-ssh-forward-process.test.ts
+++ b/src/main/ssh/system-transport/system-ssh-forward-process.test.ts
@@ -43,7 +43,7 @@ import {
waitForSystemSshForwardStartup,
waitForSystemSshForwardStop
} from './system-ssh-forward-process'
-import type { SshTarget } from '../../shared/ssh-types'
+import type { SshTarget } from '../../../shared/ssh-types'
const SYSTEM_SSH_PATH =
process.platform === 'win32' ? 'C:\\Windows\\System32\\OpenSSH\\ssh.exe' : '/usr/bin/ssh'
diff --git a/src/main/ssh/system-ssh-forward-process.ts b/src/main/ssh/system-transport/system-ssh-forward-process.ts
similarity index 99%
rename from src/main/ssh/system-ssh-forward-process.ts
rename to src/main/ssh/system-transport/system-ssh-forward-process.ts
index a79a1086947d..964d81da3a1c 100644
--- a/src/main/ssh/system-ssh-forward-process.ts
+++ b/src/main/ssh/system-transport/system-ssh-forward-process.ts
@@ -3,7 +3,7 @@ import { connect, createServer } from 'node:net'
import { buildSshArgs, type SystemSshBuildArgsOptions } from './system-ssh-args'
import { findSystemSsh } from './system-ssh-binary'
import { stopOrphanedOrcaSshForward } from './system-ssh-orphaned-forward'
-import type { SshTarget } from '../../shared/ssh-types'
+import type { SshTarget } from '../../../shared/ssh-types'
export const SYSTEM_SSH_FORWARD_STARTUP_GRACE_MS = 750
export const SYSTEM_SSH_FORWARD_LISTENER_PROBE_INTERVAL_MS = 50
diff --git a/src/main/ssh/system-ssh-operation-lifecycle.ts b/src/main/ssh/system-transport/system-ssh-operation-lifecycle.ts
similarity index 100%
rename from src/main/ssh/system-ssh-operation-lifecycle.ts
rename to src/main/ssh/system-transport/system-ssh-operation-lifecycle.ts
diff --git a/src/main/ssh/system-ssh-operations.test.ts b/src/main/ssh/system-transport/system-ssh-operations.test.ts
similarity index 99%
rename from src/main/ssh/system-ssh-operations.test.ts
rename to src/main/ssh/system-transport/system-ssh-operations.test.ts
index 5f3347509ff1..59f58d971b12 100644
--- a/src/main/ssh/system-ssh-operations.test.ts
+++ b/src/main/ssh/system-transport/system-ssh-operations.test.ts
@@ -30,9 +30,9 @@ import {
} from './system-ssh-file-binary-transfer'
import { spawnSystemSsh, spawnSystemSshCommand } from './system-ssh-command'
import { uploadDirectoryViaSystemSsh, writeFileViaSystemSsh } from './system-ssh-file-transfer'
-import { getRemoteHostPlatform } from './ssh-remote-platform'
-import type { SshTarget } from '../../shared/ssh-types'
-import type { SystemSshResolvedConfig } from './ssh-control-socket'
+import { getRemoteHostPlatform } from '../ssh-remote-platform'
+import type { SshTarget } from '../../../shared/ssh-types'
+import type { SystemSshResolvedConfig } from '../ssh-control-socket'
const SYSTEM_SSH_PATH =
process.platform === 'win32' ? 'C:\\Windows\\System32\\OpenSSH\\ssh.exe' : '/usr/bin/ssh'
diff --git a/src/main/ssh/system-ssh-orphaned-forward.test.ts b/src/main/ssh/system-transport/system-ssh-orphaned-forward.test.ts
similarity index 100%
rename from src/main/ssh/system-ssh-orphaned-forward.test.ts
rename to src/main/ssh/system-transport/system-ssh-orphaned-forward.test.ts
diff --git a/src/main/ssh/system-ssh-orphaned-forward.ts b/src/main/ssh/system-transport/system-ssh-orphaned-forward.ts
similarity index 96%
rename from src/main/ssh/system-ssh-orphaned-forward.ts
rename to src/main/ssh/system-transport/system-ssh-orphaned-forward.ts
index 237d68905fea..2fa75291dc8b 100644
--- a/src/main/ssh/system-ssh-orphaned-forward.ts
+++ b/src/main/ssh/system-transport/system-ssh-orphaned-forward.ts
@@ -5,12 +5,12 @@
* Orca would spawn for this same forward and host, and whose parent is gone, qualifies: a user's
* own ssh and a live Orca's tunnel never match.
*/
-import { getFreshShellForegroundSnapshot } from '../../shared/process-table-snapshot-reader'
-import { readWindowsProcessTableFresh } from '../windows/windows-process-table'
+import { getFreshShellForegroundSnapshot } from '../../../shared/process-table-snapshot-reader'
+import { readWindowsProcessTableFresh } from '../../windows/windows-process-table'
import {
PROCESS_START_TIME_TOLERANCE_MS,
readProcessStartTimeMs
-} from '../runtime/agent-session-process-identity-probe'
+} from '../../runtime/agent-session-process-identity-probe'
export type SshForwardProcessRow = {
pid: number
diff --git a/src/main/ssh/system-ssh-sftp-args.test.ts b/src/main/ssh/system-transport/system-ssh-sftp-args.test.ts
similarity index 100%
rename from src/main/ssh/system-ssh-sftp-args.test.ts
rename to src/main/ssh/system-transport/system-ssh-sftp-args.test.ts
diff --git a/src/main/ssh/system-ssh-sftp-args.ts b/src/main/ssh/system-transport/system-ssh-sftp-args.ts
similarity index 100%
rename from src/main/ssh/system-ssh-sftp-args.ts
rename to src/main/ssh/system-transport/system-ssh-sftp-args.ts
diff --git a/src/main/ssh/system-ssh-sftp-path.test.ts b/src/main/ssh/system-transport/system-ssh-sftp-path.test.ts
similarity index 100%
rename from src/main/ssh/system-ssh-sftp-path.test.ts
rename to src/main/ssh/system-transport/system-ssh-sftp-path.test.ts
diff --git a/src/main/ssh/system-ssh-sftp-path.ts b/src/main/ssh/system-transport/system-ssh-sftp-path.ts
similarity index 96%
rename from src/main/ssh/system-ssh-sftp-path.ts
rename to src/main/ssh/system-transport/system-ssh-sftp-path.ts
index 2b5bfe53f026..dcc4fdb36e66 100644
--- a/src/main/ssh/system-ssh-sftp-path.ts
+++ b/src/main/ssh/system-transport/system-ssh-sftp-path.ts
@@ -1,4 +1,4 @@
-import { normalizeWindowsRemotePath } from './ssh-remote-platform'
+import { normalizeWindowsRemotePath } from '../ssh-remote-platform'
/**
* A path this transfer cannot express to sftp. Callers treat it as "use another transport", never
diff --git a/src/main/ssh/system-ssh-sftp-transfer.ts b/src/main/ssh/system-transport/system-ssh-sftp-transfer.ts
similarity index 99%
rename from src/main/ssh/system-ssh-sftp-transfer.ts
rename to src/main/ssh/system-transport/system-ssh-sftp-transfer.ts
index e0a0a1bc4240..058254481a91 100644
--- a/src/main/ssh/system-ssh-sftp-transfer.ts
+++ b/src/main/ssh/system-transport/system-ssh-sftp-transfer.ts
@@ -1,6 +1,6 @@
import { accessSync, constants, existsSync, statSync } from 'node:fs'
import { posix, win32 } from 'node:path'
-import type { SshTarget } from '../../shared/ssh-types'
+import type { SshTarget } from '../../../shared/ssh-types'
import { buildSshArgs, type SystemSshBuildArgsOptions } from './system-ssh-args'
import { findSystemSsh } from './system-ssh-binary'
import {
diff --git a/src/main/ssh/system-ssh-upload-plan-budget.test.ts b/src/main/ssh/system-transport/system-ssh-upload-plan-budget.test.ts
similarity index 96%
rename from src/main/ssh/system-ssh-upload-plan-budget.test.ts
rename to src/main/ssh/system-transport/system-ssh-upload-plan-budget.test.ts
index d623c036992f..4e95b78fab6a 100644
--- a/src/main/ssh/system-ssh-upload-plan-budget.test.ts
+++ b/src/main/ssh/system-transport/system-ssh-upload-plan-budget.test.ts
@@ -7,7 +7,7 @@ vi.mock('node:fs/promises', async (load) => ({
lstat: stats
}))
import { collectLocalUploadPlan } from './system-ssh-file-transfer'
-import { getRemoteHostPlatform } from './ssh-remote-platform'
+import { getRemoteHostPlatform } from '../ssh-remote-platform'
it('stops the upload producer at its retained-plan ceiling before any transfer starts', async () => {
let visited = 0
diff --git a/src/main/ssh/system-ssh-windows-file-write.ts b/src/main/ssh/system-transport/system-ssh-windows-file-write.ts
similarity index 97%
rename from src/main/ssh/system-ssh-windows-file-write.ts
rename to src/main/ssh/system-transport/system-ssh-windows-file-write.ts
index 5efc788aa777..2d56a23ea986 100644
--- a/src/main/ssh/system-ssh-windows-file-write.ts
+++ b/src/main/ssh/system-transport/system-ssh-windows-file-write.ts
@@ -1,7 +1,7 @@
import { randomBytes } from 'node:crypto'
-import { powerShellCommand } from './ssh-remote-powershell'
-import { quotePowerShellLiteral as powerShellLiteral } from '../../shared/powershell-native-argument'
-import { normalizeWindowsRemotePath } from './ssh-remote-platform'
+import { powerShellCommand } from '../ssh-remote-powershell'
+import { quotePowerShellLiteral as powerShellLiteral } from '../../../shared/powershell-native-argument'
+import { normalizeWindowsRemotePath } from '../ssh-remote-platform'
/**
* Suffix marking the path a Windows write lands on before it is published by rename.
diff --git a/src/main/ssh/system-ssh-windows-upload.test.ts b/src/main/ssh/system-transport/system-ssh-windows-upload.test.ts
similarity index 99%
rename from src/main/ssh/system-ssh-windows-upload.test.ts
rename to src/main/ssh/system-transport/system-ssh-windows-upload.test.ts
index 967923aefb76..2f3acdd21018 100644
--- a/src/main/ssh/system-ssh-windows-upload.test.ts
+++ b/src/main/ssh/system-transport/system-ssh-windows-upload.test.ts
@@ -47,7 +47,7 @@ import { uploadFileViaSystemSsh, writeBufferViaSystemSsh } from './system-ssh-fi
import { WINDOWS_STAGED_WRITE_SUFFIX } from './system-ssh-windows-file-write'
import { waitForChannelClose } from './system-ssh-operation-lifecycle'
import * as windowsFileWrite from './system-ssh-windows-file-write'
-import { getRemoteHostPlatform } from './ssh-remote-platform'
+import { getRemoteHostPlatform } from '../ssh-remote-platform'
import {
clearWindowsRemoteWriteCapabilitiesForTests,
getWindowsRemoteWriteCapabilities
@@ -58,7 +58,7 @@ import {
WINDOWS_STDIN_WRITE_TIMEOUT_MS,
writeWindowsRemoteFile
} from './system-ssh-windows-write-strategy'
-import type { SshTarget } from '../../shared/ssh-types'
+import type { SshTarget } from '../../../shared/ssh-types'
type FakeChannel = EventEmitter & {
stdin: Writable
diff --git a/src/main/ssh/system-ssh-windows-write-capabilities.test.ts b/src/main/ssh/system-transport/system-ssh-windows-write-capabilities.test.ts
similarity index 98%
rename from src/main/ssh/system-ssh-windows-write-capabilities.test.ts
rename to src/main/ssh/system-transport/system-ssh-windows-write-capabilities.test.ts
index 7926341a1410..b424389e7674 100644
--- a/src/main/ssh/system-ssh-windows-write-capabilities.test.ts
+++ b/src/main/ssh/system-transport/system-ssh-windows-write-capabilities.test.ts
@@ -4,7 +4,7 @@
* re-probed once per file, and two targets pointing at one machine learn the same fact twice.
*/
import { afterEach, describe, expect, it } from 'vitest'
-import type { SshTarget } from '../../shared/ssh-types'
+import type { SshTarget } from '../../../shared/ssh-types'
import {
clearWindowsRemoteWriteCapabilitiesForTests,
getWindowsRemoteWriteCapabilities,
diff --git a/src/main/ssh/system-ssh-windows-write-capabilities.ts b/src/main/ssh/system-transport/system-ssh-windows-write-capabilities.ts
similarity index 94%
rename from src/main/ssh/system-ssh-windows-write-capabilities.ts
rename to src/main/ssh/system-transport/system-ssh-windows-write-capabilities.ts
index 902818a4158d..cb37d2567fd9 100644
--- a/src/main/ssh/system-ssh-windows-write-capabilities.ts
+++ b/src/main/ssh/system-transport/system-ssh-windows-write-capabilities.ts
@@ -1,5 +1,5 @@
-import type { SshTarget } from '../../shared/ssh-types'
-import { CapabilityProbeCache } from '../../shared/capability-probe-cache'
+import type { SshTarget } from '../../../shared/ssh-types'
+import { CapabilityProbeCache } from '../../../shared/capability-probe-cache'
/**
* Whether a Windows host can take a file write over the sftp subsystem, and whether it has a
diff --git a/src/main/ssh/system-ssh-windows-write-strategy.ts b/src/main/ssh/system-transport/system-ssh-windows-write-strategy.ts
similarity index 99%
rename from src/main/ssh/system-ssh-windows-write-strategy.ts
rename to src/main/ssh/system-transport/system-ssh-windows-write-strategy.ts
index e8016db313ce..8c1b69622a7f 100644
--- a/src/main/ssh/system-ssh-windows-write-strategy.ts
+++ b/src/main/ssh/system-transport/system-ssh-windows-write-strategy.ts
@@ -1,4 +1,4 @@
-import type { SshTarget } from '../../shared/ssh-types'
+import type { SshTarget } from '../../../shared/ssh-types'
import { getSystemSshBuildArgsFromOperationOptions } from './system-ssh-args'
import { spawnSystemSshCommand } from './system-ssh-command'
import {
diff --git a/src/main/startup/headless-serve-ssh-registration.test.ts b/src/main/startup/headless-serve-ssh-registration.test.ts
index 785cec01c6cc..567498b94e59 100644
--- a/src/main/startup/headless-serve-ssh-registration.test.ts
+++ b/src/main/startup/headless-serve-ssh-registration.test.ts
@@ -5,7 +5,7 @@ const mocks = await vi.hoisted(async () => {
return createSshIpcMocks()
})
-vi.mock('../ssh/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
+vi.mock('../ssh/config/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
vi.mock('electron', () => mocks.electron)
vi.mock('../ssh/ssh-connection-store', () => mocks.sshConnectionStore)
vi.mock('../ipc/ssh-host-server-connect', () => mocks.hostServerConnect)
diff --git a/src/main/worktree-removal-close-records.test.ts b/src/main/worktree-removal-close-records.test.ts
index cfad31f4d20b..7762fb79b9ff 100644
--- a/src/main/worktree-removal-close-records.test.ts
+++ b/src/main/worktree-removal-close-records.test.ts
@@ -20,7 +20,7 @@ import {
let hasCreatedStoreInCase = false
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: vi.fn(),
sshConfigHostsToTargets: vi.fn()
}))
diff --git a/src/main/worktree-removal-session-partition-fencing.test.ts b/src/main/worktree-removal-session-partition-fencing.test.ts
index 8a5f1dad8a45..dd04d427f8e2 100644
--- a/src/main/worktree-removal-session-partition-fencing.test.ts
+++ b/src/main/worktree-removal-session-partition-fencing.test.ts
@@ -15,7 +15,7 @@ import { toRuntimeExecutionHostId } from '../shared/execution-host'
let hasCreatedStoreInCase = false
-vi.mock('./ssh/ssh-config-parser', () => ({
+vi.mock('./ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: vi.fn(),
sshConfigHostsToTargets: vi.fn()
}))
diff --git a/src/main/wsl/wsl-command-loop.test.ts b/src/main/wsl/wsl-command-loop.test.ts
index 8bcc120eebbb..c4972575d560 100644
--- a/src/main/wsl/wsl-command-loop.test.ts
+++ b/src/main/wsl/wsl-command-loop.test.ts
@@ -4,7 +4,7 @@ import { join } from 'node:path'
import { afterEach, describe, expect, it } from 'vitest'
import { spawnProcess } from '@orca/process-host'
import type { PipedChildProcess } from '@orca/process-host/process-spec'
-import { execCommand } from '../ssh/remote-exec-command'
+import { execCommand } from '../ssh/remote-exec/remote-exec-command'
import { WSL_COMMAND_LOOP_ARGV0, WSL_COMMAND_LOOP_SCRIPT } from './wsl-command-loop'
import { createWslCommandLoopPool, type WslCommandLoopPool } from './wsl-command-loop-pool'
diff --git a/src/main/wsl/wsl-directory-upload.ts b/src/main/wsl/wsl-directory-upload.ts
index c262551a0efe..f8829e9c46ad 100644
--- a/src/main/wsl/wsl-directory-upload.ts
+++ b/src/main/wsl/wsl-directory-upload.ts
@@ -11,10 +11,13 @@ import { Readable } from 'node:stream'
import { parseWslUncPath, toLinuxPath } from '../../shared/wsl-paths'
import type { RemoteInstallTransport } from '../managed-server/install/remote-install-transport'
import { shellEscape } from '../ssh/ssh-connection-utils'
-import { execCommand } from '../ssh/remote-exec-command'
+import { execCommand } from '../ssh/remote-exec/remote-exec-command'
import { RELAY_DEPLOY_TIMEOUT_MS } from '../managed-server/install/remote-deploy-timing'
import { getRemoteHostPlatform } from '../ssh/ssh-remote-platform'
-import { collectLocalUploadPlan, type LocalUploadPlan } from '../ssh/system-ssh-file-transfer'
+import {
+ collectLocalUploadPlan,
+ type LocalUploadPlan
+} from '../ssh/system-transport/system-ssh-file-transfer'
import { buildUstarEntryHeader, USTAR_BLOCK_BYTES, ustarPaddingBytes } from '../ustar-entry-header'
export const WSL_GUEST_SOURCE_UNAVAILABLE = 'ORCA_WSL_GUEST_SOURCE_UNAVAILABLE'
diff --git a/src/main/wsl/wsl-guest-process-identity.ts b/src/main/wsl/wsl-guest-process-identity.ts
index 728f2b407dc2..f4c9b8c18ac5 100644
--- a/src/main/wsl/wsl-guest-process-identity.ts
+++ b/src/main/wsl/wsl-guest-process-identity.ts
@@ -5,7 +5,7 @@
* a wall-clock start time would then mistake a live process for a new one, or the reverse.
*/
import type { OrcadHostTransport } from '../ssh/orcad-host-transport'
-import { execCommand } from '../ssh/remote-exec-command'
+import { execCommand } from '../ssh/remote-exec/remote-exec-command'
export type WslGuestIdentity = {
/** `:`; a distro restart (or a VM restart) changes it. */
diff --git a/src/main/wsl/wsl-host-ssh-orcad-conflict.ts b/src/main/wsl/wsl-host-ssh-orcad-conflict.ts
index 6598f9d825f5..e8ac3e95269e 100644
--- a/src/main/wsl/wsl-host-ssh-orcad-conflict.ts
+++ b/src/main/wsl/wsl-host-ssh-orcad-conflict.ts
@@ -18,7 +18,7 @@ import {
type KnownRuntimeEnvironment
} from '../../shared/runtime-environments'
import type { OrcadHostTransport } from '../ssh/orcad-host-transport'
-import { execCommand } from '../ssh/remote-exec-command'
+import { execCommand } from '../ssh/remote-exec/remote-exec-command'
// Prints only the public half; the private key never leaves the distro.
const READ_PUBLIC_KEY = `sed -n 's/.*"publicKeyB64"[[:space:]]*:[[:space:]]*"\\([A-Za-z0-9+/=]*\\)".*/\\1/p' "$HOME/.orca/${E2EE_KEYPAIR_FILENAME}" 2>/dev/null | head -n 1`
diff --git a/src/main/wsl/wsl-orcad-deploy.test.ts b/src/main/wsl/wsl-orcad-deploy.test.ts
index 45d330ee6344..a91741d61b0d 100644
--- a/src/main/wsl/wsl-orcad-deploy.test.ts
+++ b/src/main/wsl/wsl-orcad-deploy.test.ts
@@ -33,7 +33,7 @@ vi.mock('./wsl-orcad-instance-adoption', () => ({ adoptUnrecordedWslOrcad: mocks
vi.mock('../../shared/app-environment', () => ({
getAppEnvironment: () => ({ getVersion: () => '1.5.0', getPath: () => '/user-data' })
}))
-vi.mock('../ssh/remote-exec-command', () => ({ execCommand: mocks.exec }))
+vi.mock('../ssh/remote-exec/remote-exec-command', () => ({ execCommand: mocks.exec }))
vi.mock('../managed-server/install/orcad-remote-context', () => ({
resolveOrcadRemoteContext: mocks.resolveContext
}))
diff --git a/src/main/wsl/wsl-orcad-deploy.ts b/src/main/wsl/wsl-orcad-deploy.ts
index 4e18115ec89c..f68200f0f1b4 100644
--- a/src/main/wsl/wsl-orcad-deploy.ts
+++ b/src/main/wsl/wsl-orcad-deploy.ts
@@ -28,7 +28,7 @@ import { resolveOrcadRemoteContext } from '../managed-server/install/orcad-remot
import { deployOrcad } from '../ssh/orcad-remote-deploy'
import { ORCAD_PID_FILENAME } from '../managed-server/install/orcad-remote-host-support'
import { shellEscape } from '../ssh/ssh-connection-utils'
-import { execCommand } from '../ssh/remote-exec-command'
+import { execCommand } from '../ssh/remote-exec/remote-exec-command'
import { joinRemotePath } from '../ssh/ssh-remote-platform'
import { readLocalFullVersion } from '../managed-server/install/remote-versioned-install'
import { createWslDistroHolder, type WslDistroHolder } from './wsl-distro-holder'
diff --git a/src/main/wsl/wsl-orcad-host-transport-loops.test.ts b/src/main/wsl/wsl-orcad-host-transport-loops.test.ts
index 8b2a2262e1f2..df91578ffe3e 100644
--- a/src/main/wsl/wsl-orcad-host-transport-loops.test.ts
+++ b/src/main/wsl/wsl-orcad-host-transport-loops.test.ts
@@ -2,7 +2,7 @@ import { Readable } from 'node:stream'
import { afterEach, describe, expect, it } from 'vitest'
import { spawnProcess } from '@orca/process-host'
import type { PipedChildProcess, PipedProcessSpec } from '@orca/process-host/process-spec'
-import { execCommand } from '../ssh/remote-exec-command'
+import { execCommand } from '../ssh/remote-exec/remote-exec-command'
import { createWslOrcadHostTransport, type WslOrcadHostTransport } from './wsl-orcad-host-transport'
const posix = process.platform !== 'win32'
diff --git a/src/main/wsl/wsl-orcad-host-transport.test.ts b/src/main/wsl/wsl-orcad-host-transport.test.ts
index 2392667bbf60..a31be8deb1bc 100644
--- a/src/main/wsl/wsl-orcad-host-transport.test.ts
+++ b/src/main/wsl/wsl-orcad-host-transport.test.ts
@@ -3,7 +3,7 @@ import { EventEmitter } from 'node:events'
import { PassThrough, Readable } from 'node:stream'
import { describe, expect, it, vi } from 'vitest'
import type { PipedChildProcess, PipedProcessSpec } from '@orca/process-host/process-spec'
-import { execCommand } from '../ssh/remote-exec-command'
+import { execCommand } from '../ssh/remote-exec/remote-exec-command'
import { isWslOrcadHostTarget } from '../ssh/orcad-host-transport'
import { createWslOrcadHostTransport } from './wsl-orcad-host-transport'
diff --git a/src/main/wsl/wsl-orcad-real-distro-lane.test.ts b/src/main/wsl/wsl-orcad-real-distro-lane.test.ts
index d5f7afe501bb..a2028e911bfb 100644
--- a/src/main/wsl/wsl-orcad-real-distro-lane.test.ts
+++ b/src/main/wsl/wsl-orcad-real-distro-lane.test.ts
@@ -30,7 +30,7 @@ import {
ORCAD_TEMPLATE_MANIFEST_FILENAME
} from '../../shared/orcad-artifacts'
import { requestOrcadTerminalCensus } from '../ssh/orcad-terminal-census-client'
-import { execCommand } from '../ssh/remote-exec-command'
+import { execCommand } from '../ssh/remote-exec/remote-exec-command'
import { readConfirmedRunningWslDistros } from '../wsl-background-distro-gate'
import { readWindowsProcessTableFresh } from '../windows/windows-process-table'
import { resolveWslInteropSpawnCwd } from '../wsl-interop-spawn-directory'
diff --git a/src/wsl-guest/protocol-json-payload.test.ts b/src/wsl-guest/protocol-json-payload.test.ts
index c634b94e0fde..a8c09e667a55 100644
--- a/src/wsl-guest/protocol-json-payload.test.ts
+++ b/src/wsl-guest/protocol-json-payload.test.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from 'vitest'
-import * as mainProtocol from '../main/ssh/remote-frame-protocol'
+import * as mainProtocol from '../main/ssh/remote-exec/remote-frame-protocol'
import {
HEADER_LENGTH,
MAX_MESSAGE_SIZE,
diff --git a/src/wsl-guest/protocol.ts b/src/wsl-guest/protocol.ts
index b65723f45b8c..72f0606ebd90 100644
--- a/src/wsl-guest/protocol.ts
+++ b/src/wsl-guest/protocol.ts
@@ -1,4 +1,4 @@
-// Self-contained relay protocol — mirrors src/main/ssh/remote-frame-protocol.ts
+// Self-contained relay protocol — mirrors src/main/ssh/remote-exec/remote-frame-protocol.ts
// but has no Electron dependencies. Deployed standalone to remote hosts.
import {
diff --git a/tests/e2e/cross-version-wire/released-relay-transport.ts b/tests/e2e/cross-version-wire/released-relay-transport.ts
index fff3c01f32cb..805d807f8f32 100644
--- a/tests/e2e/cross-version-wire/released-relay-transport.ts
+++ b/tests/e2e/cross-version-wire/released-relay-transport.ts
@@ -8,7 +8,7 @@ import {
SshChannelMultiplexer,
type MultiplexerTransport
} from '../../../src/main/ssh/ssh-channel-multiplexer'
-import { RELAY_SENTINEL } from '../../../src/main/ssh/remote-frame-protocol'
+import { RELAY_SENTINEL } from '../../../src/main/ssh/remote-exec/remote-frame-protocol'
const SENTINEL = Buffer.from(RELAY_SENTINEL, 'utf-8')
const OWNER_HELD_DISCONNECTED = -32045
diff --git a/tests/e2e/host-agent-launch-settings-hook-bookkeeping.unit.test.ts b/tests/e2e/host-agent-launch-settings-hook-bookkeeping.unit.test.ts
index 590d9936c469..fc0a40407f1d 100644
--- a/tests/e2e/host-agent-launch-settings-hook-bookkeeping.unit.test.ts
+++ b/tests/e2e/host-agent-launch-settings-hook-bookkeeping.unit.test.ts
@@ -17,7 +17,7 @@ vi.mock('../../src/main/telemetry/client', () => ({ track: vi.fn() }))
vi.mock('../../src/main/telemetry/cohort-classifier', () => ({
getCohortAtEmit: () => ({ nth_repo_added: 2 })
}))
-vi.mock('../../src/main/ssh/ssh-config-parser', () => ({
+vi.mock('../../src/main/ssh/config/ssh-config-parser', () => ({
loadUserSshConfig: () => ({ hosts: [] }),
sshConfigHostsToTargets: () => []
}))
From 1938bd055aedd349d07172056fec6810992d5e0e Mon Sep 17 00:00:00 2001
From: Neil <4138956+nwparker@users.noreply.github.com>
Date: Sun, 18 Oct 2026 08:11:52 -0700
Subject: [PATCH 02/15] refactor(ipc): group SSH and runtime-environment IPC
handlers into ipc/ssh/ and ipc/runtime-environments/ (#30362)
git mv plus import, vi.mock and path-literal rewrites; e2e route regexes and the Windows host lane
filter follow the moved handlers.
---
.github/workflows/ssh-windows-hosts.yml | 2 +-
config/legacy-relay-compat-tags-baseline.txt | 12 +-
config/legacy-relay-importers-baseline.txt | 12 +-
config/main-layout-writer-baseline.txt | 4 +-
config/reliability-gates.jsonc | 56 ++++-----
.../scripts/check-compat-boundary-imports.mjs | 4 +-
config/scripts/ci-shard-timings.json | 110 +++++++++---------
.../scripts/pr-e2e-route-contracts.test.mjs | 18 +--
config/scripts/pr-e2e-source-routing.mjs | 4 +-
config/scripts/vitest-node-runtime-files.mjs | 4 +-
.../scripts/vitest-sqlite-runtime-files.mjs | 2 +-
.../ai-vault/runtime-session-scanner.test.ts | 2 +-
src/main/ai-vault/runtime-session-scanner.ts | 2 +-
.../runtime-session-search-call.test.ts | 4 +-
.../ai-vault/runtime-session-search-call.ts | 2 +-
.../browser/doc-preview-file-reader.test.ts | 2 +-
src/main/browser/doc-preview-file-reader.ts | 2 +-
src/main/ephemeral-vm-runtime-ssh.test.ts | 4 +-
src/main/ephemeral-vm-runtime-ssh.ts | 4 +-
.../agent-session-attachment-upload.test.ts | 2 +-
.../ipc/agent-session-attachment-upload.ts | 4 +-
.../ai-vault-host-leg-cache-retention.test.ts | 2 +-
src/main/ipc/ai-vault-search.test.ts | 2 +-
.../ipc/ai-vault-unresolved-owner.test.ts | 2 +-
src/main/ipc/browser.ts | 2 +-
.../ipc/desktop-browser-bridge-wiring.test.ts | 4 +-
src/main/ipc/desktop-browser-bridge-wiring.ts | 6 +-
src/main/ipc/ephemeral-vm-managed-ssh.test.ts | 4 +-
src/main/ipc/ephemeral-vm-runtime-handlers.ts | 2 +-
src/main/ipc/ephemeral-vm.test.ts | 2 +-
.../managed-host-status-publication.test.ts | 4 +-
.../register-core-handlers.test.ts | 4 +-
.../register-core-handlers.ts | 2 +-
.../managed-orcad-actions.ts | 18 +--
.../orcad-delta-move-handlers.test.ts | 12 +-
.../orcad-delta-move-handlers.ts | 18 +--
.../orcad-leave-behind-handlers.ts | 2 +-
.../orcad-runtime-conversion-handlers.test.ts | 6 +-
.../orcad-runtime-conversion-handlers.ts | 8 +-
.../orcad-runtime-lifecycle-handlers.test.ts | 4 +-
.../orcad-runtime-lifecycle-handlers.ts | 6 +-
...orcad-runtime-maintenance-handlers.test.ts | 4 +-
.../orcad-runtime-maintenance-handlers.ts | 2 +-
.../orcad-ssh-provisioning-handlers.test.ts | 2 +-
.../orcad-ssh-provisioning-handlers.ts | 4 +-
.../runtime-environment-abortable-requests.ts | 8 +-
...onment-browser-client-host-handler.test.ts | 8 +-
...environment-browser-client-host-handler.ts | 10 +-
.../runtime-environment-call-queue.ts | 2 +-
...me-environment-capability-evidence.test.ts | 4 +-
...runtime-environment-capability-evidence.ts | 2 +-
...me-environment-cli-removal-routing.test.ts | 16 +--
...ntime-environment-connectivity-handlers.ts | 24 ++--
...-environment-diagnostics-broadcast.test.ts | 0
...ntime-environment-diagnostics-broadcast.ts | 4 +-
...environment-federated-read-routing.test.ts | 10 +-
...ent-federated-read-transport.bench.test.ts | 8 +-
.../runtime-environment-handler-channels.ts | 0
.../runtime-environment-host-dispatch.test.ts | 12 +-
.../runtime-environment-host-key.test.ts | 2 +-
.../runtime-environment-host-key.ts | 2 +-
.../runtime-environment-host-service-ops.ts | 6 +-
...nvironment-managed-host-disconnect.test.ts | 11 +-
...runtime-environment-managed-tunnel.test.ts | 39 ++++---
.../runtime-environment-managed-tunnel.ts | 34 +++---
.../runtime-environment-manual-disconnect.ts | 2 +-
...ime-environment-mobile-relay-hosts.test.ts | 6 +-
.../runtime-environment-mobile-relay-hosts.ts | 20 ++--
...untime-environment-pairing-verification.ts | 21 ++--
.../runtime-environment-preference.test.ts | 10 +-
.../runtime-environment-preference.ts | 9 +-
...ntime-environment-recovery-handler.test.ts | 2 +-
.../runtime-environment-recovery-handler.ts | 2 +-
...untime-environment-removal-cleanup.test.ts | 4 +-
.../runtime-environment-removal-cleanup.ts | 8 +-
...untime-environment-removal-storage.test.ts | 4 +-
.../runtime-environment-repair-handler.ts | 2 +-
...me-environment-request-connections.test.ts | 2 +-
...runtime-environment-request-connections.ts | 22 ++--
...nvironment-retry-connections-probe.test.ts | 4 +-
...runtime-environment-revision-guard.test.ts | 2 +-
.../runtime-environment-revision-guard.ts | 4 +-
...time-environment-session-reconcile.test.ts | 6 +-
.../runtime-environment-session-reconcile.ts | 6 +-
...onment-session-tabs-delta-decoding.test.ts | 2 +-
...environment-session-tabs-delta-decoding.ts | 4 +-
...ent-session-tabs-delta.integration.test.ts | 18 +--
...time-environment-shared-control-answers.ts | 0
...time-environment-shared-control-support.ts | 6 +-
...time-environment-status-connection.test.ts | 8 +-
.../runtime-environment-status-diagnostics.ts | 4 +-
.../runtime-environment-status-owner.ts | 14 +--
.../runtime-environment-status-probe.ts | 8 +-
...untime-environment-status-recovery.test.ts | 6 +-
...time-environment-status-retirement.test.ts | 8 +-
...ntime-environment-subscription-handlers.ts | 6 +-
...-environment-subscription-identity.test.ts | 4 +-
...ment-subscription-layout-recording.test.ts | 2 +-
...untime-environment-support-routing.test.ts | 10 +-
.../runtime-environment-support-routing.ts | 18 +--
.../runtime-environment-tailscale-response.ts | 4 +-
...e-environment-transport-generation.test.ts | 0
...untime-environment-transport-generation.ts | 0
...t-transport-routing-tailscale-hint.test.ts | 6 +-
.../runtime-environment-transport-routing.ts | 10 +-
...ntime-environment-unreachable-hint.test.ts | 2 +-
.../runtime-environment-unreachable-hint.ts | 6 +-
.../runtime-environment-usage-record.ts | 2 +-
.../runtime-environments-call-routing.test.ts | 14 +--
...time-environments-capability-cache.test.ts | 4 +-
.../runtime-environments-ipc-test-harness.ts | 8 +-
.../runtime-environments-pairing.test.ts | 12 +-
.../runtime-environments-repair.test.ts | 6 +-
...me-environments-status-diagnostics.test.ts | 6 +-
...nvironments-subscription-lifecycle.test.ts | 6 +-
...-environments-subscription-routing.test.ts | 6 +-
...environments-subscription-teardown.test.ts | 4 +-
.../runtime-environments.ts | 16 +--
.../ipc/runtime-upload-file-stream.test.ts | 4 +-
src/main/ipc/runtime-upload-file-stream.ts | 4 +-
.../runtime-upload-slice-boundaries.test.ts | 2 +-
.../ipc/runtime-upload-temp-sweep.test.ts | 2 +-
src/main/ipc/runtime-upload-temp-sweep.ts | 2 +-
src/main/ipc/settings.ts | 2 +-
src/main/ipc/skill-cloud-ipc-handlers.test.ts | 4 +-
src/main/ipc/skill-cloud-ipc-handlers.ts | 2 +-
...ll-install-management-ipc-handlers.test.ts | 2 +-
.../skill-install-management-ipc-handlers.ts | 2 +-
.../ipc/{ => ssh}/ssh-app-shutdown.test.ts | 16 +--
src/main/ipc/{ => ssh}/ssh-browse.test.ts | 0
src/main/ipc/{ => ssh}/ssh-browse.ts | 4 +-
.../{ => ssh}/ssh-connect-attempt-registry.ts | 6 +-
.../ssh-connect-decision-cancellation.test.ts | 20 ++--
src/main/ipc/{ => ssh}/ssh-connect-flow.ts | 19 +--
.../ipc/{ => ssh}/ssh-connection-handlers.ts | 12 +-
.../ssh-connection-state-callbacks.ts | 13 ++-
.../{ => ssh}/ssh-credential-cancel.test.ts | 16 +--
.../ssh-disconnect-cancellation.test.ts | 12 +-
.../ssh-handler-reregistration.test.ts | 12 +-
.../ssh-host-launch-session-note.test.ts | 14 +--
.../{ => ssh}/ssh-host-launch-session-note.ts | 12 +-
.../ipc/{ => ssh}/ssh-host-server-connect.ts | 16 +--
.../ssh-host-server-decision-failure.test.ts | 10 +-
.../ssh-host-server-on-connect-wiring.test.ts | 26 ++---
.../ssh-host-server-on-connect-wiring.ts | 48 ++++----
.../ssh-host-sleep-reconnect.test.ts | 4 +-
.../ipc/{ => ssh}/ssh-host-sleep-reconnect.ts | 6 +-
.../ssh-host-user-disconnect.test.ts | 31 ++---
.../ipc/{ => ssh}/ssh-host-user-disconnect.ts | 17 +--
src/main/ipc/{ => ssh}/ssh-ipc-context.ts | 8 +-
src/main/ipc/{ => ssh}/ssh-ipc-mock-shapes.ts | 0
.../ipc/{ => ssh}/ssh-ipc-module-mocks.ts | 0
.../ipc/{ => ssh}/ssh-ipc-test-harness.ts | 0
...anaged-host-port-forward-lifecycle.test.ts | 6 +-
.../ssh-managed-port-forward-restore.ts | 2 +-
...sh-managed-server-unlink-broadcast.test.ts | 4 +-
src/main/ipc/{ => ssh}/ssh-passphrase.test.ts | 4 +-
src/main/ipc/{ => ssh}/ssh-passphrase.ts | 4 +-
.../{ => ssh}/ssh-port-forward-handlers.ts | 2 +-
.../{ => ssh}/ssh-port-forward-persistence.ts | 4 +-
.../ssh-port-forward-restore.test.ts | 6 +-
.../ipc/{ => ssh}/ssh-renderer-broadcast.ts | 22 ++--
.../ipc/{ => ssh}/ssh-session-teardown.ts | 16 +--
src/main/ipc/{ => ssh}/ssh-shutdown-drain.ts | 2 +-
.../{ => ssh}/ssh-sign-in-requirement.test.ts | 14 +--
.../ipc/{ => ssh}/ssh-sign-in-requirement.ts | 6 +-
.../ssh-state-broadcast-fanout.test.ts | 12 +-
...ssh-target-crud-handlers-ownership.test.ts | 6 +-
.../ipc/{ => ssh}/ssh-target-crud-handlers.ts | 20 ++--
.../{ => ssh}/ssh-target-lifecycle-queue.ts | 0
.../ipc/{ => ssh}/ssh-target-registry.test.ts | 12 +-
...ssh-test-connection-probe-registry.test.ts | 0
.../{ => ssh}/ssh-test-probe-presence.test.ts | 0
src/main/ipc/{ => ssh}/ssh.test.ts | 16 +--
src/main/ipc/{ => ssh}/ssh.ts | 36 +++---
src/main/ipc/wsl-host-gate-off.test.ts | 16 ++-
src/main/ipc/wsl-host-handlers.ts | 6 +-
.../lifecycle/orcad-managed-tunnel.ts | 2 +-
.../orcad-runtime-conversion-wiring.ts | 2 +-
.../lifecycle/orcad-runtime-conversion.ts | 2 +-
.../lifecycle/orcad-runtime-deployment.ts | 2 +-
.../lifecycle/orcad-runtime-status.ts | 2 +-
...ent-mediated-transfer-cancellation.test.ts | 2 +-
.../skill-client-mediated-transfer.test.ts | 2 +-
.../skills/skill-client-mediated-transfer.ts | 2 +-
.../skill-cloud-grant-installation.test.ts | 2 +-
.../skills/skill-cloud-grant-installation.ts | 2 +-
...skill-remote-error-category-parity.test.ts | 2 +-
.../skill-remote-install-service.test.ts | 2 +-
.../skills/skill-remote-install-service.ts | 2 +-
.../skills/skill-runtime-capability.test.ts | 4 +-
src/main/skills/skill-runtime-capability.ts | 2 +-
.../ssh-relay-version-mismatch-error.ts | 2 +-
.../ssh/orcad-migration-delta-move.test.ts | 2 +-
.../orcad-migration-delta-snapshot.test.ts | 2 +-
.../orcad-migration-repository-link.test.ts | 2 +-
src/main/ssh/orcad-runtime-maintenance.ts | 2 +-
src/main/ssh/orcad-ssh-provisioning.ts | 2 +-
src/main/ssh/runtime-ssh-access.ts | 2 +-
.../ssh-connection-reconnect-ladder.test.ts | 2 +-
.../headless-serve-ssh-registration.test.ts | 8 +-
.../headless-serve-ssh-registration.ts | 2 +-
src/main/startup/main-process-quit.ts | 2 +-
...-process-runtime-launch-activation.test.ts | 2 +-
.../startup/main-process-runtime-launch.ts | 2 +-
.../startup/main-process-runtime-service.ts | 2 +-
.../attach-main-window-services.test.ts | 4 +-
.../window/attach-main-window-services.ts | 2 +-
...ard-agent-session-attachment-paste.test.ts | 2 +-
.../window/clipboard-ipc-handlers.test.ts | 2 +-
.../window/clipboard-runtime-image-upload.ts | 2 +-
.../clipboard-runtime-owned-ssh-paste.test.ts | 2 +-
...e-browser-stream-lifecycle-test-harness.ts | 2 +-
.../remote-browser-stream-lifecycle.test.ts | 2 +-
.../remote-browser-stream-lifecycle.ts | 2 +-
215 files changed, 821 insertions(+), 775 deletions(-)
rename src/main/ipc/{ => runtime-environments}/managed-orcad-actions.ts (85%)
rename src/main/ipc/{ => runtime-environments}/orcad-delta-move-handlers.test.ts (85%)
rename src/main/ipc/{ => runtime-environments}/orcad-delta-move-handlers.ts (78%)
rename src/main/ipc/{ => runtime-environments}/orcad-leave-behind-handlers.ts (91%)
rename src/main/ipc/{ => runtime-environments}/orcad-runtime-conversion-handlers.test.ts (86%)
rename src/main/ipc/{ => runtime-environments}/orcad-runtime-conversion-handlers.ts (70%)
rename src/main/ipc/{ => runtime-environments}/orcad-runtime-lifecycle-handlers.test.ts (93%)
rename src/main/ipc/{ => runtime-environments}/orcad-runtime-lifecycle-handlers.ts (79%)
rename src/main/ipc/{ => runtime-environments}/orcad-runtime-maintenance-handlers.test.ts (97%)
rename src/main/ipc/{ => runtime-environments}/orcad-runtime-maintenance-handlers.ts (95%)
rename src/main/ipc/{ => runtime-environments}/orcad-ssh-provisioning-handlers.test.ts (97%)
rename src/main/ipc/{ => runtime-environments}/orcad-ssh-provisioning-handlers.ts (83%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-abortable-requests.ts (88%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-browser-client-host-handler.test.ts (96%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-browser-client-host-handler.ts (86%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-call-queue.ts (77%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-capability-evidence.test.ts (97%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-capability-evidence.ts (98%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-cli-removal-routing.test.ts (91%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-connectivity-handlers.ts (93%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-diagnostics-broadcast.test.ts (100%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-diagnostics-broadcast.ts (82%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-federated-read-routing.test.ts (95%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-federated-read-transport.bench.test.ts (94%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-handler-channels.ts (100%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-host-dispatch.test.ts (95%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-host-key.test.ts (93%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-host-key.ts (95%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-host-service-ops.ts (79%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-managed-host-disconnect.test.ts (92%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-managed-tunnel.test.ts (81%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-managed-tunnel.ts (84%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-manual-disconnect.ts (95%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-mobile-relay-hosts.test.ts (97%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-mobile-relay-hosts.ts (90%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-pairing-verification.ts (91%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-preference.test.ts (95%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-preference.ts (91%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-recovery-handler.test.ts (95%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-recovery-handler.ts (87%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-removal-cleanup.test.ts (85%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-removal-cleanup.ts (90%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-removal-storage.test.ts (96%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-repair-handler.ts (97%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-request-connections.test.ts (98%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-request-connections.ts (91%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-retry-connections-probe.test.ts (80%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-revision-guard.test.ts (95%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-revision-guard.ts (87%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-session-reconcile.test.ts (88%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-session-reconcile.ts (89%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-session-tabs-delta-decoding.test.ts (96%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-session-tabs-delta-decoding.ts (90%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-session-tabs-delta.integration.test.ts (91%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-shared-control-answers.ts (100%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-shared-control-support.ts (83%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-status-connection.test.ts (89%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-status-diagnostics.ts (90%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-status-owner.ts (91%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-status-probe.ts (85%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-status-recovery.test.ts (94%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-status-retirement.test.ts (95%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-subscription-handlers.ts (97%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-subscription-identity.test.ts (97%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-subscription-layout-recording.test.ts (98%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-support-routing.test.ts (95%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-support-routing.ts (93%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-tailscale-response.ts (76%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-transport-generation.test.ts (100%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-transport-generation.ts (100%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-transport-routing-tailscale-hint.test.ts (92%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-transport-routing.ts (96%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-unreachable-hint.test.ts (96%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-unreachable-hint.ts (77%)
rename src/main/ipc/{ => runtime-environments}/runtime-environment-usage-record.ts (92%)
rename src/main/ipc/{ => runtime-environments}/runtime-environments-call-routing.test.ts (98%)
rename src/main/ipc/{ => runtime-environments}/runtime-environments-capability-cache.test.ts (99%)
rename src/main/ipc/{ => runtime-environments}/runtime-environments-ipc-test-harness.ts (90%)
rename src/main/ipc/{ => runtime-environments}/runtime-environments-pairing.test.ts (97%)
rename src/main/ipc/{ => runtime-environments}/runtime-environments-repair.test.ts (96%)
rename src/main/ipc/{ => runtime-environments}/runtime-environments-status-diagnostics.test.ts (98%)
rename src/main/ipc/{ => runtime-environments}/runtime-environments-subscription-lifecycle.test.ts (99%)
rename src/main/ipc/{ => runtime-environments}/runtime-environments-subscription-routing.test.ts (98%)
rename src/main/ipc/{ => runtime-environments}/runtime-environments-subscription-teardown.test.ts (99%)
rename src/main/ipc/{ => runtime-environments}/runtime-environments.ts (92%)
rename src/main/ipc/{ => ssh}/ssh-app-shutdown.test.ts (86%)
rename src/main/ipc/{ => ssh}/ssh-browse.test.ts (100%)
rename src/main/ipc/{ => ssh}/ssh-browse.ts (80%)
rename src/main/ipc/{ => ssh}/ssh-connect-attempt-registry.ts (95%)
rename src/main/ipc/{ => ssh}/ssh-connect-decision-cancellation.test.ts (91%)
rename src/main/ipc/{ => ssh}/ssh-connect-flow.ts (92%)
rename src/main/ipc/{ => ssh}/ssh-connection-handlers.ts (91%)
rename src/main/ipc/{ => ssh}/ssh-connection-state-callbacks.ts (83%)
rename src/main/ipc/{ => ssh}/ssh-credential-cancel.test.ts (90%)
rename src/main/ipc/{ => ssh}/ssh-disconnect-cancellation.test.ts (78%)
rename src/main/ipc/{ => ssh}/ssh-handler-reregistration.test.ts (90%)
rename src/main/ipc/{ => ssh}/ssh-host-launch-session-note.test.ts (95%)
rename src/main/ipc/{ => ssh}/ssh-host-launch-session-note.ts (89%)
rename src/main/ipc/{ => ssh}/ssh-host-server-connect.ts (92%)
rename src/main/ipc/{ => ssh}/ssh-host-server-decision-failure.test.ts (88%)
rename src/main/ipc/{ => ssh}/ssh-host-server-on-connect-wiring.test.ts (84%)
rename src/main/ipc/{ => ssh}/ssh-host-server-on-connect-wiring.ts (75%)
rename src/main/ipc/{ => ssh}/ssh-host-sleep-reconnect.test.ts (95%)
rename src/main/ipc/{ => ssh}/ssh-host-sleep-reconnect.ts (89%)
rename src/main/ipc/{ => ssh}/ssh-host-user-disconnect.test.ts (83%)
rename src/main/ipc/{ => ssh}/ssh-host-user-disconnect.ts (89%)
rename src/main/ipc/{ => ssh}/ssh-ipc-context.ts (80%)
rename src/main/ipc/{ => ssh}/ssh-ipc-mock-shapes.ts (100%)
rename src/main/ipc/{ => ssh}/ssh-ipc-module-mocks.ts (100%)
rename src/main/ipc/{ => ssh}/ssh-ipc-test-harness.ts (100%)
rename src/main/ipc/{ => ssh}/ssh-managed-host-port-forward-lifecycle.test.ts (92%)
rename src/main/ipc/{ => ssh}/ssh-managed-port-forward-restore.ts (94%)
rename src/main/ipc/{ => ssh}/ssh-managed-server-unlink-broadcast.test.ts (94%)
rename src/main/ipc/{ => ssh}/ssh-passphrase.test.ts (96%)
rename src/main/ipc/{ => ssh}/ssh-passphrase.ts (95%)
rename src/main/ipc/{ => ssh}/ssh-port-forward-handlers.ts (98%)
rename src/main/ipc/{ => ssh}/ssh-port-forward-persistence.ts (96%)
rename src/main/ipc/{ => ssh}/ssh-port-forward-restore.test.ts (94%)
rename src/main/ipc/{ => ssh}/ssh-renderer-broadcast.ts (86%)
rename src/main/ipc/{ => ssh}/ssh-session-teardown.ts (88%)
rename src/main/ipc/{ => ssh}/ssh-shutdown-drain.ts (98%)
rename src/main/ipc/{ => ssh}/ssh-sign-in-requirement.test.ts (90%)
rename src/main/ipc/{ => ssh}/ssh-sign-in-requirement.ts (85%)
rename src/main/ipc/{ => ssh}/ssh-state-broadcast-fanout.test.ts (85%)
rename src/main/ipc/{ => ssh}/ssh-target-crud-handlers-ownership.test.ts (96%)
rename src/main/ipc/{ => ssh}/ssh-target-crud-handlers.ts (91%)
rename src/main/ipc/{ => ssh}/ssh-target-lifecycle-queue.ts (100%)
rename src/main/ipc/{ => ssh}/ssh-target-registry.test.ts (93%)
rename src/main/ipc/{ => ssh}/ssh-test-connection-probe-registry.test.ts (100%)
rename src/main/ipc/{ => ssh}/ssh-test-probe-presence.test.ts (100%)
rename src/main/ipc/{ => ssh}/ssh.test.ts (89%)
rename src/main/ipc/{ => ssh}/ssh.ts (81%)
diff --git a/.github/workflows/ssh-windows-hosts.yml b/.github/workflows/ssh-windows-hosts.yml
index 3fcd66f8e10a..87c9f8378031 100644
--- a/.github/workflows/ssh-windows-hosts.yml
+++ b/.github/workflows/ssh-windows-hosts.yml
@@ -41,7 +41,7 @@ on:
- 'config/scripts/windows-process-tree-prepared-addon*.mjs'
- 'config/scripts/windows-process-tree-gyp-rebuild.mjs'
- 'src/shared/windows-breakaway-launch*.ts'
- - 'src/main/ipc/ssh-host-server-*.ts'
+ - 'src/main/ipc/ssh/ssh-host-server-*.ts'
# The deploy runs over this SSH transport.
- 'src/main/ssh/ssh-connection*'
- '!src/**/*.test.ts'
diff --git a/config/legacy-relay-compat-tags-baseline.txt b/config/legacy-relay-compat-tags-baseline.txt
index e926fc7a62b7..31905b926410 100644
--- a/config/legacy-relay-compat-tags-baseline.txt
+++ b/config/legacy-relay-compat-tags-baseline.txt
@@ -3,12 +3,12 @@
# Prune: pnpm check:legacy-relay-fence-ratchet --prune
config/scripts/pr-code-change-scope.mjs
config/scripts/pr-e2e-source-routing.mjs
-src/main/ipc/ssh-connect-flow.ts
-src/main/ipc/ssh-host-server-connect.ts
-src/main/ipc/ssh-host-server-on-connect-wiring.test.ts
-src/main/ipc/ssh-host-server-on-connect-wiring.ts
-src/main/ipc/ssh-session-teardown.ts
-src/main/ipc/ssh.ts
+src/main/ipc/ssh/ssh-connect-flow.ts
+src/main/ipc/ssh/ssh-host-server-connect.ts
+src/main/ipc/ssh/ssh-host-server-on-connect-wiring.test.ts
+src/main/ipc/ssh/ssh-host-server-on-connect-wiring.ts
+src/main/ipc/ssh/ssh-session-teardown.ts
+src/main/ipc/ssh/ssh.ts
src/main/runtime/orchestration/terminal-authority/verify-orchestration-compatibility-caller.ts
src/main/runtime/runtime-terminal-contracts.ts
src/main/ssh/orcad-migration-delta-move.test.ts
diff --git a/config/legacy-relay-importers-baseline.txt b/config/legacy-relay-importers-baseline.txt
index f6750a2f7b32..9e3a59417b01 100644
--- a/config/legacy-relay-importers-baseline.txt
+++ b/config/legacy-relay-importers-baseline.txt
@@ -1,14 +1,14 @@
# Files outside src/main/ssh/legacy-relay/ that import it. RATCHET: may only SHRINK.
# The relay retirement (2027-01-15) deletes the folder and edits exactly these files.
# Prune: pnpm check:legacy-relay-fence-ratchet --prune
-src/main/ipc/orcad-delta-move-handlers.ts
+src/main/ipc/runtime-environments/orcad-delta-move-handlers.ts
src/main/ipc/pty/runtime/kill-legacy-relay-bridged.test.ts
src/main/ipc/pty/runtime/kill.ts
-src/main/ipc/ssh-connect-decision-cancellation.test.ts
-src/main/ipc/ssh-connect-flow.ts
-src/main/ipc/ssh-host-server-on-connect-wiring.ts
-src/main/ipc/ssh-session-teardown.ts
-src/main/ipc/ssh.ts
+src/main/ipc/ssh/ssh-connect-decision-cancellation.test.ts
+src/main/ipc/ssh/ssh-connect-flow.ts
+src/main/ipc/ssh/ssh-host-server-on-connect-wiring.ts
+src/main/ipc/ssh/ssh-session-teardown.ts
+src/main/ipc/ssh/ssh.ts
src/main/ssh/orcad-migration-terminal-gate-host-wide.test.ts
src/main/managed-server/lifecycle/orcad-runtime-conversion-wiring.ts
tests/e2e/cross-version-wire/legacy-relay-bridge.unit.test.ts
diff --git a/config/main-layout-writer-baseline.txt b/config/main-layout-writer-baseline.txt
index 78eb307baba2..c7b9453dfcab 100644
--- a/config/main-layout-writer-baseline.txt
+++ b/config/main-layout-writer-baseline.txt
@@ -8,8 +8,8 @@
3 src/main/ipc/pty/pane/stable-owner.ts
1 src/main/ipc/pty/runtime/spawn-commit.ts
1 src/main/ipc/renderer-shutdown-checkpoint.ts
-1 src/main/ipc/runtime-environment-removal-cleanup.ts
-1 src/main/ipc/runtime-environment-session-reconcile.ts
+1 src/main/ipc/runtime-environments/runtime-environment-removal-cleanup.ts
+1 src/main/ipc/runtime-environments/runtime-environment-session-reconcile.ts
2 src/main/ipc/session.ts
6 src/main/orca-profiles/profile-project-session-state.ts
4 src/main/orca-profiles/profile-project-source-removal.ts
diff --git a/config/reliability-gates.jsonc b/config/reliability-gates.jsonc
index f343f7292f57..d3246ec8fe28 100644
--- a/config/reliability-gates.jsonc
+++ b/config/reliability-gates.jsonc
@@ -1396,20 +1396,20 @@
"invariant": "Failed bootstrap and authenticated reconnect converge without UI triggers; one connection owner publishes verified status, with no independent healthy status polling.",
"oracle": "Observe automatic recovery, retained runtime identity on failure, ordered publications, exact request counts, isolated viewer outages, and retirement on disconnect.",
"commands": [
- "ORCA_BACKGROUND_LAUNCH=1 pnpm test src/shared/runtime-host-status-owner.test.ts src/main/ipc/runtime-environment-status-recovery.test.ts src/main/ipc/runtime-environment-status-connection.test.ts src/renderer/src/store/slices/runtime-status-snapshot.test.ts src/renderer/src/web/web-runtime-status-owner.test.ts",
+ "ORCA_BACKGROUND_LAUNCH=1 pnpm test src/shared/runtime-host-status-owner.test.ts src/main/ipc/runtime-environments/runtime-environment-status-recovery.test.ts src/main/ipc/runtime-environments/runtime-environment-status-connection.test.ts src/renderer/src/store/slices/runtime-status-snapshot.test.ts src/renderer/src/web/web-runtime-status-owner.test.ts",
"ORCA_BACKGROUND_LAUNCH=1 ORCA_E2E_WEB_CLIENT=1 pnpm exec playwright test tests/e2e/runtime-host-status-recovery.spec.ts --config tests/playwright.config.ts --project electron-headless --workers=1"
],
"testFiles": [
"src/shared/runtime-host-status-owner.test.ts",
- "src/main/ipc/runtime-environment-status-recovery.test.ts",
- "src/main/ipc/runtime-environment-status-connection.test.ts",
+ "src/main/ipc/runtime-environments/runtime-environment-status-recovery.test.ts",
+ "src/main/ipc/runtime-environments/runtime-environment-status-connection.test.ts",
"src/renderer/src/store/slices/runtime-status-snapshot.test.ts",
"src/renderer/src/web/web-runtime-status-owner.test.ts",
"tests/e2e/runtime-host-status-recovery.spec.ts"
],
"assertionRefs": [
{
- "file": "src/main/ipc/runtime-environment-status-recovery.test.ts",
+ "file": "src/main/ipc/runtime-environments/runtime-environment-status-recovery.test.ts",
"assertions": [
"recovers a saved host after its first status check fails, without another UI request"
]
@@ -5282,16 +5282,16 @@
"invariant": "Every renderer-held runtime subscription receives exactly one terminal close event when its transport is retired, including when the retirement advanced the transport generation first, and a single failing teardown never abandons that environment's remaining subscriptions nor escapes into the transport that reported the close. Payload frames from a retired transport stay suppressed. A revealed remote terminal therefore reattaches over a live multiplex connection: its buffer restores, typed input reaches the host PTY, the echo paints without a tab flip, and the PTY converges on the revealed pane grid.",
"oracle": "The main IPC contract test subscribes terminal.multiplex through the real handler, disconnects the environment, and asserts the renderer received exactly one {type: close} subscription event. Two isolation tests subscribe a second stream to the same environment and make the first one fail -- in its socket close, and in the liveness probe inside notifyClosed -- then assert the disconnect does not throw, both transports closed, and every close the renderer could still receive was delivered. A third drives a host-initiated close through the transport callback, which is the one notifyClosed call site with no surrounding guard, with a renderer send that throws, and asserts it cannot escape into the WebSocket close handler. A fourth test asserts that after retirement a late response frame is not forwarded and a late transport close does not re-send. The paired-server journey runs three reveal scenarios against one real host and one real paired desktop client, and for each records buffer restore, host-side receipt of the typed marker through an out-of-band host sink file, live paint without a tab flip, and PTY-versus-pane grid convergence.",
"commands": [
- "pnpm exec vitest run --config config/vitest.config.ts src/main/ipc/runtime-environments-subscription-teardown.test.ts",
+ "pnpm exec vitest run --config config/vitest.config.ts src/main/ipc/runtime-environments/runtime-environments-subscription-teardown.test.ts",
"pnpm exec playwright test tests/e2e/paired-remote-terminal-parked-reveal-interactivity.spec.ts --config tests/playwright.config.ts --project electron-headless --workers=1"
],
"testFiles": [
- "src/main/ipc/runtime-environments-subscription-teardown.test.ts",
+ "src/main/ipc/runtime-environments/runtime-environments-subscription-teardown.test.ts",
"tests/e2e/paired-remote-terminal-parked-reveal-interactivity.spec.ts"
],
"assertionRefs": [
{
- "file": "src/main/ipc/runtime-environments-subscription-teardown.test.ts",
+ "file": "src/main/ipc/runtime-environments/runtime-environments-subscription-teardown.test.ts",
"assertions": [
"tells the renderer when retiring the transport closes its streaming subscription (the load-bearing repro; red with the fix reverted)",
"retires an environment's remaining subscriptions when one teardown throws (load-bearing; red without per-subscription isolation)",
@@ -5315,7 +5315,7 @@
"date": "2026-08-03",
"runner": "local",
"platform": "macos",
- "command": "pnpm exec vitest run --config config/vitest.config.ts src/main/ipc/runtime-environments-subscription-teardown.test.ts",
+ "command": "pnpm exec vitest run --config config/vitest.config.ts src/main/ipc/runtime-environments/runtime-environments-subscription-teardown.test.ts",
"result": "passed",
"durationSeconds": 0.81,
"summary": "53 runtime environment IPC tests passed, including the new close-delivery, both teardown-isolation, transport-path containment, and stale-payload-suppression contracts."
@@ -6347,7 +6347,7 @@
"pnpm exec vitest run --config config/vitest.config.ts src/shared/browser-client-host-protocol.test.ts src/main/browser/browser-client-host-attach-request.test.ts src/main/browser/browser-client-network-route-registry.test.ts src/main/browser/paired-runtime-browser-client-host-composition.test.ts src/main/browser/paired-runtime-browser-client-host.test.ts src/main/browser/paired-runtime-browser-client-host-reconnect.test.ts src/main/browser/paired-runtime-browser-host-lease.test.ts src/main/browser/paired-runtime-browser-host-lease-reconnect.test.ts src/main/browser/browser-host-lease-reconnect-delay.test.ts src/main/browser/paired-runtime-browser-network-route.test.ts src/main/runtime/browser-host/browser-host-command-ledger.test.ts src/main/runtime/browser-host/browser-host-command-ledger-capacity.test.ts src/main/runtime/browser-host/browser-host-lease-registry.test.ts src/main/runtime/rpc/methods/browser-client-host.test.ts",
"pnpm exec vitest run --config config/vitest.config.ts src/shared/browser-client-host-protocol.test.ts src/main/browser/browser-client-host-attach-request.test.ts src/main/browser/browser-client-network-route-registry.test.ts src/main/browser/paired-runtime-browser-client-host-composition.test.ts src/main/browser/paired-runtime-browser-client-host.test.ts src/main/browser/paired-runtime-browser-client-host-reconnect.test.ts src/main/browser/paired-runtime-browser-host-lease.test.ts src/main/browser/paired-runtime-browser-host-lease-reconnect.test.ts src/main/browser/browser-host-lease-reconnect-delay.test.ts src/main/browser/paired-runtime-browser-network-route.test.ts src/main/runtime/browser-host/browser-host-command-ledger.test.ts src/main/runtime/browser-host/browser-host-command-ledger-capacity.test.ts src/main/runtime/browser-host/browser-host-lease-registry.test.ts src/main/runtime/runtime-rpc-browser-host-admission.test.ts src/main/runtime/rpc/methods/browser-client-host.test.ts",
"pnpm exec vitest run --config config/vitest.config.ts src/shared/browser-client-host-protocol.test.ts src/main/browser/browser-client-host-attach-request.test.ts src/main/browser/browser-client-network-route-registry.test.ts src/main/browser/paired-runtime-browser-client-host-composition.test.ts src/main/browser/paired-runtime-browser-client-host.test.ts src/main/browser/paired-runtime-browser-client-host-reconnect.test.ts src/main/browser/paired-runtime-browser-host-lease.test.ts src/main/browser/paired-runtime-browser-host-lease-reconnect.test.ts src/main/browser/browser-host-lease-reconnect-delay.test.ts src/main/browser/paired-runtime-browser-network-route.test.ts src/main/runtime/browser-host/browser-host-command-ledger.test.ts src/main/runtime/browser-host/browser-host-command-ledger-capacity.test.ts src/main/runtime/browser-host/browser-host-lease-placement-retirement.test.ts src/main/runtime/browser-host/browser-host-lease-registry.test.ts src/main/runtime/runtime-rpc-browser-host-admission.test.ts src/main/runtime/rpc/methods/browser-client-host.test.ts",
- "pnpm exec vitest run --config config/vitest.config.ts src/main/browser/browser-client-network-route-registry.test.ts src/main/browser/paired-runtime-browser-client-host-composition.test.ts src/main/browser/paired-runtime-browser-client-host-registry.test.ts src/main/browser/paired-runtime-browser-client-host-runtime.test.ts src/main/browser/browser-client-page-command-executor.test.ts src/main/browser/browser-session-startup.test.ts src/main/ipc/runtime-environments-subscription-teardown.test.ts",
+ "pnpm exec vitest run --config config/vitest.config.ts src/main/browser/browser-client-network-route-registry.test.ts src/main/browser/paired-runtime-browser-client-host-composition.test.ts src/main/browser/paired-runtime-browser-client-host-registry.test.ts src/main/browser/paired-runtime-browser-client-host-runtime.test.ts src/main/browser/browser-client-page-command-executor.test.ts src/main/browser/browser-session-startup.test.ts src/main/ipc/runtime-environments/runtime-environments-subscription-teardown.test.ts",
"pnpm exec vitest run --config config/vitest.config.ts src/main/runtime/browser-host/browser-host-command-ledger.test.ts src/main/runtime/browser-host/browser-host-command-ledger-capacity.test.ts src/main/runtime/browser-host/browser-host-lease-registry.test.ts src/main/runtime/rpc/methods/browser-client-host.test.ts",
"pnpm exec vitest run --config config/vitest.config.ts src/main/runtime/browser-host/browser-host-lease-registry.test.ts src/main/browser/browser-network-deferred-socket.test.ts src/main/browser/browser-network-execution-route.test.ts src/main/browser/paired-runtime-browser-network-route.test.ts src/main/runtime/rpc/methods/browser-network-tunnel.test.ts src/main/browser/ssh-browser-network-execution-route.test.ts src/main/browser/system-ssh-socks-client-socket.test.ts src/main/ssh/system-transport/system-ssh-dynamic-forward-process.test.ts src/shared/browser-client-host-protocol.test.ts src/main/ssh/system-transport/system-ssh-forward-process.test.ts src/main/ssh/system-transport/system-ssh-operations.test.ts src/main/ssh/port-forwarding/ssh-port-forward.test.ts",
"ORCA_RUN_DOCKER_SSH_BROWSER_E2E=1 pnpm exec vitest run --config config/vitest.config.ts tests/e2e/ssh-browser-network-execution-route.docker.unit.test.ts",
@@ -6393,7 +6393,7 @@
"src/main/browser/browser-client-page-inventory.test.ts",
"src/main/browser/browser-route-prepared-page-rekey.test.ts",
"src/main/browser/browser-session-startup.test.ts",
- "src/main/ipc/runtime-environments-subscription-teardown.test.ts",
+ "src/main/ipc/runtime-environments/runtime-environments-subscription-teardown.test.ts",
"src/main/browser/browser-client-host-command-dispatcher.test.ts",
"src/main/browser/browser-network-tunnel-session.test.ts",
"src/main/browser/browser-network-tunnel-session-aggregate-memory.test.ts",
@@ -7616,7 +7616,7 @@
"commands": [
"pnpm exec playwright test tests/e2e/paired-client-hosted-browser.spec.ts --config tests/playwright.config.ts --project electron-headless --workers=1",
"pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/runtime/web-runtime-session-browser-client-placement.test.ts src/renderer/src/runtime/web-runtime-session-browser-create-failure.test.ts src/main/runtime/orca-runtime-browser-client-hosted.test.ts src/main/runtime/runtime-browser-client-page-creation.test.ts src/main/runtime/browser-host/browser-host-page-reconciliation-orchestration.test.ts src/main/runtime/browser-host/browser-host-command-ledger.test.ts",
- "pnpm exec vitest run --config config/vitest.config.ts src/shared/browser-client-host-protocol.test.ts src/shared/remote-runtime-client.test.ts src/main/runtime/browser-host/browser-host-capability-selection.test.ts src/main/runtime/rpc/methods/browser-tab-create-schema.test.ts src/main/ipc/runtime-environment-browser-client-host-handler.test.ts",
+ "pnpm exec vitest run --config config/vitest.config.ts src/shared/browser-client-host-protocol.test.ts src/shared/remote-runtime-client.test.ts src/main/runtime/browser-host/browser-host-capability-selection.test.ts src/main/runtime/rpc/methods/browser-tab-create-schema.test.ts src/main/ipc/runtime-environments/runtime-environment-browser-client-host-handler.test.ts",
"pnpm exec vitest run --config config/vitest.config.ts tests/e2e/cross-version-wire/cross-version-browser-placement.unit.test.ts",
"SKIP_BUILD=1 ORCA_CROSS_VERSION_PACKAGED_EXECUTABLE=/Applications/Orca.app/Contents/MacOS/Orca pnpm exec playwright test tests/e2e/packaged-mixed-version-browser-placement.spec.ts --config tests/playwright.config.ts --project electron-headless --workers=1",
"pnpm exec vitest run --config config/vitest.config.ts src/main/runtime/browser-network-tunnel-paired-runtime.integration.test.ts src/main/browser/paired-runtime-browser-network-route.test.ts src/main/browser/browser-network-execution-route.test.ts src/main/browser/wsl-browser-network-execution-route.test.ts src/main/browser/wsl-browser-network-relay-launch.test.ts src/main/runtime/runtime-browser-network-execution-host.test.ts",
@@ -7637,7 +7637,7 @@
"src/shared/remote-runtime-client.test.ts",
"src/main/runtime/browser-host/browser-host-capability-selection.test.ts",
"src/main/runtime/rpc/methods/browser-tab-create-schema.test.ts",
- "src/main/ipc/runtime-environment-browser-client-host-handler.test.ts",
+ "src/main/ipc/runtime-environments/runtime-environment-browser-client-host-handler.test.ts",
"tests/e2e/cross-version-wire/cross-version-browser-placement.unit.test.ts",
"tests/e2e/packaged-mixed-version-browser-placement.spec.ts",
"src/main/runtime/browser-network-tunnel-paired-runtime.integration.test.ts",
@@ -10456,7 +10456,7 @@
"invariant": "Only an explicit user change in Settings > Remote Orca Servers > Advanced > Active Server may mutate activeRuntimeEnvironmentId. Connecting, pairing, disconnecting, selecting or revealing a workspace or terminal, browser/mobile handoff, remote navigation, and reconnect must use transient or target-owner routing and must never rewrite the durable preference. Every Add Project selected host must satisfy canSelectAddRepoHost; paired web has no local filesystem fallback, so no valid host means Browse, Clone, and Create remain disabled. Every operation stays on the host selected when it began, even if preference or catalog state changes. Generic settings mutation cannot bypass the dedicated preference IPC.",
"oracle": "Start with Active Server=Local desktop, connect and navigate Windows 2, then reveal a local terminal and assert it succeeds while the persisted preference remains local before and after restart. Repeat transient routing and selected-runtime Add Project operations with exact-ID host decoys and completion reordering. Separately pair the real web client to an isolated headed host, then make its sole still-listed runtime compatibility-blocked and unavailable. Require a null authoritative selection, a disabled host option, and disabled Browse, Clone, and Create actions with no local fallback. Repeat against headless serve. Run the byte-identical selector/action contract on latest main, candidate, and candidate with the eligibility seam disabled.",
"commands": [
- "pnpm exec vitest run --config config/vitest.config.ts src/main/ipc/settings.test.ts src/main/ipc/runtime-environments-pairing.test.ts src/renderer/src/store/slices/settings.test.ts src/renderer/src/store/slices/browser.test.ts src/renderer/src/components/settings/browser-session-host-selection.test.ts src/renderer/src/components/settings/RuntimeEnvironmentsPane.test.ts src/renderer/src/components/status-bar/SshStatusSegment.test.ts src/renderer/src/components/sidebar/use-add-repo-host-selection.test.ts src/renderer/src/hooks/useIpcEvents-terminal-create-surfacing.test.ts src/renderer/src/web/web-preload-api-runtime-environment.test.ts --maxWorkers=1",
+ "pnpm exec vitest run --config config/vitest.config.ts src/main/ipc/settings.test.ts src/main/ipc/runtime-environments/runtime-environments-pairing.test.ts src/renderer/src/store/slices/settings.test.ts src/renderer/src/store/slices/browser.test.ts src/renderer/src/components/settings/browser-session-host-selection.test.ts src/renderer/src/components/settings/RuntimeEnvironmentsPane.test.ts src/renderer/src/components/status-bar/SshStatusSegment.test.ts src/renderer/src/components/sidebar/use-add-repo-host-selection.test.ts src/renderer/src/hooks/useIpcEvents-terminal-create-surfacing.test.ts src/renderer/src/web/web-preload-api-runtime-environment.test.ts --maxWorkers=1",
"pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/sidebar/AddProjectFromFolderDialog.test.tsx src/renderer/src/components/sidebar/NonGitFolderDialog.test.tsx src/renderer/src/components/sidebar/AddRepoDialog.default-checkout.test.ts src/renderer/src/components/sidebar/AddRepoSteps.default-checkout.test.ts src/renderer/src/components/sidebar/project-added-default-checkout.test.ts src/renderer/src/components/sidebar/useAddRepoLocalFolderFlow.test.ts src/renderer/src/components/sidebar/useAddRepoNestedImportFlow.test.ts src/renderer/src/components/sidebar/useAddRepoServerPathFlow.test.ts src/renderer/src/components/sidebar/useAddRepoCloneFlow.test.ts src/renderer/src/components/sidebar/useCreateRepo.default-checkout.test.ts src/renderer/src/components/sidebar/worktree-list/listing/host-filtering.test.ts src/renderer/src/lib/resolved-worktree-execution-host.test.ts src/renderer/src/lib/worktree-runtime-owner.test.ts src/renderer/src/store/selectors.test.ts src/renderer/src/store/slices/repos-catalog-reconciliation.test.ts src/renderer/src/store/slices/repos-project-groups.test.ts src/renderer/src/store/slices/repos-selected-owner-routing.test.ts src/renderer/src/store/slices/selected-host-active-workspace-identity.test.ts src/renderer/src/store/slices/worktrees-fetch-owner-routing.test.ts --maxWorkers=1",
"pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/sidebar/use-add-repo-host-selection.test.ts src/renderer/src/components/sidebar/add-repo-browse-authority.test.ts src/renderer/src/components/sidebar/AddRepoDialogStepContent.test.tsx src/renderer/src/components/sidebar/AddRepoStartSteps.test.tsx src/renderer/src/components/sidebar/useAddRepoServerPathFlow.test.ts src/renderer/src/runtime/runtime-server-directory-browser.test.ts src/renderer/src/store/slices/repos-paired-runtime-add.test.ts --maxWorkers=1",
"pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/sidebar/AddProjectFromFolderDialog.test.tsx src/renderer/src/components/sidebar/NonGitFolderDialog.test.tsx src/renderer/src/components/sidebar/AddRepoDialog.default-checkout.test.ts src/renderer/src/components/sidebar/AddRepoSteps.default-checkout.test.ts src/renderer/src/components/sidebar/project-added-default-checkout.test.ts src/renderer/src/components/sidebar/useAddRepoLocalFolderFlow.test.ts src/renderer/src/components/sidebar/useAddRepoNestedImportFlow.test.ts src/renderer/src/components/sidebar/useAddRepoServerPathFlow.test.ts src/renderer/src/components/sidebar/useAddRepoCloneFlow.test.ts src/renderer/src/components/sidebar/useCreateRepo.default-checkout.test.ts src/renderer/src/components/sidebar/worktree-list/listing/host-filtering.test.ts src/renderer/src/lib/resolved-worktree-execution-host.test.ts src/renderer/src/lib/worktree-runtime-owner.test.ts src/renderer/src/store/selectors.test.ts src/renderer/src/store/slices/repos-catalog-reconciliation.test.ts src/renderer/src/store/slices/repos-project-groups.test.ts src/renderer/src/store/slices/repos-selected-owner-routing.test.ts src/renderer/src/store/slices/selected-host-active-workspace-identity.test.ts src/renderer/src/store/slices/worktrees-fetch-owner-routing.test.ts src/renderer/src/runtime/web-runtime-session.test.ts --maxWorkers=1",
@@ -10467,7 +10467,7 @@
],
"testFiles": [
"src/main/ipc/settings.test.ts",
- "src/main/ipc/runtime-environments-pairing.test.ts",
+ "src/main/ipc/runtime-environments/runtime-environments-pairing.test.ts",
"src/renderer/src/store/slices/settings.test.ts",
"src/renderer/src/store/slices/browser.test.ts",
"src/renderer/src/components/settings/browser-session-host-selection.test.ts",
@@ -10673,7 +10673,7 @@
"date": "2026-07-22",
"runner": "local",
"platform": "macos",
- "command": "pnpm exec vitest run --config config/vitest.config.ts src/main/ipc/settings.test.ts src/main/ipc/runtime-environments-pairing.test.ts src/renderer/src/store/slices/settings.test.ts src/renderer/src/store/slices/browser.test.ts src/renderer/src/components/settings/browser-session-host-selection.test.ts src/renderer/src/components/settings/RuntimeEnvironmentsPane.test.ts src/renderer/src/components/status-bar/SshStatusSegment.test.ts src/renderer/src/components/sidebar/use-add-repo-host-selection.test.ts src/renderer/src/hooks/useIpcEvents-terminal-create-surfacing.test.ts src/renderer/src/web/web-preload-api-runtime-environment.test.ts --maxWorkers=1",
+ "command": "pnpm exec vitest run --config config/vitest.config.ts src/main/ipc/settings.test.ts src/main/ipc/runtime-environments/runtime-environments-pairing.test.ts src/renderer/src/store/slices/settings.test.ts src/renderer/src/store/slices/browser.test.ts src/renderer/src/components/settings/browser-session-host-selection.test.ts src/renderer/src/components/settings/RuntimeEnvironmentsPane.test.ts src/renderer/src/components/status-bar/SshStatusSegment.test.ts src/renderer/src/components/sidebar/use-add-repo-host-selection.test.ts src/renderer/src/hooks/useIpcEvents-terminal-create-surfacing.test.ts src/renderer/src/web/web-preload-api-runtime-environment.test.ts --maxWorkers=1",
"result": "passed",
"durationSeconds": 6.55,
"summary": "Ten files and 282 tests passed, including the composed Local -> Windows 2 navigation -> local reveal -> restart regression, dedicated-only preference persistence, removed transient-host fallback, multi-client browser routing, late host-operation suppression, and web pairing/preference separation."
@@ -11733,7 +11733,7 @@
"ORCA_BACKGROUND_LAUNCH=1 pnpm exec playwright test tests/e2e/paired-client-first-terminal-unopened-host-worktree.spec.ts --config tests/playwright.config.ts --project electron-headless --workers=1",
"pnpm exec vitest run --config config/vitest.config.ts src/main/runtime/mobile-session-tabs-agent-status-heartbeat.test.ts src/main/runtime/orca-runtime-hook-agent-status-projection.test.ts tests/e2e/session-tabs-decorative-title-fanout.unit.test.ts tests/e2e/session-tabs-rich-status-boundaries.unit.test.ts --maxWorkers=1",
"pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/terminal-pane/terminal-cold-park-pre-gate-loop.react185.test.tsx src/renderer/src/components/terminal-pane/use-parked-terminal-watcher-synchronization.react185.test.tsx src/renderer/src/components/terminal-pane/terminal-cold-park-verdict-loop.test.tsx src/renderer/src/components/terminal-pane/use-terminal-tab-cold-parking.test.ts --maxWorkers=1",
- "pnpm exec vitest run --config config/vitest.config.ts src/main/runtime/orca-runtime.test.ts src/main/runtime/rpc/terminal-multiplex-initial-snapshot-buffering.test.ts src/main/runtime/rpc/terminal-multiplex-snapshot-serialization.test.ts src/main/runtime/rpc/terminal-multiplex-pty-wait-capacity.test.ts src/main/runtime/rpc/terminal-subscribe-buffer.test.ts src/renderer/src/components/terminal-pane/parked-terminal-byte-watcher.test.ts src/renderer/src/components/terminal-pane/terminal-side-effect-facts-handler.test.ts src/renderer/src/components/terminal-pane/pty-connection-hidden-replay.test.ts src/renderer/src/components/terminal-pane/pty-connection-visibility-and-exit.test.ts src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-activation-inventory-fallback.test.ts src/renderer/src/components/terminal-pane/terminal-hidden-view-parking.test.ts src/renderer/src/components/terminal-pane/terminal-hidden-worktree-retention.test.ts src/renderer/src/components/terminal-pane/terminal-parked-tab-watchers.test.ts src/renderer/src/components/terminal-pane/terminal-parked-watcher-reconciliation.test.ts src/renderer/src/components/terminal-pane/terminal-parked-watcher-partial-reconciliation.test.ts src/renderer/src/components/terminal-pane/terminal-parking-e2e-overrides.test.ts src/renderer/src/runtime/remote-runtime-terminal-stall-recovery.test.ts src/renderer/src/runtime/runtime-client-events.test.ts src/renderer/src/web/web-preload-api-runtime-environment.test.ts src/main/ipc/runtime-environments-pairing.test.ts",
+ "pnpm exec vitest run --config config/vitest.config.ts src/main/runtime/orca-runtime.test.ts src/main/runtime/rpc/terminal-multiplex-initial-snapshot-buffering.test.ts src/main/runtime/rpc/terminal-multiplex-snapshot-serialization.test.ts src/main/runtime/rpc/terminal-multiplex-pty-wait-capacity.test.ts src/main/runtime/rpc/terminal-subscribe-buffer.test.ts src/renderer/src/components/terminal-pane/parked-terminal-byte-watcher.test.ts src/renderer/src/components/terminal-pane/terminal-side-effect-facts-handler.test.ts src/renderer/src/components/terminal-pane/pty-connection-hidden-replay.test.ts src/renderer/src/components/terminal-pane/pty-connection-visibility-and-exit.test.ts src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-activation-inventory-fallback.test.ts src/renderer/src/components/terminal-pane/terminal-hidden-view-parking.test.ts src/renderer/src/components/terminal-pane/terminal-hidden-worktree-retention.test.ts src/renderer/src/components/terminal-pane/terminal-parked-tab-watchers.test.ts src/renderer/src/components/terminal-pane/terminal-parked-watcher-reconciliation.test.ts src/renderer/src/components/terminal-pane/terminal-parked-watcher-partial-reconciliation.test.ts src/renderer/src/components/terminal-pane/terminal-parking-e2e-overrides.test.ts src/renderer/src/runtime/remote-runtime-terminal-stall-recovery.test.ts src/renderer/src/runtime/runtime-client-events.test.ts src/renderer/src/web/web-preload-api-runtime-environment.test.ts src/main/ipc/runtime-environments/runtime-environments-pairing.test.ts",
"pnpm exec vitest run --config config/vitest.config.ts src/main/runtime/terminal-subscriber-driven-daemon-attach.test.ts",
"pnpm exec vitest run --config config/vitest.config.ts src/main/runtime/session-tabs-inventory-publication.test.ts src/main/runtime/rpc/methods/session-tabs-inventory-census-race.test.ts src/main/runtime/rpc/methods/session-tabs.test.ts src/renderer/src/runtime/host-session-mirror-empty-inventory-settle.test.ts src/main/daemon/terminal-host-agent-session.test.ts tests/e2e/session-tabs-empty-inventory-daemon-oracle.unit.test.ts --maxWorkers=1",
"pnpm exec vitest run --config config/vitest.config.ts src/shared/remote-runtime-shared-control-connection.test.ts",
@@ -11763,7 +11763,7 @@
"src/renderer/src/components/terminal-pane/use-terminal-tab-cold-parking.test.ts",
"src/main/runtime/orca-runtime.test.ts",
"src/renderer/src/web/web-preload-api-runtime-environment.test.ts",
- "src/main/ipc/runtime-environments-pairing.test.ts",
+ "src/main/ipc/runtime-environments/runtime-environments-pairing.test.ts",
"src/main/runtime/rpc/terminal-multiplex-initial-snapshot-buffering.test.ts",
"src/main/runtime/rpc/terminal-multiplex-snapshot-serialization.test.ts",
"src/main/runtime/rpc/terminal-multiplex-pty-wait-capacity.test.ts",
@@ -12128,11 +12128,11 @@
"date": "2026-08-02",
"runner": "local",
"platform": "macos",
- "command": "pnpm exec vitest run --config config/vitest.config.ts src/main/runtime/orca-runtime.test.ts src/main/runtime/rpc/terminal-multiplex-initial-snapshot-buffering.test.ts src/main/runtime/rpc/terminal-multiplex-snapshot-serialization.test.ts src/main/runtime/rpc/terminal-multiplex-pty-wait-capacity.test.ts src/main/runtime/rpc/terminal-subscribe-buffer.test.ts src/renderer/src/components/terminal-pane/parked-terminal-byte-watcher.test.ts src/renderer/src/components/terminal-pane/terminal-side-effect-facts-handler.test.ts src/renderer/src/components/terminal-pane/pty-connection-hidden-output-restore.test.ts src/renderer/src/components/terminal-pane/pty-connection-park-reveal-model-snapshot.test.ts src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-activation-inventory-fallback.test.ts src/renderer/src/components/terminal-pane/terminal-hidden-view-parking.test.ts src/renderer/src/components/terminal-pane/terminal-hidden-worktree-retention.test.ts src/renderer/src/components/terminal-pane/terminal-parked-tab-watchers.test.ts src/renderer/src/components/terminal-pane/terminal-parked-watcher-reconciliation.test.ts src/renderer/src/components/terminal-pane/terminal-parked-watcher-partial-reconciliation.test.ts src/renderer/src/components/terminal-pane/terminal-parking-e2e-overrides.test.ts src/renderer/src/runtime/remote-runtime-terminal-stall-recovery.test.ts src/renderer/src/runtime/runtime-client-events.test.ts src/renderer/src/web/web-preload-api-runtime-environment.test.ts src/main/ipc/runtime-environments-pairing.test.ts",
+ "command": "pnpm exec vitest run --config config/vitest.config.ts src/main/runtime/orca-runtime.test.ts src/main/runtime/rpc/terminal-multiplex-initial-snapshot-buffering.test.ts src/main/runtime/rpc/terminal-multiplex-snapshot-serialization.test.ts src/main/runtime/rpc/terminal-multiplex-pty-wait-capacity.test.ts src/main/runtime/rpc/terminal-subscribe-buffer.test.ts src/renderer/src/components/terminal-pane/parked-terminal-byte-watcher.test.ts src/renderer/src/components/terminal-pane/terminal-side-effect-facts-handler.test.ts src/renderer/src/components/terminal-pane/pty-connection-hidden-output-restore.test.ts src/renderer/src/components/terminal-pane/pty-connection-park-reveal-model-snapshot.test.ts src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-activation-inventory-fallback.test.ts src/renderer/src/components/terminal-pane/terminal-hidden-view-parking.test.ts src/renderer/src/components/terminal-pane/terminal-hidden-worktree-retention.test.ts src/renderer/src/components/terminal-pane/terminal-parked-tab-watchers.test.ts src/renderer/src/components/terminal-pane/terminal-parked-watcher-reconciliation.test.ts src/renderer/src/components/terminal-pane/terminal-parked-watcher-partial-reconciliation.test.ts src/renderer/src/components/terminal-pane/terminal-parking-e2e-overrides.test.ts src/renderer/src/runtime/remote-runtime-terminal-stall-recovery.test.ts src/renderer/src/runtime/runtime-client-events.test.ts src/renderer/src/web/web-preload-api-runtime-environment.test.ts src/main/ipc/runtime-environments/runtime-environments-pairing.test.ts",
"result": "passed",
"durationSeconds": 18.71,
"summary": "Seventeen focused files passed 2,044 tests with one existing skip, including the 64-PTY decorative-title bound, per-client late subscription, semantic-fact preservation, and the true no-output-pause legacy client shape.",
- "currentCommand": "pnpm exec vitest run --config config/vitest.config.ts src/main/runtime/orca-runtime.test.ts src/main/runtime/rpc/terminal-multiplex-initial-snapshot-buffering.test.ts src/main/runtime/rpc/terminal-multiplex-snapshot-serialization.test.ts src/main/runtime/rpc/terminal-multiplex-pty-wait-capacity.test.ts src/main/runtime/rpc/terminal-subscribe-buffer.test.ts src/renderer/src/components/terminal-pane/parked-terminal-byte-watcher.test.ts src/renderer/src/components/terminal-pane/terminal-side-effect-facts-handler.test.ts src/renderer/src/components/terminal-pane/pty-connection-hidden-replay.test.ts src/renderer/src/components/terminal-pane/pty-connection-visibility-and-exit.test.ts src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-activation-inventory-fallback.test.ts src/renderer/src/components/terminal-pane/terminal-hidden-view-parking.test.ts src/renderer/src/components/terminal-pane/terminal-hidden-worktree-retention.test.ts src/renderer/src/components/terminal-pane/terminal-parked-tab-watchers.test.ts src/renderer/src/components/terminal-pane/terminal-parked-watcher-reconciliation.test.ts src/renderer/src/components/terminal-pane/terminal-parked-watcher-partial-reconciliation.test.ts src/renderer/src/components/terminal-pane/terminal-parking-e2e-overrides.test.ts src/renderer/src/runtime/remote-runtime-terminal-stall-recovery.test.ts src/renderer/src/runtime/runtime-client-events.test.ts src/renderer/src/web/web-preload-api-runtime-environment.test.ts src/main/ipc/runtime-environments-pairing.test.ts"
+ "currentCommand": "pnpm exec vitest run --config config/vitest.config.ts src/main/runtime/orca-runtime.test.ts src/main/runtime/rpc/terminal-multiplex-initial-snapshot-buffering.test.ts src/main/runtime/rpc/terminal-multiplex-snapshot-serialization.test.ts src/main/runtime/rpc/terminal-multiplex-pty-wait-capacity.test.ts src/main/runtime/rpc/terminal-subscribe-buffer.test.ts src/renderer/src/components/terminal-pane/parked-terminal-byte-watcher.test.ts src/renderer/src/components/terminal-pane/terminal-side-effect-facts-handler.test.ts src/renderer/src/components/terminal-pane/pty-connection-hidden-replay.test.ts src/renderer/src/components/terminal-pane/pty-connection-visibility-and-exit.test.ts src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-activation-inventory-fallback.test.ts src/renderer/src/components/terminal-pane/terminal-hidden-view-parking.test.ts src/renderer/src/components/terminal-pane/terminal-hidden-worktree-retention.test.ts src/renderer/src/components/terminal-pane/terminal-parked-tab-watchers.test.ts src/renderer/src/components/terminal-pane/terminal-parked-watcher-reconciliation.test.ts src/renderer/src/components/terminal-pane/terminal-parked-watcher-partial-reconciliation.test.ts src/renderer/src/components/terminal-pane/terminal-parking-e2e-overrides.test.ts src/renderer/src/runtime/remote-runtime-terminal-stall-recovery.test.ts src/renderer/src/runtime/runtime-client-events.test.ts src/renderer/src/web/web-preload-api-runtime-environment.test.ts src/main/ipc/runtime-environments/runtime-environments-pairing.test.ts"
},
{
"date": "2026-08-02",
@@ -12165,11 +12165,11 @@
"date": "2026-07-29",
"runner": "local",
"platform": "macos",
- "command": "pnpm exec vitest run --config config/vitest.config.ts src/main/runtime/orca-runtime.test.ts src/main/runtime/rpc/terminal-multiplex-initial-snapshot-buffering.test.ts src/main/runtime/rpc/terminal-multiplex-snapshot-serialization.test.ts src/main/runtime/rpc/terminal-multiplex-pty-wait-capacity.test.ts src/main/runtime/rpc/terminal-subscribe-buffer.test.ts src/renderer/src/components/terminal-pane/parked-terminal-byte-watcher.test.ts src/renderer/src/components/terminal-pane/terminal-side-effect-facts-handler.test.ts src/renderer/src/components/terminal-pane/pty-connection-hidden-output-restore.test.ts src/renderer/src/components/terminal-pane/pty-connection-park-reveal-model-snapshot.test.ts src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-activation-inventory-fallback.test.ts src/renderer/src/components/terminal-pane/terminal-hidden-view-parking.test.ts src/renderer/src/components/terminal-pane/terminal-hidden-worktree-retention.test.ts src/renderer/src/components/terminal-pane/terminal-parked-tab-watchers.test.ts src/renderer/src/components/terminal-pane/terminal-parked-watcher-reconciliation.test.ts src/renderer/src/components/terminal-pane/terminal-parked-watcher-partial-reconciliation.test.ts src/renderer/src/components/terminal-pane/terminal-parking-e2e-overrides.test.ts src/renderer/src/runtime/remote-runtime-terminal-stall-recovery.test.ts src/renderer/src/runtime/runtime-client-events.test.ts src/renderer/src/web/web-preload-api-runtime-environment.test.ts src/main/ipc/runtime-environments-pairing.test.ts",
+ "command": "pnpm exec vitest run --config config/vitest.config.ts src/main/runtime/orca-runtime.test.ts src/main/runtime/rpc/terminal-multiplex-initial-snapshot-buffering.test.ts src/main/runtime/rpc/terminal-multiplex-snapshot-serialization.test.ts src/main/runtime/rpc/terminal-multiplex-pty-wait-capacity.test.ts src/main/runtime/rpc/terminal-subscribe-buffer.test.ts src/renderer/src/components/terminal-pane/parked-terminal-byte-watcher.test.ts src/renderer/src/components/terminal-pane/terminal-side-effect-facts-handler.test.ts src/renderer/src/components/terminal-pane/pty-connection-hidden-output-restore.test.ts src/renderer/src/components/terminal-pane/pty-connection-park-reveal-model-snapshot.test.ts src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-activation-inventory-fallback.test.ts src/renderer/src/components/terminal-pane/terminal-hidden-view-parking.test.ts src/renderer/src/components/terminal-pane/terminal-hidden-worktree-retention.test.ts src/renderer/src/components/terminal-pane/terminal-parked-tab-watchers.test.ts src/renderer/src/components/terminal-pane/terminal-parked-watcher-reconciliation.test.ts src/renderer/src/components/terminal-pane/terminal-parked-watcher-partial-reconciliation.test.ts src/renderer/src/components/terminal-pane/terminal-parking-e2e-overrides.test.ts src/renderer/src/runtime/remote-runtime-terminal-stall-recovery.test.ts src/renderer/src/runtime/runtime-client-events.test.ts src/renderer/src/web/web-preload-api-runtime-environment.test.ts src/main/ipc/runtime-environments/runtime-environments-pairing.test.ts",
"result": "passed",
"durationSeconds": 19.54,
"summary": "Seventeen focused files passed 1,938 tests with one existing skip, including 128 active streams, retryable rejection at 129, released-slot snapshot recovery, bounded liveness probes, and balanced subscriber cleanup.",
- "currentCommand": "pnpm exec vitest run --config config/vitest.config.ts src/main/runtime/orca-runtime.test.ts src/main/runtime/rpc/terminal-multiplex-initial-snapshot-buffering.test.ts src/main/runtime/rpc/terminal-multiplex-snapshot-serialization.test.ts src/main/runtime/rpc/terminal-multiplex-pty-wait-capacity.test.ts src/main/runtime/rpc/terminal-subscribe-buffer.test.ts src/renderer/src/components/terminal-pane/parked-terminal-byte-watcher.test.ts src/renderer/src/components/terminal-pane/terminal-side-effect-facts-handler.test.ts src/renderer/src/components/terminal-pane/pty-connection-hidden-replay.test.ts src/renderer/src/components/terminal-pane/pty-connection-visibility-and-exit.test.ts src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-activation-inventory-fallback.test.ts src/renderer/src/components/terminal-pane/terminal-hidden-view-parking.test.ts src/renderer/src/components/terminal-pane/terminal-hidden-worktree-retention.test.ts src/renderer/src/components/terminal-pane/terminal-parked-tab-watchers.test.ts src/renderer/src/components/terminal-pane/terminal-parked-watcher-reconciliation.test.ts src/renderer/src/components/terminal-pane/terminal-parked-watcher-partial-reconciliation.test.ts src/renderer/src/components/terminal-pane/terminal-parking-e2e-overrides.test.ts src/renderer/src/runtime/remote-runtime-terminal-stall-recovery.test.ts src/renderer/src/runtime/runtime-client-events.test.ts src/renderer/src/web/web-preload-api-runtime-environment.test.ts src/main/ipc/runtime-environments-pairing.test.ts"
+ "currentCommand": "pnpm exec vitest run --config config/vitest.config.ts src/main/runtime/orca-runtime.test.ts src/main/runtime/rpc/terminal-multiplex-initial-snapshot-buffering.test.ts src/main/runtime/rpc/terminal-multiplex-snapshot-serialization.test.ts src/main/runtime/rpc/terminal-multiplex-pty-wait-capacity.test.ts src/main/runtime/rpc/terminal-subscribe-buffer.test.ts src/renderer/src/components/terminal-pane/parked-terminal-byte-watcher.test.ts src/renderer/src/components/terminal-pane/terminal-side-effect-facts-handler.test.ts src/renderer/src/components/terminal-pane/pty-connection-hidden-replay.test.ts src/renderer/src/components/terminal-pane/pty-connection-visibility-and-exit.test.ts src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-activation-inventory-fallback.test.ts src/renderer/src/components/terminal-pane/terminal-hidden-view-parking.test.ts src/renderer/src/components/terminal-pane/terminal-hidden-worktree-retention.test.ts src/renderer/src/components/terminal-pane/terminal-parked-tab-watchers.test.ts src/renderer/src/components/terminal-pane/terminal-parked-watcher-reconciliation.test.ts src/renderer/src/components/terminal-pane/terminal-parked-watcher-partial-reconciliation.test.ts src/renderer/src/components/terminal-pane/terminal-parking-e2e-overrides.test.ts src/renderer/src/runtime/remote-runtime-terminal-stall-recovery.test.ts src/renderer/src/runtime/runtime-client-events.test.ts src/renderer/src/web/web-preload-api-runtime-environment.test.ts src/main/ipc/runtime-environments/runtime-environments-pairing.test.ts"
},
{
"date": "2026-07-29",
@@ -13108,7 +13108,7 @@
"pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/terminal-pane/terminal-error-accumulation.test.ts src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-attach-subscription.test.ts --reporter=dot",
"pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-attach-subscription.test.ts src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-host-surface-replacement.test.ts src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-stream-reconnect.test.ts src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-expired-pane-recovery.test.ts src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-create-outcome-recovery.test.ts src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-create-handoff.test.ts src/renderer/src/components/terminal-pane/remote-runtime-pty-recovery-state.test.ts src/renderer/src/components/terminal-pane/TerminalRemoteRuntimeReconnectBanner.test.tsx src/renderer/src/components/terminal-pane/terminal-remote-runtime-recovery-ui-state.test.ts src/shared/remote-runtime-socket-liveness.test.ts src/shared/remote-runtime-shared-control-connection.test.ts src/shared/remote-runtime-shared-control-socket-generation.test.ts src/shared/remote-runtime-client-error-classification.test.ts src/main/runtime/rpc/remote-runtime-server-heartbeat.test.ts src/main/runtime/rpc/methods/terminal-create-idempotency.test.ts src/main/runtime/orca-runtime-terminal-create-idempotency.test.ts",
"pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/hooks/ipc-events/direct-ssh-connect-reply-routing.test.ts src/renderer/src/store/slices/terminals-hydration.test.ts src/renderer/src/store/slices/repos-ssh-host-reconciliation.test.ts src/renderer/src/hooks/direct-ssh-state-routing.test.ts src/renderer/src/components/terminal-pane/pty-connection-spawn-and-startup.test.ts src/renderer/src/components/terminal-pane/terminal-pane-tab-detach.test.ts --reporter=dot",
- "pnpm exec vitest run --config config/vitest.config.ts src/main/ipc/ssh.test.ts src/main/ipc/worktrees-ssh-repo-owner-resolution.test.ts src/main/ipc/worktrees-lineage-hydration.test.ts src/main/runtime/public-ssh-state.test.ts src/main/ssh/ssh-connection-manager.test.ts src/main/ssh/ssh-connection.test.ts src/main/ssh/ssh-provider-authority.test.ts src/preload/ssh-authority-forwarding.test.ts src/renderer/src/runtime/runtime-client-events.test.ts src/renderer/src/runtime/runtime-environment-ssh-state.test.ts src/shared/ssh-retained-payload-admission.test.ts --reporter=dot",
+ "pnpm exec vitest run --config config/vitest.config.ts src/main/ipc/ssh/ssh.test.ts src/main/ipc/worktrees-ssh-repo-owner-resolution.test.ts src/main/ipc/worktrees-lineage-hydration.test.ts src/main/runtime/public-ssh-state.test.ts src/main/ssh/ssh-connection-manager.test.ts src/main/ssh/ssh-connection.test.ts src/main/ssh/ssh-provider-authority.test.ts src/preload/ssh-authority-forwarding.test.ts src/renderer/src/runtime/runtime-client-events.test.ts src/renderer/src/runtime/runtime-environment-ssh-state.test.ts src/shared/ssh-retained-payload-admission.test.ts --reporter=dot",
"pnpm exec electron-vite build --mode e2e",
"pnpm run build:web-from-renderer",
"SKIP_BUILD=1 pnpm exec playwright test tests/e2e/paired-remote-terminal-materialization-reconnect.spec.ts --config tests/playwright.config.ts --project electron-headless --workers=1",
@@ -13151,7 +13151,7 @@
"src/renderer/src/store/slices/repos-ssh-host-reconciliation.test.ts",
"src/renderer/src/hooks/direct-ssh-state-routing.test.ts",
"src/renderer/src/components/terminal-pane/terminal-pane-tab-detach.test.ts",
- "src/main/ipc/ssh.test.ts",
+ "src/main/ipc/ssh/ssh.test.ts",
"src/main/ipc/worktrees-ssh-repo-owner-resolution.test.ts",
"src/main/ipc/worktrees-lineage-hydration.test.ts",
"src/main/runtime/public-ssh-state.test.ts",
@@ -13310,7 +13310,7 @@
]
},
{
- "file": "src/main/ipc/ssh.test.ts",
+ "file": "src/main/ipc/ssh/ssh.test.ts",
"assertions": [
"concurrent same-authority connects share one provider attempt",
"authority rotation starts stale transport cancellation before teardown, concurrent fresh callers share one replacement, and stale completion cannot clobber the fresh session",
@@ -18736,14 +18736,14 @@
"invariant": "For one connected SSH authority, a renderer snapshot may update Forwarded or Detected state only if no newer push for that target and stream arrived after the snapshot began. Active tunnels and persisted intent remain authoritative through scan refresh and reconnect until explicit removal or a real connection-lifecycle transition.",
"oracle": "Hold empty initial Forwarded and Detected snapshot promises, publish live events, release the snapshots, and require each target and stream to preserve only its own newer push while applying unaffected snapshots. Reject one target's Detected snapshot and require its Forwarded snapshot plus later targets to hydrate independently. Begin another target with partial connected authority and require its snapshots to hydrate after same-watermark authority reconciliation. In headed Electron, hold an authoritative empty Forwarded snapshot across renderer reload, add a forward through the Ports panel, release and confirm the wrapped main handler resumed, then complete a later renderer-to-main listPortForwards round trip as the ordered hydration-continuation barrier. Before checking the Forwarded row, require main inventory, persisted intent, HTTP, remote process identity, and close warnings to prove the tunnel remained authoritative. Then forward two real Docker listeners, refresh detection, force an in-place relay-channel reconnect, perform a full transport reconnect, reject a bound local-port collision, remove one row, and require all signals to agree.",
"commands": [
- "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/hooks/useIpcEvents-agent-status-ssh-authority.test.ts src/main/ssh/port-forwarding/ssh-port-forward.test.ts src/main/ssh/system-transport/system-ssh-forward-process.test.ts src/main/ipc/ssh.test.ts --reporter=dot",
+ "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/hooks/useIpcEvents-agent-status-ssh-authority.test.ts src/main/ssh/port-forwarding/ssh-port-forward.test.ts src/main/ssh/system-transport/system-ssh-forward-process.test.ts src/main/ipc/ssh/ssh.test.ts --reporter=dot",
"pnpm exec electron-vite build --mode e2e"
],
"testFiles": [
"src/renderer/src/hooks/useIpcEvents-agent-status-ssh-authority.test.ts",
"src/main/ssh/port-forwarding/ssh-port-forward.test.ts",
"src/main/ssh/system-transport/system-ssh-forward-process.test.ts",
- "src/main/ipc/ssh.test.ts"
+ "src/main/ipc/ssh/ssh.test.ts"
],
"assertionRefs": [
{
@@ -18763,7 +18763,7 @@
]
},
{
- "file": "src/main/ipc/ssh.test.ts",
+ "file": "src/main/ipc/ssh/ssh.test.ts",
"assertions": [
"preserves active port forwards and live connections across handler re-registration",
"persists desired forwards and broadcasts when an active forward closes unexpectedly"
@@ -18775,7 +18775,7 @@
"date": "2026-07-30",
"runner": "local",
"platform": "macos",
- "command": "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/hooks/useIpcEvents-agent-status-ssh-authority.test.ts src/main/ssh/port-forwarding/ssh-port-forward.test.ts src/main/ssh/system-transport/system-ssh-forward-process.test.ts src/main/ipc/ssh.test.ts --reporter=dot",
+ "command": "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/hooks/useIpcEvents-agent-status-ssh-authority.test.ts src/main/ssh/port-forwarding/ssh-port-forward.test.ts src/main/ssh/system-transport/system-ssh-forward-process.test.ts src/main/ipc/ssh/ssh.test.ts --reporter=dot",
"result": "passed",
"durationSeconds": 6.77,
"summary": "Six renderer, main-process, and barrier lifecycle files passed with 215 tests, including deterministic stale-snapshot, rejected-stream, partial-authority, and single-capture isolation plus existing collision, delayed-exit, reconnect, persistence, re-registration, and unrelated-forward contracts."
diff --git a/config/scripts/check-compat-boundary-imports.mjs b/config/scripts/check-compat-boundary-imports.mjs
index cf7d80becabd..b619617eeae2 100644
--- a/config/scripts/check-compat-boundary-imports.mjs
+++ b/config/scripts/check-compat-boundary-imports.mjs
@@ -17,8 +17,8 @@ export const COMPAT_FOLDERS = [
folder: 'src/main/remote-layout-snapshot',
entries: ['remote-layout-snapshot-persistence', 'remote-layout-snapshot-recorder'],
importers: [
- 'src/main/ipc/runtime-environments.ts',
- 'src/main/ipc/runtime-environment-removal-cleanup.ts',
+ 'src/main/ipc/runtime-environments/runtime-environments.ts',
+ 'src/main/ipc/runtime-environments/runtime-environment-removal-cleanup.ts',
'src/main/persistence/loading-store/store-domain-composition.ts'
]
}
diff --git a/config/scripts/ci-shard-timings.json b/config/scripts/ci-shard-timings.json
index dee8bb06ee32..381b6d63a91a 100644
--- a/config/scripts/ci-shard-timings.json
+++ b/config/scripts/ci-shard-timings.json
@@ -2652,11 +2652,11 @@
"src/main/ipc/orca-profile-org-members-handlers.test.ts": 47,
"src/main/ipc/orca-profiles-switch-persistence.test.ts": 1882,
"src/main/ipc/orca-profiles.test.ts": 595,
- "src/main/ipc/orcad-delta-move-handlers.test.ts": 637,
- "src/main/ipc/orcad-runtime-conversion-handlers.test.ts": 886,
- "src/main/ipc/orcad-runtime-lifecycle-handlers.test.ts": 43,
- "src/main/ipc/orcad-runtime-maintenance-handlers.test.ts": 856,
- "src/main/ipc/orcad-ssh-provisioning-handlers.test.ts": 33,
+ "src/main/ipc/runtime-environments/orcad-delta-move-handlers.test.ts": 637,
+ "src/main/ipc/runtime-environments/orcad-runtime-conversion-handlers.test.ts": 886,
+ "src/main/ipc/runtime-environments/orcad-runtime-lifecycle-handlers.test.ts": 43,
+ "src/main/ipc/runtime-environments/orcad-runtime-maintenance-handlers.test.ts": 856,
+ "src/main/ipc/runtime-environments/orcad-ssh-provisioning-handlers.test.ts": 33,
"src/main/ipc/parcel-watcher-child-launch.test.ts": 51,
"src/main/ipc/parcel-watcher-child-registry.test.ts": 88,
"src/main/ipc/parcel-watcher-crash-fuse.test.ts": 37,
@@ -2831,37 +2831,37 @@
"src/main/ipc/repos/repo-creation-git-availability.test.ts": 272,
"src/main/ipc/repos/repo-ipc-wsl-move-fence.test.ts": 1840,
"src/main/ipc/runtime-agent-launch-capability.test.ts": 2779,
- "src/main/ipc/runtime-environment-browser-client-host-handler.test.ts": 762,
- "src/main/ipc/runtime-environment-capability-evidence.test.ts": 38,
- "src/main/ipc/runtime-environment-cli-removal-routing.test.ts": 806,
- "src/main/ipc/runtime-environment-diagnostics-broadcast.test.ts": 32,
- "src/main/ipc/runtime-environment-federated-read-routing.test.ts": 730,
- "src/main/ipc/runtime-environment-federated-read-transport.bench.test.ts": 310,
- "src/main/ipc/runtime-environment-host-key.test.ts": 257,
- "src/main/ipc/runtime-environment-managed-tunnel.test.ts": 518,
- "src/main/ipc/runtime-environment-mobile-relay-hosts.test.ts": 479,
- "src/main/ipc/runtime-environment-preference.test.ts": 456,
- "src/main/ipc/runtime-environment-removal-cleanup.test.ts": 215,
- "src/main/ipc/runtime-environment-removal-storage.test.ts": 1294,
- "src/main/ipc/runtime-environment-request-connections.test.ts": 2310,
- "src/main/ipc/runtime-environment-revision-guard.test.ts": 35,
- "src/main/ipc/runtime-environment-session-reconcile.test.ts": 750,
- "src/main/ipc/runtime-environment-status-connection.test.ts": 1202,
- "src/main/ipc/runtime-environment-status-recovery.test.ts": 855,
- "src/main/ipc/runtime-environment-status-retirement.test.ts": 905,
- "src/main/ipc/runtime-environment-subscription-identity.test.ts": 931,
- "src/main/ipc/runtime-environment-subscription-layout-recording.test.ts": 851,
- "src/main/ipc/runtime-environment-support-routing.test.ts": 843,
- "src/main/ipc/runtime-environment-transport-generation.test.ts": 31,
- "src/main/ipc/runtime-environment-transport-routing-tailscale-hint.test.ts": 2039,
- "src/main/ipc/runtime-environment-unreachable-hint.test.ts": 225,
- "src/main/ipc/runtime-environments-call-routing.test.ts": 2173,
- "src/main/ipc/runtime-environments-capability-cache.test.ts": 1268,
- "src/main/ipc/runtime-environments-pairing.test.ts": 1923,
- "src/main/ipc/runtime-environments-status-diagnostics.test.ts": 1104,
- "src/main/ipc/runtime-environments-subscription-lifecycle.test.ts": 1561,
- "src/main/ipc/runtime-environments-subscription-routing.test.ts": 1154,
- "src/main/ipc/runtime-environments-subscription-teardown.test.ts": 1024,
+ "src/main/ipc/runtime-environments/runtime-environment-browser-client-host-handler.test.ts": 762,
+ "src/main/ipc/runtime-environments/runtime-environment-capability-evidence.test.ts": 38,
+ "src/main/ipc/runtime-environments/runtime-environment-cli-removal-routing.test.ts": 806,
+ "src/main/ipc/runtime-environments/runtime-environment-diagnostics-broadcast.test.ts": 32,
+ "src/main/ipc/runtime-environments/runtime-environment-federated-read-routing.test.ts": 730,
+ "src/main/ipc/runtime-environments/runtime-environment-federated-read-transport.bench.test.ts": 310,
+ "src/main/ipc/runtime-environments/runtime-environment-host-key.test.ts": 257,
+ "src/main/ipc/runtime-environments/runtime-environment-managed-tunnel.test.ts": 518,
+ "src/main/ipc/runtime-environments/runtime-environment-mobile-relay-hosts.test.ts": 479,
+ "src/main/ipc/runtime-environments/runtime-environment-preference.test.ts": 456,
+ "src/main/ipc/runtime-environments/runtime-environment-removal-cleanup.test.ts": 215,
+ "src/main/ipc/runtime-environments/runtime-environment-removal-storage.test.ts": 1294,
+ "src/main/ipc/runtime-environments/runtime-environment-request-connections.test.ts": 2310,
+ "src/main/ipc/runtime-environments/runtime-environment-revision-guard.test.ts": 35,
+ "src/main/ipc/runtime-environments/runtime-environment-session-reconcile.test.ts": 750,
+ "src/main/ipc/runtime-environments/runtime-environment-status-connection.test.ts": 1202,
+ "src/main/ipc/runtime-environments/runtime-environment-status-recovery.test.ts": 855,
+ "src/main/ipc/runtime-environments/runtime-environment-status-retirement.test.ts": 905,
+ "src/main/ipc/runtime-environments/runtime-environment-subscription-identity.test.ts": 931,
+ "src/main/ipc/runtime-environments/runtime-environment-subscription-layout-recording.test.ts": 851,
+ "src/main/ipc/runtime-environments/runtime-environment-support-routing.test.ts": 843,
+ "src/main/ipc/runtime-environments/runtime-environment-transport-generation.test.ts": 31,
+ "src/main/ipc/runtime-environments/runtime-environment-transport-routing-tailscale-hint.test.ts": 2039,
+ "src/main/ipc/runtime-environments/runtime-environment-unreachable-hint.test.ts": 225,
+ "src/main/ipc/runtime-environments/runtime-environments-call-routing.test.ts": 2173,
+ "src/main/ipc/runtime-environments/runtime-environments-capability-cache.test.ts": 1268,
+ "src/main/ipc/runtime-environments/runtime-environments-pairing.test.ts": 1923,
+ "src/main/ipc/runtime-environments/runtime-environments-status-diagnostics.test.ts": 1104,
+ "src/main/ipc/runtime-environments/runtime-environments-subscription-lifecycle.test.ts": 1561,
+ "src/main/ipc/runtime-environments/runtime-environments-subscription-routing.test.ts": 1154,
+ "src/main/ipc/runtime-environments/runtime-environments-subscription-teardown.test.ts": 1024,
"src/main/ipc/runtime-import-limits.test.ts": 37,
"src/main/ipc/runtime-ssh-access-handlers.test.ts": 235,
"src/main/ipc/runtime-subscribe-lifecycle.test.ts": 3297,
@@ -2892,25 +2892,25 @@
"src/main/ipc/sparse-preset-attribution.test.ts": 41,
"src/main/ipc/speech-worker-exit-lifetime.test.ts": 662,
"src/main/ipc/speech.test.ts": 63,
- "src/main/ipc/ssh-app-shutdown.test.ts": 1656,
- "src/main/ipc/ssh-browse.test.ts": 772,
- "src/main/ipc/ssh-connect-decision-cancellation.test.ts": 1348,
- "src/main/ipc/ssh-credential-cancel.test.ts": 1371,
- "src/main/ipc/ssh-disconnect-cancellation.test.ts": 1441,
- "src/main/ipc/ssh-handler-reregistration.test.ts": 1334,
- "src/main/ipc/ssh-host-server-decision-failure.test.ts": 107,
- "src/main/ipc/ssh-host-server-on-connect-wiring.test.ts": 2114,
- "src/main/ipc/ssh-host-sleep-reconnect.test.ts": 37,
- "src/main/ipc/ssh-managed-host-port-forward-lifecycle.test.ts": 516,
- "src/main/ipc/ssh-managed-server-unlink-broadcast.test.ts": 288,
- "src/main/ipc/ssh-passphrase.test.ts": 251,
- "src/main/ipc/ssh-port-forward-restore.test.ts": 95,
- "src/main/ipc/ssh-state-broadcast-fanout.test.ts": 1828,
- "src/main/ipc/ssh-target-crud-handlers-ownership.test.ts": 1478,
- "src/main/ipc/ssh-target-registry.test.ts": 3921,
- "src/main/ipc/ssh-test-connection-probe-registry.test.ts": 38,
- "src/main/ipc/ssh-test-probe-presence.test.ts": 45,
- "src/main/ipc/ssh.test.ts": 2105,
+ "src/main/ipc/ssh/ssh-app-shutdown.test.ts": 1656,
+ "src/main/ipc/ssh/ssh-browse.test.ts": 772,
+ "src/main/ipc/ssh/ssh-connect-decision-cancellation.test.ts": 1348,
+ "src/main/ipc/ssh/ssh-credential-cancel.test.ts": 1371,
+ "src/main/ipc/ssh/ssh-disconnect-cancellation.test.ts": 1441,
+ "src/main/ipc/ssh/ssh-handler-reregistration.test.ts": 1334,
+ "src/main/ipc/ssh/ssh-host-server-decision-failure.test.ts": 107,
+ "src/main/ipc/ssh/ssh-host-server-on-connect-wiring.test.ts": 2114,
+ "src/main/ipc/ssh/ssh-host-sleep-reconnect.test.ts": 37,
+ "src/main/ipc/ssh/ssh-managed-host-port-forward-lifecycle.test.ts": 516,
+ "src/main/ipc/ssh/ssh-managed-server-unlink-broadcast.test.ts": 288,
+ "src/main/ipc/ssh/ssh-passphrase.test.ts": 251,
+ "src/main/ipc/ssh/ssh-port-forward-restore.test.ts": 95,
+ "src/main/ipc/ssh/ssh-state-broadcast-fanout.test.ts": 1828,
+ "src/main/ipc/ssh/ssh-target-crud-handlers-ownership.test.ts": 1478,
+ "src/main/ipc/ssh/ssh-target-registry.test.ts": 3921,
+ "src/main/ipc/ssh/ssh-test-connection-probe-registry.test.ts": 38,
+ "src/main/ipc/ssh/ssh-test-probe-presence.test.ts": 45,
+ "src/main/ipc/ssh/ssh.test.ts": 2105,
"src/main/ipc/telemetry.test.ts": 320,
"src/main/ipc/terminal-git-credential-guard.test.ts": 87,
"src/main/ipc/terminal-preview-output-stream.test.ts": 54,
diff --git a/config/scripts/pr-e2e-route-contracts.test.mjs b/config/scripts/pr-e2e-route-contracts.test.mjs
index af525da7c2e3..d4841f1de49f 100644
--- a/config/scripts/pr-e2e-route-contracts.test.mjs
+++ b/config/scripts/pr-e2e-route-contracts.test.mjs
@@ -463,11 +463,11 @@ describe('orcad-e2e-routing', () => {
'src/renderer/src/components/terminal-pane/terminal-host-file-link-existence.ts',
'src/renderer/src/runtime/runtime-terminal-artifact-read.ts',
// #30130's Disconnect sources merged with this lane skipped.
- 'src/main/ipc/ssh-host-user-disconnect.ts',
- 'src/main/ipc/ssh-connect-flow.ts',
- 'src/main/ipc/ssh-connection-handlers.ts',
- 'src/main/ipc/runtime-environment-connectivity-handlers.ts',
- 'src/main/ipc/runtime-environment-manual-disconnect.ts',
+ 'src/main/ipc/ssh/ssh-host-user-disconnect.ts',
+ 'src/main/ipc/ssh/ssh-connect-flow.ts',
+ 'src/main/ipc/ssh/ssh-connection-handlers.ts',
+ 'src/main/ipc/runtime-environments/runtime-environment-connectivity-handlers.ts',
+ 'src/main/ipc/runtime-environments/runtime-environment-manual-disconnect.ts',
'src/main/ssh/ssh-connection-manager.ts',
'src/main/ssh/ssh-user-disconnect.ts',
'src/renderer/src/runtime/web-session-close-intent.ts',
@@ -500,12 +500,12 @@ describe('managed-SSH remote sources routing', () => {
it('starts the lane for remote product sources no hand-kept route names', () => {
for (const file of [
// #30130 and #30120 merged with the lane skipped.
- 'src/main/ipc/ssh.ts',
+ 'src/main/ipc/ssh/ssh.ts',
'src/cli/runtime/serve-orcad-launch.ts',
'src/main/orcad/orcad-entry.ts',
'src/main/ssh/ssh-connection.ts',
- 'src/main/ipc/runtime-environment-status-probe.ts',
- 'src/main/ipc/orcad-runtime-lifecycle-handlers.ts',
+ 'src/main/ipc/runtime-environments/runtime-environment-status-probe.ts',
+ 'src/main/ipc/runtime-environments/orcad-runtime-lifecycle-handlers.ts',
'src/shared/protocol-version.ts',
'src/shared/remote-runtime-client-error-classification.ts',
// #30047 and #30060: sidebar sleep and project removal.
@@ -521,7 +521,7 @@ describe('managed-SSH remote sources routing', () => {
it('leaves unit tests and local-only sources alone', () => {
for (const file of [
'src/main/ssh/ssh-connection.test.ts',
- 'src/main/ipc/ssh.test.ts',
+ 'src/main/ipc/ssh/ssh.test.ts',
'src/main/daemon/daemon-server.ts',
'src/main/runtime/rpc/methods/accounts.ts',
'src/renderer/src/components/sidebar/WorktreeCard.tsx',
diff --git a/config/scripts/pr-e2e-source-routing.mjs b/config/scripts/pr-e2e-source-routing.mjs
index 44105317e0f4..59797779c16e 100644
--- a/config/scripts/pr-e2e-source-routing.mjs
+++ b/config/scripts/pr-e2e-source-routing.mjs
@@ -128,7 +128,7 @@ export const PR_E2E_SOURCE_ROUTES = [
matches: (file) =>
MANAGED_SSH_HARNESS.test(file) ||
(isProductSource(file) &&
- /^src\/main\/(?:ipc\/ssh-host-server-|(?:ssh|managed-server\/[a-z-]+)\/(?:ssh-host-server-|orcad-runtime-conversion|orcad-migration-|orcad-retained-source|orcad-runtime-deployment))/.test(
+ /^src\/main\/(?:ipc\/(?:ssh\/)?ssh-host-server-|(?:ssh|managed-server\/[a-z-]+)\/(?:ssh-host-server-|orcad-runtime-conversion|orcad-migration-|orcad-retained-source|orcad-runtime-deployment))/.test(
file
))
},
@@ -248,7 +248,7 @@ export const PR_E2E_SOURCE_ROUTES = [
file
) ||
(isProductSource(file) &&
- /^src\/(?:main\/(?:ssh|managed-server\/[a-z-]+)\/orcad-managed-|main\/ipc\/ssh-port-forward|main\/(?:ipc\/(?:ssh-(?:connect-flow|connection-handlers|host-user-disconnect|session-teardown)|runtime-environment-(?:connectivity-handlers|manual-disconnect))|ssh\/ssh-(?:connection-manager|user-disconnect))\.ts$|renderer\/src\/startup\/(?:ssh-startup-reconnect|startup-ssh-connection-restore)\.ts$|renderer\/src\/runtime\/(?:web-runtime-session|web-session-close-|runtime-terminal-artifact-read\.ts$)|renderer\/src\/components\/terminal-pane\/(?:remote-runtime-|terminal-host-(?:workspace-file|file-link-existence)\.ts$))/.test(
+ /^src\/(?:main\/(?:ssh|managed-server\/[a-z-]+)\/orcad-managed-|main\/ipc\/(?:ssh\/)?ssh-port-forward|main\/(?:ipc\/(?:(?:ssh\/)?ssh-(?:connect-flow|connection-handlers|host-user-disconnect|session-teardown)|(?:runtime-environments\/)?runtime-environment-(?:connectivity-handlers|manual-disconnect))|ssh\/ssh-(?:connection-manager|user-disconnect))\.ts$|renderer\/src\/startup\/(?:ssh-startup-reconnect|startup-ssh-connection-restore)\.ts$|renderer\/src\/runtime\/(?:web-runtime-session|web-session-close-|runtime-terminal-artifact-read\.ts$)|renderer\/src\/components\/terminal-pane\/(?:remote-runtime-|terminal-host-(?:workspace-file|file-link-existence)\.ts$))/.test(
file
))
},
diff --git a/config/scripts/vitest-node-runtime-files.mjs b/config/scripts/vitest-node-runtime-files.mjs
index 39c9245df404..4387f9358039 100644
--- a/config/scripts/vitest-node-runtime-files.mjs
+++ b/config/scripts/vitest-node-runtime-files.mjs
@@ -113,8 +113,8 @@ export const NODE_RUNTIME_INCLUDE = [
'src/shared/remote-runtime-shared-control-connection.test.ts',
'src/main/runtime/mobile-cloud-relay/relay-control-client.test.ts',
'src/main/ipc/filesystem-watcher-ignore-real.test.ts',
- 'src/main/ipc/runtime-environment-preference.test.ts',
- 'src/main/ipc/runtime-environment-transport-routing-tailscale-hint.test.ts',
+ 'src/main/ipc/runtime-environments/runtime-environment-preference.test.ts',
+ 'src/main/ipc/runtime-environments/runtime-environment-transport-routing-tailscale-hint.test.ts',
'src/renderer/src/components/emulator-pane/emulator-device-frame-visibility.test.tsx',
'src/main/claude/claude-agent-sdk-contract-pins.test.ts',
'config/scripts/profile-state-worker-smoke.test.mjs',
diff --git a/config/scripts/vitest-sqlite-runtime-files.mjs b/config/scripts/vitest-sqlite-runtime-files.mjs
index f1467cab8cb1..9770c6559567 100644
--- a/config/scripts/vitest-sqlite-runtime-files.mjs
+++ b/config/scripts/vitest-sqlite-runtime-files.mjs
@@ -64,7 +64,7 @@ export const SQLITE_RUNTIME_INCLUDE = [
'src/main/codex/codex-structured-question-order.test.ts',
'src/main/ipc/pty/ipc/spawn-commit-ssh-lease-cardinality.test.ts',
'src/main/ipc/repos/folder-workspace-attachment-handlers.test.ts',
- 'src/main/ipc/ssh-host-server-on-connect-wiring.test.ts',
+ 'src/main/ipc/ssh/ssh-host-server-on-connect-wiring.test.ts',
'src/main/native-chat/agent-session-attachments/agent-session-attachment-claims.test.ts',
'src/main/native-chat/agent-session-attachments/agent-session-attachment-sweep.test.ts',
'src/main/native-chat/agent-session-wire/agent-session-bounded-frames.test.ts',
diff --git a/src/main/ai-vault/runtime-session-scanner.test.ts b/src/main/ai-vault/runtime-session-scanner.test.ts
index 9fe60aa09723..e431038ccfff 100644
--- a/src/main/ai-vault/runtime-session-scanner.test.ts
+++ b/src/main/ai-vault/runtime-session-scanner.test.ts
@@ -10,7 +10,7 @@ vi.mock('../../shared/runtime-environment-store', () => ({
listEnvironments: mocks.listEnvironments
}))
-vi.mock('../ipc/runtime-environment-transport-routing', () => ({
+vi.mock('../ipc/runtime-environments/runtime-environment-transport-routing', () => ({
callRuntimeEnvironment: mocks.callRuntimeEnvironment
}))
diff --git a/src/main/ai-vault/runtime-session-scanner.ts b/src/main/ai-vault/runtime-session-scanner.ts
index 586c41dfd62e..9e3fe4119324 100644
--- a/src/main/ai-vault/runtime-session-scanner.ts
+++ b/src/main/ai-vault/runtime-session-scanner.ts
@@ -9,7 +9,7 @@ import {
} from '../../shared/ai-vault-types'
import { toRuntimeExecutionHostId } from '../../shared/execution-host'
import { listEnvironments } from '../../shared/runtime-environment-store'
-import { callRuntimeEnvironment } from '../ipc/runtime-environment-transport-routing'
+import { callRuntimeEnvironment } from '../ipc/runtime-environments/runtime-environment-transport-routing'
import type {
AiVaultPrepareSessionResumeRequest,
AiVaultPrepareSessionResumeResult
diff --git a/src/main/ai-vault/runtime-session-search-call.test.ts b/src/main/ai-vault/runtime-session-search-call.test.ts
index 4f8f0d2b4017..d70135448593 100644
--- a/src/main/ai-vault/runtime-session-search-call.test.ts
+++ b/src/main/ai-vault/runtime-session-search-call.test.ts
@@ -1,7 +1,9 @@
import { beforeEach, describe, expect, it, vi } from 'vitest'
const callRuntimeEnvironment = vi.hoisted(() => vi.fn())
-vi.mock('../ipc/runtime-environment-transport-routing', () => ({ callRuntimeEnvironment }))
+vi.mock('../ipc/runtime-environments/runtime-environment-transport-routing', () => ({
+ callRuntimeEnvironment
+}))
import { callRuntimeSessionSearch } from './runtime-session-search-call'
diff --git a/src/main/ai-vault/runtime-session-search-call.ts b/src/main/ai-vault/runtime-session-search-call.ts
index d9a3ac07ffc6..3655bebc8d0f 100644
--- a/src/main/ai-vault/runtime-session-search-call.ts
+++ b/src/main/ai-vault/runtime-session-search-call.ts
@@ -1,4 +1,4 @@
-import { callRuntimeEnvironment } from '../ipc/runtime-environment-transport-routing'
+import { callRuntimeEnvironment } from '../ipc/runtime-environments/runtime-environment-transport-routing'
// Why: runtime RPC failures resolve as ok:false, but the shared search client
// classifies thrown errors by code, so the refusal has to keep its code to be
diff --git a/src/main/browser/doc-preview-file-reader.test.ts b/src/main/browser/doc-preview-file-reader.test.ts
index fc450d1c305e..665ed79e62e0 100644
--- a/src/main/browser/doc-preview-file-reader.test.ts
+++ b/src/main/browser/doc-preview-file-reader.test.ts
@@ -4,7 +4,7 @@ const mocks = vi.hoisted(() => ({
callRuntimeEnvironment: vi.fn()
}))
-vi.mock('../ipc/runtime-environment-transport-routing', () => ({
+vi.mock('../ipc/runtime-environments/runtime-environment-transport-routing', () => ({
callRuntimeEnvironment: mocks.callRuntimeEnvironment
}))
vi.mock('../persistence', () => ({
diff --git a/src/main/browser/doc-preview-file-reader.ts b/src/main/browser/doc-preview-file-reader.ts
index 959d314ca0f1..9560dc420e4f 100644
--- a/src/main/browser/doc-preview-file-reader.ts
+++ b/src/main/browser/doc-preview-file-reader.ts
@@ -2,7 +2,7 @@ import { extname } from 'node:path'
import type { RuntimeFilePreviewResult } from '../../shared/runtime-file-contracts'
import type { DocPreviewFileFailureReason } from '../../shared/doc-preview-scheme'
import { FONT_FILE_MIME_TYPES } from '../../shared/font-file-extensions'
-import { callRuntimeEnvironment } from '../ipc/runtime-environment-transport-routing'
+import { callRuntimeEnvironment } from '../ipc/runtime-environments/runtime-environment-transport-routing'
import { getCanonicalUserDataPath } from '../persistence'
import { SSH_HOST_NOT_SERVED_MESSAGE } from '../providers/ssh-host-not-served-error'
import {
diff --git a/src/main/ephemeral-vm-runtime-ssh.test.ts b/src/main/ephemeral-vm-runtime-ssh.test.ts
index 46f271663097..822ffc7a3c3b 100644
--- a/src/main/ephemeral-vm-runtime-ssh.test.ts
+++ b/src/main/ephemeral-vm-runtime-ssh.test.ts
@@ -8,7 +8,7 @@ const mocks = vi.hoisted(() => ({
vi.mock('./ssh/ssh-target-registry', () => ({
connectRegisteredSshTarget: mocks.connect
}))
-vi.mock('./ipc/ssh', () => ({
+vi.mock('./ipc/ssh/ssh', () => ({
getSshConnectionStore: () => ({
upsertRuntimeOwnedTarget: (runtimeId: string) => ({
id: `runtime-ssh-${runtimeId}`,
@@ -19,7 +19,7 @@ vi.mock('./ipc/ssh', () => ({
})
})
}))
-vi.mock('./ipc/ssh-session-teardown', () => ({
+vi.mock('./ipc/ssh/ssh-session-teardown', () => ({
disconnectRegisteredSshTarget: vi.fn(),
removeRegisteredSshTarget: mocks.remove
}))
diff --git a/src/main/ephemeral-vm-runtime-ssh.ts b/src/main/ephemeral-vm-runtime-ssh.ts
index 6b6580ecae0f..7acaacc9a98a 100644
--- a/src/main/ephemeral-vm-runtime-ssh.ts
+++ b/src/main/ephemeral-vm-runtime-ssh.ts
@@ -1,9 +1,9 @@
-import { getSshConnectionStore } from './ipc/ssh'
+import { getSshConnectionStore } from './ipc/ssh/ssh'
import { connectRegisteredSshTarget } from './ssh/ssh-target-registry'
import {
disconnectRegisteredSshTarget,
removeRegisteredSshTarget
-} from './ipc/ssh-session-teardown'
+} from './ipc/ssh/ssh-session-teardown'
import type { EphemeralVmRecipeConnection } from '../shared/ephemeral-vm-recipes'
import type { SshTarget } from '../shared/ssh-types'
import { SshHostNotServedError } from './providers/ssh-host-not-served-error'
diff --git a/src/main/ipc/agent-session-attachment-upload.test.ts b/src/main/ipc/agent-session-attachment-upload.test.ts
index 8141cca72177..f09e56a0a8c1 100644
--- a/src/main/ipc/agent-session-attachment-upload.test.ts
+++ b/src/main/ipc/agent-session-attachment-upload.test.ts
@@ -17,7 +17,7 @@ let serverStore: AgentSessionAttachmentStore
let failMethod: string | null = null
// The paired server, played by a real store: every call answers as the RPC handler would.
-vi.mock('./runtime-environment-transport-routing', () => ({
+vi.mock('./runtime-environments/runtime-environment-transport-routing', () => ({
callRuntimeEnvironment: async (
_userDataPath: string,
_environmentId: string,
diff --git a/src/main/ipc/agent-session-attachment-upload.ts b/src/main/ipc/agent-session-attachment-upload.ts
index 258c5d355d9a..eef394c46b2b 100644
--- a/src/main/ipc/agent-session-attachment-upload.ts
+++ b/src/main/ipc/agent-session-attachment-upload.ts
@@ -16,11 +16,11 @@ import {
type AgentSessionAttachmentUploadTarget
} from '../../shared/agent-session-attachments'
import { resolveEnvironment } from '../../shared/runtime-environment-store'
-import { callRuntimeEnvironment } from './runtime-environment-transport-routing'
+import { callRuntimeEnvironment } from './runtime-environments/runtime-environment-transport-routing'
import {
isRuntimeEnvironmentManuallyDisconnected,
RUNTIME_MANUALLY_DISCONNECTED_MESSAGE
-} from './runtime-environment-manual-disconnect'
+} from './runtime-environments/runtime-environment-manual-disconnect'
import { stageOneSourceForRuntimeUpload } from './filesystem-runtime-upload-staging'
import { streamExternalFileSlices } from './runtime-upload-file-stream'
import { formatByteCeiling } from './runtime-import-limits'
diff --git a/src/main/ipc/ai-vault-host-leg-cache-retention.test.ts b/src/main/ipc/ai-vault-host-leg-cache-retention.test.ts
index 7724f33305d5..f56ed30960a8 100644
--- a/src/main/ipc/ai-vault-host-leg-cache-retention.test.ts
+++ b/src/main/ipc/ai-vault-host-leg-cache-retention.test.ts
@@ -25,7 +25,7 @@ vi.mock('../ai-vault/cached-session-list', () => ({
vi.mock('../ai-vault/ssh-session-list', () => ({
scanSshAiVaultSessions: mocks.ssh
}))
-vi.mock('./ssh', () => ({
+vi.mock('./ssh/ssh', () => ({
getActiveSshAiVaultHostInfos: () =>
['one', 'two', 'three', 'four'].map((targetId) => ({ targetId }))
}))
diff --git a/src/main/ipc/ai-vault-search.test.ts b/src/main/ipc/ai-vault-search.test.ts
index b3907603952a..aeef2a74d624 100644
--- a/src/main/ipc/ai-vault-search.test.ts
+++ b/src/main/ipc/ai-vault-search.test.ts
@@ -17,7 +17,7 @@ vi.mock('electron', () => ({
},
ipcRenderer: { invoke: (name: string, ...args: unknown[]) => handlers.get(name)!(null, ...args) }
}))
-vi.mock('./ssh', () => ({
+vi.mock('./ssh/ssh', () => ({
requestActiveSshSessionSearch: sshSearch,
getActiveSshAiVaultHostInfos: sshHostInfos
}))
diff --git a/src/main/ipc/ai-vault-unresolved-owner.test.ts b/src/main/ipc/ai-vault-unresolved-owner.test.ts
index 0011ba3f7b27..1afd37af3bf5 100644
--- a/src/main/ipc/ai-vault-unresolved-owner.test.ts
+++ b/src/main/ipc/ai-vault-unresolved-owner.test.ts
@@ -24,7 +24,7 @@ vi.mock('../wsl', () => ({
hasCachedWslDistros: vi.fn(() => false)
}))
-vi.mock('./ssh', () => ({
+vi.mock('./ssh/ssh', () => ({
getActiveSshAiVaultHostInfo: vi.fn(),
getActiveSshAiVaultHostInfos: vi.fn(() => []),
requestActiveSshAiVaultSessionList: vi.fn(),
diff --git a/src/main/ipc/browser.ts b/src/main/ipc/browser.ts
index 5c8d71bb8b84..933cb0f4f17c 100644
--- a/src/main/ipc/browser.ts
+++ b/src/main/ipc/browser.ts
@@ -118,7 +118,7 @@ export function registerBrowserHandlers(): void {
if (typeof args?.targetId !== 'string' || args.targetId.length === 0) {
throw new Error('browser_local_route_target_invalid')
}
- const { getSshConnectionStore } = await import('./ssh')
+ const { getSshConnectionStore } = await import('./ssh/ssh')
const { requireLocalSshBrowserRouteTarget } =
await import('../browser/local-ssh-browser-route')
requireLocalSshBrowserRouteTarget(
diff --git a/src/main/ipc/desktop-browser-bridge-wiring.test.ts b/src/main/ipc/desktop-browser-bridge-wiring.test.ts
index 50e753882cd4..f3105eb3139a 100644
--- a/src/main/ipc/desktop-browser-bridge-wiring.test.ts
+++ b/src/main/ipc/desktop-browser-bridge-wiring.test.ts
@@ -9,7 +9,7 @@ const { targets } = vi.hoisted(() => {
vi.mock('electron', () => ({ webContents: { fromId: () => null } }))
vi.mock('../browser/browser-manager', () => ({ browserManager: {} }))
vi.mock('../runtime/rpc/methods', () => ({ ALL_RPC_METHODS: [] }))
-vi.mock('./ssh-ipc-context', () => ({ persistedStore: null }))
+vi.mock('./ssh/ssh-ipc-context', () => ({ persistedStore: null }))
vi.mock('../managed-server/lifecycle/orcad-managed-tunnel', () => ({
ensureOrcadManagedTunnel: vi.fn()
}))
@@ -21,7 +21,7 @@ vi.mock('../../shared/managed-orcad-ssh-owner', async (importOriginal) => ({
...(await importOriginal>()),
getManagedOrcadFenceEnvironmentId: (target: SshTarget) => `env-${target.id}`
}))
-vi.mock('./runtime-environment-connectivity-handlers', () => ({
+vi.mock('./runtime-environments/runtime-environment-connectivity-handlers', () => ({
isRuntimeEnvironmentManuallyDisconnected: () => false
}))
vi.mock('../../shared/runtime-environment-store', async (importOriginal) => ({
diff --git a/src/main/ipc/desktop-browser-bridge-wiring.ts b/src/main/ipc/desktop-browser-bridge-wiring.ts
index 3f777d63f454..90019e546a36 100644
--- a/src/main/ipc/desktop-browser-bridge-wiring.ts
+++ b/src/main/ipc/desktop-browser-bridge-wiring.ts
@@ -33,11 +33,11 @@ import { ALL_RPC_METHODS } from '../runtime/rpc/methods'
import { ensureOrcadManagedTunnel } from '../managed-server/lifecycle/orcad-managed-tunnel'
import { getSshTargetRegistryStore } from '../ssh/ssh-target-registry'
import type { SshConnectionManager } from '../ssh/ssh-connection-manager'
-import { getRuntimeEnvironmentStatus } from './runtime-environment-status-probe'
-import { isRuntimeEnvironmentManuallyDisconnected } from './runtime-environment-connectivity-handlers'
+import { getRuntimeEnvironmentStatus } from './runtime-environments/runtime-environment-status-probe'
+import { isRuntimeEnvironmentManuallyDisconnected } from './runtime-environments/runtime-environment-connectivity-handlers'
import { setDesktopBrowserBridgeControl } from './desktop-browser-bridge-reconcile'
import { markRemoteCliDrivenWorkspace } from '../browser/desktop-browser-bridge/remote-cli-driven-workspaces'
-import { persistedStore } from './ssh-ipc-context'
+import { persistedStore } from './ssh/ssh-ipc-context'
import { localSshBrowserTargetIdForSession } from '../browser/local-ssh-browser-partitions'
const ATTACH_TIMEOUT_MS = 15_000
diff --git a/src/main/ipc/ephemeral-vm-managed-ssh.test.ts b/src/main/ipc/ephemeral-vm-managed-ssh.test.ts
index 8166861ab163..c8a9a1022927 100644
--- a/src/main/ipc/ephemeral-vm-managed-ssh.test.ts
+++ b/src/main/ipc/ephemeral-vm-managed-ssh.test.ts
@@ -22,7 +22,9 @@ vi.mock('../ephemeral-vm-runtime-ssh', () => ({
disconnectRuntimeOwnedSshTarget: vi.fn(async () => {}),
removeRuntimeOwnedSshTarget: vi.fn(async () => {})
}))
-vi.mock('./runtime-environments', () => ({ invalidateRuntimeEnvironmentTransport: vi.fn() }))
+vi.mock('./runtime-environments/runtime-environments', () => ({
+ invalidateRuntimeEnvironmentTransport: vi.fn()
+}))
import type { Store } from '../persistence'
import { listEphemeralVmRuntimes } from '../../shared/ephemeral-vm-runtime-store'
diff --git a/src/main/ipc/ephemeral-vm-runtime-handlers.ts b/src/main/ipc/ephemeral-vm-runtime-handlers.ts
index b1354d324027..f6210ef7e390 100644
--- a/src/main/ipc/ephemeral-vm-runtime-handlers.ts
+++ b/src/main/ipc/ephemeral-vm-runtime-handlers.ts
@@ -28,7 +28,7 @@ import {
removeRuntimeOwnedSshTarget
} from '../ephemeral-vm-runtime-ssh'
import { getRuntimeRecipeContext } from './ephemeral-vm-recipe-context'
-import { invalidateRuntimeEnvironmentTransport } from './runtime-environments'
+import { invalidateRuntimeEnvironmentTransport } from './runtime-environments/runtime-environments'
import { attachEphemeralVmRuntimeToWorkspace } from '../ephemeral-vm-runtime-attachment'
export type EphemeralVmCleanupCommandResult = {
diff --git a/src/main/ipc/ephemeral-vm.test.ts b/src/main/ipc/ephemeral-vm.test.ts
index 4f71dde0f9f2..84628fb64d58 100644
--- a/src/main/ipc/ephemeral-vm.test.ts
+++ b/src/main/ipc/ephemeral-vm.test.ts
@@ -41,7 +41,7 @@ vi.mock('../ephemeral-vm-runtime-ssh', () => ({
removeRuntimeOwnedSshTarget: removeRuntimeOwnedSshTargetMock
}))
-vi.mock('./runtime-environments', () => ({
+vi.mock('./runtime-environments/runtime-environments', () => ({
invalidateRuntimeEnvironmentTransport: invalidateRuntimeEnvironmentTransportMock
}))
diff --git a/src/main/ipc/managed-host-status-publication.test.ts b/src/main/ipc/managed-host-status-publication.test.ts
index 7874cb6390e5..e885368d705a 100644
--- a/src/main/ipc/managed-host-status-publication.test.ts
+++ b/src/main/ipc/managed-host-status-publication.test.ts
@@ -2,7 +2,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest'
const mocks = vi.hoisted(() => ({ send: vi.fn(), notify: vi.fn(), getState: vi.fn() }))
-vi.mock('./ssh-ipc-context', () => ({
+vi.mock('./ssh/ssh-ipc-context', () => ({
connectionManager: { getState: mocks.getState },
currentRuntime: { notifySshStateChanged: mocks.notify },
getCurrentMainWindow: () => ({ isDestroyed: () => false, webContents: { send: mocks.send } }),
@@ -15,7 +15,7 @@ vi.mock('../ssh/ssh-target-registry', async (importOriginal) => ({
}))
const { clearLaunchSessionNote, clearManagedServerNotes, publishHostServerStatus } =
- await import('./runtime-environment-managed-tunnel')
+ await import('./runtime-environments/runtime-environment-managed-tunnel')
const { clearSshHostServerStatus, getSshHostServerStatus, setSshHostServerStatus } =
await import('../ssh/ssh-host-server-status')
diff --git a/src/main/ipc/register-core-handlers/register-core-handlers.test.ts b/src/main/ipc/register-core-handlers/register-core-handlers.test.ts
index 547bb0125f07..bef60c84ca97 100644
--- a/src/main/ipc/register-core-handlers/register-core-handlers.test.ts
+++ b/src/main/ipc/register-core-handlers/register-core-handlers.test.ts
@@ -155,7 +155,7 @@ vi.mock('../../shared/runtime-environment-store', () => ({
listEnvironments: listEnvironmentsMock
}))
-vi.mock('../runtime-environment-transport-routing', () => ({
+vi.mock('../runtime-environments/runtime-environment-transport-routing', () => ({
callRuntimeEnvironment: callRuntimeEnvironmentMock
}))
@@ -312,7 +312,7 @@ vi.mock('../runtime', () => ({
registerRuntimeHandlers: registerRuntimeHandlersMock
}))
-vi.mock('../runtime-environments', () => ({
+vi.mock('../runtime-environments/runtime-environments', () => ({
invalidateRuntimeEnvironmentTransport: vi.fn(),
registerRuntimeEnvironmentHandlers: registerRuntimeEnvironmentHandlersMock
}))
diff --git a/src/main/ipc/register-core-handlers/register-core-handlers.ts b/src/main/ipc/register-core-handlers/register-core-handlers.ts
index a39b797fdf45..6b3971eb6a14 100644
--- a/src/main/ipc/register-core-handlers/register-core-handlers.ts
+++ b/src/main/ipc/register-core-handlers/register-core-handlers.ts
@@ -26,7 +26,7 @@ import { registerRuntimeHandlers } from '../runtime'
import {
invalidateRuntimeEnvironmentTransport,
registerRuntimeEnvironmentHandlers
-} from '../runtime-environments'
+} from '../runtime-environments/runtime-environments'
import { registerWslHostHandlers } from '../wsl-host-handlers'
import { registerWslMoveHandlers } from '../wsl-move-handlers'
import { registerEphemeralVmHandlers } from '../ephemeral-vm'
diff --git a/src/main/ipc/managed-orcad-actions.ts b/src/main/ipc/runtime-environments/managed-orcad-actions.ts
similarity index 85%
rename from src/main/ipc/managed-orcad-actions.ts
rename to src/main/ipc/runtime-environments/managed-orcad-actions.ts
index 3171b8bf1815..59bd3d061513 100644
--- a/src/main/ipc/managed-orcad-actions.ts
+++ b/src/main/ipc/runtime-environments/managed-orcad-actions.ts
@@ -3,20 +3,20 @@ import {
cancelManagedOrcadStop,
forgetManagedOrcadEnvironment,
stopManagedOrcadEnvironment
-} from '../managed-server/lifecycle/orcad-runtime-decommission'
-import { getManagedOrcadRuntimeStatus } from '../managed-server/lifecycle/orcad-runtime-status'
+} from '../../managed-server/lifecycle/orcad-runtime-decommission'
+import { getManagedOrcadRuntimeStatus } from '../../managed-server/lifecycle/orcad-runtime-status'
import {
recoverManagedOrcadEnvironment,
rollbackManagedOrcadEnvironment,
updateManagedOrcadEnvironment
-} from '../ssh/orcad-runtime-maintenance'
-import { getOrcadSshDeployment } from '../../shared/runtime-environments'
-import { resolveEnvironment } from '../../shared/runtime-environment-store'
-import type { OrcadManagedRestartResult } from '../../shared/orcad-managed-runtime'
-import { restartManagedOrcadEnvironment } from '../managed-server/lifecycle/orcad-managed-launch-session'
+} from '../../ssh/orcad-runtime-maintenance'
+import { getOrcadSshDeployment } from '../../../shared/runtime-environments'
+import { resolveEnvironment } from '../../../shared/runtime-environment-store'
+import type { OrcadManagedRestartResult } from '../../../shared/orcad-managed-runtime'
+import { restartManagedOrcadEnvironment } from '../../managed-server/lifecycle/orcad-managed-launch-session'
import { clearLaunchSessionNote } from './runtime-environment-managed-tunnel'
-import { forgetLaunchSessionVerdict } from './ssh-host-launch-session-note'
-import type { ManagedServerActions } from '../runtime/managed-server-actions-registry'
+import { forgetLaunchSessionVerdict } from '../ssh/ssh-host-launch-session-note'
+import type { ManagedServerActions } from '../../runtime/managed-server-actions-registry'
import {
retireRemovedRuntimeEnvironment,
type RemovedServerStore
diff --git a/src/main/ipc/orcad-delta-move-handlers.test.ts b/src/main/ipc/runtime-environments/orcad-delta-move-handlers.test.ts
similarity index 85%
rename from src/main/ipc/orcad-delta-move-handlers.test.ts
rename to src/main/ipc/runtime-environments/orcad-delta-move-handlers.test.ts
index f1197f36d452..685a5e5eca97 100644
--- a/src/main/ipc/orcad-delta-move-handlers.test.ts
+++ b/src/main/ipc/runtime-environments/orcad-delta-move-handlers.test.ts
@@ -16,26 +16,26 @@ const mocks = vi.hoisted(() => ({
}))
vi.mock('electron', () => ({ ipcMain: { handle: mocks.handle } }))
-vi.mock('../../shared/runtime-environment-store', () => ({
+vi.mock('../../../shared/runtime-environment-store', () => ({
listEnvironments: () => [{ id: 'env-1' }]
}))
-vi.mock('../managed-server/lifecycle/orcad-managed-runtime-context', () => ({
+vi.mock('../../managed-server/lifecycle/orcad-managed-runtime-context', () => ({
requireManagedOrcadInfrastructure: () => ({
claims: {},
targetStore: { getOrcadMigrationSource: () => ({ getSshTarget: () => mocks.target }) }
})
}))
-vi.mock('../ssh/orcad-migration-delta-move', () => ({
+vi.mock('../../ssh/orcad-migration-delta-move', () => ({
runOrcadDeltaMove: mocks.move,
keepOrcadServerVersion: mocks.keep
}))
-vi.mock('../managed-server/lifecycle/orcad-runtime-conversion-wiring', () => ({
+vi.mock('../../managed-server/lifecycle/orcad-runtime-conversion-wiring', () => ({
orcadMigrationDestinationFor: () => ({})
}))
-vi.mock('../managed-server/lifecycle/orcad-managed-tunnel', () => ({
+vi.mock('../../managed-server/lifecycle/orcad-managed-tunnel', () => ({
ensureOrcadManagedTunnel: vi.fn()
}))
-vi.mock('./ssh-session-teardown', () => ({
+vi.mock('../ssh/ssh-session-teardown', () => ({
disconnectRegisteredSshTarget: vi.fn()
}))
vi.mock('./runtime-environment-managed-tunnel', () => ({
diff --git a/src/main/ipc/orcad-delta-move-handlers.ts b/src/main/ipc/runtime-environments/orcad-delta-move-handlers.ts
similarity index 78%
rename from src/main/ipc/orcad-delta-move-handlers.ts
rename to src/main/ipc/runtime-environments/orcad-delta-move-handlers.ts
index 301f176023a6..32258e76f33c 100644
--- a/src/main/ipc/orcad-delta-move-handlers.ts
+++ b/src/main/ipc/runtime-environments/orcad-delta-move-handlers.ts
@@ -3,17 +3,17 @@ import { ipcMain } from 'electron'
import type {
OrcadDeltaMovePreview,
OrcadDeltaMoveResult
-} from '../../shared/orcad-managed-runtime'
-import { listEnvironments } from '../../shared/runtime-environment-store'
-import { requireManagedOrcadInfrastructure } from '../managed-server/lifecycle/orcad-managed-runtime-context'
-import { ensureOrcadManagedTunnel } from '../managed-server/lifecycle/orcad-managed-tunnel'
-import { keepOrcadServerVersion, runOrcadDeltaMove } from '../ssh/orcad-migration-delta-move'
-import { planOrcadDeltaMove } from '../ssh/orcad-migration-delta-plan'
-import { censusHostRelayTerminalsFor } from '../ssh/legacy-relay/ssh-host-relay-census-for-target'
-import { orcadMigrationDestinationFor } from '../managed-server/lifecycle/orcad-runtime-conversion-wiring'
+} from '../../../shared/orcad-managed-runtime'
+import { listEnvironments } from '../../../shared/runtime-environment-store'
+import { requireManagedOrcadInfrastructure } from '../../managed-server/lifecycle/orcad-managed-runtime-context'
+import { ensureOrcadManagedTunnel } from '../../managed-server/lifecycle/orcad-managed-tunnel'
+import { keepOrcadServerVersion, runOrcadDeltaMove } from '../../ssh/orcad-migration-delta-move'
+import { planOrcadDeltaMove } from '../../ssh/orcad-migration-delta-plan'
+import { censusHostRelayTerminalsFor } from '../../ssh/legacy-relay/ssh-host-relay-census-for-target'
+import { orcadMigrationDestinationFor } from '../../managed-server/lifecycle/orcad-runtime-conversion-wiring'
import { requiredString } from './orcad-runtime-lifecycle-handlers'
import { publishResolvedChangedHostStatus } from './runtime-environment-managed-tunnel'
-import { runTargetLifecycle } from './ssh-target-lifecycle-queue'
+import { runTargetLifecycle } from '../ssh/ssh-target-lifecycle-queue'
export function registerOrcadDeltaMoveHandlers(getUserDataPath: () => string): void {
ipcMain.handle(
diff --git a/src/main/ipc/orcad-leave-behind-handlers.ts b/src/main/ipc/runtime-environments/orcad-leave-behind-handlers.ts
similarity index 91%
rename from src/main/ipc/orcad-leave-behind-handlers.ts
rename to src/main/ipc/runtime-environments/orcad-leave-behind-handlers.ts
index 67722b0b4069..50ed345090c9 100644
--- a/src/main/ipc/orcad-leave-behind-handlers.ts
+++ b/src/main/ipc/runtime-environments/orcad-leave-behind-handlers.ts
@@ -1,6 +1,6 @@
/** IPC for "Move anyway": the user confirms that saved state a move can't carry stays on this desktop. */
import { ipcMain } from 'electron'
-import { getSshTargetRegistryStore } from '../ssh/ssh-target-registry'
+import { getSshTargetRegistryStore } from '../../ssh/ssh-target-registry'
import { requiredString } from './orcad-runtime-lifecycle-handlers'
export function registerOrcadLeaveBehindHandlers(): void {
diff --git a/src/main/ipc/orcad-runtime-conversion-handlers.test.ts b/src/main/ipc/runtime-environments/orcad-runtime-conversion-handlers.test.ts
similarity index 86%
rename from src/main/ipc/orcad-runtime-conversion-handlers.test.ts
rename to src/main/ipc/runtime-environments/orcad-runtime-conversion-handlers.test.ts
index 6da525e48c01..4ba9187af9c3 100644
--- a/src/main/ipc/orcad-runtime-conversion-handlers.test.ts
+++ b/src/main/ipc/runtime-environments/orcad-runtime-conversion-handlers.test.ts
@@ -7,13 +7,13 @@ const mocks = vi.hoisted(() => ({
}))
vi.mock('electron', () => ({ ipcMain: { handle: mocks.handle } }))
-vi.mock('../managed-server/lifecycle/orcad-runtime-conversion', () => ({
+vi.mock('../../managed-server/lifecycle/orcad-runtime-conversion', () => ({
convertSshTargetToManagedOrcad: mocks.convert
}))
-vi.mock('../managed-server/lifecycle/orcad-managed-migration-status', () => ({
+vi.mock('../../managed-server/lifecycle/orcad-managed-migration-status', () => ({
listPendingManagedOrcadMigrations: mocks.pending
}))
-vi.mock('../managed-server/lifecycle/orcad-runtime-conversion-wiring', () => ({
+vi.mock('../../managed-server/lifecycle/orcad-runtime-conversion-wiring', () => ({
conversionCollaborators: () => ({ marker: 'live-collaborators' })
}))
diff --git a/src/main/ipc/orcad-runtime-conversion-handlers.ts b/src/main/ipc/runtime-environments/orcad-runtime-conversion-handlers.ts
similarity index 70%
rename from src/main/ipc/orcad-runtime-conversion-handlers.ts
rename to src/main/ipc/runtime-environments/orcad-runtime-conversion-handlers.ts
index de3d8931abdc..514945350c00 100644
--- a/src/main/ipc/orcad-runtime-conversion-handlers.ts
+++ b/src/main/ipc/runtime-environments/orcad-runtime-conversion-handlers.ts
@@ -2,10 +2,10 @@ import { ipcMain } from 'electron'
import type {
OrcadManagedConversionResult,
OrcadManagedPendingMigrationRow
-} from '../../shared/orcad-managed-runtime'
-import { listPendingManagedOrcadMigrations } from '../managed-server/lifecycle/orcad-managed-migration-status'
-import { convertSshTargetToManagedOrcad } from '../managed-server/lifecycle/orcad-runtime-conversion'
-import { conversionCollaborators } from '../managed-server/lifecycle/orcad-runtime-conversion-wiring'
+} from '../../../shared/orcad-managed-runtime'
+import { listPendingManagedOrcadMigrations } from '../../managed-server/lifecycle/orcad-managed-migration-status'
+import { convertSshTargetToManagedOrcad } from '../../managed-server/lifecycle/orcad-runtime-conversion'
+import { conversionCollaborators } from '../../managed-server/lifecycle/orcad-runtime-conversion-wiring'
import { requiredString } from './orcad-runtime-lifecycle-handlers'
export function registerOrcadRuntimeConversionHandlers(getUserDataPath: () => string): void {
diff --git a/src/main/ipc/orcad-runtime-lifecycle-handlers.test.ts b/src/main/ipc/runtime-environments/orcad-runtime-lifecycle-handlers.test.ts
similarity index 93%
rename from src/main/ipc/orcad-runtime-lifecycle-handlers.test.ts
rename to src/main/ipc/runtime-environments/orcad-runtime-lifecycle-handlers.test.ts
index b0de2efa3b5c..1268aba535b2 100644
--- a/src/main/ipc/orcad-runtime-lifecycle-handlers.test.ts
+++ b/src/main/ipc/runtime-environments/orcad-runtime-lifecycle-handlers.test.ts
@@ -8,10 +8,10 @@ const mocks = vi.hoisted(() => ({
}))
vi.mock('electron', () => ({ ipcMain: { handle: mocks.handle } }))
-vi.mock('../managed-server/lifecycle/orcad-runtime-deployment', () => ({
+vi.mock('../../managed-server/lifecycle/orcad-runtime-deployment', () => ({
createManagedOrcadEnvironment: mocks.deploy
}))
-vi.mock('../managed-server/lifecycle/orcad-runtime-status', () => ({
+vi.mock('../../managed-server/lifecycle/orcad-runtime-status', () => ({
getManagedOrcadRuntimeStatus: mocks.status
}))
vi.mock('./orcad-ssh-provisioning-handlers', () => ({
diff --git a/src/main/ipc/orcad-runtime-lifecycle-handlers.ts b/src/main/ipc/runtime-environments/orcad-runtime-lifecycle-handlers.ts
similarity index 79%
rename from src/main/ipc/orcad-runtime-lifecycle-handlers.ts
rename to src/main/ipc/runtime-environments/orcad-runtime-lifecycle-handlers.ts
index 0383bec36968..243c60251fff 100644
--- a/src/main/ipc/orcad-runtime-lifecycle-handlers.ts
+++ b/src/main/ipc/runtime-environments/orcad-runtime-lifecycle-handlers.ts
@@ -1,7 +1,7 @@
import { ipcMain } from 'electron'
-import type { OrcadManagedRuntimeStatus } from '../../shared/orcad-managed-runtime'
-import { createManagedOrcadEnvironment } from '../managed-server/lifecycle/orcad-runtime-deployment'
-import { getManagedOrcadRuntimeStatus } from '../managed-server/lifecycle/orcad-runtime-status'
+import type { OrcadManagedRuntimeStatus } from '../../../shared/orcad-managed-runtime'
+import { createManagedOrcadEnvironment } from '../../managed-server/lifecycle/orcad-runtime-deployment'
+import { getManagedOrcadRuntimeStatus } from '../../managed-server/lifecycle/orcad-runtime-status'
import { registerOrcadSshProvisioningHandlers } from './orcad-ssh-provisioning-handlers'
export function registerOrcadRuntimeLifecycleHandlers(options: {
diff --git a/src/main/ipc/orcad-runtime-maintenance-handlers.test.ts b/src/main/ipc/runtime-environments/orcad-runtime-maintenance-handlers.test.ts
similarity index 97%
rename from src/main/ipc/orcad-runtime-maintenance-handlers.test.ts
rename to src/main/ipc/runtime-environments/orcad-runtime-maintenance-handlers.test.ts
index e452664a91e6..e78f3c31e794 100644
--- a/src/main/ipc/orcad-runtime-maintenance-handlers.test.ts
+++ b/src/main/ipc/runtime-environments/orcad-runtime-maintenance-handlers.test.ts
@@ -11,12 +11,12 @@ const mocks = vi.hoisted(() => ({
}))
vi.mock('electron', () => ({ ipcMain: { handle: mocks.handle } }))
-vi.mock('../ssh/orcad-runtime-maintenance', () => ({
+vi.mock('../../ssh/orcad-runtime-maintenance', () => ({
updateManagedOrcadEnvironment: mocks.update,
rollbackManagedOrcadEnvironment: mocks.rollback,
recoverManagedOrcadEnvironment: mocks.recover
}))
-vi.mock('../managed-server/lifecycle/orcad-runtime-decommission', () => ({
+vi.mock('../../managed-server/lifecycle/orcad-runtime-decommission', () => ({
stopManagedOrcadEnvironment: mocks.stop,
cancelManagedOrcadStop: mocks.cancel
}))
diff --git a/src/main/ipc/orcad-runtime-maintenance-handlers.ts b/src/main/ipc/runtime-environments/orcad-runtime-maintenance-handlers.ts
similarity index 95%
rename from src/main/ipc/orcad-runtime-maintenance-handlers.ts
rename to src/main/ipc/runtime-environments/orcad-runtime-maintenance-handlers.ts
index 655b05195ab2..4ed7464cc52f 100644
--- a/src/main/ipc/orcad-runtime-maintenance-handlers.ts
+++ b/src/main/ipc/runtime-environments/orcad-runtime-maintenance-handlers.ts
@@ -1,5 +1,5 @@
import { ipcMain } from 'electron'
-import { registerManagedServerActions } from '../runtime/managed-server-actions-registry'
+import { registerManagedServerActions } from '../../runtime/managed-server-actions-registry'
import {
createManagedOrcadActions,
restartManagedOrcad,
diff --git a/src/main/ipc/orcad-ssh-provisioning-handlers.test.ts b/src/main/ipc/runtime-environments/orcad-ssh-provisioning-handlers.test.ts
similarity index 97%
rename from src/main/ipc/orcad-ssh-provisioning-handlers.test.ts
rename to src/main/ipc/runtime-environments/orcad-ssh-provisioning-handlers.test.ts
index 6d5fa72da348..0f88d8261117 100644
--- a/src/main/ipc/orcad-ssh-provisioning-handlers.test.ts
+++ b/src/main/ipc/runtime-environments/orcad-ssh-provisioning-handlers.test.ts
@@ -7,7 +7,7 @@ const mocks = vi.hoisted(() => ({
list: vi.fn()
}))
vi.mock('electron', () => ({ ipcMain: { handle: mocks.handle } }))
-vi.mock('../ssh/orcad-ssh-provisioning', () => ({
+vi.mock('../../ssh/orcad-ssh-provisioning', () => ({
createOrcadSshHost: mocks.create,
resumeOrcadSshHost: mocks.resume,
listPendingOrcadSshProvisioning: mocks.list
diff --git a/src/main/ipc/orcad-ssh-provisioning-handlers.ts b/src/main/ipc/runtime-environments/orcad-ssh-provisioning-handlers.ts
similarity index 83%
rename from src/main/ipc/orcad-ssh-provisioning-handlers.ts
rename to src/main/ipc/runtime-environments/orcad-ssh-provisioning-handlers.ts
index 31cdaeed6c2a..4077ca38d85b 100644
--- a/src/main/ipc/orcad-ssh-provisioning-handlers.ts
+++ b/src/main/ipc/runtime-environments/orcad-ssh-provisioning-handlers.ts
@@ -1,10 +1,10 @@
import { ipcMain } from 'electron'
-import type { OrcadSshProvisioningRequest } from '../../shared/orcad-ssh-provisioning'
+import type { OrcadSshProvisioningRequest } from '../../../shared/orcad-ssh-provisioning'
import {
createOrcadSshHost,
listPendingOrcadSshProvisioning,
resumeOrcadSshHost
-} from '../ssh/orcad-ssh-provisioning'
+} from '../../ssh/orcad-ssh-provisioning'
export function registerOrcadSshProvisioningHandlers(getUserDataPath: () => string): void {
ipcMain.handle(
diff --git a/src/main/ipc/runtime-environment-abortable-requests.ts b/src/main/ipc/runtime-environments/runtime-environment-abortable-requests.ts
similarity index 88%
rename from src/main/ipc/runtime-environment-abortable-requests.ts
rename to src/main/ipc/runtime-environments/runtime-environment-abortable-requests.ts
index a92c4c61b3a0..5fcaa67ad09b 100644
--- a/src/main/ipc/runtime-environment-abortable-requests.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-abortable-requests.ts
@@ -1,10 +1,10 @@
-import type { PairedRuntimeConnection } from '../../shared/paired-runtime-connection'
-import type { RuntimeCapability } from '../../shared/protocol-version'
-import { sendRemoteRuntimeRequest } from '../../shared/remote-runtime-client'
+import type { PairedRuntimeConnection } from '../../../shared/paired-runtime-connection'
+import type { RuntimeCapability } from '../../../shared/protocol-version'
+import { sendRemoteRuntimeRequest } from '../../../shared/remote-runtime-client'
import type {
RuntimeOrchestrationEnvelope,
RuntimeRpcResponse
-} from '../../shared/runtime-rpc-envelope'
+} from '../../../shared/runtime-rpc-envelope'
import {
sendRemoteRuntimeConnectionRequest,
sendRemoteRuntimeSharedControlRequest
diff --git a/src/main/ipc/runtime-environment-browser-client-host-handler.test.ts b/src/main/ipc/runtime-environments/runtime-environment-browser-client-host-handler.test.ts
similarity index 96%
rename from src/main/ipc/runtime-environment-browser-client-host-handler.test.ts
rename to src/main/ipc/runtime-environments/runtime-environment-browser-client-host-handler.test.ts
index 6819d8e87a24..e98e038f0d8b 100644
--- a/src/main/ipc/runtime-environment-browser-client-host-handler.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-browser-client-host-handler.test.ts
@@ -5,8 +5,8 @@ import {
BROWSER_CLIENT_PAGE_METADATA_RUNTIME_CAPABILITY,
BROWSER_NETWORK_EXECUTION_HOSTS_RUNTIME_CAPABILITY,
BROWSER_NETWORK_TUNNEL_RUNTIME_CAPABILITY
-} from '../../shared/protocol-version'
-import type { KnownRuntimeEnvironment } from '../../shared/runtime-environments'
+} from '../../../shared/protocol-version'
+import type { KnownRuntimeEnvironment } from '../../../shared/runtime-environments'
const {
handleMock,
@@ -25,13 +25,13 @@ const {
}))
vi.mock('electron', () => ({ ipcMain: { handle: handleMock } }))
-vi.mock('../../shared/runtime-environment-store', () => ({
+vi.mock('../../../shared/runtime-environment-store', () => ({
resolveEnvironment: resolveEnvironmentMock
}))
vi.mock('./runtime-environment-transport-routing', () => ({
getRuntimeEnvironmentStatus: getRuntimeEnvironmentStatusMock
}))
-vi.mock('../browser/paired-runtime-browser-client-host-runtime', () => ({
+vi.mock('../../browser/paired-runtime-browser-client-host-runtime', () => ({
startPairedRuntimeBrowserClientHost: startHostMock,
closePairedRuntimeBrowserClientHostEnvironment: closeHostMock
}))
diff --git a/src/main/ipc/runtime-environment-browser-client-host-handler.ts b/src/main/ipc/runtime-environments/runtime-environment-browser-client-host-handler.ts
similarity index 86%
rename from src/main/ipc/runtime-environment-browser-client-host-handler.ts
rename to src/main/ipc/runtime-environments/runtime-environment-browser-client-host-handler.ts
index fb380c30c3d9..da4437a5163b 100644
--- a/src/main/ipc/runtime-environment-browser-client-host-handler.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-browser-client-host-handler.ts
@@ -2,14 +2,14 @@ import { ipcMain } from 'electron'
import {
BrowserClientHostPlacementPreparationRequest,
type BrowserPageCreationPlacement
-} from '../../shared/browser-client-host-placement'
-import type { GlobalSettings } from '../../shared/global-settings-types'
-import { resolveEnvironment } from '../../shared/runtime-environment-store'
+} from '../../../shared/browser-client-host-placement'
+import type { GlobalSettings } from '../../../shared/global-settings-types'
+import { resolveEnvironment } from '../../../shared/runtime-environment-store'
import {
closePairedRuntimeBrowserClientHostEnvironment,
startPairedRuntimeBrowserClientHost
-} from '../browser/paired-runtime-browser-client-host-runtime'
-import { prepareBrowserClientHostPlacement } from '../browser/browser-client-host-placement-preparation'
+} from '../../browser/paired-runtime-browser-client-host-runtime'
+import { prepareBrowserClientHostPlacement } from '../../browser/browser-client-host-placement-preparation'
import { isRuntimeEnvironmentManuallyDisconnected } from './runtime-environment-connectivity-handlers'
import { getRuntimeEnvironmentStatus } from './runtime-environment-transport-routing'
diff --git a/src/main/ipc/runtime-environment-call-queue.ts b/src/main/ipc/runtime-environments/runtime-environment-call-queue.ts
similarity index 77%
rename from src/main/ipc/runtime-environment-call-queue.ts
rename to src/main/ipc/runtime-environments/runtime-environment-call-queue.ts
index c430c93fda49..558fa9e21d5d 100644
--- a/src/main/ipc/runtime-environment-call-queue.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-call-queue.ts
@@ -1,4 +1,4 @@
-import { RuntimeRpcCallQueuePool } from '../../shared/runtime-rpc-call-queue'
+import { RuntimeRpcCallQueuePool } from '../../../shared/runtime-rpc-call-queue'
const runtimeCallQueuePool = new RuntimeRpcCallQueuePool()
diff --git a/src/main/ipc/runtime-environment-capability-evidence.test.ts b/src/main/ipc/runtime-environments/runtime-environment-capability-evidence.test.ts
similarity index 97%
rename from src/main/ipc/runtime-environment-capability-evidence.test.ts
rename to src/main/ipc/runtime-environments/runtime-environment-capability-evidence.test.ts
index 2348f000fc0b..5f3a6ee8b4a3 100644
--- a/src/main/ipc/runtime-environment-capability-evidence.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-capability-evidence.test.ts
@@ -1,6 +1,6 @@
-import { pairedRuntimeConnectionFromOffer } from '../../shared/paired-runtime-connection'
+import { pairedRuntimeConnectionFromOffer } from '../../../shared/paired-runtime-connection'
import { beforeEach, describe, expect, it } from 'vitest'
-import type { PairingOffer } from '../../shared/pairing'
+import type { PairingOffer } from '../../../shared/pairing'
import {
advanceRuntimeEnvironmentCapabilityIncarnation,
applyRuntimeEnvironmentCapabilityVerdict,
diff --git a/src/main/ipc/runtime-environment-capability-evidence.ts b/src/main/ipc/runtime-environments/runtime-environment-capability-evidence.ts
similarity index 98%
rename from src/main/ipc/runtime-environment-capability-evidence.ts
rename to src/main/ipc/runtime-environments/runtime-environment-capability-evidence.ts
index 82f4780cadb3..858b75e6d1bb 100644
--- a/src/main/ipc/runtime-environment-capability-evidence.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-capability-evidence.ts
@@ -1,4 +1,4 @@
-import type { PairedRuntimeConnection } from '../../shared/paired-runtime-connection'
+import type { PairedRuntimeConnection } from '../../../shared/paired-runtime-connection'
export type RuntimeEnvironmentCapabilityVerdict = 'capable' | 'absent'
diff --git a/src/main/ipc/runtime-environment-cli-removal-routing.test.ts b/src/main/ipc/runtime-environments/runtime-environment-cli-removal-routing.test.ts
similarity index 91%
rename from src/main/ipc/runtime-environment-cli-removal-routing.test.ts
rename to src/main/ipc/runtime-environments/runtime-environment-cli-removal-routing.test.ts
index d5ad1e1ad609..eccf37423271 100644
--- a/src/main/ipc/runtime-environment-cli-removal-routing.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-cli-removal-routing.test.ts
@@ -1,21 +1,21 @@
-import { pairedRuntimeConnectionFromOffer } from '../../shared/paired-runtime-connection'
+import { pairedRuntimeConnectionFromOffer } from '../../../shared/paired-runtime-connection'
import { mkdtempSync, rmSync, writeFileSync } from 'node:fs'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
-import { encodePairingOffer } from '../../shared/pairing'
-import { REMOTE_RUNTIME_SHARED_CONTROL_CAPABILITY } from '../../shared/protocol-version'
-import type { RemoteRuntimeSubscription } from '../../shared/remote-runtime-client'
+import { encodePairingOffer } from '../../../shared/pairing'
+import { REMOTE_RUNTIME_SHARED_CONTROL_CAPABILITY } from '../../../shared/protocol-version'
+import type { RemoteRuntimeSubscription } from '../../../shared/remote-runtime-client'
import {
addEnvironmentFromPairingCode,
getEnvironmentStorePath,
removeEnvironment
-} from '../../shared/runtime-environment-store'
+} from '../../../shared/runtime-environment-store'
import {
getPreferredPairingOffer,
type KnownRuntimeEnvironment
-} from '../../shared/runtime-environments'
-import type { RuntimeRpcResponse } from '../../shared/runtime-rpc-envelope'
+} from '../../../shared/runtime-environments'
+import type { RuntimeRpcResponse } from '../../../shared/runtime-rpc-envelope'
import {
applyRuntimeEnvironmentCapabilityVerdict,
captureRuntimeEnvironmentCapabilityEvidence,
@@ -33,7 +33,7 @@ const { subscribeMock, supportsMock } = vi.hoisted(() => ({
}))
vi.mock('electron', () => ({ BrowserWindow: { getAllWindows: () => [] } }))
-vi.mock('../../shared/remote-runtime-client', async (importOriginal) => ({
+vi.mock('../../../shared/remote-runtime-client', async (importOriginal) => ({
...(await importOriginal()),
subscribeRemoteRuntimeRequest: subscribeMock
}))
diff --git a/src/main/ipc/runtime-environment-connectivity-handlers.ts b/src/main/ipc/runtime-environments/runtime-environment-connectivity-handlers.ts
similarity index 93%
rename from src/main/ipc/runtime-environment-connectivity-handlers.ts
rename to src/main/ipc/runtime-environments/runtime-environment-connectivity-handlers.ts
index b1f26a2d3850..c2d100156c6d 100644
--- a/src/main/ipc/runtime-environment-connectivity-handlers.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-connectivity-handlers.ts
@@ -4,20 +4,20 @@ import {
listEnvironments,
removeEnvironment,
resolveEnvironment
-} from '../../shared/runtime-environment-store'
+} from '../../../shared/runtime-environment-store'
import {
redactRuntimeEnvironment,
type PublicKnownRuntimeEnvironment
-} from '../../shared/runtime-environments'
+} from '../../../shared/runtime-environments'
import {
connectThroughOwningService,
removeThroughOwningService
} from './runtime-environment-host-service-ops'
-import { RemoteRuntimeClientError } from '../../shared/remote-runtime-client-error'
-import { RuntimeRpcCallQueueOverloadError } from '../../shared/runtime-rpc-call-queue'
-import type { RuntimeRpcFailure, RuntimeRpcResponse } from '../../shared/runtime-rpc-envelope'
-import type { RuntimeStatus } from '../../shared/runtime-types'
-import type { Store } from '../persistence'
+import { RemoteRuntimeClientError } from '../../../shared/remote-runtime-client-error'
+import { RuntimeRpcCallQueueOverloadError } from '../../../shared/runtime-rpc-call-queue'
+import type { RuntimeRpcFailure, RuntimeRpcResponse } from '../../../shared/runtime-rpc-envelope'
+import type { RuntimeStatus } from '../../../shared/runtime-types'
+import type { Store } from '../../persistence'
import { retireRemovedRuntimeEnvironment } from './runtime-environment-removal-cleanup'
import { readSettingsWithRuntimeEnvironmentPreference } from './runtime-environment-preference'
import { verifyAndAddRuntimeEnvironmentFromPairingCode } from './runtime-environment-pairing-verification'
@@ -37,18 +37,18 @@ import {
getRuntimeEnvironmentStatus
} from './runtime-environment-transport-routing'
import { publicRuntimeEnvironmentWithHostKey } from './runtime-environment-host-key'
-import { withWslOrcadAccountEnv } from '../wsl/wsl-orcad-account-env'
-import { clearSshCredentialDeclinedForEnvironment } from '../ssh/ssh-credential-decline'
+import { withWslOrcadAccountEnv } from '../../wsl/wsl-orcad-account-env'
+import { clearSshCredentialDeclinedForEnvironment } from '../../ssh/ssh-credential-decline'
import {
disconnectManagedHostOfEnvironmentForUser,
disconnectRuntimeEnvironmentForUser,
liftSshUserDisconnectForEnvironment
-} from './ssh-host-user-disconnect'
+} from '../ssh/ssh-host-user-disconnect'
import {
observeWslOrcadHostResponse,
wslOrcadHostSupports
-} from '../wsl/wsl-orcad-host-environments'
-import { assertWslHostReachable, isGatedOffWslHost } from '../wsl/wsl-host-gate'
+} from '../../wsl/wsl-orcad-host-environments'
+import { assertWslHostReachable, isGatedOffWslHost } from '../../wsl/wsl-host-gate'
function manuallyDisconnectedResponse(
environment: ReturnType
diff --git a/src/main/ipc/runtime-environment-diagnostics-broadcast.test.ts b/src/main/ipc/runtime-environments/runtime-environment-diagnostics-broadcast.test.ts
similarity index 100%
rename from src/main/ipc/runtime-environment-diagnostics-broadcast.test.ts
rename to src/main/ipc/runtime-environments/runtime-environment-diagnostics-broadcast.test.ts
diff --git a/src/main/ipc/runtime-environment-diagnostics-broadcast.ts b/src/main/ipc/runtime-environments/runtime-environment-diagnostics-broadcast.ts
similarity index 82%
rename from src/main/ipc/runtime-environment-diagnostics-broadcast.ts
rename to src/main/ipc/runtime-environments/runtime-environment-diagnostics-broadcast.ts
index 3701170ee164..eb099dc6a901 100644
--- a/src/main/ipc/runtime-environment-diagnostics-broadcast.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-diagnostics-broadcast.ts
@@ -1,6 +1,6 @@
import { BrowserWindow } from 'electron'
-import type { RemoteRuntimeSharedConnectionDiagnostics } from '../../shared/remote-runtime-shared-control-types'
-import { RUNTIME_ENVIRONMENT_DIAGNOSTICS_CHANNEL } from '../../shared/runtime-environment-diagnostics'
+import type { RemoteRuntimeSharedConnectionDiagnostics } from '../../../shared/remote-runtime-shared-control-types'
+import { RUNTIME_ENVIRONMENT_DIAGNOSTICS_CHANNEL } from '../../../shared/runtime-environment-diagnostics'
export { RUNTIME_ENVIRONMENT_DIAGNOSTICS_CHANNEL }
diff --git a/src/main/ipc/runtime-environment-federated-read-routing.test.ts b/src/main/ipc/runtime-environments/runtime-environment-federated-read-routing.test.ts
similarity index 95%
rename from src/main/ipc/runtime-environment-federated-read-routing.test.ts
rename to src/main/ipc/runtime-environments/runtime-environment-federated-read-routing.test.ts
index 9433e4f28054..8b773083f367 100644
--- a/src/main/ipc/runtime-environment-federated-read-routing.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-federated-read-routing.test.ts
@@ -4,10 +4,10 @@ import { mkdtempSync, rmSync } from 'node:fs'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
-import { encodePairingOffer } from '../../shared/pairing'
-import { REMOTE_RUNTIME_SHARED_CONTROL_CAPABILITY } from '../../shared/protocol-version'
-import { ELECTRON_REMOTE_RUNTIME_CLIENT_CAPABILITIES } from '../../shared/electron-remote-runtime-client-capabilities'
-import { addEnvironmentFromPairingCode } from '../../shared/runtime-environment-store'
+import { encodePairingOffer } from '../../../shared/pairing'
+import { REMOTE_RUNTIME_SHARED_CONTROL_CAPABILITY } from '../../../shared/protocol-version'
+import { ELECTRON_REMOTE_RUNTIME_CLIENT_CAPABILITIES } from '../../../shared/electron-remote-runtime-client-capabilities'
+import { addEnvironmentFromPairingCode } from '../../../shared/runtime-environment-store'
const { sendRemoteRuntimeRequestMock, sendRemoteRuntimeSharedControlRequestMock } = vi.hoisted(
() => ({
@@ -16,7 +16,7 @@ const { sendRemoteRuntimeRequestMock, sendRemoteRuntimeSharedControlRequestMock
})
)
-vi.mock('../../shared/remote-runtime-client', () => ({
+vi.mock('../../../shared/remote-runtime-client', () => ({
sendRemoteRuntimeRequest: sendRemoteRuntimeRequestMock
}))
diff --git a/src/main/ipc/runtime-environment-federated-read-transport.bench.test.ts b/src/main/ipc/runtime-environments/runtime-environment-federated-read-transport.bench.test.ts
similarity index 94%
rename from src/main/ipc/runtime-environment-federated-read-transport.bench.test.ts
rename to src/main/ipc/runtime-environments/runtime-environment-federated-read-transport.bench.test.ts
index 9e0dc046b797..49b8681daace 100644
--- a/src/main/ipc/runtime-environment-federated-read-transport.bench.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-federated-read-transport.bench.test.ts
@@ -1,11 +1,11 @@
-import { pairedRuntimeConnectionFromOffer } from '../../shared/paired-runtime-connection'
+import { pairedRuntimeConnectionFromOffer } from '../../../shared/paired-runtime-connection'
import { readFileSync } from 'node:fs'
import { performance } from 'node:perf_hooks'
import { join } from 'node:path'
import { describe, expect, it, vi } from 'vitest'
-import { sendRemoteRuntimeRequest } from '../../shared/remote-runtime-client'
-import { RemoteRuntimeSharedControlConnection } from '../../shared/remote-runtime-shared-control-connection'
-import { RuntimeEnvironmentStoreSchema } from '../../shared/runtime-environments'
+import { sendRemoteRuntimeRequest } from '../../../shared/remote-runtime-client'
+import { RemoteRuntimeSharedControlConnection } from '../../../shared/remote-runtime-shared-control-connection'
+import { RuntimeEnvironmentStoreSchema } from '../../../shared/runtime-environments'
const runLiveBenchmark = isFederatedReadBenchmarkEnabled(process.env.ORCA_FEDERATED_READ_BENCH)
diff --git a/src/main/ipc/runtime-environment-handler-channels.ts b/src/main/ipc/runtime-environments/runtime-environment-handler-channels.ts
similarity index 100%
rename from src/main/ipc/runtime-environment-handler-channels.ts
rename to src/main/ipc/runtime-environments/runtime-environment-handler-channels.ts
diff --git a/src/main/ipc/runtime-environment-host-dispatch.test.ts b/src/main/ipc/runtime-environments/runtime-environment-host-dispatch.test.ts
similarity index 95%
rename from src/main/ipc/runtime-environment-host-dispatch.test.ts
rename to src/main/ipc/runtime-environments/runtime-environment-host-dispatch.test.ts
index cdf919f90820..00752f02cea4 100644
--- a/src/main/ipc/runtime-environment-host-dispatch.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-host-dispatch.test.ts
@@ -20,7 +20,7 @@ const mocks = vi.hoisted(() => {
})
vi.mock('electron', () => ({ ipcMain: { handle: mocks.handle } }))
-vi.mock('../../shared/runtime-environment-store', () => ({
+vi.mock('../../../shared/runtime-environment-store', () => ({
addEnvironmentFromPairingCode: vi.fn(),
listEnvironments: vi.fn(() => []),
removeEnvironment: mocks.removeEnvironment,
@@ -37,14 +37,16 @@ vi.mock('./runtime-environment-transport-routing', () => ({
callRuntimeEnvironment: vi.fn(),
getRuntimeEnvironmentStatus: mocks.getStatus
}))
-vi.mock('../ssh/ssh-credential-decline', () => ({
+vi.mock('../../ssh/ssh-credential-decline', () => ({
clearSshCredentialDeclinedForEnvironment: mocks.clearDecline
}))
-vi.mock('../wsl/wsl-host-service-instance', () => ({ getWslHostService: () => mocks.wsl.service }))
+vi.mock('../../wsl/wsl-host-service-instance', () => ({
+ getWslHostService: () => mocks.wsl.service
+}))
import { registerRuntimeEnvironmentConnectivityHandlers } from './runtime-environment-connectivity-handlers'
-import { WSL_HOSTS_GATED_OFF_MESSAGE } from '../wsl/wsl-host-gate'
-import { WSL_HOSTS_INTERNAL_GATE_ENV } from '../../shared/wsl-host-internal-gate'
+import { WSL_HOSTS_GATED_OFF_MESSAGE } from '../../wsl/wsl-host-gate'
+import { WSL_HOSTS_INTERNAL_GATE_ENV } from '../../../shared/wsl-host-internal-gate'
const endpoints = [
{
diff --git a/src/main/ipc/runtime-environment-host-key.test.ts b/src/main/ipc/runtime-environments/runtime-environment-host-key.test.ts
similarity index 93%
rename from src/main/ipc/runtime-environment-host-key.test.ts
rename to src/main/ipc/runtime-environments/runtime-environment-host-key.test.ts
index 06e391fa5e9e..bc36a8293f64 100644
--- a/src/main/ipc/runtime-environment-host-key.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-host-key.test.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from 'vitest'
-import type { KnownRuntimeEnvironment } from '../../shared/runtime-environments'
+import type { KnownRuntimeEnvironment } from '../../../shared/runtime-environments'
import { publicRuntimeEnvironmentWithHostKey } from './runtime-environment-host-key'
function environment(publicKeyB64: string): KnownRuntimeEnvironment {
diff --git a/src/main/ipc/runtime-environment-host-key.ts b/src/main/ipc/runtime-environments/runtime-environment-host-key.ts
similarity index 95%
rename from src/main/ipc/runtime-environment-host-key.ts
rename to src/main/ipc/runtime-environments/runtime-environment-host-key.ts
index 881fd6fee98d..3d939ae08afd 100644
--- a/src/main/ipc/runtime-environment-host-key.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-host-key.ts
@@ -4,7 +4,7 @@ import {
redactRuntimeEnvironment,
type KnownRuntimeEnvironment,
type PublicKnownRuntimeEnvironment
-} from '../../shared/runtime-environments'
+} from '../../../shared/runtime-environments'
/**
* The redacted record plus a digest of the host's E2EE public key. The host keeps that key in its
diff --git a/src/main/ipc/runtime-environment-host-service-ops.ts b/src/main/ipc/runtime-environments/runtime-environment-host-service-ops.ts
similarity index 79%
rename from src/main/ipc/runtime-environment-host-service-ops.ts
rename to src/main/ipc/runtime-environments/runtime-environment-host-service-ops.ts
index 3c9117cbbe2f..fdf6abfa4869 100644
--- a/src/main/ipc/runtime-environment-host-service-ops.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-host-service-ops.ts
@@ -1,7 +1,7 @@
/** Connect and remove for hosts a desktop service owns (WSL); network hosts need neither. */
-import { classifyRuntimeEnvironmentHost } from '../../shared/runtime-environment-host-kind'
-import type { KnownRuntimeEnvironment } from '../../shared/runtime-environments'
-import { getWslHostService } from '../wsl/wsl-host-service-instance'
+import { classifyRuntimeEnvironmentHost } from '../../../shared/runtime-environment-host-kind'
+import type { KnownRuntimeEnvironment } from '../../../shared/runtime-environments'
+import { getWslHostService } from '../../wsl/wsl-host-service-instance'
/** An explicit user connect; may boot a WSL host's distro. */
export async function connectThroughOwningService(
diff --git a/src/main/ipc/runtime-environment-managed-host-disconnect.test.ts b/src/main/ipc/runtime-environments/runtime-environment-managed-host-disconnect.test.ts
similarity index 92%
rename from src/main/ipc/runtime-environment-managed-host-disconnect.test.ts
rename to src/main/ipc/runtime-environments/runtime-environment-managed-host-disconnect.test.ts
index 3862f99c9ee7..ad86b3f5c6ac 100644
--- a/src/main/ipc/runtime-environment-managed-host-disconnect.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-managed-host-disconnect.test.ts
@@ -17,7 +17,7 @@ vi.mock('electron', () => ({
hoisted.handlers.set(channel, handler)
}
}))
-vi.mock('../../shared/runtime-environment-store', async (importOriginal) => ({
+vi.mock('../../../shared/runtime-environment-store', async (importOriginal) => ({
...(await importOriginal()),
resolveEnvironment: () => hoisted.environment,
listEnvironments: () => [hoisted.environment]
@@ -35,8 +35,8 @@ vi.mock('./runtime-environment-transport-routing', () => ({
callRuntimeEnvironment: vi.fn(),
getRuntimeEnvironmentStatus: vi.fn(async () => ({ ok: true }))
}))
-vi.mock('./ssh-session-teardown', () => ({ disconnectRegisteredSshTarget: hoisted.teardown }))
-vi.mock('../ssh/ssh-target-registry', async (importOriginal) => ({
+vi.mock('../ssh/ssh-session-teardown', () => ({ disconnectRegisteredSshTarget: hoisted.teardown }))
+vi.mock('../../ssh/ssh-target-registry', async (importOriginal) => ({
...(await importOriginal()),
connectRegisteredSshTarget: hoisted.connectHost
}))
@@ -46,7 +46,10 @@ import {
clearRuntimeEnvironmentManualDisconnect,
isRuntimeEnvironmentManuallyDisconnected
} from './runtime-environment-manual-disconnect'
-import { isSshUserDisconnected, resetSshUserDisconnectsForTests } from '../ssh/ssh-user-disconnect'
+import {
+ isSshUserDisconnected,
+ resetSshUserDisconnectsForTests
+} from '../../ssh/ssh-user-disconnect'
const deployment = {
kind: 'ssh',
diff --git a/src/main/ipc/runtime-environment-managed-tunnel.test.ts b/src/main/ipc/runtime-environments/runtime-environment-managed-tunnel.test.ts
similarity index 81%
rename from src/main/ipc/runtime-environment-managed-tunnel.test.ts
rename to src/main/ipc/runtime-environments/runtime-environment-managed-tunnel.test.ts
index a90f26a1d088..69f5213fa434 100644
--- a/src/main/ipc/runtime-environment-managed-tunnel.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-managed-tunnel.test.ts
@@ -1,7 +1,7 @@
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
-import type * as ServingModule from '../managed-server/lifecycle/orcad-managed-serving'
-import type { ManagedOrcadStartListener } from '../managed-server/lifecycle/orcad-managed-serving'
-import type { SshTarget } from '../../shared/ssh-types'
+import type * as ServingModule from '../../managed-server/lifecycle/orcad-managed-serving'
+import type { ManagedOrcadStartListener } from '../../managed-server/lifecycle/orcad-managed-serving'
+import type { SshTarget } from '../../../shared/ssh-types'
const mocks = vi.hoisted(() => {
const startListener: { current: ManagedOrcadStartListener | null } = { current: null }
@@ -22,7 +22,7 @@ const mocks = vi.hoisted(() => {
}
})
-vi.mock('../../shared/runtime-environment-store', () => ({
+vi.mock('../../../shared/runtime-environment-store', () => ({
resolveEnvironment: (_userData: string, id: string) => {
const environment = mocks.environments[id]
if (!environment) {
@@ -33,43 +33,46 @@ vi.mock('../../shared/runtime-environment-store', () => ({
return { ...environment, read: mocks.reads[id] }
}
}))
-vi.mock('../wsl/wsl-host-service-instance', () => ({
+vi.mock('../../wsl/wsl-host-service-instance', () => ({
getWslHostService: () =>
mocks.hasWslService ? { ensureForRuntimeCall: mocks.ensureForRuntimeCall } : null
}))
-vi.mock('../ssh/managed-server-update-deps', () => ({ managedServerUpdateDeps: () => ({}) }))
-vi.mock('../managed-server/lifecycle/orcad-managed-tunnel', () => ({
+vi.mock('../../ssh/managed-server-update-deps', () => ({ managedServerUpdateDeps: () => ({}) }))
+vi.mock('../../managed-server/lifecycle/orcad-managed-tunnel', () => ({
ensureOrcadManagedTunnel: mocks.ensureTunnel,
rebuildOrcadManagedTunnel: mocks.rebuildTunnel
}))
-vi.mock('../managed-server/lifecycle/orcad-managed-serving-verify', () => ({
+vi.mock('../../managed-server/lifecycle/orcad-managed-serving-verify', () => ({
verifyOrcadManagedServing: mocks.verify
}))
-vi.mock('../managed-server/lifecycle/orcad-managed-update-on-restore', () => ({
+vi.mock('../../managed-server/lifecycle/orcad-managed-update-on-restore', () => ({
updateManagedOrcadOnRestore: mocks.restoreUpdate,
redeployStoppedManagedOrcad: mocks.redeploy
}))
-vi.mock('../ssh/ssh-host-server-status', () => ({ setSshHostServerStatus: vi.fn() }))
-vi.mock('../ssh/ssh-target-registry', () => ({ getSshTargetRegistryStore: () => null }))
-vi.mock('./ssh-ipc-context', () => ({ connectionManager: null, getCurrentMainWindow: () => null }))
-vi.mock('./ssh-renderer-broadcast', () => ({ broadcastSshState: vi.fn() }))
-vi.mock('./ssh-host-launch-session-note', () => ({
+vi.mock('../../ssh/ssh-host-server-status', () => ({ setSshHostServerStatus: vi.fn() }))
+vi.mock('../../ssh/ssh-target-registry', () => ({ getSshTargetRegistryStore: () => null }))
+vi.mock('../ssh/ssh-ipc-context', () => ({
+ connectionManager: null,
+ getCurrentMainWindow: () => null
+}))
+vi.mock('../ssh/ssh-renderer-broadcast', () => ({ broadcastSshState: vi.fn() }))
+vi.mock('../ssh/ssh-host-launch-session-note', () => ({
forgetLaunchSessionVerdict: mocks.forgetVerdict
}))
-vi.mock('../managed-server/lifecycle/orcad-managed-serving', async (importOriginal) => ({
+vi.mock('../../managed-server/lifecycle/orcad-managed-serving', async (importOriginal) => ({
...(await importOriginal()),
setManagedOrcadStartListener: (listener: ManagedOrcadStartListener | null) => {
mocks.startListener.current = listener
}
}))
-import { MANAGED_ORCAD_NOT_ACTIVATED_DETAIL } from '../managed-server/lifecycle/orcad-managed-serving'
+import { MANAGED_ORCAD_NOT_ACTIVATED_DETAIL } from '../../managed-server/lifecycle/orcad-managed-serving'
import {
installManagedOrcadStartStatus,
resolveManagedRuntimeEnvironment
} from './runtime-environment-managed-tunnel'
-import { WSL_HOSTS_GATED_OFF_MESSAGE } from '../wsl/wsl-host-gate'
-import { WSL_HOSTS_INTERNAL_GATE_ENV } from '../../shared/wsl-host-internal-gate'
+import { WSL_HOSTS_GATED_OFF_MESSAGE } from '../../wsl/wsl-host-gate'
+import { WSL_HOSTS_INTERNAL_GATE_ENV } from '../../../shared/wsl-host-internal-gate'
describe('resolving a managed runtime for a call', () => {
beforeEach(() => vi.clearAllMocks())
diff --git a/src/main/ipc/runtime-environment-managed-tunnel.ts b/src/main/ipc/runtime-environments/runtime-environment-managed-tunnel.ts
similarity index 84%
rename from src/main/ipc/runtime-environment-managed-tunnel.ts
rename to src/main/ipc/runtime-environments/runtime-environment-managed-tunnel.ts
index d2e3b326e48e..50387f53f17f 100644
--- a/src/main/ipc/runtime-environment-managed-tunnel.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-managed-tunnel.ts
@@ -1,35 +1,35 @@
-import { resolveEnvironment } from '../../shared/runtime-environment-store'
+import { resolveEnvironment } from '../../../shared/runtime-environment-store'
import {
getOrcadSshDeployment,
type KnownRuntimeEnvironment
-} from '../../shared/runtime-environments'
-import { classifyRuntimeEnvironmentHost } from '../../shared/runtime-environment-host-kind'
+} from '../../../shared/runtime-environments'
+import { classifyRuntimeEnvironmentHost } from '../../../shared/runtime-environment-host-kind'
import type {
SshManagedServerStatus,
SshManagedServerUpdateNote,
SshTarget
-} from '../../shared/ssh-types'
-import { managedServerUpdateDeps } from '../ssh/managed-server-update-deps'
+} from '../../../shared/ssh-types'
+import { managedServerUpdateDeps } from '../../ssh/managed-server-update-deps'
import {
ensureOrcadManagedTunnel,
rebuildOrcadManagedTunnel
-} from '../managed-server/lifecycle/orcad-managed-tunnel'
-import { verifyOrcadManagedServing } from '../managed-server/lifecycle/orcad-managed-serving-verify'
+} from '../../managed-server/lifecycle/orcad-managed-tunnel'
+import { verifyOrcadManagedServing } from '../../managed-server/lifecycle/orcad-managed-serving-verify'
import {
MANAGED_ORCAD_NOT_ACTIVATED_DETAIL,
setManagedOrcadStartListener,
type OrcadManagedServing
-} from '../managed-server/lifecycle/orcad-managed-serving'
+} from '../../managed-server/lifecycle/orcad-managed-serving'
import {
redeployStoppedManagedOrcad,
updateManagedOrcadOnRestore
-} from '../managed-server/lifecycle/orcad-managed-update-on-restore'
-import { getSshHostServerStatus, setSshHostServerStatus } from '../ssh/ssh-host-server-status'
-import { getSshTargetRegistryStore } from '../ssh/ssh-target-registry'
-import { connectionManager, getCurrentMainWindow } from './ssh-ipc-context'
-import { getWslHostService } from '../wsl/wsl-host-service-instance'
-import { assertWslHostReachable } from '../wsl/wsl-host-gate'
-import { broadcastSshState } from './ssh-renderer-broadcast'
+} from '../../managed-server/lifecycle/orcad-managed-update-on-restore'
+import { getSshHostServerStatus, setSshHostServerStatus } from '../../ssh/ssh-host-server-status'
+import { getSshTargetRegistryStore } from '../../ssh/ssh-target-registry'
+import { connectionManager, getCurrentMainWindow } from '../ssh/ssh-ipc-context'
+import { getWslHostService } from '../../wsl/wsl-host-service-instance'
+import { assertWslHostReachable } from '../../wsl/wsl-host-gate'
+import { broadcastSshState } from '../ssh/ssh-renderer-broadcast'
export async function resolveManagedRuntimeEnvironment(
userDataPath: string,
@@ -84,7 +84,7 @@ async function prepareNetworkServerForCall(
// Why after the update: its settled status would otherwise replace the warning.
// Why lazy: the note publishes through this module.
void Promise.resolve(update)
- .then(() => import('./ssh-host-launch-session-note'))
+ .then(() => import('../ssh/ssh-host-launch-session-note'))
.then(({ noteEndedLaunchSshSession }) =>
noteEndedLaunchSshSession(targetId, environment.id)
)
@@ -96,7 +96,7 @@ async function prepareNetworkServerForCall(
/** This session relaunched the server, so a cached "launch session ended" verdict is stale. */
async function forgetLaunchSessionVerdictLazily(targetId: string): Promise {
// Why lazy: the note module publishes through this one.
- const { forgetLaunchSessionVerdict } = await import('./ssh-host-launch-session-note')
+ const { forgetLaunchSessionVerdict } = await import('../ssh/ssh-host-launch-session-note')
forgetLaunchSessionVerdict(targetId)
}
diff --git a/src/main/ipc/runtime-environment-manual-disconnect.ts b/src/main/ipc/runtime-environments/runtime-environment-manual-disconnect.ts
similarity index 95%
rename from src/main/ipc/runtime-environment-manual-disconnect.ts
rename to src/main/ipc/runtime-environments/runtime-environment-manual-disconnect.ts
index cc7315d6ec99..8803289ba89a 100644
--- a/src/main/ipc/runtime-environment-manual-disconnect.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-manual-disconnect.ts
@@ -1,7 +1,7 @@
import {
requestDesktopBrowserBridgeReconcile,
resetDesktopBrowserBridgeEnvironment
-} from './desktop-browser-bridge-reconcile'
+} from '../desktop-browser-bridge-reconcile'
const manuallyDisconnectedEnvironmentIds = new Set()
diff --git a/src/main/ipc/runtime-environment-mobile-relay-hosts.test.ts b/src/main/ipc/runtime-environments/runtime-environment-mobile-relay-hosts.test.ts
similarity index 97%
rename from src/main/ipc/runtime-environment-mobile-relay-hosts.test.ts
rename to src/main/ipc/runtime-environments/runtime-environment-mobile-relay-hosts.test.ts
index 2882fe00f6b0..241d29f67767 100644
--- a/src/main/ipc/runtime-environment-mobile-relay-hosts.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-mobile-relay-hosts.test.ts
@@ -9,10 +9,10 @@ const mocks = vi.hoisted(() => {
})
vi.mock('electron', () => ({ app: { getPath: () => '/user-data' } }))
-vi.mock('../../shared/runtime-environment-store', () => ({
+vi.mock('../../../shared/runtime-environment-store', () => ({
listEnvironments: () => mocks.environments
}))
-vi.mock('../../shared/runtime-environments', async (importOriginal) => ({
+vi.mock('../../../shared/runtime-environments', async (importOriginal) => ({
...(await importOriginal>()),
getPreferredPairingOffer: (environment: { endpoint: string }) => ({
endpoint: environment.endpoint
@@ -21,7 +21,7 @@ vi.mock('../../shared/runtime-environments', async (importOriginal) => ({
vi.mock('./runtime-environment-managed-tunnel', () => ({
resolveManagedRuntimeEnvironment: mocks.resolveManaged
}))
-vi.mock('../ssh/ssh-target-registry', () => ({
+vi.mock('../../ssh/ssh-target-registry', () => ({
listRegisteredSshTargets: () => mocks.sshTargets,
getRegisteredSshState: (targetId: string) => mocks.sshStates.get(targetId)
}))
diff --git a/src/main/ipc/runtime-environment-mobile-relay-hosts.ts b/src/main/ipc/runtime-environments/runtime-environment-mobile-relay-hosts.ts
similarity index 90%
rename from src/main/ipc/runtime-environment-mobile-relay-hosts.ts
rename to src/main/ipc/runtime-environments/runtime-environment-mobile-relay-hosts.ts
index fa875217a944..ac3887cab7cb 100644
--- a/src/main/ipc/runtime-environment-mobile-relay-hosts.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-mobile-relay-hosts.ts
@@ -1,29 +1,29 @@
import { app } from 'electron'
-import { pairedRuntimeBrowserClientHostsPage } from '../browser/paired-runtime-browser-client-host-runtime'
-import { listEnvironments } from '../../shared/runtime-environment-store'
+import { pairedRuntimeBrowserClientHostsPage } from '../../browser/paired-runtime-browser-client-host-runtime'
+import { listEnvironments } from '../../../shared/runtime-environment-store'
import {
getPreferredPairingOffer,
type KnownRuntimeEnvironment
-} from '../../shared/runtime-environments'
-import { classifyRuntimeEnvironmentHost } from '../../shared/runtime-environment-host-kind'
+} from '../../../shared/runtime-environments'
+import { classifyRuntimeEnvironmentHost } from '../../../shared/runtime-environment-host-kind'
import {
runtimeEnvironmentStatusFromSnapshot,
type RuntimeEnvironmentStatus
-} from '../../shared/runtime-host-status'
+} from '../../../shared/runtime-host-status'
import type {
MobileDesktopRelayHosts,
MobileDesktopRelayHostWatch
-} from '../runtime/mobile-desktop-relay/mobile-desktop-relay-hosts'
+} from '../../runtime/mobile-desktop-relay/mobile-desktop-relay-hosts'
import { resolveManagedRuntimeEnvironment } from './runtime-environment-managed-tunnel'
-import type { SshConnectionState } from '../../shared/ssh-types'
-import { getRegisteredSshState, listRegisteredSshTargets } from '../ssh/ssh-target-registry'
+import type { SshConnectionState } from '../../../shared/ssh-types'
+import { getRegisteredSshState, listRegisteredSshTargets } from '../../ssh/ssh-target-registry'
import { getRuntimeEnvironmentStatusSnapshots } from './runtime-environment-request-connections'
import {
callRuntimeEnvironment,
subscribeRuntimeEnvironment
} from './runtime-environment-transport-routing'
-import type { RemoteRuntimeSubscription } from '../../shared/remote-runtime-client'
-import { isRuntimeSubscriptionReplayResponse } from '../../shared/runtime-subscription-replay'
+import type { RemoteRuntimeSubscription } from '../../../shared/remote-runtime-client'
+import { isRuntimeSubscriptionReplayResponse } from '../../../shared/runtime-subscription-replay'
import { isRuntimeEnvironmentManuallyDisconnected } from './runtime-environment-manual-disconnect'
import { onRuntimeEnvironmentStatusPublished } from './runtime-environment-status-owner'
import { getRuntimeEnvironmentTransportGeneration } from './runtime-environment-transport-generation'
diff --git a/src/main/ipc/runtime-environment-pairing-verification.ts b/src/main/ipc/runtime-environments/runtime-environment-pairing-verification.ts
similarity index 91%
rename from src/main/ipc/runtime-environment-pairing-verification.ts
rename to src/main/ipc/runtime-environments/runtime-environment-pairing-verification.ts
index f592d4c7d96c..4b7c9b098007 100644
--- a/src/main/ipc/runtime-environment-pairing-verification.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-pairing-verification.ts
@@ -1,25 +1,28 @@
-import { pairedRuntimeConnectionFromOffer } from '../../shared/paired-runtime-connection'
+import { pairedRuntimeConnectionFromOffer } from '../../../shared/paired-runtime-connection'
import {
addEnvironmentFromPairingCode,
resolveEnvironment,
RuntimeEnvironmentStoreError,
updateEnvironmentFromPairingCode
-} from '../../shared/runtime-environment-store'
-import { parseHostAccessLink, type ParsedHostAccessLink } from '../../shared/remote-pairing-address'
+} from '../../../shared/runtime-environment-store'
+import {
+ parseHostAccessLink,
+ type ParsedHostAccessLink
+} from '../../../shared/remote-pairing-address'
import {
verifyRemotePairingRuntimeStatus,
type RemotePairingFailure,
type VerifyAndAddRuntimeEnvironmentResult
-} from '../../shared/remote-pairing-verification'
-import { RemoteRuntimeClientError } from '../../shared/remote-runtime-client-error'
-import { sendRemoteRuntimeRequest } from '../../shared/remote-runtime-client'
-import { ELECTRON_REMOTE_RUNTIME_CLIENT_CAPABILITIES } from '../../shared/electron-remote-runtime-client-capabilities'
+} from '../../../shared/remote-pairing-verification'
+import { RemoteRuntimeClientError } from '../../../shared/remote-runtime-client-error'
+import { sendRemoteRuntimeRequest } from '../../../shared/remote-runtime-client'
+import { ELECTRON_REMOTE_RUNTIME_CLIENT_CAPABILITIES } from '../../../shared/electron-remote-runtime-client-capabilities'
import {
getPreferredPairingOffer,
isEphemeralVmRuntimeEnvironment,
redactRuntimeEnvironment
-} from '../../shared/runtime-environments'
-import type { RuntimeStatus } from '../../shared/runtime-types'
+} from '../../../shared/runtime-environments'
+import type { RuntimeStatus } from '../../../shared/runtime-types'
type VerifyAndAddRuntimeEnvironmentArgs = {
name: string
diff --git a/src/main/ipc/runtime-environment-preference.test.ts b/src/main/ipc/runtime-environments/runtime-environment-preference.test.ts
similarity index 95%
rename from src/main/ipc/runtime-environment-preference.test.ts
rename to src/main/ipc/runtime-environments/runtime-environment-preference.test.ts
index 1b5c9cd84edb..ae8b61f943f6 100644
--- a/src/main/ipc/runtime-environment-preference.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-preference.test.ts
@@ -2,16 +2,16 @@ import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
-import { getDefaultSettings } from '../../shared/constants'
-import { encodePairingOffer } from '../../shared/pairing'
+import { getDefaultSettings } from '../../../shared/constants'
+import { encodePairingOffer } from '../../../shared/pairing'
import {
addEnvironmentFromPairingCode,
getEnvironmentStorePath,
listEnvironments,
removeEnvironment
-} from '../../shared/runtime-environment-store'
-import type { GlobalSettings } from '../../shared/global-settings-types'
-import type { Store } from '../persistence'
+} from '../../../shared/runtime-environment-store'
+import type { GlobalSettings } from '../../../shared/global-settings-types'
+import type { Store } from '../../persistence'
import {
readSettingsWithRuntimeEnvironmentPreference,
watchRuntimeEnvironmentPreference
diff --git a/src/main/ipc/runtime-environment-preference.ts b/src/main/ipc/runtime-environments/runtime-environment-preference.ts
similarity index 91%
rename from src/main/ipc/runtime-environment-preference.ts
rename to src/main/ipc/runtime-environments/runtime-environment-preference.ts
index 49a2e44817a1..bf63f3c1a0f7 100644
--- a/src/main/ipc/runtime-environment-preference.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-preference.ts
@@ -1,8 +1,11 @@
import { watch, type FSWatcher } from 'node:fs'
import { basename } from 'node:path'
-import type { GlobalSettings } from '../../shared/global-settings-types'
-import { getEnvironmentStorePath, listEnvironments } from '../../shared/runtime-environment-store'
-import type { Store } from '../persistence'
+import type { GlobalSettings } from '../../../shared/global-settings-types'
+import {
+ getEnvironmentStorePath,
+ listEnvironments
+} from '../../../shared/runtime-environment-store'
+import type { Store } from '../../persistence'
type PreferenceStore = Pick
diff --git a/src/main/ipc/runtime-environment-recovery-handler.test.ts b/src/main/ipc/runtime-environments/runtime-environment-recovery-handler.test.ts
similarity index 95%
rename from src/main/ipc/runtime-environment-recovery-handler.test.ts
rename to src/main/ipc/runtime-environments/runtime-environment-recovery-handler.test.ts
index a783802339f4..ecd1497133f0 100644
--- a/src/main/ipc/runtime-environment-recovery-handler.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-recovery-handler.test.ts
@@ -13,7 +13,7 @@ vi.mock('electron', () => ({
vi.mock('./runtime-environment-request-connections', () => ({
retryRemoteRuntimeSharedControlConnectionsNow: retrySharedControl
}))
-vi.mock('./ssh-host-sleep-reconnect', () => ({
+vi.mock('../ssh/ssh-host-sleep-reconnect', () => ({
retrySshConnectionsAfterNetworkReturn: retrySsh
}))
diff --git a/src/main/ipc/runtime-environment-recovery-handler.ts b/src/main/ipc/runtime-environments/runtime-environment-recovery-handler.ts
similarity index 87%
rename from src/main/ipc/runtime-environment-recovery-handler.ts
rename to src/main/ipc/runtime-environments/runtime-environment-recovery-handler.ts
index b0faec73c2c6..bc66d75af240 100644
--- a/src/main/ipc/runtime-environment-recovery-handler.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-recovery-handler.ts
@@ -1,6 +1,6 @@
import { ipcMain } from 'electron'
import { retryRemoteRuntimeSharedControlConnectionsNow } from './runtime-environment-request-connections'
-import { retrySshConnectionsAfterNetworkReturn } from './ssh-host-sleep-reconnect'
+import { retrySshConnectionsAfterNetworkReturn } from '../ssh/ssh-host-sleep-reconnect'
const RETRY_CONNECTIONS_NOW_CHANNEL = 'runtimeEnvironments:retryConnectionsNow'
diff --git a/src/main/ipc/runtime-environment-removal-cleanup.test.ts b/src/main/ipc/runtime-environments/runtime-environment-removal-cleanup.test.ts
similarity index 85%
rename from src/main/ipc/runtime-environment-removal-cleanup.test.ts
rename to src/main/ipc/runtime-environments/runtime-environment-removal-cleanup.test.ts
index d3f40eeee239..fd022e967852 100644
--- a/src/main/ipc/runtime-environment-removal-cleanup.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-removal-cleanup.test.ts
@@ -1,9 +1,9 @@
import { describe, expect, it, vi } from 'vitest'
-vi.mock('../browser/browser-route-partition-storage-runtime', () => ({
+vi.mock('../../browser/browser-route-partition-storage-runtime', () => ({
clearBrowserRoutePartitionStorageForEnvironment: vi.fn()
}))
-vi.mock('../browser/browser-route-partition-storage-retirement', () => ({
+vi.mock('../../browser/browser-route-partition-storage-retirement', () => ({
retireBrowserRoutePartitionStorageForEnvironment: vi.fn(async () => undefined)
}))
diff --git a/src/main/ipc/runtime-environment-removal-cleanup.ts b/src/main/ipc/runtime-environments/runtime-environment-removal-cleanup.ts
similarity index 90%
rename from src/main/ipc/runtime-environment-removal-cleanup.ts
rename to src/main/ipc/runtime-environments/runtime-environment-removal-cleanup.ts
index 3d736c52aac0..6674947100c4 100644
--- a/src/main/ipc/runtime-environment-removal-cleanup.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-removal-cleanup.ts
@@ -1,12 +1,12 @@
-import { clearBrowserRoutePartitionStorageForEnvironment } from '../browser/browser-route-partition-storage-runtime'
-import { retireBrowserRoutePartitionStorageForEnvironment } from '../browser/browser-route-partition-storage-retirement'
+import { clearBrowserRoutePartitionStorageForEnvironment } from '../../browser/browser-route-partition-storage-runtime'
+import { retireBrowserRoutePartitionStorageForEnvironment } from '../../browser/browser-route-partition-storage-retirement'
import { clearRuntimeEnvironmentCapabilityEvidence } from './runtime-environment-capability-evidence'
import { clearRuntimeEnvironmentManualDisconnect } from './runtime-environment-manual-disconnect'
-import { toRuntimeExecutionHostId, type ExecutionHostId } from '../../shared/execution-host'
+import { toRuntimeExecutionHostId, type ExecutionHostId } from '../../../shared/execution-host'
import {
forgetRemoteLayoutSnapshot,
type RemoteLayoutSnapshotStore
-} from '../remote-layout-snapshot/remote-layout-snapshot-recorder'
+} from '../../remote-layout-snapshot/remote-layout-snapshot-recorder'
/** What a removed server leaves in the profile. */
export type RemovedServerStore = RemoteLayoutSnapshotStore & {
diff --git a/src/main/ipc/runtime-environment-removal-storage.test.ts b/src/main/ipc/runtime-environments/runtime-environment-removal-storage.test.ts
similarity index 96%
rename from src/main/ipc/runtime-environment-removal-storage.test.ts
rename to src/main/ipc/runtime-environments/runtime-environment-removal-storage.test.ts
index f21d1ac5e29a..ec2004d87ef5 100644
--- a/src/main/ipc/runtime-environment-removal-storage.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-removal-storage.test.ts
@@ -11,14 +11,14 @@ const { handleMock, clearStorageMock, removeEnvironmentMock, resolveEnvironmentM
vi.mock('electron', () => ({ ipcMain: { handle: handleMock } }))
-vi.mock('../../shared/runtime-environment-store', () => ({
+vi.mock('../../../shared/runtime-environment-store', () => ({
addEnvironmentFromPairingCode: vi.fn(),
listEnvironments: vi.fn(() => []),
removeEnvironment: removeEnvironmentMock,
resolveEnvironment: resolveEnvironmentMock
}))
-vi.mock('../browser/browser-route-partition-storage-runtime', () => ({
+vi.mock('../../browser/browser-route-partition-storage-runtime', () => ({
clearBrowserRoutePartitionStorageForEnvironment: clearStorageMock
}))
diff --git a/src/main/ipc/runtime-environment-repair-handler.ts b/src/main/ipc/runtime-environments/runtime-environment-repair-handler.ts
similarity index 97%
rename from src/main/ipc/runtime-environment-repair-handler.ts
rename to src/main/ipc/runtime-environments/runtime-environment-repair-handler.ts
index 8200839ea8ec..fc919b431f0e 100644
--- a/src/main/ipc/runtime-environment-repair-handler.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-repair-handler.ts
@@ -1,5 +1,5 @@
import { ipcMain } from 'electron'
-import type { VerifyAndAddRuntimeEnvironmentResult } from '../../shared/remote-pairing-verification'
+import type { VerifyAndAddRuntimeEnvironmentResult } from '../../../shared/remote-pairing-verification'
import { verifyAndRepairRuntimeEnvironmentFromPairingCode } from './runtime-environment-pairing-verification'
import { getRuntimeEnvironmentStatusOwner } from './runtime-environment-request-connections'
import { clearRuntimeEnvironmentManualDisconnect } from './runtime-environment-manual-disconnect'
diff --git a/src/main/ipc/runtime-environment-request-connections.test.ts b/src/main/ipc/runtime-environments/runtime-environment-request-connections.test.ts
similarity index 98%
rename from src/main/ipc/runtime-environment-request-connections.test.ts
rename to src/main/ipc/runtime-environments/runtime-environment-request-connections.test.ts
index 14ed126335a8..29e85ceb6358 100644
--- a/src/main/ipc/runtime-environment-request-connections.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-request-connections.test.ts
@@ -2,7 +2,7 @@ import { afterEach, describe, expect, it, vi } from 'vitest'
import {
closeSharedControlTestServers,
createSharedControlTestServer
-} from '../../shared/remote-runtime-shared-control-test-server'
+} from '../../../shared/remote-runtime-shared-control-test-server'
import {
applyRuntimeEnvironmentCapabilityVerdict,
captureRuntimeEnvironmentCapabilityEvidence,
diff --git a/src/main/ipc/runtime-environment-request-connections.ts b/src/main/ipc/runtime-environments/runtime-environment-request-connections.ts
similarity index 91%
rename from src/main/ipc/runtime-environment-request-connections.ts
rename to src/main/ipc/runtime-environments/runtime-environment-request-connections.ts
index 1ccb3b7df760..07e6c6846118 100644
--- a/src/main/ipc/runtime-environment-request-connections.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-request-connections.ts
@@ -1,21 +1,21 @@
-import type { PairedRuntimeConnection } from '../../shared/paired-runtime-connection'
-import { resolveEnvironment } from '../../shared/runtime-environment-store'
-import { getPreferredPairedRuntimeConnection } from '../../shared/runtime-environments'
-import type { RuntimeHostStatusOwner } from '../../shared/runtime-host-status-owner'
-import type { RuntimeStatus } from '../../shared/runtime-types'
+import type { PairedRuntimeConnection } from '../../../shared/paired-runtime-connection'
+import { resolveEnvironment } from '../../../shared/runtime-environment-store'
+import { getPreferredPairedRuntimeConnection } from '../../../shared/runtime-environments'
+import type { RuntimeHostStatusOwner } from '../../../shared/runtime-host-status-owner'
+import type { RuntimeStatus } from '../../../shared/runtime-types'
import { createRuntimeEnvironmentStatusOwner } from './runtime-environment-status-owner'
-import { ELECTRON_REMOTE_RUNTIME_CLIENT_CAPABILITIES } from '../../shared/electron-remote-runtime-client-capabilities'
+import { ELECTRON_REMOTE_RUNTIME_CLIENT_CAPABILITIES } from '../../../shared/electron-remote-runtime-client-capabilities'
import type {
RuntimeOrchestrationEnvelope,
RuntimeRpcResponse
-} from '../../shared/runtime-rpc-envelope'
-import { RemoteRuntimeRequestConnection } from '../../shared/remote-runtime-request-connection'
-import { RemoteRuntimeSharedControlConnection } from '../../shared/remote-runtime-shared-control-connection'
-import { probeAllRemoteRuntimeSocketsNow } from '../../shared/remote-runtime-socket-liveness'
+} from '../../../shared/runtime-rpc-envelope'
+import { RemoteRuntimeRequestConnection } from '../../../shared/remote-runtime-request-connection'
+import { RemoteRuntimeSharedControlConnection } from '../../../shared/remote-runtime-shared-control-connection'
+import { probeAllRemoteRuntimeSocketsNow } from '../../../shared/remote-runtime-socket-liveness'
import type {
RemoteRuntimeSharedConnectionDiagnostics,
RemoteRuntimeSharedSubscription
-} from '../../shared/remote-runtime-shared-control-types'
+} from '../../../shared/remote-runtime-shared-control-types'
import { isRuntimeEnvironmentCapabilityPaused } from './runtime-environment-capability-evidence'
import { isRuntimeEnvironmentManuallyDisconnected } from './runtime-environment-manual-disconnect'
import { publishRuntimeEnvironmentDiagnostics } from './runtime-environment-diagnostics-broadcast'
diff --git a/src/main/ipc/runtime-environment-retry-connections-probe.test.ts b/src/main/ipc/runtime-environments/runtime-environment-retry-connections-probe.test.ts
similarity index 80%
rename from src/main/ipc/runtime-environment-retry-connections-probe.test.ts
rename to src/main/ipc/runtime-environments/runtime-environment-retry-connections-probe.test.ts
index 39789556ddff..287291a1ddbf 100644
--- a/src/main/ipc/runtime-environment-retry-connections-probe.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-retry-connections-probe.test.ts
@@ -1,9 +1,9 @@
import { describe, expect, it, vi } from 'vitest'
-import type * as SocketLiveness from '../../shared/remote-runtime-socket-liveness'
+import type * as SocketLiveness from '../../../shared/remote-runtime-socket-liveness'
const probeAllRemoteRuntimeSocketsNow = vi.hoisted(() => vi.fn(() => 0))
-vi.mock('../../shared/remote-runtime-socket-liveness', async (importOriginal) => ({
+vi.mock('../../../shared/remote-runtime-socket-liveness', async (importOriginal) => ({
...(await importOriginal()),
probeAllRemoteRuntimeSocketsNow
}))
diff --git a/src/main/ipc/runtime-environment-revision-guard.test.ts b/src/main/ipc/runtime-environments/runtime-environment-revision-guard.test.ts
similarity index 95%
rename from src/main/ipc/runtime-environment-revision-guard.test.ts
rename to src/main/ipc/runtime-environments/runtime-environment-revision-guard.test.ts
index 2ffd3739515f..dfbacfddd6db 100644
--- a/src/main/ipc/runtime-environment-revision-guard.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-revision-guard.test.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from 'vitest'
-import type { KnownRuntimeEnvironment } from '../../shared/runtime-environments'
+import type { KnownRuntimeEnvironment } from '../../../shared/runtime-environments'
import { runtimeEnvironmentRevisionFailure } from './runtime-environment-revision-guard'
const environment = {
diff --git a/src/main/ipc/runtime-environment-revision-guard.ts b/src/main/ipc/runtime-environments/runtime-environment-revision-guard.ts
similarity index 87%
rename from src/main/ipc/runtime-environment-revision-guard.ts
rename to src/main/ipc/runtime-environments/runtime-environment-revision-guard.ts
index 03d6169675d2..4658dea6b70d 100644
--- a/src/main/ipc/runtime-environment-revision-guard.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-revision-guard.ts
@@ -1,5 +1,5 @@
-import type { KnownRuntimeEnvironment } from '../../shared/runtime-environments'
-import type { RuntimeRpcResponse } from '../../shared/runtime-rpc-envelope'
+import type { KnownRuntimeEnvironment } from '../../../shared/runtime-environments'
+import type { RuntimeRpcResponse } from '../../../shared/runtime-rpc-envelope'
export function runtimeEnvironmentRevisionFailure(
environment: KnownRuntimeEnvironment,
diff --git a/src/main/ipc/runtime-environment-session-reconcile.test.ts b/src/main/ipc/runtime-environments/runtime-environment-session-reconcile.test.ts
similarity index 88%
rename from src/main/ipc/runtime-environment-session-reconcile.test.ts
rename to src/main/ipc/runtime-environments/runtime-environment-session-reconcile.test.ts
index ffd234a7f75b..6e648ef84fb3 100644
--- a/src/main/ipc/runtime-environment-session-reconcile.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-session-reconcile.test.ts
@@ -2,9 +2,9 @@ import { mkdtempSync, writeFileSync } from 'node:fs'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
import { describe, expect, it, vi } from 'vitest'
-import type { ExecutionHostId } from '../../shared/execution-host'
-import { addEnvironmentFromPairingCode } from '../../shared/runtime-environment-store'
-import { getEnvironmentStorePath } from '../../shared/runtime-environment-store-file'
+import type { ExecutionHostId } from '../../../shared/execution-host'
+import { addEnvironmentFromPairingCode } from '../../../shared/runtime-environment-store'
+import { getEnvironmentStorePath } from '../../../shared/runtime-environment-store-file'
import { pairingCode } from './runtime-environments-ipc-test-harness'
import { reconcileOrphanedRuntimeSessions } from './runtime-environment-session-reconcile'
diff --git a/src/main/ipc/runtime-environment-session-reconcile.ts b/src/main/ipc/runtime-environments/runtime-environment-session-reconcile.ts
similarity index 89%
rename from src/main/ipc/runtime-environment-session-reconcile.ts
rename to src/main/ipc/runtime-environments/runtime-environment-session-reconcile.ts
index 9aeb3396519b..c86c184a86ec 100644
--- a/src/main/ipc/runtime-environment-session-reconcile.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-session-reconcile.ts
@@ -4,9 +4,9 @@
* drop existed, leaves an orphan that listings keep naming as an unselectable host.
*/
import { existsSync } from 'node:fs'
-import { parseExecutionHostId, type ExecutionHostId } from '../../shared/execution-host'
-import { listEnvironments } from '../../shared/runtime-environment-store'
-import { getEnvironmentStorePath } from '../../shared/runtime-environment-store-file'
+import { parseExecutionHostId, type ExecutionHostId } from '../../../shared/execution-host'
+import { listEnvironments } from '../../../shared/runtime-environment-store'
+import { getEnvironmentStorePath } from '../../../shared/runtime-environment-store-file'
type SessionHostStore = {
getWorkspaceSessionHostIds: () => ExecutionHostId[]
diff --git a/src/main/ipc/runtime-environment-session-tabs-delta-decoding.test.ts b/src/main/ipc/runtime-environments/runtime-environment-session-tabs-delta-decoding.test.ts
similarity index 96%
rename from src/main/ipc/runtime-environment-session-tabs-delta-decoding.test.ts
rename to src/main/ipc/runtime-environments/runtime-environment-session-tabs-delta-decoding.test.ts
index 64842c4e13c9..18719a873608 100644
--- a/src/main/ipc/runtime-environment-session-tabs-delta-decoding.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-session-tabs-delta-decoding.test.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from 'vitest'
-import type { RuntimeRpcResponse } from '../../shared/runtime-rpc-envelope'
+import type { RuntimeRpcResponse } from '../../../shared/runtime-rpc-envelope'
import {
SESSION_TABS_DELTA_OUT_OF_SYNC_ERROR,
decodeSessionTabsDeltaEvents
diff --git a/src/main/ipc/runtime-environment-session-tabs-delta-decoding.ts b/src/main/ipc/runtime-environments/runtime-environment-session-tabs-delta-decoding.ts
similarity index 90%
rename from src/main/ipc/runtime-environment-session-tabs-delta-decoding.ts
rename to src/main/ipc/runtime-environments/runtime-environment-session-tabs-delta-decoding.ts
index 5b681d93d981..ac8d75a5593e 100644
--- a/src/main/ipc/runtime-environment-session-tabs-delta-decoding.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-session-tabs-delta-decoding.ts
@@ -1,5 +1,5 @@
-import type { RuntimeRpcResponse } from '../../shared/runtime-rpc-envelope'
-import { createSessionTabsTabDeltaDecoder } from '../../shared/session-tabs-tab-delta'
+import type { RuntimeRpcResponse } from '../../../shared/runtime-rpc-envelope'
+import { createSessionTabsTabDeltaDecoder } from '../../../shared/session-tabs-tab-delta'
type SubscriptionEvent =
| { type: 'response'; response: RuntimeRpcResponse }
diff --git a/src/main/ipc/runtime-environment-session-tabs-delta.integration.test.ts b/src/main/ipc/runtime-environments/runtime-environment-session-tabs-delta.integration.test.ts
similarity index 91%
rename from src/main/ipc/runtime-environment-session-tabs-delta.integration.test.ts
rename to src/main/ipc/runtime-environments/runtime-environment-session-tabs-delta.integration.test.ts
index 23e4d036c638..77cbb8da15ff 100644
--- a/src/main/ipc/runtime-environment-session-tabs-delta.integration.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-session-tabs-delta.integration.test.ts
@@ -2,18 +2,18 @@ import { mkdtempSync, rmSync } from 'node:fs'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
import { afterEach, describe, expect, it, vi } from 'vitest'
-import { ELECTRON_REMOTE_RUNTIME_CLIENT_CAPABILITIES } from '../../shared/electron-remote-runtime-client-capabilities'
-import { SESSION_TABS_TAB_DELTA_RUNTIME_CAPABILITY } from '../../shared/protocol-version'
-import { subscribeRemoteRuntimeRequest } from '../../shared/remote-runtime-client'
-import type { RuntimeRpcResponse } from '../../shared/runtime-rpc-envelope'
+import { ELECTRON_REMOTE_RUNTIME_CLIENT_CAPABILITIES } from '../../../shared/electron-remote-runtime-client-capabilities'
+import { SESSION_TABS_TAB_DELTA_RUNTIME_CAPABILITY } from '../../../shared/protocol-version'
+import { subscribeRemoteRuntimeRequest } from '../../../shared/remote-runtime-client'
+import type { RuntimeRpcResponse } from '../../../shared/runtime-rpc-envelope'
import {
addEnvironmentFromPairingCode,
resolveEnvironment
-} from '../../shared/runtime-environment-store'
-import { getPreferredPairedRuntimeConnection } from '../../shared/runtime-environments'
-import { OrcaRuntimeService } from '../runtime/orca-runtime'
-import { OrcaRuntimeRpcServer } from '../runtime/runtime-rpc'
-import { makeStore, SESSION_WORKTREE_ID } from '../runtime/paired-client-navigation-test-harness'
+} from '../../../shared/runtime-environment-store'
+import { getPreferredPairedRuntimeConnection } from '../../../shared/runtime-environments'
+import { OrcaRuntimeService } from '../../runtime/orca-runtime'
+import { OrcaRuntimeRpcServer } from '../../runtime/runtime-rpc'
+import { makeStore, SESSION_WORKTREE_ID } from '../../runtime/paired-client-navigation-test-harness'
import {
resetSharedControlSupport,
subscribeRuntimeEnvironment
diff --git a/src/main/ipc/runtime-environment-shared-control-answers.ts b/src/main/ipc/runtime-environments/runtime-environment-shared-control-answers.ts
similarity index 100%
rename from src/main/ipc/runtime-environment-shared-control-answers.ts
rename to src/main/ipc/runtime-environments/runtime-environment-shared-control-answers.ts
diff --git a/src/main/ipc/runtime-environment-shared-control-support.ts b/src/main/ipc/runtime-environments/runtime-environment-shared-control-support.ts
similarity index 83%
rename from src/main/ipc/runtime-environment-shared-control-support.ts
rename to src/main/ipc/runtime-environments/runtime-environment-shared-control-support.ts
index a217c8f708da..5ec4fa8f5a9a 100644
--- a/src/main/ipc/runtime-environment-shared-control-support.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-shared-control-support.ts
@@ -1,6 +1,6 @@
-import type { PairedRuntimeConnection } from '../../shared/paired-runtime-connection'
-import type { KnownRuntimeEnvironment } from '../../shared/runtime-environments'
-import { RemoteRuntimeClientError } from '../../shared/remote-runtime-client-error'
+import type { PairedRuntimeConnection } from '../../../shared/paired-runtime-connection'
+import type { KnownRuntimeEnvironment } from '../../../shared/runtime-environments'
+import { RemoteRuntimeClientError } from '../../../shared/remote-runtime-client-error'
import {
getAcceptedRuntimeEnvironmentCapabilityOutcome,
resetRuntimeEnvironmentCapabilityEvidence,
diff --git a/src/main/ipc/runtime-environment-status-connection.test.ts b/src/main/ipc/runtime-environments/runtime-environment-status-connection.test.ts
similarity index 89%
rename from src/main/ipc/runtime-environment-status-connection.test.ts
rename to src/main/ipc/runtime-environments/runtime-environment-status-connection.test.ts
index 8ba8e44ad438..762c0d5d0ae0 100644
--- a/src/main/ipc/runtime-environment-status-connection.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-status-connection.test.ts
@@ -2,13 +2,13 @@ import { mkdtempSync, rmSync } from 'node:fs'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
import { afterEach, expect, it, vi } from 'vitest'
-import { encodePairingOffer } from '../../shared/pairing'
-import { addEnvironmentFromPairingCode } from '../../shared/runtime-environment-store'
-import { REMOTE_RUNTIME_SHARED_CONTROL_CAPABILITY } from '../../shared/protocol-version'
+import { encodePairingOffer } from '../../../shared/pairing'
+import { addEnvironmentFromPairingCode } from '../../../shared/runtime-environment-store'
+import { REMOTE_RUNTIME_SHARED_CONTROL_CAPABILITY } from '../../../shared/protocol-version'
import {
createSharedControlTestServer,
closeSharedControlTestServers
-} from '../../shared/remote-runtime-shared-control-test-server'
+} from '../../../shared/remote-runtime-shared-control-test-server'
import { getRuntimeEnvironmentStatus } from './runtime-environment-transport-routing'
import {
getRuntimeEnvironmentStatusOwner,
diff --git a/src/main/ipc/runtime-environment-status-diagnostics.ts b/src/main/ipc/runtime-environments/runtime-environment-status-diagnostics.ts
similarity index 90%
rename from src/main/ipc/runtime-environment-status-diagnostics.ts
rename to src/main/ipc/runtime-environments/runtime-environment-status-diagnostics.ts
index 0e2aac0d0d00..a531e6e604a6 100644
--- a/src/main/ipc/runtime-environment-status-diagnostics.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-status-diagnostics.ts
@@ -1,5 +1,5 @@
-import type { RuntimeRpcResponse } from '../../shared/runtime-rpc-envelope'
-import { REMOTE_RUNTIME_SHARED_CONTROL_CAPABILITY } from '../../shared/protocol-version'
+import type { RuntimeRpcResponse } from '../../../shared/runtime-rpc-envelope'
+import { REMOTE_RUNTIME_SHARED_CONTROL_CAPABILITY } from '../../../shared/protocol-version'
import { getRemoteRuntimeSharedControlDiagnostics } from './runtime-environment-request-connections'
export function attachRemoteControlDiagnostics(
diff --git a/src/main/ipc/runtime-environment-status-owner.ts b/src/main/ipc/runtime-environments/runtime-environment-status-owner.ts
similarity index 91%
rename from src/main/ipc/runtime-environment-status-owner.ts
rename to src/main/ipc/runtime-environments/runtime-environment-status-owner.ts
index 7e0e6f1ce2aa..dd5fa68e7046 100644
--- a/src/main/ipc/runtime-environment-status-owner.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-status-owner.ts
@@ -1,18 +1,18 @@
import { BrowserWindow } from 'electron'
-import { sendRemoteRuntimeRequest } from '../../shared/remote-runtime-client'
-import { REMOTE_RUNTIME_SHARED_CONTROL_CAPABILITY } from '../../shared/protocol-version'
-import { ELECTRON_REMOTE_RUNTIME_CLIENT_CAPABILITIES } from '../../shared/electron-remote-runtime-client-capabilities'
+import { sendRemoteRuntimeRequest } from '../../../shared/remote-runtime-client'
+import { REMOTE_RUNTIME_SHARED_CONTROL_CAPABILITY } from '../../../shared/protocol-version'
+import { ELECTRON_REMOTE_RUNTIME_CLIENT_CAPABILITIES } from '../../../shared/electron-remote-runtime-client-capabilities'
import {
getPreferredPairedRuntimeConnection,
type KnownRuntimeEnvironment
-} from '../../shared/runtime-environments'
+} from '../../../shared/runtime-environments'
import { recordRuntimeEnvironmentUsage } from './runtime-environment-usage-record'
-import { RuntimeHostStatusOwner } from '../../shared/runtime-host-status-owner'
-import type { RuntimeStatus } from '../../shared/runtime-types'
+import { RuntimeHostStatusOwner } from '../../../shared/runtime-host-status-owner'
+import type { RuntimeStatus } from '../../../shared/runtime-types'
import {
RUNTIME_HOST_STATUS_CHANNEL,
type RuntimeHostStatusResponse
-} from '../../shared/runtime-host-status'
+} from '../../../shared/runtime-host-status'
import {
applyRuntimeEnvironmentCapabilityVerdict,
getAcceptedRuntimeEnvironmentCapabilityOutcome,
diff --git a/src/main/ipc/runtime-environment-status-probe.ts b/src/main/ipc/runtime-environments/runtime-environment-status-probe.ts
similarity index 85%
rename from src/main/ipc/runtime-environment-status-probe.ts
rename to src/main/ipc/runtime-environments/runtime-environment-status-probe.ts
index a130fb89fba1..c91c0297bed0 100644
--- a/src/main/ipc/runtime-environment-status-probe.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-status-probe.ts
@@ -1,7 +1,7 @@
-import { resolveEnvironment } from '../../shared/runtime-environment-store'
-import { getPreferredPairedRuntimeConnection } from '../../shared/runtime-environments'
-import type { RuntimeRpcResponse } from '../../shared/runtime-rpc-envelope'
-import type { RuntimeStatus } from '../../shared/runtime-types'
+import { resolveEnvironment } from '../../../shared/runtime-environment-store'
+import { getPreferredPairedRuntimeConnection } from '../../../shared/runtime-environments'
+import type { RuntimeRpcResponse } from '../../../shared/runtime-rpc-envelope'
+import type { RuntimeStatus } from '../../../shared/runtime-types'
import { getRuntimeEnvironmentCapabilityIncarnation } from './runtime-environment-capability-evidence'
import { getRuntimeEnvironmentStatusOwner } from './runtime-environment-request-connections'
import { isRuntimeEnvironmentManuallyDisconnected } from './runtime-environment-manual-disconnect'
diff --git a/src/main/ipc/runtime-environment-status-recovery.test.ts b/src/main/ipc/runtime-environments/runtime-environment-status-recovery.test.ts
similarity index 94%
rename from src/main/ipc/runtime-environment-status-recovery.test.ts
rename to src/main/ipc/runtime-environments/runtime-environment-status-recovery.test.ts
index 82e94ea62e01..28c0de16f78f 100644
--- a/src/main/ipc/runtime-environment-status-recovery.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-status-recovery.test.ts
@@ -1,9 +1,9 @@
-import { REMOTE_RUNTIME_SHARED_CONTROL_CAPABILITY } from '../../shared/protocol-version'
+import { REMOTE_RUNTIME_SHARED_CONTROL_CAPABILITY } from '../../../shared/protocol-version'
import { mkdtempSync, rmSync } from 'node:fs'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
import { afterEach, beforeEach, expect, it, vi } from 'vitest'
-import { addEnvironmentFromPairingCode } from '../../shared/runtime-environment-store'
+import { addEnvironmentFromPairingCode } from '../../../shared/runtime-environment-store'
import { pairingCode } from './runtime-environments-ipc-test-harness'
import {
getRuntimeEnvironmentStatus,
@@ -11,7 +11,7 @@ import {
} from './runtime-environment-transport-routing'
const { request, publish } = vi.hoisted(() => ({ request: vi.fn(), publish: vi.fn() }))
-vi.mock('../../shared/remote-runtime-client', () => ({
+vi.mock('../../../shared/remote-runtime-client', () => ({
sendRemoteRuntimeRequest: request,
subscribeRemoteRuntimeRequest: vi.fn()
}))
diff --git a/src/main/ipc/runtime-environment-status-retirement.test.ts b/src/main/ipc/runtime-environments/runtime-environment-status-retirement.test.ts
similarity index 95%
rename from src/main/ipc/runtime-environment-status-retirement.test.ts
rename to src/main/ipc/runtime-environments/runtime-environment-status-retirement.test.ts
index 37ebf690a60e..e12d953940ac 100644
--- a/src/main/ipc/runtime-environment-status-retirement.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-status-retirement.test.ts
@@ -5,9 +5,9 @@ import { afterEach, beforeEach, expect, it, vi } from 'vitest'
import {
addEnvironmentFromPairingCode,
resolveEnvironment
-} from '../../shared/runtime-environment-store'
+} from '../../../shared/runtime-environment-store'
import { pairingCode } from './runtime-environments-ipc-test-harness'
-import { REMOTE_RUNTIME_SHARED_CONTROL_CAPABILITY } from '../../shared/protocol-version'
+import { REMOTE_RUNTIME_SHARED_CONTROL_CAPABILITY } from '../../../shared/protocol-version'
import {
advanceRuntimeEnvironmentCapabilityIncarnation,
resetRuntimeEnvironmentCapabilityEvidence
@@ -19,7 +19,9 @@ const mocks = vi.hoisted(() => ({
reconnect: vi.fn(),
diagnostics: vi.fn()
}))
-vi.mock('../../shared/remote-runtime-client', () => ({ sendRemoteRuntimeRequest: mocks.request }))
+vi.mock('../../../shared/remote-runtime-client', () => ({
+ sendRemoteRuntimeRequest: mocks.request
+}))
vi.mock('./runtime-environment-request-connections', async () => {
const { withRuntimeStatusOwners } = await import('./runtime-environments-ipc-test-harness')
return withRuntimeStatusOwners({
diff --git a/src/main/ipc/runtime-environment-subscription-handlers.ts b/src/main/ipc/runtime-environments/runtime-environment-subscription-handlers.ts
similarity index 97%
rename from src/main/ipc/runtime-environment-subscription-handlers.ts
rename to src/main/ipc/runtime-environments/runtime-environment-subscription-handlers.ts
index a579b9c6546d..b5be471f9212 100644
--- a/src/main/ipc/runtime-environment-subscription-handlers.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-subscription-handlers.ts
@@ -1,8 +1,8 @@
import { ipcMain } from 'electron'
import { randomUUID } from 'node:crypto'
-import { resolveEnvironment } from '../../shared/runtime-environment-store'
-import type { RemoteRuntimeSubscription } from '../../shared/remote-runtime-client'
-import type { RuntimeRpcResponse } from '../../shared/runtime-rpc-envelope'
+import { resolveEnvironment } from '../../../shared/runtime-environment-store'
+import type { RemoteRuntimeSubscription } from '../../../shared/remote-runtime-client'
+import type { RuntimeRpcResponse } from '../../../shared/runtime-rpc-envelope'
import { isRuntimeEnvironmentManuallyDisconnected } from './runtime-environment-connectivity-handlers'
import { getRuntimeEnvironmentTransportGeneration } from './runtime-environment-transport-generation'
import { subscribeRuntimeEnvironment } from './runtime-environment-transport-routing'
diff --git a/src/main/ipc/runtime-environment-subscription-identity.test.ts b/src/main/ipc/runtime-environments/runtime-environment-subscription-identity.test.ts
similarity index 97%
rename from src/main/ipc/runtime-environment-subscription-identity.test.ts
rename to src/main/ipc/runtime-environments/runtime-environment-subscription-identity.test.ts
index 3f106f8e1f33..70cd9fb1a0c6 100644
--- a/src/main/ipc/runtime-environment-subscription-identity.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-subscription-identity.test.ts
@@ -1,10 +1,10 @@
import { afterEach, beforeEach, expect, it, vi } from 'vitest'
-import type { RemoteRuntimeSubscription } from '../../shared/remote-runtime-client'
+import type { RemoteRuntimeSubscription } from '../../../shared/remote-runtime-client'
import type { subscribeRuntimeEnvironment } from './runtime-environment-transport-routing'
const mocks = vi.hoisted(() => ({ handle: vi.fn(), on: vi.fn(), subscribe: vi.fn() }))
vi.mock('electron', () => ({ ipcMain: { handle: mocks.handle, on: mocks.on } }))
-vi.mock('../../shared/runtime-environment-store', () => ({
+vi.mock('../../../shared/runtime-environment-store', () => ({
resolveEnvironment: () => ({ id: 'env', pairingRevision: 1, createdAt: 1 })
}))
vi.mock('./runtime-environment-transport-routing', () => ({
diff --git a/src/main/ipc/runtime-environment-subscription-layout-recording.test.ts b/src/main/ipc/runtime-environments/runtime-environment-subscription-layout-recording.test.ts
similarity index 98%
rename from src/main/ipc/runtime-environment-subscription-layout-recording.test.ts
rename to src/main/ipc/runtime-environments/runtime-environment-subscription-layout-recording.test.ts
index de5c9255bcef..bfd839733007 100644
--- a/src/main/ipc/runtime-environment-subscription-layout-recording.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-subscription-layout-recording.test.ts
@@ -3,7 +3,7 @@ import type { subscribeRuntimeEnvironment } from './runtime-environment-transpor
const mocks = vi.hoisted(() => ({ handle: vi.fn(), on: vi.fn(), subscribe: vi.fn() }))
vi.mock('electron', () => ({ ipcMain: { handle: mocks.handle, on: mocks.on } }))
-vi.mock('../../shared/runtime-environment-store', () => ({
+vi.mock('../../../shared/runtime-environment-store', () => ({
resolveEnvironment: () => ({ id: 'env', pairingRevision: 1, createdAt: 1 })
}))
vi.mock('./runtime-environment-transport-routing', () => ({
diff --git a/src/main/ipc/runtime-environment-support-routing.test.ts b/src/main/ipc/runtime-environments/runtime-environment-support-routing.test.ts
similarity index 95%
rename from src/main/ipc/runtime-environment-support-routing.test.ts
rename to src/main/ipc/runtime-environments/runtime-environment-support-routing.test.ts
index 9d583521bf65..605a91889b6e 100644
--- a/src/main/ipc/runtime-environment-support-routing.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-support-routing.test.ts
@@ -1,6 +1,6 @@
-import { pairedRuntimeConnectionFromOffer } from '../../shared/paired-runtime-connection'
+import { pairedRuntimeConnectionFromOffer } from '../../../shared/paired-runtime-connection'
import { beforeEach, describe, expect, it, vi } from 'vitest'
-import type { KnownRuntimeEnvironment } from '../../shared/runtime-environments'
+import type { KnownRuntimeEnvironment } from '../../../shared/runtime-environments'
import {
advanceRuntimeEnvironmentCapabilityIncarnation,
applyRuntimeEnvironmentCapabilityVerdict,
@@ -27,7 +27,7 @@ vi.mock('./runtime-environment-shared-control-support', () => ({
supportsSharedControl: supportsMock,
clearSharedControlSupport: clearSupportMock
}))
-vi.mock('../../shared/runtime-environment-store', async (importOriginal) => ({
+vi.mock('../../../shared/runtime-environment-store', async (importOriginal) => ({
...(await importOriginal()),
resolveEnvironment: resolveEnvironmentMock
}))
@@ -36,12 +36,12 @@ vi.mock('./runtime-environment-request-connections', async (importOriginal) => (
...(await importOriginal()),
subscribeRemoteRuntimeSharedControlRequest: subscribeSharedMock
}))
-vi.mock('../../shared/remote-runtime-client', async (importOriginal) => ({
+vi.mock('../../../shared/remote-runtime-client', async (importOriginal) => ({
...(await importOriginal()),
subscribeRemoteRuntimeRequest: subscribeLegacyMock
}))
import type { subscribeRemoteRuntimeSharedControlRequest } from './runtime-environment-request-connections'
-import type { subscribeRemoteRuntimeRequest } from '../../shared/remote-runtime-client'
+import type { subscribeRemoteRuntimeRequest } from '../../../shared/remote-runtime-client'
import {
subscribeSupportRoutedRuntimeEnvironment,
diff --git a/src/main/ipc/runtime-environment-support-routing.ts b/src/main/ipc/runtime-environments/runtime-environment-support-routing.ts
similarity index 93%
rename from src/main/ipc/runtime-environment-support-routing.ts
rename to src/main/ipc/runtime-environments/runtime-environment-support-routing.ts
index c1ba7e985a9f..1dc7f26371a7 100644
--- a/src/main/ipc/runtime-environment-support-routing.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-support-routing.ts
@@ -1,19 +1,19 @@
-import { isOrchestrationMutation } from '../../shared/orchestration-rpc-contract'
-import { waitForPromiseWithSignal } from '../../shared/abort-signal-reason'
-import type { PairedRuntimeConnection } from '../../shared/paired-runtime-connection'
+import { isOrchestrationMutation } from '../../../shared/orchestration-rpc-contract'
+import { waitForPromiseWithSignal } from '../../../shared/abort-signal-reason'
+import type { PairedRuntimeConnection } from '../../../shared/paired-runtime-connection'
import type {
RuntimeOrchestrationEnvelope,
RuntimeRpcResponse
-} from '../../shared/runtime-rpc-envelope'
-import type { KnownRuntimeEnvironment } from '../../shared/runtime-environments'
-import { getPreferredPairedRuntimeConnection } from '../../shared/runtime-environments'
-import { markEnvironmentUsed, resolveEnvironment } from '../../shared/runtime-environment-store'
+} from '../../../shared/runtime-rpc-envelope'
+import type { KnownRuntimeEnvironment } from '../../../shared/runtime-environments'
+import { getPreferredPairedRuntimeConnection } from '../../../shared/runtime-environments'
+import { markEnvironmentUsed, resolveEnvironment } from '../../../shared/runtime-environment-store'
import { recordRuntimeEnvironmentUsage } from './runtime-environment-usage-record'
-import { ELECTRON_REMOTE_RUNTIME_CLIENT_CAPABILITIES } from '../../shared/electron-remote-runtime-client-capabilities'
+import { ELECTRON_REMOTE_RUNTIME_CLIENT_CAPABILITIES } from '../../../shared/electron-remote-runtime-client-capabilities'
import {
subscribeRemoteRuntimeRequest,
type RemoteRuntimeSubscription
-} from '../../shared/remote-runtime-client'
+} from '../../../shared/remote-runtime-client'
import { withRuntimeUnreachableHint } from './runtime-environment-unreachable-hint'
import {
isRuntimeEnvironmentCapabilityOutcomeCurrent,
diff --git a/src/main/ipc/runtime-environment-tailscale-response.ts b/src/main/ipc/runtime-environments/runtime-environment-tailscale-response.ts
similarity index 76%
rename from src/main/ipc/runtime-environment-tailscale-response.ts
rename to src/main/ipc/runtime-environments/runtime-environment-tailscale-response.ts
index 906e1c02e627..6db8c3a1e71f 100644
--- a/src/main/ipc/runtime-environment-tailscale-response.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-tailscale-response.ts
@@ -1,5 +1,5 @@
-import type { RuntimeRpcResponse } from '../../shared/runtime-rpc-envelope'
-import type { KnownRuntimeEnvironment } from '../../shared/runtime-environments'
+import type { RuntimeRpcResponse } from '../../../shared/runtime-rpc-envelope'
+import type { KnownRuntimeEnvironment } from '../../../shared/runtime-environments'
import { withRuntimeUnreachableHint } from './runtime-environment-unreachable-hint'
export function withTailscaleHintForResponse(
diff --git a/src/main/ipc/runtime-environment-transport-generation.test.ts b/src/main/ipc/runtime-environments/runtime-environment-transport-generation.test.ts
similarity index 100%
rename from src/main/ipc/runtime-environment-transport-generation.test.ts
rename to src/main/ipc/runtime-environments/runtime-environment-transport-generation.test.ts
diff --git a/src/main/ipc/runtime-environment-transport-generation.ts b/src/main/ipc/runtime-environments/runtime-environment-transport-generation.ts
similarity index 100%
rename from src/main/ipc/runtime-environment-transport-generation.ts
rename to src/main/ipc/runtime-environments/runtime-environment-transport-generation.ts
diff --git a/src/main/ipc/runtime-environment-transport-routing-tailscale-hint.test.ts b/src/main/ipc/runtime-environments/runtime-environment-transport-routing-tailscale-hint.test.ts
similarity index 92%
rename from src/main/ipc/runtime-environment-transport-routing-tailscale-hint.test.ts
rename to src/main/ipc/runtime-environments/runtime-environment-transport-routing-tailscale-hint.test.ts
index bb2bbdac322c..0cb0f0f70694 100644
--- a/src/main/ipc/runtime-environment-transport-routing-tailscale-hint.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-transport-routing-tailscale-hint.test.ts
@@ -2,9 +2,9 @@ import { mkdtempSync, rmSync } from 'node:fs'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
-import { generateKeyPair, publicKeyToBase64 } from '../../shared/e2ee-crypto'
-import { encodePairingOffer, type PairingOffer } from '../../shared/pairing'
-import { addEnvironmentFromPairingCode } from '../../shared/runtime-environment-store'
+import { generateKeyPair, publicKeyToBase64 } from '../../../shared/e2ee-crypto'
+import { encodePairingOffer, type PairingOffer } from '../../../shared/pairing'
+import { addEnvironmentFromPairingCode } from '../../../shared/runtime-environment-store'
import {
callRuntimeEnvironment,
getRuntimeEnvironmentStatus,
diff --git a/src/main/ipc/runtime-environment-transport-routing.ts b/src/main/ipc/runtime-environments/runtime-environment-transport-routing.ts
similarity index 96%
rename from src/main/ipc/runtime-environment-transport-routing.ts
rename to src/main/ipc/runtime-environments/runtime-environment-transport-routing.ts
index 57812f3a1d2a..2450622cc8ef 100644
--- a/src/main/ipc/runtime-environment-transport-routing.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-transport-routing.ts
@@ -1,17 +1,17 @@
import { getRuntimeEnvironmentStatus } from './runtime-environment-status-probe'
-import { getPreferredPairedRuntimeConnection } from '../../shared/runtime-environments'
-import { ELECTRON_REMOTE_RUNTIME_CLIENT_CAPABILITIES } from '../../shared/electron-remote-runtime-client-capabilities'
-import { resolveEnvironment, markEnvironmentUsed } from '../../shared/runtime-environment-store'
+import { getPreferredPairedRuntimeConnection } from '../../../shared/runtime-environments'
+import { ELECTRON_REMOTE_RUNTIME_CLIENT_CAPABILITIES } from '../../../shared/electron-remote-runtime-client-capabilities'
+import { resolveEnvironment, markEnvironmentUsed } from '../../../shared/runtime-environment-store'
import { resolveManagedRuntimeEnvironment } from './runtime-environment-managed-tunnel'
import { recordRuntimeEnvironmentUsage } from './runtime-environment-usage-record'
import type {
RuntimeOrchestrationEnvelope,
RuntimeRpcResponse
-} from '../../shared/runtime-rpc-envelope'
+} from '../../../shared/runtime-rpc-envelope'
import {
subscribeRemoteRuntimeRequest,
type RemoteRuntimeSubscription
-} from '../../shared/remote-runtime-client'
+} from '../../../shared/remote-runtime-client'
import { withRuntimeUnreachableHint } from './runtime-environment-unreachable-hint'
import { decodeSessionTabsDeltaEvents } from './runtime-environment-session-tabs-delta-decoding'
import { enqueueRuntimeCall } from './runtime-environment-call-queue'
diff --git a/src/main/ipc/runtime-environment-unreachable-hint.test.ts b/src/main/ipc/runtime-environments/runtime-environment-unreachable-hint.test.ts
similarity index 96%
rename from src/main/ipc/runtime-environment-unreachable-hint.test.ts
rename to src/main/ipc/runtime-environments/runtime-environment-unreachable-hint.test.ts
index 42bbeb475efd..12ff73698add 100644
--- a/src/main/ipc/runtime-environment-unreachable-hint.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-unreachable-hint.test.ts
@@ -1,6 +1,6 @@
import { describe, expect, it } from 'vitest'
import { withRuntimeUnreachableHint } from './runtime-environment-unreachable-hint'
-import { withRemoteRuntimeTailscaleHint } from '../../shared/remote-runtime-tailscale-hint'
+import { withRemoteRuntimeTailscaleHint } from '../../../shared/remote-runtime-tailscale-hint'
const UNREACHABLE = 'Could not connect to the remote Orca runtime at ws://127.0.0.1:42000.'
diff --git a/src/main/ipc/runtime-environment-unreachable-hint.ts b/src/main/ipc/runtime-environments/runtime-environment-unreachable-hint.ts
similarity index 77%
rename from src/main/ipc/runtime-environment-unreachable-hint.ts
rename to src/main/ipc/runtime-environments/runtime-environment-unreachable-hint.ts
index 671a03b08392..a5b54a6daa56 100644
--- a/src/main/ipc/runtime-environment-unreachable-hint.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-unreachable-hint.ts
@@ -1,7 +1,7 @@
/** What to suggest when a server cannot be reached, chosen by the kind of host that owns it. */
-import { withRemoteRuntimeTailscaleHint } from '../../shared/remote-runtime-tailscale-hint'
-import { classifyRuntimeEnvironmentHost } from '../../shared/runtime-environment-host-kind'
-import type { KnownRuntimeEnvironment } from '../../shared/runtime-environments'
+import { withRemoteRuntimeTailscaleHint } from '../../../shared/remote-runtime-tailscale-hint'
+import { classifyRuntimeEnvironmentHost } from '../../../shared/runtime-environment-host-kind'
+import type { KnownRuntimeEnvironment } from '../../../shared/runtime-environments'
const UNREACHABLE_RE =
/could not connect to the remote orca runtime|remote orca runtime closed the connection|timed out (?:waiting for|while connecting to) the remote orca runtime/i
diff --git a/src/main/ipc/runtime-environment-usage-record.ts b/src/main/ipc/runtime-environments/runtime-environment-usage-record.ts
similarity index 92%
rename from src/main/ipc/runtime-environment-usage-record.ts
rename to src/main/ipc/runtime-environments/runtime-environment-usage-record.ts
index a6bc4f6d4757..b0bdd5534c1d 100644
--- a/src/main/ipc/runtime-environment-usage-record.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-usage-record.ts
@@ -1,4 +1,4 @@
-import { markEnvironmentUsed } from '../../shared/runtime-environment-store'
+import { markEnvironmentUsed } from '../../../shared/runtime-environment-store'
/**
* Records `lastUsedAt` for callers that cannot report a failure to anyone.
diff --git a/src/main/ipc/runtime-environments-call-routing.test.ts b/src/main/ipc/runtime-environments/runtime-environments-call-routing.test.ts
similarity index 98%
rename from src/main/ipc/runtime-environments-call-routing.test.ts
rename to src/main/ipc/runtime-environments/runtime-environments-call-routing.test.ts
index 38c5b80db520..893e9296d74b 100644
--- a/src/main/ipc/runtime-environments-call-routing.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environments-call-routing.test.ts
@@ -3,12 +3,12 @@ import { mkdtempSync, rmSync } from 'node:fs'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
-import { REMOTE_RUNTIME_SHARED_CONTROL_CAPABILITY } from '../../shared/protocol-version'
-import { ELECTRON_REMOTE_RUNTIME_CLIENT_CAPABILITIES } from '../../shared/electron-remote-runtime-client-capabilities'
-import * as environmentStore from '../../shared/runtime-environment-store'
-import { RemoteRuntimeClientError } from '../../shared/remote-runtime-client-error'
-import { RuntimeRpcCallQueueOverloadError } from '../../shared/runtime-rpc-call-queue'
-import type { RuntimeRpcResponse } from '../../shared/runtime-rpc-envelope'
+import { REMOTE_RUNTIME_SHARED_CONTROL_CAPABILITY } from '../../../shared/protocol-version'
+import { ELECTRON_REMOTE_RUNTIME_CLIENT_CAPABILITIES } from '../../../shared/electron-remote-runtime-client-capabilities'
+import * as environmentStore from '../../../shared/runtime-environment-store'
+import { RemoteRuntimeClientError } from '../../../shared/remote-runtime-client-error'
+import { RuntimeRpcCallQueueOverloadError } from '../../../shared/runtime-rpc-call-queue'
+import type { RuntimeRpcResponse } from '../../../shared/runtime-rpc-envelope'
const {
handleMock,
@@ -53,7 +53,7 @@ vi.mock('electron', () => ({
}
}))
-vi.mock('../../shared/remote-runtime-client', () => ({
+vi.mock('../../../shared/remote-runtime-client', () => ({
sendRemoteRuntimeRequest: sendRemoteRuntimeRequestMock,
subscribeRemoteRuntimeRequest: subscribeRemoteRuntimeRequestMock
}))
diff --git a/src/main/ipc/runtime-environments-capability-cache.test.ts b/src/main/ipc/runtime-environments/runtime-environments-capability-cache.test.ts
similarity index 99%
rename from src/main/ipc/runtime-environments-capability-cache.test.ts
rename to src/main/ipc/runtime-environments/runtime-environments-capability-cache.test.ts
index 3746780476a2..81ccf16a7971 100644
--- a/src/main/ipc/runtime-environments-capability-cache.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environments-capability-cache.test.ts
@@ -3,7 +3,7 @@ import { mkdtempSync, rmSync } from 'node:fs'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
-import { REMOTE_RUNTIME_SHARED_CONTROL_CAPABILITY } from '../../shared/protocol-version'
+import { REMOTE_RUNTIME_SHARED_CONTROL_CAPABILITY } from '../../../shared/protocol-version'
const {
handleMock,
@@ -48,7 +48,7 @@ vi.mock('electron', () => ({
}
}))
-vi.mock('../../shared/remote-runtime-client', () => ({
+vi.mock('../../../shared/remote-runtime-client', () => ({
sendRemoteRuntimeRequest: sendRemoteRuntimeRequestMock,
subscribeRemoteRuntimeRequest: subscribeRemoteRuntimeRequestMock
}))
diff --git a/src/main/ipc/runtime-environments-ipc-test-harness.ts b/src/main/ipc/runtime-environments/runtime-environments-ipc-test-harness.ts
similarity index 90%
rename from src/main/ipc/runtime-environments-ipc-test-harness.ts
rename to src/main/ipc/runtime-environments/runtime-environments-ipc-test-harness.ts
index 3a810a71b407..b5b50e5c8f41 100644
--- a/src/main/ipc/runtime-environments-ipc-test-harness.ts
+++ b/src/main/ipc/runtime-environments/runtime-environments-ipc-test-harness.ts
@@ -1,10 +1,10 @@
import { expect } from 'vitest'
import type { Mock } from 'vitest'
-import { getPreferredPairedRuntimeConnection } from '../../shared/runtime-environments'
-import { encodePairingOffer } from '../../shared/pairing'
-import { resolveEnvironment } from '../../shared/runtime-environment-store'
+import { getPreferredPairedRuntimeConnection } from '../../../shared/runtime-environments'
+import { encodePairingOffer } from '../../../shared/pairing'
+import { resolveEnvironment } from '../../../shared/runtime-environment-store'
import { createRuntimeEnvironmentStatusOwner } from './runtime-environment-status-owner'
-import type { RuntimeHostStatusOwner } from '../../shared/runtime-host-status-owner'
+import type { RuntimeHostStatusOwner } from '../../../shared/runtime-host-status-owner'
import { isRuntimeEnvironmentManuallyDisconnected } from './runtime-environment-manual-disconnect'
/** Keep IPC tests on the production owner while replacing only its transport. */
diff --git a/src/main/ipc/runtime-environments-pairing.test.ts b/src/main/ipc/runtime-environments/runtime-environments-pairing.test.ts
similarity index 97%
rename from src/main/ipc/runtime-environments-pairing.test.ts
rename to src/main/ipc/runtime-environments/runtime-environments-pairing.test.ts
index a5ae600ea4f4..f9f3fcb73fd9 100644
--- a/src/main/ipc/runtime-environments-pairing.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environments-pairing.test.ts
@@ -1,14 +1,14 @@
-import type { RuntimeHostStatusSnapshot } from '../../shared/runtime-host-status'
+import type { RuntimeHostStatusSnapshot } from '../../../shared/runtime-host-status'
import { resetRuntimeEnvironmentStatusOwners } from './runtime-environment-request-connections'
import { mkdtempSync, rmSync } from 'node:fs'
import { EventEmitter } from 'node:events'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
-import { MIN_COMPATIBLE_RUNTIME_SERVER_VERSION } from '../../shared/protocol-version'
-import { ELECTRON_REMOTE_RUNTIME_CLIENT_CAPABILITIES } from '../../shared/electron-remote-runtime-client-capabilities'
-import * as environmentStore from '../../shared/runtime-environment-store'
-import { RemoteRuntimeClientError } from '../../shared/remote-runtime-client-error'
+import { MIN_COMPATIBLE_RUNTIME_SERVER_VERSION } from '../../../shared/protocol-version'
+import { ELECTRON_REMOTE_RUNTIME_CLIENT_CAPABILITIES } from '../../../shared/electron-remote-runtime-client-capabilities'
+import * as environmentStore from '../../../shared/runtime-environment-store'
+import { RemoteRuntimeClientError } from '../../../shared/remote-runtime-client-error'
const {
handleMock,
@@ -55,7 +55,7 @@ vi.mock('electron', () => ({
}
}))
-vi.mock('../../shared/remote-runtime-client', () => ({
+vi.mock('../../../shared/remote-runtime-client', () => ({
sendRemoteRuntimeRequest: sendRemoteRuntimeRequestMock,
subscribeRemoteRuntimeRequest: subscribeRemoteRuntimeRequestMock
}))
diff --git a/src/main/ipc/runtime-environments-repair.test.ts b/src/main/ipc/runtime-environments/runtime-environments-repair.test.ts
similarity index 96%
rename from src/main/ipc/runtime-environments-repair.test.ts
rename to src/main/ipc/runtime-environments/runtime-environments-repair.test.ts
index b47675654014..d03ff8029252 100644
--- a/src/main/ipc/runtime-environments-repair.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environments-repair.test.ts
@@ -2,8 +2,8 @@ import { mkdtempSync, rmSync } from 'node:fs'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
-import * as environmentStore from '../../shared/runtime-environment-store'
-import { RemoteRuntimeClientError } from '../../shared/remote-runtime-client-error'
+import * as environmentStore from '../../../shared/runtime-environment-store'
+import { RemoteRuntimeClientError } from '../../../shared/remote-runtime-client-error'
const { handleMock, getPathMock, sendRemoteRuntimeRequestMock } = vi.hoisted(() => ({
handleMock: vi.fn(),
@@ -22,7 +22,7 @@ vi.mock('electron', () => ({
}
}))
-vi.mock('../../shared/remote-runtime-client', () => ({
+vi.mock('../../../shared/remote-runtime-client', () => ({
sendRemoteRuntimeRequest: sendRemoteRuntimeRequestMock,
subscribeRemoteRuntimeRequest: vi.fn()
}))
diff --git a/src/main/ipc/runtime-environments-status-diagnostics.test.ts b/src/main/ipc/runtime-environments/runtime-environments-status-diagnostics.test.ts
similarity index 98%
rename from src/main/ipc/runtime-environments-status-diagnostics.test.ts
rename to src/main/ipc/runtime-environments/runtime-environments-status-diagnostics.test.ts
index bc385f476992..72f7d08d3d93 100644
--- a/src/main/ipc/runtime-environments-status-diagnostics.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environments-status-diagnostics.test.ts
@@ -3,8 +3,8 @@ import { mkdtempSync, rmSync } from 'node:fs'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
-import { REMOTE_RUNTIME_SHARED_CONTROL_CAPABILITY } from '../../shared/protocol-version'
-import { ELECTRON_REMOTE_RUNTIME_CLIENT_CAPABILITIES } from '../../shared/electron-remote-runtime-client-capabilities'
+import { REMOTE_RUNTIME_SHARED_CONTROL_CAPABILITY } from '../../../shared/protocol-version'
+import { ELECTRON_REMOTE_RUNTIME_CLIENT_CAPABILITIES } from '../../../shared/electron-remote-runtime-client-capabilities'
const {
handleMock,
@@ -53,7 +53,7 @@ vi.mock('electron', () => ({
}
}))
-vi.mock('../../shared/remote-runtime-client', () => ({
+vi.mock('../../../shared/remote-runtime-client', () => ({
sendRemoteRuntimeRequest: sendRemoteRuntimeRequestMock,
subscribeRemoteRuntimeRequest: subscribeRemoteRuntimeRequestMock
}))
diff --git a/src/main/ipc/runtime-environments-subscription-lifecycle.test.ts b/src/main/ipc/runtime-environments/runtime-environments-subscription-lifecycle.test.ts
similarity index 99%
rename from src/main/ipc/runtime-environments-subscription-lifecycle.test.ts
rename to src/main/ipc/runtime-environments/runtime-environments-subscription-lifecycle.test.ts
index e1c85d7b3215..c2f4472be198 100644
--- a/src/main/ipc/runtime-environments-subscription-lifecycle.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environments-subscription-lifecycle.test.ts
@@ -3,8 +3,8 @@ import { mkdtempSync, rmSync } from 'node:fs'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
-import { ELECTRON_REMOTE_RUNTIME_CLIENT_CAPABILITIES } from '../../shared/electron-remote-runtime-client-capabilities'
-import * as environmentStore from '../../shared/runtime-environment-store'
+import { ELECTRON_REMOTE_RUNTIME_CLIENT_CAPABILITIES } from '../../../shared/electron-remote-runtime-client-capabilities'
+import * as environmentStore from '../../../shared/runtime-environment-store'
const {
handleMock,
@@ -49,7 +49,7 @@ vi.mock('electron', () => ({
}
}))
-vi.mock('../../shared/remote-runtime-client', () => ({
+vi.mock('../../../shared/remote-runtime-client', () => ({
sendRemoteRuntimeRequest: sendRemoteRuntimeRequestMock,
subscribeRemoteRuntimeRequest: subscribeRemoteRuntimeRequestMock
}))
diff --git a/src/main/ipc/runtime-environments-subscription-routing.test.ts b/src/main/ipc/runtime-environments/runtime-environments-subscription-routing.test.ts
similarity index 98%
rename from src/main/ipc/runtime-environments-subscription-routing.test.ts
rename to src/main/ipc/runtime-environments/runtime-environments-subscription-routing.test.ts
index d0f675459251..783ae5efdaf0 100644
--- a/src/main/ipc/runtime-environments-subscription-routing.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environments-subscription-routing.test.ts
@@ -3,8 +3,8 @@ import { mkdtempSync, rmSync } from 'node:fs'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
-import { REMOTE_RUNTIME_SHARED_CONTROL_CAPABILITY } from '../../shared/protocol-version'
-import { ELECTRON_REMOTE_RUNTIME_CLIENT_CAPABILITIES } from '../../shared/electron-remote-runtime-client-capabilities'
+import { REMOTE_RUNTIME_SHARED_CONTROL_CAPABILITY } from '../../../shared/protocol-version'
+import { ELECTRON_REMOTE_RUNTIME_CLIENT_CAPABILITIES } from '../../../shared/electron-remote-runtime-client-capabilities'
const {
handleMock,
@@ -49,7 +49,7 @@ vi.mock('electron', () => ({
}
}))
-vi.mock('../../shared/remote-runtime-client', () => ({
+vi.mock('../../../shared/remote-runtime-client', () => ({
sendRemoteRuntimeRequest: sendRemoteRuntimeRequestMock,
subscribeRemoteRuntimeRequest: subscribeRemoteRuntimeRequestMock
}))
diff --git a/src/main/ipc/runtime-environments-subscription-teardown.test.ts b/src/main/ipc/runtime-environments/runtime-environments-subscription-teardown.test.ts
similarity index 99%
rename from src/main/ipc/runtime-environments-subscription-teardown.test.ts
rename to src/main/ipc/runtime-environments/runtime-environments-subscription-teardown.test.ts
index 49736d300074..4062c982c99b 100644
--- a/src/main/ipc/runtime-environments-subscription-teardown.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environments-subscription-teardown.test.ts
@@ -49,7 +49,7 @@ vi.mock('electron', () => ({
}
}))
-vi.mock('../../shared/remote-runtime-client', () => ({
+vi.mock('../../../shared/remote-runtime-client', () => ({
sendRemoteRuntimeRequest: sendRemoteRuntimeRequestMock,
subscribeRemoteRuntimeRequest: subscribeRemoteRuntimeRequestMock
}))
@@ -71,7 +71,7 @@ vi.mock('./runtime-environment-request-connections', async () => {
closeRemoteRuntimeRequestConnection: closeRemoteRuntimeRequestConnectionMock
})
})
-vi.mock('../browser/paired-runtime-browser-client-host-runtime', () => ({
+vi.mock('../../browser/paired-runtime-browser-client-host-runtime', () => ({
retirePairedRuntimeBrowserClientHostEnvironment:
retirePairedRuntimeBrowserClientHostEnvironmentMock
}))
diff --git a/src/main/ipc/runtime-environments.ts b/src/main/ipc/runtime-environments/runtime-environments.ts
similarity index 92%
rename from src/main/ipc/runtime-environments.ts
rename to src/main/ipc/runtime-environments/runtime-environments.ts
index dc3b19efb199..9a6a958bf0ff 100644
--- a/src/main/ipc/runtime-environments.ts
+++ b/src/main/ipc/runtime-environments/runtime-environments.ts
@@ -4,9 +4,9 @@ import {
type PendingRuntimeSubscription
} from './runtime-environment-subscription-handlers'
import { app, ipcMain } from 'electron'
-import { listEnvironments } from '../../shared/runtime-environment-store'
-import type { Store } from '../persistence'
-import { recordRemoteLayoutFrame } from '../remote-layout-snapshot/remote-layout-snapshot-recorder'
+import { listEnvironments } from '../../../shared/runtime-environment-store'
+import type { Store } from '../../persistence'
+import { recordRemoteLayoutFrame } from '../../remote-layout-snapshot/remote-layout-snapshot-recorder'
import {
isRuntimeEnvironmentManuallyDisconnected,
registerRuntimeEnvironmentConnectivityHandlers,
@@ -26,17 +26,17 @@ import { registerOrcadRuntimeConversionHandlers } from './orcad-runtime-conversi
import { registerOrcadDeltaMoveHandlers } from './orcad-delta-move-handlers'
import { registerOrcadLeaveBehindHandlers } from './orcad-leave-behind-handlers'
import { registerOrcadRuntimeMaintenanceHandlers } from './orcad-runtime-maintenance-handlers'
-import { clearPublishedManagedServer } from './ssh-renderer-broadcast'
+import { clearPublishedManagedServer } from '../ssh/ssh-renderer-broadcast'
import { clearManagedServerNotes } from './runtime-environment-managed-tunnel'
import { reconcileOrphanedRuntimeSessions } from './runtime-environment-session-reconcile'
-import { registerRuntimeSshAccessHandlers } from './runtime-ssh-access-handlers'
-import { retirePairedRuntimeBrowserClientHostEnvironment } from '../browser/paired-runtime-browser-client-host-runtime'
+import { registerRuntimeSshAccessHandlers } from '../runtime-ssh-access-handlers'
+import { retirePairedRuntimeBrowserClientHostEnvironment } from '../../browser/paired-runtime-browser-client-host-runtime'
import { registerRuntimeEnvironmentBrowserClientHostHandler } from './runtime-environment-browser-client-host-handler'
import { advanceRuntimeEnvironmentCapabilityIncarnation } from './runtime-environment-capability-evidence'
import { retireMobileDesktopRelayEnvironment } from './runtime-environment-mobile-relay-hosts'
import { watchRuntimeEnvironmentPreference } from './runtime-environment-preference'
-import { isGatedOffWslHost } from '../wsl/wsl-host-gate'
-import { resetDesktopBrowserBridgeEnvironment } from './desktop-browser-bridge-reconcile'
+import { isGatedOffWslHost } from '../../wsl/wsl-host-gate'
+import { resetDesktopBrowserBridgeEnvironment } from '../desktop-browser-bridge-reconcile'
const remoteRuntimeSubscriptions = new Map()
const getUserDataPath = (): string => app.getPath('userData')
diff --git a/src/main/ipc/runtime-upload-file-stream.test.ts b/src/main/ipc/runtime-upload-file-stream.test.ts
index 87d2c66c61a4..9d1b10d6193d 100644
--- a/src/main/ipc/runtime-upload-file-stream.test.ts
+++ b/src/main/ipc/runtime-upload-file-stream.test.ts
@@ -31,7 +31,7 @@ const callRuntimeEnvironment =
) => unknown
>()
-vi.mock('./runtime-environment-transport-routing', () => ({
+vi.mock('./runtime-environments/runtime-environment-transport-routing', () => ({
callRuntimeEnvironment: (...args: Parameters) =>
callRuntimeEnvironment(...args)
}))
@@ -48,7 +48,7 @@ const {
clearRuntimeEnvironmentManualDisconnect,
markRuntimeEnvironmentManuallyDisconnected,
RUNTIME_MANUALLY_DISCONNECTED_MESSAGE
-} = await import('./runtime-environment-manual-disconnect')
+} = await import('./runtime-environments/runtime-environment-manual-disconnect')
let workDir: string
diff --git a/src/main/ipc/runtime-upload-file-stream.ts b/src/main/ipc/runtime-upload-file-stream.ts
index 00a5788537e5..a05b6ec2acd4 100644
--- a/src/main/ipc/runtime-upload-file-stream.ts
+++ b/src/main/ipc/runtime-upload-file-stream.ts
@@ -9,8 +9,8 @@ import { formatByteCeiling, REMOTE_IMPORT_MAX_FILE_BYTES } from './runtime-impor
import {
isRuntimeEnvironmentManuallyDisconnected,
RUNTIME_MANUALLY_DISCONNECTED_MESSAGE
-} from './runtime-environment-manual-disconnect'
-import { callRuntimeEnvironment } from './runtime-environment-transport-routing'
+} from './runtime-environments/runtime-environment-manual-disconnect'
+import { callRuntimeEnvironment } from './runtime-environments/runtime-environment-transport-routing'
// Why: base64 turns 3 bytes into 4 chars, so a 384 KiB slice lands on the wire
// as exactly 512 KiB — the chunk size the renderer used before streaming.
diff --git a/src/main/ipc/runtime-upload-slice-boundaries.test.ts b/src/main/ipc/runtime-upload-slice-boundaries.test.ts
index 6a7b580e086f..fc8c13f88def 100644
--- a/src/main/ipc/runtime-upload-slice-boundaries.test.ts
+++ b/src/main/ipc/runtime-upload-slice-boundaries.test.ts
@@ -35,7 +35,7 @@ const callRuntimeEnvironment = vi.fn<(...args: CallArgs) => Promise>()
// base64 in mock.calls and masquerade as a leak. Big tests swap in a plain fn.
let transportImpl: (...args: CallArgs) => Promise = (...args) =>
callRuntimeEnvironment(...args)
-vi.mock('./runtime-environment-transport-routing', () => ({
+vi.mock('./runtime-environments/runtime-environment-transport-routing', () => ({
callRuntimeEnvironment: (...args: CallArgs) => transportImpl(...args)
}))
diff --git a/src/main/ipc/runtime-upload-temp-sweep.test.ts b/src/main/ipc/runtime-upload-temp-sweep.test.ts
index 06e7fe9282c5..8109f1218c39 100644
--- a/src/main/ipc/runtime-upload-temp-sweep.test.ts
+++ b/src/main/ipc/runtime-upload-temp-sweep.test.ts
@@ -15,7 +15,7 @@ const callRuntimeEnvironment =
) => unknown
>()
-vi.mock('./runtime-environment-transport-routing', () => ({
+vi.mock('./runtime-environments/runtime-environment-transport-routing', () => ({
callRuntimeEnvironment: (...args: Parameters) =>
callRuntimeEnvironment(...args)
}))
diff --git a/src/main/ipc/runtime-upload-temp-sweep.ts b/src/main/ipc/runtime-upload-temp-sweep.ts
index 46150fd96e5d..938228e3a178 100644
--- a/src/main/ipc/runtime-upload-temp-sweep.ts
+++ b/src/main/ipc/runtime-upload-temp-sweep.ts
@@ -1,6 +1,6 @@
import { setTimeout } from 'node:timers/promises'
import type { RuntimeUploadFileStreamRequest } from '../../shared/runtime-upload-staging-contract'
-import { callRuntimeEnvironment } from './runtime-environment-transport-routing'
+import { callRuntimeEnvironment } from './runtime-environments/runtime-environment-transport-routing'
const RUNTIME_UPLOAD_SWEEP_ATTEMPTS = 2
const RUNTIME_UPLOAD_SWEEP_SETTLE_MS = 250
diff --git a/src/main/ipc/settings.ts b/src/main/ipc/settings.ts
index 23bf11fde212..65b7364bcabe 100644
--- a/src/main/ipc/settings.ts
+++ b/src/main/ipc/settings.ts
@@ -29,7 +29,7 @@ import { prepareLocalWorktreeRootsForRepos } from '../worktree-root-preparation'
import { scheduleCurrentWorktreeBaseDirectoryWatcherSync } from './worktree-base-directory-watcher'
import { applyPRBotAuthorOverride } from '../../shared/pr-bot-author-overrides'
import { resolveEnvironment } from '../../shared/runtime-environment-store'
-import { readSettingsWithRuntimeEnvironmentPreference } from './runtime-environment-preference'
+import { readSettingsWithRuntimeEnvironmentPreference } from './runtime-environments/runtime-environment-preference'
import { haveSameDisabledTuiAgents } from '../../shared/tui-agent-selection'
import {
normalizeMobilePairingCustomAddress,
diff --git a/src/main/ipc/skill-cloud-ipc-handlers.test.ts b/src/main/ipc/skill-cloud-ipc-handlers.test.ts
index fbd9c7fdc09c..24aa32f0a24f 100644
--- a/src/main/ipc/skill-cloud-ipc-handlers.test.ts
+++ b/src/main/ipc/skill-cloud-ipc-handlers.test.ts
@@ -41,7 +41,9 @@ vi.mock('./skill-install-progress-ipc', () => ({
sendBundleInstallProgress: vi.fn(),
sendSkillInstallProgress: vi.fn()
}))
-vi.mock('./runtime-environment-transport-routing', () => ({ callRuntimeEnvironment: vi.fn() }))
+vi.mock('./runtime-environments/runtime-environment-transport-routing', () => ({
+ callRuntimeEnvironment: vi.fn()
+}))
import { registerSkillCloudIpcHandlers } from './skill-cloud-ipc-handlers'
diff --git a/src/main/ipc/skill-cloud-ipc-handlers.ts b/src/main/ipc/skill-cloud-ipc-handlers.ts
index ed35400666fc..1f14fc0b71b4 100644
--- a/src/main/ipc/skill-cloud-ipc-handlers.ts
+++ b/src/main/ipc/skill-cloud-ipc-handlers.ts
@@ -20,7 +20,7 @@ import {
supportsSkillRuntimeCancellation,
supportsSkillRuntimeInstall
} from '../skills/skill-runtime-capability'
-import { callRuntimeEnvironment } from './runtime-environment-transport-routing'
+import { callRuntimeEnvironment } from './runtime-environments/runtime-environment-transport-routing'
import { registerSkillInstallManagementIpcHandlers } from './skill-install-management-ipc-handlers'
import { handleMainWindowSkillIpc } from './skill-ipc-main-window'
import { sendBundleInstallProgress, sendSkillInstallProgress } from './skill-install-progress-ipc'
diff --git a/src/main/ipc/skill-install-management-ipc-handlers.test.ts b/src/main/ipc/skill-install-management-ipc-handlers.test.ts
index d781907f4790..dc8de356288b 100644
--- a/src/main/ipc/skill-install-management-ipc-handlers.test.ts
+++ b/src/main/ipc/skill-install-management-ipc-handlers.test.ts
@@ -21,7 +21,7 @@ vi.mock('./skill-ipc-main-window', () => ({
handleMainWindowSkillIpc: (channel: string, handler: unknown) => handleMock(channel, handler)
}))
-vi.mock('./runtime-environment-transport-routing', () => ({
+vi.mock('./runtime-environments/runtime-environment-transport-routing', () => ({
callRuntimeEnvironment: callRuntimeEnvironmentMock
}))
diff --git a/src/main/ipc/skill-install-management-ipc-handlers.ts b/src/main/ipc/skill-install-management-ipc-handlers.ts
index 5c64115b19d6..88901b6ea862 100644
--- a/src/main/ipc/skill-install-management-ipc-handlers.ts
+++ b/src/main/ipc/skill-install-management-ipc-handlers.ts
@@ -19,7 +19,7 @@ import {
supportsSkillRuntimeManagement
} from '../skills/skill-runtime-capability'
import { listWslDistrosAsync } from '../wsl'
-import { callRuntimeEnvironment } from './runtime-environment-transport-routing'
+import { callRuntimeEnvironment } from './runtime-environments/runtime-environment-transport-routing'
import { handleMainWindowSkillIpc } from './skill-ipc-main-window'
const environmentIdSchema = z.string().min(1).max(128)
diff --git a/src/main/ipc/ssh-app-shutdown.test.ts b/src/main/ipc/ssh/ssh-app-shutdown.test.ts
similarity index 86%
rename from src/main/ipc/ssh-app-shutdown.test.ts
rename to src/main/ipc/ssh/ssh-app-shutdown.test.ts
index cb887bbac1cb..798e4920d0b3 100644
--- a/src/main/ipc/ssh-app-shutdown.test.ts
+++ b/src/main/ipc/ssh/ssh-app-shutdown.test.ts
@@ -5,23 +5,23 @@ const mocks = await vi.hoisted(async () => {
return createSshIpcMocks()
})
-vi.mock('../ssh/config/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
+vi.mock('../../ssh/config/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
vi.mock('electron', () => mocks.electron)
-vi.mock('../ssh/ssh-connection-store', () => mocks.sshConnectionStore)
+vi.mock('../../ssh/ssh-connection-store', () => mocks.sshConnectionStore)
vi.mock('./ssh-host-server-connect', () => mocks.hostServerConnect)
-vi.mock('../ssh/ssh-connection-manager', () => mocks.sshConnectionManager)
-vi.mock('../ssh/ssh-channel-multiplexer', () => mocks.sshChannelMultiplexer)
-vi.mock('../ssh/port-forwarding/ssh-port-forward', () => mocks.sshPortForward)
+vi.mock('../../ssh/ssh-connection-manager', () => mocks.sshConnectionManager)
+vi.mock('../../ssh/ssh-channel-multiplexer', () => mocks.sshChannelMultiplexer)
+vi.mock('../../ssh/port-forwarding/ssh-port-forward', () => mocks.sshPortForward)
vi.mock('../ssh/ssh-port-scanner', () => mocks.sshPortScanner)
const { shutdownTunnelsMock } = vi.hoisted(() => ({ shutdownTunnelsMock: vi.fn() }))
-vi.mock('../managed-server/lifecycle/orcad-managed-tunnel', async (importOriginal) => ({
+vi.mock('../../managed-server/lifecycle/orcad-managed-tunnel', async (importOriginal) => ({
...(await importOriginal>()),
shutdownOrcadManagedTunnels: shutdownTunnelsMock
}))
import { beginSshShutdown } from './ssh-shutdown-drain'
-import type { SshTarget } from '../../shared/ssh-types'
-import { quitTeardownStartGate } from '../quit-teardown-start-gate'
+import type { SshTarget } from '../../../shared/ssh-types'
+import { quitTeardownStartGate } from '../../quit-teardown-start-gate'
import { createSshIpcHarness } from './ssh-ipc-test-harness'
const { mockSshStore, mockConnectionManager, mockPortForwardManager } = mocks
diff --git a/src/main/ipc/ssh-browse.test.ts b/src/main/ipc/ssh/ssh-browse.test.ts
similarity index 100%
rename from src/main/ipc/ssh-browse.test.ts
rename to src/main/ipc/ssh/ssh-browse.test.ts
diff --git a/src/main/ipc/ssh-browse.ts b/src/main/ipc/ssh/ssh-browse.ts
similarity index 80%
rename from src/main/ipc/ssh-browse.ts
rename to src/main/ipc/ssh/ssh-browse.ts
index d0a2d8ccf107..886305158d88 100644
--- a/src/main/ipc/ssh-browse.ts
+++ b/src/main/ipc/ssh/ssh-browse.ts
@@ -1,6 +1,6 @@
import { ipcMain } from 'electron'
-import type { SshConnectionManager } from '../ssh/ssh-connection-manager'
-import { browseSshDirectory, type RemoteBrowseResult } from '../ssh/ssh-remote-directory-browse'
+import type { SshConnectionManager } from '../../ssh/ssh-connection-manager'
+import { browseSshDirectory, type RemoteBrowseResult } from '../../ssh/ssh-remote-directory-browse'
export function registerSshBrowseHandler(
getConnectionManager: () => SshConnectionManager | null
diff --git a/src/main/ipc/ssh-connect-attempt-registry.ts b/src/main/ipc/ssh/ssh-connect-attempt-registry.ts
similarity index 95%
rename from src/main/ipc/ssh-connect-attempt-registry.ts
rename to src/main/ipc/ssh/ssh-connect-attempt-registry.ts
index c1986886b1e9..826781207b6c 100644
--- a/src/main/ipc/ssh-connect-attempt-registry.ts
+++ b/src/main/ipc/ssh/ssh-connect-attempt-registry.ts
@@ -1,9 +1,9 @@
-import type { DirectSshAuthority, SshConnectionState } from '../../shared/ssh-types'
-import { quitTeardownStartGate } from '../quit-teardown-start-gate'
+import type { DirectSshAuthority, SshConnectionState } from '../../../shared/ssh-types'
+import { quitTeardownStartGate } from '../../quit-teardown-start-gate'
import {
isCurrentSshProviderAuthority,
rotateSshProviderAuthority
-} from '../ssh/ssh-provider-authority'
+} from '../../ssh/ssh-provider-authority'
// Why: keep this outside registerSshHandlers so a BrowserWindow recreation mid-connect doesn't split credential tracking.
export const credentialRequestedForTarget = new Set()
diff --git a/src/main/ipc/ssh-connect-decision-cancellation.test.ts b/src/main/ipc/ssh/ssh-connect-decision-cancellation.test.ts
similarity index 91%
rename from src/main/ipc/ssh-connect-decision-cancellation.test.ts
rename to src/main/ipc/ssh/ssh-connect-decision-cancellation.test.ts
index fb406cec1c04..13c3e201cfe7 100644
--- a/src/main/ipc/ssh-connect-decision-cancellation.test.ts
+++ b/src/main/ipc/ssh/ssh-connect-decision-cancellation.test.ts
@@ -5,23 +5,23 @@ const mocks = await vi.hoisted(async () => {
return createSshIpcMocks()
})
-vi.mock('../ssh/config/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
+vi.mock('../../ssh/config/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
vi.mock('electron', () => mocks.electron)
-vi.mock('../ssh/ssh-connection-store', () => mocks.sshConnectionStore)
+vi.mock('../../ssh/ssh-connection-store', () => mocks.sshConnectionStore)
vi.mock('./ssh-host-server-connect', () => mocks.hostServerConnect)
-vi.mock('../ssh/ssh-connection-manager', () => mocks.sshConnectionManager)
-vi.mock('../ssh/ssh-channel-multiplexer', () => mocks.sshChannelMultiplexer)
-vi.mock('../ssh/port-forwarding/ssh-port-forward', () => mocks.sshPortForward)
+vi.mock('../../ssh/ssh-connection-manager', () => mocks.sshConnectionManager)
+vi.mock('../../ssh/ssh-channel-multiplexer', () => mocks.sshChannelMultiplexer)
+vi.mock('../../ssh/port-forwarding/ssh-port-forward', () => mocks.sshPortForward)
vi.mock('../ssh/ssh-port-scanner', () => mocks.sshPortScanner)
-vi.mock(import('../ssh/legacy-relay/legacy-relay-bridge-registry'), async (importOriginal) => ({
+vi.mock(import('../../ssh/legacy-relay/legacy-relay-bridge-registry'), async (importOriginal) => ({
...(await importOriginal()),
startLegacyRelayBridge: vi.fn(async () => {}),
stopLegacyRelayBridge: vi.fn()
}))
-import type { SshTarget } from '../../shared/ssh-types'
-import type { SshConnection } from '../ssh/ssh-connection'
-import { recordSshConnectionOpened } from '../ssh/ssh-connection-attribution'
+import type { SshTarget } from '../../../shared/ssh-types'
+import type { SshConnection } from '../../ssh/ssh-connection'
+import { recordSshConnectionOpened } from '../../ssh/ssh-connection-attribution'
import {
decideHostServer,
publishBridgedUnservedHostServer,
@@ -32,7 +32,7 @@ import {
import {
startLegacyRelayBridge,
stopLegacyRelayBridge
-} from '../ssh/legacy-relay/legacy-relay-bridge-registry'
+} from '../../ssh/legacy-relay/legacy-relay-bridge-registry'
import { createSshIpcHarness } from './ssh-ipc-test-harness'
const { mockSshStore, mockConnectionManager } = mocks
diff --git a/src/main/ipc/ssh-connect-flow.ts b/src/main/ipc/ssh/ssh-connect-flow.ts
similarity index 92%
rename from src/main/ipc/ssh-connect-flow.ts
rename to src/main/ipc/ssh/ssh-connect-flow.ts
index 289f9ae478b4..793bfced7d7e 100644
--- a/src/main/ipc/ssh-connect-flow.ts
+++ b/src/main/ipc/ssh/ssh-connect-flow.ts
@@ -1,13 +1,13 @@
import { appendFileSync } from 'node:fs'
-import type { SshConnectionState } from '../../shared/ssh-types'
-import { createCancelledConnectAttemptError } from '../ssh/ssh-connect-attempt-cancellation'
+import type { SshConnectionState } from '../../../shared/ssh-types'
+import { createCancelledConnectAttemptError } from '../../ssh/ssh-connect-attempt-cancellation'
import {
getSshProviderAuthority,
isCurrentSshProviderAuthority,
rotateSshProviderAuthority
-} from '../ssh/ssh-provider-authority'
-import { adoptSshConnection, runAttributedToSshOwner } from '../ssh/ssh-connection-attribution'
-import { getSshTargetRegistryStore } from '../ssh/ssh-target-registry'
+} from '../../ssh/ssh-provider-authority'
+import { adoptSshConnection, runAttributedToSshOwner } from '../../ssh/ssh-connection-attribution'
+import { getSshTargetRegistryStore } from '../../ssh/ssh-target-registry'
import {
decideHostServer,
recheckWhenManagedFenceClears,
@@ -24,9 +24,12 @@ import {
import { connectionManager } from './ssh-ipc-context'
import { abandonDecisionTransport } from './ssh-session-teardown'
import { awaitTargetLifecycle } from './ssh-target-lifecycle-queue'
-import { startLegacyRelayBridge } from '../ssh/legacy-relay/legacy-relay-bridge-registry'
-import { clearSshCredentialDeclined } from '../ssh/ssh-credential-decline'
-import { createSshUserDisconnectedError, isSshUserDisconnected } from '../ssh/ssh-user-disconnect'
+import { startLegacyRelayBridge } from '../../ssh/legacy-relay/legacy-relay-bridge-registry'
+import { clearSshCredentialDeclined } from '../../ssh/ssh-credential-decline'
+import {
+ createSshUserDisconnectedError,
+ isSshUserDisconnected
+} from '../../ssh/ssh-user-disconnect'
import {
liftSshHostUserDisconnect,
resumeRuntimeEnvironmentStatus
diff --git a/src/main/ipc/ssh-connection-handlers.ts b/src/main/ipc/ssh/ssh-connection-handlers.ts
similarity index 91%
rename from src/main/ipc/ssh-connection-handlers.ts
rename to src/main/ipc/ssh/ssh-connection-handlers.ts
index b61b23952526..855571ae5fc2 100644
--- a/src/main/ipc/ssh-connection-handlers.ts
+++ b/src/main/ipc/ssh/ssh-connection-handlers.ts
@@ -1,5 +1,8 @@
import { ipcMain } from 'electron'
-import { setSshTargetRegistryHandlers, getSshTargetRegistryStore } from '../ssh/ssh-target-registry'
+import {
+ setSshTargetRegistryHandlers,
+ getSshTargetRegistryStore
+} from '../../ssh/ssh-target-registry'
import {
assertSshConnectsNotFenced,
connectInFlight,
@@ -9,8 +12,11 @@ import { connectTarget } from './ssh-connect-flow'
import { connectionManager } from './ssh-ipc-context'
import { getPublicSshState } from './ssh-renderer-broadcast'
import { disconnectSshHostForUser } from './ssh-host-user-disconnect'
-import { errorMessage } from '../../shared/error-message'
-import { clearSshCredentialDeclined, isSshCredentialDeclined } from '../ssh/ssh-credential-decline'
+import { errorMessage } from '../../../shared/error-message'
+import {
+ clearSshCredentialDeclined,
+ isSshCredentialDeclined
+} from '../../ssh/ssh-credential-decline'
export function registerSshConnectionHandlers(): void {
setSshTargetRegistryHandlers({
diff --git a/src/main/ipc/ssh-connection-state-callbacks.ts b/src/main/ipc/ssh/ssh-connection-state-callbacks.ts
similarity index 83%
rename from src/main/ipc/ssh-connection-state-callbacks.ts
rename to src/main/ipc/ssh/ssh-connection-state-callbacks.ts
index ccaa40fb9790..f0f32838303f 100644
--- a/src/main/ipc/ssh-connection-state-callbacks.ts
+++ b/src/main/ipc/ssh/ssh-connection-state-callbacks.ts
@@ -1,14 +1,17 @@
-import type { SshConnectionCallbacks } from '../ssh/ssh-connection-utils'
-import type { SshConnectionState } from '../../shared/ssh-types'
-import { isSshHostCensusInFlight } from '../ssh/ssh-connection-attribution'
-import { clearSshCredentialDeclined, isSshCredentialDeclined } from '../ssh/ssh-credential-decline'
+import type { SshConnectionCallbacks } from '../../ssh/ssh-connection-utils'
+import type { SshConnectionState } from '../../../shared/ssh-types'
+import { isSshHostCensusInFlight } from '../../ssh/ssh-connection-attribution'
+import {
+ clearSshCredentialDeclined,
+ isSshCredentialDeclined
+} from '../../ssh/ssh-credential-decline'
import {
connectInFlight,
credentialRequestedForTarget,
testingTargets
} from './ssh-connect-attempt-registry'
import { connectionManager, getCurrentMainWindow } from './ssh-ipc-context'
-import { getSshTargetRegistryStore } from '../ssh/ssh-target-registry'
+import { getSshTargetRegistryStore } from '../../ssh/ssh-target-registry'
import { recordSshSignInRequirement } from './ssh-sign-in-requirement'
import { restoreManagedHostPortForwards } from './ssh-managed-port-forward-restore'
import { requestCredential } from './ssh-passphrase'
diff --git a/src/main/ipc/ssh-credential-cancel.test.ts b/src/main/ipc/ssh/ssh-credential-cancel.test.ts
similarity index 90%
rename from src/main/ipc/ssh-credential-cancel.test.ts
rename to src/main/ipc/ssh/ssh-credential-cancel.test.ts
index f318ba954e23..7483581988ab 100644
--- a/src/main/ipc/ssh-credential-cancel.test.ts
+++ b/src/main/ipc/ssh/ssh-credential-cancel.test.ts
@@ -5,18 +5,18 @@ const mocks = await vi.hoisted(async () => {
return createSshIpcMocks()
})
-vi.mock('../ssh/config/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
+vi.mock('../../ssh/config/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
vi.mock('electron', () => mocks.electron)
-vi.mock('../ssh/ssh-connection-store', () => mocks.sshConnectionStore)
+vi.mock('../../ssh/ssh-connection-store', () => mocks.sshConnectionStore)
vi.mock('./ssh-host-server-connect', () => mocks.hostServerConnect)
-vi.mock('../ssh/ssh-connection-manager', () => mocks.sshConnectionManager)
-vi.mock('../ssh/ssh-channel-multiplexer', () => mocks.sshChannelMultiplexer)
-vi.mock('../ssh/port-forwarding/ssh-port-forward', () => mocks.sshPortForward)
+vi.mock('../../ssh/ssh-connection-manager', () => mocks.sshConnectionManager)
+vi.mock('../../ssh/ssh-channel-multiplexer', () => mocks.sshChannelMultiplexer)
+vi.mock('../../ssh/port-forwarding/ssh-port-forward', () => mocks.sshPortForward)
vi.mock('../ssh/ssh-port-scanner', () => mocks.sshPortScanner)
-import type { SshCredentialKind } from '../ssh/ssh-connection-utils'
-import type { SshTarget } from '../../shared/ssh-types'
-import { isSshCredentialDeclined } from '../ssh/ssh-credential-decline'
+import type { SshCredentialKind } from '../../ssh/ssh-connection-utils'
+import type { SshTarget } from '../../../shared/ssh-types'
+import { isSshCredentialDeclined } from '../../ssh/ssh-credential-decline'
import { createSshIpcHarness } from './ssh-ipc-test-harness'
import { createSshConnectionCallbacks } from './ssh-connection-state-callbacks'
diff --git a/src/main/ipc/ssh-disconnect-cancellation.test.ts b/src/main/ipc/ssh/ssh-disconnect-cancellation.test.ts
similarity index 78%
rename from src/main/ipc/ssh-disconnect-cancellation.test.ts
rename to src/main/ipc/ssh/ssh-disconnect-cancellation.test.ts
index 403a55b28341..502464e94806 100644
--- a/src/main/ipc/ssh-disconnect-cancellation.test.ts
+++ b/src/main/ipc/ssh/ssh-disconnect-cancellation.test.ts
@@ -5,16 +5,16 @@ const mocks = await vi.hoisted(async () => {
return createSshIpcMocks()
})
-vi.mock('../ssh/config/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
+vi.mock('../../ssh/config/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
vi.mock('electron', () => mocks.electron)
-vi.mock('../ssh/ssh-connection-store', () => mocks.sshConnectionStore)
+vi.mock('../../ssh/ssh-connection-store', () => mocks.sshConnectionStore)
vi.mock('./ssh-host-server-connect', () => mocks.hostServerConnect)
-vi.mock('../ssh/ssh-connection-manager', () => mocks.sshConnectionManager)
-vi.mock('../ssh/ssh-channel-multiplexer', () => mocks.sshChannelMultiplexer)
-vi.mock('../ssh/port-forwarding/ssh-port-forward', () => mocks.sshPortForward)
+vi.mock('../../ssh/ssh-connection-manager', () => mocks.sshConnectionManager)
+vi.mock('../../ssh/ssh-channel-multiplexer', () => mocks.sshChannelMultiplexer)
+vi.mock('../../ssh/port-forwarding/ssh-port-forward', () => mocks.sshPortForward)
vi.mock('../ssh/ssh-port-scanner', () => mocks.sshPortScanner)
-import type { SshConnectionState, SshTarget } from '../../shared/ssh-types'
+import type { SshConnectionState, SshTarget } from '../../../shared/ssh-types'
import { createSshIpcHarness } from './ssh-ipc-test-harness'
const { mockSshStore, mockConnectionManager } = mocks
diff --git a/src/main/ipc/ssh-handler-reregistration.test.ts b/src/main/ipc/ssh/ssh-handler-reregistration.test.ts
similarity index 90%
rename from src/main/ipc/ssh-handler-reregistration.test.ts
rename to src/main/ipc/ssh/ssh-handler-reregistration.test.ts
index fb8f5c27aead..7ec3d28ba735 100644
--- a/src/main/ipc/ssh-handler-reregistration.test.ts
+++ b/src/main/ipc/ssh/ssh-handler-reregistration.test.ts
@@ -5,17 +5,17 @@ const mocks = await vi.hoisted(async () => {
return createSshIpcMocks()
})
-vi.mock('../ssh/config/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
+vi.mock('../../ssh/config/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
vi.mock('electron', () => mocks.electron)
-vi.mock('../ssh/ssh-connection-store', () => mocks.sshConnectionStore)
+vi.mock('../../ssh/ssh-connection-store', () => mocks.sshConnectionStore)
vi.mock('./ssh-host-server-connect', () => mocks.hostServerConnect)
-vi.mock('../ssh/ssh-connection-manager', () => mocks.sshConnectionManager)
-vi.mock('../ssh/ssh-channel-multiplexer', () => mocks.sshChannelMultiplexer)
-vi.mock('../ssh/port-forwarding/ssh-port-forward', () => mocks.sshPortForward)
+vi.mock('../../ssh/ssh-connection-manager', () => mocks.sshConnectionManager)
+vi.mock('../../ssh/ssh-channel-multiplexer', () => mocks.sshChannelMultiplexer)
+vi.mock('../../ssh/port-forwarding/ssh-port-forward', () => mocks.sshPortForward)
vi.mock('../ssh/ssh-port-scanner', () => mocks.sshPortScanner)
import { registerSshHandlers } from './ssh'
-import type { SshTarget } from '../../shared/ssh-types'
+import type { SshTarget } from '../../../shared/ssh-types'
import { createSshIpcHarness } from './ssh-ipc-test-harness'
const {
diff --git a/src/main/ipc/ssh-host-launch-session-note.test.ts b/src/main/ipc/ssh/ssh-host-launch-session-note.test.ts
similarity index 95%
rename from src/main/ipc/ssh-host-launch-session-note.test.ts
rename to src/main/ipc/ssh/ssh-host-launch-session-note.test.ts
index 89a58f0f63d9..5d966f542b6f 100644
--- a/src/main/ipc/ssh-host-launch-session-note.test.ts
+++ b/src/main/ipc/ssh/ssh-host-launch-session-note.test.ts
@@ -1,5 +1,5 @@
import { beforeEach, describe, expect, it, vi } from 'vitest'
-import type { SshManagedServerStatus } from '../../shared/ssh-types'
+import type { SshManagedServerStatus } from '../../../shared/ssh-types'
const mocks = vi.hoisted(() => {
const status: { current: SshManagedServerStatus | undefined } = { current: undefined }
@@ -11,25 +11,25 @@ const mocks = vi.hoisted(() => {
return { read: vi.fn(), publish: vi.fn(), clear: vi.fn(), os, connection, status, environments }
})
-vi.mock('../../shared/app-environment', () => ({
+vi.mock('../../../shared/app-environment', () => ({
getAppEnvironment: () => ({ getPath: () => '/u' })
}))
-vi.mock('../../shared/runtime-environment-store', () => ({
+vi.mock('../../../shared/runtime-environment-store', () => ({
listEnvironments: () => mocks.environments.current.map((id) => ({ id }))
}))
-vi.mock('../managed-server/lifecycle/orcad-managed-launch-session', () => ({
+vi.mock('../../managed-server/lifecycle/orcad-managed-launch-session', () => ({
readManagedOrcadLaunchSshSession: mocks.read
}))
-vi.mock('../ssh/ssh-host-platform-memo', () => ({
+vi.mock('../../ssh/ssh-host-platform-memo', () => ({
knownSshHostPlatform: () => ({ os: mocks.os.current })
}))
-vi.mock('../ssh/ssh-host-server-status', () => ({
+vi.mock('../../ssh/ssh-host-server-status', () => ({
getSshHostServerStatus: () => mocks.status.current
}))
vi.mock('./ssh-ipc-context', () => ({
connectionManager: { getConnection: () => mocks.connection.current }
}))
-vi.mock('./runtime-environment-managed-tunnel', () => ({
+vi.mock('../runtime-environments/runtime-environment-managed-tunnel', () => ({
publishHostServerStatus: mocks.publish,
clearLaunchSessionNote: mocks.clear
}))
diff --git a/src/main/ipc/ssh-host-launch-session-note.ts b/src/main/ipc/ssh/ssh-host-launch-session-note.ts
similarity index 89%
rename from src/main/ipc/ssh-host-launch-session-note.ts
rename to src/main/ipc/ssh/ssh-host-launch-session-note.ts
index 4487277e0cc3..afccdfd5032c 100644
--- a/src/main/ipc/ssh-host-launch-session-note.ts
+++ b/src/main/ipc/ssh/ssh-host-launch-session-note.ts
@@ -1,14 +1,14 @@
/** After a managed connect or restore: flags a macOS host whose server outlived its launching SSH session. */
-import { getAppEnvironment } from '../../shared/app-environment'
-import { listEnvironments } from '../../shared/runtime-environment-store'
-import { readManagedOrcadLaunchSshSession } from '../managed-server/lifecycle/orcad-managed-launch-session'
-import { knownSshHostPlatform } from '../ssh/ssh-host-platform-memo'
-import { getSshHostServerStatus } from '../ssh/ssh-host-server-status'
+import { getAppEnvironment } from '../../../shared/app-environment'
+import { listEnvironments } from '../../../shared/runtime-environment-store'
+import { readManagedOrcadLaunchSshSession } from '../../managed-server/lifecycle/orcad-managed-launch-session'
+import { knownSshHostPlatform } from '../../ssh/ssh-host-platform-memo'
+import { getSshHostServerStatus } from '../../ssh/ssh-host-server-status'
import { connectionManager } from './ssh-ipc-context'
import {
clearLaunchSessionNote,
publishHostServerStatus
-} from './runtime-environment-managed-tunnel'
+} from '../runtime-environments/runtime-environment-managed-tunnel'
// Once per SSH session: a restore runs on every runtime call, and the answer only changes when
// a session ends, which the next session (a new connection or reconnect generation) checks.
diff --git a/src/main/ipc/ssh-host-server-connect.ts b/src/main/ipc/ssh/ssh-host-server-connect.ts
similarity index 92%
rename from src/main/ipc/ssh-host-server-connect.ts
rename to src/main/ipc/ssh/ssh-host-server-connect.ts
index f7695247b9f8..8f698ff6ce0d 100644
--- a/src/main/ipc/ssh-host-server-connect.ts
+++ b/src/main/ipc/ssh/ssh-host-server-connect.ts
@@ -1,28 +1,28 @@
/** The connect path's managed-server step: decide the host's server, and publish a managed connect. */
-import { getAppEnvironment } from '../../shared/app-environment'
+import { getAppEnvironment } from '../../../shared/app-environment'
import type {
SshConnectionState,
SshManagedServerLinkedProject,
SshManagedServerServingNote,
SshManagedServerUpdateNote,
SshTarget
-} from '../../shared/ssh-types'
-import type { HostServerOnConnectResult } from '../ssh/ssh-host-server-on-connect'
-import { unservedHostServerMessage, unservedServerStatus } from '../ssh/ssh-host-unserved-status'
+} from '../../../shared/ssh-types'
+import type { HostServerOnConnectResult } from '../../ssh/ssh-host-server-on-connect'
+import { unservedHostServerMessage, unservedServerStatus } from '../../ssh/ssh-host-unserved-status'
import {
clearSshHostServerStatus,
getSshHostServerStatus,
setSshHostServerStatus
-} from '../ssh/ssh-host-server-status'
+} from '../../ssh/ssh-host-server-status'
import { connectionManager, getCurrentMainWindow } from './ssh-ipc-context'
import { restoreManagedHostPortForwards } from './ssh-managed-port-forward-restore'
import { broadcastSshState, getPublicSshState } from './ssh-renderer-broadcast'
-import { isAuthError } from '../ssh/ssh-connection-utils'
+import { isAuthError } from '../../ssh/ssh-connection-utils'
export async function decideHostServer(target: SshTarget): Promise {
// Why lazy: the managed-server graph (deploy, migration, tunnel) loads only when a host connects.
const [{ resolveHostServerOnConnect }, { hostServerOnConnectDeps }] = await Promise.all([
- import('../ssh/ssh-host-server-on-connect'),
+ import('../../ssh/ssh-host-server-on-connect'),
import('./ssh-host-server-on-connect-wiring')
])
return await resolveHostServerOnConnect(
@@ -34,7 +34,7 @@ export async function decideHostServer(target: SshTarget): Promise {
const deps = wiring.hostServerOnConnectDeps(getAppEnvironment().getPath('userData'))
diff --git a/src/main/ipc/ssh-host-server-decision-failure.test.ts b/src/main/ipc/ssh/ssh-host-server-decision-failure.test.ts
similarity index 88%
rename from src/main/ipc/ssh-host-server-decision-failure.test.ts
rename to src/main/ipc/ssh/ssh-host-server-decision-failure.test.ts
index 9656ecdbb66b..1138c40d23c0 100644
--- a/src/main/ipc/ssh-host-server-decision-failure.test.ts
+++ b/src/main/ipc/ssh/ssh-host-server-decision-failure.test.ts
@@ -1,17 +1,17 @@
import { beforeEach, describe, expect, it, vi } from 'vitest'
-import type { SshTarget } from '../../shared/ssh-types'
+import type { SshTarget } from '../../../shared/ssh-types'
const mocks = vi.hoisted(() => ({
getTarget: vi.fn(),
resolve: vi.fn()
}))
-vi.mock('../../shared/app-environment', () => ({
+vi.mock('../../../shared/app-environment', () => ({
getAppEnvironment: () => ({ getPath: () => '/tmp/user-data', getVersion: () => '1.5.0' })
}))
-vi.mock('../ssh/ssh-target-registry', () => ({
+vi.mock('../../ssh/ssh-target-registry', () => ({
getSshTargetRegistryStore: () => ({ getTarget: mocks.getTarget })
}))
-vi.mock('../ssh/ssh-host-server-on-connect', () => ({
+vi.mock('../../ssh/ssh-host-server-on-connect', () => ({
resolveHostServerOnConnect: mocks.resolve
}))
vi.mock('./ssh-host-server-on-connect-wiring', () => ({ hostServerOnConnectDeps: () => ({}) }))
@@ -26,7 +26,7 @@ const { decideHostServer, publishHostServerDecisionFailure } =
await import('./ssh-host-server-connect')
const { broadcastSshState } = await import('./ssh-renderer-broadcast')
const { getSshHostServerStatus, setSshHostServerStatus } =
- await import('../ssh/ssh-host-server-status')
+ await import('../../ssh/ssh-host-server-status')
const target: SshTarget = { id: 'ssh-1', label: 'Box', host: 'box', port: 22, username: 'me' }
const fenced: SshTarget = {
diff --git a/src/main/ipc/ssh-host-server-on-connect-wiring.test.ts b/src/main/ipc/ssh/ssh-host-server-on-connect-wiring.test.ts
similarity index 84%
rename from src/main/ipc/ssh-host-server-on-connect-wiring.test.ts
rename to src/main/ipc/ssh/ssh-host-server-on-connect-wiring.test.ts
index 053bdd4f9088..cdd5de618222 100644
--- a/src/main/ipc/ssh-host-server-on-connect-wiring.test.ts
+++ b/src/main/ipc/ssh/ssh-host-server-on-connect-wiring.test.ts
@@ -2,12 +2,12 @@ import { mkdtempSync, rmSync } from 'node:fs'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
-import type { SshTarget } from '../../shared/ssh-types'
-import { closeTestStores, createSqliteTestStore } from '../persistence-test-harness'
-import { Store } from '../persistence/loading-store/store'
-import { OrcadHostUnsupportedError } from '../orcad/orcad-host-unavailable'
-import { allowsDirectSshRelay, SshConnectionStore } from '../ssh/ssh-connection-store'
-import { resolveHostServerOnConnect } from '../ssh/ssh-host-server-on-connect'
+import type { SshTarget } from '../../../shared/ssh-types'
+import { closeTestStores, createSqliteTestStore } from '../../persistence-test-harness'
+import { Store } from '../../persistence/loading-store/store'
+import { OrcadHostUnsupportedError } from '../../orcad/orcad-host-unavailable'
+import { allowsDirectSshRelay, SshConnectionStore } from '../../ssh/ssh-connection-store'
+import { resolveHostServerOnConnect } from '../../ssh/ssh-host-server-on-connect'
const mocks = vi.hoisted(() => {
const registry: { current: unknown } = { current: null }
@@ -19,29 +19,29 @@ const mocks = vi.hoisted(() => {
broadcast: vi.fn()
}
})
-vi.mock('../../shared/app-environment', () => ({
+vi.mock('../../../shared/app-environment', () => ({
getAppEnvironment: () => ({ getVersion: () => '1.5.0', getPath: () => '/tmp/unused' })
}))
-vi.mock('../ssh/ssh-target-registry', () => ({
+vi.mock('../../ssh/ssh-target-registry', () => ({
getSshTargetRegistryStore: () => mocks.registry.current
}))
-vi.mock('../managed-server/lifecycle/orcad-runtime-deployment', () => ({
+vi.mock('../../managed-server/lifecycle/orcad-runtime-deployment', () => ({
createManagedOrcadEnvironment: mocks.deploy
}))
-vi.mock('../managed-server/lifecycle/orcad-runtime-conversion', () => ({
+vi.mock('../../managed-server/lifecycle/orcad-runtime-conversion', () => ({
convertSshTargetToManagedOrcad: mocks.convert
}))
-vi.mock('../managed-server/lifecycle/orcad-managed-tunnel', () => ({
+vi.mock('../../managed-server/lifecycle/orcad-managed-tunnel', () => ({
ensureOrcadManagedTunnel: mocks.tunnel
}))
-vi.mock('../orcad/orcad-artifact-materializer', () => ({ hasOrcadTemplate: () => true }))
+vi.mock('../../orcad/orcad-artifact-materializer', () => ({ hasOrcadTemplate: () => true }))
vi.mock('./ssh-renderer-broadcast', () => ({ broadcastSshState: mocks.broadcast }))
vi.mock('./ssh-ipc-context', () => ({ getCurrentMainWindow: () => null }))
vi.mock('./ssh-session-teardown', () => ({ disconnectRegisteredSshTarget: vi.fn() }))
const { hostServerOnConnectDeps } = await import('./ssh-host-server-on-connect-wiring')
const { connectInFlight } = await import('./ssh-connect-attempt-registry')
-const { getSshHostServerStatus } = await import('../ssh/ssh-host-server-status')
+const { getSshHostServerStatus } = await import('../../ssh/ssh-host-server-status')
const TARGET: SshTarget = {
id: 'ssh-box',
diff --git a/src/main/ipc/ssh-host-server-on-connect-wiring.ts b/src/main/ipc/ssh/ssh-host-server-on-connect-wiring.ts
similarity index 75%
rename from src/main/ipc/ssh-host-server-on-connect-wiring.ts
rename to src/main/ipc/ssh/ssh-host-server-on-connect-wiring.ts
index d9e550b0960d..2963694ea4de 100644
--- a/src/main/ipc/ssh-host-server-on-connect-wiring.ts
+++ b/src/main/ipc/ssh/ssh-host-server-on-connect-wiring.ts
@@ -1,41 +1,41 @@
/** The live collaborators behind each connect's server decision. */
-import { getAppEnvironment } from '../../shared/app-environment'
+import { getAppEnvironment } from '../../../shared/app-environment'
import {
getManagedOrcadFenceEnvironmentId,
managedOrcadServerName
-} from '../../shared/managed-orcad-ssh-owner'
-import { listEnvironments } from '../../shared/runtime-environment-store'
-import { findOrcadMigrationSourceCutoverForTarget } from '../ssh/orcad-migration-cutover-journal'
-import { abandonOrcadConversion } from '../ssh/orcad-conversion-abandon'
-import { retainOrcadMigrationSource } from '../ssh/orcad-migration-source-retention'
-import { hasOrcadTemplate } from '../orcad/orcad-artifact-materializer'
-import { managedServerUpdateDeps } from '../ssh/managed-server-update-deps'
-import { ensureOrcadManagedTunnel } from '../managed-server/lifecycle/orcad-managed-tunnel'
-import { verifyOrcadManagedServing } from '../managed-server/lifecycle/orcad-managed-serving-verify'
-import { convertSshTargetToManagedOrcad } from '../managed-server/lifecycle/orcad-runtime-conversion'
+} from '../../../shared/managed-orcad-ssh-owner'
+import { listEnvironments } from '../../../shared/runtime-environment-store'
+import { findOrcadMigrationSourceCutoverForTarget } from '../../ssh/orcad-migration-cutover-journal'
+import { abandonOrcadConversion } from '../../ssh/orcad-conversion-abandon'
+import { retainOrcadMigrationSource } from '../../ssh/orcad-migration-source-retention'
+import { hasOrcadTemplate } from '../../orcad/orcad-artifact-materializer'
+import { managedServerUpdateDeps } from '../../ssh/managed-server-update-deps'
+import { ensureOrcadManagedTunnel } from '../../managed-server/lifecycle/orcad-managed-tunnel'
+import { verifyOrcadManagedServing } from '../../managed-server/lifecycle/orcad-managed-serving-verify'
+import { convertSshTargetToManagedOrcad } from '../../managed-server/lifecycle/orcad-runtime-conversion'
import {
orcadMigrationDestinationFor,
orcadServerFolderCatalogFor,
orcadServerRepositoriesFor
-} from '../managed-server/lifecycle/orcad-runtime-conversion-wiring'
-import { createManagedOrcadEnvironment } from '../managed-server/lifecycle/orcad-runtime-deployment'
-import type { HostServerOnConnectDeps } from '../ssh/ssh-host-server-on-connect'
+} from '../../managed-server/lifecycle/orcad-runtime-conversion-wiring'
+import { createManagedOrcadEnvironment } from '../../managed-server/lifecycle/orcad-runtime-deployment'
+import type { HostServerOnConnectDeps } from '../../ssh/ssh-host-server-on-connect'
import {
censusSshHostRelaysBeforeSession,
relayTerminalsOnConnect
-} from '../ssh/legacy-relay/ssh-host-relay-terminals-on-connect'
-import { requireManagedOrcadInfrastructure } from '../managed-server/lifecycle/orcad-managed-runtime-context'
-import { censusHostRelayTerminalsFor } from '../ssh/legacy-relay/ssh-host-relay-census-for-target'
-import { setSshHostServerStatus } from '../ssh/ssh-host-server-status'
-import { trackSshHostServerEvent } from '../ssh/ssh-host-server-telemetry'
-import { knownSshHostPlatform } from '../ssh/ssh-host-platform-memo'
-import { knownOrcadTunnelTransport } from '../ssh/orcad-tunnel-transport-memo'
-import { getSshTargetRegistryStore } from '../ssh/ssh-target-registry'
-import { releaseUnreachableOrcadSetup } from '../ssh/orcad-unreachable-setup-release'
+} from '../../ssh/legacy-relay/ssh-host-relay-terminals-on-connect'
+import { requireManagedOrcadInfrastructure } from '../../managed-server/lifecycle/orcad-managed-runtime-context'
+import { censusHostRelayTerminalsFor } from '../../ssh/legacy-relay/ssh-host-relay-census-for-target'
+import { setSshHostServerStatus } from '../../ssh/ssh-host-server-status'
+import { trackSshHostServerEvent } from '../../ssh/ssh-host-server-telemetry'
+import { knownSshHostPlatform } from '../../ssh/ssh-host-platform-memo'
+import { knownOrcadTunnelTransport } from '../../ssh/orcad-tunnel-transport-memo'
+import { getSshTargetRegistryStore } from '../../ssh/ssh-target-registry'
+import { releaseUnreachableOrcadSetup } from '../../ssh/orcad-unreachable-setup-release'
import { getCurrentMainWindow } from './ssh-ipc-context'
import { broadcastSshState } from './ssh-renderer-broadcast'
import { connectInFlight } from './ssh-connect-attempt-registry'
-import { startLegacyRelayBridge } from '../ssh/legacy-relay/legacy-relay-bridge-registry'
+import { startLegacyRelayBridge } from '../../ssh/legacy-relay/legacy-relay-bridge-registry'
export function hostServerOnConnectDeps(userDataPath: string): HostServerOnConnectDeps {
const registry = getSshTargetRegistryStore()!
diff --git a/src/main/ipc/ssh-host-sleep-reconnect.test.ts b/src/main/ipc/ssh/ssh-host-sleep-reconnect.test.ts
similarity index 95%
rename from src/main/ipc/ssh-host-sleep-reconnect.test.ts
rename to src/main/ipc/ssh/ssh-host-sleep-reconnect.test.ts
index 1f73cd1d5f45..082183075e2c 100644
--- a/src/main/ipc/ssh-host-sleep-reconnect.test.ts
+++ b/src/main/ipc/ssh/ssh-host-sleep-reconnect.test.ts
@@ -7,10 +7,10 @@ vi.mock('electron', async () => {
const { EventEmitter } = await import('node:events')
return { powerMonitor: new EventEmitter() }
})
-vi.mock('../managed-server/lifecycle/orcad-managed-tunnel', () => ({
+vi.mock('../../managed-server/lifecycle/orcad-managed-tunnel', () => ({
recoverOrcadManagedTunnelsAfterHostResume: recoverManagedTunnels
}))
-vi.mock('../ssh/ssh-target-registry', () => ({
+vi.mock('../../ssh/ssh-target-registry', () => ({
getSshConnectionManager: () => ({ retryStalledReconnects })
}))
diff --git a/src/main/ipc/ssh-host-sleep-reconnect.ts b/src/main/ipc/ssh/ssh-host-sleep-reconnect.ts
similarity index 89%
rename from src/main/ipc/ssh-host-sleep-reconnect.ts
rename to src/main/ipc/ssh/ssh-host-sleep-reconnect.ts
index f0af2f5856dc..f81a6a10591d 100644
--- a/src/main/ipc/ssh-host-sleep-reconnect.ts
+++ b/src/main/ipc/ssh/ssh-host-sleep-reconnect.ts
@@ -1,7 +1,7 @@
import { powerMonitor } from 'electron'
-import { recoverOrcadManagedTunnelsAfterHostResume } from '../managed-server/lifecycle/orcad-managed-tunnel'
-import { getSshConnectionManager } from '../ssh/ssh-target-registry'
-import { errorMessage } from '../../shared/error-message'
+import { recoverOrcadManagedTunnelsAfterHostResume } from '../../managed-server/lifecycle/orcad-managed-tunnel'
+import { getSshConnectionManager } from '../../ssh/ssh-target-registry'
+import { errorMessage } from '../../../shared/error-message'
let powerMonitorUnsubscribe: (() => void) | null = null
let registeredGetUserDataPath: (() => string) | undefined
diff --git a/src/main/ipc/ssh-host-user-disconnect.test.ts b/src/main/ipc/ssh/ssh-host-user-disconnect.test.ts
similarity index 83%
rename from src/main/ipc/ssh-host-user-disconnect.test.ts
rename to src/main/ipc/ssh/ssh-host-user-disconnect.test.ts
index fe055533d03e..1d36ae2bf77e 100644
--- a/src/main/ipc/ssh-host-user-disconnect.test.ts
+++ b/src/main/ipc/ssh/ssh-host-user-disconnect.test.ts
@@ -9,32 +9,35 @@ const runtime = vi.hoisted(() => {
return { environments, activate: vi.fn(), getStatusOwner: vi.fn(), invalidate: vi.fn() }
})
-vi.mock('../ssh/config/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
+vi.mock('../../ssh/config/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
vi.mock('electron', () => mocks.electron)
-vi.mock('../ssh/ssh-connection-store', () => mocks.sshConnectionStore)
+vi.mock('../../ssh/ssh-connection-store', () => mocks.sshConnectionStore)
vi.mock('./ssh-host-server-connect', () => mocks.hostServerConnect)
-vi.mock('../ssh/ssh-connection-manager', () => mocks.sshConnectionManager)
-vi.mock('../ssh/ssh-channel-multiplexer', () => mocks.sshChannelMultiplexer)
-vi.mock('../ssh/port-forwarding/ssh-port-forward', () => mocks.sshPortForward)
+vi.mock('../../ssh/ssh-connection-manager', () => mocks.sshConnectionManager)
+vi.mock('../../ssh/ssh-channel-multiplexer', () => mocks.sshChannelMultiplexer)
+vi.mock('../../ssh/port-forwarding/ssh-port-forward', () => mocks.sshPortForward)
vi.mock('../ssh/ssh-port-scanner', () => mocks.sshPortScanner)
-vi.mock('../../shared/runtime-environment-store', async (importOriginal) => ({
+vi.mock('../../../shared/runtime-environment-store', async (importOriginal) => ({
...(await importOriginal()),
listEnvironments: () => runtime.environments
}))
-vi.mock('./runtime-environment-request-connections', async (importOriginal) => ({
- ...(await importOriginal()),
- getRuntimeEnvironmentStatusOwner: runtime.getStatusOwner
-}))
-vi.mock('./runtime-environments', () => ({
+vi.mock(
+ '../runtime-environments/runtime-environment-request-connections',
+ async (importOriginal) => ({
+ ...(await importOriginal()),
+ getRuntimeEnvironmentStatusOwner: runtime.getStatusOwner
+ })
+)
+vi.mock('../runtime-environments/runtime-environments', () => ({
invalidateRuntimeEnvironmentTransport: runtime.invalidate
}))
-import type { SshConnectionState, SshTarget } from '../../shared/ssh-types'
+import type { SshConnectionState, SshTarget } from '../../../shared/ssh-types'
import {
clearRuntimeEnvironmentManualDisconnect,
isRuntimeEnvironmentManuallyDisconnected
-} from './runtime-environment-manual-disconnect'
-import { isSshUserDisconnected } from '../ssh/ssh-user-disconnect'
+} from '../runtime-environments/runtime-environment-manual-disconnect'
+import { isSshUserDisconnected } from '../../ssh/ssh-user-disconnect'
import { createSshIpcHarness } from './ssh-ipc-test-harness'
const { mockSshStore, mockConnectionManager } = mocks
diff --git a/src/main/ipc/ssh-host-user-disconnect.ts b/src/main/ipc/ssh/ssh-host-user-disconnect.ts
similarity index 89%
rename from src/main/ipc/ssh-host-user-disconnect.ts
rename to src/main/ipc/ssh/ssh-host-user-disconnect.ts
index 10bc3d9f107f..f3b4f20895f5 100644
--- a/src/main/ipc/ssh-host-user-disconnect.ts
+++ b/src/main/ipc/ssh/ssh-host-user-disconnect.ts
@@ -1,23 +1,23 @@
-import { getAppEnvironment } from '../../shared/app-environment'
-import { listEnvironments } from '../../shared/runtime-environment-store'
+import { getAppEnvironment } from '../../../shared/app-environment'
+import { listEnvironments } from '../../../shared/runtime-environment-store'
import {
getOrcadSshDeployment,
getRuntimeSshAccess,
type KnownRuntimeEnvironment
-} from '../../shared/runtime-environments'
+} from '../../../shared/runtime-environments'
import {
clearSshUserDisconnected,
clearSshUserDisconnectedForEnvironment,
isSshUserDisconnected,
recordSshUserDisconnected
-} from '../ssh/ssh-user-disconnect'
-import { connectRegisteredSshTarget } from '../ssh/ssh-target-registry'
+} from '../../ssh/ssh-user-disconnect'
+import { connectRegisteredSshTarget } from '../../ssh/ssh-target-registry'
import {
clearRuntimeEnvironmentManualDisconnect,
isRuntimeEnvironmentManuallyDisconnected,
markRuntimeEnvironmentManuallyDisconnected
-} from './runtime-environment-manual-disconnect'
-import { getRuntimeEnvironmentStatusOwner } from './runtime-environment-request-connections'
+} from '../runtime-environments/runtime-environment-manual-disconnect'
+import { getRuntimeEnvironmentStatusOwner } from '../runtime-environments/runtime-environment-request-connections'
import { disconnectRegisteredSshTarget } from './ssh-session-teardown'
/**
@@ -67,7 +67,8 @@ export async function disconnectSshHostForUser(
// Why lazy: runtime-environments wires every runtime handler and imports the SSH layer.
const invalidateTransport =
runtimeLayer?.invalidateTransport ??
- (await import('./runtime-environments')).invalidateRuntimeEnvironmentTransport
+ (await import('../runtime-environments/runtime-environments'))
+ .invalidateRuntimeEnvironmentTransport
for (const environment of environments) {
// A Connect during the import already lifted this server; tearing it down would undo that.
if (isRuntimeEnvironmentManuallyDisconnected(environment.id)) {
diff --git a/src/main/ipc/ssh-ipc-context.ts b/src/main/ipc/ssh/ssh-ipc-context.ts
similarity index 80%
rename from src/main/ipc/ssh-ipc-context.ts
rename to src/main/ipc/ssh/ssh-ipc-context.ts
index 93c7330d99f2..2c677336f5b1 100644
--- a/src/main/ipc/ssh-ipc-context.ts
+++ b/src/main/ipc/ssh/ssh-ipc-context.ts
@@ -1,8 +1,8 @@
import type { BrowserWindow } from 'electron'
-import type { Store } from '../persistence'
-import type { SshConnectionManager } from '../ssh/ssh-connection-manager'
-import type { SshPortForwardManager } from '../ssh/port-forwarding/ssh-port-forward'
-import type { OrcaRuntimeService } from '../runtime/orca-runtime'
+import type { Store } from '../../persistence'
+import type { SshConnectionManager } from '../../ssh/ssh-connection-manager'
+import type { SshPortForwardManager } from '../../ssh/port-forwarding/ssh-port-forward'
+import type { OrcaRuntimeService } from '../../runtime/orca-runtime'
// Why live bindings rather than getters: every SSH IPC module reads these singletons on the hot
// path, and only registerSshHandlers/the test reset write them (through the setters below).
diff --git a/src/main/ipc/ssh-ipc-mock-shapes.ts b/src/main/ipc/ssh/ssh-ipc-mock-shapes.ts
similarity index 100%
rename from src/main/ipc/ssh-ipc-mock-shapes.ts
rename to src/main/ipc/ssh/ssh-ipc-mock-shapes.ts
diff --git a/src/main/ipc/ssh-ipc-module-mocks.ts b/src/main/ipc/ssh/ssh-ipc-module-mocks.ts
similarity index 100%
rename from src/main/ipc/ssh-ipc-module-mocks.ts
rename to src/main/ipc/ssh/ssh-ipc-module-mocks.ts
diff --git a/src/main/ipc/ssh-ipc-test-harness.ts b/src/main/ipc/ssh/ssh-ipc-test-harness.ts
similarity index 100%
rename from src/main/ipc/ssh-ipc-test-harness.ts
rename to src/main/ipc/ssh/ssh-ipc-test-harness.ts
diff --git a/src/main/ipc/ssh-managed-host-port-forward-lifecycle.test.ts b/src/main/ipc/ssh/ssh-managed-host-port-forward-lifecycle.test.ts
similarity index 92%
rename from src/main/ipc/ssh-managed-host-port-forward-lifecycle.test.ts
rename to src/main/ipc/ssh/ssh-managed-host-port-forward-lifecycle.test.ts
index 022472d7d2ad..4fe64b979db7 100644
--- a/src/main/ipc/ssh-managed-host-port-forward-lifecycle.test.ts
+++ b/src/main/ipc/ssh/ssh-managed-host-port-forward-lifecycle.test.ts
@@ -15,7 +15,7 @@ vi.mock('./ssh-ipc-context', () => ({
persistedStore: null,
portForwardManager: { removeAllForwards: h.removeAllForwards }
}))
-vi.mock('../ssh/ssh-target-registry', async (importOriginal) => ({
+vi.mock('../../ssh/ssh-target-registry', async (importOriginal) => ({
...(await importOriginal>()),
getSshTargetRegistryStore: () => null
}))
@@ -24,9 +24,9 @@ const { handleSshConnectionStateChange } = await import('./ssh-connection-state-
const { publishManagedServerConnect } = await import('./ssh-host-server-connect')
const { disconnectRegisteredSshTarget } = await import('./ssh-session-teardown')
const { connectInFlight } = await import('./ssh-connect-attempt-registry')
-const { getSshProviderAuthority } = await import('../ssh/ssh-provider-authority')
+const { getSshProviderAuthority } = await import('../../ssh/ssh-provider-authority')
const { clearSshHostServerStatus, setSshHostServerStatus } =
- await import('../ssh/ssh-host-server-status')
+ await import('../../ssh/ssh-host-server-status')
const connected = { targetId: 't1', status: 'connected', error: null, reconnectAttempt: 0 } as const
diff --git a/src/main/ipc/ssh-managed-port-forward-restore.ts b/src/main/ipc/ssh/ssh-managed-port-forward-restore.ts
similarity index 94%
rename from src/main/ipc/ssh-managed-port-forward-restore.ts
rename to src/main/ipc/ssh/ssh-managed-port-forward-restore.ts
index 126e7916fc96..46cd33b071d9 100644
--- a/src/main/ipc/ssh-managed-port-forward-restore.ts
+++ b/src/main/ipc/ssh/ssh-managed-port-forward-restore.ts
@@ -1,4 +1,4 @@
-import { getSshHostServerStatus } from '../ssh/ssh-host-server-status'
+import { getSshHostServerStatus } from '../../ssh/ssh-host-server-status'
import { getCurrentMainWindow } from './ssh-ipc-context'
import { restorePortForwards } from './ssh-port-forward-persistence'
diff --git a/src/main/ipc/ssh-managed-server-unlink-broadcast.test.ts b/src/main/ipc/ssh/ssh-managed-server-unlink-broadcast.test.ts
similarity index 94%
rename from src/main/ipc/ssh-managed-server-unlink-broadcast.test.ts
rename to src/main/ipc/ssh/ssh-managed-server-unlink-broadcast.test.ts
index 67a57c87f511..b6595a738edf 100644
--- a/src/main/ipc/ssh-managed-server-unlink-broadcast.test.ts
+++ b/src/main/ipc/ssh/ssh-managed-server-unlink-broadcast.test.ts
@@ -13,14 +13,14 @@ vi.mock('./ssh-ipc-context', () => ({
persistedStore: null,
portForwardManager: null
}))
-vi.mock('../ssh/ssh-target-registry', async (importOriginal) => ({
+vi.mock('../../ssh/ssh-target-registry', async (importOriginal) => ({
...(await importOriginal>()),
getSshTargetRegistryStore: () => null
}))
const { clearPublishedManagedServer } = await import('./ssh-renderer-broadcast')
const { getSshHostServerStatus, setSshHostServerStatus } =
- await import('../ssh/ssh-host-server-status')
+ await import('../../ssh/ssh-host-server-status')
describe('clearing a host’s managed server once it is unlinked', () => {
beforeEach(() => {
diff --git a/src/main/ipc/ssh-passphrase.test.ts b/src/main/ipc/ssh/ssh-passphrase.test.ts
similarity index 96%
rename from src/main/ipc/ssh-passphrase.test.ts
rename to src/main/ipc/ssh/ssh-passphrase.test.ts
index 59e2900eb1ff..af3f5783fafe 100644
--- a/src/main/ipc/ssh-passphrase.test.ts
+++ b/src/main/ipc/ssh/ssh-passphrase.test.ts
@@ -1,11 +1,11 @@
import { ipcMain, type BrowserWindow } from 'electron'
import { beforeEach, describe, expect, it, vi } from 'vitest'
import { registerCredentialHandler, requestCredential } from './ssh-passphrase'
-import { SSH_CREDENTIAL_TIMEOUT_MS } from '../ssh/ssh-connection-utils'
+import { SSH_CREDENTIAL_TIMEOUT_MS } from '../../ssh/ssh-connection-utils'
import {
isSshCredentialDeclined,
resetSshCredentialDeclinesForTests
-} from '../ssh/ssh-credential-decline'
+} from '../../ssh/ssh-credential-decline'
vi.mock('electron', () => ({
ipcMain: {
diff --git a/src/main/ipc/ssh-passphrase.ts b/src/main/ipc/ssh/ssh-passphrase.ts
similarity index 95%
rename from src/main/ipc/ssh-passphrase.ts
rename to src/main/ipc/ssh/ssh-passphrase.ts
index 6c9c720b10fc..738d1d5c753b 100644
--- a/src/main/ipc/ssh-passphrase.ts
+++ b/src/main/ipc/ssh/ssh-passphrase.ts
@@ -1,7 +1,7 @@
import { ipcMain, type BrowserWindow } from 'electron'
import { randomUUID } from 'node:crypto'
-import { SSH_CREDENTIAL_TIMEOUT_MS, type SshCredentialKind } from '../ssh/ssh-connection-utils'
-import { recordSshCredentialDeclined } from '../ssh/ssh-credential-decline'
+import { SSH_CREDENTIAL_TIMEOUT_MS, type SshCredentialKind } from '../../ssh/ssh-connection-utils'
+import { recordSshCredentialDeclined } from '../../ssh/ssh-credential-decline'
const pendingRequests = new Map<
string,
{ targetId: string; resolve: (value: string | null) => void; close: () => void }
diff --git a/src/main/ipc/ssh-port-forward-handlers.ts b/src/main/ipc/ssh/ssh-port-forward-handlers.ts
similarity index 98%
rename from src/main/ipc/ssh-port-forward-handlers.ts
rename to src/main/ipc/ssh/ssh-port-forward-handlers.ts
index 6154cee79d7b..a67f42f26916 100644
--- a/src/main/ipc/ssh-port-forward-handlers.ts
+++ b/src/main/ipc/ssh/ssh-port-forward-handlers.ts
@@ -2,7 +2,7 @@ import { ipcMain } from 'electron'
import {
enrichSshForwardEntries,
getWorktreeIdsForConnection
-} from '../ports/ssh-advertised-url-enrichment'
+} from '../../ports/ssh-advertised-url-enrichment'
import {
connectionManager,
getCurrentMainWindow,
diff --git a/src/main/ipc/ssh-port-forward-persistence.ts b/src/main/ipc/ssh/ssh-port-forward-persistence.ts
similarity index 96%
rename from src/main/ipc/ssh-port-forward-persistence.ts
rename to src/main/ipc/ssh/ssh-port-forward-persistence.ts
index 701858c02eea..6e3b4614ae0c 100644
--- a/src/main/ipc/ssh-port-forward-persistence.ts
+++ b/src/main/ipc/ssh/ssh-port-forward-persistence.ts
@@ -1,6 +1,6 @@
import type { BrowserWindow } from 'electron'
-import type { SavedPortForward } from '../../shared/ssh-types'
-import { getSshTargetRegistryStore } from '../ssh/ssh-target-registry'
+import type { SavedPortForward } from '../../../shared/ssh-types'
+import { getSshTargetRegistryStore } from '../../ssh/ssh-target-registry'
import { connectionManager, portForwardManager } from './ssh-ipc-context'
import { broadcastPortForwards } from './ssh-renderer-broadcast'
diff --git a/src/main/ipc/ssh-port-forward-restore.test.ts b/src/main/ipc/ssh/ssh-port-forward-restore.test.ts
similarity index 94%
rename from src/main/ipc/ssh-port-forward-restore.test.ts
rename to src/main/ipc/ssh/ssh-port-forward-restore.test.ts
index 47cf93309766..f040bbb0817d 100644
--- a/src/main/ipc/ssh-port-forward-restore.test.ts
+++ b/src/main/ipc/ssh/ssh-port-forward-restore.test.ts
@@ -1,5 +1,5 @@
import { beforeEach, describe, expect, it, vi } from 'vitest'
-import type { PortForwardEntry, SavedPortForward } from '../../shared/ssh-types'
+import type { PortForwardEntry, SavedPortForward } from '../../../shared/ssh-types'
const h = vi.hoisted(() => {
const conn = { id: 'conn' }
@@ -53,14 +53,14 @@ const h = vi.hoisted(() => {
}
})
-vi.mock('../ssh/ssh-target-registry', () => ({ getSshTargetRegistryStore: () => h.store }))
+vi.mock('../../ssh/ssh-target-registry', () => ({ getSshTargetRegistryStore: () => h.store }))
vi.mock('./ssh-ipc-context', () => ({
connectionManager: h.connectionManager,
portForwardManager: h.portForwardManager,
getCurrentMainWindow: () => null
}))
vi.mock('./ssh-renderer-broadcast', () => ({ broadcastPortForwards: h.broadcastPortForwards }))
-vi.mock('../ssh/ssh-host-server-status', () => ({ getSshHostServerStatus: h.hostServerStatus }))
+vi.mock('../../ssh/ssh-host-server-status', () => ({ getSshHostServerStatus: h.hostServerStatus }))
import { restorePortForwards } from './ssh-port-forward-persistence'
import { restoreManagedHostPortForwards } from './ssh-managed-port-forward-restore'
diff --git a/src/main/ipc/ssh-renderer-broadcast.ts b/src/main/ipc/ssh/ssh-renderer-broadcast.ts
similarity index 86%
rename from src/main/ipc/ssh-renderer-broadcast.ts
rename to src/main/ipc/ssh/ssh-renderer-broadcast.ts
index 440d13ca4591..62e4270c4772 100644
--- a/src/main/ipc/ssh-renderer-broadcast.ts
+++ b/src/main/ipc/ssh/ssh-renderer-broadcast.ts
@@ -1,16 +1,20 @@
import type { BrowserWindow } from 'electron'
-import type { SshPortForwardManager } from '../ssh/port-forwarding/ssh-port-forward'
-import type { DetectedPort, EnrichedDetectedPort, SshConnectionState } from '../../shared/ssh-types'
-import { isRuntimeOwnedSshTargetId } from '../../shared/execution-host'
+import type { SshPortForwardManager } from '../../ssh/port-forwarding/ssh-port-forward'
+import type {
+ DetectedPort,
+ EnrichedDetectedPort,
+ SshConnectionState
+} from '../../../shared/ssh-types'
+import { isRuntimeOwnedSshTargetId } from '../../../shared/execution-host'
import {
enrichSshDetectedPorts,
enrichSshForwardEntries,
getWorktreeIdsForConnection
-} from '../ports/ssh-advertised-url-enrichment'
-import { isRuntimeOwnedSshTarget } from '../ssh/ssh-connection-store'
-import { getSshProviderAuthority } from '../ssh/ssh-provider-authority'
-import { clearSshHostServerStatus, getSshHostServerStatus } from '../ssh/ssh-host-server-status'
-import { getSshTargetRegistryStore } from '../ssh/ssh-target-registry'
+} from '../../ports/ssh-advertised-url-enrichment'
+import { isRuntimeOwnedSshTarget } from '../../ssh/ssh-connection-store'
+import { getSshProviderAuthority } from '../../ssh/ssh-provider-authority'
+import { clearSshHostServerStatus, getSshHostServerStatus } from '../../ssh/ssh-host-server-status'
+import { getSshTargetRegistryStore } from '../../ssh/ssh-target-registry'
import {
connectionManager,
currentRuntime,
@@ -18,7 +22,7 @@ import {
persistedStore,
portForwardManager
} from './ssh-ipc-context'
-import { requestDesktopBrowserBridgeReconcile } from './desktop-browser-bridge-reconcile'
+import { requestDesktopBrowserBridgeReconcile } from '../desktop-browser-bridge-reconcile'
export function broadcastSshState(
getMainWindow: () => BrowserWindow | null,
diff --git a/src/main/ipc/ssh-session-teardown.ts b/src/main/ipc/ssh/ssh-session-teardown.ts
similarity index 88%
rename from src/main/ipc/ssh-session-teardown.ts
rename to src/main/ipc/ssh/ssh-session-teardown.ts
index 26b8e67cffaf..fdd9884761d5 100644
--- a/src/main/ipc/ssh-session-teardown.ts
+++ b/src/main/ipc/ssh/ssh-session-teardown.ts
@@ -1,7 +1,7 @@
-import type { DirectSshAuthority } from '../../shared/ssh-types'
-import { getSshTargetRegistryStore } from '../ssh/ssh-target-registry'
-import { clearSshHostServerStatus } from '../ssh/ssh-host-server-status'
-import { isSshConnectionSolelyOwnedBy } from '../ssh/ssh-connection-attribution'
+import type { DirectSshAuthority } from '../../../shared/ssh-types'
+import { getSshTargetRegistryStore } from '../../ssh/ssh-target-registry'
+import { clearSshHostServerStatus } from '../../ssh/ssh-host-server-status'
+import { isSshConnectionSolelyOwnedBy } from '../../ssh/ssh-connection-attribution'
import {
connectInFlight,
invalidateConnectAttempt,
@@ -9,11 +9,11 @@ import {
} from './ssh-connect-attempt-registry'
import { connectionManager, persistedStore, portForwardManager } from './ssh-ipc-context'
import { runTargetLifecycle } from './ssh-target-lifecycle-queue'
-import { errorMessage } from '../../shared/error-message'
+import { errorMessage } from '../../../shared/error-message'
import {
forgetLegacyRelayTarget,
stopLegacyRelayBridge
-} from '../ssh/legacy-relay/legacy-relay-bridge-registry'
+} from '../../ssh/legacy-relay/legacy-relay-bridge-registry'
export async function disconnectRegisteredSshTarget(targetId: string): Promise {
invalidateConnectAttempt(targetId)
@@ -42,8 +42,8 @@ export async function removeRegisteredSshTarget(targetId: string): Promise
// must not outlive the record that scoped them.
try {
const [partitions, storage] = await Promise.all([
- import('../browser/local-ssh-browser-partitions'),
- import('../browser/browser-route-partition-storage-runtime')
+ import('../../browser/local-ssh-browser-partitions'),
+ import('../../browser/browser-route-partition-storage-runtime')
])
await partitions.releaseLocalSshBrowserPartitionsForTarget(targetId)
await storage.clearBrowserRoutePartitionStorageForLocalSshTarget(targetId)
diff --git a/src/main/ipc/ssh-shutdown-drain.ts b/src/main/ipc/ssh/ssh-shutdown-drain.ts
similarity index 98%
rename from src/main/ipc/ssh-shutdown-drain.ts
rename to src/main/ipc/ssh/ssh-shutdown-drain.ts
index 1e8b9322e3ae..d9c6393be7bb 100644
--- a/src/main/ipc/ssh-shutdown-drain.ts
+++ b/src/main/ipc/ssh/ssh-shutdown-drain.ts
@@ -4,7 +4,7 @@ import {
testConnectionProbes
} from './ssh-connect-attempt-registry'
import { connectionManager, portForwardManager } from './ssh-ipc-context'
-import { shutdownOrcadManagedTunnels } from '../managed-server/lifecycle/orcad-managed-tunnel'
+import { shutdownOrcadManagedTunnels } from '../../managed-server/lifecycle/orcad-managed-tunnel'
// Why one budget for the whole sequence rather than one per phase: an invalidated connect only
// observes its cancellation at the next checkpoint, and one blocked in the transport handshake can
diff --git a/src/main/ipc/ssh-sign-in-requirement.test.ts b/src/main/ipc/ssh/ssh-sign-in-requirement.test.ts
similarity index 90%
rename from src/main/ipc/ssh-sign-in-requirement.test.ts
rename to src/main/ipc/ssh/ssh-sign-in-requirement.test.ts
index 6b7a672c3a72..70e725956741 100644
--- a/src/main/ipc/ssh-sign-in-requirement.test.ts
+++ b/src/main/ipc/ssh/ssh-sign-in-requirement.test.ts
@@ -5,17 +5,17 @@ const mocks = await vi.hoisted(async () => {
return createSshIpcMocks()
})
-vi.mock('../ssh/config/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
+vi.mock('../../ssh/config/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
vi.mock('electron', () => mocks.electron)
-vi.mock('../ssh/ssh-connection-store', () => mocks.sshConnectionStore)
+vi.mock('../../ssh/ssh-connection-store', () => mocks.sshConnectionStore)
vi.mock('./ssh-host-server-connect', () => mocks.hostServerConnect)
-vi.mock('../ssh/ssh-connection-manager', () => mocks.sshConnectionManager)
-vi.mock('../ssh/ssh-channel-multiplexer', () => mocks.sshChannelMultiplexer)
-vi.mock('../ssh/port-forwarding/ssh-port-forward', () => mocks.sshPortForward)
+vi.mock('../../ssh/ssh-connection-manager', () => mocks.sshConnectionManager)
+vi.mock('../../ssh/ssh-channel-multiplexer', () => mocks.sshChannelMultiplexer)
+vi.mock('../../ssh/port-forwarding/ssh-port-forward', () => mocks.sshPortForward)
vi.mock('../ssh/ssh-port-scanner', () => mocks.sshPortScanner)
-import type { SshTarget } from '../../shared/ssh-types'
-import { isSshCredentialDeclined } from '../ssh/ssh-credential-decline'
+import type { SshTarget } from '../../../shared/ssh-types'
+import { isSshCredentialDeclined } from '../../ssh/ssh-credential-decline'
import { registerSshHandlers, resetSshHandlerStateForTests } from './ssh'
import { createSshIpcHarness } from './ssh-ipc-test-harness'
import { createSshConnectionCallbacks } from './ssh-connection-state-callbacks'
diff --git a/src/main/ipc/ssh-sign-in-requirement.ts b/src/main/ipc/ssh/ssh-sign-in-requirement.ts
similarity index 85%
rename from src/main/ipc/ssh-sign-in-requirement.ts
rename to src/main/ipc/ssh/ssh-sign-in-requirement.ts
index 85fe95db1193..fd5ae87020ea 100644
--- a/src/main/ipc/ssh-sign-in-requirement.ts
+++ b/src/main/ipc/ssh/ssh-sign-in-requirement.ts
@@ -1,6 +1,6 @@
-import { recordSshSignInAwaited } from '../ssh/ssh-credential-decline'
-import type { SshConnectionManager } from '../ssh/ssh-connection-manager'
-import type { SshConnectionStore } from '../ssh/ssh-connection-store'
+import { recordSshSignInAwaited } from '../../ssh/ssh-credential-decline'
+import type { SshConnectionManager } from '../../ssh/ssh-connection-manager'
+import type { SshConnectionStore } from '../../ssh/ssh-connection-store'
import { credentialRequestedForTarget } from './ssh-connect-attempt-registry'
/**
diff --git a/src/main/ipc/ssh-state-broadcast-fanout.test.ts b/src/main/ipc/ssh/ssh-state-broadcast-fanout.test.ts
similarity index 85%
rename from src/main/ipc/ssh-state-broadcast-fanout.test.ts
rename to src/main/ipc/ssh/ssh-state-broadcast-fanout.test.ts
index 8859f63230c2..bf5304ac1f85 100644
--- a/src/main/ipc/ssh-state-broadcast-fanout.test.ts
+++ b/src/main/ipc/ssh/ssh-state-broadcast-fanout.test.ts
@@ -5,17 +5,17 @@ const mocks = await vi.hoisted(async () => {
return createSshIpcMocks()
})
-vi.mock('../ssh/config/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
+vi.mock('../../ssh/config/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
vi.mock('electron', () => mocks.electron)
-vi.mock('../ssh/ssh-connection-store', () => mocks.sshConnectionStore)
+vi.mock('../../ssh/ssh-connection-store', () => mocks.sshConnectionStore)
vi.mock('./ssh-host-server-connect', () => mocks.hostServerConnect)
-vi.mock('../ssh/ssh-connection-manager', () => mocks.sshConnectionManager)
-vi.mock('../ssh/ssh-channel-multiplexer', () => mocks.sshChannelMultiplexer)
-vi.mock('../ssh/port-forwarding/ssh-port-forward', () => mocks.sshPortForward)
+vi.mock('../../ssh/ssh-connection-manager', () => mocks.sshConnectionManager)
+vi.mock('../../ssh/ssh-channel-multiplexer', () => mocks.sshChannelMultiplexer)
+vi.mock('../../ssh/port-forwarding/ssh-port-forward', () => mocks.sshPortForward)
vi.mock('../ssh/ssh-port-scanner', () => mocks.sshPortScanner)
import { registerSshHandlers } from './ssh'
-import type { SshConnectionState, SshTarget } from '../../shared/ssh-types'
+import type { SshConnectionState, SshTarget } from '../../../shared/ssh-types'
import { createSshIpcHarness } from './ssh-ipc-test-harness'
const { mockSshStore, mockConnectionManager } = mocks
diff --git a/src/main/ipc/ssh-target-crud-handlers-ownership.test.ts b/src/main/ipc/ssh/ssh-target-crud-handlers-ownership.test.ts
similarity index 96%
rename from src/main/ipc/ssh-target-crud-handlers-ownership.test.ts
rename to src/main/ipc/ssh/ssh-target-crud-handlers-ownership.test.ts
index edc8fdcc952d..10c94d14e3f0 100644
--- a/src/main/ipc/ssh-target-crud-handlers-ownership.test.ts
+++ b/src/main/ipc/ssh/ssh-target-crud-handlers-ownership.test.ts
@@ -1,5 +1,5 @@
import { beforeEach, describe, expect, it, vi } from 'vitest'
-import type { SshTarget } from '../../shared/ssh-types'
+import type { SshTarget } from '../../../shared/ssh-types'
const mocks = vi.hoisted(() => {
const state: { target?: SshTarget } = {}
@@ -16,7 +16,7 @@ const mocks = vi.hoisted(() => {
})
vi.mock('electron', () => ({ ipcMain: { handle: mocks.handle } }))
-vi.mock('../ssh/ssh-target-registry', () => ({
+vi.mock('../../ssh/ssh-target-registry', () => ({
getSshTargetRegistryStore: () => ({
getTarget: () => mocks.state.target,
addTarget: mocks.addTarget,
@@ -26,7 +26,7 @@ vi.mock('../ssh/ssh-target-registry', () => ({
setSshTargetMutations: mocks.setMutations
}))
vi.mock('./ssh-session-teardown', () => ({ removeRegisteredSshTarget: mocks.remove }))
-vi.mock('../managed-server/lifecycle/orcad-managed-tunnel', () => ({
+vi.mock('../../managed-server/lifecycle/orcad-managed-tunnel', () => ({
closeOrcadManagedTunnel: mocks.closeTunnel
}))
vi.mock('./ssh-ipc-context', () => ({
diff --git a/src/main/ipc/ssh-target-crud-handlers.ts b/src/main/ipc/ssh/ssh-target-crud-handlers.ts
similarity index 91%
rename from src/main/ipc/ssh-target-crud-handlers.ts
rename to src/main/ipc/ssh/ssh-target-crud-handlers.ts
index abd803fe872d..a8afaa773c3a 100644
--- a/src/main/ipc/ssh-target-crud-handlers.ts
+++ b/src/main/ipc/ssh/ssh-target-crud-handlers.ts
@@ -6,26 +6,26 @@ import type {
SshTargetAddResult,
SshTargetCreateInput,
SshTargetUpdateInput
-} from '../../shared/ssh-types'
+} from '../../../shared/ssh-types'
import {
listUserSshConfigHostSummaries,
resolveUserSshConfigHost
-} from '../ssh/config/ssh-config-host-picker'
-import { getManagedOrcadFenceEnvironmentId } from '../../shared/managed-orcad-ssh-owner'
-import { closeOrcadManagedTunnel } from '../managed-server/lifecycle/orcad-managed-tunnel'
-import { rotateSshProviderAuthority } from '../ssh/ssh-provider-authority'
-import { getSshTargetRegistryStore, setSshTargetMutations } from '../ssh/ssh-target-registry'
+} from '../../ssh/config/ssh-config-host-picker'
+import { getManagedOrcadFenceEnvironmentId } from '../../../shared/managed-orcad-ssh-owner'
+import { closeOrcadManagedTunnel } from '../../managed-server/lifecycle/orcad-managed-tunnel'
+import { rotateSshProviderAuthority } from '../../ssh/ssh-provider-authority'
+import { getSshTargetRegistryStore, setSshTargetMutations } from '../../ssh/ssh-target-registry'
import {
allowsDirectSshRelay,
isManagedOrcadSshTarget,
isRuntimeOwnedSshTarget
-} from '../ssh/ssh-connection-store'
+} from '../../ssh/ssh-connection-store'
import { connectionManager, getCurrentMainWindow } from './ssh-ipc-context'
import { runTargetLifecycle } from './ssh-target-lifecycle-queue'
-import { fingerprintRuntimeSshTarget } from '../ssh/runtime-ssh-access'
+import { fingerprintRuntimeSshTarget } from '../../ssh/runtime-ssh-access'
import { removeRegisteredSshTarget } from './ssh-session-teardown'
-import { notifyReposChanged } from './repos/repos-changed-notification'
-import { requestDesktopBrowserBridgeReconcile } from './desktop-browser-bridge-reconcile'
+import { notifyReposChanged } from '../repos/repos-changed-notification'
+import { requestDesktopBrowserBridgeReconcile } from '../desktop-browser-bridge-reconcile'
// Why: add/import can re-adopt workspaces orphaned on a removed target id (see ssh-target-readoption); the renderer must refresh its repo list to surface them.
function takeRepoReadoptions(): SshRepoReadoption[] {
diff --git a/src/main/ipc/ssh-target-lifecycle-queue.ts b/src/main/ipc/ssh/ssh-target-lifecycle-queue.ts
similarity index 100%
rename from src/main/ipc/ssh-target-lifecycle-queue.ts
rename to src/main/ipc/ssh/ssh-target-lifecycle-queue.ts
diff --git a/src/main/ipc/ssh-target-registry.test.ts b/src/main/ipc/ssh/ssh-target-registry.test.ts
similarity index 93%
rename from src/main/ipc/ssh-target-registry.test.ts
rename to src/main/ipc/ssh/ssh-target-registry.test.ts
index d56d6807bd9e..bf13d2ebedd9 100644
--- a/src/main/ipc/ssh-target-registry.test.ts
+++ b/src/main/ipc/ssh/ssh-target-registry.test.ts
@@ -5,16 +5,16 @@ const mocks = await vi.hoisted(async () => {
return createSshIpcMocks()
})
-vi.mock('../ssh/config/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
+vi.mock('../../ssh/config/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
vi.mock('electron', () => mocks.electron)
-vi.mock('../ssh/ssh-connection-store', () => mocks.sshConnectionStore)
+vi.mock('../../ssh/ssh-connection-store', () => mocks.sshConnectionStore)
vi.mock('./ssh-host-server-connect', () => mocks.hostServerConnect)
-vi.mock('../ssh/ssh-connection-manager', () => mocks.sshConnectionManager)
-vi.mock('../ssh/ssh-channel-multiplexer', () => mocks.sshChannelMultiplexer)
-vi.mock('../ssh/port-forwarding/ssh-port-forward', () => mocks.sshPortForward)
+vi.mock('../../ssh/ssh-connection-manager', () => mocks.sshConnectionManager)
+vi.mock('../../ssh/ssh-channel-multiplexer', () => mocks.sshChannelMultiplexer)
+vi.mock('../../ssh/port-forwarding/ssh-port-forward', () => mocks.sshPortForward)
vi.mock('../ssh/ssh-port-scanner', () => mocks.sshPortScanner)
-import type { SshTarget } from '../../shared/ssh-types'
+import type { SshTarget } from '../../../shared/ssh-types'
import { createSshIpcHarness } from './ssh-ipc-test-harness'
const { mockSshStore, mockConnectionManager, mockListConfigHosts, mockResolveConfigHost } = mocks
diff --git a/src/main/ipc/ssh-test-connection-probe-registry.test.ts b/src/main/ipc/ssh/ssh-test-connection-probe-registry.test.ts
similarity index 100%
rename from src/main/ipc/ssh-test-connection-probe-registry.test.ts
rename to src/main/ipc/ssh/ssh-test-connection-probe-registry.test.ts
diff --git a/src/main/ipc/ssh-test-probe-presence.test.ts b/src/main/ipc/ssh/ssh-test-probe-presence.test.ts
similarity index 100%
rename from src/main/ipc/ssh-test-probe-presence.test.ts
rename to src/main/ipc/ssh/ssh-test-probe-presence.test.ts
diff --git a/src/main/ipc/ssh.test.ts b/src/main/ipc/ssh/ssh.test.ts
similarity index 89%
rename from src/main/ipc/ssh.test.ts
rename to src/main/ipc/ssh/ssh.test.ts
index b261a9283550..5ab78da5fe7e 100644
--- a/src/main/ipc/ssh.test.ts
+++ b/src/main/ipc/ssh/ssh.test.ts
@@ -5,24 +5,24 @@ const mocks = await vi.hoisted(async () => {
return createSshIpcMocks()
})
-vi.mock('../ssh/config/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
+vi.mock('../../ssh/config/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
vi.mock('electron', () => mocks.electron)
-vi.mock('../ssh/ssh-connection-store', () => mocks.sshConnectionStore)
+vi.mock('../../ssh/ssh-connection-store', () => mocks.sshConnectionStore)
vi.mock('./ssh-host-server-connect', () => mocks.hostServerConnect)
-vi.mock('../ssh/ssh-connection-manager', () => mocks.sshConnectionManager)
-vi.mock('../ssh/ssh-channel-multiplexer', () => mocks.sshChannelMultiplexer)
-vi.mock('../ssh/port-forwarding/ssh-port-forward', () => mocks.sshPortForward)
+vi.mock('../../ssh/ssh-connection-manager', () => mocks.sshConnectionManager)
+vi.mock('../../ssh/ssh-channel-multiplexer', () => mocks.sshChannelMultiplexer)
+vi.mock('../../ssh/port-forwarding/ssh-port-forward', () => mocks.sshPortForward)
vi.mock('../ssh/ssh-port-scanner', () => mocks.sshPortScanner)
-import type { SshConnectionState, SshTarget } from '../../shared/ssh-types'
+import type { SshConnectionState, SshTarget } from '../../../shared/ssh-types'
import { createSshIpcHarness } from './ssh-ipc-test-harness'
import {
decideHostServer,
publishManagedServerConnect,
publishUnservedHostServer
} from './ssh-host-server-connect'
-import { beginSshHostCensus, recordSshConnectionOpened } from '../ssh/ssh-connection-attribution'
-import type { SshConnection } from '../ssh/ssh-connection'
+import { beginSshHostCensus, recordSshConnectionOpened } from '../../ssh/ssh-connection-attribution'
+import type { SshConnection } from '../../ssh/ssh-connection'
const { mockSshStore, mockConnectionManager } = mocks
diff --git a/src/main/ipc/ssh.ts b/src/main/ipc/ssh/ssh.ts
similarity index 81%
rename from src/main/ipc/ssh.ts
rename to src/main/ipc/ssh/ssh.ts
index 3cfb60aa4775..00c6661512bd 100644
--- a/src/main/ipc/ssh.ts
+++ b/src/main/ipc/ssh/ssh.ts
@@ -1,27 +1,27 @@
import { ipcMain, type BrowserWindow } from 'electron'
-import type { Store } from '../persistence'
-import { SshConnectionStore } from '../ssh/ssh-connection-store'
+import type { Store } from '../../persistence'
+import { SshConnectionStore } from '../../ssh/ssh-connection-store'
import { awaitSignInForCredentialHosts } from './ssh-sign-in-requirement'
-import { SshConnectionManager } from '../ssh/ssh-connection-manager'
-import { SshPortForwardManager } from '../ssh/port-forwarding/ssh-port-forward'
-import { quitTeardownStartGate } from '../quit-teardown-start-gate'
+import { SshConnectionManager } from '../../ssh/ssh-connection-manager'
+import { SshPortForwardManager } from '../../ssh/port-forwarding/ssh-port-forward'
+import { quitTeardownStartGate } from '../../quit-teardown-start-gate'
import {
getSshTargetRegistryStore,
setSshConnectionManagerResolver,
setSshTargetMutations,
setSshTargetRegistryHandlers,
setSshTargetRegistryStore
-} from '../ssh/ssh-target-registry'
+} from '../../ssh/ssh-target-registry'
import { registerSshBrowseHandler } from './ssh-browse'
import { registerCredentialHandler } from './ssh-passphrase'
-import type { OrcaRuntimeService } from '../runtime/orca-runtime'
+import type { OrcaRuntimeService } from '../../runtime/orca-runtime'
import {
initializeSshConnectionGenerationSession,
resetSshConnectionGenerations
-} from '../ssh/ssh-connection-generation'
-import { resetSshProviderAuthorities } from '../ssh/ssh-provider-authority'
-import { installManagedOrcadStartStatus } from './runtime-environment-managed-tunnel'
+} from '../../ssh/ssh-connection-generation'
+import { resetSshProviderAuthorities } from '../../ssh/ssh-provider-authority'
+import { installManagedOrcadStartStatus } from '../runtime-environments/runtime-environment-managed-tunnel'
import {
connectInFlight,
credentialRequestedForTarget,
@@ -29,8 +29,8 @@ import {
testingTargets
} from './ssh-connect-attempt-registry'
import { createSshConnectionCallbacks } from './ssh-connection-state-callbacks'
-import { resetSshCredentialDeclinesForTests } from '../ssh/ssh-credential-decline'
-import { resetSshUserDisconnectsForTests } from '../ssh/ssh-user-disconnect'
+import { resetSshCredentialDeclinesForTests } from '../../ssh/ssh-credential-decline'
+import { resetSshUserDisconnectsForTests } from '../../ssh/ssh-user-disconnect'
import { registerSshConnectionHandlers } from './ssh-connection-handlers'
import {
registerPowerMonitorReconnect,
@@ -52,15 +52,15 @@ import { broadcastPortForwards } from './ssh-renderer-broadcast'
import { resetSshShutdownDrain } from './ssh-shutdown-drain'
import { registerSshTargetCrudHandlers } from './ssh-target-crud-handlers'
import { targetLifecycleInFlight } from './ssh-target-lifecycle-queue'
-import { disposeOrcadManagedTunnels } from '../managed-server/lifecycle/orcad-managed-tunnel'
-import { reconcileManagedOrcadSshTargets } from '../ssh/orcad-retained-source'
-import { installOrcadMigrationScrollbackRetention } from '../ssh/orcad-migration-scrollback-retention-wiring'
-import { getAppEnvironment } from '../../shared/app-environment'
-import { registerLegacyRelayBridgeIpc } from '../ssh/legacy-relay/legacy-relay-bridge-ipc'
+import { disposeOrcadManagedTunnels } from '../../managed-server/lifecycle/orcad-managed-tunnel'
+import { reconcileManagedOrcadSshTargets } from '../../ssh/orcad-retained-source'
+import { installOrcadMigrationScrollbackRetention } from '../../ssh/orcad-migration-scrollback-retention-wiring'
+import { getAppEnvironment } from '../../../shared/app-environment'
+import { registerLegacyRelayBridgeIpc } from '../../ssh/legacy-relay/legacy-relay-bridge-ipc'
import {
disposeDesktopBrowserBridge,
installDesktopBrowserBridge
-} from './desktop-browser-bridge-wiring'
+} from '../desktop-browser-bridge-wiring'
const SSH_IPC_CHANNELS = [
'ssh:listTargets',
diff --git a/src/main/ipc/wsl-host-gate-off.test.ts b/src/main/ipc/wsl-host-gate-off.test.ts
index d31b2e59f787..bb5a456fe50b 100644
--- a/src/main/ipc/wsl-host-gate-off.test.ts
+++ b/src/main/ipc/wsl-host-gate-off.test.ts
@@ -5,7 +5,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
import {
getRuntimeEnvironmentStatusSnapshots,
resetRuntimeEnvironmentStatusOwners
-} from './runtime-environment-request-connections'
+} from './runtime-environments/runtime-environment-request-connections'
import { encodePairingOffer } from '../../shared/pairing'
import {
addEnvironmentFromPairingCode,
@@ -58,8 +58,9 @@ vi.mock('../../shared/remote-runtime-client', () => ({
subscribeRemoteRuntimeRequest: vi.fn()
}))
-vi.mock('./runtime-environment-request-connections', async () => {
- const { withRuntimeStatusOwners } = await import('./runtime-environments-ipc-test-harness')
+vi.mock('./runtime-environments/runtime-environment-request-connections', async () => {
+ const { withRuntimeStatusOwners } =
+ await import('./runtime-environments/runtime-environments-ipc-test-harness')
return withRuntimeStatusOwners({
sendRemoteRuntimeConnectionRequest: mocks.connectionRequest,
sendRemoteRuntimeSharedControlRequest: mocks.sharedControlRequest,
@@ -74,10 +75,13 @@ vi.mock('./runtime-environment-request-connections', async () => {
})
})
-import { registerRuntimeEnvironmentHandlers } from './runtime-environments'
-import { channelHandlerLookup, pairingCode } from './runtime-environments-ipc-test-harness'
+import { registerRuntimeEnvironmentHandlers } from './runtime-environments/runtime-environments'
+import {
+ channelHandlerLookup,
+ pairingCode
+} from './runtime-environments/runtime-environments-ipc-test-harness'
import { registerWslHostHandlers, WSL_HOST_HANDLER_CHANNELS } from './wsl-host-handlers'
-import { resolveManagedRuntimeEnvironment } from './runtime-environment-managed-tunnel'
+import { resolveManagedRuntimeEnvironment } from './runtime-environments/runtime-environment-managed-tunnel'
import { getWslHostService, setWslHostService } from '../wsl/wsl-host-service-instance'
import { getSavedRuntimeAiVaultHostInfos } from '../ai-vault/runtime-session-scanner'
diff --git a/src/main/ipc/wsl-host-handlers.ts b/src/main/ipc/wsl-host-handlers.ts
index 6d7d99c2c712..694c63ad87ae 100644
--- a/src/main/ipc/wsl-host-handlers.ts
+++ b/src/main/ipc/wsl-host-handlers.ts
@@ -19,9 +19,9 @@ import { hasOrcadTemplate } from '../orcad/orcad-artifact-materializer'
import { WslHostService } from '../wsl/wsl-host-service'
import { wslHostsGateOpen } from '../wsl/wsl-host-gate'
import { getWslHostService, setWslHostService } from '../wsl/wsl-host-service-instance'
-import { retireRemovedRuntimeEnvironment } from './runtime-environment-removal-cleanup'
-import { getRuntimeEnvironmentStatus } from './runtime-environment-status-probe'
-import { callRuntimeEnvironment } from './runtime-environment-transport-routing'
+import { retireRemovedRuntimeEnvironment } from './runtime-environments/runtime-environment-removal-cleanup'
+import { getRuntimeEnvironmentStatus } from './runtime-environments/runtime-environment-status-probe'
+import { callRuntimeEnvironment } from './runtime-environments/runtime-environment-transport-routing'
import { resolveEnvironment } from '../../shared/runtime-environment-store'
import { getPreferredPairedRuntimeConnection } from '../../shared/runtime-environments'
import { requestOrcadTerminalCensus } from '../ssh/orcad-terminal-census-client'
diff --git a/src/main/managed-server/lifecycle/orcad-managed-tunnel.ts b/src/main/managed-server/lifecycle/orcad-managed-tunnel.ts
index ab97c595c098..8bb5993e206d 100644
--- a/src/main/managed-server/lifecycle/orcad-managed-tunnel.ts
+++ b/src/main/managed-server/lifecycle/orcad-managed-tunnel.ts
@@ -5,7 +5,7 @@ import type { SshConnection } from '../../ssh/ssh-connection'
import { probeManagedOrcadTunnel } from './orcad-managed-tunnel-resume'
import { ensureManagedOrcadServing } from './orcad-managed-serving'
import { OrcadManagedTunnelManager } from './orcad-managed-tunnel-manager'
-import { getRemoteRuntimeSharedControlAnsweredAt } from '../../ipc/runtime-environment-shared-control-answers'
+import { getRemoteRuntimeSharedControlAnsweredAt } from '../../ipc/runtime-environments/runtime-environment-shared-control-answers'
import { getSshConnectionManager, getSshTargetRegistryStore } from '../../ssh/ssh-target-registry'
import {
MANAGED_ORCAD_TUNNEL_TARGETING,
diff --git a/src/main/managed-server/lifecycle/orcad-runtime-conversion-wiring.ts b/src/main/managed-server/lifecycle/orcad-runtime-conversion-wiring.ts
index fc87b033d36d..313df02034f3 100644
--- a/src/main/managed-server/lifecycle/orcad-runtime-conversion-wiring.ts
+++ b/src/main/managed-server/lifecycle/orcad-runtime-conversion-wiring.ts
@@ -4,7 +4,7 @@ import {
getPreferredPairingOffer,
type KnownRuntimeEnvironment
} from '../../../shared/runtime-environments'
-import { disconnectRegisteredSshTarget } from '../../ipc/ssh-session-teardown'
+import { disconnectRegisteredSshTarget } from '../../ipc/ssh/ssh-session-teardown'
import type { OrcadMigrationDestinationCatalog } from '../../ssh/orcad-migration-cutover-coordinator'
import {
abortRemoteOrcadMigrationCatalog,
diff --git a/src/main/managed-server/lifecycle/orcad-runtime-conversion.ts b/src/main/managed-server/lifecycle/orcad-runtime-conversion.ts
index 999080705575..05f17750bf4e 100644
--- a/src/main/managed-server/lifecycle/orcad-runtime-conversion.ts
+++ b/src/main/managed-server/lifecycle/orcad-runtime-conversion.ts
@@ -17,7 +17,7 @@ import {
redactRuntimeEnvironment,
type KnownRuntimeEnvironment
} from '../../../shared/runtime-environments'
-import { runTargetLifecycle } from '../../ipc/ssh-target-lifecycle-queue'
+import { runTargetLifecycle } from '../../ipc/ssh/ssh-target-lifecycle-queue'
import { environmentMatchesManagedOrcadCutover } from './orcad-managed-migration-status'
import { requireManagedOrcadInfrastructure } from './orcad-managed-runtime-context'
import { ensureOrcadManagedTunnel } from './orcad-managed-tunnel'
diff --git a/src/main/managed-server/lifecycle/orcad-runtime-deployment.ts b/src/main/managed-server/lifecycle/orcad-runtime-deployment.ts
index 2f51232595d8..47256c88e82f 100644
--- a/src/main/managed-server/lifecycle/orcad-runtime-deployment.ts
+++ b/src/main/managed-server/lifecycle/orcad-runtime-deployment.ts
@@ -18,7 +18,7 @@ import {
type OrcadManagedDeployResult
} from '../../../shared/orcad-managed-runtime'
import { getManagedOrcadFenceEnvironmentId } from '../../../shared/managed-orcad-ssh-owner'
-import { runTargetLifecycle } from '../../ipc/ssh-target-lifecycle-queue'
+import { runTargetLifecycle } from '../../ipc/ssh/ssh-target-lifecycle-queue'
import { materializeOrcadArtifact } from '../../orcad/orcad-artifact-materializer'
import {
closeOrcadManagedTunnel,
diff --git a/src/main/managed-server/lifecycle/orcad-runtime-status.ts b/src/main/managed-server/lifecycle/orcad-runtime-status.ts
index bf591d7fbadd..693a3fcbb119 100644
--- a/src/main/managed-server/lifecycle/orcad-runtime-status.ts
+++ b/src/main/managed-server/lifecycle/orcad-runtime-status.ts
@@ -1,5 +1,5 @@
import type { OrcadManagedRuntimeStatus } from '../../../shared/orcad-managed-runtime'
-import { runTargetLifecycle } from '../../ipc/ssh-target-lifecycle-queue'
+import { runTargetLifecycle } from '../../ipc/ssh/ssh-target-lifecycle-queue'
import type { OrcadActivationTransaction } from '../activation/orcad-activation-transaction'
import { readOrcadActivationTransaction } from '../activation/orcad-activation-transaction-store'
import {
diff --git a/src/main/skills/skill-client-mediated-transfer-cancellation.test.ts b/src/main/skills/skill-client-mediated-transfer-cancellation.test.ts
index ea95d143f2c8..2b4ab252a326 100644
--- a/src/main/skills/skill-client-mediated-transfer-cancellation.test.ts
+++ b/src/main/skills/skill-client-mediated-transfer-cancellation.test.ts
@@ -8,7 +8,7 @@ const mocks = vi.hoisted(() => ({
downloadSkillPackageGrant: vi.fn()
}))
-vi.mock('../ipc/runtime-environment-transport-routing', () => ({
+vi.mock('../ipc/runtime-environments/runtime-environment-transport-routing', () => ({
callRuntimeEnvironment: mocks.callRuntimeEnvironment
}))
vi.mock('./skill-package-download', () => ({
diff --git a/src/main/skills/skill-client-mediated-transfer.test.ts b/src/main/skills/skill-client-mediated-transfer.test.ts
index 76707a573566..8d6522c742eb 100644
--- a/src/main/skills/skill-client-mediated-transfer.test.ts
+++ b/src/main/skills/skill-client-mediated-transfer.test.ts
@@ -8,7 +8,7 @@ const mocks = vi.hoisted(() => ({
downloadSkillPackageGrant: vi.fn()
}))
-vi.mock('../ipc/runtime-environment-transport-routing', () => ({
+vi.mock('../ipc/runtime-environments/runtime-environment-transport-routing', () => ({
callRuntimeEnvironment: mocks.callRuntimeEnvironment
}))
vi.mock('./skill-package-download', () => ({
diff --git a/src/main/skills/skill-client-mediated-transfer.ts b/src/main/skills/skill-client-mediated-transfer.ts
index 536f007a347e..7f10f24129a3 100644
--- a/src/main/skills/skill-client-mediated-transfer.ts
+++ b/src/main/skills/skill-client-mediated-transfer.ts
@@ -7,7 +7,7 @@ import {
SKILL_UPLOAD_CHUNK_MAX_BYTES,
SkillUploadBeginResultSchema
} from '../../shared/skill-upload-session-contract'
-import { callRuntimeEnvironment } from '../ipc/runtime-environment-transport-routing'
+import { callRuntimeEnvironment } from '../ipc/runtime-environments/runtime-environment-transport-routing'
import { downloadSkillPackageGrant } from './skill-package-download'
import { startSkillPhaseOperation } from './skill-operation-observability'
import { retrySkillTransferRpc, throwIfSkillTransferCancelled } from './skill-transfer-rpc-retry'
diff --git a/src/main/skills/skill-cloud-grant-installation.test.ts b/src/main/skills/skill-cloud-grant-installation.test.ts
index 8534ce7a176a..2298115fd22a 100644
--- a/src/main/skills/skill-cloud-grant-installation.test.ts
+++ b/src/main/skills/skill-cloud-grant-installation.test.ts
@@ -11,7 +11,7 @@ const mocks = vi.hoisted(() => ({
vi.mock('electron', () => ({
app: { getPath: () => '/state', isPackaged: true }
}))
-vi.mock('../ipc/runtime-environment-transport-routing', () => ({
+vi.mock('../ipc/runtime-environments/runtime-environment-transport-routing', () => ({
getRuntimeEnvironmentStatus: mocks.getRuntimeEnvironmentStatus
}))
vi.mock('./skill-remote-install-service', () => ({
diff --git a/src/main/skills/skill-cloud-grant-installation.ts b/src/main/skills/skill-cloud-grant-installation.ts
index e60c8712820b..57304a5d2f62 100644
--- a/src/main/skills/skill-cloud-grant-installation.ts
+++ b/src/main/skills/skill-cloud-grant-installation.ts
@@ -14,7 +14,7 @@ import type {
SkillInstallRequest
} from '../../shared/skill-install-contract'
import type { SkillCloudDownloadGrant } from '../../shared/skill-cloud-contract'
-import { getRuntimeEnvironmentStatus } from '../ipc/runtime-environment-transport-routing'
+import { getRuntimeEnvironmentStatus } from '../ipc/runtime-environments/runtime-environment-transport-routing'
import type { OrcaRuntimeService } from '../runtime/orca-runtime'
import { skillInstallFailureFromError } from './skill-install-operation-error'
import { recordSkillCapabilityAbsence } from './skill-operation-observability'
diff --git a/src/main/skills/skill-remote-error-category-parity.test.ts b/src/main/skills/skill-remote-error-category-parity.test.ts
index e9d2c08c43a9..193f817c5de2 100644
--- a/src/main/skills/skill-remote-error-category-parity.test.ts
+++ b/src/main/skills/skill-remote-error-category-parity.test.ts
@@ -7,7 +7,7 @@ import type { SkillInstallRequest } from '../../shared/skill-install-contract'
const mocks = vi.hoisted(() => ({ callRuntimeEnvironment: vi.fn() }))
-vi.mock('../ipc/runtime-environment-transport-routing', () => ({
+vi.mock('../ipc/runtime-environments/runtime-environment-transport-routing', () => ({
callRuntimeEnvironment: mocks.callRuntimeEnvironment
}))
diff --git a/src/main/skills/skill-remote-install-service.test.ts b/src/main/skills/skill-remote-install-service.test.ts
index 0bd3552a3d50..931b8f8cd7c0 100644
--- a/src/main/skills/skill-remote-install-service.test.ts
+++ b/src/main/skills/skill-remote-install-service.test.ts
@@ -10,7 +10,7 @@ const mocks = vi.hoisted(() => ({
transferSkillPackageToRuntime: vi.fn()
}))
-vi.mock('../ipc/runtime-environment-transport-routing', () => ({
+vi.mock('../ipc/runtime-environments/runtime-environment-transport-routing', () => ({
callRuntimeEnvironment: mocks.callRuntimeEnvironment
}))
vi.mock('./skill-client-mediated-transfer', () => ({
diff --git a/src/main/skills/skill-remote-install-service.ts b/src/main/skills/skill-remote-install-service.ts
index 6451f868a7f6..ff24d5939bd6 100644
--- a/src/main/skills/skill-remote-install-service.ts
+++ b/src/main/skills/skill-remote-install-service.ts
@@ -18,7 +18,7 @@ import {
SKILL_INSTALL_PROVIDERS_CAPABILITY,
SKILL_UPLOAD_CAPABILITY
} from '../../shared/skill-install-capability'
-import { callRuntimeEnvironment } from '../ipc/runtime-environment-transport-routing'
+import { callRuntimeEnvironment } from '../ipc/runtime-environments/runtime-environment-transport-routing'
import { transferSkillPackageToRuntime } from './skill-client-mediated-transfer'
import { SkillInstallFailureSchema } from '../../shared/skill-install-failure'
import { SkillInstallOperationError } from './skill-install-operation-error'
diff --git a/src/main/skills/skill-runtime-capability.test.ts b/src/main/skills/skill-runtime-capability.test.ts
index 3059a89032e6..212beac45eeb 100644
--- a/src/main/skills/skill-runtime-capability.test.ts
+++ b/src/main/skills/skill-runtime-capability.test.ts
@@ -1,12 +1,12 @@
import { beforeEach, describe, expect, it, vi } from 'vitest'
-import { getRuntimeEnvironmentStatus } from '../ipc/runtime-environment-transport-routing'
+import { getRuntimeEnvironmentStatus } from '../ipc/runtime-environments/runtime-environment-transport-routing'
import {
supportsSkillRuntimeCancellation,
supportsSkillRuntimeInstall,
supportsSkillRuntimeManagement
} from './skill-runtime-capability'
-vi.mock('../ipc/runtime-environment-transport-routing', () => ({
+vi.mock('../ipc/runtime-environments/runtime-environment-transport-routing', () => ({
getRuntimeEnvironmentStatus: vi.fn()
}))
diff --git a/src/main/skills/skill-runtime-capability.ts b/src/main/skills/skill-runtime-capability.ts
index c03b726931dd..81b6b348d1d4 100644
--- a/src/main/skills/skill-runtime-capability.ts
+++ b/src/main/skills/skill-runtime-capability.ts
@@ -4,7 +4,7 @@ import {
SKILL_INSTALL_CAPABILITY,
SKILL_MANAGEMENT_CAPABILITY
} from '../../shared/skill-install-capability'
-import { getRuntimeEnvironmentStatus } from '../ipc/runtime-environment-transport-routing'
+import { getRuntimeEnvironmentStatus } from '../ipc/runtime-environments/runtime-environment-transport-routing'
export async function supportsSkillRuntimeManagement(
userDataPath: string,
diff --git a/src/main/ssh/legacy-relay/ssh-relay-version-mismatch-error.ts b/src/main/ssh/legacy-relay/ssh-relay-version-mismatch-error.ts
index 451b18cd6889..6661d1ef2eca 100644
--- a/src/main/ssh/legacy-relay/ssh-relay-version-mismatch-error.ts
+++ b/src/main/ssh/legacy-relay/ssh-relay-version-mismatch-error.ts
@@ -1,5 +1,5 @@
// Why: a unique error class so callers (in particular the relay-lost retry
-// loop in src/main/ipc/ssh.ts) can branch on `instanceof
+// loop in src/main/ipc/ssh/ssh.ts) can branch on `instanceof
// RelayVersionMismatchError` and treat the failure as terminal — i.e. skip
// the exponential-backoff retry and surface a user-visible "please reconnect
// manually" error. Any other transport failure remains transiently retryable.
diff --git a/src/main/ssh/orcad-migration-delta-move.test.ts b/src/main/ssh/orcad-migration-delta-move.test.ts
index 6267e861def6..6173fdb68d06 100644
--- a/src/main/ssh/orcad-migration-delta-move.test.ts
+++ b/src/main/ssh/orcad-migration-delta-move.test.ts
@@ -28,7 +28,7 @@ import { reconcileManagedOrcadSshTargets, visibleRepos } from './orcad-retained-
import { SshConnectionStore } from './ssh-connection-store'
import { resolveHostServerOnConnect } from './ssh-host-server-on-connect'
import { hostServerDepsStub } from './ssh-host-server-on-connect-test-deps'
-import { runTargetLifecycle } from '../ipc/ssh-target-lifecycle-queue'
+import { runTargetLifecycle } from '../ipc/ssh/ssh-target-lifecycle-queue'
const mocks = vi.hoisted(() => {
const state: { targetStore: unknown } = { targetStore: null }
diff --git a/src/main/ssh/orcad-migration-delta-snapshot.test.ts b/src/main/ssh/orcad-migration-delta-snapshot.test.ts
index 3b74bdcd0b46..0810c431ae3b 100644
--- a/src/main/ssh/orcad-migration-delta-snapshot.test.ts
+++ b/src/main/ssh/orcad-migration-delta-snapshot.test.ts
@@ -16,7 +16,7 @@ import { fakeOrcadMigrationDestination } from './orcad-migration-destination-fak
import { runOrcadDeltaMove } from './orcad-migration-delta-move'
import { reconcileManagedOrcadSshTargets } from './orcad-retained-source'
import { SshConnectionStore } from './ssh-connection-store'
-import { runTargetLifecycle } from '../ipc/ssh-target-lifecycle-queue'
+import { runTargetLifecycle } from '../ipc/ssh/ssh-target-lifecycle-queue'
const mocks = vi.hoisted(() => {
const state: { targetStore: unknown } = { targetStore: null }
diff --git a/src/main/ssh/orcad-migration-repository-link.test.ts b/src/main/ssh/orcad-migration-repository-link.test.ts
index a4f1a7cbeb93..f741b66496b7 100644
--- a/src/main/ssh/orcad-migration-repository-link.test.ts
+++ b/src/main/ssh/orcad-migration-repository-link.test.ts
@@ -51,7 +51,7 @@ vi.mock('../managed-server/lifecycle/orcad-managed-tunnel', () => ({
const { convertSshTargetToManagedOrcad } =
await import('../managed-server/lifecycle/orcad-runtime-conversion')
const { runOrcadDeltaMove } = await import('./orcad-migration-delta-move')
-const { runTargetLifecycle } = await import('../ipc/ssh-target-lifecycle-queue')
+const { runTargetLifecycle } = await import('../ipc/ssh/ssh-target-lifecycle-queue')
const TARGET: SshTarget = {
id: 'ssh-shared',
diff --git a/src/main/ssh/orcad-runtime-maintenance.ts b/src/main/ssh/orcad-runtime-maintenance.ts
index 2748e8ae2b62..03c7de866ee6 100644
--- a/src/main/ssh/orcad-runtime-maintenance.ts
+++ b/src/main/ssh/orcad-runtime-maintenance.ts
@@ -15,7 +15,7 @@ import type {
OrcadManagedRecoveryResult,
OrcadManagedRollbackResult
} from '../../shared/orcad-managed-runtime'
-import { runTargetLifecycle } from '../ipc/ssh-target-lifecycle-queue'
+import { runTargetLifecycle } from '../ipc/ssh/ssh-target-lifecycle-queue'
import type { ServeReadiness } from '../server/serve-readiness'
import { recoverInterruptedOrcadActivation } from '../managed-server/activation/orcad-activation-recovery'
import { probeActiveOrcadReadiness } from './orcad-active-readiness'
diff --git a/src/main/ssh/orcad-ssh-provisioning.ts b/src/main/ssh/orcad-ssh-provisioning.ts
index f7f09150a6d4..e72de1a5e0b5 100644
--- a/src/main/ssh/orcad-ssh-provisioning.ts
+++ b/src/main/ssh/orcad-ssh-provisioning.ts
@@ -9,7 +9,7 @@ import { EphemeralVmRecipeSshTargetSchema } from '../../shared/ephemeral-vm-reci
import { listEnvironments } from '../../shared/runtime-environment-store'
import { getOrcadSshDeployment } from '../../shared/runtime-environments'
import { normalizeSshConfigAlias } from '../../shared/ssh-config-alias'
-import { runTargetLifecycle } from '../ipc/ssh-target-lifecycle-queue'
+import { runTargetLifecycle } from '../ipc/ssh/ssh-target-lifecycle-queue'
import { normalizeSshTarget } from '../persistence/leasing-ssh-ptys/ssh-normalization'
import { requireManagedOrcadTargetStore } from '../managed-server/lifecycle/orcad-managed-runtime-context'
import { createManagedOrcadEnvironment } from '../managed-server/lifecycle/orcad-runtime-deployment'
diff --git a/src/main/ssh/runtime-ssh-access.ts b/src/main/ssh/runtime-ssh-access.ts
index e51133a52dec..8c3c0890671f 100644
--- a/src/main/ssh/runtime-ssh-access.ts
+++ b/src/main/ssh/runtime-ssh-access.ts
@@ -17,7 +17,7 @@ import {
} from '../../shared/runtime-environment-ssh-access-store'
import { getManagedOrcadFenceEnvironmentId } from '../../shared/managed-orcad-ssh-owner'
import type { SshTarget } from '../../shared/ssh-types'
-import { runTargetLifecycle } from '../ipc/ssh-target-lifecycle-queue'
+import { runTargetLifecycle } from '../ipc/ssh/ssh-target-lifecycle-queue'
import { requireManagedOrcadInfrastructure } from '../managed-server/lifecycle/orcad-managed-runtime-context'
import {
closeOrcadManagedTunnel,
diff --git a/src/main/ssh/ssh-connection-reconnect-ladder.test.ts b/src/main/ssh/ssh-connection-reconnect-ladder.test.ts
index 28acfbd4c25f..81bfb324fd8d 100644
--- a/src/main/ssh/ssh-connection-reconnect-ladder.test.ts
+++ b/src/main/ssh/ssh-connection-reconnect-ladder.test.ts
@@ -121,7 +121,7 @@ describe('SshConnection', () => {
expect(
published.filter((e) => e.status === 'reconnecting').map((e) => e.reconnectAttempt)
).toEqual([0, 1, 2])
- // src/main/ipc/ssh.ts gates the relay redeploy on reconnectAttempt === 0 at 'connected'.
+ // src/main/ipc/ssh/ssh.ts gates the relay redeploy on reconnectAttempt === 0 at 'connected'.
expect(
published.filter((e) => e.status === 'connected').map((e) => e.reconnectAttempt)
).toEqual([0, 0, 0, 0])
diff --git a/src/main/startup/headless-serve-ssh-registration.test.ts b/src/main/startup/headless-serve-ssh-registration.test.ts
index 567498b94e59..909621f2e3a0 100644
--- a/src/main/startup/headless-serve-ssh-registration.test.ts
+++ b/src/main/startup/headless-serve-ssh-registration.test.ts
@@ -1,26 +1,26 @@
import { beforeEach, describe, expect, it, vi } from 'vitest'
const mocks = await vi.hoisted(async () => {
- const { createSshIpcMocks } = await import('../ipc/ssh-ipc-module-mocks')
+ const { createSshIpcMocks } = await import('../ipc/ssh/ssh-ipc-module-mocks')
return createSshIpcMocks()
})
vi.mock('../ssh/config/ssh-config-host-picker', () => mocks.sshConfigHostPicker)
vi.mock('electron', () => mocks.electron)
vi.mock('../ssh/ssh-connection-store', () => mocks.sshConnectionStore)
-vi.mock('../ipc/ssh-host-server-connect', () => mocks.hostServerConnect)
+vi.mock('../ipc/ssh/ssh-host-server-connect', () => mocks.hostServerConnect)
vi.mock('../ssh/ssh-connection-manager', () => mocks.sshConnectionManager)
vi.mock('../ssh/ssh-channel-multiplexer', () => mocks.sshChannelMultiplexer)
vi.mock('../ssh/port-forwarding/ssh-port-forward', () => mocks.sshPortForward)
vi.mock('../ssh/ssh-port-scanner', () => mocks.sshPortScanner)
-import { resetSshHandlerStateForTests } from '../ipc/ssh'
+import { resetSshHandlerStateForTests } from '../ipc/ssh/ssh'
import {
connectRegisteredSshTarget,
listRegisteredSshTargets,
SSH_TARGET_MANAGEMENT_UNSERVED_MESSAGE
} from '../ssh/ssh-target-registry'
-import { createSshIpcHarness } from '../ipc/ssh-ipc-test-harness'
+import { createSshIpcHarness } from '../ipc/ssh/ssh-ipc-test-harness'
import type { SshTarget } from '../../shared/ssh-types'
import { mainProcessState } from './main-process-state'
import { registerHeadlessServeSshHandlers } from './headless-serve-ssh-registration'
diff --git a/src/main/startup/headless-serve-ssh-registration.ts b/src/main/startup/headless-serve-ssh-registration.ts
index d3bb7c32fe2a..7d54374ea65e 100644
--- a/src/main/startup/headless-serve-ssh-registration.ts
+++ b/src/main/startup/headless-serve-ssh-registration.ts
@@ -1,6 +1,6 @@
import type { Store } from '../persistence'
import type { OrcaRuntimeService } from '../runtime/orca-runtime'
-import { registerSshHandlers } from '../ipc/ssh'
+import { registerSshHandlers } from '../ipc/ssh/ssh'
import { mainProcessState as state } from './main-process-state'
/**
diff --git a/src/main/startup/main-process-quit.ts b/src/main/startup/main-process-quit.ts
index 4397bfc22e1a..20e58eea1ef3 100644
--- a/src/main/startup/main-process-quit.ts
+++ b/src/main/startup/main-process-quit.ts
@@ -4,7 +4,7 @@ import { disposeWorktreeBaseDirectoryWatchers } from '../ipc/worktree-base-direc
import { stopFolderRepoGitUpgradeWatch } from '../ipc/folder-repo-git-upgrade'
import { killAllPty } from '../ipc/pty/kill-all'
import { disconnectDaemon, shutdownDaemon } from '../daemon/daemon-provider-state'
-import { beginSshShutdown } from '../ipc/ssh-shutdown-drain'
+import { beginSshShutdown } from '../ipc/ssh/ssh-shutdown-drain'
import { agentHookServer } from '../agent-hooks/server'
import { wslHookRelayManager } from '../agent-hooks/wsl-hook-relay-manager'
import { removeManagedAgentHooksAsync } from '../agent-hooks/managed-agent-hook-controls'
diff --git a/src/main/startup/main-process-runtime-launch-activation.test.ts b/src/main/startup/main-process-runtime-launch-activation.test.ts
index 516342f877bb..848e19d397d6 100644
--- a/src/main/startup/main-process-runtime-launch-activation.test.ts
+++ b/src/main/startup/main-process-runtime-launch-activation.test.ts
@@ -40,7 +40,7 @@ vi.mock('./headless-serve-ssh-registration', () => ({
})
}))
vi.mock('../ipc/mobile', () => ({ registerMobileHandlers: vi.fn() }))
-vi.mock('../ipc/runtime-environment-mobile-relay-hosts', () => ({
+vi.mock('../ipc/runtime-environments/runtime-environment-mobile-relay-hosts', () => ({
createRuntimeEnvironmentMobileRelayHosts: vi.fn()
}))
vi.mock('../ipc/pty/provider/registry', () => ({ getLocalPtyProvider: vi.fn() }))
diff --git a/src/main/startup/main-process-runtime-launch.ts b/src/main/startup/main-process-runtime-launch.ts
index e949695331a3..bad266f03ec2 100644
--- a/src/main/startup/main-process-runtime-launch.ts
+++ b/src/main/startup/main-process-runtime-launch.ts
@@ -6,7 +6,7 @@ import {
} from '../persistence'
import { OrcaRuntimeRpcServer } from '../runtime/runtime-rpc'
import { registerMobileHandlers } from '../ipc/mobile'
-import { createRuntimeEnvironmentMobileRelayHosts } from '../ipc/runtime-environment-mobile-relay-hosts'
+import { createRuntimeEnvironmentMobileRelayHosts } from '../ipc/runtime-environments/runtime-environment-mobile-relay-hosts'
import { getLocalPtyProvider } from '../ipc/pty/provider/registry'
import { registerHeadlessPtyRuntime } from '../ipc/pty/register-headless-runtime'
import { LocalPtyProvider } from '../providers/local-pty-provider'
diff --git a/src/main/startup/main-process-runtime-service.ts b/src/main/startup/main-process-runtime-service.ts
index 213ff778511d..63837024eb69 100644
--- a/src/main/startup/main-process-runtime-service.ts
+++ b/src/main/startup/main-process-runtime-service.ts
@@ -24,7 +24,7 @@ import { resolveEnvironment } from '../../shared/runtime-environment-store'
import { resolveTuiAgentLaunchEnv } from '../../shared/tui-agent-launch-defaults'
import { getPreferredPairedRuntimeConnection } from '../../shared/runtime-environments'
import { fingerprintOrchestrationPeer } from '../runtime/orchestration/environment-transport'
-import { callRuntimeEnvironment } from '../ipc/runtime-environment-transport-routing'
+import { callRuntimeEnvironment } from '../ipc/runtime-environments/runtime-environment-transport-routing'
import { mainProcessState as state } from './main-process-state'
import { installWslOrcadAccountShim } from './wsl-orcad-account-env-wiring'
import {
diff --git a/src/main/window/attach-main-window-services.test.ts b/src/main/window/attach-main-window-services.test.ts
index acae6865f3f4..fe7b614b7aca 100644
--- a/src/main/window/attach-main-window-services.test.ts
+++ b/src/main/window/attach-main-window-services.test.ts
@@ -1,7 +1,7 @@
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
import type { Store } from '../persistence'
import { cancelHistoryGc } from '../terminal-history-gc'
-import type { registerSshHandlers } from '../ipc/ssh'
+import type { registerSshHandlers } from '../ipc/ssh/ssh'
import type { registerDaemonManagementHandlers } from '../ipc/pty-management'
import type { registerWorkspaceCleanupHandlers } from '../ipc/workspace-cleanup'
import type { startFolderRepoGitUpgradeWatch } from '../ipc/folder-repo-git-upgrade'
@@ -115,7 +115,7 @@ vi.mock('../ipc/worktree-change-invalidators', () => ({
vi.mock('../ipc/pty/provider/registry', () => ({ getLocalPtyProvider: vi.fn() }))
vi.mock('../ipc/pty/register-handlers', () => ({ registerPtyHandlers: registerPtyHandlersMock }))
-vi.mock('../ipc/ssh', () => ({ registerSshHandlers: registerSshHandlersMock }))
+vi.mock('../ipc/ssh/ssh', () => ({ registerSshHandlers: registerSshHandlersMock }))
vi.mock('../ipc/pty-management', () => ({
registerDaemonManagementHandlers: registerDaemonManagementHandlersMock
}))
diff --git a/src/main/window/attach-main-window-services.ts b/src/main/window/attach-main-window-services.ts
index 89637c613354..1a10bee3391e 100644
--- a/src/main/window/attach-main-window-services.ts
+++ b/src/main/window/attach-main-window-services.ts
@@ -19,7 +19,7 @@ import type {
PrepareCodexSessionResume
} from '../ipc/pty/host-env/types'
import { registerDaemonManagementHandlers } from '../ipc/pty-management'
-import { registerSshHandlers } from '../ipc/ssh'
+import { registerSshHandlers } from '../ipc/ssh/ssh'
import { browserManager } from '../browser/browser-manager'
import { hasSystemMediaAccess, requestSystemMediaAccess } from '../browser/browser-media-access'
import type { OrcaRuntimeService, RuntimeWorktreeLifecycleEvent } from '../runtime/orca-runtime'
diff --git a/src/main/window/clipboard-agent-session-attachment-paste.test.ts b/src/main/window/clipboard-agent-session-attachment-paste.test.ts
index 952fc48a88b1..92af6461c3f6 100644
--- a/src/main/window/clipboard-agent-session-attachment-paste.test.ts
+++ b/src/main/window/clipboard-agent-session-attachment-paste.test.ts
@@ -18,7 +18,7 @@ vi.mock('electron', () => ({
ipcMain: { removeHandler: vi.fn(), handle: mocks.handle },
nativeImage: { createFromBuffer: vi.fn() }
}))
-vi.mock('../ipc/runtime-environment-transport-routing', () => ({
+vi.mock('../ipc/runtime-environments/runtime-environment-transport-routing', () => ({
callRuntimeEnvironment: mocks.callRuntimeEnvironment
}))
vi.mock('../../shared/runtime-environment-store', () => ({
diff --git a/src/main/window/clipboard-ipc-handlers.test.ts b/src/main/window/clipboard-ipc-handlers.test.ts
index 7c4d0a13f0bf..db354dc1a790 100644
--- a/src/main/window/clipboard-ipc-handlers.test.ts
+++ b/src/main/window/clipboard-ipc-handlers.test.ts
@@ -106,7 +106,7 @@ vi.mock('electron', () => ({
}
}))
-vi.mock('../ipc/runtime-environment-transport-routing', () => ({
+vi.mock('../ipc/runtime-environments/runtime-environment-transport-routing', () => ({
callRuntimeEnvironment: callRuntimeEnvironmentMock
}))
vi.mock('./dashboard-popout-window', () => ({ isDashboardPopoutRenderer: () => false }))
diff --git a/src/main/window/clipboard-runtime-image-upload.ts b/src/main/window/clipboard-runtime-image-upload.ts
index d4d4077466b8..1f6a94fc684c 100644
--- a/src/main/window/clipboard-runtime-image-upload.ts
+++ b/src/main/window/clipboard-runtime-image-upload.ts
@@ -1,5 +1,5 @@
import { assertClipboardImageByteLengthWithinLimit } from '../../shared/clipboard-image'
-import { callRuntimeEnvironment } from '../ipc/runtime-environment-transport-routing'
+import { callRuntimeEnvironment } from '../ipc/runtime-environments/runtime-environment-transport-routing'
const CLIPBOARD_IMAGE_UPLOAD_CHUNK_BASE64_CHARS = 512 * 1024
const CLIPBOARD_IMAGE_SINGLE_FRAME_FALLBACK_BASE64_CHARS = 256 * 1024
diff --git a/src/main/window/clipboard-runtime-owned-ssh-paste.test.ts b/src/main/window/clipboard-runtime-owned-ssh-paste.test.ts
index bd24a43fe174..5a08abd50bf7 100644
--- a/src/main/window/clipboard-runtime-owned-ssh-paste.test.ts
+++ b/src/main/window/clipboard-runtime-owned-ssh-paste.test.ts
@@ -45,7 +45,7 @@ vi.mock('../ipc/filesystem-auth', () => ({
PATH_ACCESS_DENIED_MESSAGE: 'denied',
resolveAuthorizedPath: vi.fn()
}))
-vi.mock('../ipc/runtime-environment-transport-routing', () => ({
+vi.mock('../ipc/runtime-environments/runtime-environment-transport-routing', () => ({
callRuntimeEnvironment: callRuntimeEnvironmentMock
}))
vi.mock('./dashboard-popout-window', () => ({ isDashboardPopoutRenderer: () => false }))
diff --git a/src/renderer/src/components/browser-pane/stream-remote/remote-browser-stream-lifecycle-test-harness.ts b/src/renderer/src/components/browser-pane/stream-remote/remote-browser-stream-lifecycle-test-harness.ts
index 9bfd2ae2bd5b..477a304c55ae 100644
--- a/src/renderer/src/components/browser-pane/stream-remote/remote-browser-stream-lifecycle-test-harness.ts
+++ b/src/renderer/src/components/browser-pane/stream-remote/remote-browser-stream-lifecycle-test-harness.ts
@@ -104,7 +104,7 @@ export function createHarness() {
await gate.wait
}
// Models the host closing the subscription and only then rejecting the request, which is what
- // src/main/ipc/runtime-environments.ts does on a stale pairing.
+ // src/main/ipc/runtime-environments/runtime-environments.ts does on a stale pairing.
if (closeBeforeNextSubscribeRejects) {
closeBeforeNextSubscribeRejects = false
callbacks.onClose?.()
diff --git a/src/renderer/src/components/browser-pane/stream-remote/remote-browser-stream-lifecycle.test.ts b/src/renderer/src/components/browser-pane/stream-remote/remote-browser-stream-lifecycle.test.ts
index 8f77bf93e503..95c83e11cef4 100644
--- a/src/renderer/src/components/browser-pane/stream-remote/remote-browser-stream-lifecycle.test.ts
+++ b/src/renderer/src/components/browser-pane/stream-remote/remote-browser-stream-lifecycle.test.ts
@@ -694,7 +694,7 @@ describe('RemoteBrowserStreamLifecycle stop announcements', () => {
// Two writers, one value — the shape every round of this review has found. The stream token is
// claimed before subscribe is awaited, so a close can arrive and arm a restart while the subscribe
// promise is still rejecting. The host does exactly this: it closes the subscription and only then
-// throws (src/main/ipc/runtime-environments.ts, stale pairing).
+// throws (src/main/ipc/runtime-environments/runtime-environments.ts, stale pairing).
describe('RemoteBrowserStreamLifecycle close racing a rejected subscribe', () => {
beforeEach(() => {
vi.useFakeTimers()
diff --git a/src/renderer/src/components/browser-pane/stream-remote/remote-browser-stream-lifecycle.ts b/src/renderer/src/components/browser-pane/stream-remote/remote-browser-stream-lifecycle.ts
index 8938ff2d3ba2..91af28a938d8 100644
--- a/src/renderer/src/components/browser-pane/stream-remote/remote-browser-stream-lifecycle.ts
+++ b/src/renderer/src/components/browser-pane/stream-remote/remote-browser-stream-lifecycle.ts
@@ -115,7 +115,7 @@ export class RemoteBrowserStreamLifecycle {
}
// Why this can be the loser of a race: the stream token is claimed before subscribe is
// awaited, so a close can arrive and arm a restart while this promise is still rejecting —
- // the host closes the subscription and only then throws (src/main/ipc/runtime-environments.ts
+ // the host closes the subscription and only then throws (src/main/ipc/runtime-environments/runtime-environments.ts
// 'pairing changed'). Publishing 'stopped' over an armed restart shows a manual control for
// one backoff step and then swaps it for a spinner. The armed restart is the newer owner.
if (this.restartScheduler.isScheduled) {
From e1b2d582736224bacf927fe9e4c054b12bf7d787 Mon Sep 17 00:00:00 2001
From: Neil <4138956+nwparker@users.noreply.github.com>
Date: Sun, 18 Oct 2026 08:40:12 -0700
Subject: [PATCH 03/15] refactor(ipc): import ipc helpers from their owning
modules, not re-export shims (#30369)
Deletes local-agent-install-dir-detection, notification-burst-cooldown, terminal-git-credential-guard
and tui-agent-detection-commands (pure re-export modules) and the re-export lines in seven more
ipc modules; importers and test mocks name the real modules.
---
.../managed-hook-detection-commands.ts | 2 +-
src/main/ipc/feedback-image-attachments.test.ts | 4 +++-
src/main/ipc/feedback-image-attachments.ts | 7 -------
src/main/ipc/feedback-request.ts | 2 --
src/main/ipc/feedback.test.ts | 6 ++----
src/main/ipc/feedback.ts | 17 +++++++----------
src/main/ipc/freebuff-detection.test.ts | 2 +-
.../ipc/local-agent-install-dir-detection.ts | 1 -
src/main/ipc/notification-burst-cooldown.ts | 1 -
src/main/ipc/parcel-watcher-process.ts | 11 -----------
.../parcel-watcher-root-path-rewrite.test.ts | 4 ++--
src/main/ipc/plugins.ts | 1 -
...flight-agent-detection-no-subprocess.test.ts | 4 ++--
...ending-data-drain-queue-differential.test.ts | 3 ++-
.../ipc/pty-pending-data-drain-queue.test.ts | 10 +++++-----
src/main/ipc/pty-pending-data-drain-queue.ts | 2 --
...ng-data-drain-scheduler-differential.test.ts | 10 +++++-----
src/main/ipc/pty/delivery/accounting.ts | 2 +-
src/main/ipc/pty/delivery/flush.ts | 2 +-
src/main/ipc/pty/delivery/pending.ts | 2 +-
src/main/ipc/pty/host-env/assembly.ts | 6 +++---
src/main/ipc/pty/host-env/opencode-config.ts | 3 ++-
src/main/ipc/pty/host-env/pi-agent.ts | 2 --
src/main/ipc/pty/session.ts | 3 ++-
.../ipc/qoder-desktop-execution-host.test.ts | 2 +-
src/main/ipc/runtime-watcher-process-pool.ts | 2 --
.../ipc/terminal-git-credential-guard.test.ts | 2 +-
src/main/ipc/terminal-git-credential-guard.ts | 4 ----
.../ipc/tui-agent-detection-commands.test.ts | 2 +-
src/main/ipc/tui-agent-detection-commands.ts | 1 -
...tree-git-common-watch-reconciliation.test.ts | 3 ++-
.../notification-delivery-service.ts | 2 +-
.../plugin-dev-watcher-unknown-identity.test.ts | 6 ++----
src/main/plugins/plugin-dev-watcher.test.ts | 12 ++++++------
src/main/plugins/plugin-dev-watcher.ts | 8 +++-----
.../preflight/agent-command-detection.test.ts | 2 +-
src/main/preflight/agent-command-detection.ts | 2 +-
src/main/preflight/agent-detection.ts | 2 +-
src/main/runtime/file-watcher-host.test.ts | 2 +-
src/main/runtime/file-watcher-host.ts | 6 +++---
40 files changed, 64 insertions(+), 101 deletions(-)
delete mode 100644 src/main/ipc/local-agent-install-dir-detection.ts
delete mode 100644 src/main/ipc/notification-burst-cooldown.ts
delete mode 100644 src/main/ipc/terminal-git-credential-guard.ts
delete mode 100644 src/main/ipc/tui-agent-detection-commands.ts
diff --git a/src/main/agent-hooks/managed-hook-detection-commands.ts b/src/main/agent-hooks/managed-hook-detection-commands.ts
index 0d3ee8280d59..be8fb74ea177 100644
--- a/src/main/agent-hooks/managed-hook-detection-commands.ts
+++ b/src/main/agent-hooks/managed-hook-detection-commands.ts
@@ -6,7 +6,7 @@ import {
import { MANAGED_AGENT_HOOK_TARGETS } from '../../shared/managed-agent-hook-targets'
import { normalizeDisabledTuiAgents } from '../../shared/tui-agent-selection'
import type { GlobalSettings } from '../../shared/global-settings-types'
-import type { TuiAgentDetectionCommand } from '../ipc/tui-agent-detection-commands'
+import type { TuiAgentDetectionCommand } from '../../shared/tui-agent-detection-commands'
import { parseClaudeCliVersion } from '../claude/claude-hook-event-versions'
export type ManagedHookDetectionSettings = Partial<
diff --git a/src/main/ipc/feedback-image-attachments.test.ts b/src/main/ipc/feedback-image-attachments.test.ts
index bacc97f68068..230cd1a50c00 100644
--- a/src/main/ipc/feedback-image-attachments.test.ts
+++ b/src/main/ipc/feedback-image-attachments.test.ts
@@ -2,7 +2,9 @@ import { describe, expect, it } from 'vitest'
import {
MAX_FEEDBACK_IMAGE_BYTES,
MAX_FEEDBACK_IMAGE_COUNT,
- MAX_FEEDBACK_IMAGE_TOTAL_BYTES,
+ MAX_FEEDBACK_IMAGE_TOTAL_BYTES
+} from '../../shared/feedback-image-limits'
+import {
appendFeedbackImagesToFormData,
feedbackImageFilename,
isSupportedFeedbackImageContentType,
diff --git a/src/main/ipc/feedback-image-attachments.ts b/src/main/ipc/feedback-image-attachments.ts
index 7f7435a16a37..d8d00ff1877f 100644
--- a/src/main/ipc/feedback-image-attachments.ts
+++ b/src/main/ipc/feedback-image-attachments.ts
@@ -15,13 +15,6 @@ const FEEDBACK_IMAGE_EXTENSIONS: Record = {
'image/gif': 'gif'
}
-export {
- MAX_FEEDBACK_IMAGE_BYTES,
- MAX_FEEDBACK_IMAGE_COUNT,
- MAX_FEEDBACK_IMAGE_TOTAL_BYTES
-} from '../../shared/feedback-image-limits'
-export type { FeedbackImageAttachment } from '../../shared/feedback-submit-contract'
-
export const MAX_FEEDBACK_IMAGE_RESPONSE_BYTES = 64 * 1024
export const FEEDBACK_IMAGE_FORM_FIELD = 'feedbackImage'
diff --git a/src/main/ipc/feedback-request.ts b/src/main/ipc/feedback-request.ts
index 9d95b2360f07..4bbb8c08cbf5 100644
--- a/src/main/ipc/feedback-request.ts
+++ b/src/main/ipc/feedback-request.ts
@@ -36,8 +36,6 @@ export type FeedbackSubmitBody = {
images?: FeedbackImageAttachment[]
}
-export type { FeedbackRequestFailure } from '../../shared/feedback-submit-contract'
-
export async function postFeedback(
url: string,
body: FeedbackSubmitBody,
diff --git a/src/main/ipc/feedback.test.ts b/src/main/ipc/feedback.test.ts
index 7feabb986076..58d60c50a049 100644
--- a/src/main/ipc/feedback.test.ts
+++ b/src/main/ipc/feedback.test.ts
@@ -16,10 +16,8 @@ vi.mock('electron', () => ({
net: { fetch: (...args: unknown[]) => fetchMock(...args) }
}))
-import {
- MAX_FEEDBACK_IMAGE_RESPONSE_BYTES,
- MAX_FEEDBACK_IMAGE_TOTAL_BYTES
-} from './feedback-image-attachments'
+import { MAX_FEEDBACK_IMAGE_RESPONSE_BYTES } from './feedback-image-attachments'
+import { MAX_FEEDBACK_IMAGE_TOTAL_BYTES } from '../../shared/feedback-image-limits'
import { registerFeedbackHandlers, submitFeedback } from './feedback'
function okResponse(): Response {
diff --git a/src/main/ipc/feedback.ts b/src/main/ipc/feedback.ts
index 0e138f339b90..b747751091a7 100644
--- a/src/main/ipc/feedback.ts
+++ b/src/main/ipc/feedback.ts
@@ -1,10 +1,12 @@
import os from 'node:os'
import { app, ipcMain } from 'electron'
-import {
- readFeedbackImagesDelivered,
- validateFeedbackImages,
- type FeedbackImageAttachment
-} from './feedback-image-attachments'
+import { readFeedbackImagesDelivered, validateFeedbackImages } from './feedback-image-attachments'
+import type {
+ FeedbackImageAttachment,
+ FeedbackRequestFailure,
+ FeedbackSubmitArgs,
+ FeedbackSubmitResult
+} from '../../shared/feedback-submit-contract'
import {
errorFailure,
FEEDBACK_API_URL,
@@ -15,11 +17,6 @@ import {
type FeedbackSubmissionType,
type FeedbackSubmitBody
} from './feedback-request'
-import type {
- FeedbackRequestFailure,
- FeedbackSubmitArgs,
- FeedbackSubmitResult
-} from '../../shared/feedback-submit-contract'
export type {
FeedbackDiagnosticBundleAttachment,
diff --git a/src/main/ipc/freebuff-detection.test.ts b/src/main/ipc/freebuff-detection.test.ts
index 6c74e6409b5f..2bc6d1cd7dcb 100644
--- a/src/main/ipc/freebuff-detection.test.ts
+++ b/src/main/ipc/freebuff-detection.test.ts
@@ -3,7 +3,7 @@ import {
getTuiAgentDetectionProbeCommands,
KNOWN_TUI_AGENT_DETECTION_COMMANDS,
resolveDetectedTuiAgentIds
-} from './tui-agent-detection-commands'
+} from '../../shared/tui-agent-detection-commands'
describe('Freebuff detection', () => {
it.each(['darwin', 'linux', 'win32', 'wsl'] as const)(
diff --git a/src/main/ipc/local-agent-install-dir-detection.ts b/src/main/ipc/local-agent-install-dir-detection.ts
deleted file mode 100644
index 7493affdb47e..000000000000
--- a/src/main/ipc/local-agent-install-dir-detection.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { detectCommandsInInstallDirs } from '../../shared/local-agent-install-dir-detection'
diff --git a/src/main/ipc/notification-burst-cooldown.ts b/src/main/ipc/notification-burst-cooldown.ts
deleted file mode 100644
index 91e879a7e473..000000000000
--- a/src/main/ipc/notification-burst-cooldown.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { reserveNotificationCooldown } from '../../shared/notification-burst-cooldown'
diff --git a/src/main/ipc/parcel-watcher-process.ts b/src/main/ipc/parcel-watcher-process.ts
index 74e2c3ffa694..303c68230bcf 100644
--- a/src/main/ipc/parcel-watcher-process.ts
+++ b/src/main/ipc/parcel-watcher-process.ts
@@ -9,17 +9,6 @@ import type {
} from './parcel-watcher-process-subscription'
import { RuntimeWatcherProcessPool } from './runtime-watcher-process-pool'
-export type {
- WatcherProcessCallback,
- WatcherProcessHooks,
- WatcherProcessSubscription
-} from './parcel-watcher-process-subscription'
-export type {
- WatcherProcessDeliveryOptions,
- WatcherProcessEvent,
- WatcherProcessSubscribeOptions
-} from './parcel-watcher-process-protocol'
-
const sharedWatcherProcessSupervisor = new WatcherProcessSupervisor()
// Why: healthy roots share one child; only fault quarantine scales to four,
// containing a failed shard without paying that RSS cost during normal use.
diff --git a/src/main/ipc/parcel-watcher-root-path-rewrite.test.ts b/src/main/ipc/parcel-watcher-root-path-rewrite.test.ts
index ed5cd02c977e..67f74faa363f 100644
--- a/src/main/ipc/parcel-watcher-root-path-rewrite.test.ts
+++ b/src/main/ipc/parcel-watcher-root-path-rewrite.test.ts
@@ -51,9 +51,9 @@ import {
resetRuntimeWatcherProcessForTest,
resetWatcherProcessForTest,
subscribeViaRuntimeWatcherProcess,
- subscribeViaWatcherProcess,
- type WatcherProcessEvent
+ subscribeViaWatcherProcess
} from './parcel-watcher-process'
+import type { WatcherProcessEvent } from './parcel-watcher-process-protocol'
describe('watcher-process root path rewrite', () => {
let root: AliasedWatcherRoot | null = null
diff --git a/src/main/ipc/plugins.ts b/src/main/ipc/plugins.ts
index eac8b09eaef0..95ab73556df9 100644
--- a/src/main/ipc/plugins.ts
+++ b/src/main/ipc/plugins.ts
@@ -69,7 +69,6 @@ const logsArgsSchema = z.object({ pluginKey: z.string().min(1) })
// Why re-exported: moved to ../plugins/plugin-client-list so the runtime RPC can reach
// it without ipcMain. Existing importers of this path keep working.
-export { listPluginsForClients } from '../plugins/plugin-client-list'
import { listPluginsForClients } from '../plugins/plugin-client-list'
export function canRemoveInstalledPlugin(
diff --git a/src/main/ipc/preflight-agent-detection-no-subprocess.test.ts b/src/main/ipc/preflight-agent-detection-no-subprocess.test.ts
index f95645041a90..ed72de1a8247 100644
--- a/src/main/ipc/preflight-agent-detection-no-subprocess.test.ts
+++ b/src/main/ipc/preflight-agent-detection-no-subprocess.test.ts
@@ -53,7 +53,7 @@ vi.mock('../azure-devops/client', () => ({
vi.mock('../gitea/client', () => ({ getGiteaAuthStatus: getGiteaAuthStatusMock }))
// Isolate the subprocess-spawn assertion from the fs-based install-dir fallback.
-vi.mock('./local-agent-install-dir-detection', () => ({
+vi.mock('../../shared/local-agent-install-dir-detection', () => ({
detectCommandsInInstallDirs: detectCommandsInInstallDirsMock
}))
@@ -67,7 +67,7 @@ import { _resetPreflightCache, detectInstalledAgents } from './preflight'
import {
getTuiAgentDetectionProbeCommands,
KNOWN_TUI_AGENT_DETECTION_COMMANDS
-} from './tui-agent-detection-commands'
+} from '../../shared/tui-agent-detection-commands'
describe('#9297: local agent detection spawns zero where/which subprocesses', () => {
const originalPlatform = process.platform
diff --git a/src/main/ipc/pty-pending-data-drain-queue-differential.test.ts b/src/main/ipc/pty-pending-data-drain-queue-differential.test.ts
index a36c0a24a5b5..6272e88c184b 100644
--- a/src/main/ipc/pty-pending-data-drain-queue-differential.test.ts
+++ b/src/main/ipc/pty-pending-data-drain-queue-differential.test.ts
@@ -1,5 +1,6 @@
import { describe, expect, it } from 'vitest'
-import { PtyPendingDataDrainQueue, type PendingPtyData } from './pty-pending-data-drain-queue'
+import { PtyPendingDataDrainQueue } from './pty-pending-data-drain-queue'
+import type { PendingPtyData } from './pty-pending-data-drain-contract'
const CHUNK_CHARS = 4
const MAX_WRITES = 2
diff --git a/src/main/ipc/pty-pending-data-drain-queue.test.ts b/src/main/ipc/pty-pending-data-drain-queue.test.ts
index c1773c64ff14..d59e6b51072e 100644
--- a/src/main/ipc/pty-pending-data-drain-queue.test.ts
+++ b/src/main/ipc/pty-pending-data-drain-queue.test.ts
@@ -1,9 +1,9 @@
import { describe, expect, it } from 'vitest'
-import {
- PtyPendingDataDrainQueue,
- type PendingPtyData,
- type PtyPendingDataDrainSelection
-} from './pty-pending-data-drain-queue'
+import { PtyPendingDataDrainQueue } from './pty-pending-data-drain-queue'
+import type {
+ PendingPtyData,
+ PtyPendingDataDrainSelection
+} from './pty-pending-data-drain-contract'
function pending(data: string): PendingPtyData {
return { data }
diff --git a/src/main/ipc/pty-pending-data-drain-queue.ts b/src/main/ipc/pty-pending-data-drain-queue.ts
index 378dc23de0d7..11f60444cf05 100644
--- a/src/main/ipc/pty-pending-data-drain-queue.ts
+++ b/src/main/ipc/pty-pending-data-drain-queue.ts
@@ -1,7 +1,5 @@
import type * as Contract from './pty-pending-data-drain-contract'
-export type * from './pty-pending-data-drain-contract'
-
type LinkedLaneName = Contract.PtyPendingDataDrainDisposition
type NodeLaneName = LinkedLaneName | 'none' | 'selected'
diff --git a/src/main/ipc/pty-pending-data-drain-scheduler-differential.test.ts b/src/main/ipc/pty-pending-data-drain-scheduler-differential.test.ts
index c8db5b24c853..faf4a1604e0a 100644
--- a/src/main/ipc/pty-pending-data-drain-scheduler-differential.test.ts
+++ b/src/main/ipc/pty-pending-data-drain-scheduler-differential.test.ts
@@ -1,9 +1,9 @@
import { describe, expect, it } from 'vitest'
-import {
- PtyPendingDataDrainQueue,
- type PendingPtyData,
- type PtyPendingDataDrainSelection
-} from './pty-pending-data-drain-queue'
+import { PtyPendingDataDrainQueue } from './pty-pending-data-drain-queue'
+import type {
+ PendingPtyData,
+ PtyPendingDataDrainSelection
+} from './pty-pending-data-drain-contract'
const CHUNK_CHARS = 4
const MAX_WRITES = 2
diff --git a/src/main/ipc/pty/delivery/accounting.ts b/src/main/ipc/pty/delivery/accounting.ts
index 703ccdc29dfc..54e900e441f8 100644
--- a/src/main/ipc/pty/delivery/accounting.ts
+++ b/src/main/ipc/pty/delivery/accounting.ts
@@ -12,7 +12,7 @@ import {
PTY_RENDERER_TOTAL_IN_FLIGHT_HIGH_WATER_CHARS
} from './constants'
import type { PtyIpcSession } from '../session'
-import type { PendingPtyData } from '../../pty-pending-data-drain-queue'
+import type { PendingPtyData } from '../../pty-pending-data-drain-contract'
export function getRendererInFlightCharsForPty(session: PtyIpcSession, id: string): number {
const accounting = session.rendererDeliveryAccountingByPty.get(id)
diff --git a/src/main/ipc/pty/delivery/flush.ts b/src/main/ipc/pty/delivery/flush.ts
index 8de4463bb353..6c8853440c60 100644
--- a/src/main/ipc/pty/delivery/flush.ts
+++ b/src/main/ipc/pty/delivery/flush.ts
@@ -2,7 +2,7 @@ import {
recordHiddenRendererPtyDataDrop,
shouldDropHiddenRendererPtyData
} from '../../pty-hidden-delivery-gate'
-import type { PendingPtyData } from '../../pty-pending-data-drain-queue'
+import type { PendingPtyData } from '../../pty-pending-data-drain-contract'
import { activeRendererPtys } from './visibility-state'
import {
PTY_BATCH_DRAIN_CONTINUE_MS,
diff --git a/src/main/ipc/pty/delivery/pending.ts b/src/main/ipc/pty/delivery/pending.ts
index a0ba6e8ea641..eb4b95dbd0a9 100644
--- a/src/main/ipc/pty/delivery/pending.ts
+++ b/src/main/ipc/pty/delivery/pending.ts
@@ -12,7 +12,7 @@ import { redactPtyIdForDiagnostics } from '../../../../shared/pty-delivery-diagn
import { recordCrashBreadcrumb } from '../../../crash-reporting/crash-breadcrumb-store'
import { terminalOutputBacklogCapChars } from '../../../../shared/terminal-scrollback-policy'
import { isHiddenPtyDeliveryGateEnabled } from '../../pty-hidden-delivery-gate'
-import type { PendingPtyData } from '../../pty-pending-data-drain-queue'
+import type { PendingPtyData } from '../../pty-pending-data-drain-contract'
import { DROPPED_QUERY_SALVAGE_MAX_CHARS } from './constants'
import type { PtyIpcSession } from '../session'
diff --git a/src/main/ipc/pty/host-env/assembly.ts b/src/main/ipc/pty/host-env/assembly.ts
index 25538cd8ad5b..62b576a5031e 100644
--- a/src/main/ipc/pty/host-env/assembly.ts
+++ b/src/main/ipc/pty/host-env/assembly.ts
@@ -4,7 +4,7 @@ import {
detectExplicitPiAgentKindFromCommand,
isPiCompatibleAgentType
} from '../../../../shared/pi-agent-kind'
-import { applyTerminalGitCredentialPromptGuard } from '../../terminal-git-credential-guard'
+import { applyTerminalGitCredentialPromptGuard } from '../../../../shared/terminal-git-credential-guard'
import { ensureOpenCodeStartupPromptForLaunch } from '../../../opencode/opencode-startup-prompt-installer'
import { mimoCodeHookService } from '../../../mimo/hook-service'
import { agentHookServer } from '../../../agent-hooks/server'
@@ -27,9 +27,9 @@ import {
isMimoLaunchCommand,
resolveMimocodeSourceHome,
resolvePiAgentSourceDir,
- resolveScopedPiAgentSourceDir,
- restoreOrStripOverlayEnv
+ resolveScopedPiAgentSourceDir
} from './pi-agent'
+import { restoreOrStripOverlayEnv } from '../../../../shared/agent-overlay-env'
import { AGENT_HOOK_RUNTIME_ENV_KEYS } from './spawn-env-keys'
import { applyManagedDataAccountEnvironment } from '../../../managed-data-accounts/launch-environment'
import { applyOpenCodeStatusPluginEnv, captureOpenCodeSourceConfig } from './opencode-config'
diff --git a/src/main/ipc/pty/host-env/opencode-config.ts b/src/main/ipc/pty/host-env/opencode-config.ts
index 74aa1e46625b..279470de4eee 100644
--- a/src/main/ipc/pty/host-env/opencode-config.ts
+++ b/src/main/ipc/pty/host-env/opencode-config.ts
@@ -3,7 +3,8 @@ import {
isOpenCodeLegacySharedConfigDir
} from '../../../opencode/legacy-shared-config-dir'
import { openCode2HookService, openCodeHookService } from '../../../opencode/hook-service'
-import { resolveOpenCodeSourceConfigDir, restoreOrStripOverlayEnv } from './pi-agent'
+import { resolveOpenCodeSourceConfigDir } from './pi-agent'
+import { restoreOrStripOverlayEnv } from '../../../../shared/agent-overlay-env'
import { selectOpenCodeHookAgent } from '../../../../shared/opencode-launch-command'
import { isTuiAgentEnabled } from '../../../../shared/tui-agent-selection'
import { resolveOpenCodeConfigDirectory } from '../../../../shared/opencode-config-directory'
diff --git a/src/main/ipc/pty/host-env/pi-agent.ts b/src/main/ipc/pty/host-env/pi-agent.ts
index f2945940a575..cdf489740ea4 100644
--- a/src/main/ipc/pty/host-env/pi-agent.ts
+++ b/src/main/ipc/pty/host-env/pi-agent.ts
@@ -151,8 +151,6 @@ export function getInheritedAgentSessionStampEnvKeysToDelete(
]
}
-export { restoreOrStripOverlayEnv } from '../../../../shared/agent-overlay-env'
-
export function isMimoLaunchCommand(launchCommand: string | undefined): boolean {
return getAgentLaunchExecutableName(launchCommand) === 'mimo'
}
diff --git a/src/main/ipc/pty/session.ts b/src/main/ipc/pty/session.ts
index 63d97259ce92..98a759b898e4 100644
--- a/src/main/ipc/pty/session.ts
+++ b/src/main/ipc/pty/session.ts
@@ -10,7 +10,8 @@ import type {
} from '../../../shared/pty-renderer-delivery-health'
import type { PtyRendererDeliveryDebugSnapshot } from './delivery/debug'
import { PtyProducerFlowController } from '../pty-producer-flow-control'
-import { PtyPendingDataDrainQueue, type PendingPtyData } from '../pty-pending-data-drain-queue'
+import { PtyPendingDataDrainQueue } from '../pty-pending-data-drain-queue'
+import type { PendingPtyData } from '../pty-pending-data-drain-contract'
import { activeRendererPtys } from './delivery/visibility-state'
import {
isHiddenPtyDeliveryGateEnabled,
diff --git a/src/main/ipc/qoder-desktop-execution-host.test.ts b/src/main/ipc/qoder-desktop-execution-host.test.ts
index a74622c362b8..395441de47c2 100644
--- a/src/main/ipc/qoder-desktop-execution-host.test.ts
+++ b/src/main/ipc/qoder-desktop-execution-host.test.ts
@@ -11,7 +11,7 @@ import { buildAgentResumeStartupPlan } from '../../shared/tui-agent-startup'
import type { PtySpawnIpcArgs } from './pty/ipc/spawn-types'
vi.mock('./preflight-command-exec', () => ({ isCommandOnPath: vi.fn() }))
-vi.mock('./local-agent-install-dir-detection', () => ({
+vi.mock('../../shared/local-agent-install-dir-detection', () => ({
detectCommandsInInstallDirs: () => new Set()
}))
vi.mock('./preflight-wsl-agent-detection', () => ({
diff --git a/src/main/ipc/runtime-watcher-process-pool.ts b/src/main/ipc/runtime-watcher-process-pool.ts
index 66957d4e7e8f..20fd52da7f52 100644
--- a/src/main/ipc/runtime-watcher-process-pool.ts
+++ b/src/main/ipc/runtime-watcher-process-pool.ts
@@ -20,8 +20,6 @@ import {
type RuntimeWatcherProcessPoolOptions
} from './runtime-watcher-pool-state'
-export type { RuntimeWatcherProcessPoolOptions } from './runtime-watcher-pool-state'
-
// Why: extra ~50 MiB processes are justified only when quarantine isolates a fault.
const DEFAULT_MAX_SHARED_SUPERVISORS = 1
const DEFAULT_MAX_QUARANTINE_SUPERVISORS = 4
diff --git a/src/main/ipc/terminal-git-credential-guard.test.ts b/src/main/ipc/terminal-git-credential-guard.test.ts
index bf1f7e1da051..fc5af9a9db08 100644
--- a/src/main/ipc/terminal-git-credential-guard.test.ts
+++ b/src/main/ipc/terminal-git-credential-guard.test.ts
@@ -2,7 +2,7 @@ import { describe, expect, it } from 'vitest'
import {
applyTerminalGitCredentialPromptGuard,
TERMINAL_GIT_CREDENTIAL_GUARD_POLICY_ENV
-} from './terminal-git-credential-guard'
+} from '../../shared/terminal-git-credential-guard'
function expectGuarded(env: Record): void {
expect(env.GIT_TERMINAL_PROMPT).toBe('0')
diff --git a/src/main/ipc/terminal-git-credential-guard.ts b/src/main/ipc/terminal-git-credential-guard.ts
deleted file mode 100644
index 0a4e45588c0d..000000000000
--- a/src/main/ipc/terminal-git-credential-guard.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export {
- applyTerminalGitCredentialPromptGuard,
- TERMINAL_GIT_CREDENTIAL_GUARD_POLICY_ENV
-} from '../../shared/terminal-git-credential-guard'
diff --git a/src/main/ipc/tui-agent-detection-commands.test.ts b/src/main/ipc/tui-agent-detection-commands.test.ts
index 4d1ca7790120..1f7f152efcd1 100644
--- a/src/main/ipc/tui-agent-detection-commands.test.ts
+++ b/src/main/ipc/tui-agent-detection-commands.test.ts
@@ -3,7 +3,7 @@ import {
getTuiAgentDetectionProbeCommands,
KNOWN_TUI_AGENT_DETECTION_COMMANDS,
resolveDetectedTuiAgentIds
-} from './tui-agent-detection-commands'
+} from '../../shared/tui-agent-detection-commands'
describe('tui agent detection commands', () => {
it.each(['darwin', 'linux', 'win32', 'wsl'] as const)(
diff --git a/src/main/ipc/tui-agent-detection-commands.ts b/src/main/ipc/tui-agent-detection-commands.ts
deleted file mode 100644
index 88d65c1fa34a..000000000000
--- a/src/main/ipc/tui-agent-detection-commands.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from '../../shared/tui-agent-detection-commands'
diff --git a/src/main/ipc/worktree-git-common-watch-reconciliation.test.ts b/src/main/ipc/worktree-git-common-watch-reconciliation.test.ts
index 464ecf828b5d..d71337cb0553 100644
--- a/src/main/ipc/worktree-git-common-watch-reconciliation.test.ts
+++ b/src/main/ipc/worktree-git-common-watch-reconciliation.test.ts
@@ -1,6 +1,7 @@
import { join, resolve } from 'node:path'
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
-import { subscribeViaWatcherProcess, type WatcherProcessCallback } from './parcel-watcher-process'
+import { subscribeViaWatcherProcess } from './parcel-watcher-process'
+import type { WatcherProcessCallback } from './parcel-watcher-process-subscription'
import { startGitCommonPolling } from './worktree-git-common-polling'
import { startGitCommonNarrowWatch } from './worktree-git-common-narrow-watch'
import { createGitCommonWatchReconciliation } from './worktree-git-common-watch-reconciliation'
diff --git a/src/main/notifications/notification-delivery-service.ts b/src/main/notifications/notification-delivery-service.ts
index 3150006aaa64..979f92f96b24 100644
--- a/src/main/notifications/notification-delivery-service.ts
+++ b/src/main/notifications/notification-delivery-service.ts
@@ -14,7 +14,7 @@ import type {
import type { OrcaRuntimeService } from '../runtime/orca-runtime'
import { buildNotificationOptions } from '../ipc/notification-options'
import { translateMain } from '../i18n/main-i18n'
-import { reserveNotificationCooldown } from '../ipc/notification-burst-cooldown'
+import { reserveNotificationCooldown } from '../../shared/notification-burst-cooldown'
export type NotificationDeliveryDependencies = {
readNotificationSettings: () => NotificationSettings
diff --git a/src/main/plugins/plugin-dev-watcher-unknown-identity.test.ts b/src/main/plugins/plugin-dev-watcher-unknown-identity.test.ts
index 416577b4cc8c..0883273b85a1 100644
--- a/src/main/plugins/plugin-dev-watcher-unknown-identity.test.ts
+++ b/src/main/plugins/plugin-dev-watcher-unknown-identity.test.ts
@@ -4,10 +4,8 @@ import { mkdir, rename, rm, stat, symlink } from 'node:fs/promises'
import type * as FsPromises from 'node:fs/promises'
import { join } from 'node:path'
import { afterEach, beforeEach, expect, it, vi } from 'vitest'
-import {
- subscribeViaWatcherProcess,
- type WatcherProcessCallback
-} from '../ipc/parcel-watcher-process'
+import { subscribeViaWatcherProcess } from '../ipc/parcel-watcher-process'
+import type { WatcherProcessCallback } from '../ipc/parcel-watcher-process-subscription'
import {
createAliasedWatcherRoot,
removeAliasedWatcherRoot,
diff --git a/src/main/plugins/plugin-dev-watcher.test.ts b/src/main/plugins/plugin-dev-watcher.test.ts
index ebc921604d3f..e90d3e87a436 100644
--- a/src/main/plugins/plugin-dev-watcher.test.ts
+++ b/src/main/plugins/plugin-dev-watcher.test.ts
@@ -4,12 +4,12 @@ import type * as Fs from 'node:fs'
import { mkdir, realpath, rename, rm, stat, symlink, writeFile } from 'node:fs/promises'
import type * as FsPromises from 'node:fs/promises'
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
-import {
- subscribeViaWatcherProcess,
- type WatcherProcessCallback,
- type WatcherProcessHooks,
- type WatcherProcessSubscribeOptions
-} from '../ipc/parcel-watcher-process'
+import { subscribeViaWatcherProcess } from '../ipc/parcel-watcher-process'
+import type {
+ WatcherProcessCallback,
+ WatcherProcessHooks
+} from '../ipc/parcel-watcher-process-subscription'
+import type { WatcherProcessSubscribeOptions } from '../ipc/parcel-watcher-process-protocol'
import {
createAliasedWatcherRoot as createNativeAliasedWatcherRoot,
removeAliasedWatcherRoot,
diff --git a/src/main/plugins/plugin-dev-watcher.ts b/src/main/plugins/plugin-dev-watcher.ts
index 4534bf490f50..6f1a3c322504 100644
--- a/src/main/plugins/plugin-dev-watcher.ts
+++ b/src/main/plugins/plugin-dev-watcher.ts
@@ -1,11 +1,9 @@
import { realpathSync, statSync, type BigIntStats } from 'node:fs'
import { realpath, stat } from 'node:fs/promises'
import { basename, dirname, resolve } from 'node:path'
-import {
- subscribeViaWatcherProcess,
- type WatcherProcessSubscribeOptions,
- type WatcherProcessSubscription
-} from '../ipc/parcel-watcher-process'
+import { subscribeViaWatcherProcess } from '../ipc/parcel-watcher-process'
+import type { WatcherProcessSubscribeOptions } from '../ipc/parcel-watcher-process-protocol'
+import type { WatcherProcessSubscription } from '../ipc/parcel-watcher-process-subscription'
import { resolveWatcherRootPaths } from '../ipc/watcher-event-root-path-rewrite'
import { watcherDirectoryIdentity } from '../ipc/watcher-directory-identity'
diff --git a/src/main/preflight/agent-command-detection.test.ts b/src/main/preflight/agent-command-detection.test.ts
index 550f78aa9cbb..821a34ede116 100644
--- a/src/main/preflight/agent-command-detection.test.ts
+++ b/src/main/preflight/agent-command-detection.test.ts
@@ -11,7 +11,7 @@ const { detectInstallDirs, guestMounts } = vi.hoisted(() => {
}
})
-vi.mock('../ipc/local-agent-install-dir-detection', () => ({
+vi.mock('../../shared/local-agent-install-dir-detection', () => ({
detectCommandsInInstallDirs: detectInstallDirs
}))
vi.mock('../ipc/preflight-command-exec', () => ({
diff --git a/src/main/preflight/agent-command-detection.ts b/src/main/preflight/agent-command-detection.ts
index bb1b7de45e9a..500d52921b6d 100644
--- a/src/main/preflight/agent-command-detection.ts
+++ b/src/main/preflight/agent-command-detection.ts
@@ -1,6 +1,6 @@
import { SshHostNotServedError } from '../providers/ssh-host-not-served-error'
import { detectWslCommandsOnPath } from '../ipc/preflight-wsl-agent-detection'
-import { detectCommandsInInstallDirs } from '../ipc/local-agent-install-dir-detection'
+import { detectCommandsInInstallDirs } from '../../shared/local-agent-install-dir-detection'
import {
getPreflightWslTarget,
type PreflightRuntimeContext
diff --git a/src/main/preflight/agent-detection.ts b/src/main/preflight/agent-detection.ts
index ac4b2a51e433..56730c6be9eb 100644
--- a/src/main/preflight/agent-detection.ts
+++ b/src/main/preflight/agent-detection.ts
@@ -38,7 +38,7 @@ import {
getTuiAgentDetectionProbeCommands,
KNOWN_TUI_AGENT_DETECTION_COMMANDS,
resolveDetectedTuiAgentIds
-} from '../ipc/tui-agent-detection-commands'
+} from '../../shared/tui-agent-detection-commands'
import { invalidateWslGuestEnvironment } from '../wsl/wsl-guest-environment'
import { prunePreflightWslCache } from '../preflight-wsl-cache'
import { detectAgentCommandsOnHost } from './agent-command-detection'
diff --git a/src/main/runtime/file-watcher-host.test.ts b/src/main/runtime/file-watcher-host.test.ts
index f924d86db04e..57ac22ec93e8 100644
--- a/src/main/runtime/file-watcher-host.test.ts
+++ b/src/main/runtime/file-watcher-host.test.ts
@@ -4,7 +4,7 @@ import type {
WatcherProcessCallback,
WatcherProcessHooks,
WatcherProcessSubscription
-} from '../ipc/parcel-watcher-process'
+} from '../ipc/parcel-watcher-process-subscription'
import { WatcherProcessFailure } from '../ipc/parcel-watcher-process-failure'
import {
WATCHER_IGNORE_DIRS,
diff --git a/src/main/runtime/file-watcher-host.ts b/src/main/runtime/file-watcher-host.ts
index e7f1d29e41de..97ef4f321581 100644
--- a/src/main/runtime/file-watcher-host.ts
+++ b/src/main/runtime/file-watcher-host.ts
@@ -2,10 +2,10 @@ import type { FsChangeEvent } from '../../shared/filesystem-entry-types'
import {
forgetRuntimeWatcherProcessRoot,
resetRuntimeWatcherProcessForTest,
- subscribeViaRuntimeWatcherProcess,
- type WatcherProcessEvent,
- type WatcherProcessSubscription
+ subscribeViaRuntimeWatcherProcess
} from '../ipc/parcel-watcher-process'
+import type { WatcherProcessEvent } from '../ipc/parcel-watcher-process-protocol'
+import type { WatcherProcessSubscription } from '../ipc/parcel-watcher-process-subscription'
import {
isWatcherProcessFailure,
type WatcherProcessFailure
From b1adb8915756122f7877d8b1e014dbf9b85a3dbc Mon Sep 17 00:00:00 2001
From: Neil <4138956+nwparker@users.noreply.github.com>
Date: Sun, 18 Oct 2026 09:14:07 -0700
Subject: [PATCH 04/15] refactor: import renderer runtime, shared
remote-runtime and orcad helpers from their owning modules (#30370)
Removes the re-export lines in runtime-rpc-result (hasRuntimeRpcErrorCode), sync-runtime-graph,
sync-key, the terminal orphan-recovery modules, orcad-idle-exit, remote-runtime-subscription-transport,
two orcad modules and the ssh-connection test harness; importers and test mocks name the real modules.
---
.../install/orcad-remote-launch.test.ts | 2 +-
.../install/orcad-remote-launch.ts | 2 +-
.../lifecycle/orcad-managed-wake.test.ts | 6 ++---
.../external-chromium-browser-process.ts | 1 -
src/main/orcad/orcad-browser-provider.ts | 6 ++---
...ad-managed-idle-exit-provider-race.test.ts | 2 +-
...anaged-idle-exit-retired-reconnect.test.ts | 2 +-
.../orcad/orcad-managed-idle-exit.test.ts | 4 +--
src/main/orcad/orcad-managed-idle-exit.ts | 7 ++----
src/main/orcad/orcad-secret-store.ts | 2 --
src/main/pty/managed-ssh-host-login-shell.ts | 2 +-
.../ssh/ssh-connection-auth-fallback.test.ts | 13 ++++------
.../ssh/ssh-connection-channel-error.test.ts | 7 ++++--
.../ssh/ssh-connection-channel-open.test.ts | 8 +++---
.../ssh/ssh-connection-direct-startup.test.ts | 4 ++-
.../ssh/ssh-connection-file-transfer.test.ts | 4 ++-
.../ssh/ssh-connection-github-probe.test.ts | 4 ++-
.../ssh-connection-gssapi-fallback.test.ts | 12 ++++-----
...h-connection-host-key-verification.test.ts | 7 ++++--
.../ssh-connection-manager-registry.test.ts | 6 +++--
...h-connection-manager-sign-in-reuse.test.ts | 8 +++---
...onnection-reconnect-handshake-loss.test.ts | 10 ++++----
.../ssh-connection-reconnect-ladder.test.ts | 16 +++++++-----
.../ssh-connection-system-transport.test.ts | 9 ++++---
src/main/ssh/ssh-connection-test-harness.ts | 13 ----------
.../ssh/ssh-connection-wake-retry.test.ts | 10 ++++----
src/main/ssh/ssh-connection.test.ts | 8 +++---
.../src/app-shell/use-runtime-graph-sync.ts | 4 ++-
.../automation-host-cache-error.ts | 2 +-
...gent-note-send-runtime-error-codes.test.ts | 3 ++-
...nt-hosted-browser-row-ephemerality.test.ts | 2 +-
...ient-hosted-browser-close-intent-replay.ts | 2 +-
.../mounted-terminal-tab-registry.test.ts | 2 +-
.../src/runtime/runtime-gitlab-api.ts | 2 +-
.../src/runtime/runtime-rpc-result.test.ts | 3 ++-
.../src/runtime/runtime-rpc-result.ts | 1 -
...graph-agent-status-projection-join.test.ts | 2 +-
...time-graph-agent-status-projection.test.ts | 2 +-
.../sync-runtime-graph-browser.test.ts | 4 +--
...c-runtime-graph-conversion-publish.test.ts | 2 +-
...ync-runtime-graph-editor-diff-tabs.test.ts | 2 +-
.../sync-runtime-graph-key-reuse.test.ts | 4 +--
...-runtime-graph-projection-hot-path.test.ts | 10 ++++----
...ync-runtime-graph-publication-cost.test.ts | 2 +-
.../sync-runtime-graph-scheduling.test.ts | 4 ++-
...sync-runtime-graph-terminal-layout.test.ts | 2 +-
...-graph-terminal-surface-projection.test.ts | 2 +-
...untime-graph-workspace-publication.test.ts | 2 +-
.../src/runtime/sync-runtime-graph.test.ts | 4 +--
.../src/runtime/sync-runtime-graph.ts | 25 -------------------
.../runtime/sync-runtime-graph/sync-key.ts | 15 +----------
.../web-runtime-browser-creation-failure.ts | 2 +-
.../runtime/web-runtime-browser-creation.ts | 3 ++-
.../web-runtime-session-tab-lifecycle.ts | 7 ++----
...ssion-terminal-orphan-recovery-adoption.ts | 8 +++---
...inal-orphan-recovery-prior-removal.test.ts | 6 ++---
...ession-terminal-orphan-recovery-surface.ts | 7 ------
.../web-session-terminal-orphan-recovery.ts | 12 ++++-----
...n-terminal-pending-handle-recovery.test.ts | 2 +-
src/renderer/src/store/repos/repo-removal.ts | 2 +-
.../slices/tabs-open-close-lifecycle.test.ts | 2 +-
.../listing/runtime-worktree-rpc-errors.ts | 3 ++-
src/shared/orcad-idle-exit.ts | 1 -
src/shared/remote-runtime-client.ts | 16 ++++++------
.../remote-runtime-subscription-transport.ts | 11 --------
65 files changed, 152 insertions(+), 208 deletions(-)
diff --git a/src/main/managed-server/install/orcad-remote-launch.test.ts b/src/main/managed-server/install/orcad-remote-launch.test.ts
index 3c8670bc6737..b914cf8d7710 100644
--- a/src/main/managed-server/install/orcad-remote-launch.test.ts
+++ b/src/main/managed-server/install/orcad-remote-launch.test.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from 'vitest'
-import { ORCAD_MANAGED_ACTIVATION_ROOT_ENV } from '../../../shared/orcad-idle-exit'
+import { ORCAD_MANAGED_ACTIVATION_ROOT_ENV } from '../../../shared/orcad-managed-launch-env'
import {
ORCAD_READINESS_FILENAME,
diff --git a/src/main/managed-server/install/orcad-remote-launch.ts b/src/main/managed-server/install/orcad-remote-launch.ts
index e20ffdbdfef0..42f6e8ccef85 100644
--- a/src/main/managed-server/install/orcad-remote-launch.ts
+++ b/src/main/managed-server/install/orcad-remote-launch.ts
@@ -46,9 +46,9 @@ import {
} from '../../ssh/orcad-launch-ssh-session'
import {
ORCAD_E2E_IDLE_TIMEOUT_ENV,
- ORCAD_MANAGED_ACTIVATION_ROOT_ENV,
readOrcadE2EIdleTimeoutMs
} from '../../../shared/orcad-idle-exit'
+import { ORCAD_MANAGED_ACTIVATION_ROOT_ENV } from '../../../shared/orcad-managed-launch-env'
export type OrcadLaunchSpec = {
remoteInstallDir: string
diff --git a/src/main/managed-server/lifecycle/orcad-managed-wake.test.ts b/src/main/managed-server/lifecycle/orcad-managed-wake.test.ts
index 6854a5dfea54..0d03f0aaa768 100644
--- a/src/main/managed-server/lifecycle/orcad-managed-wake.test.ts
+++ b/src/main/managed-server/lifecycle/orcad-managed-wake.test.ts
@@ -18,10 +18,8 @@ import { wakeStoppedManagedOrcad } from './orcad-managed-wake'
import { getRemoteHostPlatform } from '../../ssh/ssh-remote-platform'
import type { OrcadHostTransport } from '../../ssh/orcad-host-transport'
import { FakeOrcadHost, OLD } from '../activation/orcad-activation-host-test-harness'
-import {
- ORCAD_E2E_IDLE_TIMEOUT_ENV,
- ORCAD_MANAGED_ACTIVATION_ROOT_ENV
-} from '../../../shared/orcad-idle-exit'
+import { ORCAD_E2E_IDLE_TIMEOUT_ENV } from '../../../shared/orcad-idle-exit'
+import { ORCAD_MANAGED_ACTIVATION_ROOT_ENV } from '../../../shared/orcad-managed-launch-env'
let host = new FakeOrcadHost()
diff --git a/src/main/orcad/external-chromium-browser-process.ts b/src/main/orcad/external-chromium-browser-process.ts
index 63237a4ec81f..164e40314e78 100644
--- a/src/main/orcad/external-chromium-browser-process.ts
+++ b/src/main/orcad/external-chromium-browser-process.ts
@@ -6,7 +6,6 @@ import {
ExternalChromiumBrowserSession,
type ExternalChromiumLaunch
} from './external-chromium-browser-session'
-export type { ExternalChromiumLaunch } from './external-chromium-browser-session'
import { normalizeBrowserNavigationUrl } from '../../shared/browser-url'
import {
externalChromiumCommandArguments,
diff --git a/src/main/orcad/orcad-browser-provider.ts b/src/main/orcad/orcad-browser-provider.ts
index be2e846daa6d..4af331bf76db 100644
--- a/src/main/orcad/orcad-browser-provider.ts
+++ b/src/main/orcad/orcad-browser-provider.ts
@@ -7,10 +7,8 @@ import {
type RuntimeBrowserCommandsFactory,
type RuntimeBrowserUnavailableCause
} from '../runtime/runtime-browser-commands-factory'
-import {
- ExternalChromiumBrowserProcess,
- type ExternalChromiumLaunch
-} from './external-chromium-browser-process'
+import { ExternalChromiumBrowserProcess } from './external-chromium-browser-process'
+import type { ExternalChromiumLaunch } from './external-chromium-browser-session'
import { resolveOrcadAgentBrowserBinary } from './orcad-agent-browser-binary'
import { ElectronServeBrowserProcess } from './electron-serve-browser-process'
diff --git a/src/main/orcad/orcad-managed-idle-exit-provider-race.test.ts b/src/main/orcad/orcad-managed-idle-exit-provider-race.test.ts
index a1a964226857..4adf40bf9396 100644
--- a/src/main/orcad/orcad-managed-idle-exit-provider-race.test.ts
+++ b/src/main/orcad/orcad-managed-idle-exit-provider-race.test.ts
@@ -1,5 +1,5 @@
import { afterEach, beforeEach, expect, it, vi } from 'vitest'
-import { ORCAD_MANAGED_ACTIVATION_ROOT_ENV } from '../../shared/orcad-idle-exit'
+import { ORCAD_MANAGED_ACTIVATION_ROOT_ENV } from '../../shared/orcad-managed-launch-env'
import { bindOrcadIdleShutdown, beginOrcadIdleExit } from './orcad-managed-idle-exit-host'
import { installOrcadManagedIdleExit } from './orcad-managed-idle-exit'
import type * as ManagedIdleExit from './orcad-managed-idle-exit'
diff --git a/src/main/orcad/orcad-managed-idle-exit-retired-reconnect.test.ts b/src/main/orcad/orcad-managed-idle-exit-retired-reconnect.test.ts
index 56820cd3ded1..4882e0d50347 100644
--- a/src/main/orcad/orcad-managed-idle-exit-retired-reconnect.test.ts
+++ b/src/main/orcad/orcad-managed-idle-exit-retired-reconnect.test.ts
@@ -1,7 +1,7 @@
import { beforeEach, expect, it, vi } from 'vitest'
import { tmpdir } from 'node:os'
import { setAppEnvironment } from '../../shared/app-environment'
-import { ORCAD_MANAGED_ACTIVATION_ROOT_ENV } from '../../shared/orcad-idle-exit'
+import { ORCAD_MANAGED_ACTIVATION_ROOT_ENV } from '../../shared/orcad-managed-launch-env'
import { createAdapter } from '../daemon/daemon-pty-router-test-fixture'
import { DaemonPtyRouter } from '../daemon/daemon-pty-router'
import { installDaemonProvider, replaceDaemonProvider } from '../daemon/daemon-provider-state'
diff --git a/src/main/orcad/orcad-managed-idle-exit.test.ts b/src/main/orcad/orcad-managed-idle-exit.test.ts
index 3092f2c13119..3c14ece85f43 100644
--- a/src/main/orcad/orcad-managed-idle-exit.test.ts
+++ b/src/main/orcad/orcad-managed-idle-exit.test.ts
@@ -10,9 +10,9 @@ import {
} from './orcad-managed-idle-exit'
import {
ORCAD_E2E_IDLE_TIMEOUT_ENV,
- ORCAD_IDLE_EXIT_TIMEOUT_MS,
- ORCAD_MANAGED_ACTIVATION_ROOT_ENV
+ ORCAD_IDLE_EXIT_TIMEOUT_MS
} from '../../shared/orcad-idle-exit'
+import { ORCAD_MANAGED_ACTIVATION_ROOT_ENV } from '../../shared/orcad-managed-launch-env'
const config = { timeoutMs: 1_000, activationRoot: '/home/u/.orca-remote/.fence' }
diff --git a/src/main/orcad/orcad-managed-idle-exit.ts b/src/main/orcad/orcad-managed-idle-exit.ts
index 0963e0ad44ae..e993a370c74a 100644
--- a/src/main/orcad/orcad-managed-idle-exit.ts
+++ b/src/main/orcad/orcad-managed-idle-exit.ts
@@ -10,11 +10,8 @@ import { join } from 'node:path'
import { RELAY_INSTALL_LOCK_NAME } from '../../shared/relay-install-lock-name'
import { hasErrorCode } from '../daemon/daemon-process-inspection'
import type { RuntimeRpcClientActivity } from '../runtime/runtime-rpc/runtime-rpc-shutdown'
-import {
- ORCAD_MANAGED_ACTIVATION_ROOT_ENV,
- ORCAD_IDLE_EXIT_TIMEOUT_MS,
- readOrcadE2EIdleTimeoutMs
-} from '../../shared/orcad-idle-exit'
+import { ORCAD_MANAGED_ACTIVATION_ROOT_ENV } from '../../shared/orcad-managed-launch-env'
+import { ORCAD_IDLE_EXIT_TIMEOUT_MS, readOrcadE2EIdleTimeoutMs } from '../../shared/orcad-idle-exit'
import {
OrcadIdleExitMonitor,
type OrcadIdleExitEvidence,
diff --git a/src/main/orcad/orcad-secret-store.ts b/src/main/orcad/orcad-secret-store.ts
index a8e4ee5eea6c..91cca03d867b 100644
--- a/src/main/orcad/orcad-secret-store.ts
+++ b/src/main/orcad/orcad-secret-store.ts
@@ -16,8 +16,6 @@ import {
} from './orcad-secret-key-resolution'
import { openOrcadSecret, sealOrcadSecret } from './orcad-secret-sealing'
-export type { OrcadSecretStorePrepareOptions } from './orcad-secret-key-resolution'
-
export type OrcadSecretStore = SecretStore & {
/** Resolves whether sealing works now, i.e. the key loaded. */
prepare(options: OrcadSecretStorePrepareOptions): Promise
diff --git a/src/main/pty/managed-ssh-host-login-shell.ts b/src/main/pty/managed-ssh-host-login-shell.ts
index 98d4957af7c3..982498e157b5 100644
--- a/src/main/pty/managed-ssh-host-login-shell.ts
+++ b/src/main/pty/managed-ssh-host-login-shell.ts
@@ -1,6 +1,6 @@
import { existsSync } from 'node:fs'
import { win32 as pathWin32 } from 'node:path'
-import { ORCAD_MANAGED_ACTIVATION_ROOT_ENV } from '../../shared/orcad-idle-exit'
+import { ORCAD_MANAGED_ACTIVATION_ROOT_ENV } from '../../shared/orcad-managed-launch-env'
import { readOpenSshDefaultShell } from '../../shared/openssh-default-shell'
/**
diff --git a/src/main/ssh/ssh-connection-auth-fallback.test.ts b/src/main/ssh/ssh-connection-auth-fallback.test.ts
index ffccecf5f26d..7575dcf1cc98 100644
--- a/src/main/ssh/ssh-connection-auth-fallback.test.ts
+++ b/src/main/ssh/ssh-connection-auth-fallback.test.ts
@@ -3,13 +3,8 @@ import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
import { utils } from 'ssh2'
-import {
- clientInstances,
- emitSshEvent,
- nextSshClientCreation,
- resetSshConnectionMocks,
- ssh2Mock
-} from './ssh-connection-test-harness'
+import { clientInstances, emitSshEvent, ssh2Mock } from './__tests__/ssh-connection-test-client'
+import { nextSshClientCreation, resetSshConnectionMocks } from './ssh-connection-test-harness'
import {
createCallbacks,
createTarget,
@@ -18,7 +13,9 @@ import {
import { SshConnection } from './ssh-connection'
import { resolveWithSshG } from './config/ssh-g-config-resolution'
-vi.mock('ssh2', async () => (await import('./ssh-connection-test-harness')).createSsh2Module())
+vi.mock('ssh2', async () =>
+ (await import('./__tests__/ssh-connection-test-client')).createSsh2Module()
+)
vi.mock('./system-transport/system-ssh-binary', async () =>
(await import('./ssh-connection-test-harness')).createSystemSshBinaryModule()
)
diff --git a/src/main/ssh/ssh-connection-channel-error.test.ts b/src/main/ssh/ssh-connection-channel-error.test.ts
index 717c60119445..cad64969e57a 100644
--- a/src/main/ssh/ssh-connection-channel-error.test.ts
+++ b/src/main/ssh/ssh-connection-channel-error.test.ts
@@ -2,10 +2,13 @@ import { EventEmitter } from 'node:events'
import { afterEach, beforeEach, expect, it, vi } from 'vitest'
import { SshConnection } from './ssh-connection'
import { createCallbacks, createTarget } from './ssh-connection-test-fixtures'
-import { resetSshConnectionMocks, ssh2Mock } from './ssh-connection-test-harness'
+import { resetSshConnectionMocks } from './ssh-connection-test-harness'
+import { ssh2Mock } from './__tests__/ssh-connection-test-client'
import * as sshClientMock from './__tests__/ssh-connection-test-client'
-vi.mock('ssh2', async () => (await import('./ssh-connection-test-harness')).createSsh2Module())
+vi.mock('ssh2', async () =>
+ (await import('./__tests__/ssh-connection-test-client')).createSsh2Module()
+)
vi.mock('./system-transport/system-ssh-binary', async () =>
(await import('./ssh-connection-test-harness')).createSystemSshBinaryModule()
)
diff --git a/src/main/ssh/ssh-connection-channel-open.test.ts b/src/main/ssh/ssh-connection-channel-open.test.ts
index 999dd9744e96..510d07b71bbb 100644
--- a/src/main/ssh/ssh-connection-channel-open.test.ts
+++ b/src/main/ssh/ssh-connection-channel-open.test.ts
@@ -4,13 +4,15 @@ import {
clientInstances,
pendingExecCallback,
pendingSftpCallback,
- resetSshConnectionMocks,
ssh2Mock
-} from './ssh-connection-test-harness'
+} from './__tests__/ssh-connection-test-client'
+import { resetSshConnectionMocks } from './ssh-connection-test-harness'
import { createCallbacks, createTarget } from './ssh-connection-test-fixtures'
import { SshConnection } from './ssh-connection'
-vi.mock('ssh2', async () => (await import('./ssh-connection-test-harness')).createSsh2Module())
+vi.mock('ssh2', async () =>
+ (await import('./__tests__/ssh-connection-test-client')).createSsh2Module()
+)
vi.mock('./system-transport/system-ssh-binary', async () =>
(await import('./ssh-connection-test-harness')).createSystemSshBinaryModule()
)
diff --git a/src/main/ssh/ssh-connection-direct-startup.test.ts b/src/main/ssh/ssh-connection-direct-startup.test.ts
index 761184083e88..8421e7b98d16 100644
--- a/src/main/ssh/ssh-connection-direct-startup.test.ts
+++ b/src/main/ssh/ssh-connection-direct-startup.test.ts
@@ -6,7 +6,9 @@ import type { createSystemCommandChannel } from './ssh-connection-test-fixtures'
import { SshConnection } from './ssh-connection'
import { resolveWithSshG } from './config/ssh-g-config-resolution'
-vi.mock('ssh2', async () => (await import('./ssh-connection-test-harness')).createSsh2Module())
+vi.mock('ssh2', async () =>
+ (await import('./__tests__/ssh-connection-test-client')).createSsh2Module()
+)
vi.mock('./system-transport/system-ssh-binary', async () =>
(await import('./ssh-connection-test-harness')).createSystemSshBinaryModule()
)
diff --git a/src/main/ssh/ssh-connection-file-transfer.test.ts b/src/main/ssh/ssh-connection-file-transfer.test.ts
index 48a43b733014..14168ca8c900 100644
--- a/src/main/ssh/ssh-connection-file-transfer.test.ts
+++ b/src/main/ssh/ssh-connection-file-transfer.test.ts
@@ -14,7 +14,9 @@ import {
} from './system-transport/system-ssh-file-transfer'
import { getRemoteHostPlatform } from './ssh-remote-platform'
-vi.mock('ssh2', async () => (await import('./ssh-connection-test-harness')).createSsh2Module())
+vi.mock('ssh2', async () =>
+ (await import('./__tests__/ssh-connection-test-client')).createSsh2Module()
+)
vi.mock('./system-transport/system-ssh-binary', async () =>
(await import('./ssh-connection-test-harness')).createSystemSshBinaryModule()
)
diff --git a/src/main/ssh/ssh-connection-github-probe.test.ts b/src/main/ssh/ssh-connection-github-probe.test.ts
index 43519f474d5d..06054e0c86ec 100644
--- a/src/main/ssh/ssh-connection-github-probe.test.ts
+++ b/src/main/ssh/ssh-connection-github-probe.test.ts
@@ -9,7 +9,9 @@ import {
import { SshConnection } from './ssh-connection'
import { resolveWithSshG } from './config/ssh-g-config-resolution'
-vi.mock('ssh2', async () => (await import('./ssh-connection-test-harness')).createSsh2Module())
+vi.mock('ssh2', async () =>
+ (await import('./__tests__/ssh-connection-test-client')).createSsh2Module()
+)
vi.mock('./system-transport/system-ssh-binary', async () =>
(await import('./ssh-connection-test-harness')).createSystemSshBinaryModule()
)
diff --git a/src/main/ssh/ssh-connection-gssapi-fallback.test.ts b/src/main/ssh/ssh-connection-gssapi-fallback.test.ts
index 46ad95b91457..0efe8924f7c2 100644
--- a/src/main/ssh/ssh-connection-gssapi-fallback.test.ts
+++ b/src/main/ssh/ssh-connection-gssapi-fallback.test.ts
@@ -3,12 +3,8 @@ import { EventEmitter } from 'node:events'
import { mkdtempSync, rmSync, writeFileSync } from 'node:fs'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
-import {
- clientInstances,
- resetSshConnectionMocks,
- spawnSystemSshCommandMock,
- ssh2Mock
-} from './ssh-connection-test-harness'
+import { clientInstances, ssh2Mock } from './__tests__/ssh-connection-test-client'
+import { resetSshConnectionMocks, spawnSystemSshCommandMock } from './ssh-connection-test-harness'
import {
createCallbacks,
createFailingSystemCommandChannel,
@@ -19,7 +15,9 @@ import {
import { SshConnection } from './ssh-connection'
import { resolveWithSshG } from './config/ssh-g-config-resolution'
-vi.mock('ssh2', async () => (await import('./ssh-connection-test-harness')).createSsh2Module())
+vi.mock('ssh2', async () =>
+ (await import('./__tests__/ssh-connection-test-client')).createSsh2Module()
+)
vi.mock('./system-transport/system-ssh-binary', async () =>
(await import('./ssh-connection-test-harness')).createSystemSshBinaryModule()
)
diff --git a/src/main/ssh/ssh-connection-host-key-verification.test.ts b/src/main/ssh/ssh-connection-host-key-verification.test.ts
index 1e862f68b9b8..242b40bf8685 100644
--- a/src/main/ssh/ssh-connection-host-key-verification.test.ts
+++ b/src/main/ssh/ssh-connection-host-key-verification.test.ts
@@ -2,11 +2,14 @@ import { describe, expect, it, vi, beforeEach } from 'vitest'
import { chmodSync, mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
-import { connectAttempts, resetSshConnectionMocks, ssh2Mock } from './ssh-connection-test-harness'
+import { connectAttempts, ssh2Mock } from './__tests__/ssh-connection-test-client'
+import { resetSshConnectionMocks } from './ssh-connection-test-harness'
import { createCallbacks, createTarget } from './ssh-connection-test-fixtures'
import { SshConnection } from './ssh-connection'
-vi.mock('ssh2', async () => (await import('./ssh-connection-test-harness')).createSsh2Module())
+vi.mock('ssh2', async () =>
+ (await import('./__tests__/ssh-connection-test-client')).createSsh2Module()
+)
vi.mock('./system-transport/system-ssh-binary', async () =>
(await import('./ssh-connection-test-harness')).createSystemSshBinaryModule()
)
diff --git a/src/main/ssh/ssh-connection-manager-registry.test.ts b/src/main/ssh/ssh-connection-manager-registry.test.ts
index 215e0f874199..c43cd52859e9 100644
--- a/src/main/ssh/ssh-connection-manager-registry.test.ts
+++ b/src/main/ssh/ssh-connection-manager-registry.test.ts
@@ -1,9 +1,11 @@
import { describe, expect, it, vi, beforeEach } from 'vitest'
-import { resetSsh2ClientState } from './ssh-connection-test-harness'
+import { resetSsh2ClientState } from './__tests__/ssh-connection-test-client'
import { createCallbacks, createTarget } from './ssh-connection-test-fixtures'
import { SshConnectionManager } from './ssh-connection-manager'
-vi.mock('ssh2', async () => (await import('./ssh-connection-test-harness')).createSsh2Module())
+vi.mock('ssh2', async () =>
+ (await import('./__tests__/ssh-connection-test-client')).createSsh2Module()
+)
vi.mock('./system-transport/system-ssh-binary', async () =>
(await import('./ssh-connection-test-harness')).createSystemSshBinaryModule()
)
diff --git a/src/main/ssh/ssh-connection-manager-sign-in-reuse.test.ts b/src/main/ssh/ssh-connection-manager-sign-in-reuse.test.ts
index 8614611ace35..ea3d5453a7d6 100644
--- a/src/main/ssh/ssh-connection-manager-sign-in-reuse.test.ts
+++ b/src/main/ssh/ssh-connection-manager-sign-in-reuse.test.ts
@@ -3,9 +3,9 @@ import {
clientInstances,
emitSshEvent,
eventHandlers,
- resetSshConnectionMocks,
ssh2Mock
-} from './ssh-connection-test-harness'
+} from './__tests__/ssh-connection-test-client'
+import { resetSshConnectionMocks } from './ssh-connection-test-harness'
import { createCallbacks, createTarget } from './ssh-connection-test-fixtures'
import { SshConnectionManager } from './ssh-connection-manager'
import {
@@ -13,7 +13,9 @@ import {
resetSshCredentialDeclinesForTests
} from './ssh-credential-decline'
-vi.mock('ssh2', async () => (await import('./ssh-connection-test-harness')).createSsh2Module())
+vi.mock('ssh2', async () =>
+ (await import('./__tests__/ssh-connection-test-client')).createSsh2Module()
+)
vi.mock('./system-transport/system-ssh-binary', async () =>
(await import('./ssh-connection-test-harness')).createSystemSshBinaryModule()
)
diff --git a/src/main/ssh/ssh-connection-reconnect-handshake-loss.test.ts b/src/main/ssh/ssh-connection-reconnect-handshake-loss.test.ts
index 8118b0d91f63..86feb5d2139e 100644
--- a/src/main/ssh/ssh-connection-reconnect-handshake-loss.test.ts
+++ b/src/main/ssh/ssh-connection-reconnect-handshake-loss.test.ts
@@ -1,17 +1,17 @@
import { describe, expect, it, vi, beforeEach, afterEach } from 'vitest'
import {
advanceToNextSshClient,
- clientInstances,
connectWithFakeTimers,
- emitSshEvent,
- resetSshConnectionMocks,
- ssh2Mock
+ resetSshConnectionMocks
} from './ssh-connection-test-harness'
+import { clientInstances, emitSshEvent, ssh2Mock } from './__tests__/ssh-connection-test-client'
import { createCallbacks, createTarget } from './ssh-connection-test-fixtures'
import { SshConnection } from './ssh-connection'
import { CONNECT_TIMEOUT_MS, RECONNECT_BACKOFF_MS } from './ssh-connection-utils'
-vi.mock('ssh2', async () => (await import('./ssh-connection-test-harness')).createSsh2Module())
+vi.mock('ssh2', async () =>
+ (await import('./__tests__/ssh-connection-test-client')).createSsh2Module()
+)
vi.mock('./system-transport/system-ssh-binary', async () =>
(await import('./ssh-connection-test-harness')).createSystemSshBinaryModule()
)
diff --git a/src/main/ssh/ssh-connection-reconnect-ladder.test.ts b/src/main/ssh/ssh-connection-reconnect-ladder.test.ts
index 81bfb324fd8d..d5360b91d8ad 100644
--- a/src/main/ssh/ssh-connection-reconnect-ladder.test.ts
+++ b/src/main/ssh/ssh-connection-reconnect-ladder.test.ts
@@ -1,15 +1,17 @@
import { describe, expect, it, vi, beforeEach } from 'vitest'
import {
advanceToNextSshClient,
- clientInstances,
- connectAttempts,
connectWithFakeTimers,
- emitSshEvent,
nextSshClientCreation,
resetSshConnectionMocks,
- spawnSystemSshCommandMock,
- ssh2Mock
+ spawnSystemSshCommandMock
} from './ssh-connection-test-harness'
+import {
+ clientInstances,
+ connectAttempts,
+ emitSshEvent,
+ ssh2Mock
+} from './__tests__/ssh-connection-test-client'
import {
createCallbacks,
createHangingSystemCommandChannel,
@@ -21,7 +23,9 @@ import { resolveWithSshG } from './config/ssh-g-config-resolution'
import { CONNECT_TIMEOUT_MS, RECONNECT_BACKOFF_MS } from './ssh-connection-utils'
import { MIN_SSH_RELAY_GRACE_PERIOD_SECONDS } from '../../shared/ssh-types'
-vi.mock('ssh2', async () => (await import('./ssh-connection-test-harness')).createSsh2Module())
+vi.mock('ssh2', async () =>
+ (await import('./__tests__/ssh-connection-test-client')).createSsh2Module()
+)
vi.mock('./system-transport/system-ssh-binary', async () =>
(await import('./ssh-connection-test-harness')).createSystemSshBinaryModule()
)
diff --git a/src/main/ssh/ssh-connection-system-transport.test.ts b/src/main/ssh/ssh-connection-system-transport.test.ts
index b8c1f3e370ba..12513928f8f5 100644
--- a/src/main/ssh/ssh-connection-system-transport.test.ts
+++ b/src/main/ssh/ssh-connection-system-transport.test.ts
@@ -2,14 +2,13 @@ import { describe, expect, it, vi, beforeEach } from 'vitest'
import { mkdtempSync, rmSync, writeFileSync } from 'node:fs'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
+import { clientInstances, ssh2Mock } from './__tests__/ssh-connection-test-client'
import {
- clientInstances,
findSystemSshMock,
getOrcaControlSocketPathMock,
removeControlSocketPathMock,
resetSshConnectionMocks,
- spawnSystemSshCommandMock,
- ssh2Mock
+ spawnSystemSshCommandMock
} from './ssh-connection-test-harness'
import {
createCallbacks,
@@ -30,7 +29,9 @@ import {
createOpenSshPublicKeyFixture
} from './ssh-security-key-identity.test-fixture'
-vi.mock('ssh2', async () => (await import('./ssh-connection-test-harness')).createSsh2Module())
+vi.mock('ssh2', async () =>
+ (await import('./__tests__/ssh-connection-test-client')).createSsh2Module()
+)
vi.mock('./system-transport/system-ssh-binary', async () =>
(await import('./ssh-connection-test-harness')).createSystemSshBinaryModule()
)
diff --git a/src/main/ssh/ssh-connection-test-harness.ts b/src/main/ssh/ssh-connection-test-harness.ts
index 633dbb5b57bb..617c6ea2fd0c 100644
--- a/src/main/ssh/ssh-connection-test-harness.ts
+++ b/src/main/ssh/ssh-connection-test-harness.ts
@@ -11,19 +11,6 @@ import type * as SystemSshFileBinaryTransfer from './system-transport/system-ssh
import type * as SystemSshFileTransfer from './system-transport/system-ssh-file-transfer'
import type * as SshGConfigResolution from './config/ssh-g-config-resolution'
import { resetSsh2ClientState, ssh2Mock } from './__tests__/ssh-connection-test-client'
-export {
- clientInstances,
- connectAttempts,
- createSsh2Module,
- emitSshEvent,
- eventHandlers,
- pendingExecCallback,
- pendingSftpCallback,
- resetSsh2ClientState,
- ssh2Mock,
- VALID_ED25519_HOST_KEY
-} from './__tests__/ssh-connection-test-client'
-export type { MockSshClient, Ssh2ModuleMock } from './__tests__/ssh-connection-test-client'
export type SystemSshBinaryModuleMock = { findSystemSsh: typeof findSystemSshMock }
diff --git a/src/main/ssh/ssh-connection-wake-retry.test.ts b/src/main/ssh/ssh-connection-wake-retry.test.ts
index d431fd9c7d1f..2acb23cd6df5 100644
--- a/src/main/ssh/ssh-connection-wake-retry.test.ts
+++ b/src/main/ssh/ssh-connection-wake-retry.test.ts
@@ -1,14 +1,12 @@
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
import {
advanceToNextSshClient,
- clientInstances,
connectWithFakeTimers,
- emitSshEvent,
nextSshClientCreation,
resetSshConnectionMocks,
- spawnSystemSshCommandMock,
- ssh2Mock
+ spawnSystemSshCommandMock
} from './ssh-connection-test-harness'
+import { clientInstances, emitSshEvent, ssh2Mock } from './__tests__/ssh-connection-test-client'
import {
createCallbacks,
createHangingSystemCommandChannel,
@@ -21,7 +19,9 @@ import { SshConnectionManager } from './ssh-connection-manager'
import { RECONNECT_BACKOFF_MS } from './ssh-connection-utils'
import { recordSshUserDisconnected, resetSshUserDisconnectsForTests } from './ssh-user-disconnect'
-vi.mock('ssh2', async () => (await import('./ssh-connection-test-harness')).createSsh2Module())
+vi.mock('ssh2', async () =>
+ (await import('./__tests__/ssh-connection-test-client')).createSsh2Module()
+)
vi.mock('./system-transport/system-ssh-binary', async () =>
(await import('./ssh-connection-test-harness')).createSystemSshBinaryModule()
)
diff --git a/src/main/ssh/ssh-connection.test.ts b/src/main/ssh/ssh-connection.test.ts
index 41c2d6cf03b0..0a89f4efc21f 100644
--- a/src/main/ssh/ssh-connection.test.ts
+++ b/src/main/ssh/ssh-connection.test.ts
@@ -4,14 +4,16 @@ import {
createSsh2Module,
emitSshEvent,
eventHandlers,
- resetSshConnectionMocks,
VALID_ED25519_HOST_KEY,
ssh2Mock
-} from './ssh-connection-test-harness'
+} from './__tests__/ssh-connection-test-client'
+import { resetSshConnectionMocks } from './ssh-connection-test-harness'
import { createCallbacks, createTarget } from './ssh-connection-test-fixtures'
import { SshConnection } from './ssh-connection'
-vi.mock('ssh2', async () => (await import('./ssh-connection-test-harness')).createSsh2Module())
+vi.mock('ssh2', async () =>
+ (await import('./__tests__/ssh-connection-test-client')).createSsh2Module()
+)
vi.mock('./system-transport/system-ssh-binary', async () =>
(await import('./ssh-connection-test-harness')).createSystemSshBinaryModule()
)
diff --git a/src/renderer/src/app-shell/use-runtime-graph-sync.ts b/src/renderer/src/app-shell/use-runtime-graph-sync.ts
index 8ee1b8f67be4..f4aab50b1b99 100644
--- a/src/renderer/src/app-shell/use-runtime-graph-sync.ts
+++ b/src/renderer/src/app-shell/use-runtime-graph-sync.ts
@@ -3,7 +3,9 @@ import { getSystemPrefersDarkSnapshot } from '../components/terminal-pane/use-sy
import {
canSkipRuntimeMobileSessionSyncKeyBuild,
getRuntimeMobileSessionSyncKey,
- runtimeMobileSessionSyncKeysEqual,
+ runtimeMobileSessionSyncKeysEqual
+} from '../runtime/sync-runtime-graph/sync-key'
+import {
scheduleRuntimeGraphSync,
setRuntimeGraphStoreStateGetter,
setRuntimeGraphSyncEnabled
diff --git a/src/renderer/src/components/automations/automation-host-cache-error.ts b/src/renderer/src/components/automations/automation-host-cache-error.ts
index 14017cb12457..7dc57c9aa4bf 100644
--- a/src/renderer/src/components/automations/automation-host-cache-error.ts
+++ b/src/renderer/src/components/automations/automation-host-cache-error.ts
@@ -7,7 +7,7 @@
* retry budget, while an unreachable or slow host must.
*/
-import { hasRuntimeRpcErrorCode } from '@/runtime/runtime-rpc-result'
+import { hasRuntimeRpcErrorCode } from '../../../../shared/runtime-rpc-error-code'
import {
AUTOMATION_OWNER_CONFLICT_CODES,
stripAutomationOwnerConflictCode
diff --git a/src/renderer/src/lib/active-agent-note-send-runtime-error-codes.test.ts b/src/renderer/src/lib/active-agent-note-send-runtime-error-codes.test.ts
index 939c5ce13a3b..6c81ef45d8ae 100644
--- a/src/renderer/src/lib/active-agent-note-send-runtime-error-codes.test.ts
+++ b/src/renderer/src/lib/active-agent-note-send-runtime-error-codes.test.ts
@@ -1,5 +1,6 @@
import { describe, expect, it } from 'vitest'
-import { hasRuntimeRpcErrorCode, RuntimeRpcCallError } from '@/runtime/runtime-rpc-result'
+import { hasRuntimeRpcErrorCode } from '../../../shared/runtime-rpc-error-code'
+import { RuntimeRpcCallError } from '@/runtime/runtime-rpc-result'
import {
isRuntimeTerminalNotWritable,
isRuntimeTerminalUnavailable,
diff --git a/src/renderer/src/lib/pane-manager/client-hosted-browser-row-ephemerality.test.ts b/src/renderer/src/lib/pane-manager/client-hosted-browser-row-ephemerality.test.ts
index 41bf031ec79e..f0fd7ebf76ff 100644
--- a/src/renderer/src/lib/pane-manager/client-hosted-browser-row-ephemerality.test.ts
+++ b/src/renderer/src/lib/pane-manager/client-hosted-browser-row-ephemerality.test.ts
@@ -11,7 +11,7 @@ import { afterEach, beforeEach, describe, expect, it } from 'vitest'
import { useAppStore, type AppState } from '@/store'
import { buildWorkspaceSessionPayload } from '../workspace-session'
import { buildWorkspaceSessionPatch } from '../workspace-session-patch'
-import { buildMobileSessionTabSnapshots } from '../../runtime/sync-runtime-graph'
+import { buildMobileSessionTabSnapshots } from '../../runtime/sync-runtime-graph/mobile-session-snapshots'
import {
applyClientHostedBrowserRows,
getClientHostedBrowserRows,
diff --git a/src/renderer/src/runtime/client-hosted-browser-close-intent-replay.ts b/src/renderer/src/runtime/client-hosted-browser-close-intent-replay.ts
index 129b9964538e..1e8d8687f319 100644
--- a/src/renderer/src/runtime/client-hosted-browser-close-intent-replay.ts
+++ b/src/renderer/src/runtime/client-hosted-browser-close-intent-replay.ts
@@ -1,5 +1,5 @@
import { callRuntimeRpc } from './runtime-rpc-client'
-import { hasRuntimeRpcErrorCode } from './runtime-rpc-result'
+import { hasRuntimeRpcErrorCode } from '../../../shared/runtime-rpc-error-code'
import {
listClientHostedBrowserCloseIntents,
type ClientHostedBrowserCloseIntentsByEnvironment
diff --git a/src/renderer/src/runtime/mounted-terminal-tab-registry.test.ts b/src/renderer/src/runtime/mounted-terminal-tab-registry.test.ts
index 22ed65a58dad..aa9c42e6cc8b 100644
--- a/src/renderer/src/runtime/mounted-terminal-tab-registry.test.ts
+++ b/src/renderer/src/runtime/mounted-terminal-tab-registry.test.ts
@@ -1,6 +1,6 @@
// @vitest-environment happy-dom
import { describe, expect, it, vi } from 'vitest'
-import { buildMobileSessionTabSnapshots } from './sync-runtime-graph'
+import { buildMobileSessionTabSnapshots } from './sync-runtime-graph/mobile-session-snapshots'
import {
focusRuntimeTerminalSurface,
hasRegisteredRuntimeTerminalTab,
diff --git a/src/renderer/src/runtime/runtime-gitlab-api.ts b/src/renderer/src/runtime/runtime-gitlab-api.ts
index 75d5dd8a1dec..c2c22e99a384 100644
--- a/src/renderer/src/runtime/runtime-gitlab-api.ts
+++ b/src/renderer/src/runtime/runtime-gitlab-api.ts
@@ -9,7 +9,7 @@ import {
type WebGitLabRuntimeMethod
} from '@/web/preload-api/web-gitlab-routes'
import { mapRepoPathArg } from './runtime-repo-selector-params'
-import { hasRuntimeRpcErrorCode } from './runtime-rpc-result'
+import { hasRuntimeRpcErrorCode } from '../../../shared/runtime-rpc-error-code'
export type GitLabApi = NonNullable
diff --git a/src/renderer/src/runtime/runtime-rpc-result.test.ts b/src/renderer/src/runtime/runtime-rpc-result.test.ts
index f63cb1fb7b0f..dcddc99f6fa0 100644
--- a/src/renderer/src/runtime/runtime-rpc-result.test.ts
+++ b/src/renderer/src/runtime/runtime-rpc-result.test.ts
@@ -1,5 +1,6 @@
import { describe, expect, it } from 'vitest'
-import { hasRuntimeRpcErrorCode, RuntimeRpcCallError } from './runtime-rpc-result'
+import { hasRuntimeRpcErrorCode } from '../../../shared/runtime-rpc-error-code'
+import { RuntimeRpcCallError } from './runtime-rpc-result'
describe('hasRuntimeRpcErrorCode', () => {
it('matches structured runtime failures through wrapped causes', () => {
diff --git a/src/renderer/src/runtime/runtime-rpc-result.ts b/src/renderer/src/runtime/runtime-rpc-result.ts
index 7ac1f36256b7..c362ae476713 100644
--- a/src/renderer/src/runtime/runtime-rpc-result.ts
+++ b/src/renderer/src/runtime/runtime-rpc-result.ts
@@ -1,7 +1,6 @@
import type { RuntimeRpcFailure, RuntimeRpcResponse } from '../../../shared/runtime-rpc-envelope'
// Why: the CLI reads the same flattened tokens, so the matcher lives in shared and both clients use one copy.
-export { hasRuntimeRpcErrorCode } from '../../../shared/runtime-rpc-error-code'
export class RuntimeRpcCallError extends Error {
readonly code: string
diff --git a/src/renderer/src/runtime/sync-runtime-graph-agent-status-projection-join.test.ts b/src/renderer/src/runtime/sync-runtime-graph-agent-status-projection-join.test.ts
index 590d0cd9c672..00d5c3de9051 100644
--- a/src/renderer/src/runtime/sync-runtime-graph-agent-status-projection-join.test.ts
+++ b/src/renderer/src/runtime/sync-runtime-graph-agent-status-projection-join.test.ts
@@ -3,7 +3,7 @@ import type { AppState } from '@/store/types'
import {
buildRuntimeMobileAgentStatusProjectionForTests,
resetRuntimeMobileAgentStatusProjectionCacheForTests
-} from './sync-runtime-graph'
+} from './sync-runtime-graph/agent-status-projection'
function makeEntry(index: number, overrides: Record = {}): never {
return {
diff --git a/src/renderer/src/runtime/sync-runtime-graph-agent-status-projection.test.ts b/src/renderer/src/runtime/sync-runtime-graph-agent-status-projection.test.ts
index b78bb3175851..2963d7d061aa 100644
--- a/src/renderer/src/runtime/sync-runtime-graph-agent-status-projection.test.ts
+++ b/src/renderer/src/runtime/sync-runtime-graph-agent-status-projection.test.ts
@@ -4,7 +4,7 @@ import {
AGENT_STATUS_SYNC_UPDATED_AT_BUCKET_MS_FOR_TESTS,
buildRuntimeMobileAgentStatusProjectionForTests,
resetRuntimeMobileAgentStatusProjectionCacheForTests
-} from './sync-runtime-graph'
+} from './sync-runtime-graph/agent-status-projection'
// Reference: the pre-change whole-array serialization, kept verbatim apart from the sort, which
// is now a code-unit compare — the projection is only ever `===`-compared, never displayed, so it
diff --git a/src/renderer/src/runtime/sync-runtime-graph-browser.test.ts b/src/renderer/src/runtime/sync-runtime-graph-browser.test.ts
index 4042e70c5250..adf3b47d07f4 100644
--- a/src/renderer/src/runtime/sync-runtime-graph-browser.test.ts
+++ b/src/renderer/src/runtime/sync-runtime-graph-browser.test.ts
@@ -1,9 +1,9 @@
import { describe, expect, it } from 'vitest'
+import { buildMobileSessionTabSnapshots } from './sync-runtime-graph/mobile-session-snapshots'
import {
- buildMobileSessionTabSnapshots,
getRuntimeMobileSessionSyncKey,
runtimeMobileSessionSyncKeysEqual
-} from './sync-runtime-graph'
+} from './sync-runtime-graph/sync-key'
import type { AppState } from '../store/types'
function makeState(overrides: Partial = {}): AppState {
diff --git a/src/renderer/src/runtime/sync-runtime-graph-conversion-publish.test.ts b/src/renderer/src/runtime/sync-runtime-graph-conversion-publish.test.ts
index dd29d9a0e024..e16a12392c3e 100644
--- a/src/renderer/src/runtime/sync-runtime-graph-conversion-publish.test.ts
+++ b/src/renderer/src/runtime/sync-runtime-graph-conversion-publish.test.ts
@@ -1,6 +1,6 @@
import { describe, expect, it, vi } from 'vitest'
import type * as AgentStatusModule from '../lib/agent-status'
-import { buildMobileSessionTabSnapshots } from './sync-runtime-graph'
+import { buildMobileSessionTabSnapshots } from './sync-runtime-graph/mobile-session-snapshots'
import { createTestStore, makeWorktree } from '../store/slices/store-test-helpers'
vi.mock('@/lib/doc-preview-grants', () => ({
diff --git a/src/renderer/src/runtime/sync-runtime-graph-editor-diff-tabs.test.ts b/src/renderer/src/runtime/sync-runtime-graph-editor-diff-tabs.test.ts
index 04718354efbc..b606e6fdde3b 100644
--- a/src/renderer/src/runtime/sync-runtime-graph-editor-diff-tabs.test.ts
+++ b/src/renderer/src/runtime/sync-runtime-graph-editor-diff-tabs.test.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from 'vitest'
-import { buildMobileSessionTabSnapshots } from './sync-runtime-graph'
+import { buildMobileSessionTabSnapshots } from './sync-runtime-graph/mobile-session-snapshots'
import { makeState } from './sync-runtime-graph-test-harness'
import type { AppState } from '../store/types'
diff --git a/src/renderer/src/runtime/sync-runtime-graph-key-reuse.test.ts b/src/renderer/src/runtime/sync-runtime-graph-key-reuse.test.ts
index 2f895784d173..b12f4b4fbe3d 100644
--- a/src/renderer/src/runtime/sync-runtime-graph-key-reuse.test.ts
+++ b/src/renderer/src/runtime/sync-runtime-graph-key-reuse.test.ts
@@ -1,9 +1,9 @@
import { afterEach, describe, expect, it, vi } from 'vitest'
+import { buildMobileSessionTabSnapshots } from './sync-runtime-graph/mobile-session-snapshots'
import {
- buildMobileSessionTabSnapshots,
getRuntimeMobileSessionSyncKey,
runtimeMobileSessionSyncKeysEqual
-} from './sync-runtime-graph'
+} from './sync-runtime-graph/sync-key'
import type { AppState } from '../store/types'
function makeState(overrides: Partial = {}): AppState {
diff --git a/src/renderer/src/runtime/sync-runtime-graph-projection-hot-path.test.ts b/src/renderer/src/runtime/sync-runtime-graph-projection-hot-path.test.ts
index a2ab6485ae7e..2a13fbee05f0 100644
--- a/src/renderer/src/runtime/sync-runtime-graph-projection-hot-path.test.ts
+++ b/src/renderer/src/runtime/sync-runtime-graph-projection-hot-path.test.ts
@@ -22,12 +22,12 @@ const { stableHashString } = await import('./sync-runtime-graph/editor-draft-has
const {
AGENT_STATUS_SYNC_UPDATED_AT_BUCKET_MS_FOR_TESTS: AGENT_STATUS_SYNC_UPDATED_AT_BUCKET_MS,
buildRuntimeMobileAgentStatusProjectionForTests,
- getRuntimeMobileSessionSyncKey,
- resetRuntimeMobileAgentStatusProjectionCacheForTests,
- resetRuntimeMobileSyncProjectionCachesForTests,
- runtimeMobileSessionSyncKeysEqual
-} = await import('./sync-runtime-graph')
+ resetRuntimeMobileAgentStatusProjectionCacheForTests
+} = await import('./sync-runtime-graph/agent-status-projection')
+const { getRuntimeMobileSessionSyncKey, runtimeMobileSessionSyncKeysEqual } =
+ await import('./sync-runtime-graph/sync-key')
const {
+ resetRuntimeMobileSyncProjectionCachesForTests,
buildRuntimeMobileBrowserProjection,
buildRuntimeMobileEditorDraftsProjection,
buildRuntimeMobileOpenFilesProjection
diff --git a/src/renderer/src/runtime/sync-runtime-graph-publication-cost.test.ts b/src/renderer/src/runtime/sync-runtime-graph-publication-cost.test.ts
index 8fedea6a5bde..322b27f7d4d7 100644
--- a/src/renderer/src/runtime/sync-runtime-graph-publication-cost.test.ts
+++ b/src/renderer/src/runtime/sync-runtime-graph-publication-cost.test.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from 'vitest'
-import { buildMobileSessionTabSnapshots } from './sync-runtime-graph'
+import { buildMobileSessionTabSnapshots } from './sync-runtime-graph/mobile-session-snapshots'
import { registerRuntimeTerminalTab } from './mounted-terminal-tab-registry'
import type { AppState } from '../store/types'
diff --git a/src/renderer/src/runtime/sync-runtime-graph-scheduling.test.ts b/src/renderer/src/runtime/sync-runtime-graph-scheduling.test.ts
index 25705c6c5bb2..d12d56d7fe45 100644
--- a/src/renderer/src/runtime/sync-runtime-graph-scheduling.test.ts
+++ b/src/renderer/src/runtime/sync-runtime-graph-scheduling.test.ts
@@ -1,7 +1,9 @@
import { afterEach, describe, expect, it, vi } from 'vitest'
import {
getRuntimeMobileSessionSyncKey,
- runtimeMobileSessionSyncKeysEqual,
+ runtimeMobileSessionSyncKeysEqual
+} from './sync-runtime-graph/sync-key'
+import {
scheduleRuntimeGraphSync,
setRuntimeGraphStoreStateGetter,
setRuntimeGraphSyncEnabled
diff --git a/src/renderer/src/runtime/sync-runtime-graph-terminal-layout.test.ts b/src/renderer/src/runtime/sync-runtime-graph-terminal-layout.test.ts
index dbfe8f75bc3c..7846374fd623 100644
--- a/src/renderer/src/runtime/sync-runtime-graph-terminal-layout.test.ts
+++ b/src/renderer/src/runtime/sync-runtime-graph-terminal-layout.test.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from 'vitest'
-import { buildMobileSessionTabSnapshots } from './sync-runtime-graph'
+import { buildMobileSessionTabSnapshots } from './sync-runtime-graph/mobile-session-snapshots'
import type { AppState } from '../store/types'
function makeState(overrides: Partial = {}): AppState {
diff --git a/src/renderer/src/runtime/sync-runtime-graph-terminal-surface-projection.test.ts b/src/renderer/src/runtime/sync-runtime-graph-terminal-surface-projection.test.ts
index c7497366beb3..00dd69cbd98a 100644
--- a/src/renderer/src/runtime/sync-runtime-graph-terminal-surface-projection.test.ts
+++ b/src/renderer/src/runtime/sync-runtime-graph-terminal-surface-projection.test.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from 'vitest'
-import { buildMobileSessionTabSnapshots } from './sync-runtime-graph'
+import { buildMobileSessionTabSnapshots } from './sync-runtime-graph/mobile-session-snapshots'
import { registerRuntimeTerminalTab } from './mounted-terminal-tab-registry'
import { makeAgentStatusEntry, makeState } from './sync-runtime-graph-test-harness'
import { getDefaultSettings } from '../../../shared/constants'
diff --git a/src/renderer/src/runtime/sync-runtime-graph-workspace-publication.test.ts b/src/renderer/src/runtime/sync-runtime-graph-workspace-publication.test.ts
index f99bbb8ec787..b095f67b26af 100644
--- a/src/renderer/src/runtime/sync-runtime-graph-workspace-publication.test.ts
+++ b/src/renderer/src/runtime/sync-runtime-graph-workspace-publication.test.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from 'vitest'
-import { buildMobileSessionTabSnapshots } from './sync-runtime-graph'
+import { buildMobileSessionTabSnapshots } from './sync-runtime-graph/mobile-session-snapshots'
import { makeState } from './sync-runtime-graph-test-harness'
import type { AppState } from '../store/types'
diff --git a/src/renderer/src/runtime/sync-runtime-graph.test.ts b/src/renderer/src/runtime/sync-runtime-graph.test.ts
index 43da98340d3e..89041a31bdd5 100644
--- a/src/renderer/src/runtime/sync-runtime-graph.test.ts
+++ b/src/renderer/src/runtime/sync-runtime-graph.test.ts
@@ -1,10 +1,10 @@
import { describe, expect, it } from 'vitest'
import {
canSkipRuntimeMobileSessionSyncKeyBuild,
- buildRuntimeMobileAgentStatusProjectionForTests,
getRuntimeMobileSessionSyncKey,
runtimeMobileSessionSyncKeysEqual
-} from './sync-runtime-graph'
+} from './sync-runtime-graph/sync-key'
+import { buildRuntimeMobileAgentStatusProjectionForTests } from './sync-runtime-graph/agent-status-projection'
import { makeAgentStatusEntry, makeState } from './sync-runtime-graph-test-harness'
import { getDefaultSettings } from '../../../shared/constants'
import type { AppState } from '../store/types'
diff --git a/src/renderer/src/runtime/sync-runtime-graph.ts b/src/renderer/src/runtime/sync-runtime-graph.ts
index 12a4e75df854..103f1d4202bb 100644
--- a/src/renderer/src/runtime/sync-runtime-graph.ts
+++ b/src/renderer/src/runtime/sync-runtime-graph.ts
@@ -5,32 +5,7 @@ import {
} from './sync-runtime-graph/graph-publication'
import { graphState, RUNTIME_GRAPH_SYNC_COALESCE_MS } from './sync-runtime-graph/graph-state'
import { subscribeMountedTerminalTabChanges } from './mounted-terminal-tab-registry'
-import {
- AGENT_STATUS_SYNC_UPDATED_AT_BUCKET_MS_FOR_TESTS,
- buildRuntimeMobileAgentStatusProjectionForTests,
- resetRuntimeMobileAgentStatusProjectionCacheForTests
-} from './sync-runtime-graph/agent-status-projection'
-import {
- canSkipRuntimeMobileSessionSyncKeyBuild,
- getRuntimeMobileSessionSyncKey,
- runtimeMobileSessionSyncKeysEqual
-} from './sync-runtime-graph/sync-key'
-import { buildMobileSessionTabSnapshots } from './sync-runtime-graph/mobile-session-snapshots'
-import { resetRuntimeMobileSyncProjectionCachesForTests } from './sync-runtime-graph/sync-projections'
import { measureTerminalGroupGridSizes } from './sync-runtime-graph/terminal-group-grid-sizes'
-
-export type { RuntimeMobileSessionSyncKey } from './sync-runtime-graph/types'
-export {
- AGENT_STATUS_SYNC_UPDATED_AT_BUCKET_MS_FOR_TESTS,
- buildRuntimeMobileAgentStatusProjectionForTests,
- resetRuntimeMobileAgentStatusProjectionCacheForTests,
- resetRuntimeMobileSyncProjectionCachesForTests,
- canSkipRuntimeMobileSessionSyncKeyBuild,
- getRuntimeMobileSessionSyncKey,
- runtimeMobileSessionSyncKeysEqual,
- buildMobileSessionTabSnapshots
-}
-
export function setRuntimeGraphStoreStateGetter(getter: (() => AppState) | null): void {
graphState.getStoreState = getter
}
diff --git a/src/renderer/src/runtime/sync-runtime-graph/sync-key.ts b/src/renderer/src/runtime/sync-runtime-graph/sync-key.ts
index 5eac69789cf7..d3678eae1f0a 100644
--- a/src/renderer/src/runtime/sync-runtime-graph/sync-key.ts
+++ b/src/renderer/src/runtime/sync-runtime-graph/sync-key.ts
@@ -7,12 +7,7 @@ import {
EMPTY_BROWSER_TABS_BY_WORKTREE,
EMPTY_LAYOUT_BY_WORKTREE
} from './graph-state'
-import {
- buildRuntimeMobileAgentStatusProjection,
- buildRuntimeMobileAgentStatusProjectionForTests,
- resetRuntimeMobileAgentStatusProjectionCacheForTests,
- AGENT_STATUS_SYNC_UPDATED_AT_BUCKET_MS_FOR_TESTS
-} from './agent-status-projection'
+import { buildRuntimeMobileAgentStatusProjection } from './agent-status-projection'
import {
buildRuntimeMobileBrowserProjection,
buildRuntimeMobileEditorDraftsProjection,
@@ -23,14 +18,6 @@ import {
} from './sync-projections'
import { resolveMobileTerminalTheme } from './mobile-terminal-theme'
import type { RuntimeMobileSessionSyncKey } from './types'
-
-export {
- AGENT_STATUS_SYNC_UPDATED_AT_BUCKET_MS_FOR_TESTS,
- buildRuntimeMobileAgentStatusProjectionForTests,
- resetRuntimeMobileAgentStatusProjectionCacheForTests
-}
-export type { RuntimeMobileSessionSyncKey } from './types'
-
function getTerminalThemeSystemPrefersDark(
state: Pick,
systemPrefersDark: boolean | null | undefined
diff --git a/src/renderer/src/runtime/web-runtime-browser-creation-failure.ts b/src/renderer/src/runtime/web-runtime-browser-creation-failure.ts
index 0b52148ab50a..eddd0a5a9a6d 100644
--- a/src/renderer/src/runtime/web-runtime-browser-creation-failure.ts
+++ b/src/renderer/src/runtime/web-runtime-browser-creation-failure.ts
@@ -1,5 +1,5 @@
import { useAppStore } from '../store'
-import { hasRuntimeRpcErrorCode } from './runtime-rpc-result'
+import { hasRuntimeRpcErrorCode } from '../../../shared/runtime-rpc-error-code'
import { clearWebSessionFocusIntentIfMatches } from './web-session-focus-intent'
import {
claimWebSessionBrowserPlacementGroupCleanup,
diff --git a/src/renderer/src/runtime/web-runtime-browser-creation.ts b/src/renderer/src/runtime/web-runtime-browser-creation.ts
index 57c60aa64094..d0b1e5225289 100644
--- a/src/renderer/src/runtime/web-runtime-browser-creation.ts
+++ b/src/renderer/src/runtime/web-runtime-browser-creation.ts
@@ -3,7 +3,8 @@ import type { RuntimeRpcResponse } from '../../../shared/runtime-rpc-envelope'
import type { BrowserTabCreateResult } from '../../../shared/runtime-types'
import { translate } from '../i18n/i18n'
import { useAppStore } from '../store'
-import { hasRuntimeRpcErrorCode, unwrapRuntimeRpcResult } from './runtime-rpc-result'
+import { hasRuntimeRpcErrorCode } from '../../../shared/runtime-rpc-error-code'
+import { unwrapRuntimeRpcResult } from './runtime-rpc-result'
import { toRuntimeWorktreeSelector } from './runtime-worktree-selector'
import { hasMaterializedWebRuntimeBrowserPage } from './web-runtime-browser-materialization'
import { waitForWebRuntimeBrowserPageMaterialization } from './web-runtime-browser-materialization-wait'
diff --git a/src/renderer/src/runtime/web-runtime-session-tab-lifecycle.ts b/src/renderer/src/runtime/web-runtime-session-tab-lifecycle.ts
index 814befad1c3a..22cc9bfd846b 100644
--- a/src/renderer/src/runtime/web-runtime-session-tab-lifecycle.ts
+++ b/src/renderer/src/runtime/web-runtime-session-tab-lifecycle.ts
@@ -4,11 +4,8 @@ import type {
RuntimeSessionTabCloseReason
} from '../../../shared/runtime-types'
import { useAppStore } from '../store'
-import {
- hasRuntimeRpcErrorCode,
- RuntimeRpcCallError,
- unwrapRuntimeRpcResult
-} from './runtime-rpc-result'
+import { hasRuntimeRpcErrorCode } from '../../../shared/runtime-rpc-error-code'
+import { RuntimeRpcCallError, unwrapRuntimeRpcResult } from './runtime-rpc-result'
import { toRuntimeWorktreeSelector } from './runtime-worktree-selector'
import {
clearWebSessionCloseIntent,
diff --git a/src/renderer/src/runtime/web-session-terminal-orphan-recovery-adoption.ts b/src/renderer/src/runtime/web-session-terminal-orphan-recovery-adoption.ts
index e2f9bdf93e2e..3e2c99222587 100644
--- a/src/renderer/src/runtime/web-session-terminal-orphan-recovery-adoption.ts
+++ b/src/renderer/src/runtime/web-session-terminal-orphan-recovery-adoption.ts
@@ -13,12 +13,14 @@ import { cacheStableSurfaceRecoveryFailure } from './web-session-terminal-orphan
import { runInTerminalRecoveryRpcLane } from './web-session-terminal-orphan-recovery-rpc-lane'
import { toRuntimeWorktreeSelector } from './runtime-worktree-selector'
import { getSessionTabsRuntimeIdFromResponse } from './web-session-tabs-sync/publisher-identity-fences'
-import { hasTerminalHandleRetirementProof } from './web-session-terminal-orphan-recovery-surface-index'
+import {
+ hasTerminalHandleRetirementProof,
+ isValidReadySurface,
+ terminalRowsBySurface
+} from './web-session-terminal-orphan-recovery-surface-index'
import { isTerminalRecoverySnapshot } from './web-session-terminal-recovery-snapshot-validation'
import {
mergeRetainedTerminalSurfaces,
- isValidReadySurface,
- terminalRowsBySurface,
type AnyRecoverySurface,
type RecoverySurface
} from './web-session-terminal-orphan-recovery-surface'
diff --git a/src/renderer/src/runtime/web-session-terminal-orphan-recovery-prior-removal.test.ts b/src/renderer/src/runtime/web-session-terminal-orphan-recovery-prior-removal.test.ts
index d7ac22d9d141..5abd004983e7 100644
--- a/src/renderer/src/runtime/web-session-terminal-orphan-recovery-prior-removal.test.ts
+++ b/src/renderer/src/runtime/web-session-terminal-orphan-recovery-prior-removal.test.ts
@@ -10,10 +10,8 @@ import {
import { clearWebSessionTerminalOrphanRecoveryForTests } from './web-session-terminal-orphan-recovery'
import { mergeAdoptionResponse } from './web-session-terminal-orphan-recovery-adoption'
import { resolveTerminalOrphanInventory } from './web-session-terminal-orphan-recovery-inventory'
-import {
- prepareTerminalOrphanRecovery,
- surfaceKey
-} from './web-session-terminal-orphan-recovery-surface'
+import { prepareTerminalOrphanRecovery } from './web-session-terminal-orphan-recovery-surface'
+import { surfaceKey } from './web-session-terminal-orphan-recovery-surface-index'
describe('post-adoption reconciliation of previously removed surfaces', () => {
beforeEach(clearWebSessionTerminalOrphanRecoveryForTests)
diff --git a/src/renderer/src/runtime/web-session-terminal-orphan-recovery-surface.ts b/src/renderer/src/runtime/web-session-terminal-orphan-recovery-surface.ts
index cd9187c6e45a..9e60ac6ed26f 100644
--- a/src/renderer/src/runtime/web-session-terminal-orphan-recovery-surface.ts
+++ b/src/renderer/src/runtime/web-session-terminal-orphan-recovery-surface.ts
@@ -16,13 +16,6 @@ import {
terminalLayoutLeafIds,
terminalRowsBySurface
} from './web-session-terminal-orphan-recovery-surface-index'
-export {
- isRemovedSnapshot,
- isValidReadySurface,
- surfaceKey,
- terminalLayoutLeafIds,
- terminalRowsBySurface
-} from './web-session-terminal-orphan-recovery-surface-index'
import type { WebTerminalOrphanTopologyState } from './web-session-terminal-orphan-topology'
diff --git a/src/renderer/src/runtime/web-session-terminal-orphan-recovery.ts b/src/renderer/src/runtime/web-session-terminal-orphan-recovery.ts
index 9a4e3b983ee7..5191c397f3d2 100644
--- a/src/renderer/src/runtime/web-session-terminal-orphan-recovery.ts
+++ b/src/renderer/src/runtime/web-session-terminal-orphan-recovery.ts
@@ -17,16 +17,18 @@ import {
} from './web-session-terminal-orphan-recovery-adoption'
import {
buildTopologyCandidates,
- isRemovedSnapshot,
- isValidReadySurface,
prepareTerminalOrphanRecovery,
mergeRetainedTerminalSurfaces,
captureTerminalRecoveryTopologyToken,
- surfaceKey,
- terminalRowsBySurface,
type AnyRecoverySurface,
type TerminalOrphanRecoveryState
} from './web-session-terminal-orphan-recovery-surface'
+import {
+ isRemovedSnapshot,
+ isValidReadySurface,
+ surfaceKey,
+ terminalRowsBySurface
+} from './web-session-terminal-orphan-recovery-surface-index'
import { resolveTerminalOrphanInventory } from './web-session-terminal-orphan-recovery-inventory'
import { acceptPairedHostStructuredSessions } from './structured-agent-session-tab-retirement'
import { resolvePersistedTerminalSurfaces } from './web-session-terminal-orphan-recovery-pane'
@@ -50,8 +52,6 @@ import {
mergeRetainedTerminalRetirementProofs
} from './web-session-terminal-retirement-proof-ledger'
-export type { TerminalOrphanRecoveryState } from './web-session-terminal-orphan-recovery-surface'
-
export type TerminalOrphanRecoveryOptions = {
expectedEnvironmentPairingRevision?: number
expectedRuntimeId?: string
diff --git a/src/renderer/src/runtime/web-session-terminal-pending-handle-recovery.test.ts b/src/renderer/src/runtime/web-session-terminal-pending-handle-recovery.test.ts
index a7b35b9bd972..f072f1b09ab9 100644
--- a/src/renderer/src/runtime/web-session-terminal-pending-handle-recovery.test.ts
+++ b/src/renderer/src/runtime/web-session-terminal-pending-handle-recovery.test.ts
@@ -4,7 +4,7 @@ import {
clearWebSessionTerminalOrphanRecoveryForTests,
recoverWebSessionTerminalOrphansBeforeApply
} from './web-session-terminal-orphan-recovery'
-import type { TerminalOrphanRecoveryState } from './web-session-terminal-orphan-recovery'
+import type { TerminalOrphanRecoveryState } from './web-session-terminal-orphan-recovery-surface'
import { stubRuntimeEnvironmentBridge } from './runtime-environment-bridge-fixture'
const ENVIRONMENT_ID = 'remote-runtime'
diff --git a/src/renderer/src/store/repos/repo-removal.ts b/src/renderer/src/store/repos/repo-removal.ts
index 38034b15515b..b28c266e4ac2 100644
--- a/src/renderer/src/store/repos/repo-removal.ts
+++ b/src/renderer/src/store/repos/repo-removal.ts
@@ -7,7 +7,7 @@ import { getWorktreeIdFromVisitKey, getWorktreeVisitKey } from '@/lib/worktree-v
import { omitSparsePresetsForRepos } from '../slices/sparse-presets'
import { repoMatchesHostIdentity } from '../slices/repo-host-identity'
import { callRuntimeRpc } from '../../runtime/runtime-rpc-client'
-import { hasRuntimeRpcErrorCode } from '../../runtime/runtime-rpc-result'
+import { hasRuntimeRpcErrorCode } from '../../../../shared/runtime-rpc-error-code'
import { ipcOrRuntimeTargetForHostId } from '../../runtime/runtime-client-target'
import { translate } from '@/i18n/i18n'
import { readIpcErrorMessage } from '@/lib/ipc-error'
diff --git a/src/renderer/src/store/slices/tabs-open-close-lifecycle.test.ts b/src/renderer/src/store/slices/tabs-open-close-lifecycle.test.ts
index 35c886581005..2f544f1c2b66 100644
--- a/src/renderer/src/store/slices/tabs-open-close-lifecycle.test.ts
+++ b/src/renderer/src/store/slices/tabs-open-close-lifecycle.test.ts
@@ -1,7 +1,7 @@
import { describe, it, expect, vi, beforeEach } from 'vitest'
import type * as AgentStatusModule from '@/lib/agent-status'
import { getDefaultUIState } from '../../../../shared/constants'
-import { buildMobileSessionTabSnapshots } from '../../runtime/sync-runtime-graph'
+import { buildMobileSessionTabSnapshots } from '../../runtime/sync-runtime-graph/mobile-session-snapshots'
import { closeMobileSessionTabInStore } from '../../runtime/mobile-session-tab-close'
import { createTabsSliceMockApi } from './tabs-slice-test-harness'
import {
diff --git a/src/renderer/src/store/slices/worktrees/listing/runtime-worktree-rpc-errors.ts b/src/renderer/src/store/slices/worktrees/listing/runtime-worktree-rpc-errors.ts
index fe6e28b49895..a73ad789b7f9 100644
--- a/src/renderer/src/store/slices/worktrees/listing/runtime-worktree-rpc-errors.ts
+++ b/src/renderer/src/store/slices/worktrees/listing/runtime-worktree-rpc-errors.ts
@@ -1,4 +1,5 @@
-import { hasRuntimeRpcErrorCode, RuntimeRpcCallError } from '../../../../runtime/runtime-rpc-result'
+import { hasRuntimeRpcErrorCode } from '../../../../../../shared/runtime-rpc-error-code'
+import { RuntimeRpcCallError } from '../../../../runtime/runtime-rpc-result'
export function isRuntimeMethodNotFoundError(error: unknown): boolean {
return error instanceof RuntimeRpcCallError && error.code === 'method_not_found'
diff --git a/src/shared/orcad-idle-exit.ts b/src/shared/orcad-idle-exit.ts
index 6ae458499f64..7f72ccdd02d8 100644
--- a/src/shared/orcad-idle-exit.ts
+++ b/src/shared/orcad-idle-exit.ts
@@ -4,7 +4,6 @@
*/
import { z } from 'zod'
-export { ORCAD_MANAGED_ACTIVATION_ROOT_ENV } from './orcad-managed-launch-env'
/** Test-only quiet period; a client forwards it to the servers it launches. */
export const ORCAD_E2E_IDLE_TIMEOUT_ENV = 'ORCA_E2E_ORCAD_IDLE_TIMEOUT_MS'
export const ORCAD_IDLE_EXIT_TIMEOUT_MS = 15 * 60_000
diff --git a/src/shared/remote-runtime-client.ts b/src/shared/remote-runtime-client.ts
index 7ec04ca9e9a4..759014aa604f 100644
--- a/src/shared/remote-runtime-client.ts
+++ b/src/shared/remote-runtime-client.ts
@@ -2,20 +2,20 @@ import type { PairedRuntimeConnection } from './paired-runtime-connection'
import type { RuntimeCapability } from './protocol-version'
import type { RemoteRuntimeClientError } from './remote-runtime-client-error'
import { sendRemoteRuntimeRequestOnSocket } from './remote-runtime-request-socket'
-import {
- subscribeRemoteRuntimeTransport,
- type RemoteRuntimeSubscriptionOptions,
- type RemoteRuntimeTransportSubscriptionCallbacks
-} from './remote-runtime-subscription-transport'
+import { subscribeRemoteRuntimeTransport } from './remote-runtime-subscription-transport'
+import type {
+ RemoteRuntimeSubscriptionOptions,
+ RemoteRuntimeTransportSubscriptionCallbacks
+} from './remote-runtime-subscription-contract'
import type { RuntimeOrchestrationEnvelope, RuntimeRpcResponse } from './runtime-rpc-envelope'
import type { RuntimeStatus } from './runtime-types'
export { RemoteRuntimeClientError } from './remote-runtime-client-error'
export type {
RemoteRuntimeOutboundMemoryBudget,
- RemoteRuntimeOutboundSocketMemory,
- RemoteRuntimeSubscriptionOptions
-} from './remote-runtime-subscription-transport'
+ RemoteRuntimeOutboundSocketMemory
+} from './remote-runtime-subscription-outbound'
+export type { RemoteRuntimeSubscriptionOptions } from './remote-runtime-subscription-contract'
export type RemoteRuntimeSubscription = {
requestId: string
diff --git a/src/shared/remote-runtime-subscription-transport.ts b/src/shared/remote-runtime-subscription-transport.ts
index 4c4be5cfcb1a..6329b558183f 100644
--- a/src/shared/remote-runtime-subscription-transport.ts
+++ b/src/shared/remote-runtime-subscription-transport.ts
@@ -32,17 +32,6 @@ import type {
RemoteRuntimeTransportSubscriptionCallbacks
} from './remote-runtime-subscription-contract'
-export type {
- RemoteRuntimeOutboundMemoryBudget,
- RemoteRuntimeOutboundSocketMemory
-} from './remote-runtime-subscription-outbound'
-
-export type {
- RemoteRuntimeSubscriptionOptions,
- RemoteRuntimeTransportSubscription,
- RemoteRuntimeTransportSubscriptionCallbacks
-} from './remote-runtime-subscription-contract'
-
export async function subscribeRemoteRuntimeTransport(
connection: PairedRuntimeConnection,
method: string,
From 9905da80ccc37a3185f3e7c3ff9811cb8d7c8cbc Mon Sep 17 00:00:00 2001
From: Neil <4138956+nwparker@users.noreply.github.com>
Date: Sun, 18 Oct 2026 09:28:51 -0700
Subject: [PATCH 05/15] refactor(runtime): import runtime helpers from their
owning modules, not re-export shims (#30373)
Removes the re-export lines in 22 src/main/runtime modules (rpc schemas, skill surface, worker
identity, terminal viewport, teardown, git, e2ee crypto and more); importers and test mocks name
the real modules.
---
...ed-agent-session-restart-failure-ledger.ts | 4 +-
...ent-prompt-submission-verification.test.ts | 2 +-
.../agent-prompt-submission-verification.ts | 1 -
.../agent-session-recovery-capsule.test.ts | 4 +-
.../runtime/agent-session-recovery-capsule.ts | 5 --
.../claude-agent-teams-service.test.ts | 3 +-
.../runtime/claude-agent-teams-service.ts | 7 ---
.../construction/runtime-construction.ts | 6 +-
.../construction/runtime-service-state.ts | 2 +-
.../desktop-relay-service.test.ts | 2 +-
.../desktop-relay-service.ts | 3 +-
.../relay-pairing-authorization.ts | 2 +-
.../simulated-mobile-e2ee-v2-peer.ts | 2 +-
.../mobile-notification-dismissal-store.ts | 1 -
...-session-terminal-retirement-proof.test.ts | 2 +-
...obile-session-terminal-retirement-proof.ts | 5 --
.../mobile-session-terminal-retirement.ts | 2 +-
...me-browser-screencast-e2ee-backlog.test.ts | 8 ++-
src/main/runtime/orca-runtime-core.ts | 2 +-
.../orca-runtime-git-branch-diff.test.ts | 3 +-
.../orca-runtime-git-diff-budget.test.ts | 3 +-
src/main/runtime/orca-runtime-git.test.ts | 3 +-
src/main/runtime/orca-runtime-git.ts | 5 --
.../imported-values.spec.ts | 6 +-
...structured-worker-orca-session-backfill.ts | 4 +-
.../orchestration/worker-output-archive.ts | 6 +-
.../worker-terminal-process-liveness.ts | 2 -
.../worker-transcript-payload.test.ts | 4 +-
.../worker-transcript-payload.ts | 1 -
.../paired-client-navigation-test-harness.ts | 2 +-
.../runtime/remote-desktop-terminal-floor.ts | 2 +-
src/main/runtime/rpc/device-key-auth.test.ts | 2 +-
.../e2ee-channel-text-backpressure.test.ts | 8 ++-
src/main/runtime/rpc/e2ee-channel-v2.test.ts | 2 +-
src/main/runtime/rpc/e2ee-channel.test.ts | 8 ++-
src/main/runtime/rpc/e2ee-channel.ts | 2 +-
src/main/runtime/rpc/e2ee-crypto.test.ts | 2 +-
src/main/runtime/rpc/e2ee-crypto.ts | 10 ----
src/main/runtime/rpc/e2ee-integration.test.ts | 2 +-
src/main/runtime/rpc/methods/browser-core.ts | 2 +-
.../runtime/rpc/methods/browser-extras.ts | 2 +-
.../rpc/methods/browser-identity-rpc.ts | 2 +-
.../methods/browser-profile-rpc-methods.ts | 4 +-
.../runtime/rpc/methods/browser-schemas.ts | 58 -------------------
.../runtime/rpc/methods/browser-screencast.ts | 2 +-
.../rpc/methods/browser-text-rpc-methods.ts | 2 +-
src/main/runtime/rpc/methods/browser.test.ts | 8 ++-
.../runtime/rpc/methods/client-ui-schemas.ts | 4 --
src/main/runtime/rpc/methods/client-ui.ts | 5 +-
.../runtime/rpc/methods/clipboard.test.ts | 2 +-
src/main/runtime/rpc/methods/clipboard.ts | 1 -
.../methods/orchestration-caller-workspace.ts | 2 +-
.../federated-worker-release-host.ts | 2 +-
.../federation-attachment-observation.ts | 2 +-
.../messaging/message-methods.ts | 2 +-
.../orchestration/messaging/send-methods.ts | 2 +-
.../explicit-worker-terminal-validation.ts | 2 +-
.../worker/retried-worker-terminal-release.ts | 2 +-
.../orchestration/worker/worker-control.ts | 2 +-
.../worker/worker-launch-preferences.test.ts | 2 +-
.../worker/worker-list-method.ts | 2 +-
.../worker/worker-observation.ts | 2 +-
.../worker/worker-release-completion.ts | 7 +--
.../orchestration/worker/worker-release.ts | 2 +-
...ker-start-agent-placement-teardown.test.ts | 2 +-
...orker-start-launch-executor-parity.test.ts | 2 +-
.../worker/worker-start-receipt.ts | 2 +-
.../worker/worker-start-schema.ts | 4 +-
.../orchestration/worker/worker-stop.ts | 2 +-
.../worker/worker-terminal-release-lease.ts | 2 +-
.../methods/orchestration/worker/workers.ts | 2 +-
.../workspace-cleanup-ui-schema.test.ts | 4 +-
.../methods/workspace-cleanup-ui-schema.ts | 1 -
.../rpc/mobile-auth-acl-critical-path.test.ts | 2 +-
.../rpc/mobile-e2ee-auth-validation.ts | 2 +-
.../rpc/mobile-e2ee-desktop-outbound-owner.ts | 2 +-
.../rpc/mobile-e2ee-legacy-reply-senders.ts | 2 +-
.../mobile-e2ee-v2-desktop-session.test.ts | 2 +-
.../rpc/mobile-e2ee-v2-desktop-session.ts | 2 +-
.../runtime/rpc/mobile-socket-wiring.test.ts | 2 +-
.../rpc/orchestration-mutation-executor.ts | 6 --
src/main/runtime/rpc/schemas.test.ts | 2 +-
.../runtime/rpc/web-session-pairing.test.ts | 2 +-
...ntime-git-execution-host-ownership.test.ts | 2 +-
.../runtime-mobile-notification-controller.ts | 6 +-
...time-mobile-session-result-finalization.ts | 2 +-
...runtime-rpc-browser-host-admission.test.ts | 3 +-
.../runtime-rpc-device-revocation.test.ts | 2 +-
...time-rpc-dispatch-inject-long-poll.test.ts | 3 +-
.../runtime-rpc-long-poll-transport.test.ts | 2 +-
.../runtime-rpc-metadata-lifecycle.test.ts | 3 +-
.../runtime-rpc-mobile-ws-test-harness.ts | 2 +-
...ime-rpc-websocket-reply-size-limit.test.ts | 2 +-
src/main/runtime/runtime-rpc.ts | 14 -----
.../runtime/runtime-skill-command-contract.ts | 10 ++--
.../runtime/runtime-skill-command-surface.ts | 12 +---
.../runtime-skill-install-authority.ts | 5 +-
.../runtime/runtime-skill-install-commands.ts | 4 +-
.../runtime/runtime-skill-install-queries.ts | 8 ++-
src/main/runtime/runtime-skill-types.ts | 30 ----------
.../runtime/runtime-terminal-contracts.ts | 2 +-
.../headless-terminal-tab-close.ts | 2 +-
.../runtime/structured-worker-authority.ts | 2 +-
.../structured-worker-identity.test.ts | 2 +-
.../runtime/structured-worker-identity.ts | 6 +-
src/main/runtime/terminal-viewport.ts | 1 -
.../launch/terminal-split-source-authority.ts | 2 +-
.../layout/mobile-terminal-activity.ts | 2 +-
.../mobile-terminal-subscribe-internal.ts | 2 +-
.../terminal/layout/terminal-input-floor.ts | 2 +-
.../layout/terminal-resize-listeners.ts | 6 +-
.../terminal-orchestration-authority.ts | 2 +-
.../terminal/output/terminal-output-path.ts | 2 +-
.../terminal/stop/worktree-terminal-sleep.ts | 2 +-
.../terminal/stop/worktree-terminal-stop.ts | 2 +-
src/main/runtime/worktree-teardown.ts | 2 -
src/main/server/serve-readiness.ts | 2 +-
.../cross-version-web-device-key.unit.test.ts | 2 +-
118 files changed, 160 insertions(+), 301 deletions(-)
delete mode 100644 src/main/runtime/rpc/e2ee-crypto.ts
delete mode 100644 src/main/runtime/rpc/methods/browser-schemas.ts
delete mode 100644 src/main/runtime/rpc/methods/workspace-cleanup-ui-schema.ts
delete mode 100644 src/main/runtime/runtime-skill-types.ts
delete mode 100644 src/main/runtime/terminal-viewport.ts
diff --git a/src/main/native-chat/agent-session-wire/structured-agent-session-restart-failure-ledger.ts b/src/main/native-chat/agent-session-wire/structured-agent-session-restart-failure-ledger.ts
index 1b3269b7add8..18f55ba0c95e 100644
--- a/src/main/native-chat/agent-session-wire/structured-agent-session-restart-failure-ledger.ts
+++ b/src/main/native-chat/agent-session-wire/structured-agent-session-restart-failure-ledger.ts
@@ -7,11 +7,11 @@
// A record ends when the chat's agent is started again outside a resume action — the host retires
// it at that start, with the offer — or by a successful retry, or a dismissal.
+import type { AgentSessionRecoveryCapsule } from '../../runtime/agent-session-recovery-capsule'
import type {
- AgentSessionRecoveryCapsule,
AgentSessionResumeFailureInput,
AgentSessionResumeFailureRecord
-} from '../../runtime/agent-session-recovery-capsule'
+} from '../../runtime/agent-session-recovery-capsule-entries'
import type { AgentSessionRecord } from '../../../shared/agent-session-record'
import type {
AgentSessionResumeFailureOutcome,
diff --git a/src/main/runtime/agent-prompt-submission-verification.test.ts b/src/main/runtime/agent-prompt-submission-verification.test.ts
index aea3ffee9eff..8be383e165b8 100644
--- a/src/main/runtime/agent-prompt-submission-verification.test.ts
+++ b/src/main/runtime/agent-prompt-submission-verification.test.ts
@@ -1,6 +1,6 @@
import { afterEach, describe, expect, it, vi } from 'vitest'
+import { AGENT_PROMPT_EFFECT_TIMEOUT_MS } from '../../shared/orchestration-timing-budgets'
import {
- AGENT_PROMPT_EFFECT_TIMEOUT_MS,
AGENT_PROMPT_HOOK_EFFECT_TIMEOUT_MS,
type AgentPromptActivity,
isAgentPromptStalledError,
diff --git a/src/main/runtime/agent-prompt-submission-verification.ts b/src/main/runtime/agent-prompt-submission-verification.ts
index 91da0ed9dfe9..eb6f61fd0e42 100644
--- a/src/main/runtime/agent-prompt-submission-verification.ts
+++ b/src/main/runtime/agent-prompt-submission-verification.ts
@@ -1,4 +1,3 @@
-export { AGENT_PROMPT_EFFECT_TIMEOUT_MS } from '../../shared/orchestration-timing-budgets'
import { AGENT_PROMPT_EFFECT_TIMEOUT_MS } from '../../shared/orchestration-timing-budgets'
import type { TerminalAgent } from '../../shared/terminal-agent'
diff --git a/src/main/runtime/agent-session-recovery-capsule.test.ts b/src/main/runtime/agent-session-recovery-capsule.test.ts
index bb3c93a6a989..6777b8f26f5d 100644
--- a/src/main/runtime/agent-session-recovery-capsule.test.ts
+++ b/src/main/runtime/agent-session-recovery-capsule.test.ts
@@ -11,9 +11,9 @@ import {
} from '../native-chat/agent-session-wire/structured-agent-session-restart-resume-test-harness'
import {
AgentSessionRecoveryCapsule,
- AGENT_SESSION_RECOVERY_CAPSULE_FILE,
- type AgentSessionResumeFailureInput
+ AGENT_SESSION_RECOVERY_CAPSULE_FILE
} from './agent-session-recovery-capsule'
+import type { AgentSessionResumeFailureInput } from './agent-session-recovery-capsule-entries'
let directory: string
let filePath: string
diff --git a/src/main/runtime/agent-session-recovery-capsule.ts b/src/main/runtime/agent-session-recovery-capsule.ts
index ba34c82fc57c..568fc88e9ef9 100644
--- a/src/main/runtime/agent-session-recovery-capsule.ts
+++ b/src/main/runtime/agent-session-recovery-capsule.ts
@@ -23,11 +23,6 @@ import {
type RecoveryEntry
} from './agent-session-recovery-capsule-entries'
-export type {
- AgentSessionResumeFailureInput,
- AgentSessionResumeFailureRecord
-} from './agent-session-recovery-capsule-entries'
-
export const AGENT_SESSION_RECOVERY_CAPSULE_FILE = 'agent-session-recovery.json'
const MAX_CAPSULE_BYTES = 4 * 1024 * 1024
diff --git a/src/main/runtime/claude-agent-teams-service.test.ts b/src/main/runtime/claude-agent-teams-service.test.ts
index 57f867cb1c25..8d00a36896d0 100644
--- a/src/main/runtime/claude-agent-teams-service.test.ts
+++ b/src/main/runtime/claude-agent-teams-service.test.ts
@@ -1,5 +1,6 @@
import { describe, expect, it, vi } from 'vitest'
-import { ClaudeAgentTeamsService, type AgentTeamsTerminalApi } from './claude-agent-teams-service'
+import { ClaudeAgentTeamsService } from './claude-agent-teams-service'
+import type { AgentTeamsTerminalApi } from './claude-agent-teams-types'
function createServiceWithLeader(): {
service: ClaudeAgentTeamsService
diff --git a/src/main/runtime/claude-agent-teams-service.ts b/src/main/runtime/claude-agent-teams-service.ts
index 34ef35ecb361..f72d361a46bf 100644
--- a/src/main/runtime/claude-agent-teams-service.ts
+++ b/src/main/runtime/claude-agent-teams-service.ts
@@ -11,13 +11,6 @@ import type {
TeamPane
} from './claude-agent-teams-types'
-export type {
- AgentTeamsLaunchEnv,
- AgentTeamsTerminalApi,
- AgentTeamsTmuxCompatRequest,
- AgentTeamsTmuxCompatResponse
-} from './claude-agent-teams-types'
-
export class ClaudeAgentTeamsService {
private readonly teams = new Map()
private readonly dispatcher = new ClaudeAgentTeamsTmuxDispatcher()
diff --git a/src/main/runtime/construction/runtime-construction.ts b/src/main/runtime/construction/runtime-construction.ts
index af925f81ebbf..ce9ae0cf5a62 100644
--- a/src/main/runtime/construction/runtime-construction.ts
+++ b/src/main/runtime/construction/runtime-construction.ts
@@ -25,10 +25,8 @@ import { installRuntimeGitCommandSurface } from '../runtime-git-command-surface'
import { installRuntimeRepositoryCommandSurface } from '../runtime-repository-command-surface'
import { installRuntimeReviewCommandSurface } from '../runtime-review-command-surface'
import { installRuntimeServiceCommandSurface } from '../runtime-service-command-surface'
-import {
- RuntimeSkillCommands,
- installRuntimeSkillCommandSurface
-} from '../runtime-skill-command-surface'
+import { RuntimeSkillCommands } from '../runtime-skill-command-surface'
+import { installRuntimeSkillCommandSurface } from '../runtime-skill-command-contract'
import { getAppEnvironment } from '../../../shared/app-environment'
import { RuntimeClientSettingsController } from '../runtime-client-settings'
import { RuntimeSessionSearchSettingsController } from '../runtime-session-search-settings'
diff --git a/src/main/runtime/construction/runtime-service-state.ts b/src/main/runtime/construction/runtime-service-state.ts
index 8e2d56f3529d..9c7860224acb 100644
--- a/src/main/runtime/construction/runtime-service-state.ts
+++ b/src/main/runtime/construction/runtime-service-state.ts
@@ -3,7 +3,7 @@ import { OrchestrationStructuredMailboxPointerDelivery } from '../orchestration/
import { createStructuredMailboxPointerHost } from '../orchestration/structured-mailbox-pointer-host'
import { localOrchestrationCliCommand } from '../orchestration/cli-command'
import { RuntimeOrchestrationSenderNames } from '../runtime-orchestration-sender-names'
-import { isStructuredWorkerHandle } from '../structured-worker-identity'
+import { isStructuredWorkerHandle } from '../../../shared/structured-worker-handle'
import { ORCA_SESSION_ADDRESS_PREFIX } from '../../../shared/orca-session-address'
import { resolveStructuredWorkerAuthority } from '../structured-worker-authority'
import { OrcaRuntimeWithRuntimeId } from './runtime-identity-state'
diff --git a/src/main/runtime/mobile-cloud-relay/desktop-relay-service.test.ts b/src/main/runtime/mobile-cloud-relay/desktop-relay-service.test.ts
index cf4903535d5c..7177beb3ba07 100644
--- a/src/main/runtime/mobile-cloud-relay/desktop-relay-service.test.ts
+++ b/src/main/runtime/mobile-cloud-relay/desktop-relay-service.test.ts
@@ -1,5 +1,5 @@
import { afterEach, describe, expect, it, vi } from 'vitest'
-import type { MobilePairingConnectionContext } from '../runtime-rpc'
+import type { MobilePairingConnectionContext } from '../runtime-rpc/runtime-rpc-pairing-types'
import { DesktopRelayService } from './desktop-relay-service'
import { pairingAuthorizationForContext } from './relay-pairing-authorization'
diff --git a/src/main/runtime/mobile-cloud-relay/desktop-relay-service.ts b/src/main/runtime/mobile-cloud-relay/desktop-relay-service.ts
index 894ca729e92c..a76b0c862c21 100644
--- a/src/main/runtime/mobile-cloud-relay/desktop-relay-service.ts
+++ b/src/main/runtime/mobile-cloud-relay/desktop-relay-service.ts
@@ -1,5 +1,6 @@
import type { OrcaCloudAuthConfig } from '../../orca-profiles/profile-cloud-auth-config'
-import type { MobilePairingConnectionContext, OrcaRuntimeRpcServer } from '../runtime-rpc'
+import type { MobilePairingConnectionContext } from '../runtime-rpc/runtime-rpc-pairing-types'
+import type { OrcaRuntimeRpcServer } from '../runtime-rpc'
import type {
DeviceCredentialInstalled,
PairingGetEndpointsParams,
diff --git a/src/main/runtime/mobile-cloud-relay/relay-pairing-authorization.ts b/src/main/runtime/mobile-cloud-relay/relay-pairing-authorization.ts
index c1760695b041..fbc9ad129fa4 100644
--- a/src/main/runtime/mobile-cloud-relay/relay-pairing-authorization.ts
+++ b/src/main/runtime/mobile-cloud-relay/relay-pairing-authorization.ts
@@ -1,4 +1,4 @@
-import type { MobilePairingConnectionContext } from '../runtime-rpc'
+import type { MobilePairingConnectionContext } from '../runtime-rpc/runtime-rpc-pairing-types'
import type { DeviceCredentialInstallAuthorization } from './relay-control-requests'
// Derives install authorization only from immutable connection metadata, never from request params.
diff --git a/src/main/runtime/mobile-cloud-relay/simulated-mobile-e2ee-v2-peer.ts b/src/main/runtime/mobile-cloud-relay/simulated-mobile-e2ee-v2-peer.ts
index ec9a1b8f53f5..2894007794df 100644
--- a/src/main/runtime/mobile-cloud-relay/simulated-mobile-e2ee-v2-peer.ts
+++ b/src/main/runtime/mobile-cloud-relay/simulated-mobile-e2ee-v2-peer.ts
@@ -9,7 +9,7 @@ import {
openMobileE2EEV2Frame,
sealMobileE2EEV2Frame
} from '../../../shared/mobile-e2ee-v2-framing'
-import { deriveSharedKey } from '../rpc/e2ee-crypto'
+import { deriveSharedKey } from '../../../shared/e2ee-crypto'
import { deriveMobileE2EEV2KeySchedule } from '../../../shared/mobile-e2ee-v2-node-key-schedule'
// Why: desktop-side tests need an independent mobile-side wire peer
diff --git a/src/main/runtime/mobile-notification-dismissal-store.ts b/src/main/runtime/mobile-notification-dismissal-store.ts
index 4a111a3dff2f..0b07807ec698 100644
--- a/src/main/runtime/mobile-notification-dismissal-store.ts
+++ b/src/main/runtime/mobile-notification-dismissal-store.ts
@@ -9,7 +9,6 @@ import {
type StructuredAttentionOrigin
} from '../../shared/agent-session-attention'
-export type { DeliveredNotificationIdentity } from '../../shared/mobile-notification-identity'
export type DeliveredNotificationRecord = DeliveredNotificationIdentity & {
structuredOrigin?: StructuredAttentionOrigin
}
diff --git a/src/main/runtime/mobile-session-terminal-retirement-proof.test.ts b/src/main/runtime/mobile-session-terminal-retirement-proof.test.ts
index 11426e50afe0..54189ae0ed9e 100644
--- a/src/main/runtime/mobile-session-terminal-retirement-proof.test.ts
+++ b/src/main/runtime/mobile-session-terminal-retirement-proof.test.ts
@@ -1,6 +1,6 @@
import { describe, expect, it } from 'vitest'
+import { appendRetiredTerminalSurfaceProofs } from '../../shared/terminal-retirement-proof-ledger'
import {
- appendRetiredTerminalSurfaceProofs,
attachRetirementProofsToSnapshot,
preserveTerminalRetirementProofs
} from './mobile-session-terminal-retirement-proof'
diff --git a/src/main/runtime/mobile-session-terminal-retirement-proof.ts b/src/main/runtime/mobile-session-terminal-retirement-proof.ts
index 26bf1cb974da..ea7a3c39c849 100644
--- a/src/main/runtime/mobile-session-terminal-retirement-proof.ts
+++ b/src/main/runtime/mobile-session-terminal-retirement-proof.ts
@@ -8,11 +8,6 @@ import {
retirementProofKey
} from '../../shared/terminal-retirement-proof-ledger'
-export {
- appendRetiredTerminalSurfaceProofs,
- dropRetirementProofsForLiveSurfaces
-} from '../../shared/terminal-retirement-proof-ledger'
-
/**
* Renderer snapshots omit the host's durable close acknowledgements; carry them forward.
*
diff --git a/src/main/runtime/mobile-session-terminal-retirement.ts b/src/main/runtime/mobile-session-terminal-retirement.ts
index 0f027e8c68d5..cd9f8d2d3cb4 100644
--- a/src/main/runtime/mobile-session-terminal-retirement.ts
+++ b/src/main/runtime/mobile-session-terminal-retirement.ts
@@ -10,7 +10,7 @@ import type {
TerminalLayoutSnapshot,
TerminalPaneLayoutNode
} from '../../shared/terminal-tab-types'
-import { appendRetiredTerminalSurfaceProofs } from './mobile-session-terminal-retirement-proof'
+import { appendRetiredTerminalSurfaceProofs } from '../../shared/terminal-retirement-proof-ledger'
export type RetiredTerminalSurface = {
worktreeId: string
diff --git a/src/main/runtime/orca-runtime-browser-screencast-e2ee-backlog.test.ts b/src/main/runtime/orca-runtime-browser-screencast-e2ee-backlog.test.ts
index 700a7e28188c..2458f8adec2e 100644
--- a/src/main/runtime/orca-runtime-browser-screencast-e2ee-backlog.test.ts
+++ b/src/main/runtime/orca-runtime-browser-screencast-e2ee-backlog.test.ts
@@ -7,7 +7,13 @@ import {
createStreamedGuest
} from './single-page-browser-commands-host-test-double'
import { E2EEChannel } from './rpc/e2ee-channel'
-import { decrypt, decryptBytes, deriveSharedKey, encrypt, generateKeyPair } from './rpc/e2ee-crypto'
+import {
+ decrypt,
+ decryptBytes,
+ deriveSharedKey,
+ encrypt,
+ generateKeyPair
+} from '../../shared/e2ee-crypto'
import type { RpcBinarySender } from './rpc/rpc-binary-sender'
const { webContentsFromId, startBrowserScreencast } = vi.hoisted(() => ({
diff --git a/src/main/runtime/orca-runtime-core.ts b/src/main/runtime/orca-runtime-core.ts
index 5c5a4f32b8eb..fe88078cf62f 100644
--- a/src/main/runtime/orca-runtime-core.ts
+++ b/src/main/runtime/orca-runtime-core.ts
@@ -16,7 +16,7 @@ import type { RuntimeGitCommandSurface } from './runtime-git-command-surface'
import type { RuntimeRepositoryCommandSurface } from './runtime-repository-command-surface'
import type { RuntimeReviewCommandSurface } from './runtime-review-command-surface'
import type { RuntimeServiceCommandSurface } from './runtime-service-command-surface'
-import type { RuntimeSkillCommandSurface } from './runtime-skill-command-surface'
+import type { RuntimeSkillCommandSurface } from './runtime-skill-command-contract'
export type PtyIncarnationHandleRecord = {
handle: string
diff --git a/src/main/runtime/orca-runtime-git-branch-diff.test.ts b/src/main/runtime/orca-runtime-git-branch-diff.test.ts
index baded112f165..26c4f1fc2bdd 100644
--- a/src/main/runtime/orca-runtime-git-branch-diff.test.ts
+++ b/src/main/runtime/orca-runtime-git-branch-diff.test.ts
@@ -1,6 +1,7 @@
import { beforeEach, describe, expect, it, vi } from 'vitest'
import type { GlobalSettings } from '../../shared/global-settings-types'
-import { RuntimeGitCommands, type ResolvedRuntimeGitWorktree } from './orca-runtime-git'
+import { RuntimeGitCommands } from './orca-runtime-git'
+import type { ResolvedRuntimeGitWorktree } from './runtime-git-command-target'
const getBranchDiffMock = vi.hoisted(() => vi.fn())
diff --git a/src/main/runtime/orca-runtime-git-diff-budget.test.ts b/src/main/runtime/orca-runtime-git-diff-budget.test.ts
index 37992fc2066c..ef2ea8a81523 100644
--- a/src/main/runtime/orca-runtime-git-diff-budget.test.ts
+++ b/src/main/runtime/orca-runtime-git-diff-budget.test.ts
@@ -4,7 +4,8 @@ import { REMOTE_RPC_MAX_CONTENT_BYTES } from '../../shared/remote-rpc-content-bu
import type { GitDiffResult } from '../../shared/git-diff-compare-types'
import type { GlobalSettings } from '../../shared/global-settings-types'
import type * as GitStatusModule from '../git/status'
-import { RuntimeGitCommands, type ResolvedRuntimeGitWorktree } from './orca-runtime-git'
+import { RuntimeGitCommands } from './orca-runtime-git'
+import type { ResolvedRuntimeGitWorktree } from './runtime-git-command-target'
const mocks = vi.hoisted(() => ({
getDiff: vi.fn(),
diff --git a/src/main/runtime/orca-runtime-git.test.ts b/src/main/runtime/orca-runtime-git.test.ts
index 31f3a51db1d0..4c5e18edb339 100644
--- a/src/main/runtime/orca-runtime-git.test.ts
+++ b/src/main/runtime/orca-runtime-git.test.ts
@@ -10,7 +10,8 @@ import {
SSH_HOST_NOT_SERVED_MESSAGE,
SshHostNotServedError
} from '../providers/ssh-host-not-served-error'
-import { RuntimeGitCommands, type ResolvedRuntimeGitWorktree } from './orca-runtime-git'
+import { RuntimeGitCommands } from './orca-runtime-git'
+import type { ResolvedRuntimeGitWorktree } from './runtime-git-command-target'
const mocks = vi.hoisted(() => ({
checkoutBranch: vi.fn(),
diff --git a/src/main/runtime/orca-runtime-git.ts b/src/main/runtime/orca-runtime-git.ts
index b5a5041fd197..809d61e6f4ee 100644
--- a/src/main/runtime/orca-runtime-git.ts
+++ b/src/main/runtime/orca-runtime-git.ts
@@ -5,11 +5,6 @@ import { RuntimeGitStatusCommands } from './runtime-git-status-commands'
import { RuntimeGitSyncCommands } from './runtime-git-sync-commands'
import type { RuntimeGitCommandHost } from './runtime-git-command-target'
-export type {
- ResolvedRuntimeGitWorktree,
- RuntimeGitCommandHost
-} from './runtime-git-command-target'
-
export class RuntimeGitCommands {
readonly getRuntimeGitStatus: RuntimeGitStatusCommands['getRuntimeGitStatus']
readonly getRuntimeGitSubmoduleStatus: RuntimeGitStatusCommands['getRuntimeGitSubmoduleStatus']
diff --git a/src/main/runtime/orca-runtime-test-mocks/imported-values.spec.ts b/src/main/runtime/orca-runtime-test-mocks/imported-values.spec.ts
index c17b1790e73e..fc170aa6f799 100644
--- a/src/main/runtime/orca-runtime-test-mocks/imported-values.spec.ts
+++ b/src/main/runtime/orca-runtime-test-mocks/imported-values.spec.ts
@@ -37,10 +37,8 @@ import {
removeWorktree
} from '../../git/worktree'
import * as gitRunner from '../../git/runner'
-import {
- WORKTREE_PROCESS_SWEEP_TIMEOUT_MS,
- WORKTREE_TEARDOWN_RPC_MARGIN_MS
-} from '../worktree-teardown'
+import { WORKTREE_PROCESS_SWEEP_TIMEOUT_MS } from '../worktree-teardown'
+import { WORKTREE_TEARDOWN_RPC_MARGIN_MS } from '../worktree-teardown-deadline'
import { clearSubmodulePathsCacheForTests, listSubmodulePaths } from '../../git/status'
import { getEffectiveHooks, hasHooksFile, loadHooks, parseOrcaYaml, runHook } from '../../hooks'
import { createSetupRunnerScript, resolveSetupRunnerShell } from '../../worktree-runner-script'
diff --git a/src/main/runtime/orchestration/db/schema/structured-worker-orca-session-backfill.ts b/src/main/runtime/orchestration/db/schema/structured-worker-orca-session-backfill.ts
index 59a0bdb1c7f7..1bc736d1500a 100644
--- a/src/main/runtime/orchestration/db/schema/structured-worker-orca-session-backfill.ts
+++ b/src/main/runtime/orchestration/db/schema/structured-worker-orca-session-backfill.ts
@@ -2,8 +2,10 @@ import type Database from '../../../../sqlite/sync-database'
import { isOrcaSessionId } from '../../../../../shared/orca-session-address'
import {
STRUCTURED_WORKER_HANDLE_PREFIX,
+ isStructuredWorkerHandle
+} from '../../../../../shared/structured-worker-handle'
+import {
STRUCTURED_WORKER_INCARNATION_PREFIX,
- isStructuredWorkerHandle,
sessionIdFromStructuredWorkerIncarnation
} from '../../../structured-worker-identity'
import { currentRunCoordinatorOrcaSessionIdSql } from '../runs/run-coordinator-orca-session'
diff --git a/src/main/runtime/orchestration/worker-output-archive.ts b/src/main/runtime/orchestration/worker-output-archive.ts
index d2d44fd48426..80da9d2da83a 100644
--- a/src/main/runtime/orchestration/worker-output-archive.ts
+++ b/src/main/runtime/orchestration/worker-output-archive.ts
@@ -7,10 +7,8 @@ import type {
WorkerTerminalArchiveRow,
WorkerTerminalArchiveStatus
} from './worker-terminal-ownership'
-import {
- MAX_WORKER_TRANSCRIPT_MESSAGE_LIMIT,
- redactWorkerTerminalLines
-} from './worker-transcript-payload'
+import { MAX_WORKER_TRANSCRIPT_MESSAGE_LIMIT } from './worker-transcript-payload'
+import { redactWorkerTerminalLines } from './worker-terminal-redaction'
import { readWorkerTranscript } from './worker-transcript-read'
import { isWslHookRelayConnectionId } from '../../../shared/wsl-hook-relay-contract'
import { captureStructuredWorkerArchive } from '../rpc/methods/orchestration-structured-worker-lifecycle'
diff --git a/src/main/runtime/orchestration/worker-terminal-process-liveness.ts b/src/main/runtime/orchestration/worker-terminal-process-liveness.ts
index 4e652d6286af..b1d5816e6b99 100644
--- a/src/main/runtime/orchestration/worker-terminal-process-liveness.ts
+++ b/src/main/runtime/orchestration/worker-terminal-process-liveness.ts
@@ -2,8 +2,6 @@ import type { PtyProcessInfo } from '../../providers/pty-process-info'
// One reader for the durable `host_scope` column; re-exported so the process-liveness
// path keeps its import site while the parse itself lives beside the fleet consumers.
-export type { WorkerTerminalHostScope } from '../../../shared/worker-terminal-host-scope'
-export { parseWorkerTerminalHostScope } from '../../../shared/worker-terminal-host-scope'
/**
* Does `processIncarnation` name exactly this pty's live incarnation? Requires exact
diff --git a/src/main/runtime/orchestration/worker-transcript-payload.test.ts b/src/main/runtime/orchestration/worker-transcript-payload.test.ts
index 7288af52a76e..5ff4bc0c0608 100644
--- a/src/main/runtime/orchestration/worker-transcript-payload.test.ts
+++ b/src/main/runtime/orchestration/worker-transcript-payload.test.ts
@@ -2,9 +2,9 @@ import { describe, expect, it } from 'vitest'
import { projectStructuredItemsToNativeChat } from '../../../shared/structured-agent-session-projection'
import {
boundWorkerTranscriptMessages,
- boundWorkerTranscriptTail,
- redactWorkerTerminalLines
+ boundWorkerTranscriptTail
} from './worker-transcript-payload'
+import { redactWorkerTerminalLines } from './worker-terminal-redaction'
describe('worker transcript wire bounds', () => {
it('clips oversized blocks and omits local image paths', () => {
diff --git a/src/main/runtime/orchestration/worker-transcript-payload.ts b/src/main/runtime/orchestration/worker-transcript-payload.ts
index cedec632886d..04b4ef9b97d3 100644
--- a/src/main/runtime/orchestration/worker-transcript-payload.ts
+++ b/src/main/runtime/orchestration/worker-transcript-payload.ts
@@ -3,7 +3,6 @@ import type { NativeChatBlock, NativeChatMessage } from '../../../shared/native-
import { boundSubagentEntryId } from '../../native-chat/subagent-entry-id-bounds'
import { boundWorkerTranscriptActivityBlock } from './worker-transcript-activity-block-bounds'
import { replaceDispatchCapabilities } from './worker-terminal-redaction'
-export { redactWorkerTerminalLines } from './worker-terminal-redaction'
export const DEFAULT_WORKER_TRANSCRIPT_MESSAGE_LIMIT = 40
export const MAX_WORKER_TRANSCRIPT_MESSAGE_LIMIT = 50
diff --git a/src/main/runtime/paired-client-navigation-test-harness.ts b/src/main/runtime/paired-client-navigation-test-harness.ts
index acc330dc3fe0..1f3611780576 100644
--- a/src/main/runtime/paired-client-navigation-test-harness.ts
+++ b/src/main/runtime/paired-client-navigation-test-harness.ts
@@ -3,7 +3,7 @@ import WebSocket from 'ws'
import { parsePairingCode } from '../../shared/pairing'
import type { RuntimeMobileSessionTabsResult } from '../../shared/runtime-types'
import type { OrcaRuntimeService } from './orca-runtime'
-import { decrypt, deriveSharedKey, encrypt, generateKeyPair } from './rpc/e2ee-crypto'
+import { decrypt, deriveSharedKey, encrypt, generateKeyPair } from '../../shared/e2ee-crypto'
export const REPO_ID = 'repo-1'
export const FOLDER_REPO_ID = 'folder-repo-1'
diff --git a/src/main/runtime/remote-desktop-terminal-floor.ts b/src/main/runtime/remote-desktop-terminal-floor.ts
index 88a7819eaa7c..13675a490d93 100644
--- a/src/main/runtime/remote-desktop-terminal-floor.ts
+++ b/src/main/runtime/remote-desktop-terminal-floor.ts
@@ -1,4 +1,4 @@
-import { clampTerminalViewport } from './terminal-viewport'
+import { clampTerminalViewport } from '../../shared/terminal-viewport'
type Viewport = { cols: number; rows: number }
type Viewer = Viewport & { clientId: string; activity: number }
diff --git a/src/main/runtime/rpc/device-key-auth.test.ts b/src/main/runtime/rpc/device-key-auth.test.ts
index da9217213247..fa6c980a8244 100644
--- a/src/main/runtime/rpc/device-key-auth.test.ts
+++ b/src/main/runtime/rpc/device-key-auth.test.ts
@@ -9,7 +9,7 @@ import { DeviceRegistry } from '../device-registry'
import { DEVICE_REGISTRY_FILENAME } from '../mobile-pairing-files'
import { SimulatedMobileE2EEV2Peer } from '../mobile-cloud-relay/simulated-mobile-e2ee-v2-peer'
import { registerSocketDeviceKey } from '../runtime-rpc/runtime-rpc-device-key-registration'
-import { generateKeyPair } from './e2ee-crypto'
+import { generateKeyPair } from '../../../shared/e2ee-crypto'
import {
MobileSocketWiring,
type AuthenticatedMobileSocket,
diff --git a/src/main/runtime/rpc/e2ee-channel-text-backpressure.test.ts b/src/main/runtime/rpc/e2ee-channel-text-backpressure.test.ts
index 03a874e65709..24c49185c9ed 100644
--- a/src/main/runtime/rpc/e2ee-channel-text-backpressure.test.ts
+++ b/src/main/runtime/rpc/e2ee-channel-text-backpressure.test.ts
@@ -2,7 +2,13 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
import type { WebSocket } from 'ws'
import type { RpcBinarySendResult } from './rpc-binary-sender'
import { E2EEChannel, type E2EEChannelOptions } from './e2ee-channel'
-import { deriveSharedKey, decrypt, decryptBytes, encrypt, generateKeyPair } from './e2ee-crypto'
+import {
+ deriveSharedKey,
+ decrypt,
+ decryptBytes,
+ encrypt,
+ generateKeyPair
+} from '../../../shared/e2ee-crypto'
import { createMobileE2EEOutboundMemoryBudget } from './mobile-e2ee-outbound-memory-budget'
import { REMOTE_RUNTIME_MAX_OUTBOUND_JSON_BYTES } from '../../../shared/remote-runtime-memory-limits'
diff --git a/src/main/runtime/rpc/e2ee-channel-v2.test.ts b/src/main/runtime/rpc/e2ee-channel-v2.test.ts
index 7e06b53c0475..dcc21c2716d2 100644
--- a/src/main/runtime/rpc/e2ee-channel-v2.test.ts
+++ b/src/main/runtime/rpc/e2ee-channel-v2.test.ts
@@ -11,7 +11,7 @@ import {
openMobileE2EEV2Frame,
sealMobileE2EEV2Frame
} from '../../../shared/mobile-e2ee-v2-framing'
-import { deriveSharedKey } from './e2ee-crypto'
+import { deriveSharedKey } from '../../../shared/e2ee-crypto'
import type { RpcBinarySendResult } from './rpc-binary-sender'
import { E2EEChannel } from './e2ee-channel'
import { deriveMobileE2EEV2KeySchedule } from '../../../shared/mobile-e2ee-v2-node-key-schedule'
diff --git a/src/main/runtime/rpc/e2ee-channel.test.ts b/src/main/runtime/rpc/e2ee-channel.test.ts
index 5e88a5bee2cd..949fdc1b1adc 100644
--- a/src/main/runtime/rpc/e2ee-channel.test.ts
+++ b/src/main/runtime/rpc/e2ee-channel.test.ts
@@ -2,7 +2,13 @@ import { describe, expect, it, vi, beforeEach, afterEach } from 'vitest'
import type { WebSocket } from 'ws'
import type { RpcBinarySendResult } from './rpc-binary-sender'
import { E2EEChannel, type E2EEChannelOptions } from './e2ee-channel'
-import { generateKeyPair, deriveSharedKey, encrypt, decrypt, encryptBytes } from './e2ee-crypto'
+import {
+ generateKeyPair,
+ deriveSharedKey,
+ encrypt,
+ decrypt,
+ encryptBytes
+} from '../../../shared/e2ee-crypto'
import {
REMOTE_RUNTIME_MAX_OUTBOUND_BINARY_FRAME_BYTES,
REMOTE_RUNTIME_MAX_OUTBOUND_JSON_BYTES
diff --git a/src/main/runtime/rpc/e2ee-channel.ts b/src/main/runtime/rpc/e2ee-channel.ts
index b7c3506d1f93..453a32be66f2 100644
--- a/src/main/runtime/rpc/e2ee-channel.ts
+++ b/src/main/runtime/rpc/e2ee-channel.ts
@@ -1,6 +1,6 @@
// Why: this channel keeps E2EE framing out of RPC handlers, which consume plaintext across transports.
import type { WebSocket } from 'ws'
-import { deriveSharedKey, encrypt, decrypt, decryptBytes } from './e2ee-crypto'
+import { deriveSharedKey, encrypt, decrypt, decryptBytes } from '../../../shared/e2ee-crypto'
import {
DesktopMobileE2EEV2Session,
type DesktopMobileE2EEV2Context
diff --git a/src/main/runtime/rpc/e2ee-crypto.test.ts b/src/main/runtime/rpc/e2ee-crypto.test.ts
index bdc61e4c29cd..27ba88cf68f6 100644
--- a/src/main/runtime/rpc/e2ee-crypto.test.ts
+++ b/src/main/runtime/rpc/e2ee-crypto.test.ts
@@ -9,7 +9,7 @@ import {
decryptBytes,
MAX_E2EE_ENCRYPTED_BASE64_CHARACTERS,
publicKeyFromBase64
-} from './e2ee-crypto'
+} from '../../../shared/e2ee-crypto'
import { MOBILE_E2EE_LEGACY_FIXTURE } from '../../../shared/mobile-e2ee-legacy-fixtures'
describe('e2ee-crypto', () => {
diff --git a/src/main/runtime/rpc/e2ee-crypto.ts b/src/main/runtime/rpc/e2ee-crypto.ts
deleted file mode 100644
index 81e8c0f97556..000000000000
--- a/src/main/runtime/rpc/e2ee-crypto.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-export {
- decrypt,
- decryptBytes,
- deriveSharedKey,
- encrypt,
- encryptBytes,
- generateKeyPair,
- MAX_E2EE_ENCRYPTED_BASE64_CHARACTERS,
- publicKeyFromBase64
-} from '../../../shared/e2ee-crypto'
diff --git a/src/main/runtime/rpc/e2ee-integration.test.ts b/src/main/runtime/rpc/e2ee-integration.test.ts
index 1171848e8e75..edf302dc1948 100644
--- a/src/main/runtime/rpc/e2ee-integration.test.ts
+++ b/src/main/runtime/rpc/e2ee-integration.test.ts
@@ -1,7 +1,7 @@
import { describe, expect, it, vi, beforeEach, afterEach } from 'vitest'
import type { WebSocket } from 'ws'
import { E2EEChannel } from './e2ee-channel'
-import { generateKeyPair, deriveSharedKey, encrypt, decrypt } from './e2ee-crypto'
+import { generateKeyPair, deriveSharedKey, encrypt, decrypt } from '../../../shared/e2ee-crypto'
// Why: this test simulates the full mobile → desktop E2EE flow without a real
// WebSocket. The "mobile" side generates an ephemeral keypair, sends e2ee_hello,
diff --git a/src/main/runtime/rpc/methods/browser-core.ts b/src/main/runtime/rpc/methods/browser-core.ts
index f716c1e219d5..c354a55b1b75 100644
--- a/src/main/runtime/rpc/methods/browser-core.ts
+++ b/src/main/runtime/rpc/methods/browser-core.ts
@@ -25,7 +25,7 @@ import {
TabSwitch,
Upload,
Wait
-} from './browser-schemas'
+} from '../../../../shared/rpc-contract/browser-params'
import {
BrowserOpenUrlParams,
BrowserTabCreateParams
diff --git a/src/main/runtime/rpc/methods/browser-extras.ts b/src/main/runtime/rpc/methods/browser-extras.ts
index d725e7b886ca..99b72a9470eb 100644
--- a/src/main/runtime/rpc/methods/browser-extras.ts
+++ b/src/main/runtime/rpc/methods/browser-extras.ts
@@ -20,7 +20,7 @@ import {
StorageKey,
StorageKeyValue,
Viewport
-} from './browser-schemas'
+} from '../../../../shared/rpc-contract/browser-params'
import { MouseClick } from '../../../../shared/rpc-contract/browser-extras-params'
export const BROWSER_EXTRA_METHODS = [
diff --git a/src/main/runtime/rpc/methods/browser-identity-rpc.ts b/src/main/runtime/rpc/methods/browser-identity-rpc.ts
index 60d80d9fc020..bc58f3b1e89d 100644
--- a/src/main/runtime/rpc/methods/browser-identity-rpc.ts
+++ b/src/main/runtime/rpc/methods/browser-identity-rpc.ts
@@ -1,5 +1,5 @@
import { defineMethod } from '../core'
-import { BrowserIdentitySet } from './browser-schemas'
+import { BrowserIdentitySet } from '../../../../shared/rpc-contract/browser-identity-params'
import {
getBrowserIdentityModeStatus,
setBrowserIdentityMode
diff --git a/src/main/runtime/rpc/methods/browser-profile-rpc-methods.ts b/src/main/runtime/rpc/methods/browser-profile-rpc-methods.ts
index 685857dc94f7..d5b8b569a65b 100644
--- a/src/main/runtime/rpc/methods/browser-profile-rpc-methods.ts
+++ b/src/main/runtime/rpc/methods/browser-profile-rpc-methods.ts
@@ -1,12 +1,12 @@
import { defineMethod } from '../core'
+import { ProfileCreate } from '../../../../shared/rpc-contract/browser-identity-params'
import {
- ProfileCreate,
ProfileDelete,
ProfileImportFromBrowser,
TabProfileClone,
TabSetProfile,
TabShow
-} from './browser-schemas'
+} from '../../../../shared/rpc-contract/browser-params'
export const BROWSER_PROFILE_METHODS = [
defineMethod({
diff --git a/src/main/runtime/rpc/methods/browser-schemas.ts b/src/main/runtime/rpc/methods/browser-schemas.ts
deleted file mode 100644
index 95beade5c5a5..000000000000
--- a/src/main/runtime/rpc/methods/browser-schemas.ts
+++ /dev/null
@@ -1,58 +0,0 @@
-// Why: browser schemas stay separate from handler registration so both sides
-// remain under the line cap and dispatch wiring stays scannable.
-export {
- Check,
- ClipboardWrite,
- CookieDelete,
- CookieGet,
- CookieSet,
- DialogAccept,
- Drag,
- Element,
- Eval,
- Exec,
- Fill,
- Find,
- FullScreenshot,
- Geolocation,
- Get,
- Goto,
- Highlight,
- InterceptEnable,
- Is,
- KeyboardInsert,
- Keypress,
- LimitParam,
- MouseButton,
- MouseWheel,
- MouseXY,
- ProfileDelete,
- ProfileImportFromBrowser,
- Screencast,
- Screenshot,
- Scroll,
- Select,
- SelectorPath,
- SetCredentials,
- SetDevice,
- SetHeaders,
- SetMedia,
- SetOffline,
- StorageKey,
- StorageKeyValue,
- TabClose,
- TabCurrent,
- TabList,
- TabProfileClone,
- TabSetProfile,
- TabShow,
- TabSwitch,
- Type,
- Upload,
- Viewport,
- Wait
-} from '../../../../shared/rpc-contract/browser-params'
-export {
- BrowserIdentitySet,
- ProfileCreate
-} from '../../../../shared/rpc-contract/browser-identity-params'
diff --git a/src/main/runtime/rpc/methods/browser-screencast.ts b/src/main/runtime/rpc/methods/browser-screencast.ts
index 5b59ebd629ee..1be2e6e92a5e 100644
--- a/src/main/runtime/rpc/methods/browser-screencast.ts
+++ b/src/main/runtime/rpc/methods/browser-screencast.ts
@@ -1,5 +1,5 @@
import { defineMethod, defineStreamingMethod } from '../core'
-import { Screencast } from './browser-schemas'
+import { Screencast } from '../../../../shared/rpc-contract/browser-params'
import { BrowserError } from '../../../browser/browser-error'
import { BROWSER_UNAVAILABLE_ERROR_CODE } from '../../../../shared/runtime-types'
import { runtimeBrowserCommandsFactoryIsAvailable } from '../../runtime-browser-commands-factory'
diff --git a/src/main/runtime/rpc/methods/browser-text-rpc-methods.ts b/src/main/runtime/rpc/methods/browser-text-rpc-methods.ts
index 91f16ec18696..7f7cfb1249bd 100644
--- a/src/main/runtime/rpc/methods/browser-text-rpc-methods.ts
+++ b/src/main/runtime/rpc/methods/browser-text-rpc-methods.ts
@@ -1,6 +1,6 @@
import { defineMethod } from '../core'
import { assertRpcClipboardTextWriteWithinLimit } from '../rpc-clipboard-text-validation'
-import { Fill, KeyboardInsert, Type } from './browser-schemas'
+import { Fill, KeyboardInsert, Type } from '../../../../shared/rpc-contract/browser-params'
export const BROWSER_TEXT_METHODS = [
defineMethod({
diff --git a/src/main/runtime/rpc/methods/browser.test.ts b/src/main/runtime/rpc/methods/browser.test.ts
index 962d2ea1a113..e22f2495ac31 100644
--- a/src/main/runtime/rpc/methods/browser.test.ts
+++ b/src/main/runtime/rpc/methods/browser.test.ts
@@ -12,7 +12,13 @@ import {
import { BROWSER_CORE_METHODS } from './browser-core'
import { BROWSER_EXTRA_METHODS } from './browser-extras'
import { BROWSER_SCREENCAST_METHODS } from './browser-screencast'
-import { ClipboardWrite, Fill, KeyboardInsert, ProfileCreate, Type } from './browser-schemas'
+import {
+ ClipboardWrite,
+ Fill,
+ KeyboardInsert,
+ Type
+} from '../../../../shared/rpc-contract/browser-params'
+import { ProfileCreate } from '../../../../shared/rpc-contract/browser-identity-params'
function makeRequest(method: string, params?: unknown): RpcRequest {
return { id: 'req-1', authToken: 'tok', method, params }
diff --git a/src/main/runtime/rpc/methods/client-ui-schemas.ts b/src/main/runtime/rpc/methods/client-ui-schemas.ts
index f11bd7ca49cd..e079183e6c66 100644
--- a/src/main/runtime/rpc/methods/client-ui-schemas.ts
+++ b/src/main/runtime/rpc/methods/client-ui-schemas.ts
@@ -1,8 +1,4 @@
import type { UiUpdateFields } from '../../../../shared/rpc-contract/client-ui-params'
-export {
- FeatureInteractionIdParam,
- UiUpdate
-} from '../../../../shared/rpc-contract/client-ui-params'
// The key/value parity assertions over this live in ui-state-schema-parity-checks.ts.
export type UiUpdateFieldsSchema = typeof UiUpdateFields
diff --git a/src/main/runtime/rpc/methods/client-ui.ts b/src/main/runtime/rpc/methods/client-ui.ts
index 23f84843104a..8cbc3bce1ab7 100644
--- a/src/main/runtime/rpc/methods/client-ui.ts
+++ b/src/main/runtime/rpc/methods/client-ui.ts
@@ -17,7 +17,10 @@ import {
PRBotAuthorOverrideUpdate,
SettingsUpdate
} from '../../../../shared/rpc-contract/client-settings-params'
-import { FeatureInteractionIdParam, UiUpdate } from './client-ui-schemas'
+import {
+ FeatureInteractionIdParam,
+ UiUpdate
+} from '../../../../shared/rpc-contract/client-ui-params'
// Type-only side effect: keeps the schema/PersistedUIState parity assertions in
// the typecheck graph so drift fails the build instead of a paired client.
diff --git a/src/main/runtime/rpc/methods/clipboard.test.ts b/src/main/runtime/rpc/methods/clipboard.test.ts
index d68f06dbee07..46576db27ab1 100644
--- a/src/main/runtime/rpc/methods/clipboard.test.ts
+++ b/src/main/runtime/rpc/methods/clipboard.test.ts
@@ -16,8 +16,8 @@ vi.mock('../../../window/clipboard-image-temp-file', () => ({
saveClipboardImageBufferAsTempFile
}))
+import { CLIPBOARD_IMAGE_UPLOAD_CHUNK_BASE64_CHARS } from '../../../../shared/rpc-contract/clipboard-params'
import {
- CLIPBOARD_IMAGE_UPLOAD_CHUNK_BASE64_CHARS,
CLIPBOARD_IMAGE_UPLOAD_MAX_CONCURRENT,
CLIPBOARD_METHODS,
resetClipboardImageUploadsForTest
diff --git a/src/main/runtime/rpc/methods/clipboard.ts b/src/main/runtime/rpc/methods/clipboard.ts
index 55ba5761c678..f5797ebf966c 100644
--- a/src/main/runtime/rpc/methods/clipboard.ts
+++ b/src/main/runtime/rpc/methods/clipboard.ts
@@ -10,7 +10,6 @@ import {
StartImageUpload
} from '../../../../shared/rpc-contract/clipboard-params'
import { decodeClipboardImageUpload } from './clipboard-image-upload-decoding'
-export { CLIPBOARD_IMAGE_UPLOAD_CHUNK_BASE64_CHARS } from '../../../../shared/rpc-contract/clipboard-params'
export const CLIPBOARD_IMAGE_UPLOAD_MAX_CONCURRENT = 8
const CLIPBOARD_IMAGE_UPLOAD_TTL_MS = 5 * 60 * 1000
diff --git a/src/main/runtime/rpc/methods/orchestration-caller-workspace.ts b/src/main/runtime/rpc/methods/orchestration-caller-workspace.ts
index a3bbe7f01a38..9d6d496d2e8a 100644
--- a/src/main/runtime/rpc/methods/orchestration-caller-workspace.ts
+++ b/src/main/runtime/rpc/methods/orchestration-caller-workspace.ts
@@ -15,7 +15,7 @@
import type { OrcaRuntimeService } from '../../orca-runtime'
import type { OrchestrationSessionCaller } from '../../orchestration/orchestration-caller-identity'
-import { isStructuredWorkerHandle } from '../../structured-worker-identity'
+import { isStructuredWorkerHandle } from '../../../../shared/structured-worker-handle'
export async function resolveDispatchCallerWorktreeId(
runtime: Pick,
diff --git a/src/main/runtime/rpc/methods/orchestration/federation/federated-worker-release-host.ts b/src/main/runtime/rpc/methods/orchestration/federation/federated-worker-release-host.ts
index 918d4ef14f13..5557bab695f3 100644
--- a/src/main/runtime/rpc/methods/orchestration/federation/federated-worker-release-host.ts
+++ b/src/main/runtime/rpc/methods/orchestration/federation/federated-worker-release-host.ts
@@ -10,8 +10,8 @@ import {
} from '../../../../orchestration/worker-output-archive'
import type { WorkerTerminalReleaseRuntime } from '../../../../orchestration/worker-terminal-release-runtime'
import { readArchivedWorkerOutput } from '../worker/worker-archive-read'
+import { archiveSummary } from '../worker/worker-terminal-resource-presentation'
import {
- archiveSummary,
releaseUnknownRecovery,
type WorkerReleaseReceipt
} from '../worker/worker-release-completion'
diff --git a/src/main/runtime/rpc/methods/orchestration/federation/federation-attachment-observation.ts b/src/main/runtime/rpc/methods/orchestration/federation/federation-attachment-observation.ts
index 5a09137782e5..da7beb0bb7fd 100644
--- a/src/main/runtime/rpc/methods/orchestration/federation/federation-attachment-observation.ts
+++ b/src/main/runtime/rpc/methods/orchestration/federation/federation-attachment-observation.ts
@@ -1,7 +1,7 @@
import type { RuntimeTerminalInteractiveWait } from '../../../../../../shared/runtime-types'
import type { WorkerTerminalReleaseRuntime } from '../../../../orchestration/worker-terminal-release-runtime'
import { OrchestrationError } from '../../../../orchestration/orchestration-error'
-import { parseWorkerTerminalHostScope } from '../../../../orchestration/worker-terminal-process-liveness'
+import { parseWorkerTerminalHostScope } from '../../../../../../shared/worker-terminal-host-scope'
import type { RemoteDispatchAttachmentRow } from '../../../../orchestration/types'
import { orchestrationTimestampToMs } from '../worker/worker-output'
diff --git a/src/main/runtime/rpc/methods/orchestration/messaging/message-methods.ts b/src/main/runtime/rpc/methods/orchestration/messaging/message-methods.ts
index 507fef56b2fd..f8dd5776fa68 100644
--- a/src/main/runtime/rpc/methods/orchestration/messaging/message-methods.ts
+++ b/src/main/runtime/rpc/methods/orchestration/messaging/message-methods.ts
@@ -8,7 +8,7 @@ import { orchestrationCallerIdentity, resolveRunScope } from '../runs/run-scope'
import {
readMutationReplayNudge,
stripMutationReplayNudge
-} from '../../../orchestration-mutation-executor'
+} from '../../../orchestration-mutation-receipt'
import { exposeMessage } from './mailbox-message-receipt'
import { resolveOrchestrationParty } from '../../../../orchestration/orchestration-party'
import { recordReceiptBeforeNudge, replayMutationNudge } from './mutation-replay-nudge'
diff --git a/src/main/runtime/rpc/methods/orchestration/messaging/send-methods.ts b/src/main/runtime/rpc/methods/orchestration/messaging/send-methods.ts
index 35ca12372278..d10ad61ae4dd 100644
--- a/src/main/runtime/rpc/methods/orchestration/messaging/send-methods.ts
+++ b/src/main/runtime/rpc/methods/orchestration/messaging/send-methods.ts
@@ -19,7 +19,7 @@ import {
readMutationReplayNudge,
readWorkerDoneReplayNudge,
stripMutationReplayNudge
-} from '../../../orchestration-mutation-executor'
+} from '../../../orchestration-mutation-receipt'
import { replayMutationNudge } from './mutation-replay-nudge'
import { sendRemoteMessage } from './send-remote'
import { mayNameSession } from './session-recipient'
diff --git a/src/main/runtime/rpc/methods/orchestration/worker/explicit-worker-terminal-validation.ts b/src/main/runtime/rpc/methods/orchestration/worker/explicit-worker-terminal-validation.ts
index a3ee27827f5b..d49487461400 100644
--- a/src/main/runtime/rpc/methods/orchestration/worker/explicit-worker-terminal-validation.ts
+++ b/src/main/runtime/rpc/methods/orchestration/worker/explicit-worker-terminal-validation.ts
@@ -1,6 +1,6 @@
import type { OrcaRuntimeService } from '../../../../orca-runtime'
import { OrchestrationError } from '../../../../orchestration/orchestration-error'
-import { isStructuredWorkerHandle } from '../../../../structured-worker-identity'
+import { isStructuredWorkerHandle } from '../../../../../../shared/structured-worker-handle'
import type { OrchestrationCallerIdentity } from '../../../../orchestration/orchestration-caller-identity'
import type { OrchestrationDb } from '../../../../orchestration/db'
import type { OrcaSessionId } from '../../../../../../shared/orca-session-address'
diff --git a/src/main/runtime/rpc/methods/orchestration/worker/retried-worker-terminal-release.ts b/src/main/runtime/rpc/methods/orchestration/worker/retried-worker-terminal-release.ts
index a8f21eea3670..4f8c5af4f420 100644
--- a/src/main/runtime/rpc/methods/orchestration/worker/retried-worker-terminal-release.ts
+++ b/src/main/runtime/rpc/methods/orchestration/worker/retried-worker-terminal-release.ts
@@ -1,6 +1,6 @@
import type { OrcaRuntimeService } from '../../../../orca-runtime'
import type { OrchestrationDb } from '../../../../orchestration/db'
-import { isStructuredWorkerHandle } from '../../../../structured-worker-identity'
+import { isStructuredWorkerHandle } from '../../../../../../shared/structured-worker-handle'
import { completeWorkerTerminalRelease } from './worker-release-completion'
/**
diff --git a/src/main/runtime/rpc/methods/orchestration/worker/worker-control.ts b/src/main/runtime/rpc/methods/orchestration/worker/worker-control.ts
index 7482f573cccd..c9d7ff3231b6 100644
--- a/src/main/runtime/rpc/methods/orchestration/worker/worker-control.ts
+++ b/src/main/runtime/rpc/methods/orchestration/worker/worker-control.ts
@@ -15,7 +15,7 @@ import { readStructuredWorkerOutput } from '../../orchestration-structured-worke
import { releaseStructuredWorkerSession } from '../../orchestration-structured-worker-session'
import { sessionIdFromStructuredWorkerIncarnation } from '../../../../structured-worker-identity'
import { readExactWorkerOutput } from './worker-output'
-import { exposeWorkerTerminalResource } from './worker-release-completion'
+import { exposeWorkerTerminalResource } from './worker-terminal-resource-presentation'
import { readFederatedWorkerOutput } from '../federation/federated-worker-read'
import { showFederatedWorker } from '../federation/federated-worker-show'
import {
diff --git a/src/main/runtime/rpc/methods/orchestration/worker/worker-launch-preferences.test.ts b/src/main/runtime/rpc/methods/orchestration/worker/worker-launch-preferences.test.ts
index f79094d8d868..395ee332be90 100644
--- a/src/main/runtime/rpc/methods/orchestration/worker/worker-launch-preferences.test.ts
+++ b/src/main/runtime/rpc/methods/orchestration/worker/worker-launch-preferences.test.ts
@@ -9,7 +9,7 @@ import {
resolveFederatedWorkerLaunchReceipt,
resolveWorkerLaunchPreferences
} from './worker-launch-preferences'
-import { WorkerStartParams } from './worker-start-schema'
+import { WorkerStartParams } from '../../../../../../shared/rpc-contract/orchestration-worker-start-params'
describe('orchestration worker launch preferences', () => {
it('passes a discovered OMP model through the existing launch arguments and receipt', () => {
diff --git a/src/main/runtime/rpc/methods/orchestration/worker/worker-list-method.ts b/src/main/runtime/rpc/methods/orchestration/worker/worker-list-method.ts
index 3520ae7e0499..bc30a0a667cc 100644
--- a/src/main/runtime/rpc/methods/orchestration/worker/worker-list-method.ts
+++ b/src/main/runtime/rpc/methods/orchestration/worker/worker-list-method.ts
@@ -22,7 +22,7 @@ import {
} from './worker-list-snapshot-store'
import { projectWorkerFleet, type WorkerListPageParams } from './worker-list-projection'
import { chatAssigneeObserver } from './session-worker-observation'
-import { exposeWorkerTerminalResource } from './worker-release-completion'
+import { exposeWorkerTerminalResource } from './worker-terminal-resource-presentation'
import {
WORKER_TERMINAL_LIST_STATES,
WorkerListParams
diff --git a/src/main/runtime/rpc/methods/orchestration/worker/worker-observation.ts b/src/main/runtime/rpc/methods/orchestration/worker/worker-observation.ts
index dd3c253fc4ce..791f469a383d 100644
--- a/src/main/runtime/rpc/methods/orchestration/worker/worker-observation.ts
+++ b/src/main/runtime/rpc/methods/orchestration/worker/worker-observation.ts
@@ -2,7 +2,7 @@ import type { RuntimeTerminalInteractiveWait } from '../../../../../../shared/ru
import type { WorkerTerminalReleaseRuntime } from '../../../../orchestration/worker-terminal-release-runtime'
import type { OrchestrationDb } from '../../../../orchestration/db'
import { OrchestrationError } from '../../../../orchestration/orchestration-error'
-import { parseWorkerTerminalHostScope } from '../../../../orchestration/worker-terminal-process-liveness'
+import { parseWorkerTerminalHostScope } from '../../../../../../shared/worker-terminal-host-scope'
import type { OrchestrationFleetWorker } from '../../../../../../shared/orchestration-fleet-projection'
import { projectWorkerFleet } from './worker-list-projection'
import { observeChatAssignee } from '../../../../orchestration/chat-assignee'
diff --git a/src/main/runtime/rpc/methods/orchestration/worker/worker-release-completion.ts b/src/main/runtime/rpc/methods/orchestration/worker/worker-release-completion.ts
index aaa3cfb1bac7..324824b22ba3 100644
--- a/src/main/runtime/rpc/methods/orchestration/worker/worker-release-completion.ts
+++ b/src/main/runtime/rpc/methods/orchestration/worker/worker-release-completion.ts
@@ -15,14 +15,9 @@ import { classifyWorkerTerminalCloseError } from './worker-release-close-error'
import { workerTerminalLeaseIsCurrent } from './worker-terminal-release-lease'
import { resolveStructuredWorkerForDispatch } from '../../orchestration-structured-worker-lifecycle'
import { stopStructuredWorkerForRelease } from './structured-worker-release-stop'
-import { isStructuredWorkerHandle } from '../../../../structured-worker-identity'
+import { isStructuredWorkerHandle } from '../../../../../../shared/structured-worker-handle'
import { captureWorkerReleaseArchive } from './worker-release-archive-capture'
-export {
- archiveSummary,
- exposeWorkerTerminalResource
-} from './worker-terminal-resource-presentation'
-
export type WorkerReleaseReceipt = {
dispatchId: string
state: 'released' | 'already_released' | 'retained' | 'release_pending' | 'release_unknown'
diff --git a/src/main/runtime/rpc/methods/orchestration/worker/worker-release.ts b/src/main/runtime/rpc/methods/orchestration/worker/worker-release.ts
index b0f08dffea3b..e2f852fbf3b6 100644
--- a/src/main/runtime/rpc/methods/orchestration/worker/worker-release.ts
+++ b/src/main/runtime/rpc/methods/orchestration/worker/worker-release.ts
@@ -3,8 +3,8 @@ import { defineMethod } from '../../../core'
import { releaseFederatedWorker } from '../federation/federated-worker-release'
import { ORCHESTRATION_WORKER_LIST_METHOD } from './worker-list-method'
import { resolvePinnedFederatedServer } from './worker-observation'
+import { archiveSummary } from './worker-terminal-resource-presentation'
import {
- archiveSummary,
completeWorkerTerminalRelease,
type WorkerReleaseReceipt
} from './worker-release-completion'
diff --git a/src/main/runtime/rpc/methods/orchestration/worker/worker-start-agent-placement-teardown.test.ts b/src/main/runtime/rpc/methods/orchestration/worker/worker-start-agent-placement-teardown.test.ts
index 65ed0403d73a..978c4dfdd9d0 100644
--- a/src/main/runtime/rpc/methods/orchestration/worker/worker-start-agent-placement-teardown.test.ts
+++ b/src/main/runtime/rpc/methods/orchestration/worker/worker-start-agent-placement-teardown.test.ts
@@ -11,7 +11,7 @@ import type { OrcaRuntimeService } from '../../../../orca-runtime'
import type { OrchestrationDb } from '../../../../orchestration/db'
import type * as StructuredWorkerSessionModule from '../../orchestration-structured-worker-session'
import { structuredWorkerIdentities } from '../../../../structured-worker-identity'
-import { WorkerStartParams } from './worker-start-schema'
+import { WorkerStartParams } from '../../../../../../shared/rpc-contract/orchestration-worker-start-params'
const discard = vi.hoisted(() => vi.fn(async (_sessionId: string) => {}))
const surfaced = vi.hoisted((): { sessionId: string | null } => ({ sessionId: null }))
diff --git a/src/main/runtime/rpc/methods/orchestration/worker/worker-start-launch-executor-parity.test.ts b/src/main/runtime/rpc/methods/orchestration/worker/worker-start-launch-executor-parity.test.ts
index 5b534d8b0230..2e4b47b08fba 100644
--- a/src/main/runtime/rpc/methods/orchestration/worker/worker-start-launch-executor-parity.test.ts
+++ b/src/main/runtime/rpc/methods/orchestration/worker/worker-start-launch-executor-parity.test.ts
@@ -15,7 +15,7 @@ import type { OrchestrationDb } from '../../../../orchestration/db'
import { WORKER_START_VOCABULARY } from '../../orchestration-worker-start-mode'
import { structuredWorkerIdentities } from '../../../../structured-worker-identity'
import type { WorkerEffect } from './worker-topology'
-import { WorkerStartParams } from './worker-start-schema'
+import { WorkerStartParams } from '../../../../../../shared/rpc-contract/orchestration-worker-start-params'
const sessionCreate = vi.hoisted((): { refusal: { code: string } | null } => ({ refusal: null }))
diff --git a/src/main/runtime/rpc/methods/orchestration/worker/worker-start-receipt.ts b/src/main/runtime/rpc/methods/orchestration/worker/worker-start-receipt.ts
index e7d6b0d31edd..8f27496c68b8 100644
--- a/src/main/runtime/rpc/methods/orchestration/worker/worker-start-receipt.ts
+++ b/src/main/runtime/rpc/methods/orchestration/worker/worker-start-receipt.ts
@@ -2,7 +2,7 @@ import type { OrchestrationDb } from '../../../../orchestration/db'
import { isUnknownWorkerStartOutcome, type WorkerSetupReceipt } from './worker-topology'
import type { OrchestrationWorkerLaunchReceipt } from './worker-launch-preferences'
import type { WorkerStartModeReceipt } from '../../orchestration-worker-start-mode'
-import { isStructuredWorkerHandle } from '../../../../structured-worker-identity'
+import { isStructuredWorkerHandle } from '../../../../../../shared/structured-worker-handle'
export function failWorkerStartWithReceipt(args: {
db: OrchestrationDb
diff --git a/src/main/runtime/rpc/methods/orchestration/worker/worker-start-schema.ts b/src/main/runtime/rpc/methods/orchestration/worker/worker-start-schema.ts
index b0f5328801d6..105d46e90f6c 100644
--- a/src/main/runtime/rpc/methods/orchestration/worker/worker-start-schema.ts
+++ b/src/main/runtime/rpc/methods/orchestration/worker/worker-start-schema.ts
@@ -1,6 +1,4 @@
import type { z } from 'zod'
-import { WorkerStartParams } from '../../../../../../shared/rpc-contract/orchestration-worker-start-params'
-export { OptionalWorkerLaunchPreference } from '../../../../../../shared/rpc-contract/orchestration-worker-start-params'
-export { WorkerStartParams }
+import type { WorkerStartParams } from '../../../../../../shared/rpc-contract/orchestration-worker-start-params'
export type WorkerStartInput = z.infer
diff --git a/src/main/runtime/rpc/methods/orchestration/worker/worker-stop.ts b/src/main/runtime/rpc/methods/orchestration/worker/worker-stop.ts
index dbb94c2726f6..c0f1fde7e02c 100644
--- a/src/main/runtime/rpc/methods/orchestration/worker/worker-stop.ts
+++ b/src/main/runtime/rpc/methods/orchestration/worker/worker-stop.ts
@@ -9,7 +9,7 @@ import {
resolveStructuredWorkerForDispatch,
stopStructuredWorker
} from '../../orchestration-structured-worker-lifecycle'
-import { isStructuredWorkerHandle } from '../../../../structured-worker-identity'
+import { isStructuredWorkerHandle } from '../../../../../../shared/structured-worker-handle'
import { WorkerDispatchParams } from '../../../../../../shared/rpc-contract/orchestration-worker-stop-params'
export const ORCHESTRATION_WORKER_STOP_METHODS = [
diff --git a/src/main/runtime/rpc/methods/orchestration/worker/worker-terminal-release-lease.ts b/src/main/runtime/rpc/methods/orchestration/worker/worker-terminal-release-lease.ts
index 104aca91560d..dbcc05aa36af 100644
--- a/src/main/runtime/rpc/methods/orchestration/worker/worker-terminal-release-lease.ts
+++ b/src/main/runtime/rpc/methods/orchestration/worker/worker-terminal-release-lease.ts
@@ -3,7 +3,7 @@ import type { OrchestrationDb } from '../../../../orchestration/db'
import type { WorkerTerminalResourceRow } from '../../../../orchestration/worker-terminal-ownership'
import type { WorkerDispatchRow } from '../../../../orchestration/types'
import { resolveStructuredWorkerIdentity } from '../../../../structured-worker-authority'
-import { isStructuredWorkerHandle } from '../../../../structured-worker-identity'
+import { isStructuredWorkerHandle } from '../../../../../../shared/structured-worker-handle'
export function workerTerminalLeaseIsCurrent(
runtime: WorkerTerminalReleaseRuntime,
diff --git a/src/main/runtime/rpc/methods/orchestration/worker/workers.ts b/src/main/runtime/rpc/methods/orchestration/worker/workers.ts
index 3d6a2b24a5a4..64d2b14e1bdd 100644
--- a/src/main/runtime/rpc/methods/orchestration/worker/workers.ts
+++ b/src/main/runtime/rpc/methods/orchestration/worker/workers.ts
@@ -7,7 +7,7 @@ import {
readWorkerStartModeSettings
} from '../../orchestration-worker-start-mode'
import { resolveOrchestrationCaller } from '../runs/run-scope'
-import { WorkerStartParams } from './worker-start-schema'
+import { WorkerStartParams } from '../../../../../../shared/rpc-contract/orchestration-worker-start-params'
import {
isWorkerStartTimeoutWithinTimerLimit,
resolveWorkerStartReadinessTimeoutMs
diff --git a/src/main/runtime/rpc/methods/workspace-cleanup-ui-schema.test.ts b/src/main/runtime/rpc/methods/workspace-cleanup-ui-schema.test.ts
index e69da50f3618..951cb5da796d 100644
--- a/src/main/runtime/rpc/methods/workspace-cleanup-ui-schema.test.ts
+++ b/src/main/runtime/rpc/methods/workspace-cleanup-ui-schema.test.ts
@@ -1,6 +1,6 @@
import { describe, expect, it } from 'vitest'
-import { UiUpdate } from './client-ui-schemas'
-import { WorkspaceCleanup } from './workspace-cleanup-ui-schema'
+import { UiUpdate } from '../../../../shared/rpc-contract/client-ui-params'
+import { WorkspaceCleanup } from '../../../../shared/rpc-contract/workspace-cleanup-ui-params'
import { createDefaultWorkspaceCleanupBrowseState } from '../../../../shared/workspace-cleanup-browse-state'
const DISMISSAL = {
diff --git a/src/main/runtime/rpc/methods/workspace-cleanup-ui-schema.ts b/src/main/runtime/rpc/methods/workspace-cleanup-ui-schema.ts
deleted file mode 100644
index 11e6cab4ee36..000000000000
--- a/src/main/runtime/rpc/methods/workspace-cleanup-ui-schema.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { WorkspaceCleanup } from '../../../../shared/rpc-contract/workspace-cleanup-ui-params'
diff --git a/src/main/runtime/rpc/mobile-auth-acl-critical-path.test.ts b/src/main/runtime/rpc/mobile-auth-acl-critical-path.test.ts
index c0d53a0796e9..8af9227695e3 100644
--- a/src/main/runtime/rpc/mobile-auth-acl-critical-path.test.ts
+++ b/src/main/runtime/rpc/mobile-auth-acl-critical-path.test.ts
@@ -16,7 +16,7 @@ import {
import { createFakeWindowsSecurity } from '../../../shared/windows-security-addon.test-fixture'
import { DEVICE_REGISTRY_FILENAME } from '../mobile-pairing-files'
import { DeviceRegistry, type DeviceEntry } from '../device-registry'
-import { decrypt, deriveSharedKey, encrypt, generateKeyPair } from './e2ee-crypto'
+import { decrypt, deriveSharedKey, encrypt, generateKeyPair } from '../../../shared/e2ee-crypto'
import { MobileSocketWiring, type MobileSocketTransport } from './mobile-socket-wiring'
vi.mock('@orca/process-host', () => ({
diff --git a/src/main/runtime/rpc/mobile-e2ee-auth-validation.ts b/src/main/runtime/rpc/mobile-e2ee-auth-validation.ts
index 18e15fa62810..506319e199ee 100644
--- a/src/main/runtime/rpc/mobile-e2ee-auth-validation.ts
+++ b/src/main/runtime/rpc/mobile-e2ee-auth-validation.ts
@@ -1,5 +1,5 @@
import type { DesktopMobileE2EEV2Session } from './mobile-e2ee-v2-desktop-session'
-import { publicKeyFromBase64 } from './e2ee-crypto'
+import { publicKeyFromBase64 } from '../../../shared/e2ee-crypto'
import { parseRemoteRuntimeJsonText } from '../../../shared/remote-runtime-request-frames'
import { isDeviceProofB64, verifyDeviceProof } from '../../../shared/device-key-proof'
diff --git a/src/main/runtime/rpc/mobile-e2ee-desktop-outbound-owner.ts b/src/main/runtime/rpc/mobile-e2ee-desktop-outbound-owner.ts
index ee076381f438..bfe85f68cae2 100644
--- a/src/main/runtime/rpc/mobile-e2ee-desktop-outbound-owner.ts
+++ b/src/main/runtime/rpc/mobile-e2ee-desktop-outbound-owner.ts
@@ -1,7 +1,7 @@
import type { WebSocket } from 'ws'
import type { WsOutboundBackpressureQueue } from '../../../shared/ws-outbound-backpressure-queue'
import { createLegacyMobileE2EEReplyQueue } from './mobile-e2ee-outbound-admission'
-import { encryptBytes } from './e2ee-crypto'
+import { encryptBytes } from '../../../shared/e2ee-crypto'
import {
createDesktopMobileE2EEV2OutboundQueue,
desktopMobileE2EEV2OutboundItemBytes,
diff --git a/src/main/runtime/rpc/mobile-e2ee-legacy-reply-senders.ts b/src/main/runtime/rpc/mobile-e2ee-legacy-reply-senders.ts
index 629ea9ce6373..65d56c496bdf 100644
--- a/src/main/runtime/rpc/mobile-e2ee-legacy-reply-senders.ts
+++ b/src/main/runtime/rpc/mobile-e2ee-legacy-reply-senders.ts
@@ -1,5 +1,5 @@
import type { WebSocket } from 'ws'
-import { encrypt } from './e2ee-crypto'
+import { encrypt } from '../../../shared/e2ee-crypto'
import type { MobileE2EEDesktopOutboundOwner } from './mobile-e2ee-desktop-outbound-owner'
import {
isMobileE2EEBinaryPayloadWithinLimit,
diff --git a/src/main/runtime/rpc/mobile-e2ee-v2-desktop-session.test.ts b/src/main/runtime/rpc/mobile-e2ee-v2-desktop-session.test.ts
index 94c5c11d767c..fc6c85d060c7 100644
--- a/src/main/runtime/rpc/mobile-e2ee-v2-desktop-session.test.ts
+++ b/src/main/runtime/rpc/mobile-e2ee-v2-desktop-session.test.ts
@@ -1,6 +1,6 @@
import { describe, expect, it, vi } from 'vitest'
import nacl from 'tweetnacl'
-import { deriveSharedKey } from './e2ee-crypto'
+import { deriveSharedKey } from '../../../shared/e2ee-crypto'
import { deriveMobileE2EEV2KeySchedule } from '../../../shared/mobile-e2ee-v2-node-key-schedule'
import {
encodeMobileE2EEV2Transcript,
diff --git a/src/main/runtime/rpc/mobile-e2ee-v2-desktop-session.ts b/src/main/runtime/rpc/mobile-e2ee-v2-desktop-session.ts
index 093653a1afce..5a9ef6b10754 100644
--- a/src/main/runtime/rpc/mobile-e2ee-v2-desktop-session.ts
+++ b/src/main/runtime/rpc/mobile-e2ee-v2-desktop-session.ts
@@ -10,7 +10,7 @@ import {
openMobileE2EEV2Frame,
sealMobileE2EEV2Frame
} from '../../../shared/mobile-e2ee-v2-framing'
-import { deriveSharedKey } from './e2ee-crypto'
+import { deriveSharedKey } from '../../../shared/e2ee-crypto'
import { deriveMobileE2EEV2KeySchedule } from '../../../shared/mobile-e2ee-v2-node-key-schedule'
import { REMOTE_RUNTIME_MAX_OUTBOUND_JSON_BYTES } from '../../../shared/remote-runtime-memory-limits'
diff --git a/src/main/runtime/rpc/mobile-socket-wiring.test.ts b/src/main/runtime/rpc/mobile-socket-wiring.test.ts
index beeda8df4c97..08580eb8d856 100644
--- a/src/main/runtime/rpc/mobile-socket-wiring.test.ts
+++ b/src/main/runtime/rpc/mobile-socket-wiring.test.ts
@@ -9,7 +9,7 @@ import {
} from '../../../shared/mobile-e2ee-v2-contract'
import { sealMobileE2EEV2Frame } from '../../../shared/mobile-e2ee-v2-framing'
import type { DeviceRegistry } from '../device-registry'
-import { deriveSharedKey, encrypt, generateKeyPair } from './e2ee-crypto'
+import { deriveSharedKey, encrypt, generateKeyPair } from '../../../shared/e2ee-crypto'
import { deriveMobileE2EEV2KeySchedule } from '../../../shared/mobile-e2ee-v2-node-key-schedule'
import {
MobileSocketWiring,
diff --git a/src/main/runtime/rpc/orchestration-mutation-executor.ts b/src/main/runtime/rpc/orchestration-mutation-executor.ts
index 7db0c9f47d8d..479eff72422b 100644
--- a/src/main/runtime/rpc/orchestration-mutation-executor.ts
+++ b/src/main/runtime/rpc/orchestration-mutation-executor.ts
@@ -19,12 +19,6 @@ import {
shouldObserveCompletedMutation
} from './orchestration-mutation-receipt'
-export {
- readMutationReplayNudge,
- readWorkerDoneReplayNudge,
- stripMutationReplayNudge
-} from './orchestration-mutation-receipt'
-
export type DurableMutationInvocation = {
identity: {
callerFingerprint: string
diff --git a/src/main/runtime/rpc/schemas.test.ts b/src/main/runtime/rpc/schemas.test.ts
index 8de0752434f6..207cec8a2817 100644
--- a/src/main/runtime/rpc/schemas.test.ts
+++ b/src/main/runtime/rpc/schemas.test.ts
@@ -15,7 +15,7 @@ import {
TabClose,
TabSwitch,
Wait
-} from './methods/browser-schemas'
+} from '../../../shared/rpc-contract/browser-params'
import { TERMINAL_METHODS } from './methods/terminal'
import { TERMINAL_ORPHAN_METHODS } from './methods/terminal-orphan'
import { WORKTREE_METHODS } from './methods/worktree'
diff --git a/src/main/runtime/rpc/web-session-pairing.test.ts b/src/main/runtime/rpc/web-session-pairing.test.ts
index 7491a7ab3ead..af4215c3ab28 100644
--- a/src/main/runtime/rpc/web-session-pairing.test.ts
+++ b/src/main/runtime/rpc/web-session-pairing.test.ts
@@ -9,7 +9,7 @@ import { DeviceRegistry } from '../device-registry'
import { EPHEMERAL_DEVICE_IDLE_MS } from '../ephemeral-device-rows'
import { SimulatedMobileE2EEV2Peer } from '../mobile-cloud-relay/simulated-mobile-e2ee-v2-peer'
import { registerSocketDeviceKey } from '../runtime-rpc/runtime-rpc-device-key-registration'
-import { generateKeyPair } from './e2ee-crypto'
+import { generateKeyPair } from '../../../shared/e2ee-crypto'
import {
MobileSocketWiring,
type AuthenticatedMobileSocket,
diff --git a/src/main/runtime/runtime-git-execution-host-ownership.test.ts b/src/main/runtime/runtime-git-execution-host-ownership.test.ts
index b9818313bc65..0dc58b7a5800 100644
--- a/src/main/runtime/runtime-git-execution-host-ownership.test.ts
+++ b/src/main/runtime/runtime-git-execution-host-ownership.test.ts
@@ -2,7 +2,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest'
import type { GlobalSettings } from '../../shared/global-settings-types'
import type * as GitRemoteModule from '../git/remote'
import type * as GitStatusModule from '../git/status'
-import type { ResolvedRuntimeGitWorktree } from './orca-runtime-git'
+import type { ResolvedRuntimeGitWorktree } from './runtime-git-command-target'
import { RuntimeGitCommands } from './orca-runtime-git'
import { SSH_HOST_NOT_SERVED_MESSAGE } from '../providers/ssh-host-not-served-error'
diff --git a/src/main/runtime/runtime-mobile-notification-controller.ts b/src/main/runtime/runtime-mobile-notification-controller.ts
index 605b38a9f49a..90792771dbea 100644
--- a/src/main/runtime/runtime-mobile-notification-controller.ts
+++ b/src/main/runtime/runtime-mobile-notification-controller.ts
@@ -15,10 +15,8 @@ import type {
import { MobileNotificationReplayBuffer } from './mobile-notification-replay'
import { notifyRuntimeListeners } from './runtime-async-boundaries'
import { getRuntimeDesktopSurface } from './runtime-desktop-surface'
-import {
- MobileNotificationDismissalStore,
- type DeliveredNotificationIdentity
-} from './mobile-notification-dismissal-store'
+import { MobileNotificationDismissalStore } from './mobile-notification-dismissal-store'
+import type { DeliveredNotificationIdentity } from '../../shared/mobile-notification-identity'
export type MobileNotificationDispatchEvent = {
type: 'notification'
diff --git a/src/main/runtime/runtime-mobile-session-result-finalization.ts b/src/main/runtime/runtime-mobile-session-result-finalization.ts
index 1848ae567935..29a336bdaf46 100644
--- a/src/main/runtime/runtime-mobile-session-result-finalization.ts
+++ b/src/main/runtime/runtime-mobile-session-result-finalization.ts
@@ -1,5 +1,5 @@
import type { RuntimeMobileSessionTabsResult } from '../../shared/runtime-types'
-import { dropRetirementProofsForLiveSurfaces } from './mobile-session-terminal-retirement-proof'
+import { dropRetirementProofsForLiveSurfaces } from '../../shared/terminal-retirement-proof-ledger'
import type {
RuntimeMobileSessionProjectionHost,
RuntimeMobileSessionProjectionInput
diff --git a/src/main/runtime/runtime-rpc-browser-host-admission.test.ts b/src/main/runtime/runtime-rpc-browser-host-admission.test.ts
index 93f2b63fe63c..a5c9a6703ed3 100644
--- a/src/main/runtime/runtime-rpc-browser-host-admission.test.ts
+++ b/src/main/runtime/runtime-rpc-browser-host-admission.test.ts
@@ -8,7 +8,8 @@ import type { WebSocket } from 'ws'
import { DeviceRegistry } from './device-registry'
import { OrcaRuntimeService } from './orca-runtime'
import { defineStreamingMethod, type RpcRequest } from './rpc/core'
-import { classifyRuntimeLongPoll, OrcaRuntimeRpcServer } from './runtime-rpc'
+import { classifyRuntimeLongPoll } from './runtime-rpc/runtime-rpc-long-poll'
+import { OrcaRuntimeRpcServer } from './runtime-rpc'
import { withCurrentOrchestrationContract } from './runtime-rpc-test-harness'
const request = (method: string, params?: unknown): RpcRequest => ({
diff --git a/src/main/runtime/runtime-rpc-device-revocation.test.ts b/src/main/runtime/runtime-rpc-device-revocation.test.ts
index bde1ec7f697d..af3d342a2300 100644
--- a/src/main/runtime/runtime-rpc-device-revocation.test.ts
+++ b/src/main/runtime/runtime-rpc-device-revocation.test.ts
@@ -5,7 +5,7 @@ import { describe, expect, it, vi } from 'vitest'
import { OrcaRuntimeService } from './orca-runtime'
import { OrcaRuntimeRpcServer } from './runtime-rpc'
import { parsePairingCode } from '../../shared/pairing'
-import { generateKeyPair } from './rpc/e2ee-crypto'
+import { generateKeyPair } from '../../shared/e2ee-crypto'
import { waitFor } from './runtime-rpc-test-harness'
import {
connectWs,
diff --git a/src/main/runtime/runtime-rpc-dispatch-inject-long-poll.test.ts b/src/main/runtime/runtime-rpc-dispatch-inject-long-poll.test.ts
index e609ef178a69..a3583cb7df0e 100644
--- a/src/main/runtime/runtime-rpc-dispatch-inject-long-poll.test.ts
+++ b/src/main/runtime/runtime-rpc-dispatch-inject-long-poll.test.ts
@@ -4,7 +4,8 @@ import { join } from 'node:path'
import { describe, expect, it, vi } from 'vitest'
import { OrcaRuntimeService } from './orca-runtime'
import { readRuntimeMetadata } from './runtime-metadata'
-import { classifyRuntimeLongPoll, OrcaRuntimeRpcServer } from './runtime-rpc'
+import { classifyRuntimeLongPoll } from './runtime-rpc/runtime-rpc-long-poll'
+import { OrcaRuntimeRpcServer } from './runtime-rpc'
import { openFramedSession, sleep } from './runtime-rpc-test-harness'
// `dispatch --inject` into a chat waits for its agent to accept the turn, which can outlast the
diff --git a/src/main/runtime/runtime-rpc-long-poll-transport.test.ts b/src/main/runtime/runtime-rpc-long-poll-transport.test.ts
index 5ea6035caab8..3451b8f99bf6 100644
--- a/src/main/runtime/runtime-rpc-long-poll-transport.test.ts
+++ b/src/main/runtime/runtime-rpc-long-poll-transport.test.ts
@@ -7,7 +7,7 @@ import { describe, expect, it, vi } from 'vitest'
import { OrcaRuntimeService } from './orca-runtime'
import { OrchestrationDb } from './orchestration/db'
import { readRuntimeMetadata } from './runtime-metadata'
-import { classifyRuntimeLongPoll } from './runtime-rpc'
+import { classifyRuntimeLongPoll } from './runtime-rpc/runtime-rpc-long-poll'
import { createLongPollServer as createServer } from './runtime-rpc-long-poll-server.test-fixture'
import {
sendRequest,
diff --git a/src/main/runtime/runtime-rpc-metadata-lifecycle.test.ts b/src/main/runtime/runtime-rpc-metadata-lifecycle.test.ts
index ac8ceb112fe4..728a55032c02 100644
--- a/src/main/runtime/runtime-rpc-metadata-lifecycle.test.ts
+++ b/src/main/runtime/runtime-rpc-metadata-lifecycle.test.ts
@@ -6,7 +6,8 @@ import { describe, expect, it, vi } from 'vitest'
import { OrcaRuntimeService } from './orca-runtime'
import * as runtimeMetadataModule from './runtime-metadata'
import { readRuntimeMetadata, writeRuntimeMetadata } from './runtime-metadata'
-import { createRuntimeTransportMetadata, OrcaRuntimeRpcServer } from './runtime-rpc'
+import { createRuntimeTransportMetadata } from './runtime-rpc/runtime-rpc-socket-metadata'
+import { OrcaRuntimeRpcServer } from './runtime-rpc'
import type { DeviceRegistry } from './device-registry'
import type { RuntimeMetadata } from '../../shared/runtime-bootstrap'
diff --git a/src/main/runtime/runtime-rpc-mobile-ws-test-harness.ts b/src/main/runtime/runtime-rpc-mobile-ws-test-harness.ts
index f32a181f79a6..61c630d991f5 100644
--- a/src/main/runtime/runtime-rpc-mobile-ws-test-harness.ts
+++ b/src/main/runtime/runtime-rpc-mobile-ws-test-harness.ts
@@ -1,7 +1,7 @@
import { expect } from 'vitest'
import WebSocket from 'ws'
import { parsePairingCode } from '../../shared/pairing'
-import { decrypt, deriveSharedKey, encrypt, generateKeyPair } from './rpc/e2ee-crypto'
+import { decrypt, deriveSharedKey, encrypt, generateKeyPair } from '../../shared/e2ee-crypto'
export function connectWs(endpoint: string): Promise {
return new Promise((resolve, reject) => {
diff --git a/src/main/runtime/runtime-rpc-websocket-reply-size-limit.test.ts b/src/main/runtime/runtime-rpc-websocket-reply-size-limit.test.ts
index dac8287d3548..569951e10d66 100644
--- a/src/main/runtime/runtime-rpc-websocket-reply-size-limit.test.ts
+++ b/src/main/runtime/runtime-rpc-websocket-reply-size-limit.test.ts
@@ -9,7 +9,7 @@ import { OrcaRuntimeRpcServer } from './runtime-rpc'
import { DeviceRegistry } from './device-registry'
import { FILE_METHODS } from './rpc/methods/files'
import { E2EEChannel } from './rpc/e2ee-channel'
-import { decrypt, deriveSharedKey, encrypt, generateKeyPair } from './rpc/e2ee-crypto'
+import { decrypt, deriveSharedKey, encrypt, generateKeyPair } from '../../shared/e2ee-crypto'
import { REMOTE_RUNTIME_MAX_OUTBOUND_JSON_BYTES } from '../../shared/remote-runtime-memory-limits'
import type { DirEntry } from '../../shared/filesystem-entry-types'
import { RUNTIME_RPC_REPLY_TOO_LARGE_CODE } from './runtime-rpc/runtime-rpc-reply-size-limit'
diff --git a/src/main/runtime/runtime-rpc.ts b/src/main/runtime/runtime-rpc.ts
index e7450ff57203..fbfb1a5ee32f 100644
--- a/src/main/runtime/runtime-rpc.ts
+++ b/src/main/runtime/runtime-rpc.ts
@@ -2,22 +2,8 @@
import { RuntimeRpcShutdown } from './runtime-rpc/runtime-rpc-shutdown'
import type { OrcaRuntimeRpcServerOptions } from './runtime-rpc/runtime-rpc-pairing-types'
-export type {
- PairingOfferUnavailableReason,
- PairingOfferUnavailable
-} from './runtime-rpc/runtime-rpc-pairing-types'
-export type { MobilePairingConnectionContext } from './runtime-rpc/runtime-rpc-pairing-types'
-export type { RuntimeLongPollClass } from './runtime-rpc/runtime-rpc-long-poll'
-export { classifyRuntimeLongPoll } from './runtime-rpc/runtime-rpc-long-poll'
-
export class OrcaRuntimeRpcServer extends RuntimeRpcShutdown {
constructor(options: OrcaRuntimeRpcServerOptions) {
super(options)
}
}
-
-export {
- RUNTIME_SOCKET_NAME_REGEX,
- sweepOrphanedRuntimeSockets,
- createRuntimeTransportMetadata
-} from './runtime-rpc/runtime-rpc-socket-metadata'
diff --git a/src/main/runtime/runtime-skill-command-contract.ts b/src/main/runtime/runtime-skill-command-contract.ts
index a1a00b26e2b5..063e2c82dbd3 100644
--- a/src/main/runtime/runtime-skill-command-contract.ts
+++ b/src/main/runtime/runtime-skill-command-contract.ts
@@ -24,16 +24,18 @@ import type {
SkillCloudPackageDetails,
SkillCloudPublishRequest,
SkillCloudPublishResult,
- SkillCloudService,
- SkillCloudVersion,
+ SkillCloudVersion
+} from '../../shared/skill-cloud-contract'
+import type { SkillCloudService } from '../skills/skill-cloud-service'
+import type {
ManagedSkillInstall,
SkillInstallPreview,
SkillInstallPreviewRequest,
SkillInstallRequest,
SkillInstallResult,
- SkillProviderRootOverrides,
SkillRemoveRequest
-} from './runtime-skill-types'
+} from '../../shared/skill-install-contract'
+import type { SkillProviderRootOverrides } from '../skills/skill-provider-destinations'
export type RuntimeSkillCommandSurface = {
setSkillCloudService(service: SkillCloudService): void
assertAgentSkillSharingAllowed(): void
diff --git a/src/main/runtime/runtime-skill-command-surface.ts b/src/main/runtime/runtime-skill-command-surface.ts
index 03e97a942d32..b8541270c95b 100644
--- a/src/main/runtime/runtime-skill-command-surface.ts
+++ b/src/main/runtime/runtime-skill-command-surface.ts
@@ -20,16 +20,8 @@ import type {
RuntimeSkillCommandSurface,
RuntimeSkillCommandHost
} from './runtime-skill-command-contract'
-import type {
- SkillCloudOptions,
- SkillCloudPublishRequest,
- SkillCloudService
-} from './runtime-skill-types'
-export type {
- RuntimeSkillCommandSurface,
- RuntimeSkillCommandHost
-} from './runtime-skill-command-contract'
-export { installRuntimeSkillCommandSurface } from './runtime-skill-command-contract'
+import type { SkillCloudOptions, SkillCloudPublishRequest } from '../../shared/skill-cloud-contract'
+import type { SkillCloudService } from '../skills/skill-cloud-service'
export class RuntimeSkillCommands
extends RuntimeSkillInstallQueries
diff --git a/src/main/runtime/runtime-skill-install-authority.ts b/src/main/runtime/runtime-skill-install-authority.ts
index 3c040b4079b4..8eab22d2dca8 100644
--- a/src/main/runtime/runtime-skill-install-authority.ts
+++ b/src/main/runtime/runtime-skill-install-authority.ts
@@ -16,8 +16,9 @@ import {
resolveWslSkillProviderRoots,
withClaudeSkillProviderRoot
} from '../skills/skill-provider-runtime-roots'
-import type { SkillInstallRequest, SkillProviderRootOverrides } from './runtime-skill-types'
-import type { RuntimeSkillCommandHost } from './runtime-skill-command-surface'
+import type { SkillInstallRequest } from '../../shared/skill-install-contract'
+import type { SkillProviderRootOverrides } from '../skills/skill-provider-destinations'
+import type { RuntimeSkillCommandHost } from './runtime-skill-command-contract'
/** Whether the destination lives on an SSH target; a workspace that cannot be placed throws. */
export async function isSkillSshDestination(
diff --git a/src/main/runtime/runtime-skill-install-commands.ts b/src/main/runtime/runtime-skill-install-commands.ts
index b8060eedcc7d..e09ade4a292f 100644
--- a/src/main/runtime/runtime-skill-install-commands.ts
+++ b/src/main/runtime/runtime-skill-install-commands.ts
@@ -9,8 +9,8 @@ import type {
SkillBundleInstallRequest,
SkillBundleInstallResult
} from '../../shared/skill-bundle-install-contract'
-import type { SkillInstallRequest, SkillInstallResult } from './runtime-skill-types'
-import type { RuntimeSkillCommandHost } from './runtime-skill-command-surface'
+import type { SkillInstallRequest, SkillInstallResult } from '../../shared/skill-install-contract'
+import type { RuntimeSkillCommandHost } from './runtime-skill-command-contract'
import {
createSkillInstallAuthority,
folderExecutionHostId,
diff --git a/src/main/runtime/runtime-skill-install-queries.ts b/src/main/runtime/runtime-skill-install-queries.ts
index 873815556745..bc6028553095 100644
--- a/src/main/runtime/runtime-skill-install-queries.ts
+++ b/src/main/runtime/runtime-skill-install-queries.ts
@@ -10,15 +10,17 @@ import {
removeSharedSkillInstall
} from '../skills/skill-install-management-service'
import { toLinuxPath } from '../wsl'
+import type { SkillBundleInstallPreviewRequest } from '../../shared/skill-bundle-install-contract'
import type {
- SkillBundleInstallPreviewRequest,
SkillInstallPreviewRequest,
SkillInstallRequest,
SkillRemoveRequest,
- ManagedSkillInstall,
+ ManagedSkillInstall
+} from '../../shared/skill-install-contract'
+import type {
SkillUploadBeginRequest,
SkillUploadChunkRequest
-} from './runtime-skill-types'
+} from '../../shared/skill-upload-session-contract'
import {
RuntimeSkillInstallCommands,
SKILL_SSH_UNAVAILABLE
diff --git a/src/main/runtime/runtime-skill-types.ts b/src/main/runtime/runtime-skill-types.ts
deleted file mode 100644
index 25ab1ff382be..000000000000
--- a/src/main/runtime/runtime-skill-types.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-export type {
- SkillCloudDownloadGrant,
- SkillCloudOperation,
- SkillCloudOptions,
- SkillCloudPackageDetails,
- SkillCloudPublishRequest,
- SkillCloudPublishResult,
- SkillCloudVersion
-} from '../../shared/skill-cloud-contract'
-export type { SkillCloudService } from '../skills/skill-cloud-service'
-export type {
- ManagedSkillInstall,
- SkillInstallPreview,
- SkillInstallPreviewRequest,
- SkillInstallRequest,
- SkillInstallResult,
- SkillRemoveRequest
-} from '../../shared/skill-install-contract'
-export type {
- SkillBundleInstallPreview,
- SkillBundleInstallPreviewRequest,
- SkillBundleInstallProgress,
- SkillBundleInstallRequest,
- SkillBundleInstallResult
-} from '../../shared/skill-bundle-install-contract'
-export type {
- SkillUploadBeginRequest,
- SkillUploadChunkRequest
-} from '../../shared/skill-upload-session-contract'
-export type { SkillProviderRootOverrides } from '../skills/skill-provider-destinations'
diff --git a/src/main/runtime/runtime-terminal-contracts.ts b/src/main/runtime/runtime-terminal-contracts.ts
index 7c78b9388eb6..077ee9bc8773 100644
--- a/src/main/runtime/runtime-terminal-contracts.ts
+++ b/src/main/runtime/runtime-terminal-contracts.ts
@@ -25,7 +25,7 @@ import type { RuntimeTerminalWriteOptions } from './runtime-terminal-writer'
import type { TerminalInputKind } from '../../shared/terminal-input-kind'
import type { RuntimePtyController } from './runtime-pty-controller-contract'
import type { RuntimeAgentRowSnapshot } from './runtime-worktree-agent-rows'
-import type { WorkerTerminalHostScope } from './orchestration/worker-terminal-process-liveness'
+import type { WorkerTerminalHostScope } from '../../shared/worker-terminal-host-scope'
export type TerminalCreateOptions = {
command?: string
diff --git a/src/main/runtime/session-tabs/headless-terminal-tab-close.ts b/src/main/runtime/session-tabs/headless-terminal-tab-close.ts
index 7f0284c3425b..ad77bdf9cca9 100644
--- a/src/main/runtime/session-tabs/headless-terminal-tab-close.ts
+++ b/src/main/runtime/session-tabs/headless-terminal-tab-close.ts
@@ -10,7 +10,7 @@ import type {
} from '../../../shared/runtime-types'
import { parseAppSshPtyId } from '../../../shared/ssh-pty-id'
import { buildHeadlessMobileSessionTabGroups } from '../mobile-session-layout-projection'
-import { appendRetiredTerminalSurfaceProofs } from '../mobile-session-terminal-retirement-proof'
+import { appendRetiredTerminalSurfaceProofs } from '../../../shared/terminal-retirement-proof-ledger'
import type { RuntimePtyWorktreeRecord } from '../runtime-terminal-state-records'
import type { TerminalPaneLayoutNode } from '../../../shared/terminal-tab-types'
import type { RuntimeTerminalRename } from '../../../shared/runtime-terminal-contracts'
diff --git a/src/main/runtime/structured-worker-authority.ts b/src/main/runtime/structured-worker-authority.ts
index 0916ca112950..0b0ccff3b7ef 100644
--- a/src/main/runtime/structured-worker-authority.ts
+++ b/src/main/runtime/structured-worker-authority.ts
@@ -34,8 +34,8 @@ import {
import { AGENT_SESSION_FOUNDING_FENCE } from './agent-session-record-founding'
import { isTuiAgent } from '../../shared/tui-agent-config'
import type { TuiAgent } from '../../shared/tui-agent'
+import { isStructuredWorkerHandle } from '../../shared/structured-worker-handle'
import {
- isStructuredWorkerHandle,
structuredWorkerIdentities,
structuredWorkerProcessIncarnation,
type StructuredWorkerIdentity
diff --git a/src/main/runtime/structured-worker-identity.test.ts b/src/main/runtime/structured-worker-identity.test.ts
index 1df016f3cafa..45ff3e5199bd 100644
--- a/src/main/runtime/structured-worker-identity.test.ts
+++ b/src/main/runtime/structured-worker-identity.test.ts
@@ -8,7 +8,6 @@ import { selectExactWorkerProviderSession } from './orchestration/worker-provide
import { sealedChildEnv } from './structured-session-child-env.test-support'
import {
StructuredWorkerIdentityRegistry,
- isStructuredWorkerHandle,
mintStructuredWorkerHandle,
mintStructuredWorkerPaneKey,
sessionIdFromStructuredWorkerIncarnation,
@@ -18,6 +17,7 @@ import {
structuredWorkerProcessIncarnation,
structuredWorkerRecordIsCurrent
} from './structured-worker-identity'
+import { isStructuredWorkerHandle } from '../../shared/structured-worker-handle'
import type { AgentSessionRecord } from '../../shared/agent-session-record'
import type { ExecutionHostId } from '../../shared/execution-host'
diff --git a/src/main/runtime/structured-worker-identity.ts b/src/main/runtime/structured-worker-identity.ts
index e1899f4fdce0..2c2cb57ba046 100644
--- a/src/main/runtime/structured-worker-identity.ts
+++ b/src/main/runtime/structured-worker-identity.ts
@@ -34,12 +34,8 @@ import {
import {
parseWorkerTerminalHostScope,
type WorkerTerminalHostScope
-} from './orchestration/worker-terminal-process-liveness'
+} from '../../shared/worker-terminal-host-scope'
-export {
- STRUCTURED_WORKER_HANDLE_PREFIX,
- isStructuredWorkerHandle
-} from '../../shared/structured-worker-handle'
export const STRUCTURED_WORKER_INCARNATION_PREFIX = 'structured:'
export type StructuredWorkerIdentity = {
diff --git a/src/main/runtime/terminal-viewport.ts b/src/main/runtime/terminal-viewport.ts
deleted file mode 100644
index efffe04a9d85..000000000000
--- a/src/main/runtime/terminal-viewport.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { clampTerminalViewport } from '../../shared/terminal-viewport'
diff --git a/src/main/runtime/terminal/launch/terminal-split-source-authority.ts b/src/main/runtime/terminal/launch/terminal-split-source-authority.ts
index e77c84c591be..9903891552d0 100644
--- a/src/main/runtime/terminal/launch/terminal-split-source-authority.ts
+++ b/src/main/runtime/terminal/launch/terminal-split-source-authority.ts
@@ -6,7 +6,7 @@ import { terminalLayoutContainsLeaf } from '../../../../shared/workspace-session
import type {
AgentTeamsTmuxCompatRequest,
AgentTeamsTmuxCompatResponse
-} from '../../claude-agent-teams-service'
+} from '../../claude-agent-teams-types'
import {
ensureClaudeAgentTeamsShimDir,
resolveClaudeAgentTeamsShimBin
diff --git a/src/main/runtime/terminal/layout/mobile-terminal-activity.ts b/src/main/runtime/terminal/layout/mobile-terminal-activity.ts
index 453c4ef2a0ae..71c509b1071f 100644
--- a/src/main/runtime/terminal/layout/mobile-terminal-activity.ts
+++ b/src/main/runtime/terminal/layout/mobile-terminal-activity.ts
@@ -1,6 +1,6 @@
import { OrcaRuntimeWithMarkPtyLivenessUnverifiable } from './terminal-input-floor'
import type { ApplyLayoutResult, DriverState } from '../../orca-runtime-core'
-import { clampTerminalViewport } from '../../terminal-viewport'
+import { clampTerminalViewport } from '../../../../shared/terminal-viewport'
export abstract class OrcaRuntimeWithMobileTookFloor extends OrcaRuntimeWithMarkPtyLivenessUnverifiable {
abstract applyMobileDisplayMode(ptyId: string): Promise
diff --git a/src/main/runtime/terminal/layout/mobile-terminal-subscribe-internal.ts b/src/main/runtime/terminal/layout/mobile-terminal-subscribe-internal.ts
index c5dc5504e918..ad8587fea69e 100644
--- a/src/main/runtime/terminal/layout/mobile-terminal-subscribe-internal.ts
+++ b/src/main/runtime/terminal/layout/mobile-terminal-subscribe-internal.ts
@@ -1,5 +1,5 @@
import { OrcaRuntimeWithHandleMobileSubscribe } from './mobile-terminal-subscribe'
-import { clampTerminalViewport } from '../../terminal-viewport'
+import { clampTerminalViewport } from '../../../../shared/terminal-viewport'
export abstract class OrcaRuntimeWithHandleMobileSubscribeInternal extends OrcaRuntimeWithHandleMobileSubscribe {
protected async handleMobileSubscribeInternal(
diff --git a/src/main/runtime/terminal/layout/terminal-input-floor.ts b/src/main/runtime/terminal/layout/terminal-input-floor.ts
index 43435491b136..66dcf448579d 100644
--- a/src/main/runtime/terminal/layout/terminal-input-floor.ts
+++ b/src/main/runtime/terminal/layout/terminal-input-floor.ts
@@ -3,7 +3,7 @@ import type { PtyLivenessVerdict } from '../../../../shared/pty-liveness-verdict
import type { DriverState } from '../../orca-runtime-core'
import type { TerminalInputKind } from '../../../../shared/terminal-input-kind'
import { isUntypedTerminalInput } from '../../../../shared/terminal-untyped-input'
-import { clampTerminalViewport } from '../../terminal-viewport'
+import { clampTerminalViewport } from '../../../../shared/terminal-viewport'
import { getPtyTerminalState, getTerminalState } from '../../terminal-wait-results'
// Orphaned verdicts are bounded; active PTYs retain theirs until new evidence resolves them.
diff --git a/src/main/runtime/terminal/layout/terminal-resize-listeners.ts b/src/main/runtime/terminal/layout/terminal-resize-listeners.ts
index 677ab9500676..ccecfb5f7220 100644
--- a/src/main/runtime/terminal/layout/terminal-resize-listeners.ts
+++ b/src/main/runtime/terminal/layout/terminal-resize-listeners.ts
@@ -17,10 +17,8 @@ import type {
RuntimeTerminalOrphanAdoptionRequest,
RuntimeTerminalOrphanAdoptionResult
} from '../../../../shared/runtime-terminal-contracts'
-import {
- classifyWorkerTerminalProcessIncarnation,
- parseWorkerTerminalHostScope
-} from '../../orchestration/worker-terminal-process-liveness'
+import { classifyWorkerTerminalProcessIncarnation } from '../../orchestration/worker-terminal-process-liveness'
+import { parseWorkerTerminalHostScope } from '../../../../shared/worker-terminal-host-scope'
import { getRepoIdFromWorktreeId } from '../../../../shared/worktree/id'
import { buildOrchestrationTaskDisplayMetadata } from '../../../../shared/orchestration-task-display'
import { LOCAL_EXECUTION_HOST_ID, toSshExecutionHostId } from '../../../../shared/execution-host'
diff --git a/src/main/runtime/terminal/output/terminal-orchestration-authority.ts b/src/main/runtime/terminal/output/terminal-orchestration-authority.ts
index ddcf3fbc9d57..bffb8537b192 100644
--- a/src/main/runtime/terminal/output/terminal-orchestration-authority.ts
+++ b/src/main/runtime/terminal/output/terminal-orchestration-authority.ts
@@ -30,7 +30,7 @@ import {
} from '../../orchestration/cli-command'
import { readOrchestrationFleetAgentStatusSnapshot } from '../../orchestration-fleet-agent-status-snapshot'
import { resolveStructuredWorkerAuthority } from '../../structured-worker-authority'
-import { isStructuredWorkerHandle } from '../../structured-worker-identity'
+import { isStructuredWorkerHandle } from '../../../../shared/structured-worker-handle'
import { parseOrcaSessionAddress } from '../../../../shared/orca-session-address'
import { matchesProcessIncarnation } from '../../orchestration/worker-terminal-process-liveness'
diff --git a/src/main/runtime/terminal/output/terminal-output-path.ts b/src/main/runtime/terminal/output/terminal-output-path.ts
index 7a4f3f43507c..f08e1aac8fbc 100644
--- a/src/main/runtime/terminal/output/terminal-output-path.ts
+++ b/src/main/runtime/terminal/output/terminal-output-path.ts
@@ -4,7 +4,7 @@ import {
recentTerminalOutputIncludesPath,
recentTerminalPathCandidatesIncludePath
} from '../../terminal-output-path-candidates'
-import { clampTerminalViewport } from '../../terminal-viewport'
+import { clampTerminalViewport } from '../../../../shared/terminal-viewport'
export abstract class OrcaRuntimeWithHasRecentTerminalOutputPath extends OrcaRuntimeWithGetOrchestrationDispatchAuthority {
protected abstract enqueueLayout(
diff --git a/src/main/runtime/terminal/stop/worktree-terminal-sleep.ts b/src/main/runtime/terminal/stop/worktree-terminal-sleep.ts
index c9b9ef08c6e4..d647793767cf 100644
--- a/src/main/runtime/terminal/stop/worktree-terminal-sleep.ts
+++ b/src/main/runtime/terminal/stop/worktree-terminal-sleep.ts
@@ -6,7 +6,7 @@ import {
import { worktreeIdentityKey } from '../../../../shared/worktree/id'
import type { RuntimeWorktreeTerminalSleepResult } from '../../../../shared/runtime-types'
import { WORKTREE_TERMINAL_SLEEP_TIMEOUT_MS } from '../../orca-runtime-postlude'
-import { teardownRpcDeadline } from '../../worktree-teardown'
+import { teardownRpcDeadline } from '../../worktree-teardown-deadline'
export abstract class OrcaRuntimeWithSleepResolvedWorktreeTerminals extends OrcaRuntimeWithWorktreeSleepResumeRecording {
protected async sleepResolvedWorktreeTerminals(
diff --git a/src/main/runtime/terminal/stop/worktree-terminal-stop.ts b/src/main/runtime/terminal/stop/worktree-terminal-stop.ts
index c4c80af2448f..a9bc8732671c 100644
--- a/src/main/runtime/terminal/stop/worktree-terminal-stop.ts
+++ b/src/main/runtime/terminal/stop/worktree-terminal-stop.ts
@@ -1,7 +1,7 @@
import { OrcaRuntimeWithResolveTerminalSplitSourceAuthority } from '../launch/terminal-split-source-authority'
import type { ResolvedWorktree } from '../../runtime-worktree-path-identity'
import { worktreeIdentityKey, worktreeIdsEqual } from '../../../../shared/worktree/id'
-import { teardownRpcDeadline } from '../../worktree-teardown'
+import { teardownRpcDeadline } from '../../worktree-teardown-deadline'
import { WORKTREE_TERMINALS_SLEEPING_ERROR } from '../../worktree-terminals-sleeping-error'
import type {
RuntimeWorktreeTerminalCloseResult,
diff --git a/src/main/runtime/worktree-teardown.ts b/src/main/runtime/worktree-teardown.ts
index 17816ba09210..f8af7a5205af 100644
--- a/src/main/runtime/worktree-teardown.ts
+++ b/src/main/runtime/worktree-teardown.ts
@@ -75,8 +75,6 @@ export type WorktreeTeardownResult = {
export const WORKTREE_PROCESS_SWEEP_TIMEOUT_MS = 10_000
-export { WORKTREE_TEARDOWN_RPC_MARGIN_MS, teardownRpcDeadline } from './worktree-teardown-deadline'
-
/**
* Kills every PTY we can prove belongs to `worktreeId`, across all three
* registration surfaces (renderer graph, installed PTY provider session list,
diff --git a/src/main/server/serve-readiness.ts b/src/main/server/serve-readiness.ts
index b0d1e82a59f5..58bf1e4ef66e 100644
--- a/src/main/server/serve-readiness.ts
+++ b/src/main/server/serve-readiness.ts
@@ -1,4 +1,4 @@
-import type { PairingOfferUnavailableReason } from '../runtime/runtime-rpc'
+import type { PairingOfferUnavailableReason } from '../runtime/runtime-rpc/runtime-rpc-pairing-types'
import type { OrcadHealth } from '../orcad/orcad-health'
import { describePtyProcessCeiling } from '../../shared/pty-process-ceiling-state'
diff --git a/tests/e2e/cross-version-wire/cross-version-web-device-key.unit.test.ts b/tests/e2e/cross-version-wire/cross-version-web-device-key.unit.test.ts
index b3d68bac18e2..54528c287716 100644
--- a/tests/e2e/cross-version-wire/cross-version-web-device-key.unit.test.ts
+++ b/tests/e2e/cross-version-wire/cross-version-web-device-key.unit.test.ts
@@ -12,7 +12,7 @@ import {
import { pairedRuntimeConnectionFromOffer } from '../../../src/shared/paired-runtime-connection'
import { DeviceRegistry } from '../../../src/main/runtime/device-registry'
import { registerSocketDeviceKey } from '../../../src/main/runtime/runtime-rpc/runtime-rpc-device-key-registration'
-import { generateKeyPair } from '../../../src/main/runtime/rpc/e2ee-crypto'
+import { generateKeyPair } from '../../../src/shared/e2ee-crypto'
import {
MobileSocketWiring,
type AuthenticatedMobileSocket,
From 447c4a0fb29a44d6809ca61ddf9200ff14bf36c5 Mon Sep 17 00:00:00 2001
From: Neil <4138956+nwparker@users.noreply.github.com>
Date: Sun, 18 Oct 2026 09:39:14 -0700
Subject: [PATCH 06/15] refactor(ipc): import worktree, watcher and
runtime-environment helpers from their owning modules (#30375)
Removes the re-export lines in worktree-logic, worktree-base-directory-poller, filesystem-watcher and
runtime-environment-transport-routing. Test mocks that supplied a re-exported name now mock the
module that defines it, so they still reach the code under test.
---
.../first-work-branch-rename-wsl-move.test.ts | 2 +-
.../first-work-branch-rename.test.ts | 2 +-
.../agent-hooks/first-work-branch-rename.ts | 2 +-
...lesystem-watcher-document-lifetime.test.ts | 10 +++++----
.../filesystem-watcher-dormant-rearm.test.ts | 3 ++-
.../filesystem-watcher-large-batch.test.ts | 3 ++-
...lesystem-watcher-local-unsubscribe.test.ts | 6 ++---
...filesystem-watcher-native-capacity.test.ts | 3 ++-
src/main/ipc/filesystem-watcher-real.test.ts | 3 ++-
.../filesystem-watcher-remote-batch.test.ts | 3 ++-
...system-watcher-remote-cancellation.test.ts | 3 ++-
...filesystem-watcher-remote-capacity.test.ts | 3 ++-
.../filesystem-watcher-remote-rearm.test.ts | 3 ++-
...ilesystem-watcher-removal-deadline.test.ts | 8 +++----
...filesystem-watcher-terminal-resync.test.ts | 6 ++---
...lesystem-watcher-unwatchable-roots.test.ts | 3 ++-
src/main/ipc/filesystem-watcher.test.ts | 6 ++---
src/main/ipc/filesystem-watcher.ts | 9 --------
.../folder-repo-git-upgrade-lifetime.test.ts | 5 ++++-
src/main/ipc/folder-repo-git-upgrade.ts | 2 +-
.../register-core-handlers.test.ts | 2 +-
.../register-core-handlers.ts | 2 +-
...onment-browser-client-host-handler.test.ts | 2 +-
...environment-browser-client-host-handler.ts | 2 +-
...ntime-environment-connectivity-handlers.ts | 6 ++---
...environment-federated-read-routing.test.ts | 6 ++---
.../runtime-environment-host-dispatch.test.ts | 4 ++--
...nvironment-managed-host-disconnect.test.ts | 4 ++--
...ent-session-tabs-delta.integration.test.ts | 6 ++---
...time-environment-status-connection.test.ts | 2 +-
...untime-environment-status-recovery.test.ts | 6 ++---
...time-environment-status-retirement.test.ts | 2 +-
...t-transport-routing-tailscale-hint.test.ts | 6 ++---
.../runtime-environment-transport-routing.ts | 5 -----
.../runtime-environments.ts | 2 +-
.../workspace-cleanup-folder-workspaces.ts | 2 +-
src/main/ipc/workspace-cleanup-scan.ts | 2 +-
.../worktree-base-directory-poller.test.ts | 2 +-
.../ipc/worktree-base-directory-poller.ts | 2 --
src/main/ipc/worktree-logic.test.ts | 22 +++++++++++--------
src/main/ipc/worktree-logic.ts | 15 -------------
src/main/ipc/worktree-remote.ts | 12 +++++-----
.../create/folder-workspace-creation.ts | 2 +-
.../detected-worktree-classification.test.ts | 2 +-
.../listing/ssh-worktree-fallback.ts | 3 ++-
src/main/provisioned-root-checkout.ts | 4 ++--
.../runtime/repo-worktree-row-resolution.ts | 2 +-
.../runtime/runtime-folder-worktree-create.ts | 2 +-
...runtime-local-worktree-create-candidate.ts | 2 +-
.../runtime-local-worktree-materialization.ts | 8 +++----
.../runtime-managed-worktree-queries.ts | 2 +-
.../runtime/runtime-worktree-create-git.ts | 2 +-
.../runtime/workspaces/workspace-selectors.ts | 2 +-
.../skill-cloud-grant-installation.test.ts | 2 +-
.../skills/skill-cloud-grant-installation.ts | 2 +-
.../skills/skill-runtime-capability.test.ts | 4 ++--
src/main/skills/skill-runtime-capability.ts | 2 +-
src/main/startup/main-process-quit.ts | 2 +-
src/main/workspace-space-repo-scan.ts | 2 +-
59 files changed, 111 insertions(+), 133 deletions(-)
diff --git a/src/main/agent-hooks/first-work-branch-rename-wsl-move.test.ts b/src/main/agent-hooks/first-work-branch-rename-wsl-move.test.ts
index 36e871f3f3ea..e7dfe6394775 100644
--- a/src/main/agent-hooks/first-work-branch-rename-wsl-move.test.ts
+++ b/src/main/agent-hooks/first-work-branch-rename-wsl-move.test.ts
@@ -26,7 +26,7 @@ vi.mock('../text-generation/commit-message-text-generation', () => ({
vi.mock('../text-generation/commit-message-agent-environment', () => ({
prepareLocalCommitMessageAgentEnv: vi.fn(async () => ({ ok: true }))
}))
-vi.mock('../ipc/worktree-logic', () => ({
+vi.mock('../ipc/worktree-branch-name', () => ({
computeBranchName: vi.fn((leaf: string) => `you/${leaf}`),
getConfiguredBranchPrefix: vi.fn(() => 'you')
}))
diff --git a/src/main/agent-hooks/first-work-branch-rename.test.ts b/src/main/agent-hooks/first-work-branch-rename.test.ts
index 767092e491c6..46f15440271e 100644
--- a/src/main/agent-hooks/first-work-branch-rename.test.ts
+++ b/src/main/agent-hooks/first-work-branch-rename.test.ts
@@ -35,7 +35,7 @@ vi.mock('../text-generation/commit-message-text-generation', () => ({
vi.mock('../text-generation/commit-message-agent-environment', () => ({
prepareLocalCommitMessageAgentEnv: prepareLocalEnvMock
}))
-vi.mock('../ipc/worktree-logic', () => ({
+vi.mock('../ipc/worktree-branch-name', () => ({
computeBranchName: computeBranchNameMock,
getConfiguredBranchPrefix: getConfiguredBranchPrefixMock
}))
diff --git a/src/main/agent-hooks/first-work-branch-rename.ts b/src/main/agent-hooks/first-work-branch-rename.ts
index d8d4a5a02bcc..9a35a2635da4 100644
--- a/src/main/agent-hooks/first-work-branch-rename.ts
+++ b/src/main/agent-hooks/first-work-branch-rename.ts
@@ -11,7 +11,7 @@ import {
stripConfiguredBranchPrefix
} from '../../shared/branch-name-from-work'
import { getCommitMessageModelDiscoveryHostKey } from '../../shared/commit-message-host-key'
-import { computeBranchName, getConfiguredBranchPrefix } from '../ipc/worktree-logic'
+import { computeBranchName, getConfiguredBranchPrefix } from '../ipc/worktree-branch-name'
import { gitExecFileAsync } from '../git/runner'
import { resolveLocalGitUsername } from '../git/git-username'
import { resolveGitRouteForHost } from '../providers/execution-host-provider-dispatch'
diff --git a/src/main/ipc/filesystem-watcher-document-lifetime.test.ts b/src/main/ipc/filesystem-watcher-document-lifetime.test.ts
index 9bc42d1ef737..a6a47714e3a1 100644
--- a/src/main/ipc/filesystem-watcher-document-lifetime.test.ts
+++ b/src/main/ipc/filesystem-watcher-document-lifetime.test.ts
@@ -34,14 +34,16 @@ import {
import { getLocalWatcherRoot, getRemoteWatcherKey } from './filesystem-watcher-paths'
import { reinstallRemoteWatchersForConnection } from './filesystem-watcher-remote-controller'
import { reinstallRemoteWatchersForConnectionCore } from './filesystem-watcher-remote-provider-rearm'
+import { registerFilesystemWatcherHandlers } from './filesystem-watcher-handlers'
+import { closeAllWatchers } from './filesystem-watcher-shutdown'
import {
- registerFilesystemWatcherHandlers,
- closeAllWatchers,
closeLocalWatcherForWorktreePath,
+ restoreLocalWatcherAfterFailedRemoval
+} from './filesystem-watcher-local-removal'
+import {
closeRemoteWatcherForWorktreePath,
- restoreLocalWatcherAfterFailedRemoval,
restoreRemoteWatcherAfterFailedRemoval
-} from './filesystem-watcher'
+} from './filesystem-watcher-remote-removal'
const handlers = new Map Promise>()
function invoke(channel: string, sender: Sender, args: WatchArgs): Promise {
diff --git a/src/main/ipc/filesystem-watcher-dormant-rearm.test.ts b/src/main/ipc/filesystem-watcher-dormant-rearm.test.ts
index c4931cd7cb2b..e3fcc8e40f06 100644
--- a/src/main/ipc/filesystem-watcher-dormant-rearm.test.ts
+++ b/src/main/ipc/filesystem-watcher-dormant-rearm.test.ts
@@ -21,7 +21,8 @@ vi.mock('../providers/ssh-filesystem-dispatch', () => ({
}
}))
-import { closeAllWatchers, registerFilesystemWatcherHandlers } from './filesystem-watcher'
+import { closeAllWatchers } from './filesystem-watcher-shutdown'
+import { registerFilesystemWatcherHandlers } from './filesystem-watcher-handlers'
type HandlerMap = Record unknown>
diff --git a/src/main/ipc/filesystem-watcher-large-batch.test.ts b/src/main/ipc/filesystem-watcher-large-batch.test.ts
index 00e69210510c..b5f654affe3b 100644
--- a/src/main/ipc/filesystem-watcher-large-batch.test.ts
+++ b/src/main/ipc/filesystem-watcher-large-batch.test.ts
@@ -29,7 +29,8 @@ vi.mock('../providers/ssh-filesystem-dispatch', () => ({
onSshFilesystemProviderRegistered: () => () => {}
}))
-import { closeAllWatchers, registerFilesystemWatcherHandlers } from './filesystem-watcher'
+import { closeAllWatchers } from './filesystem-watcher-shutdown'
+import { registerFilesystemWatcherHandlers } from './filesystem-watcher-handlers'
import { stat } from 'node:fs/promises'
import { subscribe as subscribeParcelWatcher } from '@parcel/watcher'
import type { Event as WatcherEvent } from '@parcel/watcher'
diff --git a/src/main/ipc/filesystem-watcher-local-unsubscribe.test.ts b/src/main/ipc/filesystem-watcher-local-unsubscribe.test.ts
index da8b92dbcf8b..a0a4efadc045 100644
--- a/src/main/ipc/filesystem-watcher-local-unsubscribe.test.ts
+++ b/src/main/ipc/filesystem-watcher-local-unsubscribe.test.ts
@@ -37,12 +37,12 @@ vi.mock('../providers/ssh-filesystem-dispatch', () => ({
onSshFilesystemProviderRegistered: () => () => {}
}))
+import { closeAllWatchers } from './filesystem-watcher-shutdown'
import {
- closeAllWatchers,
closeLocalWatcherForWorktreePath,
- registerFilesystemWatcherHandlers,
restoreLocalWatcherAfterFailedRemoval
-} from './filesystem-watcher'
+} from './filesystem-watcher-local-removal'
+import { registerFilesystemWatcherHandlers } from './filesystem-watcher-handlers'
import { stat } from 'node:fs/promises'
import { subscribe as subscribeParcelWatcher } from '@parcel/watcher'
import { subscribeViaWatcherProcess } from './parcel-watcher-process'
diff --git a/src/main/ipc/filesystem-watcher-native-capacity.test.ts b/src/main/ipc/filesystem-watcher-native-capacity.test.ts
index 9d291f7a9ee6..f70bf3904996 100644
--- a/src/main/ipc/filesystem-watcher-native-capacity.test.ts
+++ b/src/main/ipc/filesystem-watcher-native-capacity.test.ts
@@ -21,7 +21,8 @@ vi.mock('../providers/ssh-filesystem-dispatch', () => ({
onSshFilesystemProviderRegistered: () => () => {}
}))
-import { closeAllWatchers, registerFilesystemWatcherHandlers } from './filesystem-watcher'
+import { closeAllWatchers } from './filesystem-watcher-shutdown'
+import { registerFilesystemWatcherHandlers } from './filesystem-watcher-handlers'
import {
MAX_PHYSICAL_WATCHER_CHILDREN,
reserveWatcherChild,
diff --git a/src/main/ipc/filesystem-watcher-real.test.ts b/src/main/ipc/filesystem-watcher-real.test.ts
index f884e596f72d..cd2a53820645 100644
--- a/src/main/ipc/filesystem-watcher-real.test.ts
+++ b/src/main/ipc/filesystem-watcher-real.test.ts
@@ -25,7 +25,8 @@ vi.mock('electron', () => ({
ipcMain: { handle: handleMock }
}))
-import { closeAllWatchers, registerFilesystemWatcherHandlers } from './filesystem-watcher'
+import { closeAllWatchers } from './filesystem-watcher-shutdown'
+import { registerFilesystemWatcherHandlers } from './filesystem-watcher-handlers'
import {
createAliasedWatcherRoot,
removeAliasedWatcherRoot,
diff --git a/src/main/ipc/filesystem-watcher-remote-batch.test.ts b/src/main/ipc/filesystem-watcher-remote-batch.test.ts
index fc4566b97c9d..c7e33babf0bd 100644
--- a/src/main/ipc/filesystem-watcher-remote-batch.test.ts
+++ b/src/main/ipc/filesystem-watcher-remote-batch.test.ts
@@ -22,7 +22,8 @@ vi.mock('../providers/ssh-filesystem-dispatch', () => ({
}
}))
-import { closeAllWatchers, registerFilesystemWatcherHandlers } from './filesystem-watcher'
+import { closeAllWatchers } from './filesystem-watcher-shutdown'
+import { registerFilesystemWatcherHandlers } from './filesystem-watcher-handlers'
type HandlerMap = Record unknown>
type WatchCallback = (events: FsChangeEvent[]) => void
diff --git a/src/main/ipc/filesystem-watcher-remote-cancellation.test.ts b/src/main/ipc/filesystem-watcher-remote-cancellation.test.ts
index 26140876bb50..b0d6e3b62a98 100644
--- a/src/main/ipc/filesystem-watcher-remote-cancellation.test.ts
+++ b/src/main/ipc/filesystem-watcher-remote-cancellation.test.ts
@@ -18,7 +18,8 @@ vi.mock('../providers/ssh-filesystem-dispatch', () => ({
onSshFilesystemProviderRegistered: () => () => {}
}))
-import { closeAllWatchers, registerFilesystemWatcherHandlers } from './filesystem-watcher'
+import { closeAllWatchers } from './filesystem-watcher-shutdown'
+import { registerFilesystemWatcherHandlers } from './filesystem-watcher-handlers'
type HandlerMap = Record unknown>
diff --git a/src/main/ipc/filesystem-watcher-remote-capacity.test.ts b/src/main/ipc/filesystem-watcher-remote-capacity.test.ts
index f67083f845d5..441b781ce168 100644
--- a/src/main/ipc/filesystem-watcher-remote-capacity.test.ts
+++ b/src/main/ipc/filesystem-watcher-remote-capacity.test.ts
@@ -19,7 +19,8 @@ vi.mock('../providers/ssh-filesystem-dispatch', () => ({
}))
import { WATCH_ROOT_CAPACITY_REFUSAL_MESSAGE } from '../../shared/watch-root-capacity-refusal'
-import { closeAllWatchers, registerFilesystemWatcherHandlers } from './filesystem-watcher'
+import { closeAllWatchers } from './filesystem-watcher-shutdown'
+import { registerFilesystemWatcherHandlers } from './filesystem-watcher-handlers'
import { watcherLifecycleState } from './filesystem-watcher-lifecycle-state'
import { getRemoteWatcherKey } from './filesystem-watcher-paths'
diff --git a/src/main/ipc/filesystem-watcher-remote-rearm.test.ts b/src/main/ipc/filesystem-watcher-remote-rearm.test.ts
index 056b10579a74..77c17c0949cb 100644
--- a/src/main/ipc/filesystem-watcher-remote-rearm.test.ts
+++ b/src/main/ipc/filesystem-watcher-remote-rearm.test.ts
@@ -28,7 +28,8 @@ vi.mock('../providers/ssh-filesystem-dispatch', () => ({
}
}))
-import { closeAllWatchers, registerFilesystemWatcherHandlers } from './filesystem-watcher'
+import { closeAllWatchers } from './filesystem-watcher-shutdown'
+import { registerFilesystemWatcherHandlers } from './filesystem-watcher-handlers'
type HandlerMap = Record unknown>
diff --git a/src/main/ipc/filesystem-watcher-removal-deadline.test.ts b/src/main/ipc/filesystem-watcher-removal-deadline.test.ts
index ca1e731c99a0..70ddf31f80c2 100644
--- a/src/main/ipc/filesystem-watcher-removal-deadline.test.ts
+++ b/src/main/ipc/filesystem-watcher-removal-deadline.test.ts
@@ -37,11 +37,9 @@ vi.mock('../providers/ssh-filesystem-dispatch', () => ({
onSshFilesystemProviderRegistered: () => () => {}
}))
-import {
- closeAllWatchers,
- closeLocalWatcherForWorktreePath,
- registerFilesystemWatcherHandlers
-} from './filesystem-watcher'
+import { closeAllWatchers } from './filesystem-watcher-shutdown'
+import { closeLocalWatcherForWorktreePath } from './filesystem-watcher-local-removal'
+import { registerFilesystemWatcherHandlers } from './filesystem-watcher-handlers'
import {
createWatcherRemovalDeadline,
drainBeforeWatcherRemoval,
diff --git a/src/main/ipc/filesystem-watcher-terminal-resync.test.ts b/src/main/ipc/filesystem-watcher-terminal-resync.test.ts
index e8a81d1a7ff4..e18956dae059 100644
--- a/src/main/ipc/filesystem-watcher-terminal-resync.test.ts
+++ b/src/main/ipc/filesystem-watcher-terminal-resync.test.ts
@@ -20,13 +20,13 @@ vi.mock('../providers/ssh-filesystem-dispatch', () => ({
}
}))
+import { closeAllWatchers } from './filesystem-watcher-shutdown'
import {
- closeAllWatchers,
closeRemoteWatcherForWorktreePath,
forgetRemoteWatcherRemovalSnapshot,
- registerFilesystemWatcherHandlers,
restoreRemoteWatcherAfterFailedRemoval
-} from './filesystem-watcher'
+} from './filesystem-watcher-remote-removal'
+import { registerFilesystemWatcherHandlers } from './filesystem-watcher-handlers'
type HandlerMap = Record unknown>
type TerminalErrorHandler = (error: Error) => void
diff --git a/src/main/ipc/filesystem-watcher-unwatchable-roots.test.ts b/src/main/ipc/filesystem-watcher-unwatchable-roots.test.ts
index 78274bbe0282..60d27267f02b 100644
--- a/src/main/ipc/filesystem-watcher-unwatchable-roots.test.ts
+++ b/src/main/ipc/filesystem-watcher-unwatchable-roots.test.ts
@@ -29,7 +29,8 @@ vi.mock('../providers/ssh-filesystem-dispatch', () => ({
onSshFilesystemProviderRegistered: () => () => {}
}))
-import { closeAllWatchers, registerFilesystemWatcherHandlers } from './filesystem-watcher'
+import { closeAllWatchers } from './filesystem-watcher-shutdown'
+import { registerFilesystemWatcherHandlers } from './filesystem-watcher-handlers'
import { stat } from 'node:fs/promises'
import { watcherLifecycleState } from './filesystem-watcher-lifecycle-state'
diff --git a/src/main/ipc/filesystem-watcher.test.ts b/src/main/ipc/filesystem-watcher.test.ts
index 464b9ecc831a..c8a244c156e2 100644
--- a/src/main/ipc/filesystem-watcher.test.ts
+++ b/src/main/ipc/filesystem-watcher.test.ts
@@ -42,13 +42,13 @@ vi.mock('../providers/ssh-filesystem-dispatch', () => ({
}
}))
+import { closeAllWatchers } from './filesystem-watcher-shutdown'
import {
- closeAllWatchers,
closeRemoteWatcherForWorktreePath,
forgetRemoteWatcherRemovalSnapshot,
- registerFilesystemWatcherHandlers,
restoreRemoteWatcherAfterFailedRemoval
-} from './filesystem-watcher'
+} from './filesystem-watcher-remote-removal'
+import { registerFilesystemWatcherHandlers } from './filesystem-watcher-handlers'
import { stat } from 'node:fs/promises'
import { subscribe as subscribeParcelWatcher } from '@parcel/watcher'
import { createWslWatcher } from './filesystem-watcher-wsl'
diff --git a/src/main/ipc/filesystem-watcher.ts b/src/main/ipc/filesystem-watcher.ts
index 9680227cbc18..1f59041d56e4 100644
--- a/src/main/ipc/filesystem-watcher.ts
+++ b/src/main/ipc/filesystem-watcher.ts
@@ -10,15 +10,6 @@ import {
restoreRemoteWatcherAfterFailedRemoval
} from './filesystem-watcher-remote-removal'
-export { closeLocalWatcherForWorktreePath } from './filesystem-watcher-local-removal'
-export { restoreLocalWatcherAfterFailedRemoval } from './filesystem-watcher-local-removal'
-export { forgetLocalWatcherRemovalSnapshot } from './filesystem-watcher-local-removal'
-export { closeRemoteWatcherForWorktreePath } from './filesystem-watcher-remote-removal'
-export { restoreRemoteWatcherAfterFailedRemoval } from './filesystem-watcher-remote-removal'
-export { forgetRemoteWatcherRemovalSnapshot } from './filesystem-watcher-remote-removal'
-export { registerFilesystemWatcherHandlers } from './filesystem-watcher-handlers'
-export { closeAllWatchers } from './filesystem-watcher-shutdown'
-
// ── Public API ───────────────────────────────────────────────────────
/** The desktop binding for {@link WorktreeWatcherRemoval}. Installed during startup. */
diff --git a/src/main/ipc/folder-repo-git-upgrade-lifetime.test.ts b/src/main/ipc/folder-repo-git-upgrade-lifetime.test.ts
index 5e0f063e6f7c..bf3cb64e2584 100644
--- a/src/main/ipc/folder-repo-git-upgrade-lifetime.test.ts
+++ b/src/main/ipc/folder-repo-git-upgrade-lifetime.test.ts
@@ -23,8 +23,11 @@ vi.mock('./registered-worktree-roots-cache', () => ({
}))
vi.mock('./repos/repos-changed-notification', () => ({ notifyReposChanged: fake.reposChanged }))
vi.mock('./worktree-remote', () => ({ notifyWorktreesChanged: fake.worktreesChanged }))
+vi.mock('./worktree-base-directory-marker-poller', async (importOriginal) => ({
+ ...(await importOriginal>()),
+ WORKTREE_BASE_BACKSTOP_TICKS: 15
+}))
vi.mock('./worktree-base-directory-poller', () => ({
- WORKTREE_BASE_BACKSTOP_TICKS: 15,
WORKTREE_BASE_POLL_INTERVAL_MS: 2000,
createWorktreePollerWindowVisibility: () => ({
isWindowVisible: () => true,
diff --git a/src/main/ipc/folder-repo-git-upgrade.ts b/src/main/ipc/folder-repo-git-upgrade.ts
index 1b4a7284d306..a91bb5afdc3d 100644
--- a/src/main/ipc/folder-repo-git-upgrade.ts
+++ b/src/main/ipc/folder-repo-git-upgrade.ts
@@ -16,10 +16,10 @@ import { notifyWorktreesChanged } from './worktree-remote'
import { setFolderRepoGitUpgradeWakeListener } from './folder-repo-git-upgrade-wake'
import {
createWorktreePollerWindowVisibility,
- WORKTREE_BASE_BACKSTOP_TICKS,
WORKTREE_BASE_POLL_INTERVAL_MS,
type WorktreePollerWindowVisibility
} from './worktree-base-directory-poller'
+import { WORKTREE_BASE_BACKSTOP_TICKS } from './worktree-base-directory-marker-poller'
// Why: with no folder project registered there is nothing to stat, so back off until
// the next catalog mutation wakes the fast cadence.
diff --git a/src/main/ipc/register-core-handlers/register-core-handlers.test.ts b/src/main/ipc/register-core-handlers/register-core-handlers.test.ts
index bef60c84ca97..21116cccdc82 100644
--- a/src/main/ipc/register-core-handlers/register-core-handlers.test.ts
+++ b/src/main/ipc/register-core-handlers/register-core-handlers.test.ts
@@ -300,7 +300,7 @@ vi.mock('../filesystem', () => ({
registerFilesystemHandlers: registerFilesystemHandlersMock
}))
-vi.mock('../filesystem-watcher', () => ({
+vi.mock('../filesystem-watcher-handlers', () => ({
registerFilesystemWatcherHandlers: registerFilesystemWatcherHandlersMock
}))
diff --git a/src/main/ipc/register-core-handlers/register-core-handlers.ts b/src/main/ipc/register-core-handlers/register-core-handlers.ts
index 6b3971eb6a14..075d2a7529b9 100644
--- a/src/main/ipc/register-core-handlers/register-core-handlers.ts
+++ b/src/main/ipc/register-core-handlers/register-core-handlers.ts
@@ -7,7 +7,7 @@ import type { OrcaRuntimeService } from '../../runtime/orca-runtime'
import type { StatsCollector } from '../../stats/collector'
import { registerFilesystemHandlers } from '../filesystem'
import type { CommitMessageAgentEnvironmentResolvers } from '../../text-generation/commit-message-agent-environment'
-import { registerFilesystemWatcherHandlers } from '../filesystem-watcher'
+import { registerFilesystemWatcherHandlers } from '../filesystem-watcher-handlers'
import { registerUsageProviderHandlers } from '../usage-provider-handlers'
import { registerGitHubHandlers } from '../github'
import { registerGitLabHandlers } from '../gitlab'
diff --git a/src/main/ipc/runtime-environments/runtime-environment-browser-client-host-handler.test.ts b/src/main/ipc/runtime-environments/runtime-environment-browser-client-host-handler.test.ts
index e98e038f0d8b..bbbe0a2f17bb 100644
--- a/src/main/ipc/runtime-environments/runtime-environment-browser-client-host-handler.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-browser-client-host-handler.test.ts
@@ -28,7 +28,7 @@ vi.mock('electron', () => ({ ipcMain: { handle: handleMock } }))
vi.mock('../../../shared/runtime-environment-store', () => ({
resolveEnvironment: resolveEnvironmentMock
}))
-vi.mock('./runtime-environment-transport-routing', () => ({
+vi.mock('./runtime-environment-status-probe', () => ({
getRuntimeEnvironmentStatus: getRuntimeEnvironmentStatusMock
}))
vi.mock('../../browser/paired-runtime-browser-client-host-runtime', () => ({
diff --git a/src/main/ipc/runtime-environments/runtime-environment-browser-client-host-handler.ts b/src/main/ipc/runtime-environments/runtime-environment-browser-client-host-handler.ts
index da4437a5163b..31233f08baf3 100644
--- a/src/main/ipc/runtime-environments/runtime-environment-browser-client-host-handler.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-browser-client-host-handler.ts
@@ -11,7 +11,7 @@ import {
} from '../../browser/paired-runtime-browser-client-host-runtime'
import { prepareBrowserClientHostPlacement } from '../../browser/browser-client-host-placement-preparation'
import { isRuntimeEnvironmentManuallyDisconnected } from './runtime-environment-connectivity-handlers'
-import { getRuntimeEnvironmentStatus } from './runtime-environment-transport-routing'
+import { getRuntimeEnvironmentStatus } from './runtime-environment-status-probe'
export function registerRuntimeEnvironmentBrowserClientHostHandler(options: {
getUserDataPath: () => string
diff --git a/src/main/ipc/runtime-environments/runtime-environment-connectivity-handlers.ts b/src/main/ipc/runtime-environments/runtime-environment-connectivity-handlers.ts
index c2d100156c6d..432f43bb601c 100644
--- a/src/main/ipc/runtime-environments/runtime-environment-connectivity-handlers.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-connectivity-handlers.ts
@@ -32,10 +32,8 @@ import {
isRuntimeEnvironmentManuallyDisconnected,
RUNTIME_MANUALLY_DISCONNECTED_MESSAGE
} from './runtime-environment-manual-disconnect'
-import {
- callRuntimeEnvironment,
- getRuntimeEnvironmentStatus
-} from './runtime-environment-transport-routing'
+import { callRuntimeEnvironment } from './runtime-environment-transport-routing'
+import { getRuntimeEnvironmentStatus } from './runtime-environment-status-probe'
import { publicRuntimeEnvironmentWithHostKey } from './runtime-environment-host-key'
import { withWslOrcadAccountEnv } from '../../wsl/wsl-orcad-account-env'
import { clearSshCredentialDeclinedForEnvironment } from '../../ssh/ssh-credential-decline'
diff --git a/src/main/ipc/runtime-environments/runtime-environment-federated-read-routing.test.ts b/src/main/ipc/runtime-environments/runtime-environment-federated-read-routing.test.ts
index 8b773083f367..30bd6f5c74a1 100644
--- a/src/main/ipc/runtime-environments/runtime-environment-federated-read-routing.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-federated-read-routing.test.ts
@@ -32,10 +32,8 @@ vi.mock('./runtime-environment-request-connections', async () => {
})
})
-import {
- callRuntimeEnvironment,
- resetSharedControlSupport
-} from './runtime-environment-transport-routing'
+import { callRuntimeEnvironment } from './runtime-environment-transport-routing'
+import { resetSharedControlSupport } from './runtime-environment-shared-control-support'
describe('federated read RPC transport routing', () => {
let userDataPath: string
diff --git a/src/main/ipc/runtime-environments/runtime-environment-host-dispatch.test.ts b/src/main/ipc/runtime-environments/runtime-environment-host-dispatch.test.ts
index 00752f02cea4..ac94a6c39bd9 100644
--- a/src/main/ipc/runtime-environments/runtime-environment-host-dispatch.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-host-dispatch.test.ts
@@ -33,8 +33,8 @@ vi.mock('./runtime-environment-request-connections', async (importOriginal) => (
...(await importOriginal>()),
closeRemoteRuntimeRequestConnection: mocks.closeRequest
}))
-vi.mock('./runtime-environment-transport-routing', () => ({
- callRuntimeEnvironment: vi.fn(),
+vi.mock('./runtime-environment-transport-routing', () => ({ callRuntimeEnvironment: vi.fn() }))
+vi.mock('./runtime-environment-status-probe', () => ({
getRuntimeEnvironmentStatus: mocks.getStatus
}))
vi.mock('../../ssh/ssh-credential-decline', () => ({
diff --git a/src/main/ipc/runtime-environments/runtime-environment-managed-host-disconnect.test.ts b/src/main/ipc/runtime-environments/runtime-environment-managed-host-disconnect.test.ts
index ad86b3f5c6ac..98425963956d 100644
--- a/src/main/ipc/runtime-environments/runtime-environment-managed-host-disconnect.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-managed-host-disconnect.test.ts
@@ -31,8 +31,8 @@ vi.mock('./runtime-environment-host-service-ops', () => ({
connectThroughOwningService: vi.fn(async () => {}),
removeThroughOwningService: vi.fn()
}))
-vi.mock('./runtime-environment-transport-routing', () => ({
- callRuntimeEnvironment: vi.fn(),
+vi.mock('./runtime-environment-transport-routing', () => ({ callRuntimeEnvironment: vi.fn() }))
+vi.mock('./runtime-environment-status-probe', () => ({
getRuntimeEnvironmentStatus: vi.fn(async () => ({ ok: true }))
}))
vi.mock('../ssh/ssh-session-teardown', () => ({ disconnectRegisteredSshTarget: hoisted.teardown }))
diff --git a/src/main/ipc/runtime-environments/runtime-environment-session-tabs-delta.integration.test.ts b/src/main/ipc/runtime-environments/runtime-environment-session-tabs-delta.integration.test.ts
index 77cbb8da15ff..71687da6dbb9 100644
--- a/src/main/ipc/runtime-environments/runtime-environment-session-tabs-delta.integration.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-session-tabs-delta.integration.test.ts
@@ -14,10 +14,8 @@ import { getPreferredPairedRuntimeConnection } from '../../../shared/runtime-env
import { OrcaRuntimeService } from '../../runtime/orca-runtime'
import { OrcaRuntimeRpcServer } from '../../runtime/runtime-rpc'
import { makeStore, SESSION_WORKTREE_ID } from '../../runtime/paired-client-navigation-test-harness'
-import {
- resetSharedControlSupport,
- subscribeRuntimeEnvironment
-} from './runtime-environment-transport-routing'
+import { resetSharedControlSupport } from './runtime-environment-shared-control-support'
+import { subscribeRuntimeEnvironment } from './runtime-environment-transport-routing'
vi.mock('electron', () => ({ BrowserWindow: { getAllWindows: () => [] } }))
diff --git a/src/main/ipc/runtime-environments/runtime-environment-status-connection.test.ts b/src/main/ipc/runtime-environments/runtime-environment-status-connection.test.ts
index 762c0d5d0ae0..c908683b27fe 100644
--- a/src/main/ipc/runtime-environments/runtime-environment-status-connection.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-status-connection.test.ts
@@ -9,7 +9,7 @@ import {
createSharedControlTestServer,
closeSharedControlTestServers
} from '../../../shared/remote-runtime-shared-control-test-server'
-import { getRuntimeEnvironmentStatus } from './runtime-environment-transport-routing'
+import { getRuntimeEnvironmentStatus } from './runtime-environment-status-probe'
import {
getRuntimeEnvironmentStatusOwner,
resetRuntimeEnvironmentStatusOwners
diff --git a/src/main/ipc/runtime-environments/runtime-environment-status-recovery.test.ts b/src/main/ipc/runtime-environments/runtime-environment-status-recovery.test.ts
index 28c0de16f78f..d578c767be6e 100644
--- a/src/main/ipc/runtime-environments/runtime-environment-status-recovery.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-status-recovery.test.ts
@@ -5,10 +5,8 @@ import { join } from 'node:path'
import { afterEach, beforeEach, expect, it, vi } from 'vitest'
import { addEnvironmentFromPairingCode } from '../../../shared/runtime-environment-store'
import { pairingCode } from './runtime-environments-ipc-test-harness'
-import {
- getRuntimeEnvironmentStatus,
- resetSharedControlSupport
-} from './runtime-environment-transport-routing'
+import { getRuntimeEnvironmentStatus } from './runtime-environment-status-probe'
+import { resetSharedControlSupport } from './runtime-environment-shared-control-support'
const { request, publish } = vi.hoisted(() => ({ request: vi.fn(), publish: vi.fn() }))
vi.mock('../../../shared/remote-runtime-client', () => ({
diff --git a/src/main/ipc/runtime-environments/runtime-environment-status-retirement.test.ts b/src/main/ipc/runtime-environments/runtime-environment-status-retirement.test.ts
index e12d953940ac..06fcf7fd958d 100644
--- a/src/main/ipc/runtime-environments/runtime-environment-status-retirement.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-status-retirement.test.ts
@@ -34,7 +34,7 @@ vi.mock('./runtime-environment-request-connections', async () => {
})
vi.mock('electron', () => ({ BrowserWindow: { getAllWindows: () => [] } }))
-import { getRuntimeEnvironmentStatus } from './runtime-environment-transport-routing'
+import { getRuntimeEnvironmentStatus } from './runtime-environment-status-probe'
import { resetRuntimeEnvironmentStatusOwners } from './runtime-environment-request-connections'
let directory: string
diff --git a/src/main/ipc/runtime-environments/runtime-environment-transport-routing-tailscale-hint.test.ts b/src/main/ipc/runtime-environments/runtime-environment-transport-routing-tailscale-hint.test.ts
index 0cb0f0f70694..8329d36a327b 100644
--- a/src/main/ipc/runtime-environments/runtime-environment-transport-routing-tailscale-hint.test.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-transport-routing-tailscale-hint.test.ts
@@ -7,10 +7,10 @@ import { encodePairingOffer, type PairingOffer } from '../../../shared/pairing'
import { addEnvironmentFromPairingCode } from '../../../shared/runtime-environment-store'
import {
callRuntimeEnvironment,
- getRuntimeEnvironmentStatus,
- subscribeRuntimeEnvironment,
- resetSharedControlSupport
+ subscribeRuntimeEnvironment
} from './runtime-environment-transport-routing'
+import { getRuntimeEnvironmentStatus } from './runtime-environment-status-probe'
+import { resetSharedControlSupport } from './runtime-environment-shared-control-support'
// Why: prove the wiring, not just the helper — an unreachable endpoint exercises
// the real WebSocket failure → reject → Tailscale-hint join points the settings
diff --git a/src/main/ipc/runtime-environments/runtime-environment-transport-routing.ts b/src/main/ipc/runtime-environments/runtime-environment-transport-routing.ts
index 2450622cc8ef..a482211d82da 100644
--- a/src/main/ipc/runtime-environments/runtime-environment-transport-routing.ts
+++ b/src/main/ipc/runtime-environments/runtime-environment-transport-routing.ts
@@ -20,7 +20,6 @@ import {
sendRemoteRuntimeRequestAbortable
} from './runtime-environment-abortable-requests'
import { runtimeEnvironmentRevisionFailure } from './runtime-environment-revision-guard'
-import { resetSharedControlSupport } from './runtime-environment-shared-control-support'
import {
executeSupportRoutedCall,
shouldUseSharedControlEnvelope,
@@ -31,10 +30,6 @@ import {
const DEFAULT_REMOTE_RUNTIME_TIMEOUT_MS = 15_000
-export { resetSharedControlSupport }
-
-export { getRuntimeEnvironmentStatus } from './runtime-environment-status-probe'
-
export async function callRuntimeEnvironment(
userDataPath: string,
selector: string,
diff --git a/src/main/ipc/runtime-environments/runtime-environments.ts b/src/main/ipc/runtime-environments/runtime-environments.ts
index 9a6a958bf0ff..eb0438421efa 100644
--- a/src/main/ipc/runtime-environments/runtime-environments.ts
+++ b/src/main/ipc/runtime-environments/runtime-environments.ts
@@ -19,7 +19,7 @@ import {
import { registerRuntimeEnvironmentRecoveryHandler } from './runtime-environment-recovery-handler'
import { registerRuntimeEnvironmentRepairHandler } from './runtime-environment-repair-handler'
import { advanceRuntimeEnvironmentTransportGeneration } from './runtime-environment-transport-generation'
-import { resetSharedControlSupport } from './runtime-environment-transport-routing'
+import { resetSharedControlSupport } from './runtime-environment-shared-control-support'
import { RUNTIME_ENVIRONMENT_HANDLER_CHANNELS } from './runtime-environment-handler-channels'
import { registerOrcadRuntimeLifecycleHandlers } from './orcad-runtime-lifecycle-handlers'
import { registerOrcadRuntimeConversionHandlers } from './orcad-runtime-conversion-handlers'
diff --git a/src/main/ipc/workspace-cleanup-folder-workspaces.ts b/src/main/ipc/workspace-cleanup-folder-workspaces.ts
index 37ad3986578e..7b3ec47b8ed3 100644
--- a/src/main/ipc/workspace-cleanup-folder-workspaces.ts
+++ b/src/main/ipc/workspace-cleanup-folder-workspaces.ts
@@ -7,7 +7,7 @@ import {
FOLDER_WORKSPACE_INSTANCE_SEPARATOR,
getRepoMainWorktreeId
} from '../../shared/worktree/id'
-import { mergeWorktree } from './worktree-logic'
+import { mergeWorktree } from './worktree-metadata-merge'
import { getRepoOwnedWorktreeMeta } from '../worktree-metadata-ownership'
export function listWorkspaceCleanupFolderWorkspaces(
diff --git a/src/main/ipc/workspace-cleanup-scan.ts b/src/main/ipc/workspace-cleanup-scan.ts
index 6c07d75ba713..c532ca14e48c 100644
--- a/src/main/ipc/workspace-cleanup-scan.ts
+++ b/src/main/ipc/workspace-cleanup-scan.ts
@@ -3,7 +3,7 @@ import { isFolderRepo } from '../../shared/repo-kind'
import { readWorktreeMetaForHost } from '../persistence/host-qualified-worktree-meta'
import type { Repo } from '../../shared/repo-types'
import type { GitWorktreeInfo, Worktree } from '../../shared/worktree/types'
-import { mergeWorktree } from './worktree-logic'
+import { mergeWorktree } from './worktree-metadata-merge'
import type {
WorkspaceCleanupCandidate,
WorkspaceCleanupScanArgs,
diff --git a/src/main/ipc/worktree-base-directory-poller.test.ts b/src/main/ipc/worktree-base-directory-poller.test.ts
index 877a2bd02191..4ad4078b9f53 100644
--- a/src/main/ipc/worktree-base-directory-poller.test.ts
+++ b/src/main/ipc/worktree-base-directory-poller.test.ts
@@ -6,10 +6,10 @@ import { join } from 'node:path'
import {
createWorktreePollerWindowVisibility,
startWorktreeBaseDirectoryPoller,
- WORKTREE_BASE_BACKSTOP_TICKS,
type WorktreeBasePollEvent,
type WorktreePollerWindowVisibility
} from './worktree-base-directory-poller'
+import { WORKTREE_BASE_BACKSTOP_TICKS } from './worktree-base-directory-marker-poller'
import { startGitCommonPrimaryPolling } from './worktree-git-common-primary-polling'
import type {
WorktreeBaseRepoWatchConfig,
diff --git a/src/main/ipc/worktree-base-directory-poller.ts b/src/main/ipc/worktree-base-directory-poller.ts
index 39c5b5f48c02..d0589b61de12 100644
--- a/src/main/ipc/worktree-base-directory-poller.ts
+++ b/src/main/ipc/worktree-base-directory-poller.ts
@@ -6,8 +6,6 @@ import type {
import { startBasePoller } from './worktree-base-directory-marker-poller'
import { startGitCommonWatch } from './worktree-git-common-watch'
-export { WORKTREE_BASE_BACKSTOP_TICKS } from './worktree-base-directory-marker-poller'
-
export type WorktreeBasePollEvent = { type: 'create' | 'update' | 'delete'; path: string }
export type WorktreeBaseSubscription = { unsubscribe: () => Promise }
diff --git a/src/main/ipc/worktree-logic.test.ts b/src/main/ipc/worktree-logic.test.ts
index 0cab9ede517b..0df96fa97abf 100644
--- a/src/main/ipc/worktree-logic.test.ts
+++ b/src/main/ipc/worktree-logic.test.ts
@@ -2,27 +2,31 @@ import { posix, resolve } from 'node:path'
import { describe, expect, it } from 'vitest'
import {
sanitizeWorktreeName,
- sanitizeWorktreeDisplayName,
- resolveWorktreeCreateDisplayName,
- resolveWorktreeCreateDisplayNameRequest,
- resolveWorktreeCreateDisplayNameMeta,
ensurePathWithinWorkspace,
- computeBranchName,
- getConfiguredBranchPrefix,
- computeValidatedBranchName,
computeWorktreePath,
computeRemoteWorktreePath,
computeWorkspaceRoot,
getWorktreeCreationLayout,
getWorktreePathSettings,
- shouldSetDisplayName,
- mergeWorktree,
parseWorktreeId,
formatWorktreeRemovalError,
isWindowsLongPathWorktreeRemovalError,
isOrphanCompatiblePreflightError,
isOrphanedWorktreeError
} from './worktree-logic'
+import {
+ sanitizeWorktreeDisplayName,
+ resolveWorktreeCreateDisplayName,
+ resolveWorktreeCreateDisplayNameRequest,
+ resolveWorktreeCreateDisplayNameMeta,
+ shouldSetDisplayName
+} from './worktree-display-name'
+import {
+ computeBranchName,
+ getConfiguredBranchPrefix,
+ computeValidatedBranchName
+} from './worktree-branch-name'
+import { mergeWorktree } from './worktree-metadata-merge'
import { areWorktreePathsEqual } from '../git/worktree-path-comparison'
describe('sanitizeWorktreeName', () => {
diff --git a/src/main/ipc/worktree-logic.ts b/src/main/ipc/worktree-logic.ts
index e6d371ec698e..bb84ce81e9b9 100644
--- a/src/main/ipc/worktree-logic.ts
+++ b/src/main/ipc/worktree-logic.ts
@@ -21,13 +21,6 @@ type WorktreePathSettings = Pick
-export {
- computeBranchName,
- getConfiguredBranchPrefix,
- computeValidatedBranchName
-} from './worktree-branch-name'
-export { mergeWorktree } from './worktree-metadata-merge'
-
/**
* Sanitize a worktree name for use in branch names and directory paths.
* Strips unsafe characters and collapses runs of special chars to a single hyphen.
@@ -66,14 +59,6 @@ function containsEmoji(input: string): boolean {
)
}
-export {
- resolveWorktreeCreateDisplayName,
- resolveWorktreeCreateDisplayNameRequest,
- resolveWorktreeCreateDisplayNameMeta,
- sanitizeWorktreeDisplayName,
- shouldSetDisplayName
-} from './worktree-display-name'
-
/**
* Ensure a target path is within the workspace directory (prevent path traversal).
*/
diff --git a/src/main/ipc/worktree-remote.ts b/src/main/ipc/worktree-remote.ts
index e3875a3a309e..371a2f2e5252 100644
--- a/src/main/ipc/worktree-remote.ts
+++ b/src/main/ipc/worktree-remote.ts
@@ -63,16 +63,18 @@ type CreateWorktreeArgsWithSystemProvenance = CreateWorktreeArgs & {
}
import {
sanitizeWorktreeName,
- resolveWorktreeCreateDisplayNameRequest,
- resolveWorktreeCreateDisplayNameMeta,
- computeValidatedBranchName,
computeWorktreePath,
computeWorkspaceRootAsync,
ensurePathWithinWorkspace,
getWorktreeCreationLayout,
- getWorktreePathSettings,
- mergeWorktree
+ getWorktreePathSettings
} from './worktree-logic'
+import {
+ resolveWorktreeCreateDisplayNameRequest,
+ resolveWorktreeCreateDisplayNameMeta
+} from './worktree-display-name'
+import { computeValidatedBranchName } from './worktree-branch-name'
+import { mergeWorktree } from './worktree-metadata-merge'
import { resolveCreatedWorktree } from './created-worktree-reconciliation'
import { notifyLineageRepos } from '../worktree-lineage-change-notification'
import { getRepoIdFromWorktreeId } from '../../shared/worktree/id'
diff --git a/src/main/ipc/worktrees/create/folder-workspace-creation.ts b/src/main/ipc/worktrees/create/folder-workspace-creation.ts
index 6581a9ffd5ff..4ba0d41db4b5 100644
--- a/src/main/ipc/worktrees/create/folder-workspace-creation.ts
+++ b/src/main/ipc/worktrees/create/folder-workspace-creation.ts
@@ -5,7 +5,7 @@ import type { CreateWorktreeResult } from '../../../../shared/worktree/create-ty
import type { Store } from '../../../persistence/loading-store/store'
import type { CreateWorktreeArgsWithSystemProvenance } from '../ipc-context-schemas'
import { getFolderWorkspaceInstanceId, mergeFolderWorkspace } from '../folder-workspace-model'
-import { resolveWorktreeCreateDisplayNameRequest } from '../../worktree-logic'
+import { resolveWorktreeCreateDisplayNameRequest } from '../../worktree-display-name'
export function createFolderWorkspace(
args: CreateWorktreeArgsWithSystemProvenance,
diff --git a/src/main/ipc/worktrees/listing/detected-worktree-classification.test.ts b/src/main/ipc/worktrees/listing/detected-worktree-classification.test.ts
index ea4cff00d308..5a22eccb303c 100644
--- a/src/main/ipc/worktrees/listing/detected-worktree-classification.test.ts
+++ b/src/main/ipc/worktrees/listing/detected-worktree-classification.test.ts
@@ -31,7 +31,7 @@ vi.mock('node:crypto', async (importOriginal) => ({
const { buildDetectedGitWorktrees } = await import('./ssh-worktree-fallback')
const { getProjectHostSetupWorktreeMeta } =
await import('../../../../shared/project-host-setup-lookup')
-const { mergeWorktree } = await import('../../worktree-logic')
+const { mergeWorktree } = await import('../../worktree-metadata-merge')
const { resolveWorktreeMetaWithDiscoveryBackfill } = await import('./worktree-discovery-metadata')
const ownership = await import('../../../../shared/worktree/ownership')
const { projectResolvedWorktreeLineage } =
diff --git a/src/main/ipc/worktrees/listing/ssh-worktree-fallback.ts b/src/main/ipc/worktrees/listing/ssh-worktree-fallback.ts
index acb839fe3a29..8f8fe61ab6e5 100644
--- a/src/main/ipc/worktrees/listing/ssh-worktree-fallback.ts
+++ b/src/main/ipc/worktrees/listing/ssh-worktree-fallback.ts
@@ -1,6 +1,7 @@
import { preserveFolderUpgradeWorktreePath } from '../../../folder-upgrade-worktree-path'
import type { WorktreeMeta } from '../../../../shared/worktree/meta-types'
-import { parseWorktreeId, mergeWorktree } from '../../worktree-logic'
+import { parseWorktreeId } from '../../worktree-logic'
+import { mergeWorktree } from '../../worktree-metadata-merge'
import {
getRepoIdFromWorktreeId,
getWorktreePathBasenameFromId
diff --git a/src/main/provisioned-root-checkout.ts b/src/main/provisioned-root-checkout.ts
index 07b7a56e21e4..2fd854ad216c 100644
--- a/src/main/provisioned-root-checkout.ts
+++ b/src/main/provisioned-root-checkout.ts
@@ -9,11 +9,11 @@ import type { AutomationWorkspaceProvenance, GitWorktreeInfo } from '../shared/w
import { normalizeRuntimePathForComparison } from '../shared/cross-platform-path'
import { getProjectHostSetupWorktreeMeta } from '../shared/project-host-setup-lookup'
import { isTuiAgent } from '../shared/tui-agent-config'
+import { getWorktreeCreationLayout } from './ipc/worktree-logic'
import {
- getWorktreeCreationLayout,
resolveWorktreeCreateDisplayNameMeta,
resolveWorktreeCreateDisplayNameRequest
-} from './ipc/worktree-logic'
+} from './ipc/worktree-display-name'
export type ProvisionedRootRequest = Pick<
CreateWorktreeArgs,
diff --git a/src/main/runtime/repo-worktree-row-resolution.ts b/src/main/runtime/repo-worktree-row-resolution.ts
index a81672acc37a..764e3dae409d 100644
--- a/src/main/runtime/repo-worktree-row-resolution.ts
+++ b/src/main/runtime/repo-worktree-row-resolution.ts
@@ -24,7 +24,7 @@ import type { ProjectExecutionRuntimeResolution } from '../../shared/project-exe
import type { RuntimeStore } from './runtime-store-contract'
import { areWorktreePathsEqual } from '../git/worktree-path-comparison'
-import { mergeWorktree } from '../ipc/worktree-logic'
+import { mergeWorktree } from '../ipc/worktree-metadata-merge'
import { pruneLineageForMissingRepoWorktrees } from '../worktree-lineage-pruning'
import { getRepoOwnedWorktreeMeta } from '../worktree-metadata-ownership'
import { resolveLocalProjectRuntimesForRepos } from '../project-runtime-git-options'
diff --git a/src/main/runtime/runtime-folder-worktree-create.ts b/src/main/runtime/runtime-folder-worktree-create.ts
index 495a80923be1..5735db338234 100644
--- a/src/main/runtime/runtime-folder-worktree-create.ts
+++ b/src/main/runtime/runtime-folder-worktree-create.ts
@@ -2,7 +2,7 @@ import { paneIdentity } from './runtime-terminal-pane-identity'
import { shouldSeedWorktreePrimaryTerminal } from '../../shared/worktree-first-surface'
import { randomUUID } from 'node:crypto'
import { getProjectHostSetupWorktreeMeta } from '../../shared/project-host-setup-lookup'
-import { resolveWorktreeCreateDisplayNameRequest } from '../ipc/worktree-logic'
+import { resolveWorktreeCreateDisplayNameRequest } from '../ipc/worktree-display-name'
import type { RuntimeTerminalCreate } from '../../shared/runtime-types'
import type { CreateWorktreeResult } from '../../shared/worktree/create-types'
import type { Repo } from '../../shared/repo-types'
diff --git a/src/main/runtime/runtime-local-worktree-create-candidate.ts b/src/main/runtime/runtime-local-worktree-create-candidate.ts
index 169e62f5a57f..dafa65868c13 100644
--- a/src/main/runtime/runtime-local-worktree-create-candidate.ts
+++ b/src/main/runtime/runtime-local-worktree-create-candidate.ts
@@ -5,10 +5,10 @@ import type { getPRForBranch } from '../github/client'
import {
computeWorktreePath,
ensurePathWithinWorkspace,
- resolveWorktreeCreateDisplayNameRequest,
sanitizeWorktreeName,
type getWorktreePathSettings
} from '../ipc/worktree-logic'
+import { resolveWorktreeCreateDisplayNameRequest } from '../ipc/worktree-display-name'
import { getBranchConflictKind } from '../git/repo'
import {
getBranchNameOverrideCandidate,
diff --git a/src/main/runtime/runtime-local-worktree-materialization.ts b/src/main/runtime/runtime-local-worktree-materialization.ts
index 04a064589aab..92dc5d228524 100644
--- a/src/main/runtime/runtime-local-worktree-materialization.ts
+++ b/src/main/runtime/runtime-local-worktree-materialization.ts
@@ -8,11 +8,9 @@ import type { CreateWorktreeArgs } from '../../shared/worktree/create-types'
import type { TuiAgent } from '../../shared/tui-agent'
import { resolveWorktreeIncludePaths } from '../git/worktree-include-file'
import { formatWorktreeIncludeCopyWarning } from '../ipc/worktree-include-copy-budget'
-import {
- getWorktreeCreationLayout,
- mergeWorktree,
- resolveWorktreeCreateDisplayNameMeta
-} from '../ipc/worktree-logic'
+import { getWorktreeCreationLayout } from '../ipc/worktree-logic'
+import { mergeWorktree } from '../ipc/worktree-metadata-merge'
+import { resolveWorktreeCreateDisplayNameMeta } from '../ipc/worktree-display-name'
import {
createWorktreeCopiedPaths,
createWorktreeLinkedPaths,
diff --git a/src/main/runtime/runtime-managed-worktree-queries.ts b/src/main/runtime/runtime-managed-worktree-queries.ts
index 45b575359f92..bf10a800e1f4 100644
--- a/src/main/runtime/runtime-managed-worktree-queries.ts
+++ b/src/main/runtime/runtime-managed-worktree-queries.ts
@@ -28,7 +28,7 @@ import {
resolveCustomWorktreeVisibilitySources,
type WorktreeVisibilitySourceMatcher
} from '../../shared/worktree/visibility-sources'
-import { mergeWorktree } from '../ipc/worktree-logic'
+import { mergeWorktree } from '../ipc/worktree-metadata-merge'
import { pruneLineageForMissingRepoWorktrees } from '../worktree-lineage-pruning'
import { pruneMetadataMissingFromAuthoritativeLocalScan } from '../ipc/worktrees/listing/authoritative-local-worktree-metadata-pruning'
import type { Store } from '../persistence'
diff --git a/src/main/runtime/runtime-worktree-create-git.ts b/src/main/runtime/runtime-worktree-create-git.ts
index 94547f219eff..461c677a9222 100644
--- a/src/main/runtime/runtime-worktree-create-git.ts
+++ b/src/main/runtime/runtime-worktree-create-git.ts
@@ -5,7 +5,7 @@ import { getPRForBranch } from '../github/client'
import type { GitAdmissionTier } from '../../shared/rpc-contract/git-admission-tier-params'
import { gitExecFileAsync } from '../git/runner'
import { listWorktrees } from '../git/worktree'
-import { computeValidatedBranchName } from '../ipc/worktree-logic'
+import { computeValidatedBranchName } from '../ipc/worktree-branch-name'
import { getHostedReviewForBranch } from '../source-control/hosted-review'
import {
getSelectedReviewBranch,
diff --git a/src/main/runtime/workspaces/workspace-selectors.ts b/src/main/runtime/workspaces/workspace-selectors.ts
index bd51fe90a812..57c67b33a8e1 100644
--- a/src/main/runtime/workspaces/workspace-selectors.ts
+++ b/src/main/runtime/workspaces/workspace-selectors.ts
@@ -15,7 +15,7 @@ import type { Repo } from '../../../shared/repo-types'
import type { RuntimeStore } from '../runtime-store-contract'
import type { RuntimeWorkspaceCatalog } from './workspace-catalog'
import { areWorktreePathsEqual } from '../../git/worktree-path-comparison'
-import { mergeWorktree } from '../../ipc/worktree-logic'
+import { mergeWorktree } from '../../ipc/worktree-metadata-merge'
export abstract class RuntimeWorkspaceSelectors extends OrcaRuntimeWithResolveBrowserNetworkExecutionHostForWorktree {
protected abstract hasFreshResolvedWorktreeCache(
diff --git a/src/main/skills/skill-cloud-grant-installation.test.ts b/src/main/skills/skill-cloud-grant-installation.test.ts
index 2298115fd22a..2255b51974c7 100644
--- a/src/main/skills/skill-cloud-grant-installation.test.ts
+++ b/src/main/skills/skill-cloud-grant-installation.test.ts
@@ -11,7 +11,7 @@ const mocks = vi.hoisted(() => ({
vi.mock('electron', () => ({
app: { getPath: () => '/state', isPackaged: true }
}))
-vi.mock('../ipc/runtime-environments/runtime-environment-transport-routing', () => ({
+vi.mock('../ipc/runtime-environments/runtime-environment-status-probe', () => ({
getRuntimeEnvironmentStatus: mocks.getRuntimeEnvironmentStatus
}))
vi.mock('./skill-remote-install-service', () => ({
diff --git a/src/main/skills/skill-cloud-grant-installation.ts b/src/main/skills/skill-cloud-grant-installation.ts
index 57304a5d2f62..59b489c1fa80 100644
--- a/src/main/skills/skill-cloud-grant-installation.ts
+++ b/src/main/skills/skill-cloud-grant-installation.ts
@@ -14,7 +14,7 @@ import type {
SkillInstallRequest
} from '../../shared/skill-install-contract'
import type { SkillCloudDownloadGrant } from '../../shared/skill-cloud-contract'
-import { getRuntimeEnvironmentStatus } from '../ipc/runtime-environments/runtime-environment-transport-routing'
+import { getRuntimeEnvironmentStatus } from '../ipc/runtime-environments/runtime-environment-status-probe'
import type { OrcaRuntimeService } from '../runtime/orca-runtime'
import { skillInstallFailureFromError } from './skill-install-operation-error'
import { recordSkillCapabilityAbsence } from './skill-operation-observability'
diff --git a/src/main/skills/skill-runtime-capability.test.ts b/src/main/skills/skill-runtime-capability.test.ts
index 212beac45eeb..424b0173b793 100644
--- a/src/main/skills/skill-runtime-capability.test.ts
+++ b/src/main/skills/skill-runtime-capability.test.ts
@@ -1,12 +1,12 @@
import { beforeEach, describe, expect, it, vi } from 'vitest'
-import { getRuntimeEnvironmentStatus } from '../ipc/runtime-environments/runtime-environment-transport-routing'
+import { getRuntimeEnvironmentStatus } from '../ipc/runtime-environments/runtime-environment-status-probe'
import {
supportsSkillRuntimeCancellation,
supportsSkillRuntimeInstall,
supportsSkillRuntimeManagement
} from './skill-runtime-capability'
-vi.mock('../ipc/runtime-environments/runtime-environment-transport-routing', () => ({
+vi.mock('../ipc/runtime-environments/runtime-environment-status-probe', () => ({
getRuntimeEnvironmentStatus: vi.fn()
}))
diff --git a/src/main/skills/skill-runtime-capability.ts b/src/main/skills/skill-runtime-capability.ts
index 81b6b348d1d4..e05c000f880e 100644
--- a/src/main/skills/skill-runtime-capability.ts
+++ b/src/main/skills/skill-runtime-capability.ts
@@ -4,7 +4,7 @@ import {
SKILL_INSTALL_CAPABILITY,
SKILL_MANAGEMENT_CAPABILITY
} from '../../shared/skill-install-capability'
-import { getRuntimeEnvironmentStatus } from '../ipc/runtime-environments/runtime-environment-transport-routing'
+import { getRuntimeEnvironmentStatus } from '../ipc/runtime-environments/runtime-environment-status-probe'
export async function supportsSkillRuntimeManagement(
userDataPath: string,
diff --git a/src/main/startup/main-process-quit.ts b/src/main/startup/main-process-quit.ts
index 20e58eea1ef3..ce29c0d554f3 100644
--- a/src/main/startup/main-process-quit.ts
+++ b/src/main/startup/main-process-quit.ts
@@ -1,5 +1,5 @@
import { app, type Event } from 'electron'
-import { closeAllWatchers } from '../ipc/filesystem-watcher'
+import { closeAllWatchers } from '../ipc/filesystem-watcher-shutdown'
import { disposeWorktreeBaseDirectoryWatchers } from '../ipc/worktree-base-directory-watcher'
import { stopFolderRepoGitUpgradeWatch } from '../ipc/folder-repo-git-upgrade'
import { killAllPty } from '../ipc/pty/kill-all'
diff --git a/src/main/workspace-space-repo-scan.ts b/src/main/workspace-space-repo-scan.ts
index e920d70c5ac3..79e7a4ef64f1 100644
--- a/src/main/workspace-space-repo-scan.ts
+++ b/src/main/workspace-space-repo-scan.ts
@@ -18,7 +18,7 @@ import {
resolveGitRouteForHost
} from './providers/execution-host-provider-dispatch'
import { createFolderWorktree, listRepoWorktrees } from './repo-worktrees'
-import { mergeWorktree } from './ipc/worktree-logic'
+import { mergeWorktree } from './ipc/worktree-metadata-merge'
import { getLocalProjectWorktreeGitOptions } from './project-runtime-git-options'
import {
WorkspaceSpaceScanCancelledError,
From 93ed192025545c597a5df3c9804fb7c19085eaa0 Mon Sep 17 00:00:00 2001
From: Jinwoo Hong <73622457+Jinwoo-H@users.noreply.github.com>
Date: Sun, 18 Oct 2026 10:25:37 -0700
Subject: [PATCH 07/15] The window's layout stream reconnects after a drop; a
retried quit still sends resume records (dark, layout-owner build only)
(#30380)
* chore(layout): the drift check's ignore comment names every main-only kind (dark, layout-owner build only)
* fix(layout): a quit stage retried after a failed one still sends the resume records (dark, layout-owner build only)
* feat(layout): the window's local layout stream reopens after a loss, and its snapshot redraws every workspace (dark, layout-owner build only)
---
.../persistence/window-save-divergence.ts | 3 +-
.../quit-sleep-record-capture.test.ts | 75 ++++++++++
.../app-shell/quit-sleep-record-capture.ts | 27 ++++
.../app-shell/shutdown-checkpoint-persist.ts | 5 +
.../app-shell/use-app-session-persistence.ts | 19 +--
.../src/runtime/runtime-layout-client.test.ts | 133 +++++++++++++++---
.../src/runtime/runtime-layout-client.ts | 26 +++-
.../workspace-layout-frame-sync.test.ts | 36 ++++-
.../runtime/workspace-layout-frame-sync.ts | 10 +-
9 files changed, 298 insertions(+), 36 deletions(-)
create mode 100644 src/renderer/src/app-shell/quit-sleep-record-capture.test.ts
create mode 100644 src/renderer/src/app-shell/quit-sleep-record-capture.ts
diff --git a/src/main/persistence/window-save-divergence.ts b/src/main/persistence/window-save-divergence.ts
index a088b595b5d1..f6712503d44b 100644
--- a/src/main/persistence/window-save-divergence.ts
+++ b/src/main/persistence/window-save-divergence.ts
@@ -195,7 +195,8 @@ export function windowSaveDivergences(
...rawPaths.keys()
])
const result: WindowSaveDivergence[] = []
- // Ignored, as main's own writes: pane bindings, resume records, default-tab marks, closed-tab records, row owners.
+ // Ignored, as main's own writes: pane bindings, resume records, default-tab marks, closed-tab records, row owners,
+ // clientHostedBrowserPagesByWorkspace and the topology revision.
for (const workspace of workspaces) {
const paths = [
...diffWorkspaceLayouts(was?.workspaces[workspace], now?.workspaces[workspace]),
diff --git a/src/renderer/src/app-shell/quit-sleep-record-capture.test.ts b/src/renderer/src/app-shell/quit-sleep-record-capture.test.ts
new file mode 100644
index 000000000000..eed3d07131e6
--- /dev/null
+++ b/src/renderer/src/app-shell/quit-sleep-record-capture.test.ts
@@ -0,0 +1,75 @@
+import { describe, expect, it, vi } from 'vitest'
+import type { SleepingAgentSessionRecord } from '../../../shared/agent-session-resume'
+import type { AppState } from '../store/types'
+import { createQuitSleepRecordCapture } from './quit-sleep-record-capture'
+import { createShutdownCheckpointPersist } from './shutdown-checkpoint-persist'
+
+const RECORD: SleepingAgentSessionRecord = {
+ paneKey: 'tab-1:11111111-1111-4111-8111-111111111111',
+ worktreeId: 'wt-1',
+ agent: 'claude',
+ providerSession: { key: 'session_id', id: 'session-1' },
+ prompt: '',
+ state: 'working',
+ capturedAt: 1,
+ updatedAt: 1
+}
+
+/** A window holding tab-1, whose quit capture records RECORD (and then finds it unchanged). */
+function windowStore() {
+ let records: AppState['sleepingAgentSessionsByPaneKey'] = {}
+ const state = (): AppState =>
+ // oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: the capture reads only these fields.
+ ({
+ tabsByWorktree: { 'wt-1': [{ id: 'tab-1' }] },
+ sleepingAgentSessionsByPaneKey: records,
+ captureAllSleepingAgentSessions: () => {
+ records = { [RECORD.paneKey]: RECORD }
+ }
+ }) as unknown as AppState
+ return { getState: state }
+}
+
+function persist(stage: (args: { sleepRecords?: SleepingAgentSessionRecord[] }) => void) {
+ const capture = createQuitSleepRecordCapture(windowStore())
+ return createShutdownCheckpointPersist({
+ shouldCaptureSession: () => true,
+ captureTerminalBuffers: vi.fn(),
+ captureSleepingAgentSessions: capture.capture,
+ onSleepRecordsStaged: capture.staged,
+ buildSessionSnapshots: () => [],
+ buildUiPatch: () => ({}),
+ hasDirtyOpenFiles: () => false,
+ isDegradableShutdownInProgress: () => false,
+ stageBeforeUnloadSync: stage
+ })
+}
+
+describe('the quit capture’s resume records in a layout-owner build', () => {
+ it('sends the first capture’s records again on a stage retried after a failure', () => {
+ const staged: (SleepingAgentSessionRecord[] | undefined)[] = []
+ let fail = true
+ const checkpoint = persist(({ sleepRecords }) => {
+ staged.push(sleepRecords)
+ if (fail) {
+ throw new Error('stage failed')
+ }
+ })
+
+ expect(() => checkpoint.run()).toThrow('stage failed')
+ fail = false
+ checkpoint.run()
+
+ expect(staged).toEqual([[RECORD], [RECORD]])
+ })
+
+ it('sends nothing again once a stage carried them', () => {
+ const staged: (SleepingAgentSessionRecord[] | undefined)[] = []
+ const checkpoint = persist(({ sleepRecords }) => staged.push(sleepRecords))
+
+ checkpoint.run()
+ checkpoint.run()
+
+ expect(staged).toEqual([[RECORD], undefined])
+ })
+})
diff --git a/src/renderer/src/app-shell/quit-sleep-record-capture.ts b/src/renderer/src/app-shell/quit-sleep-record-capture.ts
new file mode 100644
index 000000000000..c352c4319b5b
--- /dev/null
+++ b/src/renderer/src/app-shell/quit-sleep-record-capture.ts
@@ -0,0 +1,27 @@
+import type { AppState } from '../store/types'
+import type { SleepingAgentSessionRecord } from '../../../shared/agent-session-resume'
+import { changedSleepingRecords } from '../store/terminals/terminal-sleep-layout-owner'
+
+/**
+ * A layout-owner build's quit capture: the resume records it changed of tabs the window holds,
+ * since the last stage that carried them, so a stage retried after a failed one still sends the
+ * first capture's records.
+ */
+export function createQuitSleepRecordCapture(store: { getState: () => AppState }): {
+ capture: () => SleepingAgentSessionRecord[]
+ staged: () => void
+} {
+ let unstagedSince: AppState['sleepingAgentSessionsByPaneKey'] | null = null
+ return {
+ capture: () => {
+ const previous = unstagedSince ?? store.getState().sleepingAgentSessionsByPaneKey
+ unstagedSince = previous
+ store.getState().captureAllSleepingAgentSessions('quit')
+ const state = store.getState()
+ return changedSleepingRecords(state, previous, state.sleepingAgentSessionsByPaneKey).recorded
+ },
+ staged: () => {
+ unstagedSince = null
+ }
+ }
+}
diff --git a/src/renderer/src/app-shell/shutdown-checkpoint-persist.ts b/src/renderer/src/app-shell/shutdown-checkpoint-persist.ts
index 23194e31bc81..3eb4f025c41f 100644
--- a/src/renderer/src/app-shell/shutdown-checkpoint-persist.ts
+++ b/src/renderer/src/app-shell/shutdown-checkpoint-persist.ts
@@ -17,6 +17,8 @@ export type ShutdownCheckpointPersistDeps = {
captureTerminalBuffers: () => void
/** Returns the records it changed when main records them (a layout-owner build). */
captureSleepingAgentSessions: () => SleepingAgentSessionRecord[] | void
+ /** The stage carried the capture's records: a retry's capture may diff from here. */
+ onSleepRecordsStaged?: () => void
buildSessionSnapshots: () => WorkspaceSessionHostSnapshot[]
buildUiPatch: () => Partial
hasDirtyOpenFiles: () => boolean
@@ -82,6 +84,9 @@ export function createShutdownCheckpointPersist(
ui: deps.buildUiPatch(),
...(sleepRecords && sleepRecords.length > 0 && !degraded ? { sleepRecords } : {})
})
+ if (!degraded) {
+ deps.onSleepRecordsStaged?.()
+ }
} catch (error) {
// A durable-only stage has nothing safer left to fall back to.
if (degraded) {
diff --git a/src/renderer/src/app-shell/use-app-session-persistence.ts b/src/renderer/src/app-shell/use-app-session-persistence.ts
index 932083ff52dd..6fcf4e888e85 100644
--- a/src/renderer/src/app-shell/use-app-session-persistence.ts
+++ b/src/renderer/src/app-shell/use-app-session-persistence.ts
@@ -20,8 +20,7 @@ import {
createShutdownCheckpointGuard
} from '../lib/shutdown-checkpoint-guard'
import { createShutdownCheckpointPersist } from './shutdown-checkpoint-persist'
-import { changedSleepingRecords } from '../store/terminals/terminal-sleep-layout-owner'
-import type { SleepingAgentSessionRecord } from '../../../shared/agent-session-resume'
+import { createQuitSleepRecordCapture } from './quit-sleep-record-capture'
import { shutdownBufferCaptures } from '../components/terminal-pane/shutdown-buffer-captures'
import {
dispatchWindowCloseRequest,
@@ -36,14 +35,6 @@ import {
ORCA_RENDERER_UNLOAD_PREVENTED_EVENT
} from '../../../shared/renderer-shutdown-events'
-/** The quit capture, returning the resume records it changed of tabs the window holds. */
-function captureQuitSleepRecordsForMain(): SleepingAgentSessionRecord[] {
- const previous = useAppStore.getState().sleepingAgentSessionsByPaneKey
- useAppStore.getState().captureAllSleepingAgentSessions('quit')
- const state = useAppStore.getState()
- return changedSleepingRecords(state, previous, state.sleepingAgentSessionsByPaneKey).recorded
-}
-
// Why: bound the resume-record loss window on a hard kill to ~1 min; capture skips unchanged records so per-tick cost is negligible.
const SLEEPING_AGENT_RESUME_CAPTURE_INTERVAL_MS = 60_000
@@ -77,6 +68,9 @@ export function useAppSessionPersistence(): void {
// two firings, PTY exit events can arrive and unmount TerminalPanes,
// emptying shutdownBufferCaptures. The guard prevents the second call
// from overwriting the good session data with an empty snapshot.
+ const quitSleepRecords = ORCA_LAYOUT_OWNER_IS_MAIN
+ ? createQuitSleepRecordCapture(useAppStore)
+ : null
const shutdownCheckpointPersist = createShutdownCheckpointPersist({
shouldCaptureSession: () => shouldPersistWorkspaceSession(useAppStore.getState()),
captureTerminalBuffers: () => {
@@ -93,9 +87,10 @@ export function useAppSessionPersistence(): void {
// map so a daemon/session death while the app is closed can still
// cold-restore via the agent's resume command (#5232).
// Switch point: the stage writes only the capture's changes into main's records.
- captureSleepingAgentSessions: ORCA_LAYOUT_OWNER_IS_MAIN
- ? captureQuitSleepRecordsForMain
+ captureSleepingAgentSessions: quitSleepRecords
+ ? quitSleepRecords.capture
: () => useAppStore.getState().captureAllSleepingAgentSessions('quit'),
+ onSleepRecordsStaged: quitSleepRecords?.staged,
// Why: re-read state after capture() calls populated scrollback buffers
// into the store via Zustand setters. The shouldCaptureSession read is
// only for the gating flags and would miss those updates.
diff --git a/src/renderer/src/runtime/runtime-layout-client.test.ts b/src/renderer/src/runtime/runtime-layout-client.test.ts
index 95c535e57553..5ddc9b01a59f 100644
--- a/src/renderer/src/runtime/runtime-layout-client.test.ts
+++ b/src/renderer/src/runtime/runtime-layout-client.test.ts
@@ -203,29 +203,35 @@ describe.each(targets)('runtime layout client over the %s transport', (_name, ta
expect(positions).toEqual([3, 4, 5, 6])
})
- it('after a lost stream, keeps the last state and never reopens it', async () => {
- subscribe()
- const first = await opened(1)
- first.send(
- snapshot([
- { key: 'a', layout: layout('a', ['t1', 't2']) },
- { key: 'b', layout: layout('b') }
- ])
- )
- first.drop()
- expect(first.unsubscribed).toBe(true)
- expect(status).toEqual({ state: 'lost' })
- await vi.advanceTimersByTimeAsync(60_000)
- expect(host.streams).toHaveLength(1)
- // The last state stays; a late frame from the dropped stream changes nothing.
- first.send({ type: 'removed', key: 'a' })
- expect(cache).toEqual({ a: layout('a', ['t1', 't2']), b: layout('b') })
- })
+ it.skipIf(target.kind === 'local')(
+ 'after a lost stream, keeps the last state and never reopens it',
+ async () => {
+ subscribe()
+ const first = await opened(1)
+ first.send(
+ snapshot([
+ { key: 'a', layout: layout('a', ['t1', 't2']) },
+ { key: 'b', layout: layout('b') }
+ ])
+ )
+ first.drop()
+ expect(first.unsubscribed).toBe(true)
+ expect(status).toEqual({ state: 'lost' })
+ await vi.advanceTimersByTimeAsync(60_000)
+ expect(host.streams).toHaveLength(1)
+ // The last state stays; a late frame from the dropped stream changes nothing.
+ first.send({ type: 'removed', key: 'a' })
+ expect(cache).toEqual({ a: layout('a', ['t1', 't2']), b: layout('b') })
+ }
+ )
it.each([
['a failed subscribe', () => host.rejectNextSubscribe(), async () => {}],
['an error frame', () => {}, async () => (await opened(1)).fail('stream failed')]
])('stops after %s without retrying', async (_case, before, fail) => {
+ if (target.kind === 'local') {
+ return
+ }
before()
const subscription = subscribe()
await fail()
@@ -289,3 +295,94 @@ describe.each(targets)('runtime layout client over the %s transport', (_name, ta
await vi.waitFor(() => expect(stream.unsubscribed).toBe(true))
})
})
+
+describe('the local layout stream after a loss', () => {
+ let host: FakeHost
+ let cache: WorkspaceLayoutCache
+ let statuses: RuntimeLayoutStreamStatus[]
+
+ beforeEach(() => {
+ vi.useFakeTimers()
+ vi.spyOn(console, 'warn').mockImplementation(() => {})
+ host = installFakeHost({ kind: 'local' })
+ cache = EMPTY_WORKSPACE_LAYOUT_CACHE
+ statuses = []
+ })
+
+ afterEach(() => {
+ vi.useRealTimers()
+ vi.restoreAllMocks()
+ vi.unstubAllGlobals()
+ })
+
+ const subscribe = () =>
+ subscribeRuntimeLayout(
+ { kind: 'local' },
+ {},
+ (frame) => {
+ cache = applyLayoutFrame(cache, frame)
+ },
+ (next) => {
+ statuses.push(next)
+ }
+ )
+
+ async function opened(count: number): Promise {
+ await vi.waitFor(() => expect(host.streams).toHaveLength(count))
+ await vi.advanceTimersByTimeAsync(0)
+ return host.streams[count - 1]!
+ }
+
+ const snapshot = (workspaces: { key: string; layout: PublishedWorkspaceLayout }[]) => ({
+ type: 'snapshot',
+ subscriptionId: 'layout-1',
+ workspaces
+ })
+
+ it('reopens it, and the new snapshot replaces the cache', async () => {
+ subscribe()
+ const first = await opened(1)
+ first.send(
+ snapshot([
+ { key: 'a', layout: layout('a') },
+ { key: 'b', layout: layout('b') }
+ ])
+ )
+ first.drop()
+ expect(statuses.at(-1)).toEqual({ state: 'lost' })
+
+ await vi.advanceTimersByTimeAsync(1_000)
+ const second = await opened(2)
+ expect(statuses.at(-1)).toEqual({ state: 'connecting' })
+ second.send(snapshot([{ key: 'a', layout: layout('a', ['t1']) }]))
+ expect(statuses.at(-1)).toEqual({ state: 'live' })
+ expect(cache).toEqual({ a: layout('a', ['t1']) })
+ // A late frame from the dropped stream changes nothing.
+ first.send({ type: 'removed', key: 'a' })
+ expect(cache).toEqual({ a: layout('a', ['t1']) })
+ })
+
+ it('waits longer after each failed reopen, and close stops a pending one', async () => {
+ const subscription = subscribe()
+ ;(await opened(1)).drop()
+ host.rejectNextSubscribe()
+ await vi.advanceTimersByTimeAsync(1_000)
+ expect(statuses.at(-1)).toEqual({ state: 'lost' })
+ await vi.advanceTimersByTimeAsync(1_999)
+ expect(host.streams).toHaveLength(1)
+ await vi.advanceTimersByTimeAsync(1)
+ await opened(2)
+ host.streams[1]!.drop()
+ subscription.close()
+ expect(statuses.at(-1)).toEqual({ state: 'closed' })
+ await vi.advanceTimersByTimeAsync(60_000)
+ expect(host.streams).toHaveLength(2)
+ })
+
+ it('never reopens after a refusal', async () => {
+ subscribe()
+ ;(await opened(1)).fail('no layout stream', 'method_not_found')
+ await vi.advanceTimersByTimeAsync(60_000)
+ expect(host.streams).toHaveLength(1)
+ })
+})
diff --git a/src/renderer/src/runtime/runtime-layout-client.ts b/src/renderer/src/runtime/runtime-layout-client.ts
index 1b63efd54cdf..b3c252f2fe3a 100644
--- a/src/renderer/src/runtime/runtime-layout-client.ts
+++ b/src/renderer/src/runtime/runtime-layout-client.ts
@@ -21,9 +21,13 @@ export type RuntimeLayoutStreamStatus =
// An older host without the method, or a caller scope denied it: a retry gets the same answer.
const REFUSAL_CODES = ['method_not_found', 'forbidden'] as const
+/** First wait before a lost local stream reopens; it doubles to the cap until a snapshot comes. */
+const LOCAL_REOPEN_DELAY_MS = 1_000
+const LOCAL_REOPEN_DELAY_CAP_MS = 30_000
+
/**
- * Opens the stream once; `onFrame` gets a snapshot first, then that stream's changes. A local
- * stream ends only on close, document retirement or a refusal, so nothing reopens it. A remote
+ * Opens the stream; `onFrame` gets a snapshot first, then that stream's changes. A lost local
+ * stream reports `lost`, then reopens, and its snapshot replaces what the caller holds. A remote
* stream that drops reports `lost`; reopening it belongs to the connection's reconnect.
*/
export function subscribeRuntimeLayout(
@@ -38,6 +42,8 @@ export function subscribeRuntimeLayout(
let generation = 0
let handle: { unsubscribe: () => void } | null = null
let state: RuntimeLayoutStreamStatus['state'] = 'connecting'
+ let reopenTimer: ReturnType | null = null
+ let reopenDelay = LOCAL_REOPEN_DELAY_MS
const setStatus = (status: RuntimeLayoutStreamStatus): void => {
state = status.state
@@ -64,6 +70,15 @@ export function subscribeRuntimeLayout(
}
const refusal = REFUSAL_CODES.find((code) => hasRuntimeRpcErrorCode(error, code))
stop(refusal ? { state: 'refused', code: refusal } : { state: 'lost' })
+ // Why: layout.apply still reaches main without the stream, so only main's own changes would
+ // go unseen until a relaunch.
+ if (!refusal && target.kind === 'local') {
+ reopenTimer = setTimeout(() => {
+ reopenTimer = null
+ void open()
+ }, reopenDelay)
+ reopenDelay = Math.min(reopenDelay * 2, LOCAL_REOPEN_DELAY_CAP_MS)
+ }
}
const receive = (streamGeneration: number, value: unknown): void => {
@@ -90,6 +105,7 @@ export function subscribeRuntimeLayout(
return
}
if (frame.type === 'snapshot') {
+ reopenDelay = LOCAL_REOPEN_DELAY_MS
setStatus({ state: 'live' })
} else if (state !== 'live') {
// The host sends the snapshot first; a change before it has nothing to replace.
@@ -120,7 +136,11 @@ export function subscribeRuntimeLayout(
void open()
return {
close: () => {
- if (state === 'connecting' || state === 'live') {
+ if (reopenTimer) {
+ clearTimeout(reopenTimer)
+ reopenTimer = null
+ stop({ state: 'closed' })
+ } else if (state === 'connecting' || state === 'live') {
stop({ state: 'closed' })
}
}
diff --git a/src/renderer/src/runtime/workspace-layout-frame-sync.test.ts b/src/renderer/src/runtime/workspace-layout-frame-sync.test.ts
index 84ed356504b0..d8b1f7f991e5 100644
--- a/src/renderer/src/runtime/workspace-layout-frame-sync.test.ts
+++ b/src/renderer/src/runtime/workspace-layout-frame-sync.test.ts
@@ -21,7 +21,11 @@ import { reportWindowSessionWriteActivity } from '../lib/window-session-write-ac
import { createStoreSessionMockApi } from '../store/slices/store-session-test-harness'
import { createTestStore } from '../store/slices/store-test-helpers'
import type { LayoutFrameSlices } from '../store/workspace-layout-frame-slices'
-import { afterLayoutFrame, endLayoutFramePositions } from './layout-frame-position'
+import {
+ afterLayoutFrame,
+ endLayoutFramePositions,
+ layoutFramesFlowing
+} from './layout-frame-position'
import { holdTabPaneTree, requestTabPaneTreeRedraw } from './layout-owner-pane-intents'
import { openWorkspaceLayoutFrameSync } from './workspace-layout-frame-sync'
@@ -344,6 +348,36 @@ describe('the window drawn from layout frames', () => {
sync.close()
})
+ it('after a lost stream reopens, its snapshot redraws every workspace from main', async () => {
+ const { store, sync, layouts } = await bootWithFrames('local', localDesktopSession())
+ sync.start()
+ await flushMicrotasks()
+ stream.onStatus!({ state: 'lost' })
+ expect(layoutFramesFlowing()).toBe(false)
+ // Drawn while no frame came; main's snapshot does not have it.
+ const drawn = { type: 'leaf' as const, leafId: 'drawn-by-the-window' }
+ store.setState({
+ terminalLayoutsByTabId: {
+ ...store.getState().terminalLayoutsByTabId,
+ 'tab-shell': { ...store.getState().terminalLayoutsByTabId['tab-shell']!, root: drawn }
+ }
+ })
+
+ stream.onStatus!({ state: 'connecting' })
+ expect(layoutFramesFlowing()).toBe(true)
+ const renamed = structuredClone(layouts)
+ renamed[GIT_KEY]!.tabs.find((tab) => tab.id === 'tab-unbound')!.customTitle = 'from main'
+ stream.onFrame!(snapshot(renamed))
+ stream.onStatus!({ state: 'live' })
+ await flushMicrotasks()
+
+ const rows = store.getState().tabsByWorktree[GIT_KEY]!
+ expect(rows.find((tab) => tab.id === 'tab-unbound')!.customTitle).toBe('from main')
+ expect(store.getState().terminalLayoutsByTabId['tab-shell']!.root).not.toEqual(drawn)
+ expect(sync.terminalTab(GIT_KEY, 'tab-shell')).toBeDefined()
+ sync.close()
+ })
+
it('shows a live title change of the focused pane at once, even while a write is owed', async () => {
const { store, sync, layouts } = await bootWithFrames('local', localDesktopSession())
sync.start()
diff --git a/src/renderer/src/runtime/workspace-layout-frame-sync.ts b/src/renderer/src/runtime/workspace-layout-frame-sync.ts
index 7c0f8e85cfca..3625edd88964 100644
--- a/src/renderer/src/runtime/workspace-layout-frame-sync.ts
+++ b/src/renderer/src/runtime/workspace-layout-frame-sync.ts
@@ -259,6 +259,10 @@ export function openWorkspaceLayoutFrameSync(store: FrameSyncStore): WorkspaceLa
(frame) => {
cache = applyLayoutFrame(cache, frame)
if (frame.type === 'snapshot') {
+ // A reopened stream's snapshot redraws every workspace: the window drew alone meanwhile.
+ if (snapshotReceived) {
+ shown = {}
+ }
snapshotReceived = true
live = started
}
@@ -268,7 +272,11 @@ export function openWorkspaceLayoutFrameSync(store: FrameSyncStore): WorkspaceLa
if (status.state === 'lost' || status.state === 'refused') {
console.warn('[layout-owner] layout stream stopped:', status)
}
- if (status.state !== 'connecting' && status.state !== 'live') {
+ if (status.state === 'connecting' && !streamOpen) {
+ // The local stream reopens after a loss; replies wait for its frames again.
+ streamOpen = true
+ beginLayoutFramePositions()
+ } else if (status.state !== 'connecting' && status.state !== 'live') {
streamOpen = false
endLayoutFramePositions()
}
From 051708702c62367d1a9b91f68a5071bf8c21b21a Mon Sep 17 00:00:00 2001
From: Brennan Benson <79079362+brennanb2025@users.noreply.github.com>
Date: Sun, 18 Oct 2026 10:30:00 -0700
Subject: [PATCH 08/15] fix(jcode): let jcode's own client start its per-pane
server (#30257)
Orca started jcode's background server itself as a terminal opened, ahead of
the jcode client. On daemon-backed terminals that launch had no PATH and
silently failed; where it did start, the server ran jcode's tools and hooks
outside the shell's environment, without the client's launch flags, and
outside jcode's own startup lock. jcode's client already waits for its server
to signal ready, so it is now the only thing that starts it.
---
.../pty-daemon-spawn-session-identity.test.ts | 7 +-
src/main/ipc/pty/ipc/spawn-env.ts | 6 +-
src/main/ipc/pty/runtime/spawn-preflight.ts | 6 +-
src/main/ipc/pty/spawn-pane-env.ts | 23 +----
src/main/jcode/daemon-prewarm.test.ts | 89 -------------------
src/main/jcode/daemon-prewarm.ts | 69 --------------
src/main/providers/local-pty-spawn.ts | 11 ---
src/main/runtime/spawned-pty-env-fixtures.ts | 6 +-
8 files changed, 6 insertions(+), 211 deletions(-)
delete mode 100644 src/main/jcode/daemon-prewarm.test.ts
delete mode 100644 src/main/jcode/daemon-prewarm.ts
diff --git a/src/main/ipc/pty-daemon-spawn-session-identity.test.ts b/src/main/ipc/pty-daemon-spawn-session-identity.test.ts
index a195cde10668..62316e29cf84 100644
--- a/src/main/ipc/pty-daemon-spawn-session-identity.test.ts
+++ b/src/main/ipc/pty-daemon-spawn-session-identity.test.ts
@@ -5,7 +5,6 @@ import { setupPtyIpcSuite } from './pty-ipc-test-harness'
import { createDaemonActiveProviderFixtures } from './pty-ipc-daemon-provider-fixtures'
import { registerPtyHandlers } from './pty/register-handlers'
import { setLocalPtyProvider } from './pty/provider/registry'
-import { prewarmJcodeDaemon } from '../jcode/daemon-prewarm'
import {
buildJcodeRuntimeDir,
JCODE_RUNTIME_DIR_ENV_KEY,
@@ -58,7 +57,6 @@ vi.mock('../codex/codex-state-db-backfill-recovery', () =>
vi.mock('../agent-hooks/wsl-pi-omp-guest-readiness', () => ({
awaitExplicitPiOmpGuestReadiness: vi.fn(async () => true)
}))
-vi.mock('../jcode/daemon-prewarm', () => ({ prewarmJcodeDaemon: vi.fn() }))
describe('registerPtyHandlers', () => {
const { handlers, mainWindow, recoveredAgentClaim, recoveredAgentSurface } = setupPtyIpcSuite()
@@ -410,14 +408,13 @@ describe('registerPtyHandlers', () => {
expect(vi.mocked(awaitExplicitPiOmpGuestReadiness)).toHaveBeenCalledTimes(2)
})
- it('both daemon lanes stamp the pane identity from the spawn ids; only the window pre-warms jcode', async () => {
+ it('both daemon lanes stamp the pane identity and jcode dir from the spawn ids', async () => {
const lanes = startLanes()
const leafId = '11111111-2222-4333-8444-555555555555'
const paneKey = `tab-1:${leafId}`
const jcodeDir = shouldInjectJcodeRuntimeDir(process.platform)
? buildJcodeRuntimeDir(paneKey)
: undefined
- vi.mocked(prewarmJcodeDaemon).mockClear()
for (const lane of ['window', 'host'] as const) {
await lanes.spawn(lane, {
env: { ORCA_PANE_KEY: 'stale-tab:stale-leaf' },
@@ -430,8 +427,6 @@ describe('registerPtyHandlers', () => {
expect(env.ORCA_TAB_ID).toBe('tab-1')
expect(env[JCODE_RUNTIME_DIR_ENV_KEY]).toBe(jcodeDir)
}
- // TEMPORARY (its own PR removes it): host daemon spawns don't pre-warm jcode yet.
- expect(vi.mocked(prewarmJcodeDaemon)).toHaveBeenCalledTimes(jcodeDir ? 1 : 0)
})
})
})
diff --git a/src/main/ipc/pty/ipc/spawn-env.ts b/src/main/ipc/pty/ipc/spawn-env.ts
index 3d8f09bb5110..ea666bff0475 100644
--- a/src/main/ipc/pty/ipc/spawn-env.ts
+++ b/src/main/ipc/pty/ipc/spawn-env.ts
@@ -111,11 +111,7 @@ export async function assemblePtyIpcSpawnEnv(ctx: PtyIpcSpawnState): Promise ({ spawnProcessMock: vi.fn() }))
-vi.mock('@orca/process-host', () => ({ spawnProcess: spawnProcessMock }))
-
-import { prewarmJcodeDaemon, resetJcodeDaemonPrewarmForTests } from './daemon-prewarm'
-
-function stubChild() {
- return { unref: vi.fn(), on: vi.fn() }
-}
-
-/** Why the default: every case but the Windows one asserts POSIX behaviour, and the
- * pre-warm is a no-op off POSIX — unpinned, they would all pass vacuously on a
- * Windows runner. */
-function prewarm(args: Parameters[0]): boolean {
- return prewarmJcodeDaemon({ platform: 'darwin', ...args })
-}
-
-describe('jcode daemon pre-warm', () => {
- beforeEach(() => {
- resetJcodeDaemonPrewarmForTests()
- spawnProcessMock.mockReset()
- spawnProcessMock.mockReturnValue(stubChild())
- })
- afterEach(() => vi.restoreAllMocks())
-
- it('starts one detached daemon for a jcode pane', () => {
- expect(
- prewarm({
- launchAgent: 'jcode',
- runtimeDir: '/tmp/orca-jcode/abc',
- cwd: '/repo'
- })
- ).toBe(true)
- expect(spawnProcessMock).toHaveBeenCalledTimes(1)
- const spec = spawnProcessMock.mock.calls[0][0]
- expect(spec.args).toEqual(['--no-update', 'serve'])
- expect(spec.env.JCODE_RUNTIME_DIR).toBe('/tmp/orca-jcode/abc')
- expect(spec.detached).toBe(true)
- // Why stdio ignore: the daemon outlives this spawn, and an inherited pipe
- // would keep Orca attached to a process it does not own.
- expect(spec.stdio).toBe('ignore')
- })
-
- it('never spawns a daemon for a pane that is not jcode', () => {
- // Why: Orca stamps JCODE_RUNTIME_DIR on every local pane, so gating on the dir
- // alone would start a jcode server behind every plain shell the user opens.
- expect(prewarm({ launchAgent: 'claude', runtimeDir: '/tmp/orca-jcode/abc' })).toBe(false)
- expect(prewarm({ runtimeDir: '/tmp/orca-jcode/abc' })).toBe(false)
- expect(spawnProcessMock).not.toHaveBeenCalled()
- })
-
- it('warms each runtime dir at most once', () => {
- prewarm({ launchAgent: 'jcode', runtimeDir: '/tmp/orca-jcode/abc' })
- prewarm({ launchAgent: 'jcode', runtimeDir: '/tmp/orca-jcode/abc' })
- prewarm({ launchAgent: 'jcode', runtimeDir: '/tmp/orca-jcode/def' })
- expect(spawnProcessMock).toHaveBeenCalledTimes(2)
- })
-
- it('stays out of the way on Windows, which has no runtime dir', () => {
- expect(
- prewarm({
- launchAgent: 'jcode',
- runtimeDir: 'C:/tmp/orca-jcode/abc',
- platform: 'win32'
- })
- ).toBe(false)
- expect(spawnProcessMock).not.toHaveBeenCalled()
- })
-
- it('reports failure instead of throwing when the binary is missing', () => {
- spawnProcessMock.mockImplementation(() => {
- throw new Error('ENOENT')
- })
- // Why fail-open: jcode's client starts its own server when none is listening,
- // so a failed pre-warm costs only the cold start Orca already had.
- expect(prewarm({ launchAgent: 'jcode', runtimeDir: '/tmp/orca-jcode/xyz' })).toBe(false)
- })
-
- it('retries a runtime dir whose daemon failed to start', () => {
- const child = stubChild()
- spawnProcessMock.mockReturnValue(child)
- prewarm({ launchAgent: 'jcode', runtimeDir: '/tmp/orca-jcode/retry' })
- const errorHandler = child.on.mock.calls.find(([event]) => event === 'error')?.[1]
- errorHandler?.(new Error('spawn failed'))
- prewarm({ launchAgent: 'jcode', runtimeDir: '/tmp/orca-jcode/retry' })
- expect(spawnProcessMock).toHaveBeenCalledTimes(2)
- })
-})
diff --git a/src/main/jcode/daemon-prewarm.ts b/src/main/jcode/daemon-prewarm.ts
deleted file mode 100644
index 51d89d8de784..000000000000
--- a/src/main/jcode/daemon-prewarm.ts
+++ /dev/null
@@ -1,69 +0,0 @@
-// Why: jcode's TUI client starts its own server and then waits a hardcoded 5s for
-// the socket to answer a ping (`wait_for_server_ready` in
-// crates/jcode-app-core/src/server/socket.rs). Orca gives every pane its own
-// JCODE_RUNTIME_DIR, so every jcode pane is a COLD daemon start — and a cold start
-// on a loaded machine overruns that budget, which is how an orchestration worker
-// died with "Timed out waiting for responsive server socket" before its prompt was
-// ever delivered. Starting the daemon as the PTY spawns gives it the shell's own
-// startup time as head start, so the client finds a live socket instead of racing.
-import { spawnProcess } from '@orca/process-host'
-import { getTuiAgentLaunchCommand, TUI_AGENT_CONFIG } from '../../shared/tui-agent-config'
-
-export type JcodeDaemonPrewarm = {
- launchAgent?: string
- runtimeDir?: string
- cwd?: string
- env?: Record
- platform?: NodeJS.Platform
-}
-
-/** Runtime dirs already warmed in this Orca process; the daemon outlives one pane. */
-const warmed = new Set()
-
-export function resetJcodeDaemonPrewarmForTests(): void {
- warmed.clear()
-}
-
-/** The runtime dir to warm, or null when this pane is not a local jcode launch.
- * Why non-Windows only: the runtime dir is a unix-socket directory, and Orca only
- * stamps it off Windows (see shouldInjectJcodeRuntimeDir). */
-function prewarmTarget({ launchAgent, runtimeDir, platform }: JcodeDaemonPrewarm): string | null {
- const unsupported = launchAgent !== 'jcode' || (platform ?? process.platform) === 'win32'
- return unsupported || !runtimeDir ? null : runtimeDir
-}
-
-/**
- * Start this pane's jcode daemon in the background, at most once per runtime dir.
- *
- * Fire-and-forget by contract: jcode's client starts its own server when none is
- * listening, so a pre-warm that fails costs nothing beyond the cold start Orca
- * already had. Never throws, and never blocks the spawn path.
- */
-export function prewarmJcodeDaemon(args: JcodeDaemonPrewarm): boolean {
- const runtimeDir = prewarmTarget(args)
- if (runtimeDir === null || warmed.has(runtimeDir)) {
- return false
- }
- warmed.add(runtimeDir)
- // A missing binary or a spawn refusal just means no head start; forget the dir so
- // the next pane on it can try again.
- const giveUp = (): boolean => (warmed.delete(runtimeDir), false)
- try {
- const child = spawnProcess({
- program: getTuiAgentLaunchCommand(TUI_AGENT_CONFIG.jcode, args.platform ?? process.platform),
- // Why --no-update: an update check here would delay the very socket the client
- // is about to wait on. Why stdio ignore + unref: the daemon is jcode's to own
- // and must outlive this spawn, so Orca keeps no handle on it.
- args: ['--no-update', 'serve'],
- cwd: args.cwd,
- env: { ...args.env, JCODE_RUNTIME_DIR: runtimeDir },
- detached: true,
- stdio: 'ignore'
- })
- child.unref()
- child.on('error', giveUp)
- return true
- } catch {
- return giveUp()
- }
-}
diff --git a/src/main/providers/local-pty-spawn.ts b/src/main/providers/local-pty-spawn.ts
index d8ea61d6e48e..50e01861b8a2 100644
--- a/src/main/providers/local-pty-spawn.ts
+++ b/src/main/providers/local-pty-spawn.ts
@@ -2,7 +2,6 @@ import { randomUUID } from 'node:crypto'
import { win32 as pathWin32 } from 'node:path'
import { mkdir } from 'node:fs/promises'
import { JCODE_RUNTIME_DIR_ENV_KEY } from '../../shared/jcode-runtime-dir'
-import { prewarmJcodeDaemon } from '../jcode/daemon-prewarm'
import { SessionNotFoundError } from '../daemon/daemon-errors'
import { prepareMacosTccLoginShell } from './macos-tcc-login-shell'
import { finalizeLocalPtySpawnEnvironment } from './local-pty-finalize-environment'
@@ -93,16 +92,6 @@ export async function spawnLocalPty(
plan,
env: finalEnv
})
- // Why here rather than beside the mkdir above: the daemon inherits this env, and
- // only finalEnv carries the hook port and token that buildPtyHostEnv adds — the
- // managed hook script exits without them, so a daemon warmed from the raw spawn
- // env would report no lifecycle events at all.
- prewarmJcodeDaemon({
- launchAgent: args.launchAgent,
- runtimeDir: finalEnv[JCODE_RUNTIME_DIR_ENV_KEY],
- cwd: args.cwd,
- env: finalEnv
- })
const fallbackHistory = historyResult?.historyDir ? historyResult : undefined
const [spawn] = await Promise.all([loadLocalPtyRuntimeSpawn(), prepareMacosTccLoginShell()])
diff --git a/src/main/runtime/spawned-pty-env-fixtures.ts b/src/main/runtime/spawned-pty-env-fixtures.ts
index 0d84dd3d5e67..708f6a3b2f42 100644
--- a/src/main/runtime/spawned-pty-env-fixtures.ts
+++ b/src/main/runtime/spawned-pty-env-fixtures.ts
@@ -22,11 +22,7 @@ export function spawnedPtyEnv(call: unknown): Record {
pane,
jcodeRuntimeDir: pane
? buildJcodeRuntimeDirEnv(pane.paneKey)?.[JCODE_RUNTIME_DIR_ENV_KEY]
- : undefined,
- isDaemonHostSpawn: false,
- launchAgent: undefined,
- cwd: undefined,
- prewarmsJcodeOnDaemonHost: false
+ : undefined
})
return env
}
From 37a9eaaf41961656172b0264485f01073fe79c0a Mon Sep 17 00:00:00 2001
From: Brennan Benson <79079362+brennanb2025@users.noreply.github.com>
Date: Sun, 18 Oct 2026 10:40:20 -0700
Subject: [PATCH 09/15] feat(settings): remove a downloaded agent runtime from
its Settings row (#29140)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* feat(settings): remove a downloaded agent runtime from its Settings row
When the host offers managed-runtime.remove.v1 and an Orca-installed copy is
there with nothing running, the Settings install row shows a trash button
("Remove downloaded runtime") that asks first: "Remove {agent} from this
host? Running {agent} chats stop. Chat history is kept." While the host removes
it the row says "Removing…"; a refused removal shows the host's reason and keeps
the button. Chats never show it.
* fix(settings): offer Remove for a damaged copy too, and say which host the downloaded runtime leaves
The row offers Remove whenever the host says Orca's copy is there (canRemove), damaged included;
an older host without it keeps today's rule. The confirmation now reads "Remove the downloaded
{agent} runtime from {host}? Running {agent} chats there stop. Chat history is kept.", naming the
paired host, or this computer.
* fix(settings): Remove follows the host's canRemove alone
* fix(settings): the Remove dialog says the sign-in is kept too
* fix(settings): show the downloaded runtime's install state as the provider's status line
The Antigravity row in Settings > Chat > Providers drew its install state as a
bordered box nested inside the row. It now reads like the other rows: one grey
status line under the name, with its actions as inline links joined by ' · '
(Installed · Remove, Not installed · Install · size, a thin progress bar with
Cancel while downloading, Reinstall · Remove for a damaged copy, Try again
after a failure). A healthy install no longer offers Reinstall. The Remove
confirmation now says running chats stop and their history is kept.
* fix(settings): make Antigravity's first Install a primary button beside the switch
Not installed now shows a high-contrast Install button at the row's right end in
Settings > Chat > Providers and Settings > AI Provider Accounts > Antigravity; the
status line keeps the sentences (Not installed · 112 MB download.). Every other
action stays a link in the line.
---
.../ManagedRuntimeInstallRow.tsx | 125 +++++++++++++-----
.../ManagedRuntimeLinkButton.tsx | 12 ++
.../ManagedRuntimeRemoveButton.tsx | 78 +++++++++++
.../managed-runtime-install-view.test.ts | 68 ++++++++--
.../managed-runtime-install-view.ts | 91 +++++++++----
...tructuredSession.launch-lifecycle.test.tsx | 3 +-
.../settings/AntigravityAccountsSection.tsx | 31 +++--
.../settings/NativeChatProvidersSetting.tsx | 52 +++++---
src/renderer/src/i18n/locales/en.json | 12 +-
src/renderer/src/i18n/locales/es.json | 12 +-
src/renderer/src/i18n/locales/fr.json | 12 +-
src/renderer/src/i18n/locales/ja.json | 12 +-
src/renderer/src/i18n/locales/ko.json | 12 +-
src/renderer/src/i18n/locales/zh.json | 12 +-
.../runtime/managed-runtime-install-status.ts | 20 ++-
.../runtime/use-managed-runtime-install.ts | 25 +++-
16 files changed, 443 insertions(+), 134 deletions(-)
create mode 100644 src/renderer/src/components/managed-runtime/ManagedRuntimeLinkButton.tsx
create mode 100644 src/renderer/src/components/managed-runtime/ManagedRuntimeRemoveButton.tsx
diff --git a/src/renderer/src/components/managed-runtime/ManagedRuntimeInstallRow.tsx b/src/renderer/src/components/managed-runtime/ManagedRuntimeInstallRow.tsx
index 0279add1b470..564d3acf5387 100644
--- a/src/renderer/src/components/managed-runtime/ManagedRuntimeInstallRow.tsx
+++ b/src/renderer/src/components/managed-runtime/ManagedRuntimeInstallRow.tsx
@@ -2,41 +2,46 @@ import { useState } from 'react'
import { translate } from '@/i18n/i18n'
import {
cancelManagedRuntimeInstall,
- installManagedRuntime
+ installManagedRuntime,
+ removeManagedRuntime
} from '@/runtime/managed-runtime-install-status'
import type { ManagedRuntimeInstallObservation } from '@/runtime/use-managed-runtime-install'
+import { LoadingSpinner } from '../LoadingSpinner'
import { Button } from '../ui/button'
import { Progress } from '../ui/progress'
import {
managedRuntimeInstallView,
type ManagedRuntimeInstallAction
} from './managed-runtime-install-view'
+import { ManagedRuntimeLinkButton } from './ManagedRuntimeLinkButton'
+import { ManagedRuntimeRemoveButton } from './ManagedRuntimeRemoveButton'
-/** Settings' Install, progress and Cancel for the runtime Orca provides an agent, on the host it
- * runs on. A chat's install card shows the same host answer, so either one's action moves both. */
+// Parts are joined by ' · ', so a sentence followed by another part drops its full stop.
+const said = (text: string, last: boolean): string => (last ? text : text.replace(/[.。]$/u, ''))
+
+/** Settings' one-line install state for the runtime Orca provides an agent, on the host it runs on,
+ * with its actions as links, except a first Install, which is a button the caller places at its
+ * row's end. A chat's install card shows the same host answer, so either one's action moves both. */
export function ManagedRuntimeInstallRow(props: {
observation: Extract
agentLabel: string
+ children: (line: React.ReactNode, button: React.ReactNode) => React.ReactNode
}): React.JSX.Element {
const { observation, agentLabel } = props
// A click holds its button until the host answers, so a double click starts nothing twice.
- const [pending, setPending] = useState(null)
+ const [pending, setPending] = useState<'install' | 'cancel' | 'remove' | null>(null)
const view = managedRuntimeInstallView(observation.snapshot, agentLabel, pending === 'cancel')
const [refusal, setRefusal] = useState(null)
- const act = (action: ManagedRuntimeInstallAction): void => {
- setPending(action.kind)
+ const { subject } = observation
+ const act = (kind: 'install' | 'cancel' | 'remove', request: () => Promise): void => {
+ setPending(kind)
setRefusal(null)
- const { subject } = observation
- const request =
- action.kind === 'cancel'
- ? cancelManagedRuntimeInstall(subject, action.operationId)
- : installManagedRuntime(subject)
- void request
+ void request()
.catch((cause: unknown) =>
setRefusal(
cause instanceof Error
? cause.message
- : action.kind === 'cancel'
+ : kind === 'cancel'
? translate(
'components.managed-runtime.cancelFailed',
"Couldn't cancel the installation. Try again."
@@ -47,40 +52,90 @@ export function ManagedRuntimeInstallRow(props: {
.finally(() => setPending(null))
}
const alert = refusal ?? view.error
- const { action } = view
- return (
-
-
- {/* The line stays while the first read is out, so nothing shifts when it lands. */}
-
- {view.status}
-
+ const button = view.prominent ? view.action : null
+ const action = button ? null : view.action
+ const removable = observation.removable && view.removable
+ const primary = (chosen: ManagedRuntimeInstallAction) => () =>
+ chosen.kind === 'cancel'
+ ? cancelManagedRuntimeInstall(subject, chosen.operationId)
+ : installManagedRuntime(subject)
+ const parts: React.ReactNode[] = []
+ const trailing = Boolean(alert || action || removable || view.note)
+ if (view.status !== null) {
+ parts.push(
+
+ {view.removing ? : null}
+ {said(view.status, !trailing)}
{view.progress === null ? null : (
)}
- {alert ? (
-
- {alert}
-
- ) : null}
-
- {action ? (
-
+
+ )
+ }
+ if (alert) {
+ parts.push(
+
+ {said(alert, !(action || removable || view.note))}
+
+ )
+ }
+ if (action) {
+ parts.push(
+
act(action.kind, primary(action))}
+ >
+ {action.label}
+
+ )
+ }
+ if (removable) {
+ parts.push(
+
act('remove', () => removeManagedRuntime(subject))}
+ />
+ )
+ }
+ if (view.note) {
+ parts.push({view.note} )
+ }
+ // The line keeps its height while the first read is out, so nothing shifts when it lands.
+ const line = (
+
+ {parts.flatMap((part, index) =>
+ index === 0 ? [part] : [· , part]
+ )}
+
+ )
+ return (
+ <>
+ {props.children(
+ line,
+ button ? (
act(action)}
+ onClick={() => act(button.kind, primary(button))}
>
- {action.label}
+ {button.label}
-
- ) : null}
-
+ ) : null
+ )}
+ >
)
}
diff --git a/src/renderer/src/components/managed-runtime/ManagedRuntimeLinkButton.tsx b/src/renderer/src/components/managed-runtime/ManagedRuntimeLinkButton.tsx
new file mode 100644
index 000000000000..d0cd47cb39c9
--- /dev/null
+++ b/src/renderer/src/components/managed-runtime/ManagedRuntimeLinkButton.tsx
@@ -0,0 +1,12 @@
+/** An action inside a grey status line, drawn like the line's links. */
+export function ManagedRuntimeLinkButton(
+ props: Omit, 'className' | 'type'>
+): React.JSX.Element {
+ return (
+
+ )
+}
diff --git a/src/renderer/src/components/managed-runtime/ManagedRuntimeRemoveButton.tsx b/src/renderer/src/components/managed-runtime/ManagedRuntimeRemoveButton.tsx
new file mode 100644
index 000000000000..904b7a33a358
--- /dev/null
+++ b/src/renderer/src/components/managed-runtime/ManagedRuntimeRemoveButton.tsx
@@ -0,0 +1,78 @@
+import { useState } from 'react'
+import { translate } from '@/i18n/i18n'
+import { selectExecutionHostDisplayLabel } from '@/lib/execution-host-display-label'
+import { useAppStore } from '@/store'
+import { toRuntimeExecutionHostId } from '../../../../shared/execution-host'
+import type { RuntimeClientTarget } from '../../../../shared/runtime-client-target'
+import { Button } from '../ui/button'
+import {
+ Dialog,
+ DialogContent,
+ DialogDescription,
+ DialogFooter,
+ DialogHeader,
+ DialogTitle
+} from '../ui/dialog'
+import { ManagedRuntimeLinkButton } from './ManagedRuntimeLinkButton'
+
+/** Settings' Remove link for the runtime Orca downloaded, behind a confirmation: it stops running
+ * chats. */
+export function ManagedRuntimeRemoveButton(props: {
+ agentLabel: string
+ host: RuntimeClientTarget
+ disabled: boolean
+ onRemove: () => void
+}): React.JSX.Element {
+ const { agentLabel, host, disabled, onRemove } = props
+ const [confirming, setConfirming] = useState(false)
+ const hostLabel = useAppStore((state) =>
+ host.kind === 'environment'
+ ? selectExecutionHostDisplayLabel(state, toRuntimeExecutionHostId(host.environmentId))
+ : translate('components.managed-runtime.thisComputer', 'this computer')
+ )
+ return (
+ <>
+ setConfirming(true)}
+ >
+ {translate('components.managed-runtime.removeConfirm', 'Remove')}
+
+
+
+
+
+ {translate(
+ 'components.managed-runtime.removeTitle',
+ 'Remove the downloaded {{agent}} runtime from {{host}}?',
+ { agent: agentLabel, host: hostLabel }
+ )}
+
+
+ {translate(
+ 'components.managed-runtime.removeDescription',
+ '{{agent}} chats that are running stop. Their history is kept.',
+ { agent: agentLabel }
+ )}
+
+
+
+ setConfirming(false)}>
+ {translate('components.managed-runtime.removeKeep', 'Cancel')}
+
+ {
+ setConfirming(false)
+ onRemove()
+ }}
+ >
+ {translate('components.managed-runtime.removeConfirm', 'Remove')}
+
+
+
+
+ >
+ )
+}
diff --git a/src/renderer/src/components/managed-runtime/managed-runtime-install-view.test.ts b/src/renderer/src/components/managed-runtime/managed-runtime-install-view.test.ts
index 1f881795b2fc..11398c6605fa 100644
--- a/src/renderer/src/components/managed-runtime/managed-runtime-install-view.test.ts
+++ b/src/renderer/src/components/managed-runtime/managed-runtime-install-view.test.ts
@@ -27,7 +27,7 @@ const op = (patch: Partial): ManagedRuntimeOperation =>
function shown(patch: Partial) {
const view = managedRuntimeInstallView({ kind: 'known', state: { ...idle, ...patch } }, 'Fake')
- return [view.status, view.action?.label ?? null, view.error]
+ return [view.status, view.action?.label ?? null, view.error, view.note]
}
describe('managedRuntimeInstallView', () => {
@@ -37,20 +37,24 @@ describe('managedRuntimeInstallView', () => {
installedCurrent: true,
source: 'managed' as const
}
- expect(shown({})).toEqual(['Not installed.', 'Install Fake', null])
+ expect(shown({})).toEqual(['Not installed.', 'Install', null, null])
+ expect(managedRuntimeInstallView({ kind: 'known', state: idle }, 'Fake').prominent).toBe(true)
expect(shown({ downloadBytes: 111_456_962 })).toEqual([
- '112 MB download.',
- 'Install Fake',
- null
+ 'Not installed.',
+ 'Install',
+ null,
+ '112 MB download.'
])
expect(shown({ operation: op({}) })).toEqual([
'Downloading 42.0 MB of 111.0 MB.',
- 'Cancel installation',
+ 'Cancel',
+ null,
null
])
expect(shown({ operation: op({ phase: 'verifying' }) })).toEqual([
'Checking the downloaded runtime.',
- 'Cancel installation',
+ 'Cancel',
+ null,
null
])
// Only the row whose Cancel is still out says so; the host publishes no cancelling phase.
@@ -62,34 +66,70 @@ describe('managedRuntimeInstallView', () => {
expect(cancelling.status).toBe('Cancelling…')
expect(shown({ operation: op({ phase: 'cancelled' }) })).toEqual([
'Installation cancelled.',
- 'Retry installation',
+ 'Try again',
+ null,
null
])
+ // A failed install says only why, beside Try again.
expect(shown({ operation: op({ phase: 'failed', error: 'No space left.' }) })).toEqual([
- 'Not installed.',
- 'Retry installation',
- 'No space left.'
+ null,
+ 'Try again',
+ 'No space left.',
+ null
])
- expect(shown(installed)).toEqual(['Installed.', 'Reinstall Fake', null])
+ // A healthy copy offers no Reinstall; Remove is its only action.
+ expect(shown(installed)).toEqual(['Installed.', null, null, null])
expect(shown({ ...installed, installedVersion: '1.2.0', installedCurrent: false })).toEqual([
'Installed.',
- 'Update Fake',
+ 'Update',
+ null,
null
])
+ const removal = (patch: Partial) =>
+ managedRuntimeInstallView(
+ {
+ kind: 'known',
+ state: {
+ ...idle,
+ ...installed,
+ canRemove: true,
+ operation: op({ kind: 'remove', ...patch })
+ }
+ },
+ 'Fake'
+ )
+ expect(removal({ phase: 'removing' })).toMatchObject({
+ status: 'Removing…',
+ action: null,
+ removable: false,
+ removing: true
+ })
+ // A refused removal keeps the files, so Remove stays offered beside the host's reason.
+ expect(removal({ phase: 'failed', error: 'Fake could not be stopped.' })).toMatchObject({
+ status: 'Installed.',
+ error: 'Fake could not be stopped.',
+ removable: true
+ })
+ // A damaged copy is removable too, so a broken install never leaves Settings without an exit.
+ const damaged = { kind: 'known' as const, state: { ...idle, damaged: true, canRemove: true } }
+ expect(managedRuntimeInstallView(damaged, 'Fake').removable).toBe(true)
expect(shown({ available: false, version: null })).toEqual([
'Fake is not available on this host.',
null,
+ null,
null
])
expect(shown({ damaged: true })).toEqual([
'This copy of Fake is damaged.',
- 'Install Fake',
+ 'Reinstall',
+ null,
null
])
const external = { source: 'external' as const }
expect(shown(external)).toEqual([
'Uses the copy of Fake found on this host.',
"Install Orca's copy",
+ null,
null
])
})
diff --git a/src/renderer/src/components/managed-runtime/managed-runtime-install-view.ts b/src/renderer/src/components/managed-runtime/managed-runtime-install-view.ts
index f651abd28202..1dfe753fedcc 100644
--- a/src/renderer/src/components/managed-runtime/managed-runtime-install-view.ts
+++ b/src/renderer/src/components/managed-runtime/managed-runtime-install-view.ts
@@ -13,16 +13,39 @@ export type ManagedRuntimeInstallView = {
/** Why the last operation or status read failed. */
error: string | null
action: ManagedRuntimeInstallAction | null
+ /** The action is the first step to using the agent, so Settings draws it as a button. */
+ prominent: boolean
+ /** Settings may offer to delete the copy Orca installed: one is there and nothing runs. */
+ removable: boolean
+ /** A removal runs, so the line shows it as work in progress. */
+ removing: boolean
+ /** Said after the actions, such as what Install downloads. */
+ note: string | null
}
export const megabytes = (bytes: number): string => (bytes / 1_000_000).toFixed(1)
+const EMPTY: ManagedRuntimeInstallView = {
+ status: null,
+ progress: null,
+ error: null,
+ action: null,
+ prominent: false,
+ removable: false,
+ removing: false,
+ note: null
+}
+
function runningView(
operation: NonNullable,
agent: string,
cancelling: boolean
): ManagedRuntimeInstallView | null {
const { phase, downloadedBytes: done, totalBytes: total } = operation
+ if (phase === 'removing') {
+ const status = translate('components.managed-runtime.removing', 'Removing…')
+ return { ...EMPTY, status, removing: true }
+ }
if (phase !== 'downloading' && phase !== 'extracting' && phase !== 'verifying') {
return null
}
@@ -41,11 +64,11 @@ function runningView(
'Downloading {{done}} MB of {{total}} MB.',
{ done: megabytes(done), total: megabytes(total) }
)
- const label = translate('components.managed-runtime.cancel', 'Cancel installation')
+ const label = translate('components.managed-runtime.cancelShort', 'Cancel')
return {
+ ...EMPTY,
status,
progress: phase === 'downloading' && total ? Math.min(100, (done / total) * 100) : null,
- error: null,
action: { kind: 'cancel', label, operationId: operation.id }
}
}
@@ -55,15 +78,25 @@ function settledView(state: ManagedRuntimeInstallState, agent: string): ManagedR
const failed = operation?.phase === 'failed'
const error = failed
? (operation.error ??
- translate('components.managed-runtime.failed', 'Installation failed. Try again.'))
+ (operation.kind === 'install'
+ ? translate('components.managed-runtime.failedTitle', "Couldn't install {{agent}}", {
+ agent
+ })
+ : translate('components.managed-runtime.failed', 'Installation failed. Try again.')))
: null
- const view = (status: string | null, label: string | null): ManagedRuntimeInstallView => ({
+ const view = (
+ status: string | null,
+ label: string | null,
+ note: string | null = null
+ ): ManagedRuntimeInstallView => ({
+ ...EMPTY,
status,
- progress: null,
error,
- action: label === null ? null : { kind: 'install', label }
+ action: label === null ? null : { kind: 'install', label },
+ removable: state.canRemove === true,
+ note
})
- const install = translate('components.managed-runtime.install', 'Install {{agent}}', { agent })
+ const install = translate('components.managed-runtime.installShort', 'Install')
// A copy found outside Orca already runs; Orca's own, once installed, runs first.
if (state.source === 'external') {
return view(
@@ -78,9 +111,10 @@ function settledView(state: ManagedRuntimeInstallState, agent: string): ManagedR
)
}
if (state.installedVersion !== null) {
+ // A healthy current copy needs nothing; Remove is its only action.
const label = state.installedCurrent
- ? translate('components.managed-runtime.reinstall', 'Reinstall {{agent}}', { agent })
- : translate('components.managed-runtime.update', 'Update {{agent}}', { agent })
+ ? null
+ : translate('components.managed-runtime.update', 'Update')
return view(translate('components.managed-runtime.installed', 'Installed.'), label)
}
if (!state.available) {
@@ -93,29 +127,36 @@ function settledView(state: ManagedRuntimeInstallState, agent: string): ManagedR
null
)
}
- // Install repairs it, so it is offered as Install rather than as a retry.
if (state.damaged) {
return view(
translate('components.managed-runtime.damaged', 'This copy of {{agent}} is damaged.', {
agent
}),
- install
+ translate('components.managed-runtime.reinstall', 'Reinstall')
)
}
- // The size says what Install costs.
- const size = state.downloadBytes
- const idle =
- size !== undefined
- ? translate('components.managed-runtime.downloadSize', '{{size}} MB download.', {
- size: Math.ceil(size / 1_000_000)
- })
- : translate('components.managed-runtime.notInstalled', 'Not installed.')
- const retry = translate('components.managed-runtime.retry', 'Retry installation')
+ const retry = translate('components.managed-runtime.tryAgain', 'Try again')
if (operation?.kind === 'install' && operation.phase === 'cancelled') {
return view(translate('components.managed-runtime.cancelled', 'Installation cancelled.'), retry)
}
- // A failed first install keeps its status line beside the failure.
- return view(idle, operation?.kind === 'install' && failed ? retry : install)
+ // A failed install says only why, beside Try again.
+ if (operation?.kind === 'install' && failed) {
+ return view(null, retry)
+ }
+ // The size says what Install costs.
+ const size = state.downloadBytes
+ return {
+ ...view(
+ translate('components.managed-runtime.notInstalled', 'Not installed.'),
+ install,
+ size === undefined
+ ? null
+ : translate('components.managed-runtime.downloadSize', '{{size}} MB download.', {
+ size: Math.ceil(size / 1_000_000)
+ })
+ ),
+ prominent: true
+ }
}
/** What an install row says and offers for the host's answer. `cancelling`: this row's Cancel is
@@ -127,8 +168,7 @@ export function managedRuntimeInstallView(
): ManagedRuntimeInstallView {
if (snapshot.kind !== 'known') {
return {
- status: null,
- progress: null,
+ ...EMPTY,
error:
snapshot.kind === 'readFailed'
? translate(
@@ -136,8 +176,7 @@ export function managedRuntimeInstallView(
'Could not check {{agent}} on this host. Retrying.',
{ agent }
)
- : null,
- action: null
+ : null
}
}
const { operation } = snapshot.state
diff --git a/src/renderer/src/components/native-chat/NativeChatStructuredSession.launch-lifecycle.test.tsx b/src/renderer/src/components/native-chat/NativeChatStructuredSession.launch-lifecycle.test.tsx
index 1009c808cbb2..48fea79e92fc 100644
--- a/src/renderer/src/components/native-chat/NativeChatStructuredSession.launch-lifecycle.test.tsx
+++ b/src/renderer/src/components/native-chat/NativeChatStructuredSession.launch-lifecycle.test.tsx
@@ -99,7 +99,8 @@ describe('NativeChatStructuredSession launch lifecycle', () => {
install.observation = {
kind: 'active',
subject: { target: { kind: 'local' }, runtimeId: null, agent: 'codex' },
- snapshot: state ? { kind: 'known', state } : { kind: 'unknown' }
+ snapshot: state ? { kind: 'known', state } : { kind: 'unknown' },
+ removable: false
}
}
const draft = structuredAgentSessionDraftScopeKey('session-1')
diff --git a/src/renderer/src/components/settings/AntigravityAccountsSection.tsx b/src/renderer/src/components/settings/AntigravityAccountsSection.tsx
index 1affff5191d9..ce3c36d53590 100644
--- a/src/renderer/src/components/settings/AntigravityAccountsSection.tsx
+++ b/src/renderer/src/components/settings/AntigravityAccountsSection.tsx
@@ -288,18 +288,25 @@ export function AntigravityAccountsSection({
)}
{chats && chatRuntime.kind === 'active' ? (
-
-
- {translate(
- 'settings.chat.providers.antigravityDescription',
- 'Antigravity chats run a server Orca downloads to this host, separate from the agy CLI.'
- )}
-
-
-
+
+ {(line, button) => (
+
+
+
+ {translate(
+ 'settings.chat.providers.antigravityDescription',
+ 'Antigravity chats run a server Orca downloads to this host, separate from the agy CLI.'
+ )}
+
+ {line}
+
+ {button}
+
+ )}
+
) : null}
)
diff --git a/src/renderer/src/components/settings/NativeChatProvidersSetting.tsx b/src/renderer/src/components/settings/NativeChatProvidersSetting.tsx
index e83a421ea7d4..8ec00a7e187a 100644
--- a/src/renderer/src/components/settings/NativeChatProvidersSetting.tsx
+++ b/src/renderer/src/components/settings/NativeChatProvidersSetting.tsx
@@ -88,24 +88,40 @@ function ProviderStatus({
)
}
-/** An agent whose chats run a program Orca downloads shows that program's install row, since its
- * CLI's install state says nothing about whether its chats can start. */
+/** The agent's name and status line, plus any install button, which sits beside the switch.
+ * An agent whose chats run a program Orca downloads shows that program's install state as its
+ * status line, since its CLI's install state says nothing about whether its chats can start. */
function ProviderDetail(props: {
agent: TuiAgent
+ label: string
installed: readonly TuiAgent[] | null
enabledInAgents: boolean
-}): React.JSX.Element | null {
+}): React.JSX.Element {
const runtime = useManagedRuntimeInstall(CHAT_HOST, props.agent, props.enabledInAgents)
+ const summary = (line: React.ReactNode): React.JSX.Element => (
+
+
{props.label}
+
{line}
+
+ )
if (!props.enabledInAgents || runtime.kind !== 'active') {
- return
+ return summary(
+
+ )
}
return (
-
-
-
+
+ {(line, button) => (
+ <>
+ {summary(line)}
+ {button}
+ >
+ )}
+
)
}
@@ -147,16 +163,12 @@ export function NativeChatProvidersSetting({
-
+
(
subject: ManagedRuntimeInstallSubject,
- method: 'managedRuntime.install' | 'managedRuntime.cancel',
+ method: 'managedRuntime.install' | 'managedRuntime.cancel' | 'managedRuntime.remove',
params: Record
): Promise {
return callRuntimeRpc(
@@ -188,17 +188,24 @@ function callHost(
)
}
-/** Starts, or joins, the host's install; rejects with the host's refusal. */
-export async function installManagedRuntime(subject: ManagedRuntimeInstallSubject): Promise {
+async function startOperation(
+ subject: ManagedRuntimeInstallSubject,
+ method: 'managedRuntime.install' | 'managedRuntime.remove'
+): Promise {
const entry = entryFor(subject)
const { generation } = entry
- const state = await callHost(subject, 'managedRuntime.install', {})
+ const state = await callHost(subject, method, {})
// A reply that crossed a resubscribe is stale; the new subscription's snapshot governs.
if (entry.generation === generation) {
accept(entry, state, generation)
}
}
+/** Starts, or joins, the host's install; rejects with the host's refusal. */
+export function installManagedRuntime(subject: ManagedRuntimeInstallSubject): Promise {
+ return startOperation(subject, 'managedRuntime.install')
+}
+
/** Resolves once the run has unwound; the subscription shows its outcome. */
export async function cancelManagedRuntimeInstall(
subject: ManagedRuntimeInstallSubject,
@@ -207,6 +214,11 @@ export async function cancelManagedRuntimeInstall(
await callHost(subject, 'managedRuntime.cancel', { operationId })
}
+/** Starts, or joins, the host's removal; it fails, keeping the files, while anything may run them. */
+export function removeManagedRuntime(subject: ManagedRuntimeInstallSubject): Promise {
+ return startOperation(subject, 'managedRuntime.remove')
+}
+
export function subscribeManagedRuntimeInstalls(listener: () => void): () => void {
listeners.add(listener)
return () => {
diff --git a/src/renderer/src/runtime/use-managed-runtime-install.ts b/src/renderer/src/runtime/use-managed-runtime-install.ts
index 25059cf6a981..dcd850321bc5 100644
--- a/src/renderer/src/runtime/use-managed-runtime-install.ts
+++ b/src/renderer/src/runtime/use-managed-runtime-install.ts
@@ -1,7 +1,10 @@
import { useCallback, useEffect, useMemo, useSyncExternalStore } from 'react'
import { isAgentSessionHandleProvider } from '../../../shared/agent-session-provider-handle'
import { LOCAL_EXECUTION_HOST_ID, toRuntimeExecutionHostId } from '../../../shared/execution-host'
-import { MANAGED_RUNTIME_INSTALL_RUNTIME_CAPABILITY } from '../../../shared/managed-runtime-install'
+import {
+ MANAGED_RUNTIME_INSTALL_RUNTIME_CAPABILITY,
+ MANAGED_RUNTIME_REMOVE_RUNTIME_CAPABILITY
+} from '../../../shared/managed-runtime-install'
import { lastVerifiedRuntimeStatus } from '../../../shared/runtime-host-status'
import type { RuntimeClientTarget } from '../../../shared/runtime-client-target'
import { useAppStore } from '@/store'
@@ -13,6 +16,7 @@ import {
} from './host-structured-agents'
import {
ensureLocalRuntimeCapabilities,
+ readLocalRuntimeCapabilities,
readLocalRuntimeCapabilitiesOrUnknown,
subscribeLocalRuntimeCapabilitiesKnown
} from './local-runtime-capabilities'
@@ -35,6 +39,8 @@ export type ManagedRuntimeInstallObservation =
kind: 'active'
subject: ManagedRuntimeInstallSubject
snapshot: ManagedRuntimeInstallSnapshot
+ /** The host can also remove the runtime it installed. */
+ removable: boolean
}
const INACTIVE: ManagedRuntimeInstallObservation = { kind: 'inactive' }
@@ -45,6 +51,8 @@ const READ_FAILED: ManagedRuntimeInstallSnapshot = { kind: 'readFailed' }
const localInstallCapable = (): boolean | null =>
readLocalRuntimeCapabilitiesOrUnknown()?.includes(MANAGED_RUNTIME_INSTALL_RUNTIME_CAPABILITY) ??
null
+const localRemoveCapable = (): boolean =>
+ readLocalRuntimeCapabilities().includes(MANAGED_RUNTIME_REMOVE_RUNTIME_CAPABILITY)
/** The install state of the runtime Orca provides for `agent` on the target's host. Subscribes
* only while `shown`, so a hidden chat holds no subscription. */
@@ -77,6 +85,15 @@ export function useManagedRuntimeInstall(
localInstallCapable,
localInstallCapable
)
+ const localRemovable = useSyncExternalStore(
+ subscribeLocalRuntimeCapabilitiesKnown,
+ localRemoveCapable,
+ localRemoveCapable
+ )
+ const removable =
+ environmentId === null
+ ? localRemovable
+ : remote?.capabilities?.includes(MANAGED_RUNTIME_REMOVE_RUNTIME_CAPABILITY) === true
const capable =
environmentId === null
? localCapable
@@ -119,16 +136,16 @@ export function useManagedRuntimeInstall(
return INACTIVE
}
if (subject && managed && snapshot) {
- return { kind: 'active', subject, snapshot }
+ return { kind: 'active', subject, snapshot, removable }
}
// A failed list leaves the chat's composer and the host's refusal, and Settings says so.
if (subject && list === 'failed') {
- return { kind: 'active', subject, snapshot: READ_FAILED }
+ return { kind: 'active', subject, snapshot: READ_FAILED, removable }
}
// Only an answer a reachable host still owes may hold the slot; an unreachable one leaves the
// composer and the host's refusal. Claude and Codex run the program every build ships.
return reachable && !isAgentSessionHandleProvider(agent) ? PENDING : INACTIVE
- }, [agent, capable, list, managed, reachable, snapshot, subject])
+ }, [agent, capable, list, managed, reachable, removable, snapshot, subject])
const pending = observation.kind === 'pending'
const hostCapabilities = remote?.capabilities
// The slot waits on the host's answer, so make sure it was asked.
From ff294f0294ce9b753988733c8c2303aa7ff025ca Mon Sep 17 00:00:00 2001
From: Brennan Benson <79079362+brennanb2025@users.noreply.github.com>
Date: Sun, 18 Oct 2026 10:52:10 -0700
Subject: [PATCH 10/15] fix(mobile): put the session tabs in the top bar on a
landscape phone (#29070)
* fix(mobile): put the session tabs in the top bar on a landscape phone
A sideways phone is about 390pt tall and the session header spent two rows
on it. On a landscape phone the tab strip now shares the top bar with the
back button, title and panel icons. Portrait and tablet layouts are unchanged.
* fix(mobile): give session tabs side borders and a filled active tab
In the landscape top bar the tabs sat between the title and the panel
icons with nothing marking where one tab ended. Each tab now has a 1pt
border on its sides, running the full height of the bar, and the active
tab gets the raised fill, as the desktop tab strip draws them. The same
strip is used in portrait, so both orientations match.
* fix(mobile): reset tab strip measurements on view attachment
* style(mobile): format tab strip ref dependencies
* fix(mobile): keep two header rows in landscape windows too narrow for top-bar tabs
A short, narrow window (a ~390x350 web window) is wider than tall, so it
counted as a landscape phone and moved the tabs into a top bar that has no
width left for them. Top-bar tabs now also need at least 568pt of width,
the narrowest landscape phone.
* fix(mobile): give the landscape top-bar tab strip a fixed left edge so scrolled tabs never read as part of the title
* fix(mobile): 12pt between the session title and the landscape tab strip
---
.../layout/responsive-layout-metrics.test.ts | 7 +-
.../src/layout/responsive-layout-metrics.ts | 9 +-
mobile/src/session/MobileSessionHeader.tsx | 157 ++--------------
mobile/src/session/MobileSessionTabStrip.tsx | 170 ++++++++++++++++++
.../session/mobile-session-frame-styles.ts | 39 +++-
5 files changed, 236 insertions(+), 146 deletions(-)
create mode 100644 mobile/src/session/MobileSessionTabStrip.tsx
diff --git a/mobile/src/layout/responsive-layout-metrics.test.ts b/mobile/src/layout/responsive-layout-metrics.test.ts
index 263344d75020..235b5339ed82 100644
--- a/mobile/src/layout/responsive-layout-metrics.test.ts
+++ b/mobile/src/layout/responsive-layout-metrics.test.ts
@@ -16,7 +16,8 @@ describe('responsive layout metrics', () => {
expect(getResponsiveLayoutMetrics(1180, 820)).toMatchObject({
isLandscape: true,
isTabletLayout: true,
- isWideLayout: true
+ isWideLayout: true,
+ isLandscapePhone: false
})
})
@@ -33,7 +34,11 @@ describe('responsive layout metrics', () => {
isLandscape: true,
isTabletLayout: false,
isWideLayout: false,
+ isLandscapePhone: true,
horizontalPadding: spacing.lg
})
+ expect(getResponsiveLayoutMetrics(430, 932)).toMatchObject({ isLandscapePhone: false })
+ // A short, narrow web window is wider than tall but has no room for tabs in the top bar.
+ expect(getResponsiveLayoutMetrics(390, 350)).toMatchObject({ isLandscapePhone: false })
})
})
diff --git a/mobile/src/layout/responsive-layout-metrics.ts b/mobile/src/layout/responsive-layout-metrics.ts
index 4fffbcea9894..f75a470014ac 100644
--- a/mobile/src/layout/responsive-layout-metrics.ts
+++ b/mobile/src/layout/responsive-layout-metrics.ts
@@ -7,6 +7,9 @@ const WIDE_LAYOUT_MIN_WIDTH = 700
// in both dimensions so phone rotation does not switch UI classes.
const TABLET_LAYOUT_MIN_SHORT_SIDE = 600
+// Narrowest landscape phone; below it a top bar has no width left for the session tabs.
+const LANDSCAPE_PHONE_MIN_WIDTH = 568
+
const CONTENT_MAX_WIDTH = 720
const MODAL_MAX_WIDTH = 480
@@ -18,6 +21,8 @@ export type ResponsiveLayoutMetrics = {
isWideLayout: boolean
/** Tablet-class canvas (both dimensions large); false in narrow splits. */
isTabletLayout: boolean
+ /** Phone turned sideways: too short to spend two rows on header chrome. */
+ isLandscapePhone: boolean
/** Max width for primary scrollable content on wide layouts. */
contentMaxWidth: number
/** Max width for centered sheets/dialogs on wide layouts. */
@@ -29,13 +34,15 @@ export type ResponsiveLayoutMetrics = {
export function getResponsiveLayoutMetrics(width: number, height: number): ResponsiveLayoutMetrics {
const isTabletLayout = Math.min(width, height) >= TABLET_LAYOUT_MIN_SHORT_SIDE
const isWideLayout = width >= WIDE_LAYOUT_MIN_WIDTH && isTabletLayout
+ const isLandscape = width > height
return {
width,
height,
- isLandscape: width > height,
+ isLandscape,
isWideLayout,
isTabletLayout,
+ isLandscapePhone: isLandscape && !isTabletLayout && width >= LANDSCAPE_PHONE_MIN_WIDTH,
contentMaxWidth: CONTENT_MAX_WIDTH,
modalMaxWidth: MODAL_MAX_WIDTH,
// Roomier gutters once content is capped so it isn't glued to the edges.
diff --git a/mobile/src/session/MobileSessionHeader.tsx b/mobile/src/session/MobileSessionHeader.tsx
index 7272f4254a10..8aff620e24c4 100644
--- a/mobile/src/session/MobileSessionHeader.tsx
+++ b/mobile/src/session/MobileSessionHeader.tsx
@@ -1,29 +1,13 @@
-import { View, Text, ScrollView, Pressable } from 'react-native'
+import { View, Text, Pressable } from 'react-native'
import { SafeAreaView } from 'react-native-safe-area-context'
-import {
- ChevronLeft,
- Folder,
- File,
- FileText,
- GitBranch,
- Globe,
- MoreHorizontal,
- PanelLeftOpen,
- Plus
-} from 'lucide-react-native'
+import { ChevronLeft, Folder, GitBranch, MoreHorizontal, PanelLeftOpen } from 'lucide-react-native'
import { MobileSessionHeaderIconButton } from './MobileSessionHeaderIconButton'
-import { triggerMediumImpact } from '../platform/haptics'
+import { MobileSessionTabStrip } from './MobileSessionTabStrip'
import { StatusDot } from '../components/StatusDot'
-import { MobileAgentIcon } from '../components/MobileAgentIcon'
-import {
- getMobileSessionTabTitle,
- resolveMobileTerminalTabAgentId
-} from './mobile-terminal-tab-agent'
import { colors } from '../theme/mobile-theme'
-import { QuickCommandsTabButton } from './QuickCommandsTabButton'
import { styles } from './mobile-session-styles'
-import { useKeyboardPersistingTaps } from '../platform/keyboard-persisting-taps'
import { useHostSidebarReveal } from '../layout/host-sidebar-reveal'
+import { useResponsiveLayout } from '../layout/responsive-layout'
import type { MobileSessionController } from './use-mobile-session-controller'
export function MobileSessionHeader({ controller }: { controller: MobileSessionController }) {
@@ -35,34 +19,21 @@ export function MobileSessionHeader({ controller }: { controller: MobileSessionC
forceReconnectHost,
worktreeName,
activePanel,
- activeSessionTabId,
- activeSessionTabIdRef,
- tabStripRef,
- tabStripOffsetRef,
- tabStripViewportWidthRef,
- tabStripContentWidthRef,
- tabLayoutsRef,
- creating,
- creatingBrowser,
- creatingMarkdown,
- setCreateError,
- setShowCreateTabDrawer,
- setShowQuickCommands,
setShowHeaderMoreActions,
- quickCommandsSupported,
- showToast,
requestLeaveSession,
- scrollActiveTabIntoView,
- switchSessionTab,
- openSessionTabActionSheetAfterKeyboardDismiss,
visibleTabs,
showConnectionRetry,
terminalSummary,
handlePanelTap,
showHeaderMoreButton
} = controller
- const tabBarKeepsKeyboard = useKeyboardPersistingTaps('handled')
const revealSidebar = useHostSidebarReveal()
+ // Why: a sideways phone is ~390pt tall, so the tabs share the top bar instead of taking a second row.
+ const hasTabs = visibleTabs.length > 0
+ const tabsInTopBar = useResponsiveLayout().isLandscapePhone && hasTabs
+ const tabStrip = hasTabs ? (
+
+ ) : null
return (
@@ -87,7 +58,9 @@ export function MobileSessionHeader({ controller }: { controller: MobileSessionC
-
+
{worktreeName || 'Terminal'}
@@ -108,6 +81,7 @@ export function MobileSessionHeader({ controller }: { controller: MobileSessionC
+ {tabsInTopBar ? tabStrip : null}
{!isFloatingWorkspaceRoute && (
- {visibleTabs.length > 0 && (
-
- {/* Why: tab taps must register on first press with the keyboard open instead of being eaten by dismissal (#5106). */}
- {
- tabStripOffsetRef.current = e.nativeEvent.contentOffset.x
- }}
- onLayout={(e) => {
- tabStripViewportWidthRef.current = e.nativeEvent.layout.width
- scrollActiveTabIntoView(activeSessionTabIdRef.current, false)
- }}
- onContentSizeChange={(width) => {
- tabStripContentWidthRef.current = width
- scrollActiveTabIntoView(activeSessionTabIdRef.current, false)
- }}
- >
- {visibleTabs.map((t) => (
- {
- const { x, width } = e.nativeEvent.layout
- tabLayoutsRef.current.set(t.id, { x, width })
- if (t.id === activeSessionTabIdRef.current) {
- scrollActiveTabIntoView(t.id, false)
- }
- }}
- onPress={() => switchSessionTab(t)}
- onLongPress={() => {
- triggerMediumImpact()
- openSessionTabActionSheetAfterKeyboardDismiss(t)
- }}
- delayLongPress={400}
- >
-
- {t.type === 'browser' && (
-
- )}
- {t.type === 'markdown' && (
-
- )}
- {t.type === 'file' && (
-
- )}
- {t.type === 'agent-session' && }
- {t.type === 'terminal' &&
- (() => {
- const agentId = resolveMobileTerminalTabAgentId(t)
- return agentId ? : null
- })()}
-
- {getMobileSessionTabTitle(t)}
-
-
-
- ))}
-
- {/* Why: pinned outside the scroll strip so the new-agent button stays reachable however far the tabs scroll. */}
- [
- styles.newTerminalButton,
- pressed && styles.newTerminalButtonPressed,
- (creating || creatingBrowser || creatingMarkdown || connState !== 'connected') &&
- styles.newTerminalButtonDisabled
- ]}
- disabled={creating || creatingBrowser || creatingMarkdown || connState !== 'connected'}
- onPress={() => {
- setCreateError('')
- setShowCreateTabDrawer(true)
- }}
- accessibilityLabel="New tab"
- >
-
-
- {/* Why: stable placement matters, while old hosts must stay gated because they strip agentPrompt. */}
- {
- if (quickCommandsSupported === true) {
- setShowQuickCommands(true)
- return
- }
- showToast(
- quickCommandsSupported === false
- ? 'Desktop update required for quick commands'
- : 'Checking desktop capabilities — try again in a moment',
- 1600
- )
- }}
- />
-
- )}
+ {tabsInTopBar ? null : tabStrip}
)
}
diff --git a/mobile/src/session/MobileSessionTabStrip.tsx b/mobile/src/session/MobileSessionTabStrip.tsx
new file mode 100644
index 000000000000..e1f0888c7e3c
--- /dev/null
+++ b/mobile/src/session/MobileSessionTabStrip.tsx
@@ -0,0 +1,170 @@
+import { useCallback } from 'react'
+import { View, Text, ScrollView, Pressable } from 'react-native'
+import { File, FileText, Globe, Plus } from 'lucide-react-native'
+import { triggerMediumImpact } from '../platform/haptics'
+import { MobileAgentIcon } from '../components/MobileAgentIcon'
+import {
+ getMobileSessionTabTitle,
+ resolveMobileTerminalTabAgentId
+} from './mobile-terminal-tab-agent'
+import { colors } from '../theme/mobile-theme'
+import { QuickCommandsTabButton } from './QuickCommandsTabButton'
+import { styles } from './mobile-session-styles'
+import { useKeyboardPersistingTaps } from '../platform/keyboard-persisting-taps'
+import type { MobileSessionController } from './use-mobile-session-controller'
+
+export function MobileSessionTabStrip({
+ controller,
+ inTopBar
+}: {
+ controller: MobileSessionController
+ inTopBar: boolean
+}) {
+ const {
+ connState,
+ activeSessionTabId,
+ activeSessionTabIdRef,
+ tabStripRef,
+ tabStripOffsetRef,
+ tabStripViewportWidthRef,
+ tabStripContentWidthRef,
+ tabLayoutsRef,
+ creating,
+ creatingBrowser,
+ creatingMarkdown,
+ setCreateError,
+ setShowCreateTabDrawer,
+ setShowQuickCommands,
+ quickCommandsSupported,
+ showToast,
+ scrollActiveTabIntoView,
+ switchSessionTab,
+ openSessionTabActionSheetAfterKeyboardDismiss,
+ visibleTabs
+ } = controller
+ const tabBarKeepsKeyboard = useKeyboardPersistingTaps('handled')
+ const attachTabStrip = useCallback(
+ (view: ScrollView | null) => {
+ if (view) {
+ tabStripOffsetRef.current = 0
+ tabStripViewportWidthRef.current = 0
+ tabStripContentWidthRef.current = 0
+ tabLayoutsRef.current.clear()
+ }
+ tabStripRef.current = view
+ },
+ [
+ tabStripRef,
+ tabStripOffsetRef,
+ tabStripViewportWidthRef,
+ tabStripContentWidthRef,
+ tabLayoutsRef
+ ]
+ )
+ return (
+
+ {/* Why: tab taps must register on first press with the keyboard open instead of being eaten by dismissal (#5106). */}
+ {
+ tabStripOffsetRef.current = e.nativeEvent.contentOffset.x
+ }}
+ onLayout={(e) => {
+ tabStripViewportWidthRef.current = e.nativeEvent.layout.width
+ scrollActiveTabIntoView(activeSessionTabIdRef.current, false)
+ }}
+ onContentSizeChange={(width) => {
+ tabStripContentWidthRef.current = width
+ scrollActiveTabIntoView(activeSessionTabIdRef.current, false)
+ }}
+ >
+ {visibleTabs.map((t, index) => (
+ {
+ const { x, width } = e.nativeEvent.layout
+ tabLayoutsRef.current.set(t.id, { x, width })
+ if (t.id === activeSessionTabIdRef.current) {
+ scrollActiveTabIntoView(t.id, false)
+ }
+ }}
+ onPress={() => switchSessionTab(t)}
+ onLongPress={() => {
+ triggerMediumImpact()
+ openSessionTabActionSheetAfterKeyboardDismiss(t)
+ }}
+ delayLongPress={400}
+ >
+
+ {t.type === 'browser' && (
+
+ )}
+ {t.type === 'markdown' && (
+
+ )}
+ {t.type === 'file' && (
+
+ )}
+ {t.type === 'agent-session' && }
+ {t.type === 'terminal' &&
+ (() => {
+ const agentId = resolveMobileTerminalTabAgentId(t)
+ return agentId ? : null
+ })()}
+
+ {getMobileSessionTabTitle(t)}
+
+
+
+ ))}
+
+ {/* Why: pinned outside the scroll strip so the new-agent button stays reachable however far the tabs scroll. */}
+ [
+ styles.newTerminalButton,
+ pressed && styles.newTerminalButtonPressed,
+ (creating || creatingBrowser || creatingMarkdown || connState !== 'connected') &&
+ styles.newTerminalButtonDisabled
+ ]}
+ disabled={creating || creatingBrowser || creatingMarkdown || connState !== 'connected'}
+ onPress={() => {
+ setCreateError('')
+ setShowCreateTabDrawer(true)
+ }}
+ accessibilityLabel="New tab"
+ >
+
+
+ {/* Why: stable placement matters, while old hosts must stay gated because they strip agentPrompt. */}
+ {
+ if (quickCommandsSupported === true) {
+ setShowQuickCommands(true)
+ return
+ }
+ showToast(
+ quickCommandsSupported === false
+ ? 'Desktop update required for quick commands'
+ : 'Checking desktop capabilities — try again in a moment',
+ 1600
+ )
+ }}
+ />
+
+ )
+}
diff --git a/mobile/src/session/mobile-session-frame-styles.ts b/mobile/src/session/mobile-session-frame-styles.ts
index 22ac97d23c8d..f037a537ea95 100644
--- a/mobile/src/session/mobile-session-frame-styles.ts
+++ b/mobile/src/session/mobile-session-frame-styles.ts
@@ -62,6 +62,12 @@ export const mobileSessionFrameStyles = StyleSheet.create({
flex: 1,
minWidth: 0
},
+ // Landscape phone: the tab strip takes the row's spare width instead of the title.
+ sessionTitleBlockBesideTabs: {
+ flex: 0,
+ flexShrink: 1,
+ maxWidth: 160
+ },
sessionTitle: {
color: colors.textPrimary,
fontSize: 14,
@@ -84,14 +90,35 @@ export const mobileSessionFrameStyles = StyleSheet.create({
borderTopWidth: 1,
borderTopColor: colors.borderSubtle
},
+ // Cancels the top bar's vertical padding so tab borders run the bar's full height.
+ tabBarInTopBar: {
+ flex: 1,
+ minWidth: 0,
+ flexDirection: 'row',
+ alignItems: 'center',
+ alignSelf: 'stretch',
+ marginVertical: -spacing.xs,
+ // Room between the title's last letter and the strip's edge.
+ marginLeft: spacing.md,
+ // Fixed edge so tabs scrolled past it read as clipped, not as part of the title.
+ borderLeftWidth: 1,
+ borderLeftColor: colors.borderSubtle
+ },
tabScroll: {
flex: 1,
maxHeight: 36
},
+ tabScrollInTopBar: {
+ alignSelf: 'stretch',
+ maxHeight: 44
+ },
tabContent: {
paddingLeft: spacing.sm,
paddingRight: spacing.sm
},
+ tabContentInTopBar: {
+ paddingLeft: 0
+ },
tab: {
width: 128,
maxWidth: 128,
@@ -101,12 +128,20 @@ export const mobileSessionFrameStyles = StyleSheet.create({
paddingHorizontal: spacing.sm,
paddingVertical: spacing.sm,
borderBottomWidth: 2,
- borderBottomColor: 'transparent'
+ borderBottomColor: 'transparent',
+ // Side borders between tabs, as the desktop tab strip draws them.
+ borderRightWidth: 1,
+ borderRightColor: colors.borderSubtle
+ },
+ tabFirst: {
+ borderLeftWidth: 1,
+ borderLeftColor: colors.borderSubtle
},
tabActive: {
// Neutral grey underline, matching the desktop terminal tab's active
// indicator (a muted foreground/card mix), not a blue accent.
- borderBottomColor: colors.textSecondary
+ borderBottomColor: colors.textSecondary,
+ backgroundColor: colors.bgRaised
},
tabLabelRow: {
maxWidth: '100%',
From 26554234df9bf89cc465e06d16d14dbdde33a496 Mon Sep 17 00:00:00 2001
From: OrcaWin
Date: Sun, 18 Oct 2026 11:08:47 -0700
Subject: [PATCH 11/15] fix(rate-limits): run the Antigravity usage probe with
agy's auto-update off (#30387)
A due update check makes agy start --bg-updater, whose own console child opens
a visible window on Windows and takes focus, so stepping away from Orca for
15+ minutes and coming back flashed a terminal (#27390). Set
AGY_CLI_DISABLE_AUTO_UPDATE=true on both probes; a background quota read should
not update the user's CLI anyway. Only 'true' is honoured (agy 1.4.2).
Co-authored-by: Orca Worker
---
.../rate-limits/antigravity-usage-command.ts | 9 +++++++
.../antigravity-usage-fetcher.test.ts | 27 ++++++++++---------
.../rate-limits/antigravity-usage-fetcher.ts | 3 ++-
3 files changed, 26 insertions(+), 13 deletions(-)
diff --git a/src/main/rate-limits/antigravity-usage-command.ts b/src/main/rate-limits/antigravity-usage-command.ts
index 133f92fc593e..039c387d79f6 100644
--- a/src/main/rate-limits/antigravity-usage-command.ts
+++ b/src/main/rate-limits/antigravity-usage-command.ts
@@ -36,6 +36,15 @@ export const ANTIGRAVITY_USAGE_ARGS: readonly string[] = [
*/
export const ANTIGRAVITY_USAGE_TIMEOUT_MS = 30_000
+/**
+ * Added to every probe's environment.
+ *
+ * Why: a due update check makes agy start `--bg-updater`, whose own console child opens a visible
+ * window on Windows and takes focus (#27390); a background quota read must not update the CLI
+ * either. Verified on agy 1.4.2: only `true` disables it (`1` still spawns the updater).
+ */
+export const ANTIGRAVITY_PROBE_ENV = { AGY_CLI_DISABLE_AUTO_UPDATE: 'true' } as const
+
// Before agy 1.1.11, `/usage` in print mode spends a model turn (agy's bundled changelog).
export const ANTIGRAVITY_MIN_USAGE_VERSION = '1.1.11'
diff --git a/src/main/rate-limits/antigravity-usage-fetcher.test.ts b/src/main/rate-limits/antigravity-usage-fetcher.test.ts
index ca7ef170d5b2..c10033167844 100644
--- a/src/main/rate-limits/antigravity-usage-fetcher.test.ts
+++ b/src/main/rate-limits/antigravity-usage-fetcher.test.ts
@@ -115,21 +115,24 @@ describe('fetchAntigravityRateLimits', () => {
})
it('probes the version, then runs the quota read with the resolved path and login-shell env', async () => {
- const h = harness({ result: processResult({ stdout: USAGE_ENVELOPE }) })
+ const loginShellEnv = { PATH: '/Users/x/.local/bin:/usr/bin' }
+ const h = harness({ result: processResult({ stdout: USAGE_ENVELOPE }), env: loginShellEnv })
await h.fetch()
- expect(h.runCommand).toHaveBeenCalledTimes(2)
- expect(h.runCommand.mock.calls[0]![0].args).toEqual(ANTIGRAVITY_VERSION_ARGS)
- const spec = h.runCommand.mock.calls[1]![0]
- expect(spec.program).toBe('/Users/x/.local/bin/agy')
- expect(spec.args).toEqual(ANTIGRAVITY_USAGE_ARGS)
// Why the login-shell PATH: agy installs to ~/.local/bin, which Electron's inherited PATH omits.
- expect(spec.env).toEqual({ PATH: '/Users/x/.local/bin:/usr/bin' })
- expect(spec.timeoutMs).toBeGreaterThan(0)
- expect(h.resolveCommand).toHaveBeenCalledWith('agy', {
- platform: 'darwin',
- env: { PATH: '/Users/x/.local/bin:/usr/bin' }
- })
+ // Why auto-update off: a due check spawns agy's updater, whose child flashes a Windows console.
+ const probeEnv = { PATH: '/Users/x/.local/bin:/usr/bin', AGY_CLI_DISABLE_AUTO_UPDATE: 'true' }
+ expect(h.runCommand).toHaveBeenCalledTimes(2)
+ const [versionSpec, usageSpec] = h.runCommand.mock.calls.map(([spec]) => spec)
+ expect(versionSpec.args).toEqual(ANTIGRAVITY_VERSION_ARGS)
+ expect(versionSpec.env).toEqual(probeEnv)
+ expect(usageSpec.program).toBe('/Users/x/.local/bin/agy')
+ expect(usageSpec.args).toEqual(ANTIGRAVITY_USAGE_ARGS)
+ expect(usageSpec.env).toEqual(probeEnv)
+ expect(usageSpec.timeoutMs).toBeGreaterThan(0)
+ expect(h.resolveCommand).toHaveBeenCalledWith('agy', { platform: 'darwin', env: probeEnv })
+ // The login-shell env is a shared cache entry; the probe must not write into it.
+ expect(loginShellEnv).toEqual({ PATH: '/Users/x/.local/bin:/usr/bin' })
})
it('reports an absent CLI as unavailable and never spawns', async () => {
diff --git a/src/main/rate-limits/antigravity-usage-fetcher.ts b/src/main/rate-limits/antigravity-usage-fetcher.ts
index 2980d9b96031..e021f84c9a34 100644
--- a/src/main/rate-limits/antigravity-usage-fetcher.ts
+++ b/src/main/rate-limits/antigravity-usage-fetcher.ts
@@ -5,6 +5,7 @@ import { resolveLoginShellEnvironment } from '../startup/login-shell-environment
import type { ProviderRateLimits, UsageRateLimitFailureKind } from '../../shared/rate-limit-types'
import {
ANTIGRAVITY_MIN_USAGE_VERSION,
+ ANTIGRAVITY_PROBE_ENV,
ANTIGRAVITY_USAGE_ARGS,
ANTIGRAVITY_USAGE_MAX_OUTPUT_BYTES,
ANTIGRAVITY_USAGE_TIMEOUT_MS,
@@ -121,7 +122,7 @@ export async function fetchAntigravityRateLimits(
// Why the login shell's env: agy installs to ~/.local/bin, which is on the user's PATH but not on
// the PATH an Electron app inherits from the window server or a desktop launcher.
- const env = await resolveEnvironment()
+ const env = { ...(await resolveEnvironment()), ...ANTIGRAVITY_PROBE_ENV }
const command = antigravityCommandName()
const program = await resolve(command, { platform, env })
if (!program) {
From bde20afb1d76e6ba801b955b267dc327e040d8bf Mon Sep 17 00:00:00 2001
From: Jinwoo Hong <73622457+Jinwoo-H@users.noreply.github.com>
Date: Sun, 18 Oct 2026 14:13:15 -0400
Subject: [PATCH 12/15] Only the tabs the window just changed wait for main's
answer; the window-wide layout hold goes (dark, layout-owner build only)
(#30384)
* chore(layout): the drift check's ignore comment names every main-only kind (dark, layout-owner build only)
* fix(layout): a quit stage retried after a failed one still sends the resume records (dark, layout-owner build only)
* feat(layout): the window's local layout stream reopens after a loss, and its snapshot redraws every workspace (dark, layout-owner build only)
* fix(layout): a command whose target main's copy lacks is a logged refusal, not the window's own change (dark, layout-owner build only)
* feat(layout): frames keep each tab the window drew, closed or moved as drawn until main answers; the global frame hold goes (dark, layout-owner build only)
A refused draw-first terminal create is closed (its terminal stopped) at the refusal. The
activation create no longer draws main's tab itself while the stream is down: the reopened
stream's snapshot does.
* fix(layout): a tab move or drag-out the frame already drew is not placed again by the window (dark, layout-owner build only)
Also holds the group sizes the window drew until main saves them.
* test(layout): with frames flowing, a pin promotes a preview tab once and tab-change bookkeeping runs once (dark, layout-owner build only)
Also states that the held-tab overlay builds frame slices only.
* test(layout): read the rename's title without a cast
* chore(layout): the drift check's header lists the same ignored records as its inline comment
---
config/renderer-layout-writer-baseline.txt | 1 +
.../persistence/window-save-divergence.ts | 5 +-
.../tab-group-layout-owner-commands.test.ts | 16 +
.../tab-group-layout-owner-commands.ts | 15 +-
.../terminal-pane-layout-owner-commands.ts | 3 +-
...erminal-pane-layout-owner-gestures.test.ts | 22 +-
.../terminal-pane-layout-owner-gestures.ts | 1 -
...inal-pane-split-with-inherited-cwd.test.ts | 24 +-
.../terminal-pane-split-with-inherited-cwd.ts | 1 -
...rminal-pane-tab-detach-frame-drawn.test.ts | 25 +
.../terminal-pane/terminal-pane-tab-detach.ts | 19 +-
.../use-terminal-watcher-effects.ts | 7 +-
.../session-write-subscriber-activity.test.ts | 71 ---
.../src/lib/session-write-subscriber.ts | 30 --
.../src/lib/window-session-write-activity.ts | 30 --
...live-surface-adoption-layout-owner.test.ts | 12 +-
.../src/runtime/layout-apply-send.test.ts | 59 ++-
src/renderer/src/runtime/layout-apply-send.ts | 108 +++--
.../src/runtime/layout-owner-command.test.ts | 24 +-
.../runtime/layout-owner-drawn-tab-holds.ts | 78 ++++
.../workspace-layout-frame-held-tabs.test.ts | 440 ++++++++++++++++++
.../workspace-layout-frame-sync.test.ts | 56 +--
.../runtime/workspace-layout-frame-sync.ts | 47 +-
.../workspace-layout-frame-tab-props.test.ts | 7 +-
.../editor-layout-owner-records.test.ts | 2 +
...-terminal-tab-changes-layout-owner.test.ts | 2 +-
.../terminal-tab-close-layout-owner.ts | 7 +-
...al-tab-create-through-layout-owner.test.ts | 53 ++-
...erminal-tab-create-through-layout-owner.ts | 61 +--
.../store/workspace-layout-frame-held-tabs.ts | 201 ++++++++
.../workspace-layout-frame-store-patch.ts | 12 +-
31 files changed, 1059 insertions(+), 380 deletions(-)
delete mode 100644 src/renderer/src/lib/session-write-subscriber-activity.test.ts
delete mode 100644 src/renderer/src/lib/window-session-write-activity.ts
create mode 100644 src/renderer/src/runtime/layout-owner-drawn-tab-holds.ts
create mode 100644 src/renderer/src/runtime/workspace-layout-frame-held-tabs.test.ts
create mode 100644 src/renderer/src/store/workspace-layout-frame-held-tabs.ts
diff --git a/config/renderer-layout-writer-baseline.txt b/config/renderer-layout-writer-baseline.txt
index cbe93df298aa..1a780e4baa63 100644
--- a/config/renderer-layout-writer-baseline.txt
+++ b/config/renderer-layout-writer-baseline.txt
@@ -117,5 +117,6 @@
5 src/renderer/src/store/terminals/workspace-terminal-hydration-patch.ts
2 src/renderer/src/store/terminals/workspace-terminal-hydration.ts
2 src/renderer/src/store/terminals/workspace-terminal-reconnect.ts
+7 src/renderer/src/store/workspace-layout-frame-held-tabs.ts
4 src/renderer/src/store/workspace-layout-frame-slices.ts
12 src/renderer/src/store/workspace-layout-frame-store-patch.ts
diff --git a/src/main/persistence/window-save-divergence.ts b/src/main/persistence/window-save-divergence.ts
index f6712503d44b..b16c0a9880b8 100644
--- a/src/main/persistence/window-save-divergence.ts
+++ b/src/main/persistence/window-save-divergence.ts
@@ -2,8 +2,9 @@
// its own layout over a window save, so a save whose layout differs from main's model shows a
// change main never got as a command. Report-only, and only when its log is set (evidence runs);
// it never alters, fails or delays the write. Records main keeps through its own writes (pane
-// bindings, default-tab marks, closed-tab records, terminal row owners) are not compared: a save
-// that has not caught up with them asks main for nothing. Deleted with the old path (phase F).
+// bindings, resume records, default-tab marks, closed-tab records, terminal row owners,
+// client-hosted browser pages, the topology revision) are not compared: a save that has not
+// caught up with them asks main for nothing. Deleted with the old path (phase F).
import { appendFileSync } from 'node:fs'
import {
diff --git a/src/renderer/src/components/tab-group/tab-group-layout-owner-commands.test.ts b/src/renderer/src/components/tab-group/tab-group-layout-owner-commands.test.ts
index 198b8e3e9591..68472f46776e 100644
--- a/src/renderer/src/components/tab-group/tab-group-layout-owner-commands.test.ts
+++ b/src/renderer/src/components/tab-group/tab-group-layout-owner-commands.test.ts
@@ -1,6 +1,7 @@
import { beforeEach, describe, expect, it, vi } from 'vitest'
import type { sendLayoutCommandToOwner } from '@/runtime/layout-owner-command'
import { createTabsSliceMockApi } from '@/store/slices/tabs-slice-test-harness'
+import { beginLayoutFramePositions, endLayoutFramePositions } from '@/runtime/layout-frame-position'
import { createTestStore, makeWorktree, seedStore } from '@/store/slices/store-test-helpers'
import {
dropTabThroughLayoutOwner,
@@ -139,6 +140,21 @@ describe('dropTabThroughLayoutOwner', () => {
expect(store().getState().activeGroupIdByWorktree[WT]).toBe(right)
})
+ it('leaves placing a lone tab’s group to main’s frame while frames flow', () => {
+ const { left, right } = seeded()
+ const layout = store().getState().layoutByWorktree[WT]
+ beginLayoutFramePositions()
+ try {
+ dropTabThroughLayoutOwner(WT, { kind: 'split', tabId: 'c', groupId: left, direction: 'left' })
+ lastHandlers().apply({ groupId: right })
+ } finally {
+ endLayoutFramePositions()
+ }
+
+ expect(store().getState().layoutByWorktree[WT]).toBe(layout)
+ expect(store().getState().activeGroupIdByWorktree[WT]).toBe(right)
+ })
+
it('leaves a drop the window would skip to today’s path, sending nothing', () => {
const { left, right } = seeded()
diff --git a/src/renderer/src/components/tab-group/tab-group-layout-owner-commands.ts b/src/renderer/src/components/tab-group/tab-group-layout-owner-commands.ts
index 0681061bc378..9007f61bd083 100644
--- a/src/renderer/src/components/tab-group/tab-group-layout-owner-commands.ts
+++ b/src/renderer/src/components/tab-group/tab-group-layout-owner-commands.ts
@@ -1,11 +1,12 @@
// A layout-owner build's tab moves and group sizes. A move: main places the tab first, then the
-// window shows main's answer. Main's frame usually shows the move before main answers; while this
-// window owes main a save the frame waits, so the window then makes the same move itself, with
-// main's new group id. Group sizes: drawn while dragging, main saves them when the drag ends.
+// window shows main's answer. Main's frame shows the move before main answers; only when no frame
+// is coming does the window make the same move itself, with main's new group id. Group sizes:
+// drawn while dragging, main saves them when the drag ends.
import { useAppStore } from '@/store'
import type { TabSplitDirection } from '@/store/slices/tabs'
import { sendLayoutCommandToOwner } from '@/runtime/layout-owner-command'
+import { layoutFramesFlowing } from '@/runtime/layout-frame-position'
import type { WindowLayoutCommand } from '@/runtime/layout-apply-send'
import { moveGroupLeafBeside } from '../../../../shared/workspace-layout/tab-group-layout-tree'
import { stableJson } from '../../../../shared/workspace-layout/workspace-layout-load-report'
@@ -134,7 +135,10 @@ function showMainMove(worktreeId: string, drop: TabDrop, mainGroupId: string | u
moveAsToday(worktreeId, drop)
return
}
- placeGroupBeside(worktreeId, groupId, drop.groupId, drop.direction)
+ // Main's frame placed the group; the window places it only when no frame is coming.
+ if (!layoutFramesFlowing()) {
+ placeGroupBeside(worktreeId, groupId, drop.groupId, drop.direction)
+ }
}
state.activateTab(tabId, { worktreeId, preservePreview: true, recordFocus: false })
useAppStore.getState().focusGroup(worktreeId, groupId)
@@ -170,12 +174,11 @@ export function setGroupRatioThroughLayoutOwner(
state.setTabGroupSplitRatio(worktreeId, nodePath, ratio)
const groupLayout = useAppStore.getState().layoutByWorktree[worktreeId]
if (groupLayout && groupLayout !== state.layoutByWorktree[worktreeId]) {
- // Why keep on every answer: the window's own save still writes these sizes in this phase.
const keep = (): void => {}
sendLayoutCommandToOwner(
worktreeId,
{ type: 'setGroupRatios', groupLayout },
- { apply: keep, asToday: keep }
+ { apply: keep, asToday: keep, drawn: true }
)
}
}
diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-layout-owner-commands.ts b/src/renderer/src/components/terminal-pane/terminal-pane-layout-owner-commands.ts
index 33c063cdc4a2..698a3172de28 100644
--- a/src/renderer/src/components/terminal-pane/terminal-pane-layout-owner-commands.ts
+++ b/src/renderer/src/components/terminal-pane/terminal-pane-layout-owner-commands.ts
@@ -31,8 +31,7 @@ export function equalizeTerminalPanes(
then(manager)
}
},
- asToday: equalize,
- unapplied: () => {}
+ asToday: equalize
}
)
) {
diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-layout-owner-gestures.test.ts b/src/renderer/src/components/terminal-pane/terminal-pane-layout-owner-gestures.test.ts
index 50a456e62739..bd37d6117764 100644
--- a/src/renderer/src/components/terminal-pane/terminal-pane-layout-owner-gestures.test.ts
+++ b/src/renderer/src/components/terminal-pane/terminal-pane-layout-owner-gestures.test.ts
@@ -55,7 +55,6 @@ describe('layoutOwnerPaneGestures', () => {
{
apply: expect.any(Function),
asToday: expect.any(Function),
- unapplied: expect.any(Function),
refused: expect.any(Function)
}
)
@@ -74,22 +73,13 @@ describe('layoutOwnerPaneGestures', () => {
expect(move).toHaveBeenCalledOnce()
})
- it.each(['refused', 'unapplied'] as const)(
- 'keeps the window’s shape when main answers %s, as main’s tree did not change',
- (outcome) => {
- const move = vi.fn()
- gestures().takePaneDrop?.({ sourcePaneId: 2, targetPaneId: 1, zone: 'left' }, move)
- const handlers = mocks.send.mock.calls[0]?.[2]
-
- if (outcome === 'refused') {
- handlers?.refused?.('same_pane')
- } else {
- handlers?.unapplied?.()
- }
+ it('keeps the window’s shape when main refuses, as main’s tree did not change', () => {
+ const move = vi.fn()
+ gestures().takePaneDrop?.({ sourcePaneId: 2, targetPaneId: 1, zone: 'left' }, move)
+ mocks.send.mock.calls[0]?.[2]?.refused?.('same_pane')
- expect(move).not.toHaveBeenCalled()
- }
- )
+ expect(move).not.toHaveBeenCalled()
+ })
it('holds divider ratios until every move in flight has settled, even one that threw', () => {
const view = gestures()
diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-layout-owner-gestures.ts b/src/renderer/src/components/terminal-pane/terminal-pane-layout-owner-gestures.ts
index 6fb0eb9aa94e..0462e87b2b5f 100644
--- a/src/renderer/src/components/terminal-pane/terminal-pane-layout-owner-gestures.ts
+++ b/src/renderer/src/components/terminal-pane/terminal-pane-layout-owner-gestures.ts
@@ -63,7 +63,6 @@ export function layoutOwnerPaneGestures(pane: {
apply: () => settle(true),
asToday: () => settle(true),
// Main's tree did not change, and frames draw main's tree: the window keeps its shape.
- unapplied: () => settle(false),
refused: () => settle(false)
}
)
diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-split-with-inherited-cwd.test.ts b/src/renderer/src/components/terminal-pane/terminal-pane-split-with-inherited-cwd.test.ts
index 0e3cefb27a86..33d636951bba 100644
--- a/src/renderer/src/components/terminal-pane/terminal-pane-split-with-inherited-cwd.test.ts
+++ b/src/renderer/src/components/terminal-pane/terminal-pane-split-with-inherited-cwd.test.ts
@@ -308,22 +308,14 @@ describe('splitTerminalPaneWithInheritedCwd', () => {
expect(takePaneAppearIntent('tab-1', newLeafId)).toBeNull()
})
- it.each(['unapplied', 'refused'] as const)(
- 'in a layout-owner build, forgets the pane when main answers %s',
- (outcome) => {
- splitInLayoutOwnerBuild(makeManager(vi.fn()))
- const [, command, handlers] = mocks.sendLayoutCommandToOwner.mock.calls[0] ?? []
-
- if (outcome === 'refused') {
- handlers?.refused?.('pane_not_found')
- } else {
- handlers?.unapplied?.()
- }
-
- const newLeafId = command?.type === 'splitPane' ? (command.newLeafId ?? '') : ''
- expect(takePaneAppearIntent('tab-1', newLeafId)).toBeNull()
- }
- )
+ it('in a layout-owner build, forgets the pane when main refuses', () => {
+ splitInLayoutOwnerBuild(makeManager(vi.fn()))
+ const [, command, handlers] = mocks.sendLayoutCommandToOwner.mock.calls[0] ?? []
+ handlers?.refused?.('pane_not_found')
+
+ const newLeafId = command?.type === 'splitPane' ? (command.newLeafId ?? '') : ''
+ expect(takePaneAppearIntent('tab-1', newLeafId)).toBeNull()
+ })
it('in a layout-owner build, splits here when main answers as today', () => {
const splitPane = vi.fn(() => ({ id: 2 }))
diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-split-with-inherited-cwd.ts b/src/renderer/src/components/terminal-pane/terminal-pane-split-with-inherited-cwd.ts
index 358b7dbc7e44..c08ac5280318 100644
--- a/src/renderer/src/components/terminal-pane/terminal-pane-split-with-inherited-cwd.ts
+++ b/src/renderer/src/components/terminal-pane/terminal-pane-split-with-inherited-cwd.ts
@@ -65,7 +65,6 @@ export function splitTerminalPaneWithInheritedCwd(args: SplitArgs): void {
forget()
splitLocally(args, () => cwd)
},
- unapplied: forget,
refused: forget
}
)
diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-tab-detach-frame-drawn.test.ts b/src/renderer/src/components/terminal-pane/terminal-pane-tab-detach-frame-drawn.test.ts
index 05eaf5c7ad4f..16e275818371 100644
--- a/src/renderer/src/components/terminal-pane/terminal-pane-tab-detach-frame-drawn.test.ts
+++ b/src/renderer/src/components/terminal-pane/terminal-pane-tab-detach-frame-drawn.test.ts
@@ -195,6 +195,31 @@ describe('a drag-out whose new tab main’s frame drew first', () => {
expect(state.activeTabIdByWorktree[WT]).toBe(MOVED)
})
+ it('leaves the tab where main’s frame placed it, asked for an index', async () => {
+ const store = storeWithFrameDrawnMove()
+ mocks.send.mockImplementation((_worktreeId, _command, handlers) => {
+ handlers.apply({ tabId: MOVED, ptyId: 'pty-right' })
+ return true
+ })
+
+ await detachTerminalPaneToTab({
+ getStore: () => store.getState(),
+ manager: {
+ getPanes: () => [{ id: 1 }, { id: 2 }],
+ getLeafId: (paneId: number) => (paneId === 2 ? LEAF_2 : LEAF_1),
+ detachPaneForExternalMove: () => true
+ },
+ persistLayoutSnapshot: vi.fn(),
+ sourcePaneId: 2,
+ sourceTabId: SOURCE,
+ targetGroupId: GROUP,
+ targetIndex: 0,
+ worktreeId: WT
+ })
+
+ expect(store.getState().groupsByWorktree[WT]![0]!.tabOrder).toEqual([SOURCE, MOVED])
+ })
+
it('opens a dragged-out chat pane’s tab in chat view, as a window-owned build does', async () => {
const store = storeWithChatSplit()
mocks.send.mockImplementation((_worktreeId, _command, handlers) => {
diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-tab-detach.ts b/src/renderer/src/components/terminal-pane/terminal-pane-tab-detach.ts
index ba5a3a58ecc3..7e651cb95775 100644
--- a/src/renderer/src/components/terminal-pane/terminal-pane-tab-detach.ts
+++ b/src/renderer/src/components/terminal-pane/terminal-pane-tab-detach.ts
@@ -235,14 +235,17 @@ function applyMove(
recordInteraction: true
})
const afterCreateStore = args.getStore()
- moveCreatedTabToIndex({
- groupId: args.targetGroupId,
- store: afterCreateStore,
- tabId: tab.id,
- targetIndex: args.targetIndex,
- worktreeId,
- mainPlaced: mainMoved
- })
+ // Main's frame drew the tab where main placed it; the window places it only when it drew it.
+ if (!frameDrawn) {
+ moveCreatedTabToIndex({
+ groupId: args.targetGroupId,
+ store: afterCreateStore,
+ tabId: tab.id,
+ targetIndex: args.targetIndex,
+ worktreeId,
+ mainPlaced: mainMoved
+ })
+ }
if (split) {
afterCreateStore.setTabLayout(sourceTabId, split.sourceLayout)
}
diff --git a/src/renderer/src/components/use-terminal-watcher-effects.ts b/src/renderer/src/components/use-terminal-watcher-effects.ts
index 8b94f86c89a9..d645860eac30 100644
--- a/src/renderer/src/components/use-terminal-watcher-effects.ts
+++ b/src/renderer/src/components/use-terminal-watcher-effects.ts
@@ -252,11 +252,8 @@ export function useTerminalWatcherEffects(controller: TerminalWatcherController)
// Switch point: main decides whether the workspace gets its first tab.
if (
ORCA_LAYOUT_OWNER_IS_MAIN &&
- createInitialTerminalThroughLayoutOwner(useAppStore.getState, activeWorktreeId, (ids) =>
- createTab(activeWorktreeId, undefined, undefined, {
- pendingActivationSpawn: true,
- ...(ids ? { id: ids.tabId, initialLeafId: ids.leafId } : {})
- })
+ createInitialTerminalThroughLayoutOwner(useAppStore.getState, activeWorktreeId, () =>
+ createTab(activeWorktreeId, undefined, undefined, { pendingActivationSpawn: true })
)
) {
return
diff --git a/src/renderer/src/lib/session-write-subscriber-activity.test.ts b/src/renderer/src/lib/session-write-subscriber-activity.test.ts
deleted file mode 100644
index 0963071488a3..000000000000
--- a/src/renderer/src/lib/session-write-subscriber-activity.test.ts
+++ /dev/null
@@ -1,71 +0,0 @@
-import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
-import { useAppStore, type AppState } from '@/store'
-import { createSessionWriteSubscriber } from './session-write-subscriber'
-import { isWindowSessionWriteBusy } from './window-session-write-activity'
-
-vi.mock('../../../shared/layout-owner-switch', () => ({ ORCA_LAYOUT_OWNER_IS_MAIN: true }))
-
-describe('session write activity in a layout-owner build', () => {
- let initial: AppState
- let dispose: (() => void) | undefined
- beforeEach(() => {
- initial = useAppStore.getState()
- vi.useFakeTimers()
- })
- afterEach(() => {
- dispose?.()
- dispose = undefined
- vi.useRealTimers()
- useAppStore.setState(initial, true)
- })
-
- it('is busy from a change until main acknowledges its write', async () => {
- let acknowledge!: () => void
- const persist = vi.fn(
- () =>
- new Promise((resolve) => {
- acknowledge = resolve
- })
- )
- dispose = createSessionWriteSubscriber({ store: useAppStore, persist })
- useAppStore.setState({ workspaceSessionReady: true, hydrationSucceeded: true })
- // The first write after the gate opens.
- await vi.advanceTimersByTimeAsync(200)
- acknowledge()
- await vi.advanceTimersByTimeAsync(0)
- expect(isWindowSessionWriteBusy()).toBe(false)
-
- useAppStore.setState({ activeTabId: 'tab-2' })
- expect(isWindowSessionWriteBusy()).toBe(true)
- await vi.advanceTimersByTimeAsync(200)
- expect(persist).toHaveBeenCalledTimes(2)
- expect(isWindowSessionWriteBusy()).toBe(true)
- acknowledge()
- await vi.advanceTimersByTimeAsync(0)
- expect(isWindowSessionWriteBusy()).toBe(false)
- })
-
- it('is busy before the window may save, and after a failed write until it resends', async () => {
- const persist = vi.fn(() => Promise.reject(new Error('main unavailable')))
- dispose = createSessionWriteSubscriber({
- store: useAppStore,
- persist,
- onPersistError: () => {}
- })
- expect(isWindowSessionWriteBusy()).toBe(true)
- useAppStore.setState({ workspaceSessionReady: true, hydrationSucceeded: true })
- await vi.advanceTimersByTimeAsync(200)
- expect(persist).toHaveBeenCalledTimes(1)
- expect(vi.getTimerCount()).toBe(0)
- expect(isWindowSessionWriteBusy()).toBe(true)
- })
-
- it('is idle once disposed', () => {
- dispose = createSessionWriteSubscriber({ store: useAppStore, persist: vi.fn() })
- useAppStore.setState({ workspaceSessionReady: true, hydrationSucceeded: true })
- expect(isWindowSessionWriteBusy()).toBe(true)
- dispose()
- dispose = undefined
- expect(isWindowSessionWriteBusy()).toBe(false)
- })
-})
diff --git a/src/renderer/src/lib/session-write-subscriber.ts b/src/renderer/src/lib/session-write-subscriber.ts
index cd6ebceccb3f..73e837ea9dde 100644
--- a/src/renderer/src/lib/session-write-subscriber.ts
+++ b/src/renderer/src/lib/session-write-subscriber.ts
@@ -4,8 +4,6 @@ import type { WorkspaceSessionPatch } from '../../../shared/workspace-session-st
import { SESSION_RELEVANT_FIELDS, shouldPersistWorkspaceSession } from './workspace-session'
import { buildWorkspaceSessionPatch } from './workspace-session-patch'
import { createWorktreeTabBucketProjection } from './worktree-tab-bucket-projection'
-import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../shared/layout-owner-switch'
-import { reportWindowSessionWriteActivity } from './window-session-write-activity'
type SessionRelevantField = (typeof SESSION_RELEVANT_FIELDS)[number]
type TabsByWorktree = AppState['tabsByWorktree']
@@ -126,21 +124,9 @@ export function createSessionWriteSubscriber({
const pendingChangedFields = new Set()
const terminalTabsProjection = createTerminalSessionTabsProjection()
const unifiedTabsProjection = createUnifiedSessionTabsProjection()
- // Switch point (each report below, inline so a window-owned build keeps none of it): layout
- // frames wait while this window owes main a write, including before it may save at all.
- const owesWrite = (): boolean =>
- !disposed &&
- (timer !== null ||
- writing ||
- pendingChangedFields.size > 0 ||
- !shouldPersistWorkspaceSession(store.getState()))
-
const flushPendingWrite = (): void => {
timer = null
if (disposed || writing || pendingChangedFields.size === 0) {
- if (ORCA_LAYOUT_OWNER_IS_MAIN) {
- reportWindowSessionWriteActivity(owesWrite())
- }
return
}
// Why: rebuild from the freshest store state rather than the snapshot
@@ -161,9 +147,6 @@ export function createSessionWriteSubscriber({
pendingChangedFields.clear()
const patch = buildWorkspaceSessionPatch(fresh, changed)
if (Object.keys(patch).length === 0) {
- if (ORCA_LAYOUT_OWNER_IS_MAIN) {
- reportWindowSessionWriteActivity(owesWrite())
- }
return
}
writing = true
@@ -181,10 +164,6 @@ export function createSessionWriteSubscriber({
} else if (pendingChangedFields.size > 0) {
armFlushTimer()
}
- // A failed write stays owed, so structure frames wait for the next store wake's resend.
- if (ORCA_LAYOUT_OWNER_IS_MAIN) {
- reportWindowSessionWriteActivity(owesWrite())
- }
}
try {
const result = persist({ patch })
@@ -209,9 +188,6 @@ export function createSessionWriteSubscriber({
clearTimeout(timer)
}
timer = setTimeout(flushPendingWrite, debounceMs)
- if (ORCA_LAYOUT_OWNER_IS_MAIN) {
- reportWindowSessionWriteActivity(owesWrite())
- }
}
/**
@@ -242,9 +218,6 @@ export function createSessionWriteSubscriber({
const evaluateSessionState = (state: AppState): void => {
if (!shouldPersistWorkspaceSession(state)) {
- if (ORCA_LAYOUT_OWNER_IS_MAIN) {
- reportWindowSessionWriteActivity(owesWrite())
- }
return
}
// Why: this fires on every store write and almost none of them touch a session field. Scan
@@ -307,8 +280,5 @@ export function createSessionWriteSubscriber({
clearTimeout(timer)
}
pendingChangedFields.clear()
- if (ORCA_LAYOUT_OWNER_IS_MAIN) {
- reportWindowSessionWriteActivity(owesWrite())
- }
}
}
diff --git a/src/renderer/src/lib/window-session-write-activity.ts b/src/renderer/src/lib/window-session-write-activity.ts
deleted file mode 100644
index 519d19e4388d..000000000000
--- a/src/renderer/src/lib/window-session-write-activity.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-// Whether this window owes main a session write: one is scheduled or not yet acknowledged. Fed by
-// the session write subscriber in a layout-owner build only; layout frames wait while it is busy,
-// so a frame never replaces a change main has not received yet.
-
-let busy = false
-let idleListener: (() => void) | null = null
-
-export function reportWindowSessionWriteActivity(nextBusy: boolean): void {
- if (busy === nextBusy) {
- return
- }
- busy = nextBusy
- if (!busy) {
- idleListener?.()
- }
-}
-
-export function isWindowSessionWriteBusy(): boolean {
- return busy
-}
-
-/** The one listener: the window's layout frame sync. */
-export function onWindowSessionWriteIdle(listener: () => void): () => void {
- idleListener = listener
- return () => {
- if (idleListener === listener) {
- idleListener = null
- }
- }
-}
diff --git a/src/renderer/src/lib/worktree-agent-live-surface-adoption-layout-owner.test.ts b/src/renderer/src/lib/worktree-agent-live-surface-adoption-layout-owner.test.ts
index da86bf996c2c..a390ea68cb00 100644
--- a/src/renderer/src/lib/worktree-agent-live-surface-adoption-layout-owner.test.ts
+++ b/src/renderer/src/lib/worktree-agent-live-surface-adoption-layout-owner.test.ts
@@ -14,7 +14,6 @@ import { bootWindowFromPartitions } from '../app-shell/startup-window-view.test-
import { provideLayoutFrameTerminalPanes } from '../runtime/layout-frame-terminal-panes'
import { openWorkspaceLayoutFrameSync } from '../runtime/workspace-layout-frame-sync'
import type { WorkspaceLayoutFrameSync } from '../runtime/workspace-layout-frame-sync'
-import { reportWindowSessionWriteActivity } from './window-session-write-activity'
import { createStoreSessionMockApi } from '../store/slices/store-session-test-harness'
import { createTestStore } from '../store/slices/store-test-helpers'
import { adoptLiveWorkspacePtySurfaces } from './worktree-agent-live-surface-adoption'
@@ -93,7 +92,6 @@ describe('adopting live terminals in a layout-owner build', () => {
let sync: WorkspaceLayoutFrameSync | null = null
beforeEach(() => {
- reportWindowSessionWriteActivity(false)
sync?.close()
sync = null
provideLayoutFrameTerminalPanes({
@@ -102,15 +100,13 @@ describe('adopting live terminals in a layout-owner build', () => {
})
})
- it('makes no tab or pane of its own while frames are held; the frame then draws the bound tab', async () => {
+ it('makes no tab or pane of its own before frames draw; the frame then draws the bound tab', async () => {
const { window: windowSession, main } = sessions()
const store = createTestStore()
await bootWindowFromPartitions(store, [{ hostId: 'local', session: windowSession }])
sync = openWorkspaceLayoutFrameSync(store)
provideLayoutFrameTerminalPanes(sync)
- sync.start()
- // The window owes main a save, so main's tree waits.
- reportWindowSessionWriteActivity(true)
+ // Main's snapshot is in, but the window has not started drawing from frames yet.
frames.onFrame!(snapshotOf(main))
await flushMicrotasks()
const createTab = vi.spyOn(store.getState(), 'createTab')
@@ -128,7 +124,7 @@ describe('adopting live terminals in a layout-owner build', () => {
expect(setTabLayout).not.toHaveBeenCalled()
expect(store.getState().tabsByWorktree[GIT_KEY]!.map((tab) => tab.id)).toEqual(['tab-other'])
- reportWindowSessionWriteActivity(false)
+ sync.start()
await flushMicrotasks()
const layout = store.getState().terminalLayoutsByTabId['tab-split']
expect(layout?.root).toMatchObject({
@@ -157,8 +153,6 @@ describe('adopting live terminals in a layout-owner build', () => {
await bootWindowFromPartitions(store, [{ hostId: 'local', session: windowSession }])
sync = openWorkspaceLayoutFrameSync(store)
provideLayoutFrameTerminalPanes(sync)
- sync.start()
- reportWindowSessionWriteActivity(true)
frames.onFrame!(snapshotOf(main))
await flushMicrotasks()
diff --git a/src/renderer/src/runtime/layout-apply-send.test.ts b/src/renderer/src/runtime/layout-apply-send.test.ts
index 9a7400a54f0d..24db2d011535 100644
--- a/src/renderer/src/runtime/layout-apply-send.test.ts
+++ b/src/renderer/src/runtime/layout-apply-send.test.ts
@@ -24,13 +24,17 @@ vi.mock('@/runtime/layout-frame-position', () => ({
}))
vi.mock('@/runtime/layout-owner-pane-intents', () => ({ holdTabPaneTree: () => () => {} }))
-import { sendLayoutApply } from './layout-apply-send'
+import { recordLayoutApply, sendLayoutApply } from './layout-apply-send'
+import { isDrawnGroupLayoutHeld, isDrawnTabHeld } from './layout-owner-drawn-tab-holds'
+
+// oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: the owner lookup is mocked and never reads the state.
+const NO_STATE = {} as never
const RENAME = { type: 'renamePane', tabId: 'tab-1', leafId: 'leaf-1', title: 'Pane' } as const
async function send(reply: LayoutApplyReply | Error) {
mocks.sent.reply = reply
- const handlers = { apply: vi.fn(), asToday: vi.fn(), refused: vi.fn(), unapplied: vi.fn() }
+ const handlers = { apply: vi.fn(), asToday: vi.fn(), refused: vi.fn() }
// oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: the owner lookup is mocked and never reads the state.
sendLayoutApply({} as never, 'wt-1', RENAME, handlers)
await vi.waitFor(() => {
@@ -53,13 +57,17 @@ describe('sendLayoutApply', () => {
it.each([
{ reply: { ok: false, code: 'other_partition' } as const, code: 'other_partition' },
{ reply: { ok: false, code: 'host_not_owned' } as const, code: 'host_not_owned' },
- { reply: new Error('disk refused'), code: 'call_failed' }
+ { reply: new Error('disk refused'), code: 'call_failed' },
+ // Main's copy lacking the target is a refusal too: a frame drew what the window shows.
+ { reply: { ok: false, code: 'tab_not_found' } as const, code: 'tab_not_found' },
+ { reply: { ok: false, code: 'pane_not_found' } as const, code: 'pane_not_found' },
+ { reply: { ok: false, code: 'workspace_not_found' } as const, code: 'workspace_not_found' },
+ { reply: { ok: false, code: 'group_not_found' } as const, code: 'group_not_found' }
])('logs a $code refusal and draws nothing of its own', async ({ reply, code }) => {
const handlers = await send(reply)
expect(handlers.refused).toHaveBeenCalledWith(code)
expect(handlers.asToday).not.toHaveBeenCalled()
- expect(handlers.unapplied).not.toHaveBeenCalled()
expect(console.warn).toHaveBeenCalledWith(
expect.stringContaining(`[layout-owner] renamePane refused`),
...(reply instanceof Error ? ['disk refused'] : [code])
@@ -92,4 +100,47 @@ describe('sendLayoutApply', () => {
const applied = await send({ ok: true, result: { tabId: 'tab-1' } })
expect(applied.apply).toHaveBeenCalledWith({ tabId: 'tab-1' })
})
+
+ it('holds the tabs a drawn change names, in each workspace, until its answer is in', async () => {
+ mocks.sent.reply = { ok: true, result: {} }
+ recordLayoutApply(NO_STATE, 'wt-1', {
+ type: 'moveTabToWorkspace',
+ toWorkspace: 'wt-2',
+ tabs: [{ tabId: 'tab-1', newTabId: 'tab-1b', newEntityId: 'file-1b' }],
+ groupId: 'group-2'
+ })
+ expect(isDrawnTabHeld('wt-1', 'tab-1')).toBe(true)
+ expect(isDrawnTabHeld('wt-2', 'tab-1b')).toBe(true)
+ expect(isDrawnTabHeld('wt-2', 'file-1b')).toBe(true)
+ expect(isDrawnTabHeld('wt-2', 'tab-1')).toBe(false)
+ await vi.waitFor(() => expect(isDrawnTabHeld('wt-1', 'tab-1')).toBe(false))
+ expect(isDrawnTabHeld('wt-2', 'tab-1b')).toBe(false)
+ })
+
+ it('holds group sizes the window set, and nothing for a change main draws first', async () => {
+ mocks.sent.reply = { ok: true, result: {} }
+ const keep = vi.fn()
+ sendLayoutApply(
+ NO_STATE,
+ 'wt-1',
+ { type: 'setGroupRatios', groupLayout: { type: 'leaf', groupId: 'g' } },
+ {
+ apply: keep,
+ asToday: keep,
+ drawn: true
+ }
+ )
+ sendLayoutApply(
+ NO_STATE,
+ 'wt-1',
+ { type: 'moveTab', tabId: 'tab-9', toGroupId: 'g', index: 0 },
+ {
+ apply: keep,
+ asToday: keep
+ }
+ )
+ expect(isDrawnGroupLayoutHeld('wt-1')).toBe(true)
+ expect(isDrawnTabHeld('wt-1', 'tab-9')).toBe(false)
+ await vi.waitFor(() => expect(isDrawnGroupLayoutHeld('wt-1')).toBe(false))
+ })
})
diff --git a/src/renderer/src/runtime/layout-apply-send.ts b/src/renderer/src/runtime/layout-apply-send.ts
index 7ece639f7b8c..3f6bf6f78773 100644
--- a/src/renderer/src/runtime/layout-apply-send.ts
+++ b/src/renderer/src/runtime/layout-apply-send.ts
@@ -6,6 +6,7 @@ import {
import { callRuntimeRpc } from '@/runtime/runtime-rpc-client'
import { afterLayoutFrame } from '@/runtime/layout-frame-position'
import { holdTabPaneTree } from '@/runtime/layout-owner-pane-intents'
+import { holdDrawnTabs, type DrawnTabHold } from '@/runtime/layout-owner-drawn-tab-holds'
import type { SleepingAgentSessionRecord } from '../../../shared/agent-session-resume'
import type { TabGroupLayoutNode } from '../../../shared/tab-types'
import type { TerminalPaneLayoutNode } from '../../../shared/terminal-tab-types'
@@ -13,6 +14,7 @@ import type { PaneSide } from '../../../shared/workspace-layout/terminal-pane-tr
import type { LayoutEditorFile } from '../../../shared/workspace-layout/workspace-layout-model'
import type { EditorTabContentType } from '@/store/slices/editor/tabs/editor-tab-content-type'
import type {
+ CommandOf,
EditorFileRename,
GroupSide,
LayoutApplyReply,
@@ -132,6 +134,7 @@ export type WindowLayoutCommand =
/** Drops the panes' resume records without starting them. */
| { type: 'wake'; tabId: string; paneKeys: string[]; recordOnly: true }
| { type: 'setDefaultTabsApplied' }
+ | (Omit, 'workspace'> & { tabId: string; leafId: string })
/** `call_failed`: the call threw, and a thrown write is rolled back. */
type WindowRefusalCode = Extract['code'] | 'call_failed'
@@ -140,10 +143,8 @@ export type LayoutApplyHandlers = {
apply: (result: LayoutCommandResult) => void
asToday: () => void
refused?: (code: WindowRefusalCode) => void
- /** Main's copy lacks the target; `asToday` when absent. A pane split or move
- * passes one: main keeps its pane trees over the window's saves, so that change would not last.
- * A close keeps `asToday`: a pane main lacks has nothing to keep it. */
- unapplied?: () => void
+ /** The window already drew the change: frames keep its tabs as drawn until the answer is in. */
+ drawn?: true
}
/** Commands that change one tab's panes: frames wait to redraw that tab until the answer is in. */
@@ -158,13 +159,70 @@ const PANE_COMMANDS: ReadonlySet = new Set([
'movePaneToNewTab'
])
+/** The tabs, by workspace, that a command the window already drew changes. */
+function drawnTabHolds(worktreeId: string, command: WindowLayoutCommand): DrawnTabHold[] {
+ switch (command.type) {
+ case 'closeTabs':
+ return [{ workspace: worktreeId, ids: command.tabIds }]
+ case 'openBrowserTab':
+ return [{ workspace: worktreeId, ids: [command.tabId, command.browserTabId] }]
+ case 'openEditorTab':
+ return [{ workspace: worktreeId, ids: [command.tabId, command.fileId] }]
+ case 'splitGroup':
+ return [{ workspace: worktreeId, ids: [command.tabId], groupLayout: true }]
+ case 'moveTab':
+ case 'renameTab':
+ case 'setTabProps':
+ case 'promotePreviewTab':
+ case 'openAgentSessionTab':
+ case 'openSimulatorTab':
+ case 'createTerminalTab':
+ return [{ workspace: worktreeId, ids: [command.tabId] }]
+ case 'openBrowserPage':
+ case 'closeBrowserPage':
+ case 'replaceBrowserPage':
+ case 'setBrowserTabProfile':
+ return [{ workspace: worktreeId, ids: [command.browserTabId] }]
+ case 'renameEditorFiles':
+ return [
+ {
+ workspace: worktreeId,
+ ids: command.renames.flatMap((rename) => [rename.fileId, rename.newFileId])
+ }
+ ]
+ case 'moveTabToWorkspace':
+ return [
+ { workspace: worktreeId, ids: command.tabs.map((tab) => tab.tabId) },
+ {
+ workspace: command.toWorkspace,
+ ids: command.tabs.flatMap((tab) => [tab.newTabId, tab.newEntityId])
+ }
+ ]
+ case 'setGroupRatios':
+ return [{ workspace: worktreeId, ids: [], groupLayout: true }]
+ // Pane commands hold their tab's pane tree; records are not drawn from frames.
+ case 'splitPane':
+ case 'closePane':
+ case 'renamePane':
+ case 'equalizePanes':
+ case 'movePane':
+ case 'setPaneRatios':
+ case 'setChatPane':
+ case 'movePaneToNewTab':
+ case 'sleep':
+ case 'wake':
+ case 'setDefaultTabsApplied':
+ return []
+ }
+}
+
/**
* A layout command in a layout-owner build: main applies it first, then, once the window has the
* frame with main's change, `apply` shows main's result. `asToday` runs instead only when a paired
- * server may hold the tab (#18202), or main's copy lacks the workspace, tab, pane or group. Any
- * other refusal, and a call that threw, is logged and `refused`: main's frame stays what is drawn,
- * since a window save no longer carries the change. False when a paired server owns the
- * workspace's layout; the caller acts as today.
+ * server may hold the tab (#18202). Any other refusal (main's copy lacking the target too), and a
+ * call that threw, is logged and `refused`: main's frame stays what is drawn, since a window save
+ * no longer carries the change. False when a paired server owns the workspace's layout; the
+ * caller acts as today.
*/
export function sendLayoutApply(
state: Parameters[0],
@@ -180,12 +238,17 @@ export function sendLayoutApply(
}
const hold =
PANE_COMMANDS.has(command.type) && 'tabId' in command ? holdTabPaneTree(command.tabId) : null
+ const tabHolds = handlers.drawn ? drawnTabHolds(worktreeId, command) : []
+ const tabHold = tabHolds.length > 0 ? holdDrawnTabs(tabHolds) : null
// Why a task later: a handler that resolves a promise (drag-out) acts in its awaiting caller,
// microtasks after the handler returns.
const release = (): void => {
if (hold) {
setTimeout(hold, 0)
}
+ if (tabHold) {
+ setTimeout(tabHold, 0)
+ }
}
void callRuntimeRpc({ kind: 'local' }, 'layout.apply', {
command: { ...command, workspace: worktreeId }
@@ -228,10 +291,6 @@ function handleReply(
handlers.apply(reply.result)
} else if (reply.code === 'host_not_owned' && mayBePairedServers(state, worktreeId)) {
handlers.asToday()
- } else if (mainLacksTarget(reply.code)) {
- // Why: main's copy can lag the window's: a tab the window drew before main's create answered.
- console.warn(`[layout-owner] ${command.type} found no target:`, reply.code)
- unapplied(handlers)
} else {
console.warn(`[layout-owner] ${command.type} refused:`, reply.code)
handlers.refused?.(reply.code)
@@ -248,32 +307,19 @@ function mayBePairedServers(
)
}
-function unapplied(handlers: LayoutApplyHandlers): void {
- if (handlers.unapplied) {
- handlers.unapplied()
- } else {
- handlers.asToday()
- }
-}
-
const keepWindowCopy = (): void => {}
-/** Records a change the window already made; any answer leaves the window's copy as it is. */
+/** Records a change the window already made: drawn as the window made it until main answers. */
export function recordLayoutApply(
state: Parameters[0],
worktreeId: string,
command: WindowLayoutCommand
): void {
- sendLayoutApply(state, worktreeId, command, { apply: keepWindowCopy, asToday: keepWindowCopy })
-}
-
-function mainLacksTarget(code: WindowRefusalCode): boolean {
- return (
- code === 'workspace_not_found' ||
- code === 'tab_not_found' ||
- code === 'pane_not_found' ||
- code === 'group_not_found'
- )
+ sendLayoutApply(state, worktreeId, command, {
+ apply: keepWindowCopy,
+ asToday: keepWindowCopy,
+ drawn: true
+ })
}
function errorMessage(error: unknown): unknown {
diff --git a/src/renderer/src/runtime/layout-owner-command.test.ts b/src/renderer/src/runtime/layout-owner-command.test.ts
index 0d3191eed39e..2471f20f7f9d 100644
--- a/src/renderer/src/runtime/layout-owner-command.test.ts
+++ b/src/renderer/src/runtime/layout-owner-command.test.ts
@@ -105,36 +105,28 @@ describe('sendLayoutCommandToOwner', () => {
'main lacks the workspace',
() => mocks.callRuntimeRpc.mockResolvedValue({ ok: false, code: 'workspace_not_found' })
]
- ])('acts as today when %s', async (_case, arrange) => {
+ ])('refuses, logging it and drawing nothing, when %s', async (_case, arrange) => {
arrange()
const on = handlers()
sendLayoutCommandToOwner('worktree-1', SPLIT, on)
- await vi.waitFor(() => expect(on.asToday).toHaveBeenCalledOnce())
- expect(on.refused).not.toHaveBeenCalled()
+ await vi.waitFor(() => expect(on.refused).toHaveBeenCalledOnce())
+ expect(on.asToday).not.toHaveBeenCalled()
+ expect(console.warn).toHaveBeenCalledWith(
+ '[layout-owner] splitPane refused:',
+ expect.stringMatching(/_not_found$/)
+ )
})
it('refuses, drawing nothing, when the call fails', async () => {
mocks.callRuntimeRpc.mockRejectedValue(new Error('rpc_failed'))
- const on = { ...handlers(), unapplied: vi.fn() }
+ const on = handlers()
sendLayoutCommandToOwner('worktree-1', SPLIT, on)
await vi.waitFor(() => expect(on.refused).toHaveBeenCalledWith('call_failed'))
expect(on.asToday).not.toHaveBeenCalled()
- expect(on.unapplied).not.toHaveBeenCalled()
- })
-
- it('draws nothing for a pane command passing `unapplied` when main lacks the pane', async () => {
- mocks.callRuntimeRpc.mockResolvedValue({ ok: false, code: 'pane_not_found' })
- const on = { ...handlers(), unapplied: vi.fn() }
-
- sendLayoutCommandToOwner('worktree-1', SPLIT, on)
-
- await vi.waitFor(() => expect(on.unapplied).toHaveBeenCalledOnce())
- expect(on.asToday).not.toHaveBeenCalled()
- await vi.waitFor(() => expect(isTabPaneTreeHeld('tab-1')).toBe(false))
})
it('keeps the tab’s drawn tree from frames until its answer, and what awaits it, has run', async () => {
diff --git a/src/renderer/src/runtime/layout-owner-drawn-tab-holds.ts b/src/renderer/src/runtime/layout-owner-drawn-tab-holds.ts
new file mode 100644
index 000000000000..a757b4b3fcf8
--- /dev/null
+++ b/src/renderer/src/runtime/layout-owner-drawn-tab-holds.ts
@@ -0,0 +1,78 @@
+// Tabs this window drew, closed or moved before main answered, in a layout-owner build: frames
+// keep each as the window shows it until main's answer is in, then redraw its workspaces, so a
+// frame sent before main had the change neither drops a just-drawn tab nor brings back a closed one.
+
+/** A workspace's held tabs, by tab-bar or entity id; `groupLayout`: the group sizes the window set. */
+export type DrawnTabHold = { workspace: string; ids: readonly string[]; groupLayout?: true }
+
+const held = new Map>()
+const redrawListeners = new Set<(workspaces: readonly string[]) => void>()
+
+/** The tree key of a workspace's group sizes, never a tab id. */
+const GROUP_LAYOUT = '\0group-layout'
+
+function count(workspace: string, id: string, by: 1 | -1): void {
+ const ids = held.get(workspace) ?? new Map()
+ const next = (ids.get(id) ?? 0) + by
+ if (next > 0) {
+ ids.set(id, next)
+ } else {
+ ids.delete(id)
+ }
+ if (ids.size > 0) {
+ held.set(workspace, ids)
+ } else {
+ held.delete(workspace)
+ }
+}
+
+function keysOf(hold: DrawnTabHold): string[] {
+ return hold.groupLayout ? [...hold.ids, GROUP_LAYOUT] : [...hold.ids]
+}
+
+/** Keeps these as drawn until the release, which redraws their workspaces; a second release is a no-op. */
+export function holdDrawnTabs(holds: readonly DrawnTabHold[]): () => void {
+ for (const hold of holds) {
+ for (const id of keysOf(hold)) {
+ count(hold.workspace, id, 1)
+ }
+ }
+ let released = false
+ return () => {
+ if (released) {
+ return
+ }
+ released = true
+ for (const hold of holds) {
+ for (const id of keysOf(hold)) {
+ count(hold.workspace, id, -1)
+ }
+ }
+ const workspaces = [...new Set(holds.map((hold) => hold.workspace))]
+ for (const listener of redrawListeners) {
+ listener(workspaces)
+ }
+ }
+}
+
+export function isDrawnTabHeld(workspace: string, id: string): boolean {
+ return held.get(workspace)?.has(id) ?? false
+}
+
+export function isDrawnGroupLayoutHeld(workspace: string): boolean {
+ return isDrawnTabHeld(workspace, GROUP_LAYOUT)
+}
+
+export function holdsDrawnTabs(workspace: string): boolean {
+ return held.has(workspace)
+}
+
+export function onDrawnTabsRedraw(listener: (workspaces: readonly string[]) => void): () => void {
+ redrawListeners.add(listener)
+ return () => redrawListeners.delete(listener)
+}
+
+export function _resetDrawnTabHoldsForTests(): void {
+ held.clear()
+ redrawListeners.clear()
+}
diff --git a/src/renderer/src/runtime/workspace-layout-frame-held-tabs.test.ts b/src/renderer/src/runtime/workspace-layout-frame-held-tabs.test.ts
new file mode 100644
index 000000000000..86f91881f1b0
--- /dev/null
+++ b/src/renderer/src/runtime/workspace-layout-frame-held-tabs.test.ts
@@ -0,0 +1,440 @@
+import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
+import type * as AgentStatusModule from '@/lib/agent-status'
+import type { Tab } from '../../../shared/tab-types'
+import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types'
+import type { LayoutApplyReply } from '../../../shared/workspace-layout/workspace-layout-command-types'
+import { loadWorkspaceLayoutWithoutReport } from '../../../shared/workspace-layout/workspace-layout-load'
+import { nameBasedLoadContext } from '../../../shared/workspace-layout/workspace-layout-minted-ids'
+import { localDesktopSession } from '../../../shared/workspace-layout/workspace-layout-profile.test-fixture'
+import {
+ publishWorkspaceLayout,
+ type PublishedWorkspaceLayout
+} from '../../../shared/workspace-layout/workspace-layout-published'
+import type { WorkspaceLayoutChangeFrame } from '../../../shared/workspace-layout/workspace-layout-stream-frames'
+import { makePaneKey } from '../../../shared/stable-pane-id'
+import { GIT_KEY } from '../../../shared/workspace-layout/workspace-layout-session.test-fixture'
+import { bootWindowFromPartitions } from '../app-shell/startup-window-view.test-fixture'
+import { buildWorkspaceSessionPayload } from '../lib/workspace-session'
+import { createStoreSessionMockApi } from '../store/slices/store-session-test-harness'
+import { createTestStore } from '../store/slices/store-test-helpers'
+import { recordOpenedEditorTabInLayoutOwner } from '../store/slices/editor/tabs/editor-tab-layout-owner'
+import { recordOpenedAgentSessionTabInLayoutOwner } from './agent-session-tab-layout-owner'
+import { recordOpenedSimulatorTabInLayoutOwner } from '@/lib/simulator-tab-layout-owner'
+import { withLayoutOwnerTabProps } from '@/components/tab-bar/tab-bar-layout-owner-props'
+import { endLayoutFramePositions } from './layout-frame-position'
+import { openWorkspaceLayoutFrameSync } from './workspace-layout-frame-sync'
+
+vi.mock('../../../shared/layout-owner-switch', () => ({ ORCA_LAYOUT_OWNER_IS_MAIN: true }))
+vi.mock('sonner', () => ({ toast: { info: vi.fn(), success: vi.fn(), error: vi.fn() } }))
+vi.mock('@/lib/agent-status', async (importOriginal) => {
+ const actual = await importOriginal()
+ return { ...actual, detectAgentStatusFromTitle: vi.fn().mockReturnValue(null) }
+})
+
+type Call = {
+ command: { type: string; tabId?: string; title?: string }
+ answer: (r: LayoutApplyReply) => void
+ fail: (error: Error) => void
+}
+const effects = vi.hoisted(() => ({
+ graphSync: vi.fn(),
+ mirrorViewMode: vi.fn(),
+ chatToggled: vi.fn()
+}))
+vi.mock('@/runtime/sync-runtime-graph', async (importOriginal) => ({
+ ...(await importOriginal()),
+ scheduleRuntimeGraphSync: effects.graphSync
+}))
+vi.mock('@/store/slices/tabs/tabs-host-mirroring', async (importOriginal) => ({
+ ...(await importOriginal()),
+ mirrorTabViewModeToHost: effects.mirrorViewMode
+}))
+vi.mock('@/lib/native-chat-telemetry', async (importOriginal) => ({
+ ...(await importOriginal()),
+ emitNativeChatToggled: effects.chatToggled
+}))
+
+const rpc = vi.hoisted((): { calls: Call[] } => ({ calls: [] }))
+vi.mock('@/runtime/runtime-rpc-client', () => ({
+ callRuntimeRpc: (_target: unknown, _method: string, params: { command: { type: string } }) =>
+ new Promise((answer, fail) =>
+ rpc.calls.push({ command: params.command, answer, fail })
+ )
+}))
+
+type StreamDouble = {
+ onFrame: ((frame: WorkspaceLayoutChangeFrame) => void) | null
+ onPosition: ((seq: number) => void) | null
+}
+const stream = vi.hoisted((): StreamDouble => ({ onFrame: null, onPosition: null }))
+vi.mock('./runtime-layout-client', () => ({
+ subscribeRuntimeLayout: (
+ _target: unknown,
+ _params: unknown,
+ onFrame: (frame: WorkspaceLayoutChangeFrame) => void,
+ _onStatus: unknown,
+ onPosition: (seq: number) => void
+ ) => {
+ stream.onFrame = onFrame
+ stream.onPosition = onPosition
+ return { close: () => {} }
+ }
+}))
+
+createStoreSessionMockApi()
+
+function publishedOf(session: WorkspaceSessionState): PublishedWorkspaceLayout {
+ const { layout } = loadWorkspaceLayoutWithoutReport('local', session, nameBasedLoadContext())
+ return publishWorkspaceLayout(layout.workspaces[GIT_KEY]!, 'local')
+}
+
+const settle = () => new Promise((resolve) => setTimeout(resolve, 0))
+
+let seq = 0
+/** A frame main sent before it had the window's change: another tab got renamed. */
+function sendStaleFrame(layout: PublishedWorkspaceLayout): void {
+ const stale = structuredClone(layout)
+ stale.tabs.find((tab) => tab.id === 'tab-unbound')!.customTitle = `renamed ${++seq}`
+ stream.onFrame!({ type: 'workspace', key: GIT_KEY, layout: stale, seq })
+ stream.onPosition!(seq)
+}
+
+async function boot() {
+ const store = createTestStore()
+ const session = localDesktopSession()
+ await bootWindowFromPartitions(store, [{ hostId: 'local', session }])
+ const sync = openWorkspaceLayoutFrameSync(store)
+ const before = publishedOf(session)
+ stream.onFrame!({ type: 'snapshot', workspaces: [{ key: GIT_KEY, layout: before }], seq: ++seq })
+ stream.onPosition!(seq)
+ sync.start()
+ await settle()
+ /** Main's answer to the window's command, with the frame holding the window's change. */
+ const answer = async (
+ index: number,
+ reply: LayoutApplyReply = okReply,
+ /** Main's change the window has not drawn: a change main applies first. */
+ mainChange: (layout: PublishedWorkspaceLayout) => void = () => {}
+ ): Promise => {
+ const frame = publishedOf(buildWorkspaceSessionPayload(store.getState()))
+ mainChange(frame)
+ seq += 1
+ stream.onFrame!({ type: 'workspace', key: GIT_KEY, layout: frame, seq })
+ stream.onPosition!(seq)
+ rpc.calls[index]!.answer({ ...reply, frameSeq: seq })
+ await settle()
+ await settle()
+ }
+ return { store, sync, before, answer }
+}
+
+const okReply: LayoutApplyReply = { ok: true, result: {} }
+
+const tabBar = (store: ReturnType) =>
+ store.getState().unifiedTabsByWorktree[GIT_KEY]!.map((tab) => tab.id)
+const groupOrder = (store: ReturnType, groupId: string) =>
+ store.getState().groupsByWorktree[GIT_KEY]!.find((group) => group.id === groupId)?.tabOrder
+
+/** Draws a tab as the window's open does, before its recorder tells main. */
+function drawTab(
+ store: ReturnType,
+ tab: Partial & { id: string }
+): Tab {
+ const drawn: Tab = {
+ entityId: tab.id,
+ groupId: 'group-b',
+ worktreeId: GIT_KEY,
+ contentType: 'simulator',
+ label: tab.id,
+ customLabel: null,
+ color: null,
+ sortOrder: 9,
+ createdAt: 1_700_000_900_000,
+ ...tab
+ }
+ const state = store.getState()
+ store.setState({
+ unifiedTabsByWorktree: {
+ ...state.unifiedTabsByWorktree,
+ [GIT_KEY]: [...state.unifiedTabsByWorktree[GIT_KEY]!, drawn]
+ },
+ groupsByWorktree: {
+ ...state.groupsByWorktree,
+ [GIT_KEY]: state.groupsByWorktree[GIT_KEY]!.map((group) =>
+ group.id === drawn.groupId ? { ...group, tabOrder: [...group.tabOrder, drawn.id] } : group
+ )
+ }
+ })
+ return drawn
+}
+
+beforeEach(() => {
+ rpc.calls = []
+ vi.clearAllMocks()
+})
+afterEach(() => endLayoutFramePositions())
+
+describe('a tab the window drew, closed or moved, with a frame from before main had it', () => {
+ it('keeps a just-created terminal tab, then shows main’s copy', async () => {
+ const { store, sync, before, answer } = await boot()
+ const tab = store.getState().createTab(GIT_KEY)
+ expect(rpc.calls[0]!.command).toMatchObject({ type: 'createTerminalTab', tabId: tab.id })
+
+ sendStaleFrame(before)
+ await settle()
+ expect(tabBar(store)).toContain(tab.id)
+ expect(store.getState().tabsByWorktree[GIT_KEY]!.map((row) => row.id)).toContain(tab.id)
+ expect(store.getState().terminalLayoutsByTabId[tab.id]).toBeDefined()
+
+ await answer(0)
+ expect(tabBar(store)).toContain(tab.id)
+ sync.close()
+ })
+
+ it('keeps a just-closed terminal tab closed', async () => {
+ const { store, sync, before, answer } = await boot()
+ store.getState().closeTab('tab-unbound')
+ const close = rpc.calls.findIndex((call) => call.command.type === 'closeTabs')
+ expect(close).toBeGreaterThanOrEqual(0)
+
+ sendStaleFrame(before)
+ await settle()
+ expect(tabBar(store)).not.toContain('tab-unbound')
+ expect(groupOrder(store, 'group-b')).not.toContain('tab-unbound')
+ expect(store.getState().tabsByWorktree[GIT_KEY]!.map((row) => row.id)).not.toContain(
+ 'tab-unbound'
+ )
+
+ await answer(close)
+ expect(tabBar(store)).not.toContain('tab-unbound')
+ sync.close()
+ })
+
+ it.each([
+ [
+ 'editor',
+ (store: ReturnType) => {
+ const file = {
+ ...store.getState().openFiles[0]!,
+ id: '/Users/dev/orca/src/new.ts',
+ filePath: '/Users/dev/orca/src/new.ts',
+ relativePath: 'src/new.ts'
+ }
+ store.setState({ openFiles: [...store.getState().openFiles, file] })
+ const tab = drawTab(store, {
+ id: 'editor:new',
+ entityId: file.id,
+ contentType: 'editor'
+ })
+ recordOpenedEditorTabInLayoutOwner(store.getState(), tab)
+ return tab
+ }
+ ],
+ [
+ 'chat',
+ (store: ReturnType) => {
+ const tab = drawTab(store, {
+ id: 'agent-session-new',
+ contentType: 'agent-session',
+ agentSessionAgent: 'claude'
+ })
+ recordOpenedAgentSessionTabInLayoutOwner(store.getState(), tab)
+ return tab
+ }
+ ],
+ [
+ 'simulator',
+ (store: ReturnType) => {
+ const tab = drawTab(store, { id: 'simulator-new' })
+ recordOpenedSimulatorTabInLayoutOwner(store.getState(), tab)
+ return tab
+ }
+ ]
+ ])('keeps a just-opened %s tab', async (_kind, open) => {
+ const { store, sync, before } = await boot()
+ const tab = open(store)
+ expect(rpc.calls.length).toBeGreaterThan(0)
+
+ sendStaleFrame(before)
+ await settle()
+ expect(tabBar(store)).toContain(tab.id)
+ expect(groupOrder(store, 'group-b')).toContain(tab.id)
+ if (tab.contentType === 'editor') {
+ expect(store.getState().openFiles.map((file) => file.id)).toContain(tab.entityId)
+ }
+ sync.close()
+ })
+
+ it('keeps a just-opened browser tab and its page', async () => {
+ const { store, sync, before } = await boot()
+ const created = store.getState().createBrowserTab(GIT_KEY, 'https://example.com/', {
+ title: 'Example'
+ })
+ const entry = store
+ .getState()
+ .unifiedTabsByWorktree[GIT_KEY]!.find((tab) => tab.entityId === created.id)!
+ expect(rpc.calls.some((call) => call.command.type === 'openBrowserTab')).toBe(true)
+
+ sendStaleFrame(before)
+ await settle()
+ expect(tabBar(store)).toContain(entry.id)
+ expect(store.getState().browserTabsByWorktree[GIT_KEY]!.map((tab) => tab.id)).toContain(
+ created.id
+ )
+ expect(store.getState().browserPagesByWorkspace[created.id]?.length).toBeGreaterThan(0)
+ sync.close()
+ })
+
+ it('keeps a reorder the window made, and main’s order for the rest', async () => {
+ const { store, sync, before, answer } = await boot()
+ const order = groupOrder(store, 'group-a')!
+ const reordered = order.toReversed()
+ store.getState().reorderUnifiedTabs('group-a', reordered)
+ const moves = rpc.calls.filter((call) => call.command.type === 'moveTab')
+ expect(moves.length).toBeGreaterThan(0)
+
+ sendStaleFrame(before)
+ await settle()
+ expect(groupOrder(store, 'group-a')).toEqual(reordered)
+
+ for (let index = 0; index < rpc.calls.length; index += 1) {
+ await answer(index)
+ }
+ expect(groupOrder(store, 'group-a')).toEqual(reordered)
+ sync.close()
+ })
+
+ it.each([
+ ['refuses it', (call: Call) => call.answer({ ok: false, code: 'wsl_move_in_progress' })],
+ ['throws', (call: Call) => call.fail(new Error('layout_store_unavailable'))]
+ ])('removes a just-created terminal tab, stopping it, when main %s', async (_case, refuse) => {
+ vi.spyOn(console, 'warn').mockImplementation(() => {})
+ const { store, sync, before } = await boot()
+ const tab = store.getState().createTab(GIT_KEY)
+ const closeTab = vi.spyOn(store.getState(), 'closeTab')
+ sendStaleFrame(before)
+ await settle()
+ expect(tabBar(store)).toContain(tab.id)
+
+ refuse(rpc.calls[0]!)
+ await settle()
+ await settle()
+ expect(closeTab).toHaveBeenCalledWith(tab.id, { reason: 'cleanup' })
+ expect(tabBar(store)).not.toContain(tab.id)
+ expect(store.getState().tabsByWorktree[GIT_KEY]!.map((row) => row.id)).not.toContain(tab.id)
+ expect(store.getState().terminalLayoutsByTabId[tab.id]).toBeUndefined()
+ sync.close()
+ })
+})
+
+describe('a change main applies first, with frames flowing', () => {
+ const callsOf = (type: string) => rpc.calls.filter((call) => call.command.type === type)
+
+ it('pins a preview tab and promotes it once; a frame from before does not undo it', async () => {
+ const { store, sync, before, answer } = await boot()
+ const file = {
+ ...store.getState().openFiles[0]!,
+ id: '/Users/dev/orca/src/peek.ts',
+ filePath: '/Users/dev/orca/src/peek.ts',
+ relativePath: 'src/peek.ts',
+ isPreview: true
+ }
+ store.setState({ openFiles: [...store.getState().openFiles, file] })
+ const tab = drawTab(store, {
+ id: 'editor:peek',
+ entityId: file.id,
+ contentType: 'editor',
+ isPreview: true
+ })
+ recordOpenedEditorTabInLayoutOwner(store.getState(), tab)
+ await answer(0)
+ const entry = () =>
+ store.getState().unifiedTabsByWorktree[GIT_KEY]!.find((item) => item.id === tab.id)!
+
+ withLayoutOwnerTabProps(
+ { togglePinned: (item) => store.getState().pinFile(file.id, item.unifiedTabId) },
+ () => GIT_KEY
+ ).togglePinned({ unifiedTabId: tab.id, isPinned: false })
+ const pin = rpc.calls.length - 1
+ expect(rpc.calls[pin]!.command).toMatchObject({ type: 'setTabProps', isPinned: true })
+ await answer(pin, okReply, (layout) => {
+ layout.tabs.find((item) => item.id === tab.id)!.isPinned = true
+ })
+ expect(callsOf('promotePreviewTab')).toHaveLength(1)
+ expect(entry()).toMatchObject({ isPinned: true })
+ expect(entry().isPreview).toBeFalsy()
+
+ sendStaleFrame(before)
+ await settle()
+ expect(entry().isPreview).toBeFalsy()
+ await answer(rpc.calls.indexOf(callsOf('promotePreviewTab')[0]!))
+ expect(entry()).toMatchObject({ isPinned: true })
+ expect(entry().isPreview).toBeFalsy()
+ expect(callsOf('promotePreviewTab')).toHaveLength(1)
+ sync.close()
+ })
+
+ it('runs a view toggle’s bookkeeping once, after main’s frame shows the toggle', async () => {
+ const { store, sync, answer } = await boot()
+ store.getState().toggleTabViewMode('tab-agent')
+ const toggle = rpc.calls.length - 1
+ expect(rpc.calls[toggle]!.command).toMatchObject({ type: 'setTabProps', viewMode: 'terminal' })
+
+ await answer(toggle, okReply, (layout) => {
+ layout.tabs.find((item) => item.id === 'tab-agent')!.viewMode = 'terminal'
+ })
+ const agent = () =>
+ store.getState().unifiedTabsByWorktree[GIT_KEY]!.find((item) => item.id === 'tab-agent')!
+ expect(agent().viewMode).toBe('terminal')
+ expect(effects.mirrorViewMode).toHaveBeenCalledTimes(1)
+ expect(effects.chatToggled).toHaveBeenCalledTimes(1)
+ expect(effects.chatToggled).toHaveBeenCalledWith(
+ expect.objectContaining({ from: 'chat', to: 'terminal' })
+ )
+
+ // The answered send is settled: the next toggle flips from what is shown, back to chat.
+ store.getState().toggleTabViewMode('tab-agent')
+ expect(rpc.calls.at(-1)!.command).toMatchObject({ type: 'setTabProps', viewMode: 'chat' })
+ sync.close()
+ })
+
+ it('settles a generated title once main’s frame shows it, so the next one is sent', async () => {
+ const { store, sync, answer } = await boot()
+ store.setState({ settings: { ...store.getState().settings!, tabAutoGenerateTitle: true } })
+ const leafId = store.getState().terminalLayoutsByTabId['tab-unbound']!.activeLeafId!
+ const paneKey = makePaneKey('tab-unbound', leafId)
+ store.getState().setGeneratedTabTitleFromAgentPrompt(paneKey, 'Refactor the auth middleware')
+ const renames = () => callsOf('renameTab')
+ expect(renames()).toHaveLength(1)
+ const title = renames()[0]!.command.title!
+ // Unanswered: a later prompt for the same tab waits for the first.
+ store.getState().setGeneratedTabTitleFromAgentPrompt(paneKey, 'Fix the flaky login test')
+ expect(renames()).toHaveLength(1)
+
+ await answer(rpc.calls.indexOf(renames()[0]!), okReply, (layout) => {
+ layout.tabs.find((item) => item.id === 'tab-unbound')!.generatedTitle = title
+ })
+ const row = store.getState().tabsByWorktree[GIT_KEY]!.find((item) => item.id === 'tab-unbound')!
+ expect(row.generatedTitle).toBe(title)
+ store.getState().setGeneratedTabTitleFromAgentPrompt(paneKey, 'Fix the flaky login test', {
+ replaceExistingGeneratedTitle: true
+ })
+ expect(renames()).toHaveLength(2)
+ sync.close()
+ })
+
+ it('runs a rename’s graph sync once and shows main’s title', async () => {
+ const { store, sync, answer } = await boot()
+ store.getState().setTabCustomTitle('tab-unbound', 'Build')
+ const rename = rpc.calls.length - 1
+ expect(effects.graphSync).not.toHaveBeenCalled()
+
+ await answer(rename, okReply, (layout) => {
+ layout.tabs.find((item) => item.id === 'tab-unbound')!.customTitle = 'Build'
+ })
+ const row = store.getState().tabsByWorktree[GIT_KEY]!.find((item) => item.id === 'tab-unbound')!
+ expect(row.customTitle).toBe('Build')
+ expect(effects.graphSync).toHaveBeenCalledTimes(1)
+ sync.close()
+ })
+})
diff --git a/src/renderer/src/runtime/workspace-layout-frame-sync.test.ts b/src/renderer/src/runtime/workspace-layout-frame-sync.test.ts
index d8b1f7f991e5..d48e13f484cc 100644
--- a/src/renderer/src/runtime/workspace-layout-frame-sync.test.ts
+++ b/src/renderer/src/runtime/workspace-layout-frame-sync.test.ts
@@ -1,4 +1,4 @@
-import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
+import { afterEach, describe, expect, it, vi } from 'vitest'
import type * as AgentStatusModule from '@/lib/agent-status'
import type { ExecutionHostId } from '../../../shared/execution-host'
import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types'
@@ -17,7 +17,6 @@ import type { WorkspaceLayoutChangeFrame } from '../../../shared/workspace-layou
import { GIT_KEY } from '../../../shared/workspace-layout/workspace-layout-session.test-fixture'
import { buildOwnedEditorFileId } from '../store/slices/editor/file-ids/editor-file-ids'
import { bootWindowFromPartitions } from '../app-shell/startup-window-view.test-fixture'
-import { reportWindowSessionWriteActivity } from '../lib/window-session-write-activity'
import { createStoreSessionMockApi } from '../store/slices/store-session-test-harness'
import { createTestStore } from '../store/slices/store-test-helpers'
import type { LayoutFrameSlices } from '../store/workspace-layout-frame-slices'
@@ -125,10 +124,6 @@ const FRAME_DIFFERENCE_FIXTURES = new Set([
'session from before the tab bar, with an open file'
])
-beforeEach(() => {
- reportWindowSessionWriteActivity(false)
-})
-
afterEach(() => endLayoutFramePositions())
describe('the window drawn from layout frames', () => {
@@ -225,17 +220,6 @@ describe('the window drawn from layout frames', () => {
await flushMicrotasks()
expect(seen).toEqual(['renamed'])
- // A held frame still releases its reply: the window's own save carries what it changed.
- reportWindowSessionWriteActivity(true)
- const held = structuredClone(renamed)
- held.tabs.find((tab) => tab.id === 'tab-shell')!.customTitle = 'held'
- afterLayoutFrame(3, () => seen.push(shellTitle()))
- stream.onFrame!({ type: 'workspace', key: GIT_KEY, layout: held, seq: 3 })
- stream.onPosition!(3)
- await flushMicrotasks()
- expect(seen).toEqual(['renamed', 'renamed'])
- reportWindowSessionWriteActivity(false)
-
const released = vi.fn()
afterLayoutFrame(9, released)
stream.onStatus!({ state: 'lost' })
@@ -249,27 +233,9 @@ describe('the window drawn from layout frames', () => {
sync.close()
})
- it('holds a structure frame while the window owes main a write, then shows it', async () => {
- const { store, sync, layouts } = await bootWithFrames('local', localDesktopSession())
- sync.start()
- reportWindowSessionWriteActivity(true)
- const renamed = structuredClone(layouts[GIT_KEY]!)
- renamed.tabs.find((tab) => tab.id === 'tab-shell')!.customTitle = 'renamed'
- stream.onFrame!({ type: 'workspace', key: GIT_KEY, layout: renamed })
- await flushMicrotasks()
- const shellTitle = () =>
- store.getState().tabsByWorktree[GIT_KEY]!.find((tab) => tab.id === 'tab-shell')!.customTitle
- expect(shellTitle()).not.toBe('renamed')
- reportWindowSessionWriteActivity(false)
- await flushMicrotasks()
- expect(shellTitle()).toBe('renamed')
- sync.close()
- })
-
- it('shows main’s pane tree at once even while a write is owed, except a tab the window’s own pane command holds', async () => {
+ it('shows main’s pane tree at once, except a tab the window’s own pane command holds', async () => {
const { store, sync, layouts } = await bootWithFrames('local', localDesktopSession())
sync.start()
- reportWindowSessionWriteActivity(true)
const shellRoot = () => store.getState().terminalLayoutsByTabId['tab-shell']!.root
const withRatio = (ratio: number) => {
const next = structuredClone(layouts[GIT_KEY]!)
@@ -293,16 +259,14 @@ describe('the window drawn from layout frames', () => {
release()
await flushMicrotasks()
expect(shellRoot()).toMatchObject({ ratio: 0.7 })
- reportWindowSessionWriteActivity(false)
sync.close()
})
- it('shows main’s pane tree going back to one the window last showed before an owed write', async () => {
+ it('shows main’s pane tree going back to one the window showed before', async () => {
const { store, sync, layouts } = await bootWithFrames('local', localDesktopSession())
sync.start()
const shellRoot = () => store.getState().terminalLayoutsByTabId['tab-shell']!.root
const original = shellRoot()
- reportWindowSessionWriteActivity(true)
const changed = structuredClone(layouts[GIT_KEY]!)
const root = changed.tabs.find((tab) => tab.id === 'tab-shell')!.terminal!.root!
if (root.type === 'split') {
@@ -312,11 +276,10 @@ describe('the window drawn from layout frames', () => {
await flushMicrotasks()
expect(shellRoot()).toMatchObject({ ratio: 0.15 })
- // Same structure as the frame shown before the write: its pane tree still shows.
+ // Same structure as the frame shown before: its pane tree still shows.
stream.onFrame!({ type: 'workspace', key: GIT_KEY, layout: structuredClone(layouts[GIT_KEY]!) })
await flushMicrotasks()
expect(shellRoot()).toEqual(original)
- reportWindowSessionWriteActivity(false)
sync.close()
})
@@ -324,8 +287,7 @@ describe('the window drawn from layout frames', () => {
const { store, sync, layouts } = await bootWithFrames('local', localDesktopSession())
sync.start()
await flushMicrotasks()
- // A frame queued behind an owed write when the stream ends.
- reportWindowSessionWriteActivity(true)
+ // A frame still queued when the stream ends.
stream.onFrame!({ type: 'workspace', key: GIT_KEY, layout: structuredClone(layouts[GIT_KEY]!) })
stream.onStatus!({ state: 'lost' })
const drawn = { type: 'leaf' as const, leafId: 'drawn-by-the-window' }
@@ -340,11 +302,6 @@ describe('the window drawn from layout frames', () => {
await flushMicrotasks()
expect(store.getState().terminalLayoutsByTabId['tab-shell']!.root).toEqual(drawn)
- // Nor does a later flush, such as an owed write ending.
- reportWindowSessionWriteActivity(true)
- reportWindowSessionWriteActivity(false)
- await flushMicrotasks()
- expect(store.getState().terminalLayoutsByTabId['tab-shell']!.root).toEqual(drawn)
sync.close()
})
@@ -378,10 +335,9 @@ describe('the window drawn from layout frames', () => {
sync.close()
})
- it('shows a live title change of the focused pane at once, even while a write is owed', async () => {
+ it('shows a live title change of the focused pane without rebuilding structure', async () => {
const { store, sync, layouts } = await bootWithFrames('local', localDesktopSession())
sync.start()
- reportWindowSessionWriteActivity(true)
const titled = structuredClone(layouts[GIT_KEY]!)
const shell = titled.tabs.find((tab) => tab.id === 'tab-shell')!
const focused = store.getState().terminalLayoutsByTabId['tab-shell']!.activeLeafId
diff --git a/src/renderer/src/runtime/workspace-layout-frame-sync.ts b/src/renderer/src/runtime/workspace-layout-frame-sync.ts
index 3625edd88964..8eb575081bc4 100644
--- a/src/renderer/src/runtime/workspace-layout-frame-sync.ts
+++ b/src/renderer/src/runtime/workspace-layout-frame-sync.ts
@@ -3,10 +3,8 @@
// it writes that workspace to a partition this machine owns (a paired server's stay the mirror's)
// and already holds it (startup restore keeps only workspaces the catalog knows).
//
-// Frames wait while this window owes main a session write: until main has the window's own change,
-// a frame would put back what the window just changed. Main sends a write's frames before it
-// acknowledges the write, so the cache is current by the time the window is idle again.
-// A frame that changes only live terminal titles never waits: it touches no structure.
+// A tab the window drew, closed or moved before main answered stays as drawn until the answer is
+// in (layout-owner-drawn-tab-holds); everything else shows as each frame arrives.
import { useAppStore } from '@/store'
import type { AppState } from '@/store/types'
@@ -20,10 +18,6 @@ import {
import { buildWorkspaceSessionPayload } from '@/lib/workspace-session'
import { pairedServerMirrors } from './paired-server-workspace'
import { splitWorkspaceSessionByHost } from '@/lib/workspace-session-host-split'
-import {
- isWindowSessionWriteBusy,
- onWindowSessionWriteIdle
-} from '@/lib/window-session-write-activity'
import { LOCAL_EXECUTION_HOST_ID, type ExecutionHostId } from '../../../shared/execution-host'
import type { TerminalTabTitleUpdate } from '@/store/slices/terminal-tab-title-batch'
import { loadWorkspaceLayoutWithoutReport } from '../../../shared/workspace-layout/workspace-layout-load'
@@ -44,6 +38,11 @@ import {
onTabPaneTreeRedraw,
takeTabRowFields
} from './layout-owner-pane-intents'
+import {
+ isDrawnGroupLayoutHeld,
+ isDrawnTabHeld,
+ onDrawnTabsRedraw
+} from './layout-owner-drawn-tab-holds'
import { subscribeRuntimeLayout } from './runtime-layout-client'
type FrameSyncStore = {
@@ -154,15 +153,15 @@ export function openWorkspaceLayoutFrameSync(store: FrameSyncStore): WorkspaceLa
built,
keys,
isTabPaneTreeHeld,
- takeTabRowFields
+ takeTabRowFields,
+ HELD_DRAWN_TABS
)
if (Object.keys(patch).length > 0) {
store.setState(patch)
}
}
- // Main keeps its own pane trees over the window's saves, so they show at once, even while the
- // window owes main a write; only a tab the window's own pane command holds waits.
+ // Pane trees show at once; only a tab the window's own pane command holds waits.
const showPaneTrees = (state: AppState, drawn: (key: string) => boolean): void => {
let layouts = state.terminalLayoutsByTabId
const waiting = new Set()
@@ -198,7 +197,6 @@ export function openWorkspaceLayoutFrameSync(store: FrameSyncStore): WorkspaceLa
}
const state = store.getState()
const drawn = framesDrawWorkspace(state)
- const busy = isWindowSessionWriteBusy()
const nextShown: Record = {}
const structural: string[] = []
const titleUpdates: TerminalTabTitleUpdate[] = []
@@ -221,10 +219,6 @@ export function openWorkspaceLayoutFrameSync(store: FrameSyncStore): WorkspaceLa
)
)
nextShown[key] = layout
- } else if (busy) {
- if (previous) {
- nextShown[key] = previous
- }
} else {
structural.push(key)
nextShown[key] = layout
@@ -247,7 +241,7 @@ export function openWorkspaceLayoutFrameSync(store: FrameSyncStore): WorkspaceLa
const scheduleFlush = (): void => {
if (live && !flushQueued) {
flushQueued = true
- // Coalesces the frames of one task; also lets a write that is about to start report busy.
+ // Coalesces the frames of one task.
queueMicrotask(flush)
}
}
@@ -281,11 +275,20 @@ export function openWorkspaceLayoutFrameSync(store: FrameSyncStore): WorkspaceLa
endLayoutFramePositions()
}
},
- // After the frame's flush. A busy write may still hold the frame's tabs (never its pane
- // trees), so a waiting reply checks the store rather than assume the frame shows.
+ // After the frame's flush. A held tab may still show as the window drew it, so a waiting reply
+ // checks the store rather than assume the frame shows.
(seq) => queueMicrotask(() => streamOpen && noteLayoutFramePosition(seq))
)
- const stopIdleListener = onWindowSessionWriteIdle(scheduleFlush)
+ // A released tab shows main's copy: its workspaces draw from the cache again.
+ const stopHeldTabsListener = onDrawnTabsRedraw((workspaces) => {
+ if (!streamOpen) {
+ return
+ }
+ for (const key of workspaces) {
+ delete shown[key]
+ }
+ scheduleFlush()
+ })
// Against the store: the window may have drawn over main's tree for this tab since.
const stopReleaseListener = onTabPaneTreeRedraw((tabId) => {
// A closed stream's cache is frozen: the window draws its own answers then.
@@ -311,7 +314,7 @@ export function openWorkspaceLayoutFrameSync(store: FrameSyncStore): WorkspaceLa
},
close: () => {
live = false
- stopIdleListener()
+ stopHeldTabsListener()
stopReleaseListener()
stream.close()
},
@@ -333,6 +336,8 @@ export function openWorkspaceLayoutFrameSync(store: FrameSyncStore): WorkspaceLa
}
}
+const HELD_DRAWN_TABS = { isTabHeld: isDrawnTabHeld, isGroupLayoutHeld: isDrawnGroupLayoutHeld }
+
let startupFrames: WorkspaceLayoutFrameSync | null = null
/** After restore: the window's one layout stream shows the frames' workspaces from now on. */
diff --git a/src/renderer/src/runtime/workspace-layout-frame-tab-props.test.ts b/src/renderer/src/runtime/workspace-layout-frame-tab-props.test.ts
index eabc7a7861dc..f80994e8c188 100644
--- a/src/renderer/src/runtime/workspace-layout-frame-tab-props.test.ts
+++ b/src/renderer/src/runtime/workspace-layout-frame-tab-props.test.ts
@@ -1,7 +1,7 @@
// Tab properties in a layout-owner build: main's pin, color or rename, drawn from its frame, must
// look as the window's own action does today, and must restart the same.
-import { beforeEach, describe, expect, it, vi } from 'vitest'
+import { describe, expect, it, vi } from 'vitest'
import type * as AgentStatusModule from '@/lib/agent-status'
import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types'
import { applyLayoutCommand } from '../../../shared/workspace-layout/workspace-layout-commands'
@@ -19,7 +19,6 @@ import {
bootWindowFromPartitions,
projectStartupWindowView
} from '../app-shell/startup-window-view.test-fixture'
-import { reportWindowSessionWriteActivity } from '../lib/window-session-write-activity'
import { createStoreSessionMockApi } from '../store/slices/store-session-test-harness'
import { createTestStore } from '../store/slices/store-test-helpers'
import type { AppState } from '../store/types'
@@ -220,10 +219,6 @@ const CASES: Case[] = [
}
]
-beforeEach(() => {
- reportWindowSessionWriteActivity(false)
-})
-
describe('tab properties through main', () => {
it.each(CASES.map((entry) => [entry.name, entry] as const))(
'%s: main’s frame shows what the window’s own action shows, and restarts the same',
diff --git a/src/renderer/src/store/slices/editor-layout-owner-records.test.ts b/src/renderer/src/store/slices/editor-layout-owner-records.test.ts
index 232bf8ceabbd..e917539df36e 100644
--- a/src/renderer/src/store/slices/editor-layout-owner-records.test.ts
+++ b/src/renderer/src/store/slices/editor-layout-owner-records.test.ts
@@ -106,6 +106,8 @@ function applySent(): LayoutCommand[] {
}
async function showMainFrame(): Promise {
+ // Main has answered the window's commands, so no tab of theirs is still held as drawn.
+ await new Promise((resolve) => setTimeout(resolve, 0))
const sync = openWorkspaceLayoutFrameSync(useAppStore)
stream.onFrame!({
type: 'snapshot',
diff --git a/src/renderer/src/store/slices/store-terminal-tab-changes-layout-owner.test.ts b/src/renderer/src/store/slices/store-terminal-tab-changes-layout-owner.test.ts
index 54b39347f86d..5cafdcb4996a 100644
--- a/src/renderer/src/store/slices/store-terminal-tab-changes-layout-owner.test.ts
+++ b/src/renderer/src/store/slices/store-terminal-tab-changes-layout-owner.test.ts
@@ -102,8 +102,8 @@ describe('a terminal tab’s own changes in a layout-owner build', () => {
})
it('leaves the window’s color as it is when main refuses', async () => {
- mocks.callRuntimeRpc.mockResolvedValue({ ok: false, code: 'invalid_params' })
const { store, tabId, tabBarId } = storeWithTab()
+ mocks.callRuntimeRpc.mockResolvedValue({ ok: false, code: 'invalid_params' })
store.getState().setTabColor(tabId, '#f00')
diff --git a/src/renderer/src/store/terminals/terminal-tab-close-layout-owner.ts b/src/renderer/src/store/terminals/terminal-tab-close-layout-owner.ts
index 1c76b4625690..e31858112a04 100644
--- a/src/renderer/src/store/terminals/terminal-tab-close-layout-owner.ts
+++ b/src/renderer/src/store/terminals/terminal-tab-close-layout-owner.ts
@@ -5,8 +5,8 @@ import { commitTerminalSurfaceClose } from './terminal-surface-close-intent'
/**
* A layout-owner build's record of a terminal tab this window closed: main records it through
- * `layout.apply`, or today's close intent does when main cannot. False when a paired server owns
- * the workspace's layout; the caller records it as today.
+ * `layout.apply`, or today's close intent does for a twin a paired server may hold. False when a
+ * paired server owns the workspace's layout; the caller records it as today.
*/
export function recordTerminalTabCloseThroughLayoutOwner(
state: WorktreeRuntimeOwnerState & Pick,
@@ -26,7 +26,8 @@ export function recordTerminalTabCloseThroughLayoutOwner(
{ type: 'closeTabs', tabIds: [entryId], recordClose: reason },
{
apply: keep,
- asToday: () => commitTerminalSurfaceClose(worktreeId, { kind: 'tab', tabId }, reason)
+ asToday: () => commitTerminalSurfaceClose(worktreeId, { kind: 'tab', tabId }, reason),
+ drawn: true
}
)
}
diff --git a/src/renderer/src/store/terminals/terminal-tab-create-through-layout-owner.test.ts b/src/renderer/src/store/terminals/terminal-tab-create-through-layout-owner.test.ts
index 8397ad09c692..d9959c2846a7 100644
--- a/src/renderer/src/store/terminals/terminal-tab-create-through-layout-owner.test.ts
+++ b/src/renderer/src/store/terminals/terminal-tab-create-through-layout-owner.test.ts
@@ -12,20 +12,26 @@ import {
takeTabRowFields
} from '@/runtime/layout-owner-pane-intents'
import { createTestStore, makeTab } from '../slices/store-test-helpers'
-import { createInitialTerminalThroughLayoutOwner } from './terminal-tab-create-through-layout-owner'
+import {
+ createInitialTerminalThroughLayoutOwner,
+ recordCreatedTerminalTabInLayoutOwner
+} from './terminal-tab-create-through-layout-owner'
const mocks = vi.hoisted(() => {
const held: {
pairedServer: string | null
+ twin: boolean
reply: ((value: LayoutApplyReply) => void) | null
fail: ((error: Error) => void) | null
- } = { pairedServer: null, reply: null, fail: null }
+ } = { pairedServer: null, twin: false, reply: null, fail: null }
return Object.assign(held, { callRuntimeRpc: vi.fn() })
})
vi.mock('@/runtime/runtime-rpc-client', () => ({ callRuntimeRpc: mocks.callRuntimeRpc }))
vi.mock('@/lib/resolve-owner', () => ({
- runtimeEnvironmentIdUnlessTwin: () => mocks.pairedServer
+ runtimeEnvironmentIdUnlessTwin: () => mocks.pairedServer,
+ runtimeEnvironmentIdForWorkspaceOwner: () =>
+ mocks.twin ? { kind: 'ambiguous' } : { kind: 'resolved', environmentId: null }
}))
const WORKTREE = 'repo1::/path/wt'
@@ -52,6 +58,7 @@ beforeEach(() => {
_resetLayoutOwnerPaneIntentsForTests()
endLayoutFramePositions()
mocks.pairedServer = null
+ mocks.twin = false
mocks.callRuntimeRpc.mockReset()
mocks.callRuntimeRpc.mockImplementation(
() =>
@@ -81,17 +88,17 @@ describe('createInitialTerminalThroughLayoutOwner', () => {
expect(takeTabRowFields(command.tabId)).toEqual({ pendingActivationSpawn: true })
})
- it('draws main’s tab itself, under main’s ids, when no frame is coming', async () => {
+ it('draws nothing itself when no frame is coming: the reopened stream’s snapshot brings it', async () => {
const { create, command } = start()
mocks.reply?.({ ok: true, result: { tabId: command.tabId, leafId: command.leafId } })
await settle()
- expect(create).toHaveBeenCalledWith({ tabId: command.tabId, leafId: command.leafId })
- expect(takeTabRowFields(command.tabId)).toBeNull()
+ expect(create).not.toHaveBeenCalled()
+ expect(takeTabRowFields(command.tabId)).toEqual({ pendingActivationSpawn: true })
})
- it('waits for a stream not yet in, and draws main’s tab itself if it ends first', async () => {
+ it('draws nothing itself when the stream ends before main’s frame', async () => {
_resetLayoutFramePositionForTests()
beginLayoutFramePositions()
const { create, command } = start()
@@ -102,10 +109,10 @@ describe('createInitialTerminalThroughLayoutOwner', () => {
frameSeq: 1
})
await settle()
- expect(create).not.toHaveBeenCalled()
-
endLayoutFramePositions()
- expect(create).toHaveBeenCalledWith({ tabId: command.tabId, leafId: command.leafId })
+
+ expect(create).not.toHaveBeenCalled()
+ expect(takeTabRowFields(command.tabId)).toEqual({ pendingActivationSpawn: true })
})
it('draws nothing itself when a frame showed the tab before the stream ended', async () => {
@@ -174,3 +181,29 @@ describe('createInitialTerminalThroughLayoutOwner', () => {
expect(mocks.callRuntimeRpc).not.toHaveBeenCalled()
})
})
+
+describe('recordCreatedTerminalTabInLayoutOwner', () => {
+ const command = {
+ type: 'createTerminalTab' as const,
+ workspace: WORKTREE,
+ tabId: 'tab-drawn',
+ leafId: 'leaf-drawn'
+ }
+
+ it.each([
+ [false, 1],
+ [true, 0]
+ ])(
+ 'on host_not_owned (twin: %s), closes the drawn tab unless a paired server may hold it',
+ async (twin, closes) => {
+ vi.spyOn(console, 'warn').mockImplementation(() => {})
+ mocks.twin = twin
+ const state = stateWith(['tab-drawn'])
+ const closeTab = vi.fn()
+ recordCreatedTerminalTabInLayoutOwner({ ...state, closeTab }, command)
+ mocks.reply?.({ ok: false, code: 'host_not_owned' })
+ await settle()
+ expect(closeTab).toHaveBeenCalledTimes(closes)
+ }
+ )
+})
diff --git a/src/renderer/src/store/terminals/terminal-tab-create-through-layout-owner.ts b/src/renderer/src/store/terminals/terminal-tab-create-through-layout-owner.ts
index a2ec52f584b5..9c5b3b713838 100644
--- a/src/renderer/src/store/terminals/terminal-tab-create-through-layout-owner.ts
+++ b/src/renderer/src/store/terminals/terminal-tab-create-through-layout-owner.ts
@@ -6,9 +6,10 @@
// window's save of it changes nothing in main.
import { createBrowserUuid } from '@/lib/browser-uuid'
-import { afterLayoutFrame, layoutFramesFlowing } from '@/runtime/layout-frame-position'
+import { afterLayoutFrame } from '@/runtime/layout-frame-position'
import { expectTabRowFields } from '@/runtime/layout-owner-pane-intents'
import { runtimeEnvironmentIdUnlessTwin } from '@/lib/resolve-owner'
+import { sendLayoutApply } from '@/runtime/layout-apply-send'
import { newGroupSplitOf } from '@/runtime/layout-owner-new-group-split'
import { callRuntimeRpc } from '@/runtime/runtime-rpc-client'
import { layoutFrameTerminalTab } from '@/runtime/layout-frame-terminal-panes'
@@ -86,49 +87,41 @@ export function terminalTabCreateCommand(
}
/**
- * Sends a tab the window just drew to main. Nothing to undo on any answer: main's frame is what
- * stays drawn, since the window's session save no longer carries the tab. A refusal is logged.
+ * Sends a tab the window just drew to main; frames keep it as drawn until main answers. A refusal
+ * is logged and the window closes the tab, stopping its terminal, since main's frame will not
+ * have it. A twin that main may route to a paired server keeps it: the window's save carries the
+ * server's partition as it is.
*/
export function recordCreatedTerminalTabInLayoutOwner(
state: AppState,
command: CommandOf<'createTerminalTab'> & { tabId: string; leafId: string }
): void {
- // Why: a paired server mirrors this workspace's tabs; main does not own its layout. A tab main
- // already holds is its own.
- if (
- // Why: as `sendLayoutApply`, a twin stays on main's path: it edits this window's layout.
- runtimeEnvironmentIdUnlessTwin(state, command.workspace) !== null ||
- layoutFrameTerminalTab(command.workspace, command.tabId)
- ) {
+ // Why: a tab main already holds is its own.
+ if (layoutFrameTerminalTab(command.workspace, command.tabId)) {
return
}
- void callRuntimeRpc({ kind: 'local' }, 'layout.apply', { command }).then(
- (reply) => {
- if (!reply.ok) {
- console.warn('[layout-owner] createTerminalTab refused:', reply.code)
- }
- },
- (error: unknown) => {
- console.warn(
- '[layout-owner] createTerminalTab refused: call_failed',
- error instanceof Error ? error.message : error
- )
- }
- )
+ const { workspace, ...rest } = command
+ const keep = (): void => {}
+ sendLayoutApply(state, workspace, rest, {
+ apply: keep,
+ asToday: keep,
+ refused: () => state.closeTab(command.tabId, { reason: 'cleanup' }),
+ drawn: true
+ })
}
/**
* A workspace's first terminal on activation (F23). Main creates it only into a workspace its copy
* holds no tab of, so this window and the runtime asking at once still make one tab. Main's frame
- * draws it, with the window's own row fields; the window draws main's tab itself, under main's
- * ids, only when no frame is coming (the stream is down). False when a paired server owns the
- * workspace's layout. `create` with no ids opens the terminal as today: main holds no partition
- * for the workspace.
+ * draws it, with the window's own row fields; while the stream is down, the reopened stream's
+ * snapshot does. False when a paired server owns the workspace's layout. `create` opens the
+ * terminal as today: main does not own the workspace (a twin it routes to a paired
+ * server, whose partition the window's save carries), or the call threw and was rolled back.
*/
export function createInitialTerminalThroughLayoutOwner(
getState: () => AppState,
worktreeId: string,
- create: (ids?: { tabId: string; leafId: string }) => void
+ create: () => void
): boolean {
if (runtimeEnvironmentIdUnlessTwin(getState(), worktreeId) !== null) {
return false
@@ -157,14 +150,8 @@ export function createInitialTerminalThroughLayoutOwner(
(reply) =>
// After the frame with main's tab: the stream may end first, and the window draws it then.
afterLayoutFrame(reply.frameSeq, () => {
+ // Main's frame draws it, a reopened stream's snapshot too.
if (reply.ok && reply.result.tabId === tabId) {
- // Why the store check: a frame may have drawn it before the stream ended.
- if (!layoutFramesFlowing()) {
- release()
- if (!holdsTerminalTab(getState(), tabId)) {
- create({ tabId, leafId })
- }
- }
return
}
// No tab id: main's copy already shows a tab here, which its frames bring.
@@ -196,7 +183,3 @@ export function createInitialTerminalThroughLayoutOwner(
/** The window's own mark on a first terminal: its spawn does not count as workspace activity. */
const ACTIVATION_ROW_FIELDS = { pendingActivationSpawn: true } as const
-
-function holdsTerminalTab(state: AppState, tabId: string): boolean {
- return Object.values(state.tabsByWorktree).some((tabs) => tabs.some((tab) => tab.id === tabId))
-}
diff --git a/src/renderer/src/store/workspace-layout-frame-held-tabs.ts b/src/renderer/src/store/workspace-layout-frame-held-tabs.ts
new file mode 100644
index 000000000000..9778043e0320
--- /dev/null
+++ b/src/renderer/src/store/workspace-layout-frame-held-tabs.ts
@@ -0,0 +1,201 @@
+// Builds frame slices only and never calls set: the store patch applies what it returns.
+// Slices rebuilt from a frame, with each tab the window's own command still holds put back as the
+// store shows it (present, gone, or where the window placed it), and the rest as main has it. A
+// group's order keeps main's for the tabs nothing holds.
+
+import type { Tab, TabGroup } from '../../../shared/tab-types'
+import { isEditorTabContentType } from './slices/editor/tabs/editor-tab-content-type'
+import type { LayoutFrameSlices } from './workspace-layout-frame-slices'
+import type { LayoutFrameStoreState } from './workspace-layout-frame-store-patch'
+
+export type HeldDrawnTabs = {
+ /** By tab-bar or entity id. */
+ isTabHeld: (workspace: string, id: string) => boolean
+ isGroupLayoutHeld: (workspace: string) => boolean
+}
+
+export const NO_HELD_TABS: HeldDrawnTabs = {
+ isTabHeld: () => false,
+ isGroupLayoutHeld: () => false
+}
+
+/** `built`'s records with the held ones as `existing` has them: kept, dropped or added. */
+function asDrawn(
+ existing: readonly T[] | undefined,
+ built: T[] | undefined,
+ heldIds: ReadonlySet,
+ idOf: (record: T) => string
+): T[] | undefined {
+ const drawn = new Map(
+ (existing ?? []).filter((record) => heldIds.has(idOf(record))).map((r) => [idOf(r), r])
+ )
+ if (drawn.size === 0 && !(built ?? []).some((record) => heldIds.has(idOf(record)))) {
+ return built
+ }
+ const builtIds = new Set((built ?? []).map(idOf))
+ const records = [
+ ...(built ?? []).flatMap((record) => {
+ const id = idOf(record)
+ return heldIds.has(id) ? (drawn.has(id) ? [drawn.get(id)!] : []) : [record]
+ }),
+ ...[...drawn.values()].filter((record) => !builtIds.has(idOf(record)))
+ ]
+ return records.length > 0 || built ? records : undefined
+}
+
+/** Main's order without the held tabs, each held tab put back after its neighbour in the store. */
+function heldOrder(
+ built: TabGroup | undefined,
+ existing: TabGroup | undefined,
+ heldIds: ReadonlySet
+): string[] {
+ const order = (built?.tabOrder ?? []).filter((id) => !heldIds.has(id))
+ const drawnOrder = existing?.tabOrder ?? []
+ drawnOrder.forEach((id, index) => {
+ if (!heldIds.has(id)) {
+ return
+ }
+ const before = drawnOrder
+ .slice(0, index)
+ .toReversed()
+ .find((previous) => order.includes(previous))
+ order.splice(before === undefined ? 0 : order.indexOf(before) + 1, 0, id)
+ })
+ return order
+}
+
+function heldGroups(
+ existing: readonly TabGroup[],
+ built: readonly TabGroup[],
+ heldIds: ReadonlySet
+): TabGroup[] {
+ const touches = (group: TabGroup | undefined): boolean =>
+ group?.tabOrder.some((id) => heldIds.has(id)) ?? false
+ const existingById = new Map(existing.map((group) => [group.id, group]))
+ const builtIds = new Set(built.map((group) => group.id))
+ const reconcile = (main: TabGroup | undefined, drawn: TabGroup | undefined): TabGroup[] => {
+ if (!touches(main) && !touches(drawn)) {
+ return main ? [main] : []
+ }
+ const tabOrder = heldOrder(main, drawn, heldIds)
+ // A group only main still has, left with no tab: the window closed or moved its last one.
+ if (!drawn && tabOrder.length === 0) {
+ return []
+ }
+ const base = (drawn ?? main)!
+ const activeTabId =
+ [drawn?.activeTabId, main?.activeTabId].find((id) => id && tabOrder.includes(id)) ??
+ tabOrder[0] ??
+ null
+ return [{ ...base, tabOrder, activeTabId }]
+ }
+ return [
+ ...built.flatMap((group) => reconcile(group, existingById.get(group.id))),
+ ...existing
+ .filter((group) => !builtIds.has(group.id) && touches(group))
+ .flatMap((group) => reconcile(undefined, group))
+ ]
+}
+
+function entityIds(tabs: readonly Tab[], kind: (tab: Tab) => boolean): Set {
+ return new Set(tabs.filter(kind).map((tab) => tab.entityId))
+}
+
+/** `built` for `keys`, with every tab `held` names as `state` draws it. */
+export function withHeldTabsAsDrawn(
+ state: LayoutFrameStoreState,
+ built: LayoutFrameSlices,
+ keys: readonly string[],
+ held: HeldDrawnTabs
+): LayoutFrameSlices {
+ let next = built
+ for (const key of keys) {
+ const isHeld = (tab: Tab): boolean =>
+ held.isTabHeld(key, tab.id) || held.isTabHeld(key, tab.entityId)
+ const heldTabs = [
+ ...(state.unifiedTabsByWorktree[key] ?? []),
+ ...(built.unifiedTabsByWorktree[key] ?? [])
+ ].filter(isHeld)
+ const layoutHeld = held.isGroupLayoutHeld(key)
+ if (heldTabs.length === 0 && !layoutHeld) {
+ continue
+ }
+ const heldIds = new Set(heldTabs.map((tab) => tab.id))
+ const groups = heldGroups(
+ state.groupsByWorktree[key] ?? [],
+ next.groupsByWorktree[key] ?? [],
+ heldIds
+ )
+ const groupIds = (list: readonly TabGroup[]): string =>
+ list
+ .map((group) => group.id)
+ .sort()
+ .join('\0')
+ const layout =
+ layoutHeld || groupIds(groups) !== groupIds(next.groupsByWorktree[key] ?? [])
+ ? state.layoutByWorktree[key]
+ : next.layoutByWorktree[key]
+ const terminals = entityIds(heldTabs, (tab) => tab.contentType === 'terminal')
+ const browsers = entityIds(heldTabs, (tab) => tab.contentType === 'browser')
+ const files = entityIds(heldTabs, (tab) => isEditorTabContentType(tab.contentType))
+
+ const terminalLayouts = { ...next.terminalLayoutsByTabId }
+ for (const id of terminals) {
+ if (id in state.terminalLayoutsByTabId) {
+ terminalLayouts[id] = state.terminalLayoutsByTabId[id]!
+ } else {
+ delete terminalLayouts[id]
+ }
+ }
+ // A browser tab or file the window closed brings back none of its pages or record.
+ const drawnBrowsers = new Set((state.browserTabsByWorktree[key] ?? []).map((tab) => tab.id))
+ const closedBrowsers = [...browsers].filter((id) => !drawnBrowsers.has(id))
+ const closedPages = new Set(
+ closedBrowsers.flatMap((id) => (next.browserPagesByWorkspace[id] ?? []).map((p) => p.id))
+ )
+ const drawnFiles = new Set(
+ state.openFiles.filter((file) => file.worktreeId === key).map((file) => file.id)
+ )
+ next = {
+ ...next,
+ unifiedTabsByWorktree: withKey(
+ next.unifiedTabsByWorktree,
+ key,
+ asDrawn(state.unifiedTabsByWorktree[key], next.unifiedTabsByWorktree[key], heldIds, idOf)
+ ),
+ groupsByWorktree: withKey(next.groupsByWorktree, key, groups),
+ layoutByWorktree: withKey(next.layoutByWorktree, key, layout),
+ tabsByWorktree: withKey(
+ next.tabsByWorktree,
+ key,
+ asDrawn(state.tabsByWorktree[key], next.tabsByWorktree[key], terminals, idOf)
+ ),
+ terminalLayoutsByTabId: terminalLayouts,
+ browserTabsByWorktree: withKey(
+ next.browserTabsByWorktree,
+ key,
+ asDrawn(state.browserTabsByWorktree[key], next.browserTabsByWorktree[key], browsers, idOf)
+ ),
+ browserPagesByWorkspace: Object.fromEntries(
+ Object.entries(next.browserPagesByWorkspace).filter(([id]) => !closedBrowsers.includes(id))
+ ),
+ remoteBrowserPageHandlesByPageId: Object.fromEntries(
+ Object.entries(next.remoteBrowserPageHandlesByPageId).filter(([id]) => !closedPages.has(id))
+ ),
+ openFiles: next.openFiles.filter(
+ (file) => file.worktreeId !== key || !files.has(file.id) || drawnFiles.has(file.id)
+ )
+ }
+ }
+ return next
+}
+
+const idOf = (record: { id: string }): string => record.id
+
+function withKey(map: Record, key: string, value: T | undefined): Record {
+ if (value === undefined) {
+ const { [key]: _removed, ...rest } = map
+ return rest
+ }
+ return { ...map, [key]: value }
+}
diff --git a/src/renderer/src/store/workspace-layout-frame-store-patch.ts b/src/renderer/src/store/workspace-layout-frame-store-patch.ts
index 33c4da505c94..6a150f114360 100644
--- a/src/renderer/src/store/workspace-layout-frame-store-patch.ts
+++ b/src/renderer/src/store/workspace-layout-frame-store-patch.ts
@@ -9,6 +9,11 @@ import type { TerminalTab } from '../../../shared/terminal-tab-types'
import { isEditorTabContentType } from './slices/editor/tabs/editor-tab-content-type'
import type { AppState } from './types'
import type { LayoutFrameSlices } from './workspace-layout-frame-slices'
+import {
+ NO_HELD_TABS,
+ withHeldTabsAsDrawn,
+ type HeldDrawnTabs
+} from './workspace-layout-frame-held-tabs'
/** Row fields this window owns: what its mounted panes are doing, and which terminal each row
* binds (main publishes the saved binding; the live one stays the window's until main owns it). */
@@ -126,13 +131,16 @@ function setKey(
*/
export function buildLayoutFrameStorePatch(
state: LayoutFrameStoreState,
- built: LayoutFrameSlices,
+ frameSlices: LayoutFrameSlices,
keys: readonly string[],
/** A tab whose pane layout stays as the store has it: the window's own pane command holds it. */
keepsTerminalLayout: (tabId: string) => boolean = () => false,
/** This window's own fields for a row the frame creates. */
- newRowFields: (tabId: string) => Partial | null = () => null
+ newRowFields: (tabId: string) => Partial | null = () => null,
+ /** Tabs the window drew, closed or moved before main answered: they stay as the store has them. */
+ held: HeldDrawnTabs = NO_HELD_TABS
): Partial {
+ const built = withHeldTabsAsDrawn(state, frameSlices, keys, held)
const patch: Partial = {}
const keyed = (slice: KeyedSlice, value: (key: string) => unknown): void => {
let next: Record = state[slice]
From a8d7151b49da4ae72bf1e1c6e762ac9282d584ce Mon Sep 17 00:00:00 2001
From: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
Date: Sun, 18 Oct 2026 11:14:08 -0700
Subject: [PATCH 13/15] Require a full hover delay before each tab preview
(#30388)
* Require a full hover delay before each tab preview
Tab previews opened almost immediately after a previous preview had been shown, so sweeping across the tab strip caused a flurry of popups. Raise the tab tooltip delay to 800 ms and drop the warm-start chain: the shared open-state context, the 300 ms skip delay, and the slide animation that carried position between cards. Every tab now waits its full dwell time, and keyboard focus still shows the preview immediately.
* Test that tab hover cards wait a full dwell on every hover
The tab hover card no longer slides instantly between neighboring tabs. Each hover now waits for the full delay before showing a preview. The e2e test still expected instant sliding, so it was rewritten to match.
- Remove the frame-recording helpers and the slide and reversal assertions.
- Check that no card appears before the dwell, and that the card appears after it.
- Check that leaving a tab cancels a pending preview, and that time spent on other tabs does not count toward the dwell.
- Check that re-entering the same tab requires a fresh dwell.
---
.../src/components/tab-bar/TabHoverCard.tsx | 82 +-------
.../tab-bar/TabStripTooltipProvider.test.tsx | 191 ++++++------------
.../tab-bar/TabStripTooltipProvider.tsx | 76 +------
tests/e2e/tab-hover-card.spec.ts | 124 +++---------
4 files changed, 97 insertions(+), 376 deletions(-)
diff --git a/src/renderer/src/components/tab-bar/TabHoverCard.tsx b/src/renderer/src/components/tab-bar/TabHoverCard.tsx
index b8949d696c21..b116eb5b5cd2 100644
--- a/src/renderer/src/components/tab-bar/TabHoverCard.tsx
+++ b/src/renderer/src/components/tab-bar/TabHoverCard.tsx
@@ -1,10 +1,5 @@
-import { useCallback, useContext, useId, useRef, type ReactNode } from 'react'
+import type { ReactNode } from 'react'
import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'
-import {
- TabCardOpenContext,
- TabCardPlacementContext,
- TAB_TOOLTIP_SKIP_DELAY_MS
-} from './TabStripTooltipProvider'
export function TabHoverCard({
children,
@@ -19,79 +14,8 @@ export function TabHoverCard({
programName: string
description?: string
}): React.JSX.Element {
- const placement = useContext(TabCardPlacementContext)
- const content = useRef(null)
- const cardId = useId()
- const openContext = useContext(TabCardOpenContext)
- const notifyOpenChange = openContext?.onOpenChange
-
- const captureClosedPlacement = useCallback(
- (element: HTMLDivElement | null) => {
- const previous = placement?.current
- if (!element || previous?.element !== element) {
- return
- }
- const { left, top } = element.getBoundingClientRect()
- previous.left = left
- previous.top = top
- previous.closedAt = performance.now()
- },
- [placement]
- )
-
- const setContentElement = useCallback(
- (element: HTMLDivElement | null) => {
- const previous = content.current
- if (element) {
- // StrictMode reattaches refs without closing the tooltip.
- notifyOpenChange?.(cardId, true)
- } else if (previous) {
- notifyOpenChange?.(cardId, false)
- captureClosedPlacement(previous)
- }
- content.current = element
- },
- [captureClosedPlacement, cardId, notifyOpenChange]
- )
-
- const handlePlaced = (): void => {
- const element = content.current
- if (!element || !placement) {
- return
- }
- const rect = element.getBoundingClientRect()
- const previous = placement.current
- if (
- previous &&
- previous.closedAt !== null &&
- performance.now() - previous.closedAt < TAB_TOOLTIP_SKIP_DELAY_MS &&
- !window.matchMedia('(prefers-reduced-motion: reduce)').matches
- ) {
- // Continue from the painted position when reversing direction during a slide.
- const origin = previous.element.isConnected
- ? previous.element.getBoundingClientRect()
- : previous
- element.animate(
- [
- { translate: `${origin.left - rect.left}px ${origin.top - rect.top}px`, opacity: 1 },
- { translate: '0 0', opacity: 1 }
- ],
- { duration: 150, easing: 'ease-out' }
- )
- }
- placement.current = { element, left: rect.left, top: rect.top, closedAt: null }
- }
-
return (
- {
- openContext?.onOpenChange(cardId, open)
- if (!open && content.current?.isConnected) {
- captureClosedPlacement(content.current)
- }
- }}
- >
+
{
@@ -104,13 +28,11 @@ export function TabHoverCard({
{children}
diff --git a/src/renderer/src/components/tab-bar/TabStripTooltipProvider.test.tsx b/src/renderer/src/components/tab-bar/TabStripTooltipProvider.test.tsx
index a14fc884d5fd..798d144f5415 100644
--- a/src/renderer/src/components/tab-bar/TabStripTooltipProvider.test.tsx
+++ b/src/renderer/src/components/tab-bar/TabStripTooltipProvider.test.tsx
@@ -1,155 +1,92 @@
// @vitest-environment happy-dom
import { act, cleanup, fireEvent, render, screen } from '@testing-library/react'
-import { StrictMode, useContext } from 'react'
+import { StrictMode } from 'react'
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
-import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'
import { TabHoverCard } from './TabHoverCard'
-import {
- TAB_TOOLTIP_DELAY_MS,
- TAB_TOOLTIP_SKIP_DELAY_MS,
- TabCardOpenContext,
- TabStripTooltipProvider
-} from './TabStripTooltipProvider'
+import { TAB_TOOLTIP_DELAY_MS, TabStripTooltipProvider } from './TabStripTooltipProvider'
-function CardEvents({ id }: { id: string }): React.JSX.Element {
- const strip = useContext(TabCardOpenContext)
- return (
- <>
-
strip?.onOpenChange(id, true)}>open {id}
-
strip?.onOpenChange(id, false)}>close {id}
-
{strip?.isWarm ? 'immediate' : 'delayed'}
- >
+function renderTabs(): void {
+ render(
+
+
+ } programName="Terminal">
+ first tab
+
+ } programName="Codex">
+ second tab
+
+
+
)
}
-function renderTooltip(label: string, tip: string): void {
- render(
-
-
-
- {label}
-
- {tip}
-
-
- )
+function hover(name: string): void {
+ fireEvent.pointerMove(screen.getByRole('button', { name }), { pointerType: 'mouse' })
+}
+
+function advance(ms: number): void {
+ act(() => vi.advanceTimersByTime(ms))
}
describe('TabStripTooltipProvider', () => {
beforeEach(() => {
vi.useFakeTimers()
+ renderTabs()
})
afterEach(() => {
- vi.useRealTimers()
cleanup()
+ vi.useRealTimers()
})
- it('holds a tab tooltip until the full delay elapses', () => {
- renderTooltip('tab label', 'tab tooltip')
- fireEvent.pointerMove(screen.getByRole('button', { name: 'tab label' }), {
- pointerType: 'mouse'
- })
-
- act(() => {
- vi.advanceTimersByTime(TAB_TOOLTIP_DELAY_MS - 1)
- })
- expect(screen.queryByText('tab tooltip')).toBeNull()
-
- act(() => {
- vi.advanceTimersByTime(1)
- })
- expect(screen.getByText('tab tooltip')).toBeTruthy()
+ it('holds the first preview until an 800 ms hover', () => {
+ hover('first tab')
+ advance(799)
+ expect(screen.queryByText('Build')).toBeNull()
+ advance(1)
+ expect(screen.getAllByText('Build').length).toBeGreaterThan(0)
})
- it('opens the next tab immediately after a card was shown', () => {
- render(
-
-
-
- first tab
-
- first tip
-
-
-
- second tab
-
- second tip
-
-
- )
-
- const first = screen.getByRole('button', { name: 'first tab' })
- const second = screen.getByRole('button', { name: 'second tab' })
-
- fireEvent.pointerMove(first, { pointerType: 'mouse' })
- act(() => {
- vi.advanceTimersByTime(TAB_TOOLTIP_DELAY_MS)
- })
- expect(screen.getByText('first tip')).toBeTruthy()
-
- fireEvent.pointerLeave(first)
- fireEvent.pointerMove(second, { pointerType: 'mouse' })
-
- act(() => {
- vi.advanceTimersByTime(0)
- })
- expect(screen.getByText('second tip')).toBeTruthy()
- expect(screen.queryByText('first tip')).toBeNull()
-
- fireEvent.pointerLeave(second)
- act(() => {
- vi.advanceTimersByTime(301)
- })
- fireEvent.pointerMove(first, { pointerType: 'mouse' })
- act(() => {
- vi.advanceTimersByTime(TAB_TOOLTIP_DELAY_MS - 1)
- })
- expect(screen.queryByText('first tip')).toBeNull()
- act(() => {
- vi.advanceTimersByTime(1)
- })
- expect(screen.getByText('first tip')).toBeTruthy()
+ it('requires a full delay on the next tab after a preview was shown', () => {
+ hover('first tab')
+ advance(TAB_TOOLTIP_DELAY_MS)
+ expect(screen.getAllByText('Build').length).toBeGreaterThan(0)
+
+ fireEvent.pointerLeave(screen.getByRole('button', { name: 'first tab' }))
+ hover('second tab')
+ advance(TAB_TOOLTIP_DELAY_MS - 1)
+ expect(screen.queryByText('Build')).toBeNull()
+ expect(screen.queryByText('Codex Chat')).toBeNull()
+ advance(1)
+ expect(screen.getAllByText('Codex Chat').length).toBeGreaterThan(0)
})
- it('ignores a late close from the previous card and resets the delay after the active card closes', () => {
- render(
-
-
-
-
- )
- const delay = screen.getByLabelText('first delay')
- expect(delay.textContent).toBe('delayed')
- fireEvent.click(screen.getByText('open first'))
- fireEvent.click(screen.getByText('close first'))
- fireEvent.click(screen.getByText('open second'))
- fireEvent.click(screen.getByText('close first'))
- act(() => vi.advanceTimersByTime(TAB_TOOLTIP_SKIP_DELAY_MS + 1))
- expect(delay.textContent).toBe('immediate')
+ it('cancels previews when passing quickly across tabs', () => {
+ hover('first tab')
+ advance(400)
+ fireEvent.pointerLeave(screen.getByRole('button', { name: 'first tab' }))
+ hover('second tab')
+ advance(400)
+ expect(screen.queryByText('Build')).toBeNull()
+ expect(screen.queryByText('Codex Chat')).toBeNull()
+ fireEvent.pointerLeave(screen.getByRole('button', { name: 'second tab' }))
+ advance(TAB_TOOLTIP_DELAY_MS)
+ expect(screen.queryByText('Codex Chat')).toBeNull()
+ })
- fireEvent.click(screen.getByText('close second'))
- act(() => vi.advanceTimersByTime(TAB_TOOLTIP_SKIP_DELAY_MS - 1))
- expect(delay.textContent).toBe('immediate')
- act(() => vi.advanceTimersByTime(1))
- expect(delay.textContent).toBe('delayed')
+ it('restarts the full delay when returning to the same tab', () => {
+ hover('first tab')
+ advance(TAB_TOOLTIP_DELAY_MS)
+ fireEvent.pointerLeave(screen.getByRole('button', { name: 'first tab' }))
+ hover('first tab')
+ advance(TAB_TOOLTIP_DELAY_MS - 1)
+ expect(screen.queryByText('Build')).toBeNull()
+ advance(1)
+ expect(screen.getAllByText('Build').length).toBeGreaterThan(0)
})
- it('keeps the strip warm while a card is open in StrictMode', () => {
- render(
-
-
-
- } programName="Terminal">
- tab
-
-
-
- )
- act(() => screen.getByRole('button', { name: 'tab' }).focus())
- expect(screen.getByLabelText('probe delay').textContent).toBe('immediate')
- act(() => vi.advanceTimersByTime(TAB_TOOLTIP_SKIP_DELAY_MS + 1))
- expect(screen.getByLabelText('probe delay').textContent).toBe('immediate')
+ it('still shows previews immediately for keyboard focus', () => {
+ act(() => screen.getByRole('button', { name: 'first tab' }).focus())
+ expect(screen.getAllByText('Build').length).toBeGreaterThan(0)
})
})
diff --git a/src/renderer/src/components/tab-bar/TabStripTooltipProvider.tsx b/src/renderer/src/components/tab-bar/TabStripTooltipProvider.tsx
index 5bcbbc9335d5..4d33ac67d002 100644
--- a/src/renderer/src/components/tab-bar/TabStripTooltipProvider.tsx
+++ b/src/renderer/src/components/tab-bar/TabStripTooltipProvider.tsx
@@ -1,77 +1,13 @@
-import {
- createContext,
- useCallback,
- useEffect,
- useMemo,
- useRef,
- useState,
- type ReactNode,
- type RefObject
-} from 'react'
+import type { ReactNode } from 'react'
import { TooltipProvider } from '@/components/ui/tooltip'
-export const TAB_TOOLTIP_DELAY_MS = 500
-export const TAB_TOOLTIP_SKIP_DELAY_MS = 300
-
-type TabCardPlacement = {
- element: HTMLElement
- left: number
- top: number
- closedAt: number | null
-}
-
-export const TabCardPlacementContext = createContext
| null>(
- null
-)
-
-export const TabCardOpenContext = createContext<{
- isWarm: boolean
- onOpenChange: (id: string, open: boolean) => void
-} | null>(null)
+export const TAB_TOOLTIP_DELAY_MS = 800
export function TabStripTooltipProvider({ children }: { children: ReactNode }): React.JSX.Element {
- const placement = useRef(null)
- const openCardId = useRef(null)
- const cooldownTimer = useRef | null>(null)
- const [isWarm, setIsWarm] = useState(false)
- const onOpenChange = useCallback((id: string, open: boolean) => {
- // A previous card's close may arrive after the next card opens.
- if (!open && openCardId.current !== id) {
- return
- }
- if (cooldownTimer.current !== null) {
- clearTimeout(cooldownTimer.current)
- cooldownTimer.current = null
- }
- openCardId.current = open ? id : null
- if (open) {
- setIsWarm(true)
- } else {
- cooldownTimer.current = setTimeout(() => {
- cooldownTimer.current = null
- setIsWarm(false)
- }, TAB_TOOLTIP_SKIP_DELAY_MS)
- }
- }, [])
- useEffect(
- () => () => {
- if (cooldownTimer.current !== null) {
- clearTimeout(cooldownTimer.current)
- }
- },
- []
- )
- const openContext = useMemo(() => ({ isWarm, onOpenChange }), [isWarm, onOpenChange])
return (
-
-
-
- {children}
-
-
-
+ // Every tab needs its own dwell time, even after another preview was shown.
+
+ {children}
+
)
}
diff --git a/tests/e2e/tab-hover-card.spec.ts b/tests/e2e/tab-hover-card.spec.ts
index 43daeb0b1e77..0e2c560ea380 100644
--- a/tests/e2e/tab-hover-card.spec.ts
+++ b/tests/e2e/tab-hover-card.spec.ts
@@ -1,64 +1,8 @@
-import type { JSHandle, Page } from '@playwright/test'
import { expect, test } from './helpers/orca-app'
import { ensureTerminalVisible, waitForActiveWorktree, waitForSessionReady } from './helpers/store'
import { startHiddenRendererFrameCapture } from './helpers/hidden-renderer-frame-capture'
-type CardFrame = {
- title: string
- left: number
- count: number
- sliding: boolean
- at: number
- states: string[]
-}
-type CardRecording = { stop: () => CardFrame[] }
-
-async function startCardRecording(page: Page): Promise> {
- return page.evaluateHandle(() => {
- const frames: CardFrame[] = []
- const started = performance.now()
- let nextFrame = 0
- const record = (): void => {
- const cards = document.querySelectorAll('[data-tab-hover-card]')
- const element = cards[0]
- frames.push({
- at: performance.now() - started,
- states: Array.from(cards, (card) => card.getAttribute('data-state') ?? ''),
- title: element?.querySelector('[data-tab-hover-card-title]')?.textContent?.trim() ?? '',
- left: element?.getBoundingClientRect().left ?? -1,
- count: cards.length,
- sliding:
- element
- ?.getAnimations()
- .some(
- (animation) =>
- animation.effect instanceof KeyframeEffect &&
- animation.effect.getKeyframes().some((frame) => frame.translate !== undefined)
- ) ?? false
- })
- if (performance.now() - started < 10_000) {
- nextFrame = requestAnimationFrame(record)
- }
- }
- record()
- return {
- stop: () => {
- cancelAnimationFrame(nextFrame)
- return frames
- }
- }
- })
-}
-
-async function stopCardRecording(recording: JSHandle): Promise {
- try {
- return await recording.evaluate((recording) => recording.stop())
- } finally {
- await recording.dispose()
- }
-}
-
-test('whole-tab hover cards slide immediately between neighboring tabs', async ({
+test('whole-tab hover cards wait independently on every hover', async ({
electronApp,
orcaPage
}) => {
@@ -96,7 +40,7 @@ test('whole-tab hover cards slide immediately between neighboring tabs', async (
// The left padding and icon used to sit outside the terminal title's trigger.
await orcaPage.mouse.move(firstBox.x + 3, firstBox.y + firstBox.height / 2)
- await orcaPage.waitForTimeout(200)
+ await orcaPage.waitForTimeout(600)
await expect(card).toHaveCount(0)
await expect(cardTitle).toHaveText('Build and test the hover cards')
const program = card.locator('[data-tab-hover-card-program]')
@@ -105,51 +49,32 @@ test('whole-tab hover cards slide immediately between neighboring tabs', async (
const titleBox = await cardTitle.boundingBox()
const programBox = await program.boundingBox()
expect(programBox?.y).toBeGreaterThan((titleBox?.y ?? 0) + (titleBox?.height ?? 0))
- await orcaPage.waitForTimeout(200)
-
- const recording = await startCardRecording(orcaPage)
await orcaPage.mouse.move(secondBox.x + 3, secondBox.y + secondBox.height / 2)
- await expect(cardTitle).toHaveText('Review changes', { timeout: 150 })
- await orcaPage.waitForTimeout(200)
- const frames = await stopCardRecording(recording)
- const firstTargetFrame = frames.findIndex((frame) => frame.title === 'Review changes')
- expect(firstTargetFrame, JSON.stringify(frames)).toBeGreaterThan(0)
- expect(
- frames
- .slice(0, firstTargetFrame)
- .every((frame) => frame.title === 'Build and test the hover cards')
- ).toBe(true)
- expect(frames.slice(firstTargetFrame).every((frame) => frame.title === 'Review changes')).toBe(
- true
- )
- expect(frames.some((frame) => frame.sliding)).toBe(true)
- expect(frames[firstTargetFrame]?.left).toBeLessThan(secondBox.x - 10)
+ await orcaPage.waitForTimeout(600)
+ await expect(card).toHaveCount(0)
await expect(cardTitle).toHaveText('Review changes')
- await orcaPage.waitForTimeout(500)
+ // Leaving cancels a pending preview; time spent on other tabs does not count.
await orcaPage.mouse.move(firstBox.x + 3, firstBox.y + firstBox.height / 2)
- await expect(cardTitle).toHaveText('Build and test the hover cards', { timeout: 150 })
- await orcaPage.waitForTimeout(600)
+ await orcaPage.waitForTimeout(300)
await orcaPage.mouse.move(secondBox.x + 3, secondBox.y + secondBox.height / 2)
- await expect(cardTitle).toHaveText('Review changes', { timeout: 150 })
+ await orcaPage.waitForTimeout(300)
+ await orcaPage.mouse.move(secondBox.x + 3, secondBox.y + secondBox.height + 100)
+ await orcaPage.waitForTimeout(900)
+ await expect(card).toHaveCount(0)
- const reversalRecording = await startCardRecording(orcaPage)
- for (let index = 0; index < 12; index += 1) {
- const target = index % 2 === 0 ? firstBox : secondBox
- const title = index % 2 === 0 ? 'Build and test the hover cards' : 'Review changes'
- await orcaPage.mouse.move(target.x + 3, target.y + target.height / 2)
- await expect(cardTitle).toHaveText(title, { timeout: 150 })
- await orcaPage.waitForTimeout(30)
- await expect(card).toHaveCount(1)
- }
- const reversalFrames = await stopCardRecording(reversalRecording)
- expect(
- reversalFrames.every((frame) => frame.count === 1),
- JSON.stringify(reversalFrames)
- ).toBe(true)
- for (const title of ['Build and test the hover cards', 'Review changes']) {
- expect(reversalFrames.some((frame) => frame.title === title && frame.sliding)).toBe(true)
- }
+ await orcaPage.mouse.move(firstBox.x + 3, firstBox.y + firstBox.height / 2)
+ await orcaPage.waitForTimeout(600)
+ await expect(card).toHaveCount(0)
+ await expect(cardTitle).toHaveText('Build and test the hover cards')
+
+ // Re-entering the same tab also requires a fresh dwell.
+ await orcaPage.mouse.move(firstBox.x + 3, firstBox.y + firstBox.height + 100)
+ await expect(card).toHaveCount(0)
+ await orcaPage.mouse.move(firstBox.x + 3, firstBox.y + firstBox.height / 2)
+ await orcaPage.waitForTimeout(600)
+ await expect(card).toHaveCount(0)
+ await expect(cardTitle).toHaveText('Build and test the hover cards')
await first.locator('[data-tab-close-button]').hover()
await orcaPage.waitForTimeout(100)
@@ -170,8 +95,10 @@ test('whole-tab hover cards slide immediately between neighboring tabs', async (
await first.locator('[data-tab-close-button]').focus()
await expect(orcaPage.locator('[data-tab-close-tooltip]')).toHaveCount(0)
await expect(card).toHaveCount(1)
+ await orcaPage.mouse.move(firstBox.x + 3, firstBox.y + firstBox.height + 100)
+ await expect(card).toHaveCount(0)
await first.focus()
- await expect(cardTitle).toHaveText('Build and test the hover cards')
+ await expect(cardTitle).toHaveText('Build and test the hover cards', { timeout: 150 })
await expect(orcaPage.locator('[data-tab-close-tooltip]')).toHaveCount(0)
await first.press('Escape')
await expect(card).toHaveCount(0)
@@ -185,7 +112,6 @@ test('whole-tab hover cards slide immediately between neighboring tabs', async (
await orcaPage.waitForTimeout(200)
await expect(card).toHaveCount(0)
await expect(cardTitle).toHaveText('Review changes')
- await orcaPage.waitForTimeout(500)
} finally {
await stopCapture()
}
From 3a2f16291118b71da9600fa63fbc845e989fe2b3 Mon Sep 17 00:00:00 2001
From: Jinwoo Hong <73622457+Jinwoo-H@users.noreply.github.com>
Date: Sun, 18 Oct 2026 14:16:34 -0400
Subject: [PATCH 14/15] feat(sidebar): sort Recent and Smart by the owning
host's stamps, hold order under the pointer (dark) (#30284)
* feat(sidebar): sort stamps reconcile stored tiers at startup against live hook rows and terminals (dark)
* test(sidebar): a restart clears an unbacked local tier and keeps an SSH host's
* fix(sidebar): run the sort tier reconcile once hook rows and PTYs settle, seeding hydrated rows
* fix(sidebar): clear a stored tier only on proof its terminals died; a rest seed adds no clear
* chore(sidebar): merge origin/main; locality helper moved to shared
* feat(sidebar): sort Recent and Smart by host stamps behind the sidebar-inputs switch
With ORCA_SIDEBAR_INPUTS=main, the window, main and the phone order Recent by
lastActivityAt and Smart by smartTier then smartAt (Needs you, Done, Working,
then the rest by Recent). The window holds its displayed order while the
pointer is over the list or a drag runs. Switch off: today's sort path.
Co-Authored-By: Claude
* chore: restore files the merge commit's formatter rewrote
Co-Authored-By: Claude
* fix(sidebar): stamp-order review fixes behind the sidebar-inputs switch
The window writes no Recent stamps with the switch on (terminal start and
exit, unread marks, comment edits), the hover hold covers only Recent and
Smart and ends with a drag, main follows only explicit metadata saves, and
the phone picks its sort from the unfiltered rows.
Co-Authored-By: Claude
* test(sidebar): folder writers and a Manual drag under the stamp switch
Co-Authored-By: Claude
* test(sidebar): name the stamp type in the ps summaries test
Co-Authored-By: Claude
---------
Co-authored-by: Claude
---
.../src/worktree/workspace-list-ordering.ts | 22 +-
.../src/worktree/workspace-list-sections.ts | 4 +-
.../workspace-list-stamp-order.test.ts | 89 ++
mobile/src/worktree/workspace-list-types.ts | 5 +
...-worktree-ps-summaries-sort-stamps.test.ts | 53 +
.../runtime/runtime-worktree-ps-summaries.ts | 19 +
.../orca-runtime-sidebar-temporal.ts | 25 +
.../orca-runtime-sort-stamps.test.ts | 15 +
.../sidebar-temporal-owner-stamps.test.ts | 113 ++
.../sidebar-inputs/sidebar-temporal-owner.ts | 17 +-
.../sort-stamps-producer.test.ts | 5 +
.../sidebar-inputs/sort-stamps-producer.ts | 3 +
.../src/components/sidebar/WorktreeList.tsx | 6 +-
.../group-by-none.txt | 508 +++++++
.../group-by-pr-status.txt | 520 +++++++
.../group-by-repo.txt | 1260 +++++++++++++++++
.../group-by-workspace-status.txt | 548 +++++++
.../scenario-hide-default-branch.txt | 469 ++++++
.../scenario-hide-sleeping.txt | 372 +++++
.../scenario-host-sections.txt | 930 ++++++++++++
.../scenario-name-order.txt | 219 +++
.../scenario-new-external-inbox.txt | 541 +++++++
.../scenario-repo-filter.txt | 410 ++++++
.../scenario-single-host-scope.txt | 350 +++++
.../scenario-stamp-tiers.txt | 1086 ++++++++++++++
.../unranked-rows-last.txt | 3 +
...sidebar-list-golden-suite.test-fixture.tsx | 360 +++++
.../sidebar-list-goldens-stamp-order.test.tsx | 105 ++
.../sidebar/sidebar-list-goldens.test.tsx | 357 +----
.../worktree-list/listing/held-order.test.ts | 14 +
.../worktree-list/listing/held-order.ts | 18 +
.../listing/use-order-hold.test.ts | 95 ++
.../worktree-list/listing/use-order-hold.ts | 94 ++
.../worktree-list/listing/use-sort-order.ts | 7 +-
.../workspace-unread-flag.ts | 14 +-
.../worktrees-recent-stamp-switch-on.test.ts | 104 ++
.../listing/detected-worktree-meta.ts | 7 +-
.../metadata/update-worktree-meta.ts | 6 +-
.../session/worktree-activity-bump.ts | 5 +
src/shared/runtime-worktree-contracts.ts | 6 +
src/shared/sidebar-list/smart-sort.ts | 30 +-
.../stamp-order-scenarios.test.ts | 204 +++
src/shared/sidebar-list/stamp-order.test.ts | 48 +
src/shared/sidebar-list/stamp-order.ts | 36 +
tests/e2e/sidebar-sort-stamps-order.spec.ts | 68 +
tests/e2e/worktree-smart-sort.spec.ts | 3 +
46 files changed, 8795 insertions(+), 378 deletions(-)
create mode 100644 mobile/src/worktree/workspace-list-stamp-order.test.ts
create mode 100644 src/main/runtime/runtime-worktree-ps-summaries-sort-stamps.test.ts
create mode 100644 src/main/runtime/sidebar-inputs/sidebar-temporal-owner-stamps.test.ts
create mode 100644 src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/group-by-none.txt
create mode 100644 src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/group-by-pr-status.txt
create mode 100644 src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/group-by-repo.txt
create mode 100644 src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/group-by-workspace-status.txt
create mode 100644 src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-hide-default-branch.txt
create mode 100644 src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-hide-sleeping.txt
create mode 100644 src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-host-sections.txt
create mode 100644 src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-name-order.txt
create mode 100644 src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-new-external-inbox.txt
create mode 100644 src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-repo-filter.txt
create mode 100644 src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-single-host-scope.txt
create mode 100644 src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-stamp-tiers.txt
create mode 100644 src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/unranked-rows-last.txt
create mode 100644 src/renderer/src/components/sidebar/sidebar-list-golden-suite.test-fixture.tsx
create mode 100644 src/renderer/src/components/sidebar/sidebar-list-goldens-stamp-order.test.tsx
create mode 100644 src/renderer/src/components/sidebar/worktree-list/listing/held-order.test.ts
create mode 100644 src/renderer/src/components/sidebar/worktree-list/listing/held-order.ts
create mode 100644 src/renderer/src/components/sidebar/worktree-list/listing/use-order-hold.test.ts
create mode 100644 src/renderer/src/components/sidebar/worktree-list/listing/use-order-hold.ts
create mode 100644 src/renderer/src/store/slices/worktrees-recent-stamp-switch-on.test.ts
create mode 100644 src/shared/sidebar-list/stamp-order-scenarios.test.ts
create mode 100644 src/shared/sidebar-list/stamp-order.test.ts
create mode 100644 src/shared/sidebar-list/stamp-order.ts
create mode 100644 tests/e2e/sidebar-sort-stamps-order.spec.ts
diff --git a/mobile/src/worktree/workspace-list-ordering.ts b/mobile/src/worktree/workspace-list-ordering.ts
index 98967c961a87..26e3011956c2 100644
--- a/mobile/src/worktree/workspace-list-ordering.ts
+++ b/mobile/src/worktree/workspace-list-ordering.ts
@@ -6,6 +6,7 @@ import {
} from '../../../src/shared/workspace-view/workspace-row-sort'
import { compareCodePoints, compareSidebarText } from '../../../src/shared/sidebar-list/text-order'
import { getWorktreeRowIdentity } from './worktree-host-row-identity'
+import { compareSmartStamps, recentStamp } from '../../../src/shared/sidebar-list/stamp-order'
function finiteOr(value: number | undefined, fallback: number): number {
return value !== undefined && Number.isFinite(value) ? value : fallback
@@ -16,13 +17,32 @@ function getManualSortRank(worktree: Worktree): number | null {
return typeof rank === 'number' && Number.isFinite(rank) ? rank : null
}
+export function hostSortsByStamps(worktrees: readonly Worktree[]): boolean {
+ return worktrees.some((worktree) => worktree.sortedByStamps)
+}
+
const AGENT_ATTENTION_STATUS_ORDER = { permission: 0, working: 1, done: 2, active: 3, inactive: 4 }
export function sortWorktrees(
worktrees: Worktree[],
mode: WorkspaceSortBy,
- now = Date.now()
+ now = Date.now(),
+ // Read from the unfiltered list, so a filter never switches the algorithm.
+ byStamps = hostSortsByStamps(worktrees)
): Worktree[] {
+ // A stamping host decides the order; rows from an older one rest by Recent among them.
+ if (byStamps) {
+ return [...worktrees].sort(
+ buildWorkspaceRowComparator(mode, {
+ label: (w) => w.displayName,
+ identity: getWorktreeRowIdentity,
+ repoLabel: (w) => w.repo,
+ recentActivity: recentStamp,
+ manualRank: getManualSortRank,
+ compareSmart: compareSmartStamps
+ })
+ )
+ }
// Why lastOutputAt too: headless serve hosts only stamp lastActivityAt at creation, so live
// terminal output must still count as recency for mobile-only pairings.
const recentActivity = (w: Worktree): number =>
diff --git a/mobile/src/worktree/workspace-list-sections.ts b/mobile/src/worktree/workspace-list-sections.ts
index 1bb74acdde56..2e8418bbcd50 100644
--- a/mobile/src/worktree/workspace-list-sections.ts
+++ b/mobile/src/worktree/workspace-list-sections.ts
@@ -24,7 +24,7 @@ import type {
WorkspaceGroupBy,
WorkspaceSortBy
} from '../../../src/shared/workspace-view/workspace-view-options'
-import { sortWorktrees } from './workspace-list-ordering'
+import { hostSortsByStamps, sortWorktrees } from './workspace-list-ordering'
import { getWorktreeRowIdentity } from './worktree-host-row-identity'
import { resolveWorktreeHostId } from './worktree-host-context-labels'
import type { ExecutionHostId } from '../../../src/shared/execution-host'
@@ -191,7 +191,7 @@ export function buildMobileWorkspacePlan(
repoHostIdByRepoId: ReadonlyMap = new Map()
) {
const filtered = filterWorktrees(worktrees, filters, search, repoHostIdByRepoId)
- const sorted = sortWorktrees(filtered, sortMode)
+ const sorted = sortWorktrees(filtered, sortMode, Date.now(), hostSortsByStamps(worktrees))
const childrenByParentIdentity = getMobileWorkspaceLineageChildren(
filters.filterRepoIds.length > 0
? worktrees.filter((w) => filters.filterRepoIds.includes(w.repoId))
diff --git a/mobile/src/worktree/workspace-list-stamp-order.test.ts b/mobile/src/worktree/workspace-list-stamp-order.test.ts
new file mode 100644
index 000000000000..a5b3b451a36a
--- /dev/null
+++ b/mobile/src/worktree/workspace-list-stamp-order.test.ts
@@ -0,0 +1,89 @@
+import { join } from 'node:path'
+import { describe, expect, it } from 'vitest'
+import { sortWorktrees, type Worktree } from './workspace-list-sections'
+import { hostSortsByStamps } from './workspace-list-ordering'
+
+function worktree(overrides: Partial = {}): Worktree {
+ const worktreePath = join('/tmp', 'orca', 'worktrees', 'feature')
+ return {
+ workspaceKind: 'git',
+ worktreeId: `repo-1::${worktreePath}`,
+ repoId: 'repo-1',
+ repo: 'orca',
+ branch: 'feature/mobile-parity',
+ displayName: 'feature',
+ path: worktreePath,
+ liveTerminalCount: 0,
+ hasAttachedPty: false,
+ unread: false,
+ isPinned: false,
+ linkedPR: null,
+ status: 'inactive',
+ agents: [],
+ ...overrides
+ }
+}
+
+describe('sortWorktrees with host stamps', () => {
+ it('sorts by the host’s stamps when it writes them, with no output or saved ranks', () => {
+ const rest = worktree({
+ worktreeId: 'rest',
+ displayName: 'A',
+ lastActivityAt: 900,
+ lastOutputAt: 5_000,
+ sortOrder: 9,
+ sortedByStamps: true
+ })
+ const done = worktree({
+ worktreeId: 'done',
+ displayName: 'B',
+ lastActivityAt: 10,
+ smartTier: 'done',
+ smartAt: 20,
+ sortedByStamps: true
+ })
+ const needsYou = worktree({
+ worktreeId: 'needs-you',
+ displayName: 'C',
+ lastActivityAt: 5,
+ smartTier: 'needs-you',
+ smartAt: 1,
+ sortedByStamps: true
+ })
+ // A row from an older paired server writes no tier: it rests by Recent among them.
+ const older = worktree({ worktreeId: 'older', displayName: 'D', lastActivityAt: 950 })
+ const rows = [rest, done, needsYou, older]
+ expect(sortWorktrees(rows, 'smart').map((item) => item.worktreeId)).toEqual([
+ 'needs-you',
+ 'done',
+ 'older',
+ 'rest'
+ ])
+ expect(sortWorktrees(rows, 'recent').map((item) => item.worktreeId)).toEqual([
+ 'older',
+ 'rest',
+ 'done',
+ 'needs-you'
+ ])
+ })
+
+ it('keeps the host’s order when a filter leaves only an older server’s rows', () => {
+ const stamped = worktree({ worktreeId: 'stamped', lastActivityAt: 1, sortedByStamps: true })
+ const quiet = worktree({ worktreeId: 'quiet', displayName: 'A', lastActivityAt: 10 })
+ const busy = worktree({
+ worktreeId: 'busy',
+ displayName: 'B',
+ lastActivityAt: 5,
+ lastOutputAt: 99
+ })
+ const all = [stamped, quiet, busy]
+ const order = (rows: Worktree[]) =>
+ sortWorktrees(rows, 'recent', 0, hostSortsByStamps(all)).map((item) => item.worktreeId)
+ expect(order([quiet, busy])).toEqual(['quiet', 'busy'])
+ // Without the host's answer the old algorithm reads output recency.
+ expect(sortWorktrees([quiet, busy], 'recent', 0).map((item) => item.worktreeId)).toEqual([
+ 'busy',
+ 'quiet'
+ ])
+ })
+})
diff --git a/mobile/src/worktree/workspace-list-types.ts b/mobile/src/worktree/workspace-list-types.ts
index d9ba87728f33..d9d829711e5b 100644
--- a/mobile/src/worktree/workspace-list-types.ts
+++ b/mobile/src/worktree/workspace-list-types.ts
@@ -1,3 +1,4 @@
+import type { SmartTier } from '../../../src/shared/sidebar-list/sort-stamps'
import type { ExecutionHostId } from '../../../src/shared/execution-host'
import type { AgentWorkingMode } from '../../../src/shared/agent-status-types'
import type {
@@ -29,6 +30,10 @@ export type Worktree = {
sortOrder?: number
manualOrder?: number
lastActivityAt?: number
+ smartTier?: SmartTier
+ smartAt?: number
+ /** The host sorts by its own stamps; see src/shared/sidebar-list/stamp-order.ts. */
+ sortedByStamps?: true
createdAt?: number
// Why: on-disk worktree directory path. Needed by NewWorktreeModal so the
// marine-creature fallback dedupes against filesystem basenames.
diff --git a/src/main/runtime/runtime-worktree-ps-summaries-sort-stamps.test.ts b/src/main/runtime/runtime-worktree-ps-summaries-sort-stamps.test.ts
new file mode 100644
index 000000000000..33873c99c0e2
--- /dev/null
+++ b/src/main/runtime/runtime-worktree-ps-summaries-sort-stamps.test.ts
@@ -0,0 +1,53 @@
+import { describe, expect, it, vi } from 'vitest'
+import { buildRuntimeWorktreePsSummaries } from './runtime-worktree-ps-summaries'
+import type { ResolvedWorktree } from './runtime-worktree-path-identity'
+import type { RuntimeStore } from './runtime-store-contract'
+import type { Worktree } from '../../shared/worktree/types'
+
+vi.mock('../../shared/sidebar-inputs-switch', () => ({ ORCA_SIDEBAR_INPUTS_IS_MAIN: true }))
+
+describe('buildRuntimeWorktreePsSummaries with sort stamps', () => {
+ it('tells clients the host sorts by its stamps, and carries the tier', () => {
+ const row = (id: string, stamps: Pick): ResolvedWorktree => {
+ // oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: the summary builder reads only these worktree fields.
+ const worktree = {
+ id,
+ repoId: 'repo-1',
+ path: id.split('::')[1],
+ branch: 'feature',
+ isArchived: false,
+ isMainWorktree: false,
+ parentWorktreeId: null,
+ childWorktreeIds: [],
+ lineage: null,
+ lastActivityAt: 7,
+ ...stamps
+ } as unknown as ResolvedWorktree
+ return worktree
+ }
+ // oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: the summary builder reads only these store methods.
+ const store = {
+ getRepos: () => [],
+ getWorktreeMeta: () => undefined,
+ getAllWorktreeMeta: () => ({}),
+ getFolderWorkspaces: () => [],
+ getProjectGroups: () => []
+ } as unknown as RuntimeStore
+ const summaries = buildRuntimeWorktreePsSummaries({
+ store,
+ resolvedWorktrees: [
+ row('repo-1::/w/done', { smartTier: 'done', smartAt: 5 }),
+ row('repo-1::/w/rest', {})
+ ],
+ platformByRepoId: new Map()
+ })
+ expect(summaries.get('repo-1::/w/done')).toMatchObject({
+ lastActivityAt: 7,
+ sortedByStamps: true,
+ smartTier: 'done',
+ smartAt: 5
+ })
+ expect(summaries.get('repo-1::/w/rest')).toMatchObject({ sortedByStamps: true })
+ expect(summaries.get('repo-1::/w/rest')).not.toHaveProperty('smartTier')
+ })
+})
diff --git a/src/main/runtime/runtime-worktree-ps-summaries.ts b/src/main/runtime/runtime-worktree-ps-summaries.ts
index 8bdbf38d7e5d..4004b63f11a8 100644
--- a/src/main/runtime/runtime-worktree-ps-summaries.ts
+++ b/src/main/runtime/runtime-worktree-ps-summaries.ts
@@ -1,3 +1,5 @@
+import { ORCA_SIDEBAR_INPUTS_IS_MAIN } from '../../shared/sidebar-inputs-switch'
+import type { Worktree } from '../../shared/worktree/types'
import { DEFAULT_WORKSPACE_STATUS_ID } from '../../shared/workspace-statuses'
import type { RuntimeWorktreePsSummary } from '../../shared/runtime-types'
import { folderWorkspaceToWorktree } from '../../shared/folder-workspace-worktree'
@@ -61,6 +63,7 @@ export function buildRuntimeWorktreePsSummaries(args: {
sortOrder: meta?.sortOrder ?? 0,
...(meta?.manualOrder !== undefined ? { manualOrder: meta.manualOrder } : {}),
lastActivityAt: worktree.lastActivityAt,
+ ...sortStampSummaryFields(worktree),
...(worktree.createdAt !== undefined ? { createdAt: worktree.createdAt } : {}),
...(worktree.creatorProvenance ? { creatorProvenance: worktree.creatorProvenance } : {}),
linkedIssue: worktree.linkedIssue,
@@ -110,6 +113,7 @@ export function buildRuntimeWorktreePsSummaries(args: {
sortOrder: worktree.sortOrder ?? 0,
...(worktree.manualOrder !== undefined ? { manualOrder: worktree.manualOrder } : {}),
lastActivityAt: worktree.lastActivityAt,
+ ...sortStampSummaryFields(worktree),
...(worktree.createdAt !== undefined ? { createdAt: worktree.createdAt } : {}),
...(worktree.creatorProvenance ? { creatorProvenance: worktree.creatorProvenance } : {}),
linkedIssue: worktree.linkedIssue ?? null,
@@ -133,3 +137,18 @@ export function buildRuntimeWorktreePsSummaries(args: {
}
return summaries
}
+
+// Switch point: a stamping host tells clients to sort by its stamps.
+function sortStampSummaryFields(
+ worktree: Pick
+): Pick {
+ if (!ORCA_SIDEBAR_INPUTS_IS_MAIN) {
+ return {}
+ }
+ return {
+ sortedByStamps: true,
+ ...(worktree.smartTier !== undefined
+ ? { smartTier: worktree.smartTier, smartAt: worktree.smartAt }
+ : {})
+ }
+}
diff --git a/src/main/runtime/sidebar-inputs/orca-runtime-sidebar-temporal.ts b/src/main/runtime/sidebar-inputs/orca-runtime-sidebar-temporal.ts
index 919219ddd802..20ab1b6ee2e1 100644
--- a/src/main/runtime/sidebar-inputs/orca-runtime-sidebar-temporal.ts
+++ b/src/main/runtime/sidebar-inputs/orca-runtime-sidebar-temporal.ts
@@ -21,6 +21,9 @@ import { SmartSortAgentEntries } from './smart-sort-agent-entries'
import { buildRuntimeSmartSortSources } from './runtime-smart-sort-sources'
import type { AgentStatusStoreView } from './workspace-activity-facts-producer'
import { SortStampsProducer } from './sort-stamps-producer'
+import { WORKTREE_METADATA_DOMAINS } from '../../persistence/loading-store/worktree-identity-metadata'
+import { parseWorkspaceKey } from '../../../shared/workspace-scope'
+import { getRepoIdFromWorktreeId } from '../../../shared/worktree/id'
import { resolveAgentWorkspaceExecutionHostId } from '../../agent-hooks/restored-status-dead-terminal-sweep'
import {
isWslMoveProjectBlocked,
@@ -50,6 +53,7 @@ export abstract class OrcaRuntimeWithSidebarTemporal extends OrcaRuntimeWithWork
resolveTabWorktreeId: (tabId) => this.tabs.get(tabId)?.worktreeId,
subscribeToPtyExit: (ptyId, listener) => this.subscribeToPtyExit(ptyId, listener),
onClientEvent: (listener, options) => this.onClientEvent(listener, options),
+ onStampsWritten: (worktreeId) => this.notifySortStampsChanged(worktreeId),
now: Date.now
})
@@ -57,6 +61,17 @@ export abstract class OrcaRuntimeWithSidebarTemporal extends OrcaRuntimeWithWork
super(...args)
this.workspaceActivityFacts.revision.onChange(() => this.sidebarTemporal.noteActivityChange())
this.store?.onUIChanged?.(() => this.sidebarTemporal.noteViewChange())
+ // Switch point: the window's metadata writes (a rename, a manual order) send no catalog event.
+ this.store?.onStateWritten?.((domains) => {
+ if (
+ ORCA_SIDEBAR_INPUTS_IS_MAIN &&
+ domains &&
+ WORKTREE_METADATA_DOMAINS.some((domain) => domains.includes(domain))
+ ) {
+ this.invalidateResolvedWorktreeCache()
+ this.sidebarTemporal.noteRowsWritten()
+ }
+ })
// Every catalog change, from IPC or the runtime, reaches clients through this one bus.
this.clientEvents.on(
(event) => {
@@ -134,6 +149,16 @@ export abstract class OrcaRuntimeWithSidebarTemporal extends OrcaRuntimeWithWork
.catch((error: unknown) => console.warn('[sidebar] sort tier reconcile failed:', error))
}
+ // Metadata only: clients re-list the record, and the cached git scans stay.
+ private notifySortStampsChanged(worktreeId: string): void {
+ if (parseWorkspaceKey(worktreeId)?.type === 'folder') {
+ this.notifyFolderWorkspaceChanged()
+ return
+ }
+ this.invalidateResolvedWorktreeCache()
+ this.notifyWorktreesChanged(getRepoIdFromWorktreeId(worktreeId), { invalidateGitScans: false })
+ }
+
/** Attaches every sidebar producer that reads the hook server's store. */
attachSidebarAgentStatusStore(store: AgentStatusStoreView): () => void {
const detachActivity = this.workspaceActivityFacts.attachAgentStatusStore(store)
diff --git a/src/main/runtime/sidebar-inputs/orca-runtime-sort-stamps.test.ts b/src/main/runtime/sidebar-inputs/orca-runtime-sort-stamps.test.ts
index b43b7a55d385..3b6445804536 100644
--- a/src/main/runtime/sidebar-inputs/orca-runtime-sort-stamps.test.ts
+++ b/src/main/runtime/sidebar-inputs/orca-runtime-sort-stamps.test.ts
@@ -60,6 +60,21 @@ describe('host sort stamps on a headless runtime', () => {
}
})
+ it('announces a stamp write as a metadata change of the row’s repo', () => {
+ vi.useFakeTimers({ now: 55_000 })
+ try {
+ const { runtime } = createHeadlessRuntime()
+ const events: unknown[] = []
+ runtime.onClientEvent((event) => events.push(event), { consumesTerminalSideEffects: false })
+ runtime.onPtyData('pty-1', '\x07', 1)
+ expect(events).toContainEqual(
+ expect.objectContaining({ type: 'worktreesChanged', repoId: 'repo-1' })
+ )
+ } finally {
+ vi.useRealTimers()
+ }
+ })
+
it('stamps a bell the daemon reports for a parked terminal', () => {
vi.useFakeTimers({ now: 60_000 })
try {
diff --git a/src/main/runtime/sidebar-inputs/sidebar-temporal-owner-stamps.test.ts b/src/main/runtime/sidebar-inputs/sidebar-temporal-owner-stamps.test.ts
new file mode 100644
index 000000000000..21eed2df10dc
--- /dev/null
+++ b/src/main/runtime/sidebar-inputs/sidebar-temporal-owner-stamps.test.ts
@@ -0,0 +1,113 @@
+import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
+import type { Worktree } from '../../../shared/worktree/types'
+import type { WorkspaceSortBy } from '../../../shared/workspace-view/workspace-row-sort'
+import { CREATE_GRACE_MS } from '../../../shared/workspace-view/workspace-row-sort'
+import { getWorktreeIdFromHostIdentity } from '../../../shared/worktree/host-qualified-identity'
+import { SidebarClock } from './sidebar-clock'
+import { SidebarTemporalOwner } from './sidebar-temporal-owner'
+
+vi.mock('../../../shared/sidebar-inputs-switch', () => ({ ORCA_SIDEBAR_INPUTS_IS_MAIN: true }))
+
+function worktree(id: string, overrides: Partial = {}): Worktree {
+ return {
+ id,
+ repoId: 'repo-1',
+ path: `/tmp/${id}`,
+ head: 'abc',
+ branch: `refs/heads/${id}`,
+ isBare: false,
+ isMainWorktree: false,
+ displayName: id,
+ comment: '',
+ linkedIssue: null,
+ linkedPR: null,
+ linkedLinearIssue: null,
+ isArchived: false,
+ isUnread: false,
+ isPinned: false,
+ sortOrder: 0,
+ lastActivityAt: 0,
+ ...overrides
+ }
+}
+
+function harness(sortBy: WorkspaceSortBy, initial: Worktree[]) {
+ const world = { worktrees: initial }
+ const owner = new SidebarTemporalOwner(new SidebarClock(), {
+ sortBy: () => sortBy,
+ showSleepingWorkspaces: () => false,
+ readSortSample: async () => ({
+ worktrees: world.worktrees,
+ repoMap: new Map(),
+ sources: {
+ tabsByWorktree: {},
+ agentStatusByPaneKey: {},
+ runtimePaneTitlesByTabId: {},
+ ptyIdsByTabId: {}
+ }
+ }),
+ retentionCandidates: () => ({ ids: [], isActive: () => false, isUnverifiableGap: () => false })
+ })
+ const snapshot = () => owner.snapshot().sortSnapshot
+ const ranked = () => snapshot()?.rankedIds.map(getWorktreeIdFromHostIdentity)
+ return { world, owner, ranked, snapshot }
+}
+
+const flush = () => vi.advanceTimersByTimeAsync(0)
+
+describe('SidebarTemporalOwner with the switch on', () => {
+ beforeEach(() => {
+ vi.useFakeTimers()
+ vi.setSystemTime(1_000_000)
+ })
+ afterEach(() => {
+ vi.useRealTimers()
+ })
+
+ it('re-sorts at once on any re-list, as the window does', async () => {
+ const { world, owner, ranked } = harness('smart', [
+ worktree('a', { lastActivityAt: 2 }),
+ worktree('b', { lastActivityAt: 1 })
+ ])
+ owner.beginSession('s1')
+ await flush()
+ owner.noteCatalogListing(world.worktrees, false)
+ await flush()
+ expect(ranked()).toEqual(['a', 'b'])
+
+ world.worktrees = [
+ worktree('a', { lastActivityAt: 2 }),
+ worktree('b', { lastActivityAt: 1, smartTier: 'needs-you', smartAt: 1 })
+ ]
+ owner.noteCatalogListing(world.worktrees, false)
+ await flush()
+ expect(ranked()).toEqual(['b', 'a'])
+ })
+
+ it('re-sorts at once on a saved write no catalog event announced', async () => {
+ const { world, owner, ranked, snapshot } = harness('recent', [
+ worktree('a', { lastActivityAt: 2 }),
+ worktree('b', { lastActivityAt: 1 })
+ ])
+ owner.beginSession('s1')
+ await flush()
+ world.worktrees = [worktree('a', { lastActivityAt: 2 }), worktree('b', { lastActivityAt: 3 })]
+ owner.noteRowsWritten()
+ await flush()
+ expect(ranked()).toEqual(['b', 'a'])
+ expect(snapshot()?.cause).toBe('settle')
+ })
+
+ it('schedules no create grace: a new row ranks by its stamp alone', async () => {
+ const { owner, snapshot } = harness('recent', [
+ worktree('a', { lastActivityAt: 2 }),
+ worktree('new', { createdAt: Date.now(), lastActivityAt: 1 })
+ ])
+ owner.beginSession('s1')
+ await flush()
+ const epoch = snapshot()?.epoch
+ await vi.advanceTimersByTimeAsync(CREATE_GRACE_MS + 1)
+ expect(snapshot()?.epoch).toBe(epoch)
+ expect(snapshot()?.rankedIds.map(getWorktreeIdFromHostIdentity)).toEqual(['a', 'new'])
+ })
+})
diff --git a/src/main/runtime/sidebar-inputs/sidebar-temporal-owner.ts b/src/main/runtime/sidebar-inputs/sidebar-temporal-owner.ts
index 9d1cea43b530..d3613a6f9bb7 100644
--- a/src/main/runtime/sidebar-inputs/sidebar-temporal-owner.ts
+++ b/src/main/runtime/sidebar-inputs/sidebar-temporal-owner.ts
@@ -12,6 +12,7 @@ import {
type SortSettleEvent
} from '../../../shared/sidebar-list/sort-settle'
import { ranksFollowPersistedOrder } from '../../../shared/sidebar-list/smart-sort-phase'
+import { ORCA_SIDEBAR_INPUTS_IS_MAIN } from '../../../shared/sidebar-inputs-switch'
import {
rankWorktreesForSort,
type SmartSortSources
@@ -151,6 +152,11 @@ export class SidebarTemporalOwner {
this.settleNow()
return
}
+ // Switch point: the order is a pure read of the rows' stamps, so any re-list re-sorts, as the window does.
+ if (ORCA_SIDEBAR_INPUTS_IS_MAIN) {
+ this.settleNow()
+ return
+ }
const change = classifyCatalogListingChange(previous, this.listing)
// Every row change bumps here, so the count can only move on a bump; no other write settles.
const settled = change === 'rows' && this.noteSortInputChange(liveCount)
@@ -161,6 +167,11 @@ export class SidebarTemporalOwner {
}
}
+ /** Switch on: a saved metadata write no catalog event announced. */
+ noteRowsWritten(): void {
+ this.settleNow()
+ }
+
/** Activity alone never re-sorts; its sort-relevant causes arrive as their own changes. */
noteActivityChange(): void {
this.retentionPass()
@@ -276,9 +287,11 @@ export class SidebarTemporalOwner {
// Recent ranks a new row at its grace floor until the window closes; re-sort when it does.
private scheduleCreateGraceBoundary(worktrees: readonly Worktree[], now: number): void {
let next = Infinity
+ // Stamps carry no create grace.
const readsRecency =
- this.sortBy === 'recent' ||
- (this.sortBy === 'smart' && !ranksFollowPersistedOrder(this.sortBy, this.smartLatched))
+ !ORCA_SIDEBAR_INPUTS_IS_MAIN &&
+ (this.sortBy === 'recent' ||
+ (this.sortBy === 'smart' && !ranksFollowPersistedOrder(this.sortBy, this.smartLatched)))
if (readsRecency) {
for (const { createdAt } of worktrees) {
const closesAt = (createdAt ?? -Infinity) + CREATE_GRACE_MS
diff --git a/src/main/runtime/sidebar-inputs/sort-stamps-producer.test.ts b/src/main/runtime/sidebar-inputs/sort-stamps-producer.test.ts
index 1eae4600e528..b061b081c069 100644
--- a/src/main/runtime/sidebar-inputs/sort-stamps-producer.test.ts
+++ b/src/main/runtime/sidebar-inputs/sort-stamps-producer.test.ts
@@ -34,6 +34,7 @@ function createHarness() {
const writes: string[] = []
const exits = new Map void>()
const fenced = new Set()
+ const notified: string[] = []
let listener: (event: RuntimeClientEvent) => void = () => {}
const store: SortStampsStore = {
getWorktreeMeta: (id) => meta.get(id),
@@ -67,6 +68,7 @@ function createHarness() {
listener = next
return () => {}
},
+ onStampsWritten: (id) => notified.push(id),
now: () => Date.now()
})
const server = new AgentHookServer()
@@ -79,6 +81,7 @@ function createHarness() {
writes,
exits,
fenced,
+ notified,
sideEffects: (
facts: TerminalSideEffectFact[],
extra: { pane?: string; ptyId?: string; connectionId?: string } = {}
@@ -134,6 +137,8 @@ describe('SortStampsProducer: hook agents', () => {
hook(h.server, 'working')
expect(h.meta.get(WT)).toEqual({ lastActivityAt: T0, smartTier: 'working', smartAt: T0 })
+ // Each write tells clients to re-list the record.
+ expect(h.notified).toEqual([WT])
const finishedAt = advance(20_000)
hook(h.server, 'done')
diff --git a/src/main/runtime/sidebar-inputs/sort-stamps-producer.ts b/src/main/runtime/sidebar-inputs/sort-stamps-producer.ts
index 525b2eeb76a5..fe42bd79ea95 100644
--- a/src/main/runtime/sidebar-inputs/sort-stamps-producer.ts
+++ b/src/main/runtime/sidebar-inputs/sort-stamps-producer.ts
@@ -50,6 +50,8 @@ export type SortStampsSources = {
listener: (event: RuntimeClientEvent) => void,
options: { consumesTerminalSideEffects: true }
) => () => void
+ /** A record's stamps changed; clients re-list it. */
+ onStampsWritten: (worktreeId: string) => void
now: () => number
}
@@ -335,6 +337,7 @@ export class SortStampsProducer {
const next = current && classifySortStampEvent(current, event, now)
if (next) {
writeSortStamps(this.sources.store(), workspace, next)
+ this.sources.onStampsWritten(workspace.worktreeId)
}
}
}
diff --git a/src/renderer/src/components/sidebar/WorktreeList.tsx b/src/renderer/src/components/sidebar/WorktreeList.tsx
index 9de684f1e72a..3aa9589b9f86 100644
--- a/src/renderer/src/components/sidebar/WorktreeList.tsx
+++ b/src/renderer/src/components/sidebar/WorktreeList.tsx
@@ -32,6 +32,7 @@ import { useSidebarSectionRows } from './worktree-list/listing/use-section-rows'
import { useSidebarWorktreeFilters } from './worktree-list/listing/use-filters'
import { useSidebarWorktreeSelection } from './worktree-list/navigation/use-selection'
import { useSidebarWorktreeSortOrder } from './worktree-list/listing/use-sort-order'
+import { useOrderHeldWhileEngaged } from './worktree-list/listing/use-order-hold'
import { useVisibleSidebarWorktrees } from './worktree-list/listing/use-visible-worktrees'
import { useWorktreeStatusMutations } from './worktree-list/drag/use-status-mutations'
import { shouldFiltersHideAllRows } from './sidebar-empty-state-gate'
@@ -107,7 +108,10 @@ const WorktreeList = React.memo(function WorktreeList({
const agentSendTargetWorktreeId = useAgentSendTargetWorktreeId()
const { filterState, hasFilters, clearFilters, revealWorkspaceFilters } =
useSidebarWorktreeFilters()
- const sortedIds = useSidebarWorktreeSortOrder({ repoMap, sortBy })
+ const sortedIds = useOrderHeldWhileEngaged(
+ useSidebarWorktreeSortOrder({ repoMap, sortBy }),
+ sortBy
+ )
const manualOrderCatalog = useMemo(
() => buildWorktreeManualOrderCatalog({ worktrees: allWorktrees, folderWorkspaces }),
[allWorktrees, folderWorkspaces]
diff --git a/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/group-by-none.txt b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/group-by-none.txt
new file mode 100644
index 000000000000..d6ab80b47869
--- /dev/null
+++ b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/group-by-none.txt
@@ -0,0 +1,508 @@
+=== sort=manual projectOrder=manual pinnedInGroups=false ===
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=all label="All" count=11 tone="text-foreground" icon=List hostCounts={runtime:env-1:2 local:7 ssh:gpu-vm:2} hostIds={runtime:env-1:[api::/w/api-y,api::/api] local:[shared::/w/same,orca::/orca,orca::/w/Zeta,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[api::/w/api-y,shared::/w/same,orca::/orca,orca::/w/Zeta,orca-ssh::/orca-ssh,api::/api,lab::/lab,ext::/ext]
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+renderedKeys: 23
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same runtime:env-1|api::/w/api-y local|shared::/w/same |orca::/orca |orca::/w/Zeta |orca-ssh::/orca-ssh runtime:env-1|api::/api |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=api::/w/api-y@runtime:env-1 8=shared::/w/same@local 9=orca::/orca
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=shared::/w/same@local 8=api::/w/api-y@runtime:env-1 9=orca::/orca
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x shared::/w/same api::/w/api-y orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext folder:fw-review folder:fw-notes folder:fw-remote
+-- collapsed: pinned lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+HEADER key=all label="All" count=11 tone="text-foreground" icon=List hostCounts={runtime:env-1:2 local:7 ssh:gpu-vm:2} hostIds={runtime:env-1:[api::/w/api-y,api::/api] local:[shared::/w/same,orca::/orca,orca::/w/Zeta,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[api::/w/api-y,shared::/w/same,orca::/orca,orca::/w/Zeta,orca-ssh::/orca-ssh,api::/api,lab::/lab,ext::/ext]
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+renderedKeys: 17
+placeholders: -
+selectionOrder: runtime:env-1|api::/w/api-y local|shared::/w/same |orca::/orca |orca::/w/Zeta |orca-ssh::/orca-ssh runtime:env-1|api::/api |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=api::/w/api-y@runtime:env-1 2=shared::/w/same@local 3=orca::/orca 4=orca::/w/Zeta 5=orca-ssh::/orca-ssh 6=api::/api@runtime:env-1 7=lab::/lab 8=ext::/ext 9=folder:fw-review@local
+cmd1-9 unmounted: 1=api::/w/api-y@runtime:env-1 2=shared::/w/same@local 3=orca::/orca 4=orca::/w/Zeta 5=orca-ssh::/orca-ssh 6=api::/api@runtime:env-1 7=lab::/lab 8=ext::/ext 9=folder:fw-review@local
+cmd ids unmounted: api::/w/api-y shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext folder:fw-review folder:fw-notes folder:fw-remote
+=== sort=manual projectOrder=manual pinnedInGroups=true ===
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=all label="All" count=17 tone="text-foreground" icon=List hostCounts={local:11 ssh:gpu-vm:4 runtime:env-1:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/Zeta,orca::/w/feat-c,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] runtime:env-1:[api::/w/api-y,api::/api]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,api::/w/api-y,lab::/w/gitlab-mr,shared::/w/same,shared::/w/same,orca::/orca,orca::/w/Zeta,orca-ssh::/orca-ssh,api::/api,orca::/w/feat-c,lab::/lab,ext::/ext]
+ITEM rowKey=all:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=natural owning=project:p-orca parent=all:|orca::/w/feat-a
+ITEM rowKey=all:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca parent=all:|orca::/w/feat-b
+ITEM rowKey=all:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab parent=all:|orca::/w/feat-a
+ITEM rowKey=all:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=all:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+PREFERRED |orca::/w/feat-a -> all:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> all:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> all:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> all:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> all:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> all:ssh:gpu-vm|shared::/w/same
+renderedKeys: 29
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x runtime:env-1|api::/w/api-y local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/orca |orca::/w/Zeta |orca-ssh::/orca-ssh runtime:env-1|api::/api |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=api::/w/api-y@runtime:env-1 7=shared::/w/same@local 8=shared::/w/same@ssh:gpu-vm 9=orca::/orca
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=api::/w/api-y@runtime:env-1 7=shared::/w/same@local 8=shared::/w/same@ssh:gpu-vm 9=orca::/orca
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x api::/w/api-y shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext folder:fw-review folder:fw-notes folder:fw-remote
+-- collapsed: pinned lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+HEADER key=all label="All" count=17 tone="text-foreground" icon=List hostCounts={local:11 ssh:gpu-vm:4 runtime:env-1:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/Zeta,orca::/w/feat-c,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] runtime:env-1:[api::/w/api-y,api::/api]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,api::/w/api-y,lab::/w/gitlab-mr,shared::/w/same,shared::/w/same,orca::/orca,orca::/w/Zeta,orca-ssh::/orca-ssh,api::/api,orca::/w/feat-c,lab::/lab,ext::/ext]
+ITEM rowKey=all:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a lineageCollapsed=true hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=all:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION all: all:|orca::/w/feat-a all:|orca::/w/feat-b all:|orca::/w/feat-c all:|lab::/w/gitlab-mr all:ssh:gpu-vm|orca-ssh::/w/remote-x all:runtime:env-1|api::/w/api-y all:local|shared::/w/same all:ssh:gpu-vm|shared::/w/same all:|orca::/orca all:|orca::/w/Zeta all:|orca-ssh::/orca-ssh all:runtime:env-1|api::/api all:|lab::/lab all:|ext::/ext
+PREFERRED |orca::/w/feat-a -> all:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> all:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> all:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> all:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> all:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> all:ssh:gpu-vm|shared::/w/same
+renderedKeys: 20
+placeholders: -
+selectionOrder: |orca::/w/feat-a ssh:gpu-vm|orca-ssh::/w/remote-x runtime:env-1|api::/w/api-y local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/orca |orca::/w/Zeta |orca-ssh::/orca-ssh runtime:env-1|api::/api |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=api::/w/api-y@runtime:env-1 4=shared::/w/same@local 5=shared::/w/same@ssh:gpu-vm 6=orca::/orca 7=orca::/w/Zeta 8=orca-ssh::/orca-ssh 9=api::/api@runtime:env-1
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=api::/w/api-y@runtime:env-1 4=shared::/w/same@local 5=shared::/w/same@ssh:gpu-vm 6=orca::/orca 7=orca::/w/Zeta 8=orca-ssh::/orca-ssh 9=api::/api@runtime:env-1
+cmd ids unmounted: orca::/w/feat-a orca-ssh::/w/remote-x api::/w/api-y shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext folder:fw-review folder:fw-notes folder:fw-remote
+=== sort=manual projectOrder=recent pinnedInGroups=false === same as sort=manual projectOrder=manual pinnedInGroups=false
+=== sort=manual projectOrder=recent pinnedInGroups=true === same as sort=manual projectOrder=manual pinnedInGroups=true
+=== sort=name projectOrder=manual pinnedInGroups=false ===
+visible: api::/w/api-y orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=all label="All" count=11 tone="text-foreground" icon=List hostCounts={runtime:env-1:2 local:7 ssh:gpu-vm:2} hostIds={runtime:env-1:[api::/w/api-y,api::/api] local:[ext::/ext,lab::/lab,orca::/orca,shared::/w/same,orca::/w/Zeta] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[api::/w/api-y,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,orca::/orca,shared::/w/same,orca::/w/Zeta]
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+renderedKeys: 23
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same runtime:env-1|api::/w/api-y runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh |orca::/orca local|shared::/w/same |orca::/w/Zeta local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=api::/w/api-y@runtime:env-1 8=api::/api@runtime:env-1 9=ext::/ext
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=shared::/w/same@local 8=api::/w/api-y@runtime:env-1 9=api::/api@runtime:env-1
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x shared::/w/same api::/w/api-y api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/orca orca::/w/Zeta folder:fw-review folder:fw-notes folder:fw-remote
+-- collapsed: pinned lineage:orca::/w/feat-a --
+visible: api::/w/api-y orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=all label="All" count=11 tone="text-foreground" icon=List hostCounts={runtime:env-1:2 local:7 ssh:gpu-vm:2} hostIds={runtime:env-1:[api::/w/api-y,api::/api] local:[ext::/ext,lab::/lab,orca::/orca,shared::/w/same,orca::/w/Zeta] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[api::/w/api-y,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,orca::/orca,shared::/w/same,orca::/w/Zeta]
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+renderedKeys: 17
+placeholders: -
+selectionOrder: runtime:env-1|api::/w/api-y runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh |orca::/orca local|shared::/w/same |orca::/w/Zeta local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=api::/w/api-y@runtime:env-1 2=api::/api@runtime:env-1 3=ext::/ext 4=lab::/lab 5=orca-ssh::/orca-ssh 6=orca::/orca 7=shared::/w/same@local 8=orca::/w/Zeta 9=folder:fw-review@local
+cmd1-9 unmounted: 1=api::/w/api-y@runtime:env-1 2=api::/api@runtime:env-1 3=ext::/ext 4=lab::/lab 5=orca-ssh::/orca-ssh 6=orca::/orca 7=shared::/w/same@local 8=orca::/w/Zeta 9=folder:fw-review@local
+cmd ids unmounted: api::/w/api-y api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/orca shared::/w/same orca::/w/Zeta folder:fw-review folder:fw-notes folder:fw-remote
+=== sort=name projectOrder=manual pinnedInGroups=true ===
+visible: api::/w/api-y orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=all label="All" count=17 tone="text-foreground" icon=List hostCounts={runtime:env-1:2 local:11 ssh:gpu-vm:4} hostIds={runtime:env-1:[api::/w/api-y,api::/api] local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,ext::/ext,lab::/lab,orca::/orca,shared::/w/same,orca::/w/Zeta] ssh:gpu-vm:[orca-ssh::/orca-ssh,orca-ssh::/w/remote-x,shared::/w/same]} ids=[api::/w/api-y,orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,orca::/orca,orca-ssh::/w/remote-x,shared::/w/same,shared::/w/same,orca::/w/Zeta]
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=natural owning=project:p-orca parent=all:|orca::/w/feat-a
+ITEM rowKey=all:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca parent=all:|orca::/w/feat-b
+ITEM rowKey=all:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab parent=all:|orca::/w/feat-a
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=all:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+PREFERRED |orca::/w/feat-a -> all:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> all:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> all:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> all:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> all:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> all:ssh:gpu-vm|shared::/w/same
+renderedKeys: 29
+placeholders: -
+selectionOrder: runtime:env-1|api::/w/api-y |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh |orca::/orca ssh:gpu-vm|orca-ssh::/w/remote-x local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/w/Zeta local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=api::/w/api-y@runtime:env-1 2=orca::/w/feat-a#lineage:orca::/w/feat-a 3=orca::/w/feat-b#lineage:orca::/w/feat-b 4=orca::/w/feat-c 5=lab::/w/gitlab-mr 6=api::/api@runtime:env-1 7=ext::/ext 8=lab::/lab 9=orca-ssh::/orca-ssh
+cmd1-9 unmounted: 1=api::/w/api-y@runtime:env-1 2=orca::/w/feat-a 3=orca::/w/feat-b 4=orca::/w/feat-c 5=lab::/w/gitlab-mr 6=api::/api@runtime:env-1 7=ext::/ext 8=lab::/lab 9=orca-ssh::/orca-ssh
+cmd ids unmounted: api::/w/api-y orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x shared::/w/same orca::/w/Zeta folder:fw-review folder:fw-notes folder:fw-remote
+-- collapsed: pinned lineage:orca::/w/feat-a --
+visible: api::/w/api-y orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=all label="All" count=17 tone="text-foreground" icon=List hostCounts={runtime:env-1:2 local:11 ssh:gpu-vm:4} hostIds={runtime:env-1:[api::/w/api-y,api::/api] local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,ext::/ext,lab::/lab,orca::/orca,shared::/w/same,orca::/w/Zeta] ssh:gpu-vm:[orca-ssh::/orca-ssh,orca-ssh::/w/remote-x,shared::/w/same]} ids=[api::/w/api-y,orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,orca::/orca,orca-ssh::/w/remote-x,shared::/w/same,shared::/w/same,orca::/w/Zeta]
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a lineageCollapsed=true hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=all:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION all: all:runtime:env-1|api::/w/api-y all:|orca::/w/feat-a all:|orca::/w/feat-b all:|orca::/w/feat-c all:|lab::/w/gitlab-mr all:runtime:env-1|api::/api all:|ext::/ext all:|lab::/lab all:|orca-ssh::/orca-ssh all:|orca::/orca all:ssh:gpu-vm|orca-ssh::/w/remote-x all:local|shared::/w/same all:ssh:gpu-vm|shared::/w/same all:|orca::/w/Zeta
+PREFERRED |orca::/w/feat-a -> all:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> all:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> all:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> all:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> all:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> all:ssh:gpu-vm|shared::/w/same
+renderedKeys: 20
+placeholders: -
+selectionOrder: runtime:env-1|api::/w/api-y |orca::/w/feat-a runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh |orca::/orca ssh:gpu-vm|orca-ssh::/w/remote-x local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/w/Zeta local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=api::/w/api-y@runtime:env-1 2=orca::/w/feat-a#lineage:orca::/w/feat-a 3=api::/api@runtime:env-1 4=ext::/ext 5=lab::/lab 6=orca-ssh::/orca-ssh 7=orca::/orca 8=orca-ssh::/w/remote-x@ssh:gpu-vm 9=shared::/w/same@local
+cmd1-9 unmounted: 1=api::/w/api-y@runtime:env-1 2=orca::/w/feat-a 3=api::/api@runtime:env-1 4=ext::/ext 5=lab::/lab 6=orca-ssh::/orca-ssh 7=orca::/orca 8=orca-ssh::/w/remote-x@ssh:gpu-vm 9=shared::/w/same@local
+cmd ids unmounted: api::/w/api-y orca::/w/feat-a api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x shared::/w/same orca::/w/Zeta folder:fw-review folder:fw-notes folder:fw-remote
+=== sort=name projectOrder=recent pinnedInGroups=false === same as sort=name projectOrder=manual pinnedInGroups=false
+=== sort=name projectOrder=recent pinnedInGroups=true === same as sort=name projectOrder=manual pinnedInGroups=true
+=== sort=recent projectOrder=manual pinnedInGroups=false ===
+visible: orca::/w/feat-a api::/w/api-y orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=all label="All" count=11 tone="text-foreground" icon=List hostCounts={runtime:env-1:2 local:7 ssh:gpu-vm:2} hostIds={runtime:env-1:[api::/w/api-y,api::/api] local:[orca::/orca,ext::/ext,lab::/lab,shared::/w/same,orca::/w/Zeta] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[api::/w/api-y,orca::/orca,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,shared::/w/same,orca::/w/Zeta]
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+renderedKeys: 23
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same runtime:env-1|api::/w/api-y |orca::/orca runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh local|shared::/w/same |orca::/w/Zeta local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=api::/w/api-y@runtime:env-1 8=orca::/orca 9=api::/api@runtime:env-1
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=shared::/w/same@local 8=api::/w/api-y@runtime:env-1 9=orca::/orca
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x shared::/w/same api::/w/api-y orca::/orca api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/w/Zeta folder:fw-review folder:fw-notes folder:fw-remote
+-- collapsed: pinned lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a api::/w/api-y orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=all label="All" count=11 tone="text-foreground" icon=List hostCounts={runtime:env-1:2 local:7 ssh:gpu-vm:2} hostIds={runtime:env-1:[api::/w/api-y,api::/api] local:[orca::/orca,ext::/ext,lab::/lab,shared::/w/same,orca::/w/Zeta] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[api::/w/api-y,orca::/orca,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,shared::/w/same,orca::/w/Zeta]
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+renderedKeys: 17
+placeholders: -
+selectionOrder: runtime:env-1|api::/w/api-y |orca::/orca runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh local|shared::/w/same |orca::/w/Zeta local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=api::/w/api-y@runtime:env-1 2=orca::/orca 3=api::/api@runtime:env-1 4=ext::/ext 5=lab::/lab 6=orca-ssh::/orca-ssh 7=shared::/w/same@local 8=orca::/w/Zeta 9=folder:fw-review@local
+cmd1-9 unmounted: 1=api::/w/api-y@runtime:env-1 2=orca::/orca 3=api::/api@runtime:env-1 4=ext::/ext 5=lab::/lab 6=orca-ssh::/orca-ssh 7=shared::/w/same@local 8=orca::/w/Zeta 9=folder:fw-review@local
+cmd ids unmounted: api::/w/api-y orca::/orca api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh shared::/w/same orca::/w/Zeta folder:fw-review folder:fw-notes folder:fw-remote
+=== sort=recent projectOrder=manual pinnedInGroups=true ===
+visible: orca::/w/feat-a api::/w/api-y orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=all label="All" count=17 tone="text-foreground" icon=List hostCounts={local:11 runtime:env-1:2 ssh:gpu-vm:4} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/orca,orca::/w/feat-c,lab::/w/gitlab-mr,ext::/ext,lab::/lab,shared::/w/same,orca::/w/Zeta] runtime:env-1:[api::/w/api-y,api::/api] ssh:gpu-vm:[orca-ssh::/orca-ssh,orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,api::/w/api-y,orca::/w/feat-b,orca::/orca,orca::/w/feat-c,lab::/w/gitlab-mr,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,orca-ssh::/w/remote-x,shared::/w/same,shared::/w/same,orca::/w/Zeta]
+ITEM rowKey=all:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=natural owning=project:p-orca parent=all:|orca::/w/feat-a
+ITEM rowKey=all:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca parent=all:|orca::/w/feat-b
+ITEM rowKey=all:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab parent=all:|orca::/w/feat-a
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=all:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+PREFERRED |orca::/w/feat-a -> all:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> all:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> all:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> all:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> all:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> all:ssh:gpu-vm|shared::/w/same
+renderedKeys: 29
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr runtime:env-1|api::/w/api-y |orca::/orca runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh ssh:gpu-vm|orca-ssh::/w/remote-x local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/w/Zeta local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=api::/w/api-y@runtime:env-1 6=orca::/orca 7=api::/api@runtime:env-1 8=ext::/ext 9=lab::/lab
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=api::/w/api-y@runtime:env-1 6=orca::/orca 7=api::/api@runtime:env-1 8=ext::/ext 9=lab::/lab
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr api::/w/api-y orca::/orca api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same orca::/w/Zeta folder:fw-review folder:fw-notes folder:fw-remote
+-- collapsed: pinned lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a api::/w/api-y orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=all label="All" count=17 tone="text-foreground" icon=List hostCounts={local:11 runtime:env-1:2 ssh:gpu-vm:4} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/orca,orca::/w/feat-c,lab::/w/gitlab-mr,ext::/ext,lab::/lab,shared::/w/same,orca::/w/Zeta] runtime:env-1:[api::/w/api-y,api::/api] ssh:gpu-vm:[orca-ssh::/orca-ssh,orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,api::/w/api-y,orca::/w/feat-b,orca::/orca,orca::/w/feat-c,lab::/w/gitlab-mr,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,orca-ssh::/w/remote-x,shared::/w/same,shared::/w/same,orca::/w/Zeta]
+ITEM rowKey=all:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a lineageCollapsed=true hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=all:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION all: all:|orca::/w/feat-a all:|orca::/w/feat-b all:|orca::/w/feat-c all:|lab::/w/gitlab-mr all:runtime:env-1|api::/w/api-y all:|orca::/orca all:runtime:env-1|api::/api all:|ext::/ext all:|lab::/lab all:|orca-ssh::/orca-ssh all:ssh:gpu-vm|orca-ssh::/w/remote-x all:local|shared::/w/same all:ssh:gpu-vm|shared::/w/same all:|orca::/w/Zeta
+PREFERRED |orca::/w/feat-a -> all:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> all:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> all:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> all:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> all:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> all:ssh:gpu-vm|shared::/w/same
+renderedKeys: 20
+placeholders: -
+selectionOrder: |orca::/w/feat-a runtime:env-1|api::/w/api-y |orca::/orca runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh ssh:gpu-vm|orca-ssh::/w/remote-x local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/w/Zeta local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=api::/w/api-y@runtime:env-1 3=orca::/orca 4=api::/api@runtime:env-1 5=ext::/ext 6=lab::/lab 7=orca-ssh::/orca-ssh 8=orca-ssh::/w/remote-x@ssh:gpu-vm 9=shared::/w/same@local
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=api::/w/api-y@runtime:env-1 3=orca::/orca 4=api::/api@runtime:env-1 5=ext::/ext 6=lab::/lab 7=orca-ssh::/orca-ssh 8=orca-ssh::/w/remote-x@ssh:gpu-vm 9=shared::/w/same@local
+cmd ids unmounted: orca::/w/feat-a api::/w/api-y orca::/orca api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same orca::/w/Zeta folder:fw-review folder:fw-notes folder:fw-remote
+=== sort=recent projectOrder=recent pinnedInGroups=false === same as sort=recent projectOrder=manual pinnedInGroups=false
+=== sort=recent projectOrder=recent pinnedInGroups=true === same as sort=recent projectOrder=manual pinnedInGroups=true
+=== sort=smart projectOrder=manual pinnedInGroups=false === same as sort=recent projectOrder=manual pinnedInGroups=false
+=== sort=smart projectOrder=manual pinnedInGroups=true === same as sort=recent projectOrder=manual pinnedInGroups=true
+=== sort=smart projectOrder=recent pinnedInGroups=false === same as sort=recent projectOrder=manual pinnedInGroups=false
+=== sort=smart projectOrder=recent pinnedInGroups=true === same as sort=recent projectOrder=manual pinnedInGroups=true
+=== sort=repo projectOrder=manual pinnedInGroups=false ===
+visible: api::/w/api-y api::/api ext::/ext orca::/w/feat-a lab::/w/gitlab-mr lab::/lab orca::/w/feat-b orca::/w/feat-c orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x orca::/w/Zeta shared::/w/same shared::/w/same
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 lastChild=true children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=all label="All" count=11 tone="text-foreground" icon=List hostCounts={runtime:env-1:2 local:7 ssh:gpu-vm:2} hostIds={runtime:env-1:[api::/w/api-y,api::/api] local:[ext::/ext,lab::/lab,orca::/orca,orca::/w/Zeta,shared::/w/same] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[api::/w/api-y,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,orca::/orca,orca::/w/Zeta,shared::/w/same]
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+renderedKeys: 23
+placeholders: -
+selectionOrder: |orca::/w/feat-a |lab::/w/gitlab-mr |orca::/w/feat-b |orca::/w/feat-c ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same runtime:env-1|api::/w/api-y runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh |orca::/orca |orca::/w/Zeta local|shared::/w/same local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca::/w/feat-b#lineage:orca::/w/feat-b 4=orca::/w/feat-c 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=api::/w/api-y@runtime:env-1 8=api::/api@runtime:env-1 9=ext::/ext
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca::/w/feat-b 4=orca::/w/feat-c 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=shared::/w/same@local 8=api::/w/api-y@runtime:env-1 9=api::/api@runtime:env-1
+cmd ids unmounted: orca::/w/feat-a lab::/w/gitlab-mr orca::/w/feat-b orca::/w/feat-c orca-ssh::/w/remote-x shared::/w/same api::/w/api-y api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/orca orca::/w/Zeta folder:fw-review folder:fw-notes folder:fw-remote
+-- collapsed: pinned lineage:orca::/w/feat-a --
+visible: api::/w/api-y api::/api ext::/ext orca::/w/feat-a lab::/w/gitlab-mr lab::/lab orca::/w/feat-b orca::/w/feat-c orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x orca::/w/Zeta shared::/w/same shared::/w/same
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=all label="All" count=11 tone="text-foreground" icon=List hostCounts={runtime:env-1:2 local:7 ssh:gpu-vm:2} hostIds={runtime:env-1:[api::/w/api-y,api::/api] local:[ext::/ext,lab::/lab,orca::/orca,orca::/w/Zeta,shared::/w/same] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[api::/w/api-y,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,orca::/orca,orca::/w/Zeta,shared::/w/same]
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|lab::/w/gitlab-mr pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+renderedKeys: 17
+placeholders: -
+selectionOrder: runtime:env-1|api::/w/api-y runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh |orca::/orca |orca::/w/Zeta local|shared::/w/same local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=api::/w/api-y@runtime:env-1 2=api::/api@runtime:env-1 3=ext::/ext 4=lab::/lab 5=orca-ssh::/orca-ssh 6=orca::/orca 7=orca::/w/Zeta 8=shared::/w/same@local 9=folder:fw-review@local
+cmd1-9 unmounted: 1=api::/w/api-y@runtime:env-1 2=api::/api@runtime:env-1 3=ext::/ext 4=lab::/lab 5=orca-ssh::/orca-ssh 6=orca::/orca 7=orca::/w/Zeta 8=shared::/w/same@local 9=folder:fw-review@local
+cmd ids unmounted: api::/w/api-y api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/orca orca::/w/Zeta shared::/w/same folder:fw-review folder:fw-notes folder:fw-remote
+=== sort=repo projectOrder=manual pinnedInGroups=true ===
+visible: api::/w/api-y api::/api ext::/ext orca::/w/feat-a lab::/w/gitlab-mr lab::/lab orca::/w/feat-b orca::/w/feat-c orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x orca::/w/Zeta shared::/w/same shared::/w/same
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 lastChild=true children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=all label="All" count=17 tone="text-foreground" icon=List hostCounts={runtime:env-1:2 local:11 ssh:gpu-vm:4} hostIds={runtime:env-1:[api::/w/api-y,api::/api] local:[ext::/ext,orca::/w/feat-a,lab::/w/gitlab-mr,lab::/lab,orca::/w/feat-b,orca::/w/feat-c,orca::/orca,orca::/w/Zeta,shared::/w/same] ssh:gpu-vm:[orca-ssh::/orca-ssh,orca-ssh::/w/remote-x,shared::/w/same]} ids=[api::/w/api-y,api::/api,ext::/ext,orca::/w/feat-a,lab::/w/gitlab-mr,lab::/lab,orca::/w/feat-b,orca::/w/feat-c,orca-ssh::/orca-ssh,orca::/orca,orca-ssh::/w/remote-x,orca::/w/Zeta,shared::/w/same,shared::/w/same]
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=all:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|lab::/w/gitlab-mr depth=1 groupDepth=0 children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab parent=all:|orca::/w/feat-a
+ITEM rowKey=all:|orca::/w/feat-b depth=1 groupDepth=0 lastChild=true children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=natural owning=project:p-orca parent=all:|orca::/w/feat-a
+ITEM rowKey=all:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca parent=all:|orca::/w/feat-b
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=all:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+PREFERRED |orca::/w/feat-a -> all:|orca::/w/feat-a
+PREFERRED |lab::/w/gitlab-mr -> all:|lab::/w/gitlab-mr
+PREFERRED |orca::/w/feat-b -> all:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> all:|orca::/w/feat-c
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> all:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> all:ssh:gpu-vm|shared::/w/same
+renderedKeys: 29
+placeholders: -
+selectionOrder: runtime:env-1|api::/w/api-y runtime:env-1|api::/api |ext::/ext |orca::/w/feat-a |lab::/w/gitlab-mr |orca::/w/feat-b |orca::/w/feat-c |lab::/lab |orca-ssh::/orca-ssh |orca::/orca ssh:gpu-vm|orca-ssh::/w/remote-x |orca::/w/Zeta local|shared::/w/same ssh:gpu-vm|shared::/w/same local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=api::/w/api-y@runtime:env-1 2=api::/api@runtime:env-1 3=ext::/ext 4=orca::/w/feat-a#lineage:orca::/w/feat-a 5=lab::/w/gitlab-mr 6=orca::/w/feat-b#lineage:orca::/w/feat-b 7=orca::/w/feat-c 8=lab::/lab 9=orca-ssh::/orca-ssh
+cmd1-9 unmounted: 1=api::/w/api-y@runtime:env-1 2=api::/api@runtime:env-1 3=ext::/ext 4=orca::/w/feat-a 5=lab::/w/gitlab-mr 6=orca::/w/feat-b 7=orca::/w/feat-c 8=lab::/lab 9=orca-ssh::/orca-ssh
+cmd ids unmounted: api::/w/api-y api::/api ext::/ext orca::/w/feat-a lab::/w/gitlab-mr orca::/w/feat-b orca::/w/feat-c lab::/lab orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x orca::/w/Zeta shared::/w/same folder:fw-review folder:fw-notes folder:fw-remote
+-- collapsed: pinned lineage:orca::/w/feat-a --
+visible: api::/w/api-y api::/api ext::/ext orca::/w/feat-a lab::/w/gitlab-mr lab::/lab orca::/w/feat-b orca::/w/feat-c orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x orca::/w/Zeta shared::/w/same shared::/w/same
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=all label="All" count=17 tone="text-foreground" icon=List hostCounts={runtime:env-1:2 local:11 ssh:gpu-vm:4} hostIds={runtime:env-1:[api::/w/api-y,api::/api] local:[ext::/ext,orca::/w/feat-a,lab::/w/gitlab-mr,lab::/lab,orca::/w/feat-b,orca::/w/feat-c,orca::/orca,orca::/w/Zeta,shared::/w/same] ssh:gpu-vm:[orca-ssh::/orca-ssh,orca-ssh::/w/remote-x,shared::/w/same]} ids=[api::/w/api-y,api::/api,ext::/ext,orca::/w/feat-a,lab::/w/gitlab-mr,lab::/lab,orca::/w/feat-b,orca::/w/feat-c,orca-ssh::/orca-ssh,orca::/orca,orca-ssh::/w/remote-x,orca::/w/Zeta,shared::/w/same,shared::/w/same]
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=all:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a lineageCollapsed=true hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=all:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|lab::/w/gitlab-mr pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION all: all:runtime:env-1|api::/w/api-y all:runtime:env-1|api::/api all:|ext::/ext all:|orca::/w/feat-a all:|lab::/w/gitlab-mr all:|orca::/w/feat-b all:|orca::/w/feat-c all:|lab::/lab all:|orca-ssh::/orca-ssh all:|orca::/orca all:ssh:gpu-vm|orca-ssh::/w/remote-x all:|orca::/w/Zeta all:local|shared::/w/same all:ssh:gpu-vm|shared::/w/same
+PREFERRED |orca::/w/feat-a -> all:|orca::/w/feat-a
+PREFERRED |lab::/w/gitlab-mr -> all:|lab::/w/gitlab-mr
+PREFERRED |orca::/w/feat-b -> all:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> all:|orca::/w/feat-c
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> all:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> all:ssh:gpu-vm|shared::/w/same
+renderedKeys: 20
+placeholders: -
+selectionOrder: runtime:env-1|api::/w/api-y runtime:env-1|api::/api |ext::/ext |orca::/w/feat-a |lab::/lab |orca-ssh::/orca-ssh |orca::/orca ssh:gpu-vm|orca-ssh::/w/remote-x |orca::/w/Zeta local|shared::/w/same ssh:gpu-vm|shared::/w/same local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=api::/w/api-y@runtime:env-1 2=api::/api@runtime:env-1 3=ext::/ext 4=orca::/w/feat-a#lineage:orca::/w/feat-a 5=lab::/lab 6=orca-ssh::/orca-ssh 7=orca::/orca 8=orca-ssh::/w/remote-x@ssh:gpu-vm 9=orca::/w/Zeta
+cmd1-9 unmounted: 1=api::/w/api-y@runtime:env-1 2=api::/api@runtime:env-1 3=ext::/ext 4=orca::/w/feat-a 5=lab::/lab 6=orca-ssh::/orca-ssh 7=orca::/orca 8=orca-ssh::/w/remote-x@ssh:gpu-vm 9=orca::/w/Zeta
+cmd ids unmounted: api::/w/api-y api::/api ext::/ext orca::/w/feat-a lab::/lab orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x orca::/w/Zeta shared::/w/same folder:fw-review folder:fw-notes folder:fw-remote
+=== sort=repo projectOrder=recent pinnedInGroups=false === same as sort=repo projectOrder=manual pinnedInGroups=false
+=== sort=repo projectOrder=recent pinnedInGroups=true === same as sort=repo projectOrder=manual pinnedInGroups=true
diff --git a/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/group-by-pr-status.txt b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/group-by-pr-status.txt
new file mode 100644
index 000000000000..c20712016252
--- /dev/null
+++ b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/group-by-pr-status.txt
@@ -0,0 +1,520 @@
+=== sort=manual projectOrder=manual pinnedInGroups=false ===
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=pr:in-review label="In review" count=1 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={runtime:env-1:1} hostIds={runtime:env-1:[api::/w/api-y]} ids=[api::/w/api-y]
+ITEM rowKey=pr:in-review:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=pr:in-progress label="In progress" count=9 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={local:6 ssh:gpu-vm:2 runtime:env-1:1} hostIds={local:[shared::/w/same,orca::/orca,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[shared::/w/same,orca::/orca,orca-ssh::/orca-ssh,api::/api,lab::/lab,ext::/ext]
+ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=pr:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=pr:closed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+renderedKeys: 25
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same runtime:env-1|api::/w/api-y local|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=api::/w/api-y@runtime:env-1 8=shared::/w/same@local 9=orca::/orca
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=api::/w/api-y@runtime:env-1 8=shared::/w/same@local 9=orca::/orca
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x shared::/w/same api::/w/api-y orca::/orca orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext folder:fw-review folder:fw-notes folder:fw-remote orca::/w/Zeta
+-- collapsed: pinned pr:in-progress lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+HEADER key=pr:in-review label="In review" count=1 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={runtime:env-1:1} hostIds={runtime:env-1:[api::/w/api-y]} ids=[api::/w/api-y]
+ITEM rowKey=pr:in-review:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=pr:in-progress label="In progress" count=9 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={local:6 ssh:gpu-vm:2 runtime:env-1:1} hostIds={local:[shared::/w/same,orca::/orca,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[shared::/w/same,orca::/orca,orca-ssh::/orca-ssh,api::/api,lab::/lab,ext::/ext]
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=pr:closed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION pr:in-progress: pr:in-progress:local|shared::/w/same pr:in-progress:|orca::/orca pr:in-progress:|orca-ssh::/orca-ssh pr:in-progress:runtime:env-1|api::/api pr:in-progress:|lab::/lab pr:in-progress:|ext::/ext
+renderedKeys: 7
+placeholders: -
+selectionOrder: runtime:env-1|api::/w/api-y |orca::/w/Zeta
+cmd1-9 mounted: 1=api::/w/api-y@runtime:env-1 2=orca::/w/Zeta
+cmd1-9 unmounted: 1=api::/w/api-y@runtime:env-1 2=orca::/w/Zeta
+cmd ids unmounted: api::/w/api-y orca::/w/Zeta
+=== sort=manual projectOrder=manual pinnedInGroups=true ===
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=pr:done label="Done" count=1 tone="text-workspace-status-done" icon=ConductorDoneIcon hostCounts={local:1} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+ITEM rowKey=pr:done:|orca::/w/feat-b depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+HEADER key=pr:in-review label="In review" count=2 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={local:1 runtime:env-1:1} hostIds={local:[orca::/w/feat-a] runtime:env-1:[api::/w/api-y]} ids=[orca::/w/feat-a,api::/w/api-y]
+ITEM rowKey=pr:in-review:|orca::/w/feat-a depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-review:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=pr:in-progress label="In progress" count=13 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={ssh:gpu-vm:4 local:8 runtime:env-1:1} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] local:[lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/feat-c,lab::/lab,ext::/ext] runtime:env-1:[api::/api]} ids=[orca-ssh::/w/remote-x,lab::/w/gitlab-mr,shared::/w/same,shared::/w/same,orca::/orca,orca-ssh::/orca-ssh,api::/api,orca::/w/feat-c,lab::/lab,ext::/ext]
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|lab::/w/gitlab-mr depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=pr:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=pr:closed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+PREFERRED |orca::/w/feat-a -> pr:in-review:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> pr:done:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> pr:in-progress:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> pr:in-progress:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> pr:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 32
+placeholders: -
+selectionOrder: |orca::/w/feat-b |orca::/w/feat-a runtime:env-1|api::/w/api-y ssh:gpu-vm|orca-ssh::/w/remote-x |lab::/w/gitlab-mr local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |orca::/w/feat-c |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-b#lineage:orca::/w/feat-b 2=orca::/w/feat-a#lineage:orca::/w/feat-a 3=api::/w/api-y@runtime:env-1 4=orca-ssh::/w/remote-x@ssh:gpu-vm 5=lab::/w/gitlab-mr 6=shared::/w/same@local 7=shared::/w/same@ssh:gpu-vm 8=orca::/orca 9=orca-ssh::/orca-ssh
+cmd1-9 unmounted: 1=orca::/w/feat-b 2=orca::/w/feat-a 3=api::/w/api-y@runtime:env-1 4=orca-ssh::/w/remote-x@ssh:gpu-vm 5=lab::/w/gitlab-mr 6=shared::/w/same@local 7=shared::/w/same@ssh:gpu-vm 8=orca::/orca 9=orca-ssh::/orca-ssh
+cmd ids unmounted: orca::/w/feat-b orca::/w/feat-a api::/w/api-y orca-ssh::/w/remote-x lab::/w/gitlab-mr shared::/w/same orca::/orca orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext folder:fw-review folder:fw-notes folder:fw-remote orca::/w/Zeta
+-- collapsed: pinned pr:in-review pr:closed lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+HEADER key=pr:done label="Done" count=1 tone="text-workspace-status-done" icon=ConductorDoneIcon hostCounts={local:1} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+ITEM rowKey=pr:done:|orca::/w/feat-b depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+HEADER key=pr:in-review label="In review" count=2 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={local:1 runtime:env-1:1} hostIds={local:[orca::/w/feat-a] runtime:env-1:[api::/w/api-y]} ids=[orca::/w/feat-a,api::/w/api-y]
+HEADER key=pr:in-progress label="In progress" count=13 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={ssh:gpu-vm:4 local:8 runtime:env-1:1} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] local:[lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/feat-c,lab::/lab,ext::/ext] runtime:env-1:[api::/api]} ids=[orca-ssh::/w/remote-x,lab::/w/gitlab-mr,shared::/w/same,shared::/w/same,orca::/orca,orca-ssh::/orca-ssh,api::/api,orca::/w/feat-c,lab::/lab,ext::/ext]
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|lab::/w/gitlab-mr depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=pr:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION pr:in-review: pr:in-review:|orca::/w/feat-a pr:in-review:runtime:env-1|api::/w/api-y
+SECTION pr:closed: pr:closed:|orca::/w/Zeta
+PREFERRED |orca::/w/feat-a -> pr:in-review:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> pr:done:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> pr:in-progress:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> pr:in-progress:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> pr:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 23
+placeholders: -
+selectionOrder: |orca::/w/feat-b ssh:gpu-vm|orca-ssh::/w/remote-x |lab::/w/gitlab-mr local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |orca::/w/feat-c |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-b 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=lab::/w/gitlab-mr 4=shared::/w/same@local 5=shared::/w/same@ssh:gpu-vm 6=orca::/orca 7=orca-ssh::/orca-ssh 8=api::/api@runtime:env-1 9=orca::/w/feat-c
+cmd1-9 unmounted: 1=orca::/w/feat-b 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=lab::/w/gitlab-mr 4=shared::/w/same@local 5=shared::/w/same@ssh:gpu-vm 6=orca::/orca 7=orca-ssh::/orca-ssh 8=api::/api@runtime:env-1 9=orca::/w/feat-c
+cmd ids unmounted: orca::/w/feat-b orca-ssh::/w/remote-x lab::/w/gitlab-mr shared::/w/same orca::/orca orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext folder:fw-review folder:fw-notes folder:fw-remote
+=== sort=manual projectOrder=recent pinnedInGroups=false === same as sort=manual projectOrder=manual pinnedInGroups=false
+=== sort=manual projectOrder=recent pinnedInGroups=true === same as sort=manual projectOrder=manual pinnedInGroups=true
+=== sort=name projectOrder=manual pinnedInGroups=false ===
+visible: api::/w/api-y orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=pr:in-review label="In review" count=1 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={runtime:env-1:1} hostIds={runtime:env-1:[api::/w/api-y]} ids=[api::/w/api-y]
+ITEM rowKey=pr:in-review:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=pr:in-progress label="In progress" count=9 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={runtime:env-1:1 local:6 ssh:gpu-vm:2} hostIds={runtime:env-1:[api::/api] local:[ext::/ext,lab::/lab,orca::/orca,shared::/w/same] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,orca::/orca,shared::/w/same]
+ITEM rowKey=pr:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=pr:in-progress:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=pr:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=pr:closed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+renderedKeys: 25
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same runtime:env-1|api::/w/api-y runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh |orca::/orca local|shared::/w/same local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=api::/w/api-y@runtime:env-1 8=api::/api@runtime:env-1 9=ext::/ext
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=api::/w/api-y@runtime:env-1 8=shared::/w/same@local 9=api::/api@runtime:env-1
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x shared::/w/same api::/w/api-y api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/orca folder:fw-review folder:fw-notes folder:fw-remote orca::/w/Zeta
+-- collapsed: pinned pr:in-progress lineage:orca::/w/feat-a --
+visible: api::/w/api-y orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=pr:in-review label="In review" count=1 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={runtime:env-1:1} hostIds={runtime:env-1:[api::/w/api-y]} ids=[api::/w/api-y]
+ITEM rowKey=pr:in-review:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=pr:in-progress label="In progress" count=9 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={runtime:env-1:1 local:6 ssh:gpu-vm:2} hostIds={runtime:env-1:[api::/api] local:[ext::/ext,lab::/lab,orca::/orca,shared::/w/same] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,orca::/orca,shared::/w/same]
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=pr:closed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION pr:in-progress: pr:in-progress:runtime:env-1|api::/api pr:in-progress:|ext::/ext pr:in-progress:|lab::/lab pr:in-progress:|orca-ssh::/orca-ssh pr:in-progress:|orca::/orca pr:in-progress:local|shared::/w/same
+renderedKeys: 7
+placeholders: -
+selectionOrder: runtime:env-1|api::/w/api-y |orca::/w/Zeta
+cmd1-9 mounted: 1=api::/w/api-y@runtime:env-1 2=orca::/w/Zeta
+cmd1-9 unmounted: 1=api::/w/api-y@runtime:env-1 2=orca::/w/Zeta
+cmd ids unmounted: api::/w/api-y orca::/w/Zeta
+=== sort=name projectOrder=manual pinnedInGroups=true ===
+visible: api::/w/api-y orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=pr:done label="Done" count=1 tone="text-workspace-status-done" icon=ConductorDoneIcon hostCounts={local:1} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+ITEM rowKey=pr:done:|orca::/w/feat-b depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+HEADER key=pr:in-review label="In review" count=2 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/feat-a]} ids=[api::/w/api-y,orca::/w/feat-a]
+ITEM rowKey=pr:in-review:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=pr:in-review:|orca::/w/feat-a depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+HEADER key=pr:in-progress label="In progress" count=13 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={local:8 runtime:env-1:1 ssh:gpu-vm:4} hostIds={local:[orca::/w/feat-c,lab::/w/gitlab-mr,ext::/ext,lab::/lab,orca::/orca,shared::/w/same] runtime:env-1:[api::/api] ssh:gpu-vm:[orca-ssh::/orca-ssh,orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-c,lab::/w/gitlab-mr,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,orca::/orca,orca-ssh::/w/remote-x,shared::/w/same,shared::/w/same]
+ITEM rowKey=pr:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|lab::/w/gitlab-mr depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=pr:in-progress:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=pr:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=pr:closed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+PREFERRED |orca::/w/feat-a -> pr:in-review:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> pr:done:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> pr:in-progress:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> pr:in-progress:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> pr:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 32
+placeholders: -
+selectionOrder: |orca::/w/feat-b runtime:env-1|api::/w/api-y |orca::/w/feat-a |orca::/w/feat-c |lab::/w/gitlab-mr runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh |orca::/orca ssh:gpu-vm|orca-ssh::/w/remote-x local|shared::/w/same ssh:gpu-vm|shared::/w/same local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-b#lineage:orca::/w/feat-b 2=api::/w/api-y@runtime:env-1 3=orca::/w/feat-a#lineage:orca::/w/feat-a 4=orca::/w/feat-c 5=lab::/w/gitlab-mr 6=api::/api@runtime:env-1 7=ext::/ext 8=lab::/lab 9=orca-ssh::/orca-ssh
+cmd1-9 unmounted: 1=orca::/w/feat-b 2=api::/w/api-y@runtime:env-1 3=orca::/w/feat-a 4=orca::/w/feat-c 5=lab::/w/gitlab-mr 6=api::/api@runtime:env-1 7=ext::/ext 8=lab::/lab 9=orca-ssh::/orca-ssh
+cmd ids unmounted: orca::/w/feat-b api::/w/api-y orca::/w/feat-a orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x shared::/w/same folder:fw-review folder:fw-notes folder:fw-remote orca::/w/Zeta
+-- collapsed: pinned pr:in-review pr:closed lineage:orca::/w/feat-a --
+visible: api::/w/api-y orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=pr:done label="Done" count=1 tone="text-workspace-status-done" icon=ConductorDoneIcon hostCounts={local:1} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+ITEM rowKey=pr:done:|orca::/w/feat-b depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+HEADER key=pr:in-review label="In review" count=2 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/feat-a]} ids=[api::/w/api-y,orca::/w/feat-a]
+HEADER key=pr:in-progress label="In progress" count=13 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={local:8 runtime:env-1:1 ssh:gpu-vm:4} hostIds={local:[orca::/w/feat-c,lab::/w/gitlab-mr,ext::/ext,lab::/lab,orca::/orca,shared::/w/same] runtime:env-1:[api::/api] ssh:gpu-vm:[orca-ssh::/orca-ssh,orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-c,lab::/w/gitlab-mr,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,orca::/orca,orca-ssh::/w/remote-x,shared::/w/same,shared::/w/same]
+ITEM rowKey=pr:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|lab::/w/gitlab-mr depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=pr:in-progress:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=pr:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION pr:in-review: pr:in-review:runtime:env-1|api::/w/api-y pr:in-review:|orca::/w/feat-a
+SECTION pr:closed: pr:closed:|orca::/w/Zeta
+PREFERRED |orca::/w/feat-a -> pr:in-review:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> pr:done:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> pr:in-progress:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> pr:in-progress:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> pr:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 23
+placeholders: -
+selectionOrder: |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh |orca::/orca ssh:gpu-vm|orca-ssh::/w/remote-x local|shared::/w/same ssh:gpu-vm|shared::/w/same local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-b 2=orca::/w/feat-c 3=lab::/w/gitlab-mr 4=api::/api@runtime:env-1 5=ext::/ext 6=lab::/lab 7=orca-ssh::/orca-ssh 8=orca::/orca 9=orca-ssh::/w/remote-x@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca::/w/feat-b 2=orca::/w/feat-c 3=lab::/w/gitlab-mr 4=api::/api@runtime:env-1 5=ext::/ext 6=lab::/lab 7=orca-ssh::/orca-ssh 8=orca::/orca 9=orca-ssh::/w/remote-x@ssh:gpu-vm
+cmd ids unmounted: orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x shared::/w/same folder:fw-review folder:fw-notes folder:fw-remote
+=== sort=name projectOrder=recent pinnedInGroups=false === same as sort=name projectOrder=manual pinnedInGroups=false
+=== sort=name projectOrder=recent pinnedInGroups=true === same as sort=name projectOrder=manual pinnedInGroups=true
+=== sort=recent projectOrder=manual pinnedInGroups=false ===
+visible: orca::/w/feat-a api::/w/api-y orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=pr:in-review label="In review" count=1 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={runtime:env-1:1} hostIds={runtime:env-1:[api::/w/api-y]} ids=[api::/w/api-y]
+ITEM rowKey=pr:in-review:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=pr:in-progress label="In progress" count=9 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={local:6 runtime:env-1:1 ssh:gpu-vm:2} hostIds={local:[orca::/orca,ext::/ext,lab::/lab,shared::/w/same] runtime:env-1:[api::/api] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[orca::/orca,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,shared::/w/same]
+ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=pr:in-progress:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=pr:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=pr:closed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+renderedKeys: 25
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same runtime:env-1|api::/w/api-y |orca::/orca runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh local|shared::/w/same local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=api::/w/api-y@runtime:env-1 8=orca::/orca 9=api::/api@runtime:env-1
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=api::/w/api-y@runtime:env-1 8=shared::/w/same@local 9=orca::/orca
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x shared::/w/same api::/w/api-y orca::/orca api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh folder:fw-review folder:fw-notes folder:fw-remote orca::/w/Zeta
+-- collapsed: pinned pr:in-progress lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a api::/w/api-y orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=pr:in-review label="In review" count=1 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={runtime:env-1:1} hostIds={runtime:env-1:[api::/w/api-y]} ids=[api::/w/api-y]
+ITEM rowKey=pr:in-review:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=pr:in-progress label="In progress" count=9 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={local:6 runtime:env-1:1 ssh:gpu-vm:2} hostIds={local:[orca::/orca,ext::/ext,lab::/lab,shared::/w/same] runtime:env-1:[api::/api] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[orca::/orca,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,shared::/w/same]
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=pr:closed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION pr:in-progress: pr:in-progress:|orca::/orca pr:in-progress:runtime:env-1|api::/api pr:in-progress:|ext::/ext pr:in-progress:|lab::/lab pr:in-progress:|orca-ssh::/orca-ssh pr:in-progress:local|shared::/w/same
+renderedKeys: 7
+placeholders: -
+selectionOrder: runtime:env-1|api::/w/api-y |orca::/w/Zeta
+cmd1-9 mounted: 1=api::/w/api-y@runtime:env-1 2=orca::/w/Zeta
+cmd1-9 unmounted: 1=api::/w/api-y@runtime:env-1 2=orca::/w/Zeta
+cmd ids unmounted: api::/w/api-y orca::/w/Zeta
+=== sort=recent projectOrder=manual pinnedInGroups=true ===
+visible: orca::/w/feat-a api::/w/api-y orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=pr:done label="Done" count=1 tone="text-workspace-status-done" icon=ConductorDoneIcon hostCounts={local:1} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+ITEM rowKey=pr:done:|orca::/w/feat-b depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+HEADER key=pr:in-review label="In review" count=2 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={local:1 runtime:env-1:1} hostIds={local:[orca::/w/feat-a] runtime:env-1:[api::/w/api-y]} ids=[orca::/w/feat-a,api::/w/api-y]
+ITEM rowKey=pr:in-review:|orca::/w/feat-a depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-review:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=pr:in-progress label="In progress" count=13 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={local:8 runtime:env-1:1 ssh:gpu-vm:4} hostIds={local:[orca::/orca,orca::/w/feat-c,lab::/w/gitlab-mr,ext::/ext,lab::/lab,shared::/w/same] runtime:env-1:[api::/api] ssh:gpu-vm:[orca-ssh::/orca-ssh,orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/orca,orca::/w/feat-c,lab::/w/gitlab-mr,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,orca-ssh::/w/remote-x,shared::/w/same,shared::/w/same]
+ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|lab::/w/gitlab-mr depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=pr:in-progress:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=pr:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=pr:closed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+PREFERRED |orca::/w/feat-a -> pr:in-review:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> pr:done:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> pr:in-progress:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> pr:in-progress:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> pr:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 32
+placeholders: -
+selectionOrder: |orca::/w/feat-b |orca::/w/feat-a runtime:env-1|api::/w/api-y |orca::/orca |orca::/w/feat-c |lab::/w/gitlab-mr runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh ssh:gpu-vm|orca-ssh::/w/remote-x local|shared::/w/same ssh:gpu-vm|shared::/w/same local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-b#lineage:orca::/w/feat-b 2=orca::/w/feat-a#lineage:orca::/w/feat-a 3=api::/w/api-y@runtime:env-1 4=orca::/orca 5=orca::/w/feat-c 6=lab::/w/gitlab-mr 7=api::/api@runtime:env-1 8=ext::/ext 9=lab::/lab
+cmd1-9 unmounted: 1=orca::/w/feat-b 2=orca::/w/feat-a 3=api::/w/api-y@runtime:env-1 4=orca::/orca 5=orca::/w/feat-c 6=lab::/w/gitlab-mr 7=api::/api@runtime:env-1 8=ext::/ext 9=lab::/lab
+cmd ids unmounted: orca::/w/feat-b orca::/w/feat-a api::/w/api-y orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same folder:fw-review folder:fw-notes folder:fw-remote orca::/w/Zeta
+-- collapsed: pinned pr:in-review pr:closed lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a api::/w/api-y orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=pr:done label="Done" count=1 tone="text-workspace-status-done" icon=ConductorDoneIcon hostCounts={local:1} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+ITEM rowKey=pr:done:|orca::/w/feat-b depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+HEADER key=pr:in-review label="In review" count=2 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={local:1 runtime:env-1:1} hostIds={local:[orca::/w/feat-a] runtime:env-1:[api::/w/api-y]} ids=[orca::/w/feat-a,api::/w/api-y]
+HEADER key=pr:in-progress label="In progress" count=13 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={local:8 runtime:env-1:1 ssh:gpu-vm:4} hostIds={local:[orca::/orca,orca::/w/feat-c,lab::/w/gitlab-mr,ext::/ext,lab::/lab,shared::/w/same] runtime:env-1:[api::/api] ssh:gpu-vm:[orca-ssh::/orca-ssh,orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/orca,orca::/w/feat-c,lab::/w/gitlab-mr,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,orca-ssh::/w/remote-x,shared::/w/same,shared::/w/same]
+ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|lab::/w/gitlab-mr depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=pr:in-progress:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=pr:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION pr:in-review: pr:in-review:|orca::/w/feat-a pr:in-review:runtime:env-1|api::/w/api-y
+SECTION pr:closed: pr:closed:|orca::/w/Zeta
+PREFERRED |orca::/w/feat-a -> pr:in-review:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> pr:done:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> pr:in-progress:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> pr:in-progress:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> pr:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 23
+placeholders: -
+selectionOrder: |orca::/w/feat-b |orca::/orca |orca::/w/feat-c |lab::/w/gitlab-mr runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh ssh:gpu-vm|orca-ssh::/w/remote-x local|shared::/w/same ssh:gpu-vm|shared::/w/same local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-b 2=orca::/orca 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=api::/api@runtime:env-1 6=ext::/ext 7=lab::/lab 8=orca-ssh::/orca-ssh 9=orca-ssh::/w/remote-x@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca::/w/feat-b 2=orca::/orca 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=api::/api@runtime:env-1 6=ext::/ext 7=lab::/lab 8=orca-ssh::/orca-ssh 9=orca-ssh::/w/remote-x@ssh:gpu-vm
+cmd ids unmounted: orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same folder:fw-review folder:fw-notes folder:fw-remote
+=== sort=recent projectOrder=recent pinnedInGroups=false === same as sort=recent projectOrder=manual pinnedInGroups=false
+=== sort=recent projectOrder=recent pinnedInGroups=true === same as sort=recent projectOrder=manual pinnedInGroups=true
+=== sort=smart projectOrder=manual pinnedInGroups=false === same as sort=recent projectOrder=manual pinnedInGroups=false
+=== sort=smart projectOrder=manual pinnedInGroups=true === same as sort=recent projectOrder=manual pinnedInGroups=true
+=== sort=smart projectOrder=recent pinnedInGroups=false === same as sort=recent projectOrder=manual pinnedInGroups=false
+=== sort=smart projectOrder=recent pinnedInGroups=true === same as sort=recent projectOrder=manual pinnedInGroups=true
+=== sort=repo projectOrder=manual pinnedInGroups=false ===
+visible: api::/w/api-y api::/api ext::/ext orca::/w/feat-a lab::/w/gitlab-mr lab::/lab orca::/w/feat-b orca::/w/feat-c orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x orca::/w/Zeta shared::/w/same shared::/w/same
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 lastChild=true children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=pr:in-review label="In review" count=1 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={runtime:env-1:1} hostIds={runtime:env-1:[api::/w/api-y]} ids=[api::/w/api-y]
+ITEM rowKey=pr:in-review:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=pr:in-progress label="In progress" count=9 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={runtime:env-1:1 local:6 ssh:gpu-vm:2} hostIds={runtime:env-1:[api::/api] local:[ext::/ext,lab::/lab,orca::/orca,shared::/w/same] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,orca::/orca,shared::/w/same]
+ITEM rowKey=pr:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=pr:in-progress:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=pr:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=pr:closed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+renderedKeys: 25
+placeholders: -
+selectionOrder: |orca::/w/feat-a |lab::/w/gitlab-mr |orca::/w/feat-b |orca::/w/feat-c ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same runtime:env-1|api::/w/api-y runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh |orca::/orca local|shared::/w/same local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca::/w/feat-b#lineage:orca::/w/feat-b 4=orca::/w/feat-c 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=api::/w/api-y@runtime:env-1 8=api::/api@runtime:env-1 9=ext::/ext
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca::/w/feat-b 4=orca::/w/feat-c 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=api::/w/api-y@runtime:env-1 8=shared::/w/same@local 9=api::/api@runtime:env-1
+cmd ids unmounted: orca::/w/feat-a lab::/w/gitlab-mr orca::/w/feat-b orca::/w/feat-c orca-ssh::/w/remote-x shared::/w/same api::/w/api-y api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/orca folder:fw-review folder:fw-notes folder:fw-remote orca::/w/Zeta
+-- collapsed: pinned pr:in-progress lineage:orca::/w/feat-a --
+visible: api::/w/api-y api::/api ext::/ext orca::/w/feat-a lab::/w/gitlab-mr lab::/lab orca::/w/feat-b orca::/w/feat-c orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x orca::/w/Zeta shared::/w/same shared::/w/same
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=pr:in-review label="In review" count=1 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={runtime:env-1:1} hostIds={runtime:env-1:[api::/w/api-y]} ids=[api::/w/api-y]
+ITEM rowKey=pr:in-review:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=pr:in-progress label="In progress" count=9 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={runtime:env-1:1 local:6 ssh:gpu-vm:2} hostIds={runtime:env-1:[api::/api] local:[ext::/ext,lab::/lab,orca::/orca,shared::/w/same] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,orca::/orca,shared::/w/same]
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=pr:closed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|lab::/w/gitlab-mr pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION pr:in-progress: pr:in-progress:runtime:env-1|api::/api pr:in-progress:|ext::/ext pr:in-progress:|lab::/lab pr:in-progress:|orca-ssh::/orca-ssh pr:in-progress:|orca::/orca pr:in-progress:local|shared::/w/same
+renderedKeys: 7
+placeholders: -
+selectionOrder: runtime:env-1|api::/w/api-y |orca::/w/Zeta
+cmd1-9 mounted: 1=api::/w/api-y@runtime:env-1 2=orca::/w/Zeta
+cmd1-9 unmounted: 1=api::/w/api-y@runtime:env-1 2=orca::/w/Zeta
+cmd ids unmounted: api::/w/api-y orca::/w/Zeta
+=== sort=repo projectOrder=manual pinnedInGroups=true ===
+visible: api::/w/api-y api::/api ext::/ext orca::/w/feat-a lab::/w/gitlab-mr lab::/lab orca::/w/feat-b orca::/w/feat-c orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x orca::/w/Zeta shared::/w/same shared::/w/same
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 lastChild=true children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=pr:done label="Done" count=1 tone="text-workspace-status-done" icon=ConductorDoneIcon hostCounts={local:1} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+ITEM rowKey=pr:done:|orca::/w/feat-b depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+HEADER key=pr:in-review label="In review" count=2 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/feat-a]} ids=[api::/w/api-y,orca::/w/feat-a]
+ITEM rowKey=pr:in-review:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=pr:in-review:|orca::/w/feat-a depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+HEADER key=pr:in-progress label="In progress" count=13 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={runtime:env-1:1 local:8 ssh:gpu-vm:4} hostIds={runtime:env-1:[api::/api] local:[ext::/ext,lab::/w/gitlab-mr,lab::/lab,orca::/w/feat-c,orca::/orca,shared::/w/same] ssh:gpu-vm:[orca-ssh::/orca-ssh,orca-ssh::/w/remote-x,shared::/w/same]} ids=[api::/api,ext::/ext,lab::/w/gitlab-mr,lab::/lab,orca::/w/feat-c,orca-ssh::/orca-ssh,orca::/orca,orca-ssh::/w/remote-x,shared::/w/same,shared::/w/same]
+ITEM rowKey=pr:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=pr:in-progress:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=pr:in-progress:|lab::/w/gitlab-mr depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=pr:closed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+PREFERRED |orca::/w/feat-a -> pr:in-review:|orca::/w/feat-a
+PREFERRED |lab::/w/gitlab-mr -> pr:in-progress:|lab::/w/gitlab-mr
+PREFERRED |orca::/w/feat-b -> pr:done:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> pr:in-progress:|orca::/w/feat-c
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> pr:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 32
+placeholders: -
+selectionOrder: |orca::/w/feat-b runtime:env-1|api::/w/api-y |orca::/w/feat-a runtime:env-1|api::/api |ext::/ext |lab::/w/gitlab-mr |lab::/lab |orca::/w/feat-c |orca-ssh::/orca-ssh |orca::/orca ssh:gpu-vm|orca-ssh::/w/remote-x local|shared::/w/same ssh:gpu-vm|shared::/w/same local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-b#lineage:orca::/w/feat-b 2=api::/w/api-y@runtime:env-1 3=orca::/w/feat-a#lineage:orca::/w/feat-a 4=api::/api@runtime:env-1 5=ext::/ext 6=lab::/w/gitlab-mr 7=lab::/lab 8=orca::/w/feat-c 9=orca-ssh::/orca-ssh
+cmd1-9 unmounted: 1=orca::/w/feat-b 2=api::/w/api-y@runtime:env-1 3=orca::/w/feat-a 4=api::/api@runtime:env-1 5=ext::/ext 6=lab::/w/gitlab-mr 7=lab::/lab 8=orca::/w/feat-c 9=orca-ssh::/orca-ssh
+cmd ids unmounted: orca::/w/feat-b api::/w/api-y orca::/w/feat-a api::/api ext::/ext lab::/w/gitlab-mr lab::/lab orca::/w/feat-c orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x shared::/w/same folder:fw-review folder:fw-notes folder:fw-remote orca::/w/Zeta
+-- collapsed: pinned pr:in-review pr:closed lineage:orca::/w/feat-a --
+visible: api::/w/api-y api::/api ext::/ext orca::/w/feat-a lab::/w/gitlab-mr lab::/lab orca::/w/feat-b orca::/w/feat-c orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x orca::/w/Zeta shared::/w/same shared::/w/same
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=pr:done label="Done" count=1 tone="text-workspace-status-done" icon=ConductorDoneIcon hostCounts={local:1} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+ITEM rowKey=pr:done:|orca::/w/feat-b depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+HEADER key=pr:in-review label="In review" count=2 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/feat-a]} ids=[api::/w/api-y,orca::/w/feat-a]
+HEADER key=pr:in-progress label="In progress" count=13 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={runtime:env-1:1 local:8 ssh:gpu-vm:4} hostIds={runtime:env-1:[api::/api] local:[ext::/ext,lab::/w/gitlab-mr,lab::/lab,orca::/w/feat-c,orca::/orca,shared::/w/same] ssh:gpu-vm:[orca-ssh::/orca-ssh,orca-ssh::/w/remote-x,shared::/w/same]} ids=[api::/api,ext::/ext,lab::/w/gitlab-mr,lab::/lab,orca::/w/feat-c,orca-ssh::/orca-ssh,orca::/orca,orca-ssh::/w/remote-x,shared::/w/same,shared::/w/same]
+ITEM rowKey=pr:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=pr:in-progress:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=pr:in-progress:|lab::/w/gitlab-mr depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|lab::/w/gitlab-mr pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION pr:in-review: pr:in-review:runtime:env-1|api::/w/api-y pr:in-review:|orca::/w/feat-a
+SECTION pr:closed: pr:closed:|orca::/w/Zeta
+PREFERRED |orca::/w/feat-a -> pr:in-review:|orca::/w/feat-a
+PREFERRED |lab::/w/gitlab-mr -> pr:in-progress:|lab::/w/gitlab-mr
+PREFERRED |orca::/w/feat-b -> pr:done:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> pr:in-progress:|orca::/w/feat-c
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> pr:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 23
+placeholders: -
+selectionOrder: |orca::/w/feat-b runtime:env-1|api::/api |ext::/ext |lab::/w/gitlab-mr |lab::/lab |orca::/w/feat-c |orca-ssh::/orca-ssh |orca::/orca ssh:gpu-vm|orca-ssh::/w/remote-x local|shared::/w/same ssh:gpu-vm|shared::/w/same local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-b 2=api::/api@runtime:env-1 3=ext::/ext 4=lab::/w/gitlab-mr 5=lab::/lab 6=orca::/w/feat-c 7=orca-ssh::/orca-ssh 8=orca::/orca 9=orca-ssh::/w/remote-x@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca::/w/feat-b 2=api::/api@runtime:env-1 3=ext::/ext 4=lab::/w/gitlab-mr 5=lab::/lab 6=orca::/w/feat-c 7=orca-ssh::/orca-ssh 8=orca::/orca 9=orca-ssh::/w/remote-x@ssh:gpu-vm
+cmd ids unmounted: orca::/w/feat-b api::/api ext::/ext lab::/w/gitlab-mr lab::/lab orca::/w/feat-c orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x shared::/w/same folder:fw-review folder:fw-notes folder:fw-remote
+=== sort=repo projectOrder=recent pinnedInGroups=false === same as sort=repo projectOrder=manual pinnedInGroups=false
+=== sort=repo projectOrder=recent pinnedInGroups=true === same as sort=repo projectOrder=manual pinnedInGroups=true
diff --git a/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/group-by-repo.txt b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/group-by-repo.txt
new file mode 100644
index 000000000000..1508f3972f0f
--- /dev/null
+++ b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/group-by-repo.txt
@@ -0,0 +1,1260 @@
+=== sort=manual projectOrder=manual pinnedInGroups=false ===
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=3 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+ITEM rowKey=project:p-orca:|orca::/orca depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca-ssh::/orca-ssh depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/Zeta depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+ITEM rowKey=project:repo:lab:|lab::/lab depth=0 groupDepth=2 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab path=project-group:pg-work>project-group:pg-nested>project:repo:lab
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=1 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+SECTION project:repo:empty: -
+renderedKeys: 33
+placeholders: empty
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh |orca::/w/Zeta |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/api runtime:env-1|api::/w/api-y local|shared::/w/same |ext::/ext
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=orca::/orca 8=orca-ssh::/orca-ssh 9=orca::/w/Zeta
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=orca::/orca 8=orca-ssh::/orca-ssh 9=orca::/w/Zeta
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x shared::/w/same orca::/orca orca-ssh::/orca-ssh orca::/w/Zeta lab::/lab folder:fw-review folder:fw-notes folder:fw-remote api::/api api::/w/api-y ext::/ext
+-- collapsed: pinned project:p-orca project:repo:lab project-group:pg-remote-folders project:repo:shared project:repo:ext lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=3 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=1 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION project:p-orca: project:p-orca:|orca::/orca project:p-orca:|orca-ssh::/orca-ssh project:p-orca:|orca::/w/Zeta
+SECTION project:repo:lab: project:repo:lab:|lab::/lab
+SECTION project:repo:shared: project:repo:shared:local|shared::/w/same
+SECTION project:repo:empty: -
+SECTION project:repo:ext: project:repo:ext:|ext::/ext
+renderedKeys: 18
+placeholders: empty
+selectionOrder: local|folder:fw-review local|folder:fw-notes runtime:env-1|api::/api runtime:env-1|api::/w/api-y
+cmd1-9 mounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1
+cmd1-9 unmounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1
+cmd ids unmounted: folder:fw-review folder:fw-notes api::/api api::/w/api-y
+=== sort=manual projectOrder=manual pinnedInGroups=true ===
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=8 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+ITEM rowKey=project:p-orca:|orca::/orca depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca-ssh::/orca-ssh depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/feat-a depth=0 groupDepth=1 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/feat-b depth=1 groupDepth=1 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-a
+ITEM rowKey=project:p-orca:|orca::/w/feat-c depth=2 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-b
+ITEM rowKey=project:p-orca:|lab::/w/gitlab-mr depth=1 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-a
+ITEM rowKey=project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/Zeta depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+ITEM rowKey=project:repo:lab:|lab::/lab depth=0 groupDepth=2 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab path=project-group:pg-work>project-group:pg-nested>project:repo:lab
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=2 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=project:repo:shared:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+SECTION project:repo:empty: -
+PREFERRED |orca::/w/feat-a -> project:p-orca:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> project:p-orca:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> project:p-orca:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> project:p-orca:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> project:repo:shared:ssh:gpu-vm|shared::/w/same
+renderedKeys: 39
+placeholders: empty
+selectionOrder: |orca::/orca |orca-ssh::/orca-ssh |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x |orca::/w/Zeta |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/api runtime:env-1|api::/w/api-y local|shared::/w/same ssh:gpu-vm|shared::/w/same |ext::/ext
+cmd1-9 mounted: 1=orca::/orca 2=orca-ssh::/orca-ssh 3=orca::/w/feat-a#lineage:orca::/w/feat-a 4=orca::/w/feat-b#lineage:orca::/w/feat-b 5=orca::/w/feat-c 6=lab::/w/gitlab-mr 7=orca-ssh::/w/remote-x@ssh:gpu-vm 8=orca::/w/Zeta 9=lab::/lab
+cmd1-9 unmounted: 1=orca::/orca 2=orca-ssh::/orca-ssh 3=orca::/w/feat-a 4=orca::/w/feat-b 5=orca::/w/feat-c 6=lab::/w/gitlab-mr 7=orca-ssh::/w/remote-x@ssh:gpu-vm 8=orca::/w/Zeta 9=lab::/lab
+cmd ids unmounted: orca::/orca orca-ssh::/orca-ssh orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x orca::/w/Zeta lab::/lab folder:fw-review folder:fw-notes folder:fw-remote api::/api api::/w/api-y shared::/w/same ext::/ext
+-- collapsed: pinned project:p-orca project:repo:lab project-group:pg-remote-folders project:repo:shared project:repo:ext lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=8 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=2 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION project:p-orca: project:p-orca:|orca::/orca project:p-orca:|orca-ssh::/orca-ssh project:p-orca:|orca::/w/feat-a project:p-orca:|orca::/w/feat-b project:p-orca:|orca::/w/feat-c project:p-orca:|lab::/w/gitlab-mr project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x project:p-orca:|orca::/w/Zeta
+SECTION project:repo:lab: project:repo:lab:|lab::/lab
+SECTION project:repo:shared: project:repo:shared:local|shared::/w/same project:repo:shared:ssh:gpu-vm|shared::/w/same
+SECTION project:repo:empty: -
+SECTION project:repo:ext: project:repo:ext:|ext::/ext
+PREFERRED |orca::/w/feat-a -> project:p-orca:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> project:p-orca:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> project:p-orca:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> project:p-orca:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> project:repo:shared:ssh:gpu-vm|shared::/w/same
+renderedKeys: 18
+placeholders: empty
+selectionOrder: local|folder:fw-review local|folder:fw-notes runtime:env-1|api::/api runtime:env-1|api::/w/api-y
+cmd1-9 mounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1
+cmd1-9 unmounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1
+cmd ids unmounted: folder:fw-review folder:fw-notes api::/api api::/w/api-y
+=== sort=manual projectOrder=recent pinnedInGroups=false ===
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=3 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+ITEM rowKey=project:p-orca:|orca::/orca depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca-ssh::/orca-ssh depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/Zeta depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+ITEM rowKey=project:repo:lab:|lab::/lab depth=0 groupDepth=2 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab path=project-group:pg-work>project-group:pg-nested>project:repo:lab
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=1 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+SECTION project:repo:empty: -
+renderedKeys: 33
+placeholders: empty
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh |orca::/w/Zeta |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/api runtime:env-1|api::/w/api-y local|shared::/w/same |ext::/ext
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=orca::/orca 8=orca-ssh::/orca-ssh 9=orca::/w/Zeta
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=orca::/orca 8=orca-ssh::/orca-ssh 9=orca::/w/Zeta
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x shared::/w/same orca::/orca orca-ssh::/orca-ssh orca::/w/Zeta lab::/lab folder:fw-review folder:fw-notes folder:fw-remote api::/api api::/w/api-y ext::/ext
+-- collapsed: pinned project:p-orca project:repo:lab project-group:pg-remote-folders project:repo:shared project:repo:empty lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=3 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=1 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION project:p-orca: project:p-orca:|orca::/orca project:p-orca:|orca-ssh::/orca-ssh project:p-orca:|orca::/w/Zeta
+SECTION project:repo:lab: project:repo:lab:|lab::/lab
+SECTION project:repo:shared: project:repo:shared:local|shared::/w/same
+SECTION project:repo:empty: -
+renderedKeys: 20
+placeholders: empty
+selectionOrder: local|folder:fw-review local|folder:fw-notes runtime:env-1|api::/api runtime:env-1|api::/w/api-y |ext::/ext
+cmd1-9 mounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1 5=ext::/ext
+cmd1-9 unmounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1 5=ext::/ext
+cmd ids unmounted: folder:fw-review folder:fw-notes api::/api api::/w/api-y ext::/ext
+=== sort=manual projectOrder=recent pinnedInGroups=true ===
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=8 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+ITEM rowKey=project:p-orca:|orca::/orca depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca-ssh::/orca-ssh depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/feat-a depth=0 groupDepth=1 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/feat-b depth=1 groupDepth=1 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-a
+ITEM rowKey=project:p-orca:|orca::/w/feat-c depth=2 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-b
+ITEM rowKey=project:p-orca:|lab::/w/gitlab-mr depth=1 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-a
+ITEM rowKey=project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/Zeta depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+ITEM rowKey=project:repo:lab:|lab::/lab depth=0 groupDepth=2 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab path=project-group:pg-work>project-group:pg-nested>project:repo:lab
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=2 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=project:repo:shared:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+SECTION project:repo:empty: -
+PREFERRED |orca::/w/feat-a -> project:p-orca:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> project:p-orca:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> project:p-orca:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> project:p-orca:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> project:repo:shared:ssh:gpu-vm|shared::/w/same
+renderedKeys: 39
+placeholders: empty
+selectionOrder: |orca::/orca |orca-ssh::/orca-ssh |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x |orca::/w/Zeta |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/api runtime:env-1|api::/w/api-y local|shared::/w/same ssh:gpu-vm|shared::/w/same |ext::/ext
+cmd1-9 mounted: 1=orca::/orca 2=orca-ssh::/orca-ssh 3=orca::/w/feat-a#lineage:orca::/w/feat-a 4=orca::/w/feat-b#lineage:orca::/w/feat-b 5=orca::/w/feat-c 6=lab::/w/gitlab-mr 7=orca-ssh::/w/remote-x@ssh:gpu-vm 8=orca::/w/Zeta 9=lab::/lab
+cmd1-9 unmounted: 1=orca::/orca 2=orca-ssh::/orca-ssh 3=orca::/w/feat-a 4=orca::/w/feat-b 5=orca::/w/feat-c 6=lab::/w/gitlab-mr 7=orca-ssh::/w/remote-x@ssh:gpu-vm 8=orca::/w/Zeta 9=lab::/lab
+cmd ids unmounted: orca::/orca orca-ssh::/orca-ssh orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x orca::/w/Zeta lab::/lab folder:fw-review folder:fw-notes folder:fw-remote api::/api api::/w/api-y shared::/w/same ext::/ext
+-- collapsed: pinned project:p-orca project:repo:lab project-group:pg-remote-folders project:repo:shared project:repo:empty lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=8 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=2 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION project:p-orca: project:p-orca:|orca::/orca project:p-orca:|orca-ssh::/orca-ssh project:p-orca:|orca::/w/feat-a project:p-orca:|orca::/w/feat-b project:p-orca:|orca::/w/feat-c project:p-orca:|lab::/w/gitlab-mr project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x project:p-orca:|orca::/w/Zeta
+SECTION project:repo:lab: project:repo:lab:|lab::/lab
+SECTION project:repo:shared: project:repo:shared:local|shared::/w/same project:repo:shared:ssh:gpu-vm|shared::/w/same
+SECTION project:repo:empty: -
+PREFERRED |orca::/w/feat-a -> project:p-orca:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> project:p-orca:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> project:p-orca:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> project:p-orca:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> project:repo:shared:ssh:gpu-vm|shared::/w/same
+renderedKeys: 20
+placeholders: empty
+selectionOrder: local|folder:fw-review local|folder:fw-notes runtime:env-1|api::/api runtime:env-1|api::/w/api-y |ext::/ext
+cmd1-9 mounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1 5=ext::/ext
+cmd1-9 unmounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1 5=ext::/ext
+cmd ids unmounted: folder:fw-review folder:fw-notes api::/api api::/w/api-y ext::/ext
+=== sort=name projectOrder=manual pinnedInGroups=false ===
+visible: api::/w/api-y orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=3 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+ITEM rowKey=project:p-orca:|orca-ssh::/orca-ssh depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/orca depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/Zeta depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+ITEM rowKey=project:repo:lab:|lab::/lab depth=0 groupDepth=2 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab path=project-group:pg-work>project-group:pg-nested>project:repo:lab
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=1 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+SECTION project:repo:empty: -
+renderedKeys: 33
+placeholders: empty
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same |orca-ssh::/orca-ssh |orca::/orca |orca::/w/Zeta |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/api runtime:env-1|api::/w/api-y local|shared::/w/same |ext::/ext
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=orca-ssh::/orca-ssh 8=orca::/orca 9=orca::/w/Zeta
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=orca-ssh::/orca-ssh 8=orca::/orca 9=orca::/w/Zeta
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x shared::/w/same orca-ssh::/orca-ssh orca::/orca orca::/w/Zeta lab::/lab folder:fw-review folder:fw-notes folder:fw-remote api::/api api::/w/api-y ext::/ext
+-- collapsed: pinned project:p-orca project:repo:lab project-group:pg-remote-folders project:repo:shared project:repo:ext lineage:orca::/w/feat-a --
+visible: api::/w/api-y orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=3 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=1 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION project:p-orca: project:p-orca:|orca-ssh::/orca-ssh project:p-orca:|orca::/orca project:p-orca:|orca::/w/Zeta
+SECTION project:repo:lab: project:repo:lab:|lab::/lab
+SECTION project:repo:shared: project:repo:shared:local|shared::/w/same
+SECTION project:repo:empty: -
+SECTION project:repo:ext: project:repo:ext:|ext::/ext
+renderedKeys: 18
+placeholders: empty
+selectionOrder: local|folder:fw-review local|folder:fw-notes runtime:env-1|api::/api runtime:env-1|api::/w/api-y
+cmd1-9 mounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1
+cmd1-9 unmounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1
+cmd ids unmounted: folder:fw-review folder:fw-notes api::/api api::/w/api-y
+=== sort=name projectOrder=manual pinnedInGroups=true ===
+visible: api::/w/api-y orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=8 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+ITEM rowKey=project:p-orca:|orca-ssh::/orca-ssh depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/orca depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/feat-a depth=0 groupDepth=1 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/feat-b depth=1 groupDepth=1 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-a
+ITEM rowKey=project:p-orca:|orca::/w/feat-c depth=2 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-b
+ITEM rowKey=project:p-orca:|lab::/w/gitlab-mr depth=1 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-a
+ITEM rowKey=project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/Zeta depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+ITEM rowKey=project:repo:lab:|lab::/lab depth=0 groupDepth=2 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab path=project-group:pg-work>project-group:pg-nested>project:repo:lab
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=2 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=project:repo:shared:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+SECTION project:repo:empty: -
+PREFERRED |orca::/w/feat-a -> project:p-orca:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> project:p-orca:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> project:p-orca:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> project:p-orca:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> project:repo:shared:ssh:gpu-vm|shared::/w/same
+renderedKeys: 39
+placeholders: empty
+selectionOrder: |orca-ssh::/orca-ssh |orca::/orca |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x |orca::/w/Zeta |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/api runtime:env-1|api::/w/api-y local|shared::/w/same ssh:gpu-vm|shared::/w/same |ext::/ext
+cmd1-9 mounted: 1=orca-ssh::/orca-ssh 2=orca::/orca 3=orca::/w/feat-a#lineage:orca::/w/feat-a 4=orca::/w/feat-b#lineage:orca::/w/feat-b 5=orca::/w/feat-c 6=lab::/w/gitlab-mr 7=orca-ssh::/w/remote-x@ssh:gpu-vm 8=orca::/w/Zeta 9=lab::/lab
+cmd1-9 unmounted: 1=orca-ssh::/orca-ssh 2=orca::/orca 3=orca::/w/feat-a 4=orca::/w/feat-b 5=orca::/w/feat-c 6=lab::/w/gitlab-mr 7=orca-ssh::/w/remote-x@ssh:gpu-vm 8=orca::/w/Zeta 9=lab::/lab
+cmd ids unmounted: orca-ssh::/orca-ssh orca::/orca orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x orca::/w/Zeta lab::/lab folder:fw-review folder:fw-notes folder:fw-remote api::/api api::/w/api-y shared::/w/same ext::/ext
+-- collapsed: pinned project:p-orca project:repo:lab project-group:pg-remote-folders project:repo:shared project:repo:ext lineage:orca::/w/feat-a --
+visible: api::/w/api-y orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=8 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=2 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION project:p-orca: project:p-orca:|orca-ssh::/orca-ssh project:p-orca:|orca::/orca project:p-orca:|orca::/w/feat-a project:p-orca:|orca::/w/feat-b project:p-orca:|orca::/w/feat-c project:p-orca:|lab::/w/gitlab-mr project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x project:p-orca:|orca::/w/Zeta
+SECTION project:repo:lab: project:repo:lab:|lab::/lab
+SECTION project:repo:shared: project:repo:shared:local|shared::/w/same project:repo:shared:ssh:gpu-vm|shared::/w/same
+SECTION project:repo:empty: -
+SECTION project:repo:ext: project:repo:ext:|ext::/ext
+PREFERRED |orca::/w/feat-a -> project:p-orca:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> project:p-orca:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> project:p-orca:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> project:p-orca:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> project:repo:shared:ssh:gpu-vm|shared::/w/same
+renderedKeys: 18
+placeholders: empty
+selectionOrder: local|folder:fw-review local|folder:fw-notes runtime:env-1|api::/api runtime:env-1|api::/w/api-y
+cmd1-9 mounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1
+cmd1-9 unmounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1
+cmd ids unmounted: folder:fw-review folder:fw-notes api::/api api::/w/api-y
+=== sort=name projectOrder=recent pinnedInGroups=false ===
+visible: api::/w/api-y orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=3 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+ITEM rowKey=project:p-orca:|orca-ssh::/orca-ssh depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/orca depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/Zeta depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+ITEM rowKey=project:repo:lab:|lab::/lab depth=0 groupDepth=2 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab path=project-group:pg-work>project-group:pg-nested>project:repo:lab
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=1 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+SECTION project:repo:empty: -
+renderedKeys: 33
+placeholders: empty
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same |orca-ssh::/orca-ssh |orca::/orca |orca::/w/Zeta |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/api runtime:env-1|api::/w/api-y local|shared::/w/same |ext::/ext
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=orca-ssh::/orca-ssh 8=orca::/orca 9=orca::/w/Zeta
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=orca-ssh::/orca-ssh 8=orca::/orca 9=orca::/w/Zeta
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x shared::/w/same orca-ssh::/orca-ssh orca::/orca orca::/w/Zeta lab::/lab folder:fw-review folder:fw-notes folder:fw-remote api::/api api::/w/api-y ext::/ext
+-- collapsed: pinned project:p-orca project:repo:lab project-group:pg-remote-folders project:repo:shared project:repo:empty lineage:orca::/w/feat-a --
+visible: api::/w/api-y orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=3 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=1 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION project:p-orca: project:p-orca:|orca-ssh::/orca-ssh project:p-orca:|orca::/orca project:p-orca:|orca::/w/Zeta
+SECTION project:repo:lab: project:repo:lab:|lab::/lab
+SECTION project:repo:shared: project:repo:shared:local|shared::/w/same
+SECTION project:repo:empty: -
+renderedKeys: 20
+placeholders: empty
+selectionOrder: local|folder:fw-review local|folder:fw-notes runtime:env-1|api::/api runtime:env-1|api::/w/api-y |ext::/ext
+cmd1-9 mounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1 5=ext::/ext
+cmd1-9 unmounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1 5=ext::/ext
+cmd ids unmounted: folder:fw-review folder:fw-notes api::/api api::/w/api-y ext::/ext
+=== sort=name projectOrder=recent pinnedInGroups=true ===
+visible: api::/w/api-y orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=8 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+ITEM rowKey=project:p-orca:|orca-ssh::/orca-ssh depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/orca depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/feat-a depth=0 groupDepth=1 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/feat-b depth=1 groupDepth=1 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-a
+ITEM rowKey=project:p-orca:|orca::/w/feat-c depth=2 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-b
+ITEM rowKey=project:p-orca:|lab::/w/gitlab-mr depth=1 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-a
+ITEM rowKey=project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/Zeta depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+ITEM rowKey=project:repo:lab:|lab::/lab depth=0 groupDepth=2 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab path=project-group:pg-work>project-group:pg-nested>project:repo:lab
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=2 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=project:repo:shared:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+SECTION project:repo:empty: -
+PREFERRED |orca::/w/feat-a -> project:p-orca:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> project:p-orca:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> project:p-orca:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> project:p-orca:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> project:repo:shared:ssh:gpu-vm|shared::/w/same
+renderedKeys: 39
+placeholders: empty
+selectionOrder: |orca-ssh::/orca-ssh |orca::/orca |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x |orca::/w/Zeta |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/api runtime:env-1|api::/w/api-y local|shared::/w/same ssh:gpu-vm|shared::/w/same |ext::/ext
+cmd1-9 mounted: 1=orca-ssh::/orca-ssh 2=orca::/orca 3=orca::/w/feat-a#lineage:orca::/w/feat-a 4=orca::/w/feat-b#lineage:orca::/w/feat-b 5=orca::/w/feat-c 6=lab::/w/gitlab-mr 7=orca-ssh::/w/remote-x@ssh:gpu-vm 8=orca::/w/Zeta 9=lab::/lab
+cmd1-9 unmounted: 1=orca-ssh::/orca-ssh 2=orca::/orca 3=orca::/w/feat-a 4=orca::/w/feat-b 5=orca::/w/feat-c 6=lab::/w/gitlab-mr 7=orca-ssh::/w/remote-x@ssh:gpu-vm 8=orca::/w/Zeta 9=lab::/lab
+cmd ids unmounted: orca-ssh::/orca-ssh orca::/orca orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x orca::/w/Zeta lab::/lab folder:fw-review folder:fw-notes folder:fw-remote api::/api api::/w/api-y shared::/w/same ext::/ext
+-- collapsed: pinned project:p-orca project:repo:lab project-group:pg-remote-folders project:repo:shared project:repo:empty lineage:orca::/w/feat-a --
+visible: api::/w/api-y orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=8 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=2 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION project:p-orca: project:p-orca:|orca-ssh::/orca-ssh project:p-orca:|orca::/orca project:p-orca:|orca::/w/feat-a project:p-orca:|orca::/w/feat-b project:p-orca:|orca::/w/feat-c project:p-orca:|lab::/w/gitlab-mr project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x project:p-orca:|orca::/w/Zeta
+SECTION project:repo:lab: project:repo:lab:|lab::/lab
+SECTION project:repo:shared: project:repo:shared:local|shared::/w/same project:repo:shared:ssh:gpu-vm|shared::/w/same
+SECTION project:repo:empty: -
+PREFERRED |orca::/w/feat-a -> project:p-orca:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> project:p-orca:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> project:p-orca:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> project:p-orca:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> project:repo:shared:ssh:gpu-vm|shared::/w/same
+renderedKeys: 20
+placeholders: empty
+selectionOrder: local|folder:fw-review local|folder:fw-notes runtime:env-1|api::/api runtime:env-1|api::/w/api-y |ext::/ext
+cmd1-9 mounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1 5=ext::/ext
+cmd1-9 unmounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1 5=ext::/ext
+cmd ids unmounted: folder:fw-review folder:fw-notes api::/api api::/w/api-y ext::/ext
+=== sort=recent projectOrder=manual pinnedInGroups=false ===
+visible: orca::/w/feat-a api::/w/api-y orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=3 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+ITEM rowKey=project:p-orca:|orca::/orca depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca-ssh::/orca-ssh depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/Zeta depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+ITEM rowKey=project:repo:lab:|lab::/lab depth=0 groupDepth=2 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab path=project-group:pg-work>project-group:pg-nested>project:repo:lab
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=1 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+SECTION project:repo:empty: -
+renderedKeys: 33
+placeholders: empty
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh |orca::/w/Zeta |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/api runtime:env-1|api::/w/api-y local|shared::/w/same |ext::/ext
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=orca::/orca 8=orca-ssh::/orca-ssh 9=orca::/w/Zeta
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=orca::/orca 8=orca-ssh::/orca-ssh 9=orca::/w/Zeta
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x shared::/w/same orca::/orca orca-ssh::/orca-ssh orca::/w/Zeta lab::/lab folder:fw-review folder:fw-notes folder:fw-remote api::/api api::/w/api-y ext::/ext
+-- collapsed: pinned project:p-orca project:repo:lab project-group:pg-remote-folders project:repo:shared project:repo:ext lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a api::/w/api-y orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=3 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=1 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION project:p-orca: project:p-orca:|orca::/orca project:p-orca:|orca-ssh::/orca-ssh project:p-orca:|orca::/w/Zeta
+SECTION project:repo:lab: project:repo:lab:|lab::/lab
+SECTION project:repo:shared: project:repo:shared:local|shared::/w/same
+SECTION project:repo:empty: -
+SECTION project:repo:ext: project:repo:ext:|ext::/ext
+renderedKeys: 18
+placeholders: empty
+selectionOrder: local|folder:fw-review local|folder:fw-notes runtime:env-1|api::/api runtime:env-1|api::/w/api-y
+cmd1-9 mounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1
+cmd1-9 unmounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1
+cmd ids unmounted: folder:fw-review folder:fw-notes api::/api api::/w/api-y
+=== sort=recent projectOrder=manual pinnedInGroups=true ===
+visible: orca::/w/feat-a api::/w/api-y orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=8 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+ITEM rowKey=project:p-orca:|orca::/orca depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca-ssh::/orca-ssh depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/feat-a depth=0 groupDepth=1 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/feat-b depth=1 groupDepth=1 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-a
+ITEM rowKey=project:p-orca:|orca::/w/feat-c depth=2 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-b
+ITEM rowKey=project:p-orca:|lab::/w/gitlab-mr depth=1 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-a
+ITEM rowKey=project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/Zeta depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+ITEM rowKey=project:repo:lab:|lab::/lab depth=0 groupDepth=2 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab path=project-group:pg-work>project-group:pg-nested>project:repo:lab
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=2 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=project:repo:shared:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+SECTION project:repo:empty: -
+PREFERRED |orca::/w/feat-a -> project:p-orca:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> project:p-orca:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> project:p-orca:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> project:p-orca:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> project:repo:shared:ssh:gpu-vm|shared::/w/same
+renderedKeys: 39
+placeholders: empty
+selectionOrder: |orca::/orca |orca-ssh::/orca-ssh |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x |orca::/w/Zeta |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/api runtime:env-1|api::/w/api-y local|shared::/w/same ssh:gpu-vm|shared::/w/same |ext::/ext
+cmd1-9 mounted: 1=orca::/orca 2=orca-ssh::/orca-ssh 3=orca::/w/feat-a#lineage:orca::/w/feat-a 4=orca::/w/feat-b#lineage:orca::/w/feat-b 5=orca::/w/feat-c 6=lab::/w/gitlab-mr 7=orca-ssh::/w/remote-x@ssh:gpu-vm 8=orca::/w/Zeta 9=lab::/lab
+cmd1-9 unmounted: 1=orca::/orca 2=orca-ssh::/orca-ssh 3=orca::/w/feat-a 4=orca::/w/feat-b 5=orca::/w/feat-c 6=lab::/w/gitlab-mr 7=orca-ssh::/w/remote-x@ssh:gpu-vm 8=orca::/w/Zeta 9=lab::/lab
+cmd ids unmounted: orca::/orca orca-ssh::/orca-ssh orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x orca::/w/Zeta lab::/lab folder:fw-review folder:fw-notes folder:fw-remote api::/api api::/w/api-y shared::/w/same ext::/ext
+-- collapsed: pinned project:p-orca project:repo:lab project-group:pg-remote-folders project:repo:shared project:repo:ext lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a api::/w/api-y orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=8 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=2 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION project:p-orca: project:p-orca:|orca::/orca project:p-orca:|orca-ssh::/orca-ssh project:p-orca:|orca::/w/feat-a project:p-orca:|orca::/w/feat-b project:p-orca:|orca::/w/feat-c project:p-orca:|lab::/w/gitlab-mr project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x project:p-orca:|orca::/w/Zeta
+SECTION project:repo:lab: project:repo:lab:|lab::/lab
+SECTION project:repo:shared: project:repo:shared:local|shared::/w/same project:repo:shared:ssh:gpu-vm|shared::/w/same
+SECTION project:repo:empty: -
+SECTION project:repo:ext: project:repo:ext:|ext::/ext
+PREFERRED |orca::/w/feat-a -> project:p-orca:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> project:p-orca:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> project:p-orca:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> project:p-orca:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> project:repo:shared:ssh:gpu-vm|shared::/w/same
+renderedKeys: 18
+placeholders: empty
+selectionOrder: local|folder:fw-review local|folder:fw-notes runtime:env-1|api::/api runtime:env-1|api::/w/api-y
+cmd1-9 mounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1
+cmd1-9 unmounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1
+cmd ids unmounted: folder:fw-review folder:fw-notes api::/api api::/w/api-y
+=== sort=recent projectOrder=recent pinnedInGroups=false ===
+visible: orca::/w/feat-a api::/w/api-y orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=3 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+ITEM rowKey=project:p-orca:|orca::/orca depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca-ssh::/orca-ssh depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/Zeta depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+ITEM rowKey=project:repo:lab:|lab::/lab depth=0 groupDepth=2 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab path=project-group:pg-work>project-group:pg-nested>project:repo:lab
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=1 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+SECTION project:repo:empty: -
+renderedKeys: 33
+placeholders: empty
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh |orca::/w/Zeta |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/api runtime:env-1|api::/w/api-y local|shared::/w/same |ext::/ext
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=orca::/orca 8=orca-ssh::/orca-ssh 9=orca::/w/Zeta
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=orca::/orca 8=orca-ssh::/orca-ssh 9=orca::/w/Zeta
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x shared::/w/same orca::/orca orca-ssh::/orca-ssh orca::/w/Zeta lab::/lab folder:fw-review folder:fw-notes folder:fw-remote api::/api api::/w/api-y ext::/ext
+-- collapsed: pinned project:p-orca project:repo:lab project-group:pg-remote-folders project:repo:shared project:repo:empty lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a api::/w/api-y orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=3 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=1 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION project:p-orca: project:p-orca:|orca::/orca project:p-orca:|orca-ssh::/orca-ssh project:p-orca:|orca::/w/Zeta
+SECTION project:repo:lab: project:repo:lab:|lab::/lab
+SECTION project:repo:shared: project:repo:shared:local|shared::/w/same
+SECTION project:repo:empty: -
+renderedKeys: 20
+placeholders: empty
+selectionOrder: local|folder:fw-review local|folder:fw-notes runtime:env-1|api::/api runtime:env-1|api::/w/api-y |ext::/ext
+cmd1-9 mounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1 5=ext::/ext
+cmd1-9 unmounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1 5=ext::/ext
+cmd ids unmounted: folder:fw-review folder:fw-notes api::/api api::/w/api-y ext::/ext
+=== sort=recent projectOrder=recent pinnedInGroups=true ===
+visible: orca::/w/feat-a api::/w/api-y orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=8 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+ITEM rowKey=project:p-orca:|orca::/orca depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca-ssh::/orca-ssh depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/feat-a depth=0 groupDepth=1 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/feat-b depth=1 groupDepth=1 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-a
+ITEM rowKey=project:p-orca:|orca::/w/feat-c depth=2 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-b
+ITEM rowKey=project:p-orca:|lab::/w/gitlab-mr depth=1 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-a
+ITEM rowKey=project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/Zeta depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+ITEM rowKey=project:repo:lab:|lab::/lab depth=0 groupDepth=2 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab path=project-group:pg-work>project-group:pg-nested>project:repo:lab
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=2 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=project:repo:shared:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+SECTION project:repo:empty: -
+PREFERRED |orca::/w/feat-a -> project:p-orca:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> project:p-orca:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> project:p-orca:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> project:p-orca:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> project:repo:shared:ssh:gpu-vm|shared::/w/same
+renderedKeys: 39
+placeholders: empty
+selectionOrder: |orca::/orca |orca-ssh::/orca-ssh |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x |orca::/w/Zeta |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/api runtime:env-1|api::/w/api-y local|shared::/w/same ssh:gpu-vm|shared::/w/same |ext::/ext
+cmd1-9 mounted: 1=orca::/orca 2=orca-ssh::/orca-ssh 3=orca::/w/feat-a#lineage:orca::/w/feat-a 4=orca::/w/feat-b#lineage:orca::/w/feat-b 5=orca::/w/feat-c 6=lab::/w/gitlab-mr 7=orca-ssh::/w/remote-x@ssh:gpu-vm 8=orca::/w/Zeta 9=lab::/lab
+cmd1-9 unmounted: 1=orca::/orca 2=orca-ssh::/orca-ssh 3=orca::/w/feat-a 4=orca::/w/feat-b 5=orca::/w/feat-c 6=lab::/w/gitlab-mr 7=orca-ssh::/w/remote-x@ssh:gpu-vm 8=orca::/w/Zeta 9=lab::/lab
+cmd ids unmounted: orca::/orca orca-ssh::/orca-ssh orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x orca::/w/Zeta lab::/lab folder:fw-review folder:fw-notes folder:fw-remote api::/api api::/w/api-y shared::/w/same ext::/ext
+-- collapsed: pinned project:p-orca project:repo:lab project-group:pg-remote-folders project:repo:shared project:repo:empty lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a api::/w/api-y orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=8 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=2 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION project:p-orca: project:p-orca:|orca::/orca project:p-orca:|orca-ssh::/orca-ssh project:p-orca:|orca::/w/feat-a project:p-orca:|orca::/w/feat-b project:p-orca:|orca::/w/feat-c project:p-orca:|lab::/w/gitlab-mr project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x project:p-orca:|orca::/w/Zeta
+SECTION project:repo:lab: project:repo:lab:|lab::/lab
+SECTION project:repo:shared: project:repo:shared:local|shared::/w/same project:repo:shared:ssh:gpu-vm|shared::/w/same
+SECTION project:repo:empty: -
+PREFERRED |orca::/w/feat-a -> project:p-orca:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> project:p-orca:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> project:p-orca:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> project:p-orca:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> project:repo:shared:ssh:gpu-vm|shared::/w/same
+renderedKeys: 20
+placeholders: empty
+selectionOrder: local|folder:fw-review local|folder:fw-notes runtime:env-1|api::/api runtime:env-1|api::/w/api-y |ext::/ext
+cmd1-9 mounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1 5=ext::/ext
+cmd1-9 unmounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1 5=ext::/ext
+cmd ids unmounted: folder:fw-review folder:fw-notes api::/api api::/w/api-y ext::/ext
+=== sort=smart projectOrder=manual pinnedInGroups=false === same as sort=recent projectOrder=manual pinnedInGroups=false
+=== sort=smart projectOrder=manual pinnedInGroups=true === same as sort=recent projectOrder=manual pinnedInGroups=true
+=== sort=smart projectOrder=recent pinnedInGroups=false === same as sort=recent projectOrder=recent pinnedInGroups=false
+=== sort=smart projectOrder=recent pinnedInGroups=true === same as sort=recent projectOrder=recent pinnedInGroups=true
+=== sort=repo projectOrder=manual pinnedInGroups=false ===
+visible: api::/w/api-y api::/api ext::/ext orca::/w/feat-a lab::/w/gitlab-mr lab::/lab orca::/w/feat-b orca::/w/feat-c orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x orca::/w/Zeta shared::/w/same shared::/w/same
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 lastChild=true children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=3 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+ITEM rowKey=project:p-orca:|orca-ssh::/orca-ssh depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/orca depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/Zeta depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+ITEM rowKey=project:repo:lab:|lab::/lab depth=0 groupDepth=2 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab path=project-group:pg-work>project-group:pg-nested>project:repo:lab
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=1 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+SECTION project:repo:empty: -
+renderedKeys: 33
+placeholders: empty
+selectionOrder: |orca::/w/feat-a |lab::/w/gitlab-mr |orca::/w/feat-b |orca::/w/feat-c ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same |orca-ssh::/orca-ssh |orca::/orca |orca::/w/Zeta |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/api runtime:env-1|api::/w/api-y local|shared::/w/same |ext::/ext
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca::/w/feat-b#lineage:orca::/w/feat-b 4=orca::/w/feat-c 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=orca-ssh::/orca-ssh 8=orca::/orca 9=orca::/w/Zeta
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca::/w/feat-b 4=orca::/w/feat-c 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=orca-ssh::/orca-ssh 8=orca::/orca 9=orca::/w/Zeta
+cmd ids unmounted: orca::/w/feat-a lab::/w/gitlab-mr orca::/w/feat-b orca::/w/feat-c orca-ssh::/w/remote-x shared::/w/same orca-ssh::/orca-ssh orca::/orca orca::/w/Zeta lab::/lab folder:fw-review folder:fw-notes folder:fw-remote api::/api api::/w/api-y ext::/ext
+-- collapsed: pinned project:p-orca project:repo:lab project-group:pg-remote-folders project:repo:shared project:repo:ext lineage:orca::/w/feat-a --
+visible: api::/w/api-y api::/api ext::/ext orca::/w/feat-a lab::/w/gitlab-mr lab::/lab orca::/w/feat-b orca::/w/feat-c orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x orca::/w/Zeta shared::/w/same shared::/w/same
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=3 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=1 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|lab::/w/gitlab-mr pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION project:p-orca: project:p-orca:|orca-ssh::/orca-ssh project:p-orca:|orca::/orca project:p-orca:|orca::/w/Zeta
+SECTION project:repo:lab: project:repo:lab:|lab::/lab
+SECTION project:repo:shared: project:repo:shared:local|shared::/w/same
+SECTION project:repo:empty: -
+SECTION project:repo:ext: project:repo:ext:|ext::/ext
+renderedKeys: 18
+placeholders: empty
+selectionOrder: local|folder:fw-review local|folder:fw-notes runtime:env-1|api::/api runtime:env-1|api::/w/api-y
+cmd1-9 mounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1
+cmd1-9 unmounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1
+cmd ids unmounted: folder:fw-review folder:fw-notes api::/api api::/w/api-y
+=== sort=repo projectOrder=manual pinnedInGroups=true ===
+visible: api::/w/api-y api::/api ext::/ext orca::/w/feat-a lab::/w/gitlab-mr lab::/lab orca::/w/feat-b orca::/w/feat-c orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x orca::/w/Zeta shared::/w/same shared::/w/same
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 lastChild=true children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=8 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+ITEM rowKey=project:p-orca:|orca-ssh::/orca-ssh depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/orca depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/feat-a depth=0 groupDepth=1 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|lab::/w/gitlab-mr depth=1 groupDepth=1 children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-a
+ITEM rowKey=project:p-orca:|orca::/w/feat-b depth=1 groupDepth=1 lastChild=true children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-a
+ITEM rowKey=project:p-orca:|orca::/w/feat-c depth=2 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-b
+ITEM rowKey=project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/Zeta depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+ITEM rowKey=project:repo:lab:|lab::/lab depth=0 groupDepth=2 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab path=project-group:pg-work>project-group:pg-nested>project:repo:lab
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=2 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=project:repo:shared:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+SECTION project:repo:empty: -
+PREFERRED |orca::/w/feat-a -> project:p-orca:|orca::/w/feat-a
+PREFERRED |lab::/w/gitlab-mr -> project:p-orca:|lab::/w/gitlab-mr
+PREFERRED |orca::/w/feat-b -> project:p-orca:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> project:p-orca:|orca::/w/feat-c
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> project:repo:shared:ssh:gpu-vm|shared::/w/same
+renderedKeys: 39
+placeholders: empty
+selectionOrder: |orca-ssh::/orca-ssh |orca::/orca |orca::/w/feat-a |lab::/w/gitlab-mr |orca::/w/feat-b |orca::/w/feat-c ssh:gpu-vm|orca-ssh::/w/remote-x |orca::/w/Zeta |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/api runtime:env-1|api::/w/api-y local|shared::/w/same ssh:gpu-vm|shared::/w/same |ext::/ext
+cmd1-9 mounted: 1=orca-ssh::/orca-ssh 2=orca::/orca 3=orca::/w/feat-a#lineage:orca::/w/feat-a 4=lab::/w/gitlab-mr 5=orca::/w/feat-b#lineage:orca::/w/feat-b 6=orca::/w/feat-c 7=orca-ssh::/w/remote-x@ssh:gpu-vm 8=orca::/w/Zeta 9=lab::/lab
+cmd1-9 unmounted: 1=orca-ssh::/orca-ssh 2=orca::/orca 3=orca::/w/feat-a 4=lab::/w/gitlab-mr 5=orca::/w/feat-b 6=orca::/w/feat-c 7=orca-ssh::/w/remote-x@ssh:gpu-vm 8=orca::/w/Zeta 9=lab::/lab
+cmd ids unmounted: orca-ssh::/orca-ssh orca::/orca orca::/w/feat-a lab::/w/gitlab-mr orca::/w/feat-b orca::/w/feat-c orca-ssh::/w/remote-x orca::/w/Zeta lab::/lab folder:fw-review folder:fw-notes folder:fw-remote api::/api api::/w/api-y shared::/w/same ext::/ext
+-- collapsed: pinned project:p-orca project:repo:lab project-group:pg-remote-folders project:repo:shared project:repo:ext lineage:orca::/w/feat-a --
+visible: api::/w/api-y api::/api ext::/ext orca::/w/feat-a lab::/w/gitlab-mr lab::/lab orca::/w/feat-b orca::/w/feat-c orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x orca::/w/Zeta shared::/w/same shared::/w/same
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=8 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=2 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|lab::/w/gitlab-mr pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION project:p-orca: project:p-orca:|orca-ssh::/orca-ssh project:p-orca:|orca::/orca project:p-orca:|orca::/w/feat-a project:p-orca:|lab::/w/gitlab-mr project:p-orca:|orca::/w/feat-b project:p-orca:|orca::/w/feat-c project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x project:p-orca:|orca::/w/Zeta
+SECTION project:repo:lab: project:repo:lab:|lab::/lab
+SECTION project:repo:shared: project:repo:shared:local|shared::/w/same project:repo:shared:ssh:gpu-vm|shared::/w/same
+SECTION project:repo:empty: -
+SECTION project:repo:ext: project:repo:ext:|ext::/ext
+PREFERRED |orca::/w/feat-a -> project:p-orca:|orca::/w/feat-a
+PREFERRED |lab::/w/gitlab-mr -> project:p-orca:|lab::/w/gitlab-mr
+PREFERRED |orca::/w/feat-b -> project:p-orca:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> project:p-orca:|orca::/w/feat-c
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> project:repo:shared:ssh:gpu-vm|shared::/w/same
+renderedKeys: 18
+placeholders: empty
+selectionOrder: local|folder:fw-review local|folder:fw-notes runtime:env-1|api::/api runtime:env-1|api::/w/api-y
+cmd1-9 mounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1
+cmd1-9 unmounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1
+cmd ids unmounted: folder:fw-review folder:fw-notes api::/api api::/w/api-y
+=== sort=repo projectOrder=recent pinnedInGroups=false ===
+visible: api::/w/api-y api::/api ext::/ext orca::/w/feat-a lab::/w/gitlab-mr lab::/lab orca::/w/feat-b orca::/w/feat-c orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x orca::/w/Zeta shared::/w/same shared::/w/same
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 lastChild=true children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=3 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+ITEM rowKey=project:p-orca:|orca-ssh::/orca-ssh depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/orca depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/Zeta depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+ITEM rowKey=project:repo:lab:|lab::/lab depth=0 groupDepth=2 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab path=project-group:pg-work>project-group:pg-nested>project:repo:lab
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=1 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+SECTION project:repo:empty: -
+renderedKeys: 33
+placeholders: empty
+selectionOrder: |orca::/w/feat-a |lab::/w/gitlab-mr |orca::/w/feat-b |orca::/w/feat-c ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same |orca-ssh::/orca-ssh |orca::/orca |orca::/w/Zeta |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/api runtime:env-1|api::/w/api-y local|shared::/w/same |ext::/ext
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca::/w/feat-b#lineage:orca::/w/feat-b 4=orca::/w/feat-c 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=orca-ssh::/orca-ssh 8=orca::/orca 9=orca::/w/Zeta
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca::/w/feat-b 4=orca::/w/feat-c 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=orca-ssh::/orca-ssh 8=orca::/orca 9=orca::/w/Zeta
+cmd ids unmounted: orca::/w/feat-a lab::/w/gitlab-mr orca::/w/feat-b orca::/w/feat-c orca-ssh::/w/remote-x shared::/w/same orca-ssh::/orca-ssh orca::/orca orca::/w/Zeta lab::/lab folder:fw-review folder:fw-notes folder:fw-remote api::/api api::/w/api-y ext::/ext
+-- collapsed: pinned project:p-orca project:repo:lab project-group:pg-remote-folders project:repo:shared project:repo:empty lineage:orca::/w/feat-a --
+visible: api::/w/api-y api::/api ext::/ext orca::/w/feat-a lab::/w/gitlab-mr lab::/lab orca::/w/feat-b orca::/w/feat-c orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x orca::/w/Zeta shared::/w/same shared::/w/same
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=3 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=1 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|lab::/w/gitlab-mr pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION project:p-orca: project:p-orca:|orca-ssh::/orca-ssh project:p-orca:|orca::/orca project:p-orca:|orca::/w/Zeta
+SECTION project:repo:lab: project:repo:lab:|lab::/lab
+SECTION project:repo:shared: project:repo:shared:local|shared::/w/same
+SECTION project:repo:empty: -
+renderedKeys: 20
+placeholders: empty
+selectionOrder: local|folder:fw-review local|folder:fw-notes runtime:env-1|api::/api runtime:env-1|api::/w/api-y |ext::/ext
+cmd1-9 mounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1 5=ext::/ext
+cmd1-9 unmounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1 5=ext::/ext
+cmd ids unmounted: folder:fw-review folder:fw-notes api::/api api::/w/api-y ext::/ext
+=== sort=repo projectOrder=recent pinnedInGroups=true ===
+visible: api::/w/api-y api::/api ext::/ext orca::/w/feat-a lab::/w/gitlab-mr lab::/lab orca::/w/feat-b orca::/w/feat-c orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x orca::/w/Zeta shared::/w/same shared::/w/same
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 lastChild=true children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=8 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+ITEM rowKey=project:p-orca:|orca-ssh::/orca-ssh depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/orca depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/feat-a depth=0 groupDepth=1 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|lab::/w/gitlab-mr depth=1 groupDepth=1 children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-a
+ITEM rowKey=project:p-orca:|orca::/w/feat-b depth=1 groupDepth=1 lastChild=true children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-a
+ITEM rowKey=project:p-orca:|orca::/w/feat-c depth=2 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-b
+ITEM rowKey=project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/Zeta depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+ITEM rowKey=project:repo:lab:|lab::/lab depth=0 groupDepth=2 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab path=project-group:pg-work>project-group:pg-nested>project:repo:lab
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=2 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=project:repo:shared:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+SECTION project:repo:empty: -
+PREFERRED |orca::/w/feat-a -> project:p-orca:|orca::/w/feat-a
+PREFERRED |lab::/w/gitlab-mr -> project:p-orca:|lab::/w/gitlab-mr
+PREFERRED |orca::/w/feat-b -> project:p-orca:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> project:p-orca:|orca::/w/feat-c
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> project:repo:shared:ssh:gpu-vm|shared::/w/same
+renderedKeys: 39
+placeholders: empty
+selectionOrder: |orca-ssh::/orca-ssh |orca::/orca |orca::/w/feat-a |lab::/w/gitlab-mr |orca::/w/feat-b |orca::/w/feat-c ssh:gpu-vm|orca-ssh::/w/remote-x |orca::/w/Zeta |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/api runtime:env-1|api::/w/api-y local|shared::/w/same ssh:gpu-vm|shared::/w/same |ext::/ext
+cmd1-9 mounted: 1=orca-ssh::/orca-ssh 2=orca::/orca 3=orca::/w/feat-a#lineage:orca::/w/feat-a 4=lab::/w/gitlab-mr 5=orca::/w/feat-b#lineage:orca::/w/feat-b 6=orca::/w/feat-c 7=orca-ssh::/w/remote-x@ssh:gpu-vm 8=orca::/w/Zeta 9=lab::/lab
+cmd1-9 unmounted: 1=orca-ssh::/orca-ssh 2=orca::/orca 3=orca::/w/feat-a 4=lab::/w/gitlab-mr 5=orca::/w/feat-b 6=orca::/w/feat-c 7=orca-ssh::/w/remote-x@ssh:gpu-vm 8=orca::/w/Zeta 9=lab::/lab
+cmd ids unmounted: orca-ssh::/orca-ssh orca::/orca orca::/w/feat-a lab::/w/gitlab-mr orca::/w/feat-b orca::/w/feat-c orca-ssh::/w/remote-x orca::/w/Zeta lab::/lab folder:fw-review folder:fw-notes folder:fw-remote api::/api api::/w/api-y shared::/w/same ext::/ext
+-- collapsed: pinned project:p-orca project:repo:lab project-group:pg-remote-folders project:repo:shared project:repo:empty lineage:orca::/w/feat-a --
+visible: api::/w/api-y api::/api ext::/ext orca::/w/feat-a lab::/w/gitlab-mr lab::/lab orca::/w/feat-b orca::/w/feat-c orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x orca::/w/Zeta shared::/w/same shared::/w/same
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=8 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=2 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|lab::/w/gitlab-mr pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION project:p-orca: project:p-orca:|orca-ssh::/orca-ssh project:p-orca:|orca::/orca project:p-orca:|orca::/w/feat-a project:p-orca:|lab::/w/gitlab-mr project:p-orca:|orca::/w/feat-b project:p-orca:|orca::/w/feat-c project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x project:p-orca:|orca::/w/Zeta
+SECTION project:repo:lab: project:repo:lab:|lab::/lab
+SECTION project:repo:shared: project:repo:shared:local|shared::/w/same project:repo:shared:ssh:gpu-vm|shared::/w/same
+SECTION project:repo:empty: -
+PREFERRED |orca::/w/feat-a -> project:p-orca:|orca::/w/feat-a
+PREFERRED |lab::/w/gitlab-mr -> project:p-orca:|lab::/w/gitlab-mr
+PREFERRED |orca::/w/feat-b -> project:p-orca:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> project:p-orca:|orca::/w/feat-c
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> project:repo:shared:ssh:gpu-vm|shared::/w/same
+renderedKeys: 20
+placeholders: empty
+selectionOrder: local|folder:fw-review local|folder:fw-notes runtime:env-1|api::/api runtime:env-1|api::/w/api-y |ext::/ext
+cmd1-9 mounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1 5=ext::/ext
+cmd1-9 unmounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1 5=ext::/ext
+cmd ids unmounted: folder:fw-review folder:fw-notes api::/api api::/w/api-y ext::/ext
diff --git a/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/group-by-workspace-status.txt b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/group-by-workspace-status.txt
new file mode 100644
index 000000000000..7186acc42a40
--- /dev/null
+++ b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/group-by-workspace-status.txt
@@ -0,0 +1,548 @@
+=== sort=manual projectOrder=manual pinnedInGroups=false ===
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=workspace-status:in-progress label="In progress" count=8 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:5 ssh:gpu-vm:2 runtime:env-1:1} hostIds={local:[shared::/w/same,orca::/orca,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[shared::/w/same,orca::/orca,orca-ssh::/orca-ssh,api::/api,lab::/lab,ext::/ext]
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=1 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:1} hostIds={local:[]} ids=[]
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[api::/w/api-y,orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+SECTION workspace-status:in-review: -
+renderedKeys: 25
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same local|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |lab::/lab |ext::/ext local|folder:fw-notes ssh:gpu-vm|folder:fw-remote local|folder:fw-review runtime:env-1|api::/w/api-y |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=shared::/w/same@local 8=orca::/orca 9=orca-ssh::/orca-ssh
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=shared::/w/same@local 8=orca::/orca 9=orca-ssh::/orca-ssh
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x shared::/w/same orca::/orca orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext folder:fw-notes folder:fw-remote folder:fw-review api::/w/api-y orca::/w/Zeta
+-- collapsed: pinned workspace-status:in-review lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+HEADER key=workspace-status:in-progress label="In progress" count=8 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:5 ssh:gpu-vm:2 runtime:env-1:1} hostIds={local:[shared::/w/same,orca::/orca,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[shared::/w/same,orca::/orca,orca-ssh::/orca-ssh,api::/api,lab::/lab,ext::/ext]
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=1 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:1} hostIds={local:[]} ids=[]
+HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[api::/w/api-y,orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION workspace-status:in-review: -
+renderedKeys: 17
+placeholders: -
+selectionOrder: local|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |lab::/lab |ext::/ext local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/w/api-y |orca::/w/Zeta
+cmd1-9 mounted: 1=shared::/w/same@local 2=orca::/orca 3=orca-ssh::/orca-ssh 4=api::/api@runtime:env-1 5=lab::/lab 6=ext::/ext 7=folder:fw-notes@local 8=folder:fw-remote@ssh:gpu-vm 9=api::/w/api-y@runtime:env-1
+cmd1-9 unmounted: 1=shared::/w/same@local 2=orca::/orca 3=orca-ssh::/orca-ssh 4=api::/api@runtime:env-1 5=lab::/lab 6=ext::/ext 7=folder:fw-notes@local 8=folder:fw-remote@ssh:gpu-vm 9=api::/w/api-y@runtime:env-1
+cmd ids unmounted: shared::/w/same orca::/orca orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext folder:fw-notes folder:fw-remote api::/w/api-y orca::/w/Zeta
+=== sort=manual projectOrder=manual pinnedInGroups=true ===
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=workspace-status:in-progress label="In progress" count=13 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:8 ssh:gpu-vm:4 runtime:env-1:1} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/feat-c,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,lab::/w/gitlab-mr,shared::/w/same,shared::/w/same,orca::/orca,orca-ssh::/orca-ssh,api::/api,orca::/w/feat-c,lab::/lab,ext::/ext]
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-a depth=0 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab parent=workspace-status:in-progress:|orca::/w/feat-a
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=2 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:2} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+ITEM rowKey=workspace-status:in-review:|orca::/w/feat-b depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[api::/w/api-y,orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+PREFERRED |orca::/w/feat-a -> workspace-status:in-progress:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> workspace-status:in-review:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> workspace-status:in-progress:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> workspace-status:in-progress:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> workspace-status:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 31
+placeholders: -
+selectionOrder: |orca::/w/feat-a |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |orca::/w/feat-c |lab::/lab |ext::/ext local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/feat-b local|folder:fw-review runtime:env-1|api::/w/api-y |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca-ssh::/w/remote-x@ssh:gpu-vm 4=shared::/w/same@local 5=shared::/w/same@ssh:gpu-vm 6=orca::/orca 7=orca-ssh::/orca-ssh 8=api::/api@runtime:env-1 9=orca::/w/feat-c
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca-ssh::/w/remote-x@ssh:gpu-vm 4=shared::/w/same@local 5=shared::/w/same@ssh:gpu-vm 6=orca::/orca 7=orca-ssh::/orca-ssh 8=api::/api@runtime:env-1 9=orca::/w/feat-c
+cmd ids unmounted: orca::/w/feat-a lab::/w/gitlab-mr orca-ssh::/w/remote-x shared::/w/same orca::/orca orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext folder:fw-notes folder:fw-remote orca::/w/feat-b folder:fw-review api::/w/api-y orca::/w/Zeta
+-- collapsed: pinned workspace-status:in-review lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+HEADER key=workspace-status:in-progress label="In progress" count=13 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:8 ssh:gpu-vm:4 runtime:env-1:1} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/feat-c,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,lab::/w/gitlab-mr,shared::/w/same,shared::/w/same,orca::/orca,orca-ssh::/orca-ssh,api::/api,orca::/w/feat-c,lab::/lab,ext::/ext]
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-a depth=0 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-a lineageCollapsed=true hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=2 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:2} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[api::/w/api-y,orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION workspace-status:in-progress: workspace-status:in-progress:|orca::/w/feat-a workspace-status:in-progress:|lab::/w/gitlab-mr workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x workspace-status:in-progress:local|shared::/w/same workspace-status:in-progress:ssh:gpu-vm|shared::/w/same workspace-status:in-progress:|orca::/orca workspace-status:in-progress:|orca-ssh::/orca-ssh workspace-status:in-progress:runtime:env-1|api::/api workspace-status:in-progress:|orca::/w/feat-c workspace-status:in-progress:|lab::/lab workspace-status:in-progress:|ext::/ext
+SECTION workspace-status:in-review: workspace-status:in-review:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-a -> workspace-status:in-progress:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> workspace-status:in-review:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> workspace-status:in-progress:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> workspace-status:in-progress:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> workspace-status:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 21
+placeholders: -
+selectionOrder: |orca::/w/feat-a ssh:gpu-vm|orca-ssh::/w/remote-x local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |orca::/w/feat-c |lab::/lab |ext::/ext local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/w/api-y |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=shared::/w/same@local 4=shared::/w/same@ssh:gpu-vm 5=orca::/orca 6=orca-ssh::/orca-ssh 7=api::/api@runtime:env-1 8=orca::/w/feat-c 9=lab::/lab
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=shared::/w/same@local 4=shared::/w/same@ssh:gpu-vm 5=orca::/orca 6=orca-ssh::/orca-ssh 7=api::/api@runtime:env-1 8=orca::/w/feat-c 9=lab::/lab
+cmd ids unmounted: orca::/w/feat-a orca-ssh::/w/remote-x shared::/w/same orca::/orca orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext folder:fw-notes folder:fw-remote api::/w/api-y orca::/w/Zeta
+=== sort=manual projectOrder=recent pinnedInGroups=false === same as sort=manual projectOrder=manual pinnedInGroups=false
+=== sort=manual projectOrder=recent pinnedInGroups=true === same as sort=manual projectOrder=manual pinnedInGroups=true
+=== sort=name projectOrder=manual pinnedInGroups=false ===
+visible: api::/w/api-y orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=workspace-status:in-progress label="In progress" count=8 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={runtime:env-1:1 local:5 ssh:gpu-vm:2} hostIds={runtime:env-1:[api::/api] local:[ext::/ext,lab::/lab,orca::/orca,shared::/w/same] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,orca::/orca,shared::/w/same]
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=1 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:1} hostIds={local:[]} ids=[]
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[api::/w/api-y,orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+SECTION workspace-status:in-review: -
+renderedKeys: 25
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh |orca::/orca local|shared::/w/same local|folder:fw-notes ssh:gpu-vm|folder:fw-remote local|folder:fw-review runtime:env-1|api::/w/api-y |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=api::/api@runtime:env-1 8=ext::/ext 9=lab::/lab
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=shared::/w/same@local 8=api::/api@runtime:env-1 9=ext::/ext
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x shared::/w/same api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/orca folder:fw-notes folder:fw-remote folder:fw-review api::/w/api-y orca::/w/Zeta
+-- collapsed: pinned workspace-status:in-review lineage:orca::/w/feat-a --
+visible: api::/w/api-y orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=workspace-status:in-progress label="In progress" count=8 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={runtime:env-1:1 local:5 ssh:gpu-vm:2} hostIds={runtime:env-1:[api::/api] local:[ext::/ext,lab::/lab,orca::/orca,shared::/w/same] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,orca::/orca,shared::/w/same]
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=1 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:1} hostIds={local:[]} ids=[]
+HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[api::/w/api-y,orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION workspace-status:in-review: -
+renderedKeys: 17
+placeholders: -
+selectionOrder: runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh |orca::/orca local|shared::/w/same local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/w/api-y |orca::/w/Zeta
+cmd1-9 mounted: 1=api::/api@runtime:env-1 2=ext::/ext 3=lab::/lab 4=orca-ssh::/orca-ssh 5=orca::/orca 6=shared::/w/same@local 7=folder:fw-notes@local 8=folder:fw-remote@ssh:gpu-vm 9=api::/w/api-y@runtime:env-1
+cmd1-9 unmounted: 1=api::/api@runtime:env-1 2=ext::/ext 3=lab::/lab 4=orca-ssh::/orca-ssh 5=orca::/orca 6=shared::/w/same@local 7=folder:fw-notes@local 8=folder:fw-remote@ssh:gpu-vm 9=api::/w/api-y@runtime:env-1
+cmd ids unmounted: api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/orca shared::/w/same folder:fw-notes folder:fw-remote api::/w/api-y orca::/w/Zeta
+=== sort=name projectOrder=manual pinnedInGroups=true ===
+visible: api::/w/api-y orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=workspace-status:in-progress label="In progress" count=13 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:8 runtime:env-1:1 ssh:gpu-vm:4} hostIds={local:[orca::/w/feat-a,orca::/w/feat-c,lab::/w/gitlab-mr,ext::/ext,lab::/lab,orca::/orca,shared::/w/same] runtime:env-1:[api::/api] ssh:gpu-vm:[orca-ssh::/orca-ssh,orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-c,lab::/w/gitlab-mr,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,orca::/orca,orca-ssh::/w/remote-x,shared::/w/same,shared::/w/same]
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-a depth=0 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab parent=workspace-status:in-progress:|orca::/w/feat-a
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=2 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:2} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+ITEM rowKey=workspace-status:in-review:|orca::/w/feat-b depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[api::/w/api-y,orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+PREFERRED |orca::/w/feat-a -> workspace-status:in-progress:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> workspace-status:in-review:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> workspace-status:in-progress:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> workspace-status:in-progress:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> workspace-status:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 31
+placeholders: -
+selectionOrder: |orca::/w/feat-a |lab::/w/gitlab-mr |orca::/w/feat-c runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh |orca::/orca ssh:gpu-vm|orca-ssh::/w/remote-x local|shared::/w/same ssh:gpu-vm|shared::/w/same local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/feat-b local|folder:fw-review runtime:env-1|api::/w/api-y |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca::/w/feat-c 4=api::/api@runtime:env-1 5=ext::/ext 6=lab::/lab 7=orca-ssh::/orca-ssh 8=orca::/orca 9=orca-ssh::/w/remote-x@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca::/w/feat-c 4=api::/api@runtime:env-1 5=ext::/ext 6=lab::/lab 7=orca-ssh::/orca-ssh 8=orca::/orca 9=orca-ssh::/w/remote-x@ssh:gpu-vm
+cmd ids unmounted: orca::/w/feat-a lab::/w/gitlab-mr orca::/w/feat-c api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x shared::/w/same folder:fw-notes folder:fw-remote orca::/w/feat-b folder:fw-review api::/w/api-y orca::/w/Zeta
+-- collapsed: pinned workspace-status:in-review lineage:orca::/w/feat-a --
+visible: api::/w/api-y orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=workspace-status:in-progress label="In progress" count=13 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:8 runtime:env-1:1 ssh:gpu-vm:4} hostIds={local:[orca::/w/feat-a,orca::/w/feat-c,lab::/w/gitlab-mr,ext::/ext,lab::/lab,orca::/orca,shared::/w/same] runtime:env-1:[api::/api] ssh:gpu-vm:[orca-ssh::/orca-ssh,orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-c,lab::/w/gitlab-mr,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,orca::/orca,orca-ssh::/w/remote-x,shared::/w/same,shared::/w/same]
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-a depth=0 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-a lineageCollapsed=true hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=2 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:2} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[api::/w/api-y,orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION workspace-status:in-progress: workspace-status:in-progress:|orca::/w/feat-a workspace-status:in-progress:|lab::/w/gitlab-mr workspace-status:in-progress:|orca::/w/feat-c workspace-status:in-progress:runtime:env-1|api::/api workspace-status:in-progress:|ext::/ext workspace-status:in-progress:|lab::/lab workspace-status:in-progress:|orca-ssh::/orca-ssh workspace-status:in-progress:|orca::/orca workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x workspace-status:in-progress:local|shared::/w/same workspace-status:in-progress:ssh:gpu-vm|shared::/w/same
+SECTION workspace-status:in-review: workspace-status:in-review:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-a -> workspace-status:in-progress:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> workspace-status:in-review:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> workspace-status:in-progress:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> workspace-status:in-progress:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> workspace-status:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 21
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-c runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh |orca::/orca ssh:gpu-vm|orca-ssh::/w/remote-x local|shared::/w/same ssh:gpu-vm|shared::/w/same local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/w/api-y |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-c 3=api::/api@runtime:env-1 4=ext::/ext 5=lab::/lab 6=orca-ssh::/orca-ssh 7=orca::/orca 8=orca-ssh::/w/remote-x@ssh:gpu-vm 9=shared::/w/same@local
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-c 3=api::/api@runtime:env-1 4=ext::/ext 5=lab::/lab 6=orca-ssh::/orca-ssh 7=orca::/orca 8=orca-ssh::/w/remote-x@ssh:gpu-vm 9=shared::/w/same@local
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-c api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x shared::/w/same folder:fw-notes folder:fw-remote api::/w/api-y orca::/w/Zeta
+=== sort=name projectOrder=recent pinnedInGroups=false === same as sort=name projectOrder=manual pinnedInGroups=false
+=== sort=name projectOrder=recent pinnedInGroups=true === same as sort=name projectOrder=manual pinnedInGroups=true
+=== sort=recent projectOrder=manual pinnedInGroups=false ===
+visible: orca::/w/feat-a api::/w/api-y orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=workspace-status:in-progress label="In progress" count=8 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:5 runtime:env-1:1 ssh:gpu-vm:2} hostIds={local:[orca::/orca,ext::/ext,lab::/lab,shared::/w/same] runtime:env-1:[api::/api] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[orca::/orca,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,shared::/w/same]
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=1 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:1} hostIds={local:[]} ids=[]
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[api::/w/api-y,orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+SECTION workspace-status:in-review: -
+renderedKeys: 25
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same |orca::/orca runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh local|shared::/w/same local|folder:fw-notes ssh:gpu-vm|folder:fw-remote local|folder:fw-review runtime:env-1|api::/w/api-y |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=orca::/orca 8=api::/api@runtime:env-1 9=ext::/ext
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=shared::/w/same@local 8=orca::/orca 9=api::/api@runtime:env-1
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x shared::/w/same orca::/orca api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh folder:fw-notes folder:fw-remote folder:fw-review api::/w/api-y orca::/w/Zeta
+-- collapsed: pinned workspace-status:in-review lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a api::/w/api-y orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=workspace-status:in-progress label="In progress" count=8 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:5 runtime:env-1:1 ssh:gpu-vm:2} hostIds={local:[orca::/orca,ext::/ext,lab::/lab,shared::/w/same] runtime:env-1:[api::/api] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[orca::/orca,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,shared::/w/same]
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=1 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:1} hostIds={local:[]} ids=[]
+HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[api::/w/api-y,orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION workspace-status:in-review: -
+renderedKeys: 17
+placeholders: -
+selectionOrder: |orca::/orca runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh local|shared::/w/same local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/w/api-y |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/orca 2=api::/api@runtime:env-1 3=ext::/ext 4=lab::/lab 5=orca-ssh::/orca-ssh 6=shared::/w/same@local 7=folder:fw-notes@local 8=folder:fw-remote@ssh:gpu-vm 9=api::/w/api-y@runtime:env-1
+cmd1-9 unmounted: 1=orca::/orca 2=api::/api@runtime:env-1 3=ext::/ext 4=lab::/lab 5=orca-ssh::/orca-ssh 6=shared::/w/same@local 7=folder:fw-notes@local 8=folder:fw-remote@ssh:gpu-vm 9=api::/w/api-y@runtime:env-1
+cmd ids unmounted: orca::/orca api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh shared::/w/same folder:fw-notes folder:fw-remote api::/w/api-y orca::/w/Zeta
+=== sort=recent projectOrder=manual pinnedInGroups=true ===
+visible: orca::/w/feat-a api::/w/api-y orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=workspace-status:in-progress label="In progress" count=13 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:8 runtime:env-1:1 ssh:gpu-vm:4} hostIds={local:[orca::/w/feat-a,orca::/orca,orca::/w/feat-c,lab::/w/gitlab-mr,ext::/ext,lab::/lab,shared::/w/same] runtime:env-1:[api::/api] ssh:gpu-vm:[orca-ssh::/orca-ssh,orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/orca,orca::/w/feat-c,lab::/w/gitlab-mr,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,orca-ssh::/w/remote-x,shared::/w/same,shared::/w/same]
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-a depth=0 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab parent=workspace-status:in-progress:|orca::/w/feat-a
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=2 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:2} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+ITEM rowKey=workspace-status:in-review:|orca::/w/feat-b depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[api::/w/api-y,orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+PREFERRED |orca::/w/feat-a -> workspace-status:in-progress:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> workspace-status:in-review:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> workspace-status:in-progress:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> workspace-status:in-progress:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> workspace-status:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 31
+placeholders: -
+selectionOrder: |orca::/w/feat-a |lab::/w/gitlab-mr |orca::/orca |orca::/w/feat-c runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh ssh:gpu-vm|orca-ssh::/w/remote-x local|shared::/w/same ssh:gpu-vm|shared::/w/same local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/feat-b local|folder:fw-review runtime:env-1|api::/w/api-y |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca::/orca 4=orca::/w/feat-c 5=api::/api@runtime:env-1 6=ext::/ext 7=lab::/lab 8=orca-ssh::/orca-ssh 9=orca-ssh::/w/remote-x@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca::/orca 4=orca::/w/feat-c 5=api::/api@runtime:env-1 6=ext::/ext 7=lab::/lab 8=orca-ssh::/orca-ssh 9=orca-ssh::/w/remote-x@ssh:gpu-vm
+cmd ids unmounted: orca::/w/feat-a lab::/w/gitlab-mr orca::/orca orca::/w/feat-c api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same folder:fw-notes folder:fw-remote orca::/w/feat-b folder:fw-review api::/w/api-y orca::/w/Zeta
+-- collapsed: pinned workspace-status:in-review lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a api::/w/api-y orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=workspace-status:in-progress label="In progress" count=13 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:8 runtime:env-1:1 ssh:gpu-vm:4} hostIds={local:[orca::/w/feat-a,orca::/orca,orca::/w/feat-c,lab::/w/gitlab-mr,ext::/ext,lab::/lab,shared::/w/same] runtime:env-1:[api::/api] ssh:gpu-vm:[orca-ssh::/orca-ssh,orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/orca,orca::/w/feat-c,lab::/w/gitlab-mr,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,orca-ssh::/w/remote-x,shared::/w/same,shared::/w/same]
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-a depth=0 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-a lineageCollapsed=true hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=2 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:2} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[api::/w/api-y,orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION workspace-status:in-progress: workspace-status:in-progress:|orca::/w/feat-a workspace-status:in-progress:|lab::/w/gitlab-mr workspace-status:in-progress:|orca::/orca workspace-status:in-progress:|orca::/w/feat-c workspace-status:in-progress:runtime:env-1|api::/api workspace-status:in-progress:|ext::/ext workspace-status:in-progress:|lab::/lab workspace-status:in-progress:|orca-ssh::/orca-ssh workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x workspace-status:in-progress:local|shared::/w/same workspace-status:in-progress:ssh:gpu-vm|shared::/w/same
+SECTION workspace-status:in-review: workspace-status:in-review:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-a -> workspace-status:in-progress:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> workspace-status:in-review:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> workspace-status:in-progress:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> workspace-status:in-progress:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> workspace-status:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 21
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/orca |orca::/w/feat-c runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh ssh:gpu-vm|orca-ssh::/w/remote-x local|shared::/w/same ssh:gpu-vm|shared::/w/same local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/w/api-y |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/orca 3=orca::/w/feat-c 4=api::/api@runtime:env-1 5=ext::/ext 6=lab::/lab 7=orca-ssh::/orca-ssh 8=orca-ssh::/w/remote-x@ssh:gpu-vm 9=shared::/w/same@local
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/orca 3=orca::/w/feat-c 4=api::/api@runtime:env-1 5=ext::/ext 6=lab::/lab 7=orca-ssh::/orca-ssh 8=orca-ssh::/w/remote-x@ssh:gpu-vm 9=shared::/w/same@local
+cmd ids unmounted: orca::/w/feat-a orca::/orca orca::/w/feat-c api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same folder:fw-notes folder:fw-remote api::/w/api-y orca::/w/Zeta
+=== sort=recent projectOrder=recent pinnedInGroups=false === same as sort=recent projectOrder=manual pinnedInGroups=false
+=== sort=recent projectOrder=recent pinnedInGroups=true === same as sort=recent projectOrder=manual pinnedInGroups=true
+=== sort=smart projectOrder=manual pinnedInGroups=false === same as sort=recent projectOrder=manual pinnedInGroups=false
+=== sort=smart projectOrder=manual pinnedInGroups=true === same as sort=recent projectOrder=manual pinnedInGroups=true
+=== sort=smart projectOrder=recent pinnedInGroups=false === same as sort=recent projectOrder=manual pinnedInGroups=false
+=== sort=smart projectOrder=recent pinnedInGroups=true === same as sort=recent projectOrder=manual pinnedInGroups=true
+=== sort=repo projectOrder=manual pinnedInGroups=false ===
+visible: api::/w/api-y api::/api ext::/ext orca::/w/feat-a lab::/w/gitlab-mr lab::/lab orca::/w/feat-b orca::/w/feat-c orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x orca::/w/Zeta shared::/w/same shared::/w/same
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 lastChild=true children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=workspace-status:in-progress label="In progress" count=8 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={runtime:env-1:1 local:5 ssh:gpu-vm:2} hostIds={runtime:env-1:[api::/api] local:[ext::/ext,lab::/lab,orca::/orca,shared::/w/same] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,orca::/orca,shared::/w/same]
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=1 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:1} hostIds={local:[]} ids=[]
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[api::/w/api-y,orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+SECTION workspace-status:in-review: -
+renderedKeys: 25
+placeholders: -
+selectionOrder: |orca::/w/feat-a |lab::/w/gitlab-mr |orca::/w/feat-b |orca::/w/feat-c ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh |orca::/orca local|shared::/w/same local|folder:fw-notes ssh:gpu-vm|folder:fw-remote local|folder:fw-review runtime:env-1|api::/w/api-y |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca::/w/feat-b#lineage:orca::/w/feat-b 4=orca::/w/feat-c 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=api::/api@runtime:env-1 8=ext::/ext 9=lab::/lab
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca::/w/feat-b 4=orca::/w/feat-c 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=shared::/w/same@local 8=api::/api@runtime:env-1 9=ext::/ext
+cmd ids unmounted: orca::/w/feat-a lab::/w/gitlab-mr orca::/w/feat-b orca::/w/feat-c orca-ssh::/w/remote-x shared::/w/same api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/orca folder:fw-notes folder:fw-remote folder:fw-review api::/w/api-y orca::/w/Zeta
+-- collapsed: pinned workspace-status:in-review lineage:orca::/w/feat-a --
+visible: api::/w/api-y api::/api ext::/ext orca::/w/feat-a lab::/w/gitlab-mr lab::/lab orca::/w/feat-b orca::/w/feat-c orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x orca::/w/Zeta shared::/w/same shared::/w/same
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=workspace-status:in-progress label="In progress" count=8 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={runtime:env-1:1 local:5 ssh:gpu-vm:2} hostIds={runtime:env-1:[api::/api] local:[ext::/ext,lab::/lab,orca::/orca,shared::/w/same] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,orca::/orca,shared::/w/same]
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=1 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:1} hostIds={local:[]} ids=[]
+HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[api::/w/api-y,orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|lab::/w/gitlab-mr pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION workspace-status:in-review: -
+renderedKeys: 17
+placeholders: -
+selectionOrder: runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh |orca::/orca local|shared::/w/same local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/w/api-y |orca::/w/Zeta
+cmd1-9 mounted: 1=api::/api@runtime:env-1 2=ext::/ext 3=lab::/lab 4=orca-ssh::/orca-ssh 5=orca::/orca 6=shared::/w/same@local 7=folder:fw-notes@local 8=folder:fw-remote@ssh:gpu-vm 9=api::/w/api-y@runtime:env-1
+cmd1-9 unmounted: 1=api::/api@runtime:env-1 2=ext::/ext 3=lab::/lab 4=orca-ssh::/orca-ssh 5=orca::/orca 6=shared::/w/same@local 7=folder:fw-notes@local 8=folder:fw-remote@ssh:gpu-vm 9=api::/w/api-y@runtime:env-1
+cmd ids unmounted: api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/orca shared::/w/same folder:fw-notes folder:fw-remote api::/w/api-y orca::/w/Zeta
+=== sort=repo projectOrder=manual pinnedInGroups=true ===
+visible: api::/w/api-y api::/api ext::/ext orca::/w/feat-a lab::/w/gitlab-mr lab::/lab orca::/w/feat-b orca::/w/feat-c orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x orca::/w/Zeta shared::/w/same shared::/w/same
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 lastChild=true children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=workspace-status:in-progress label="In progress" count=13 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={runtime:env-1:1 local:8 ssh:gpu-vm:4} hostIds={runtime:env-1:[api::/api] local:[ext::/ext,orca::/w/feat-a,lab::/w/gitlab-mr,lab::/lab,orca::/w/feat-c,orca::/orca,shared::/w/same] ssh:gpu-vm:[orca-ssh::/orca-ssh,orca-ssh::/w/remote-x,shared::/w/same]} ids=[api::/api,ext::/ext,orca::/w/feat-a,lab::/w/gitlab-mr,lab::/lab,orca::/w/feat-c,orca-ssh::/orca-ssh,orca::/orca,orca-ssh::/w/remote-x,shared::/w/same,shared::/w/same]
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-a depth=0 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab parent=workspace-status:in-progress:|orca::/w/feat-a
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=2 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:2} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+ITEM rowKey=workspace-status:in-review:|orca::/w/feat-b depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[api::/w/api-y,orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+PREFERRED |orca::/w/feat-a -> workspace-status:in-progress:|orca::/w/feat-a
+PREFERRED |lab::/w/gitlab-mr -> workspace-status:in-progress:|lab::/w/gitlab-mr
+PREFERRED |orca::/w/feat-b -> workspace-status:in-review:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> workspace-status:in-progress:|orca::/w/feat-c
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> workspace-status:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 31
+placeholders: -
+selectionOrder: runtime:env-1|api::/api |ext::/ext |orca::/w/feat-a |lab::/w/gitlab-mr |lab::/lab |orca::/w/feat-c |orca-ssh::/orca-ssh |orca::/orca ssh:gpu-vm|orca-ssh::/w/remote-x local|shared::/w/same ssh:gpu-vm|shared::/w/same local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/feat-b local|folder:fw-review runtime:env-1|api::/w/api-y |orca::/w/Zeta
+cmd1-9 mounted: 1=api::/api@runtime:env-1 2=ext::/ext 3=orca::/w/feat-a#lineage:orca::/w/feat-a 4=lab::/w/gitlab-mr 5=lab::/lab 6=orca::/w/feat-c 7=orca-ssh::/orca-ssh 8=orca::/orca 9=orca-ssh::/w/remote-x@ssh:gpu-vm
+cmd1-9 unmounted: 1=api::/api@runtime:env-1 2=ext::/ext 3=orca::/w/feat-a 4=lab::/w/gitlab-mr 5=lab::/lab 6=orca::/w/feat-c 7=orca-ssh::/orca-ssh 8=orca::/orca 9=orca-ssh::/w/remote-x@ssh:gpu-vm
+cmd ids unmounted: api::/api ext::/ext orca::/w/feat-a lab::/w/gitlab-mr lab::/lab orca::/w/feat-c orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x shared::/w/same folder:fw-notes folder:fw-remote orca::/w/feat-b folder:fw-review api::/w/api-y orca::/w/Zeta
+-- collapsed: pinned workspace-status:in-review lineage:orca::/w/feat-a --
+visible: api::/w/api-y api::/api ext::/ext orca::/w/feat-a lab::/w/gitlab-mr lab::/lab orca::/w/feat-b orca::/w/feat-c orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x orca::/w/Zeta shared::/w/same shared::/w/same
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=workspace-status:in-progress label="In progress" count=13 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={runtime:env-1:1 local:8 ssh:gpu-vm:4} hostIds={runtime:env-1:[api::/api] local:[ext::/ext,orca::/w/feat-a,lab::/w/gitlab-mr,lab::/lab,orca::/w/feat-c,orca::/orca,shared::/w/same] ssh:gpu-vm:[orca-ssh::/orca-ssh,orca-ssh::/w/remote-x,shared::/w/same]} ids=[api::/api,ext::/ext,orca::/w/feat-a,lab::/w/gitlab-mr,lab::/lab,orca::/w/feat-c,orca-ssh::/orca-ssh,orca::/orca,orca-ssh::/w/remote-x,shared::/w/same,shared::/w/same]
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-a depth=0 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-a lineageCollapsed=true hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=2 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:2} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[api::/w/api-y,orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|lab::/w/gitlab-mr pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION workspace-status:in-progress: workspace-status:in-progress:runtime:env-1|api::/api workspace-status:in-progress:|ext::/ext workspace-status:in-progress:|orca::/w/feat-a workspace-status:in-progress:|lab::/w/gitlab-mr workspace-status:in-progress:|lab::/lab workspace-status:in-progress:|orca::/w/feat-c workspace-status:in-progress:|orca-ssh::/orca-ssh workspace-status:in-progress:|orca::/orca workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x workspace-status:in-progress:local|shared::/w/same workspace-status:in-progress:ssh:gpu-vm|shared::/w/same
+SECTION workspace-status:in-review: workspace-status:in-review:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-a -> workspace-status:in-progress:|orca::/w/feat-a
+PREFERRED |lab::/w/gitlab-mr -> workspace-status:in-progress:|lab::/w/gitlab-mr
+PREFERRED |orca::/w/feat-b -> workspace-status:in-review:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> workspace-status:in-progress:|orca::/w/feat-c
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> workspace-status:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 21
+placeholders: -
+selectionOrder: runtime:env-1|api::/api |ext::/ext |orca::/w/feat-a |lab::/lab |orca::/w/feat-c |orca-ssh::/orca-ssh |orca::/orca ssh:gpu-vm|orca-ssh::/w/remote-x local|shared::/w/same ssh:gpu-vm|shared::/w/same local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/w/api-y |orca::/w/Zeta
+cmd1-9 mounted: 1=api::/api@runtime:env-1 2=ext::/ext 3=orca::/w/feat-a#lineage:orca::/w/feat-a 4=lab::/lab 5=orca::/w/feat-c 6=orca-ssh::/orca-ssh 7=orca::/orca 8=orca-ssh::/w/remote-x@ssh:gpu-vm 9=shared::/w/same@local
+cmd1-9 unmounted: 1=api::/api@runtime:env-1 2=ext::/ext 3=orca::/w/feat-a 4=lab::/lab 5=orca::/w/feat-c 6=orca-ssh::/orca-ssh 7=orca::/orca 8=orca-ssh::/w/remote-x@ssh:gpu-vm 9=shared::/w/same@local
+cmd ids unmounted: api::/api ext::/ext orca::/w/feat-a lab::/lab orca::/w/feat-c orca-ssh::/orca-ssh orca::/orca orca-ssh::/w/remote-x shared::/w/same folder:fw-notes folder:fw-remote api::/w/api-y orca::/w/Zeta
+=== sort=repo projectOrder=recent pinnedInGroups=false === same as sort=repo projectOrder=manual pinnedInGroups=false
+=== sort=repo projectOrder=recent pinnedInGroups=true === same as sort=repo projectOrder=manual pinnedInGroups=true
diff --git a/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-hide-default-branch.txt b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-hide-default-branch.txt
new file mode 100644
index 000000000000..7161dce409d1
--- /dev/null
+++ b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-hide-default-branch.txt
@@ -0,0 +1,469 @@
+=== groupBy=none pinnedInGroups=false ===
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/w/Zeta orca::/w/feat-c
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=all label="All" count=6 tone="text-foreground" icon=List hostCounts={runtime:env-1:1 local:4 ssh:gpu-vm:1} hostIds={runtime:env-1:[api::/w/api-y] local:[shared::/w/same,orca::/w/Zeta] ssh:gpu-vm:[]} ids=[api::/w/api-y,shared::/w/same,orca::/w/Zeta]
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+renderedKeys: 18
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same runtime:env-1|api::/w/api-y local|shared::/w/same |orca::/w/Zeta local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=api::/w/api-y@runtime:env-1 8=shared::/w/same@local 9=orca::/w/Zeta
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=shared::/w/same@local 8=api::/w/api-y@runtime:env-1 9=orca::/w/Zeta
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x shared::/w/same api::/w/api-y orca::/w/Zeta folder:fw-review folder:fw-notes folder:fw-remote
+-- collapsed: pinned lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/w/Zeta orca::/w/feat-c
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+HEADER key=all label="All" count=6 tone="text-foreground" icon=List hostCounts={runtime:env-1:1 local:4 ssh:gpu-vm:1} hostIds={runtime:env-1:[api::/w/api-y] local:[shared::/w/same,orca::/w/Zeta] ssh:gpu-vm:[]} ids=[api::/w/api-y,shared::/w/same,orca::/w/Zeta]
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+renderedKeys: 12
+placeholders: -
+selectionOrder: runtime:env-1|api::/w/api-y local|shared::/w/same |orca::/w/Zeta local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=api::/w/api-y@runtime:env-1 2=shared::/w/same@local 3=orca::/w/Zeta 4=folder:fw-review@local 5=folder:fw-notes@local 6=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: 1=api::/w/api-y@runtime:env-1 2=shared::/w/same@local 3=orca::/w/Zeta 4=folder:fw-review@local 5=folder:fw-notes@local 6=folder:fw-remote@ssh:gpu-vm
+cmd ids unmounted: api::/w/api-y shared::/w/same orca::/w/Zeta folder:fw-review folder:fw-notes folder:fw-remote
+=== groupBy=none pinnedInGroups=true ===
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/w/Zeta orca::/w/feat-c
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=all label="All" count=12 tone="text-foreground" icon=List hostCounts={local:8 ssh:gpu-vm:3 runtime:env-1:1} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/Zeta,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same] runtime:env-1:[api::/w/api-y]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,api::/w/api-y,lab::/w/gitlab-mr,shared::/w/same,shared::/w/same,orca::/w/Zeta,orca::/w/feat-c]
+ITEM rowKey=all:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=natural owning=project:p-orca parent=all:|orca::/w/feat-a
+ITEM rowKey=all:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca parent=all:|orca::/w/feat-b
+ITEM rowKey=all:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab parent=all:|orca::/w/feat-a
+ITEM rowKey=all:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=all:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+PREFERRED |orca::/w/feat-a -> all:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> all:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> all:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> all:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> all:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> all:ssh:gpu-vm|shared::/w/same
+renderedKeys: 24
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x runtime:env-1|api::/w/api-y local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/w/Zeta local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=api::/w/api-y@runtime:env-1 7=shared::/w/same@local 8=shared::/w/same@ssh:gpu-vm 9=orca::/w/Zeta
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=api::/w/api-y@runtime:env-1 7=shared::/w/same@local 8=shared::/w/same@ssh:gpu-vm 9=orca::/w/Zeta
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x api::/w/api-y shared::/w/same orca::/w/Zeta folder:fw-review folder:fw-notes folder:fw-remote
+-- collapsed: pinned lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/w/Zeta orca::/w/feat-c
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+HEADER key=all label="All" count=12 tone="text-foreground" icon=List hostCounts={local:8 ssh:gpu-vm:3 runtime:env-1:1} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/Zeta,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same] runtime:env-1:[api::/w/api-y]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,api::/w/api-y,lab::/w/gitlab-mr,shared::/w/same,shared::/w/same,orca::/w/Zeta,orca::/w/feat-c]
+ITEM rowKey=all:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a lineageCollapsed=true hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=all:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION all: all:|orca::/w/feat-a all:|orca::/w/feat-b all:|orca::/w/feat-c all:|lab::/w/gitlab-mr all:ssh:gpu-vm|orca-ssh::/w/remote-x all:runtime:env-1|api::/w/api-y all:local|shared::/w/same all:ssh:gpu-vm|shared::/w/same all:|orca::/w/Zeta
+PREFERRED |orca::/w/feat-a -> all:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> all:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> all:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> all:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> all:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> all:ssh:gpu-vm|shared::/w/same
+renderedKeys: 15
+placeholders: -
+selectionOrder: |orca::/w/feat-a ssh:gpu-vm|orca-ssh::/w/remote-x runtime:env-1|api::/w/api-y local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/w/Zeta local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=api::/w/api-y@runtime:env-1 4=shared::/w/same@local 5=shared::/w/same@ssh:gpu-vm 6=orca::/w/Zeta 7=folder:fw-review@local 8=folder:fw-notes@local 9=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=api::/w/api-y@runtime:env-1 4=shared::/w/same@local 5=shared::/w/same@ssh:gpu-vm 6=orca::/w/Zeta 7=folder:fw-review@local 8=folder:fw-notes@local 9=folder:fw-remote@ssh:gpu-vm
+cmd ids unmounted: orca::/w/feat-a orca-ssh::/w/remote-x api::/w/api-y shared::/w/same orca::/w/Zeta folder:fw-review folder:fw-notes folder:fw-remote
+=== groupBy=repo pinnedInGroups=false ===
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/w/Zeta orca::/w/feat-c
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=project-group:pg-work label="Work" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=1 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+ITEM rowKey=project:p-orca:|orca::/w/Zeta depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+HEADER key=project-group:pg-nested label="Nested" count=0 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:repo:api label="api" count=1 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=1 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=0 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+SECTION project:repo:empty: -
+SECTION project:repo:ext: -
+renderedKeys: 27
+placeholders: empty
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same |orca::/w/Zeta local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/w/api-y local|shared::/w/same
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=orca::/w/Zeta 8=folder:fw-review@local 9=folder:fw-notes@local
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=orca::/w/Zeta 8=folder:fw-review@local 9=folder:fw-notes@local
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x shared::/w/same orca::/w/Zeta folder:fw-review folder:fw-notes folder:fw-remote api::/w/api-y
+-- collapsed: pinned project:p-orca project-group:pg-folders project:repo:api project:repo:empty lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/w/Zeta orca::/w/feat-c
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+HEADER key=project-group:pg-work label="Work" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=1 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+HEADER key=project-group:pg-nested label="Nested" count=0 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:repo:api label="api" count=1 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+HEADER key=project:repo:shared label="shared" count=1 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=0 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION project:p-orca: project:p-orca:|orca::/w/Zeta
+SECTION project:repo:api: project:repo:api:runtime:env-1|api::/w/api-y
+SECTION project:repo:empty: -
+SECTION project:repo:ext: -
+renderedKeys: 14
+placeholders: empty
+selectionOrder: ssh:gpu-vm|folder:fw-remote local|shared::/w/same
+cmd1-9 mounted: 1=folder:fw-remote@ssh:gpu-vm 2=shared::/w/same@local
+cmd1-9 unmounted: 1=folder:fw-remote@ssh:gpu-vm 2=shared::/w/same@local
+cmd ids unmounted: folder:fw-remote shared::/w/same
+=== groupBy=repo pinnedInGroups=true ===
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/w/Zeta orca::/w/feat-c
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=project-group:pg-work label="Work" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=6 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+ITEM rowKey=project:p-orca:|orca::/w/feat-a depth=0 groupDepth=1 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/feat-b depth=1 groupDepth=1 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-a
+ITEM rowKey=project:p-orca:|orca::/w/feat-c depth=2 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-b
+ITEM rowKey=project:p-orca:|lab::/w/gitlab-mr depth=1 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-a
+ITEM rowKey=project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/Zeta depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+HEADER key=project-group:pg-nested label="Nested" count=0 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:repo:api label="api" count=1 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=2 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=project:repo:shared:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=0 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+SECTION project:repo:empty: -
+SECTION project:repo:ext: -
+PREFERRED |orca::/w/feat-a -> project:p-orca:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> project:p-orca:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> project:p-orca:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> project:p-orca:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> project:repo:shared:ssh:gpu-vm|shared::/w/same
+renderedKeys: 33
+placeholders: empty
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x |orca::/w/Zeta local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/w/api-y local|shared::/w/same ssh:gpu-vm|shared::/w/same
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=orca::/w/Zeta 7=folder:fw-review@local 8=folder:fw-notes@local 9=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=orca::/w/Zeta 7=folder:fw-review@local 8=folder:fw-notes@local 9=folder:fw-remote@ssh:gpu-vm
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x orca::/w/Zeta folder:fw-review folder:fw-notes folder:fw-remote api::/w/api-y shared::/w/same
+-- collapsed: pinned project:p-orca project-group:pg-folders project:repo:api project:repo:empty lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/w/Zeta orca::/w/feat-c
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+HEADER key=project-group:pg-work label="Work" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=6 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+HEADER key=project-group:pg-nested label="Nested" count=0 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:repo:api label="api" count=1 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+HEADER key=project:repo:shared label="shared" count=2 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=project:repo:shared:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=0 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION project:p-orca: project:p-orca:|orca::/w/feat-a project:p-orca:|orca::/w/feat-b project:p-orca:|orca::/w/feat-c project:p-orca:|lab::/w/gitlab-mr project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x project:p-orca:|orca::/w/Zeta
+SECTION project:repo:api: project:repo:api:runtime:env-1|api::/w/api-y
+SECTION project:repo:empty: -
+SECTION project:repo:ext: -
+PREFERRED |orca::/w/feat-a -> project:p-orca:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> project:p-orca:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> project:p-orca:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> project:p-orca:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> project:repo:shared:ssh:gpu-vm|shared::/w/same
+renderedKeys: 15
+placeholders: empty
+selectionOrder: ssh:gpu-vm|folder:fw-remote local|shared::/w/same ssh:gpu-vm|shared::/w/same
+cmd1-9 mounted: 1=folder:fw-remote@ssh:gpu-vm 2=shared::/w/same@local 3=shared::/w/same@ssh:gpu-vm
+cmd1-9 unmounted: 1=folder:fw-remote@ssh:gpu-vm 2=shared::/w/same@local 3=shared::/w/same@ssh:gpu-vm
+cmd ids unmounted: folder:fw-remote shared::/w/same
+=== groupBy=workspace-status pinnedInGroups=false ===
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/w/Zeta orca::/w/feat-c
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=workspace-status:in-progress label="In progress" count=3 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:2 ssh:gpu-vm:1} hostIds={local:[shared::/w/same] ssh:gpu-vm:[]} ids=[shared::/w/same]
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=1 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:1} hostIds={local:[]} ids=[]
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[api::/w/api-y,orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+SECTION workspace-status:in-review: -
+renderedKeys: 20
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same local|shared::/w/same local|folder:fw-notes ssh:gpu-vm|folder:fw-remote local|folder:fw-review runtime:env-1|api::/w/api-y |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=shared::/w/same@local 8=folder:fw-notes@local 9=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=shared::/w/same@local 8=folder:fw-notes@local 9=folder:fw-remote@ssh:gpu-vm
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x shared::/w/same folder:fw-notes folder:fw-remote folder:fw-review api::/w/api-y orca::/w/Zeta
+-- collapsed: pinned workspace-status:in-review lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/w/Zeta orca::/w/feat-c
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+HEADER key=workspace-status:in-progress label="In progress" count=3 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:2 ssh:gpu-vm:1} hostIds={local:[shared::/w/same] ssh:gpu-vm:[]} ids=[shared::/w/same]
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=1 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:1} hostIds={local:[]} ids=[]
+HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[api::/w/api-y,orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION workspace-status:in-review: -
+renderedKeys: 12
+placeholders: -
+selectionOrder: local|shared::/w/same local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/w/api-y |orca::/w/Zeta
+cmd1-9 mounted: 1=shared::/w/same@local 2=folder:fw-notes@local 3=folder:fw-remote@ssh:gpu-vm 4=api::/w/api-y@runtime:env-1 5=orca::/w/Zeta
+cmd1-9 unmounted: 1=shared::/w/same@local 2=folder:fw-notes@local 3=folder:fw-remote@ssh:gpu-vm 4=api::/w/api-y@runtime:env-1 5=orca::/w/Zeta
+cmd ids unmounted: shared::/w/same folder:fw-notes folder:fw-remote api::/w/api-y orca::/w/Zeta
+=== groupBy=workspace-status pinnedInGroups=true ===
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/w/Zeta orca::/w/feat-c
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=workspace-status:in-progress label="In progress" count=8 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:5 ssh:gpu-vm:3} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,lab::/w/gitlab-mr,shared::/w/same,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-a depth=0 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab parent=workspace-status:in-progress:|orca::/w/feat-a
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=2 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:2} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+ITEM rowKey=workspace-status:in-review:|orca::/w/feat-b depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[api::/w/api-y,orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+PREFERRED |orca::/w/feat-a -> workspace-status:in-progress:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> workspace-status:in-review:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> workspace-status:in-progress:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> workspace-status:in-progress:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> workspace-status:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 26
+placeholders: -
+selectionOrder: |orca::/w/feat-a |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/w/feat-c local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/feat-b local|folder:fw-review runtime:env-1|api::/w/api-y |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca-ssh::/w/remote-x@ssh:gpu-vm 4=shared::/w/same@local 5=shared::/w/same@ssh:gpu-vm 6=orca::/w/feat-c 7=folder:fw-notes@local 8=folder:fw-remote@ssh:gpu-vm 9=orca::/w/feat-b#lineage:orca::/w/feat-b
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca-ssh::/w/remote-x@ssh:gpu-vm 4=shared::/w/same@local 5=shared::/w/same@ssh:gpu-vm 6=orca::/w/feat-c 7=folder:fw-notes@local 8=folder:fw-remote@ssh:gpu-vm 9=orca::/w/feat-b
+cmd ids unmounted: orca::/w/feat-a lab::/w/gitlab-mr orca-ssh::/w/remote-x shared::/w/same orca::/w/feat-c folder:fw-notes folder:fw-remote orca::/w/feat-b folder:fw-review api::/w/api-y orca::/w/Zeta
+-- collapsed: pinned workspace-status:in-review lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/w/Zeta orca::/w/feat-c
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+HEADER key=workspace-status:in-progress label="In progress" count=8 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:5 ssh:gpu-vm:3} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,lab::/w/gitlab-mr,shared::/w/same,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-a depth=0 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-a lineageCollapsed=true hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=2 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:2} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[api::/w/api-y,orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION workspace-status:in-progress: workspace-status:in-progress:|orca::/w/feat-a workspace-status:in-progress:|lab::/w/gitlab-mr workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x workspace-status:in-progress:local|shared::/w/same workspace-status:in-progress:ssh:gpu-vm|shared::/w/same workspace-status:in-progress:|orca::/w/feat-c
+SECTION workspace-status:in-review: workspace-status:in-review:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-a -> workspace-status:in-progress:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> workspace-status:in-review:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> workspace-status:in-progress:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> workspace-status:in-progress:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> workspace-status:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 16
+placeholders: -
+selectionOrder: |orca::/w/feat-a ssh:gpu-vm|orca-ssh::/w/remote-x local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/w/feat-c local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/w/api-y |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=shared::/w/same@local 4=shared::/w/same@ssh:gpu-vm 5=orca::/w/feat-c 6=folder:fw-notes@local 7=folder:fw-remote@ssh:gpu-vm 8=api::/w/api-y@runtime:env-1 9=orca::/w/Zeta
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=shared::/w/same@local 4=shared::/w/same@ssh:gpu-vm 5=orca::/w/feat-c 6=folder:fw-notes@local 7=folder:fw-remote@ssh:gpu-vm 8=api::/w/api-y@runtime:env-1 9=orca::/w/Zeta
+cmd ids unmounted: orca::/w/feat-a orca-ssh::/w/remote-x shared::/w/same orca::/w/feat-c folder:fw-notes folder:fw-remote api::/w/api-y orca::/w/Zeta
+=== groupBy=pr-status pinnedInGroups=false ===
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/w/Zeta orca::/w/feat-c
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=pr:in-review label="In review" count=1 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={runtime:env-1:1} hostIds={runtime:env-1:[api::/w/api-y]} ids=[api::/w/api-y]
+ITEM rowKey=pr:in-review:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=pr:in-progress label="In progress" count=4 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={local:3 ssh:gpu-vm:1} hostIds={local:[shared::/w/same] ssh:gpu-vm:[]} ids=[shared::/w/same]
+ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=pr:closed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+renderedKeys: 20
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same runtime:env-1|api::/w/api-y local|shared::/w/same local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=api::/w/api-y@runtime:env-1 8=shared::/w/same@local 9=folder:fw-review@local
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=api::/w/api-y@runtime:env-1 8=shared::/w/same@local 9=folder:fw-review@local
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x shared::/w/same api::/w/api-y folder:fw-review folder:fw-notes folder:fw-remote orca::/w/Zeta
+-- collapsed: pinned pr:in-progress lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/w/Zeta orca::/w/feat-c
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+HEADER key=pr:in-review label="In review" count=1 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={runtime:env-1:1} hostIds={runtime:env-1:[api::/w/api-y]} ids=[api::/w/api-y]
+ITEM rowKey=pr:in-review:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=pr:in-progress label="In progress" count=4 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={local:3 ssh:gpu-vm:1} hostIds={local:[shared::/w/same] ssh:gpu-vm:[]} ids=[shared::/w/same]
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=pr:closed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION pr:in-progress: pr:in-progress:local|shared::/w/same
+renderedKeys: 7
+placeholders: -
+selectionOrder: runtime:env-1|api::/w/api-y |orca::/w/Zeta
+cmd1-9 mounted: 1=api::/w/api-y@runtime:env-1 2=orca::/w/Zeta
+cmd1-9 unmounted: 1=api::/w/api-y@runtime:env-1 2=orca::/w/Zeta
+cmd ids unmounted: api::/w/api-y orca::/w/Zeta
+=== groupBy=pr-status pinnedInGroups=true ===
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/w/Zeta orca::/w/feat-c
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=pr:done label="Done" count=1 tone="text-workspace-status-done" icon=ConductorDoneIcon hostCounts={local:1} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+ITEM rowKey=pr:done:|orca::/w/feat-b depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+HEADER key=pr:in-review label="In review" count=2 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={local:1 runtime:env-1:1} hostIds={local:[orca::/w/feat-a] runtime:env-1:[api::/w/api-y]} ids=[orca::/w/feat-a,api::/w/api-y]
+ITEM rowKey=pr:in-review:|orca::/w/feat-a depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-review:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=pr:in-progress label="In progress" count=8 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={ssh:gpu-vm:3 local:5} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same] local:[lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]} ids=[orca-ssh::/w/remote-x,lab::/w/gitlab-mr,shared::/w/same,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|lab::/w/gitlab-mr depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=pr:closed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+PREFERRED |orca::/w/feat-a -> pr:in-review:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> pr:done:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> pr:in-progress:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> pr:in-progress:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> pr:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 27
+placeholders: -
+selectionOrder: |orca::/w/feat-b |orca::/w/feat-a runtime:env-1|api::/w/api-y ssh:gpu-vm|orca-ssh::/w/remote-x |lab::/w/gitlab-mr local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/w/feat-c local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-b#lineage:orca::/w/feat-b 2=orca::/w/feat-a#lineage:orca::/w/feat-a 3=api::/w/api-y@runtime:env-1 4=orca-ssh::/w/remote-x@ssh:gpu-vm 5=lab::/w/gitlab-mr 6=shared::/w/same@local 7=shared::/w/same@ssh:gpu-vm 8=orca::/w/feat-c 9=folder:fw-review@local
+cmd1-9 unmounted: 1=orca::/w/feat-b 2=orca::/w/feat-a 3=api::/w/api-y@runtime:env-1 4=orca-ssh::/w/remote-x@ssh:gpu-vm 5=lab::/w/gitlab-mr 6=shared::/w/same@local 7=shared::/w/same@ssh:gpu-vm 8=orca::/w/feat-c 9=folder:fw-review@local
+cmd ids unmounted: orca::/w/feat-b orca::/w/feat-a api::/w/api-y orca-ssh::/w/remote-x lab::/w/gitlab-mr shared::/w/same orca::/w/feat-c folder:fw-review folder:fw-notes folder:fw-remote orca::/w/Zeta
+-- collapsed: pinned pr:in-review pr:closed lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/w/Zeta orca::/w/feat-c
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+HEADER key=pr:done label="Done" count=1 tone="text-workspace-status-done" icon=ConductorDoneIcon hostCounts={local:1} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+ITEM rowKey=pr:done:|orca::/w/feat-b depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+HEADER key=pr:in-review label="In review" count=2 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={local:1 runtime:env-1:1} hostIds={local:[orca::/w/feat-a] runtime:env-1:[api::/w/api-y]} ids=[orca::/w/feat-a,api::/w/api-y]
+HEADER key=pr:in-progress label="In progress" count=8 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={ssh:gpu-vm:3 local:5} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same] local:[lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]} ids=[orca-ssh::/w/remote-x,lab::/w/gitlab-mr,shared::/w/same,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|lab::/w/gitlab-mr depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION pr:in-review: pr:in-review:|orca::/w/feat-a pr:in-review:runtime:env-1|api::/w/api-y
+SECTION pr:closed: pr:closed:|orca::/w/Zeta
+PREFERRED |orca::/w/feat-a -> pr:in-review:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> pr:done:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> pr:in-progress:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> pr:in-progress:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> pr:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 18
+placeholders: -
+selectionOrder: |orca::/w/feat-b ssh:gpu-vm|orca-ssh::/w/remote-x |lab::/w/gitlab-mr local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/w/feat-c local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-b 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=lab::/w/gitlab-mr 4=shared::/w/same@local 5=shared::/w/same@ssh:gpu-vm 6=orca::/w/feat-c 7=folder:fw-review@local 8=folder:fw-notes@local 9=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca::/w/feat-b 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=lab::/w/gitlab-mr 4=shared::/w/same@local 5=shared::/w/same@ssh:gpu-vm 6=orca::/w/feat-c 7=folder:fw-review@local 8=folder:fw-notes@local 9=folder:fw-remote@ssh:gpu-vm
+cmd ids unmounted: orca::/w/feat-b orca-ssh::/w/remote-x lab::/w/gitlab-mr shared::/w/same orca::/w/feat-c folder:fw-review folder:fw-notes folder:fw-remote
diff --git a/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-hide-sleeping.txt b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-hide-sleeping.txt
new file mode 100644
index 000000000000..264ae0112b81
--- /dev/null
+++ b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-hide-sleeping.txt
@@ -0,0 +1,372 @@
+=== groupBy=none pinnedInGroups=false ===
+visible: orca::/w/feat-a orca::/orca orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=1 tone="text-foreground" icon=Pin hostCounts={local:1} hostIds={local:[orca::/w/feat-a]} ids=[orca::/w/feat-a]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca
+HEADER key=all label="All" count=8 tone="text-foreground" icon=List hostCounts={local:5 ssh:gpu-vm:2 runtime:env-1:1} hostIds={local:[orca::/orca,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[orca::/orca,orca-ssh::/orca-ssh,api::/api,lab::/lab,ext::/ext]
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+renderedKeys: 15
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-a 2=orca::/orca 3=orca-ssh::/orca-ssh 4=api::/api@runtime:env-1 5=lab::/lab 6=ext::/ext 7=folder:fw-review@local 8=folder:fw-notes@local 9=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/orca 3=orca-ssh::/orca-ssh 4=api::/api@runtime:env-1 5=lab::/lab 6=ext::/ext 7=folder:fw-review@local 8=folder:fw-notes@local 9=folder:fw-remote@ssh:gpu-vm
+cmd ids unmounted: orca::/w/feat-a orca::/orca orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext folder:fw-review folder:fw-notes folder:fw-remote
+-- collapsed: pinned --
+visible: orca::/w/feat-a orca::/orca orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=1 tone="text-foreground" icon=Pin hostCounts={local:1} hostIds={local:[orca::/w/feat-a]} ids=[orca::/w/feat-a]
+HEADER key=all label="All" count=8 tone="text-foreground" icon=List hostCounts={local:5 ssh:gpu-vm:2 runtime:env-1:1} hostIds={local:[orca::/orca,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[orca::/orca,orca-ssh::/orca-ssh,api::/api,lab::/lab,ext::/ext]
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a
+renderedKeys: 14
+placeholders: -
+selectionOrder: |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/orca 2=orca-ssh::/orca-ssh 3=api::/api@runtime:env-1 4=lab::/lab 5=ext::/ext 6=folder:fw-review@local 7=folder:fw-notes@local 8=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca::/orca 2=orca-ssh::/orca-ssh 3=api::/api@runtime:env-1 4=lab::/lab 5=ext::/ext 6=folder:fw-review@local 7=folder:fw-notes@local 8=folder:fw-remote@ssh:gpu-vm
+cmd ids unmounted: orca::/orca orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext folder:fw-review folder:fw-notes folder:fw-remote
+=== groupBy=none pinnedInGroups=true ===
+visible: orca::/w/feat-a orca::/orca orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=1 tone="text-foreground" icon=Pin hostCounts={local:1} hostIds={local:[orca::/w/feat-a]} ids=[orca::/w/feat-a]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca
+HEADER key=all label="All" count=9 tone="text-foreground" icon=List hostCounts={local:6 ssh:gpu-vm:2 runtime:env-1:1} hostIds={local:[orca::/w/feat-a,orca::/orca,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[orca::/w/feat-a,orca::/orca,orca-ssh::/orca-ssh,api::/api,lab::/lab,ext::/ext]
+ITEM rowKey=all:|orca::/w/feat-a depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+PREFERRED |orca::/w/feat-a -> all:|orca::/w/feat-a
+renderedKeys: 16
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-a 2=orca::/orca 3=orca-ssh::/orca-ssh 4=api::/api@runtime:env-1 5=lab::/lab 6=ext::/ext 7=folder:fw-review@local 8=folder:fw-notes@local 9=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/orca 3=orca-ssh::/orca-ssh 4=api::/api@runtime:env-1 5=lab::/lab 6=ext::/ext 7=folder:fw-review@local 8=folder:fw-notes@local 9=folder:fw-remote@ssh:gpu-vm
+cmd ids unmounted: orca::/w/feat-a orca::/orca orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext folder:fw-review folder:fw-notes folder:fw-remote
+-- collapsed: pinned --
+visible: orca::/w/feat-a orca::/orca orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=1 tone="text-foreground" icon=Pin hostCounts={local:1} hostIds={local:[orca::/w/feat-a]} ids=[orca::/w/feat-a]
+HEADER key=all label="All" count=9 tone="text-foreground" icon=List hostCounts={local:6 ssh:gpu-vm:2 runtime:env-1:1} hostIds={local:[orca::/w/feat-a,orca::/orca,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[orca::/w/feat-a,orca::/orca,orca-ssh::/orca-ssh,api::/api,lab::/lab,ext::/ext]
+ITEM rowKey=all:|orca::/w/feat-a depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-a -> all:|orca::/w/feat-a
+renderedKeys: 15
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-a 2=orca::/orca 3=orca-ssh::/orca-ssh 4=api::/api@runtime:env-1 5=lab::/lab 6=ext::/ext 7=folder:fw-review@local 8=folder:fw-notes@local 9=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/orca 3=orca-ssh::/orca-ssh 4=api::/api@runtime:env-1 5=lab::/lab 6=ext::/ext 7=folder:fw-review@local 8=folder:fw-notes@local 9=folder:fw-remote@ssh:gpu-vm
+cmd ids unmounted: orca::/w/feat-a orca::/orca orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext folder:fw-review folder:fw-notes folder:fw-remote
+=== groupBy=repo pinnedInGroups=false ===
+visible: orca::/w/feat-a orca::/orca orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext
+HEADER key=pinned label="Pinned" count=1 tone="text-foreground" icon=Pin hostCounts={local:1} hostIds={local:[orca::/w/feat-a]} ids=[orca::/w/feat-a]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=2 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+ITEM rowKey=project:p-orca:|orca::/orca depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca-ssh::/orca-ssh depth=0 groupDepth=1 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+ITEM rowKey=project:repo:lab:|lab::/lab depth=0 groupDepth=2 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab path=project-group:pg-work>project-group:pg-nested>project:repo:lab
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:repo:api label="api" count=1 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+SECTION project:repo:empty: -
+renderedKeys: 24
+placeholders: empty
+selectionOrder: |orca::/w/feat-a |orca::/orca |orca-ssh::/orca-ssh |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/api |ext::/ext
+cmd1-9 mounted: 1=orca::/w/feat-a 2=orca::/orca 3=orca-ssh::/orca-ssh 4=lab::/lab 5=folder:fw-review@local 6=folder:fw-notes@local 7=folder:fw-remote@ssh:gpu-vm 8=api::/api@runtime:env-1 9=ext::/ext
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/orca 3=orca-ssh::/orca-ssh 4=lab::/lab 5=folder:fw-review@local 6=folder:fw-notes@local 7=folder:fw-remote@ssh:gpu-vm 8=api::/api@runtime:env-1 9=ext::/ext
+cmd ids unmounted: orca::/w/feat-a orca::/orca orca-ssh::/orca-ssh lab::/lab folder:fw-review folder:fw-notes folder:fw-remote api::/api ext::/ext
+-- collapsed: pinned project:p-orca project:repo:lab project-group:pg-remote-folders project:repo:empty --
+visible: orca::/w/feat-a orca::/orca orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext
+HEADER key=pinned label="Pinned" count=1 tone="text-foreground" icon=Pin hostCounts={local:1} hostIds={local:[orca::/w/feat-a]} ids=[orca::/w/feat-a]
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=2 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+HEADER key=project:repo:api label="api" count=1 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+SECTION pinned: pinned:|orca::/w/feat-a
+SECTION project:p-orca: project:p-orca:|orca::/orca project:p-orca:|orca-ssh::/orca-ssh
+SECTION project:repo:lab: project:repo:lab:|lab::/lab
+SECTION project:repo:empty: -
+renderedKeys: 18
+placeholders: empty
+selectionOrder: local|folder:fw-review local|folder:fw-notes runtime:env-1|api::/api |ext::/ext
+cmd1-9 mounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=ext::/ext
+cmd1-9 unmounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=ext::/ext
+cmd ids unmounted: folder:fw-review folder:fw-notes api::/api ext::/ext
+=== groupBy=repo pinnedInGroups=true ===
+visible: orca::/w/feat-a orca::/orca orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext
+HEADER key=pinned label="Pinned" count=1 tone="text-foreground" icon=Pin hostCounts={local:1} hostIds={local:[orca::/w/feat-a]} ids=[orca::/w/feat-a]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=3 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+ITEM rowKey=project:p-orca:|orca::/orca depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca-ssh::/orca-ssh depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/feat-a depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+ITEM rowKey=project:repo:lab:|lab::/lab depth=0 groupDepth=2 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab path=project-group:pg-work>project-group:pg-nested>project:repo:lab
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:repo:api label="api" count=1 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+SECTION project:repo:empty: -
+PREFERRED |orca::/w/feat-a -> project:p-orca:|orca::/w/feat-a
+renderedKeys: 25
+placeholders: empty
+selectionOrder: |orca::/orca |orca-ssh::/orca-ssh |orca::/w/feat-a |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/api |ext::/ext
+cmd1-9 mounted: 1=orca::/orca 2=orca-ssh::/orca-ssh 3=orca::/w/feat-a 4=lab::/lab 5=folder:fw-review@local 6=folder:fw-notes@local 7=folder:fw-remote@ssh:gpu-vm 8=api::/api@runtime:env-1 9=ext::/ext
+cmd1-9 unmounted: 1=orca::/orca 2=orca-ssh::/orca-ssh 3=orca::/w/feat-a 4=lab::/lab 5=folder:fw-review@local 6=folder:fw-notes@local 7=folder:fw-remote@ssh:gpu-vm 8=api::/api@runtime:env-1 9=ext::/ext
+cmd ids unmounted: orca::/orca orca-ssh::/orca-ssh orca::/w/feat-a lab::/lab folder:fw-review folder:fw-notes folder:fw-remote api::/api ext::/ext
+-- collapsed: pinned project:p-orca project:repo:lab project-group:pg-remote-folders project:repo:empty --
+visible: orca::/w/feat-a orca::/orca orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext
+HEADER key=pinned label="Pinned" count=1 tone="text-foreground" icon=Pin hostCounts={local:1} hostIds={local:[orca::/w/feat-a]} ids=[orca::/w/feat-a]
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=3 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+HEADER key=project:repo:api label="api" count=1 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+SECTION pinned: pinned:|orca::/w/feat-a
+SECTION project:p-orca: project:p-orca:|orca::/orca project:p-orca:|orca-ssh::/orca-ssh project:p-orca:|orca::/w/feat-a
+SECTION project:repo:lab: project:repo:lab:|lab::/lab
+SECTION project:repo:empty: -
+PREFERRED |orca::/w/feat-a -> project:p-orca:|orca::/w/feat-a
+renderedKeys: 18
+placeholders: empty
+selectionOrder: local|folder:fw-review local|folder:fw-notes runtime:env-1|api::/api |ext::/ext
+cmd1-9 mounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=ext::/ext
+cmd1-9 unmounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=ext::/ext
+cmd ids unmounted: folder:fw-review folder:fw-notes api::/api ext::/ext
+=== groupBy=workspace-status pinnedInGroups=false ===
+visible: orca::/w/feat-a orca::/orca orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=1 tone="text-foreground" icon=Pin hostCounts={local:1} hostIds={local:[orca::/w/feat-a]} ids=[orca::/w/feat-a]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca
+HEADER key=workspace-status:in-progress label="In progress" count=7 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:4 ssh:gpu-vm:2 runtime:env-1:1} hostIds={local:[orca::/orca,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[orca::/orca,orca-ssh::/orca-ssh,api::/api,lab::/lab,ext::/ext]
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=1 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:1} hostIds={local:[]} ids=[]
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+SECTION workspace-status:in-review: -
+renderedKeys: 16
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |lab::/lab |ext::/ext local|folder:fw-notes ssh:gpu-vm|folder:fw-remote local|folder:fw-review
+cmd1-9 mounted: 1=orca::/w/feat-a 2=orca::/orca 3=orca-ssh::/orca-ssh 4=api::/api@runtime:env-1 5=lab::/lab 6=ext::/ext 7=folder:fw-notes@local 8=folder:fw-remote@ssh:gpu-vm 9=folder:fw-review@local
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/orca 3=orca-ssh::/orca-ssh 4=api::/api@runtime:env-1 5=lab::/lab 6=ext::/ext 7=folder:fw-notes@local 8=folder:fw-remote@ssh:gpu-vm 9=folder:fw-review@local
+cmd ids unmounted: orca::/w/feat-a orca::/orca orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext folder:fw-notes folder:fw-remote folder:fw-review
+-- collapsed: pinned workspace-status:in-review --
+visible: orca::/w/feat-a orca::/orca orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=1 tone="text-foreground" icon=Pin hostCounts={local:1} hostIds={local:[orca::/w/feat-a]} ids=[orca::/w/feat-a]
+HEADER key=workspace-status:in-progress label="In progress" count=7 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:4 ssh:gpu-vm:2 runtime:env-1:1} hostIds={local:[orca::/orca,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[orca::/orca,orca-ssh::/orca-ssh,api::/api,lab::/lab,ext::/ext]
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=1 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:1} hostIds={local:[]} ids=[]
+SECTION pinned: pinned:|orca::/w/feat-a
+SECTION workspace-status:in-review: -
+renderedKeys: 13
+placeholders: -
+selectionOrder: |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |lab::/lab |ext::/ext local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/orca 2=orca-ssh::/orca-ssh 3=api::/api@runtime:env-1 4=lab::/lab 5=ext::/ext 6=folder:fw-notes@local 7=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca::/orca 2=orca-ssh::/orca-ssh 3=api::/api@runtime:env-1 4=lab::/lab 5=ext::/ext 6=folder:fw-notes@local 7=folder:fw-remote@ssh:gpu-vm
+cmd ids unmounted: orca::/orca orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext folder:fw-notes folder:fw-remote
+=== groupBy=workspace-status pinnedInGroups=true ===
+visible: orca::/w/feat-a orca::/orca orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=1 tone="text-foreground" icon=Pin hostCounts={local:1} hostIds={local:[orca::/w/feat-a]} ids=[orca::/w/feat-a]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca
+HEADER key=workspace-status:in-progress label="In progress" count=8 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:5 ssh:gpu-vm:2 runtime:env-1:1} hostIds={local:[orca::/w/feat-a,orca::/orca,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[orca::/w/feat-a,orca::/orca,orca-ssh::/orca-ssh,api::/api,lab::/lab,ext::/ext]
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-a depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=1 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:1} hostIds={local:[]} ids=[]
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+SECTION workspace-status:in-review: -
+PREFERRED |orca::/w/feat-a -> workspace-status:in-progress:|orca::/w/feat-a
+renderedKeys: 17
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |lab::/lab |ext::/ext local|folder:fw-notes ssh:gpu-vm|folder:fw-remote local|folder:fw-review
+cmd1-9 mounted: 1=orca::/w/feat-a 2=orca::/orca 3=orca-ssh::/orca-ssh 4=api::/api@runtime:env-1 5=lab::/lab 6=ext::/ext 7=folder:fw-notes@local 8=folder:fw-remote@ssh:gpu-vm 9=folder:fw-review@local
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/orca 3=orca-ssh::/orca-ssh 4=api::/api@runtime:env-1 5=lab::/lab 6=ext::/ext 7=folder:fw-notes@local 8=folder:fw-remote@ssh:gpu-vm 9=folder:fw-review@local
+cmd ids unmounted: orca::/w/feat-a orca::/orca orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext folder:fw-notes folder:fw-remote folder:fw-review
+-- collapsed: pinned workspace-status:in-review --
+visible: orca::/w/feat-a orca::/orca orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=1 tone="text-foreground" icon=Pin hostCounts={local:1} hostIds={local:[orca::/w/feat-a]} ids=[orca::/w/feat-a]
+HEADER key=workspace-status:in-progress label="In progress" count=8 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:5 ssh:gpu-vm:2 runtime:env-1:1} hostIds={local:[orca::/w/feat-a,orca::/orca,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[orca::/w/feat-a,orca::/orca,orca-ssh::/orca-ssh,api::/api,lab::/lab,ext::/ext]
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-a depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=1 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:1} hostIds={local:[]} ids=[]
+SECTION pinned: pinned:|orca::/w/feat-a
+SECTION workspace-status:in-review: -
+PREFERRED |orca::/w/feat-a -> workspace-status:in-progress:|orca::/w/feat-a
+renderedKeys: 14
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |lab::/lab |ext::/ext local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-a 2=orca::/orca 3=orca-ssh::/orca-ssh 4=api::/api@runtime:env-1 5=lab::/lab 6=ext::/ext 7=folder:fw-notes@local 8=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/orca 3=orca-ssh::/orca-ssh 4=api::/api@runtime:env-1 5=lab::/lab 6=ext::/ext 7=folder:fw-notes@local 8=folder:fw-remote@ssh:gpu-vm
+cmd ids unmounted: orca::/w/feat-a orca::/orca orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext folder:fw-notes folder:fw-remote
+=== groupBy=pr-status pinnedInGroups=false ===
+visible: orca::/w/feat-a orca::/orca orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=1 tone="text-foreground" icon=Pin hostCounts={local:1} hostIds={local:[orca::/w/feat-a]} ids=[orca::/w/feat-a]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca
+HEADER key=pr:in-progress label="In progress" count=8 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={local:5 ssh:gpu-vm:2 runtime:env-1:1} hostIds={local:[orca::/orca,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[orca::/orca,orca-ssh::/orca-ssh,api::/api,lab::/lab,ext::/ext]
+ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=pr:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+renderedKeys: 15
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-a 2=orca::/orca 3=orca-ssh::/orca-ssh 4=api::/api@runtime:env-1 5=lab::/lab 6=ext::/ext 7=folder:fw-review@local 8=folder:fw-notes@local 9=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/orca 3=orca-ssh::/orca-ssh 4=api::/api@runtime:env-1 5=lab::/lab 6=ext::/ext 7=folder:fw-review@local 8=folder:fw-notes@local 9=folder:fw-remote@ssh:gpu-vm
+cmd ids unmounted: orca::/w/feat-a orca::/orca orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext folder:fw-review folder:fw-notes folder:fw-remote
+-- collapsed: pinned --
+visible: orca::/w/feat-a orca::/orca orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=1 tone="text-foreground" icon=Pin hostCounts={local:1} hostIds={local:[orca::/w/feat-a]} ids=[orca::/w/feat-a]
+HEADER key=pr:in-progress label="In progress" count=8 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={local:5 ssh:gpu-vm:2 runtime:env-1:1} hostIds={local:[orca::/orca,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[orca::/orca,orca-ssh::/orca-ssh,api::/api,lab::/lab,ext::/ext]
+ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=pr:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a
+renderedKeys: 14
+placeholders: -
+selectionOrder: |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/orca 2=orca-ssh::/orca-ssh 3=api::/api@runtime:env-1 4=lab::/lab 5=ext::/ext 6=folder:fw-review@local 7=folder:fw-notes@local 8=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca::/orca 2=orca-ssh::/orca-ssh 3=api::/api@runtime:env-1 4=lab::/lab 5=ext::/ext 6=folder:fw-review@local 7=folder:fw-notes@local 8=folder:fw-remote@ssh:gpu-vm
+cmd ids unmounted: orca::/orca orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext folder:fw-review folder:fw-notes folder:fw-remote
+=== groupBy=pr-status pinnedInGroups=true ===
+visible: orca::/w/feat-a orca::/orca orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=1 tone="text-foreground" icon=Pin hostCounts={local:1} hostIds={local:[orca::/w/feat-a]} ids=[orca::/w/feat-a]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca
+HEADER key=pr:in-review label="In review" count=1 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={local:1} hostIds={local:[orca::/w/feat-a]} ids=[orca::/w/feat-a]
+ITEM rowKey=pr:in-review:|orca::/w/feat-a depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+HEADER key=pr:in-progress label="In progress" count=8 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={local:5 ssh:gpu-vm:2 runtime:env-1:1} hostIds={local:[orca::/orca,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[orca::/orca,orca-ssh::/orca-ssh,api::/api,lab::/lab,ext::/ext]
+ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=pr:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+PREFERRED |orca::/w/feat-a -> pr:in-review:|orca::/w/feat-a
+renderedKeys: 17
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-a 2=orca::/orca 3=orca-ssh::/orca-ssh 4=api::/api@runtime:env-1 5=lab::/lab 6=ext::/ext 7=folder:fw-review@local 8=folder:fw-notes@local 9=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/orca 3=orca-ssh::/orca-ssh 4=api::/api@runtime:env-1 5=lab::/lab 6=ext::/ext 7=folder:fw-review@local 8=folder:fw-notes@local 9=folder:fw-remote@ssh:gpu-vm
+cmd ids unmounted: orca::/w/feat-a orca::/orca orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext folder:fw-review folder:fw-notes folder:fw-remote
+-- collapsed: pinned pr:in-progress --
+visible: orca::/w/feat-a orca::/orca orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=1 tone="text-foreground" icon=Pin hostCounts={local:1} hostIds={local:[orca::/w/feat-a]} ids=[orca::/w/feat-a]
+HEADER key=pr:in-review label="In review" count=1 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={local:1} hostIds={local:[orca::/w/feat-a]} ids=[orca::/w/feat-a]
+ITEM rowKey=pr:in-review:|orca::/w/feat-a depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+HEADER key=pr:in-progress label="In progress" count=8 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={local:5 ssh:gpu-vm:2 runtime:env-1:1} hostIds={local:[orca::/orca,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[orca::/orca,orca-ssh::/orca-ssh,api::/api,lab::/lab,ext::/ext]
+SECTION pinned: pinned:|orca::/w/feat-a
+SECTION pr:in-progress: pr:in-progress:|orca::/orca pr:in-progress:|orca-ssh::/orca-ssh pr:in-progress:runtime:env-1|api::/api pr:in-progress:|lab::/lab pr:in-progress:|ext::/ext
+PREFERRED |orca::/w/feat-a -> pr:in-review:|orca::/w/feat-a
+renderedKeys: 5
+placeholders: -
+selectionOrder: |orca::/w/feat-a
+cmd1-9 mounted: 1=orca::/w/feat-a
+cmd1-9 unmounted: 1=orca::/w/feat-a
+cmd ids unmounted: orca::/w/feat-a
diff --git a/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-host-sections.txt b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-host-sections.txt
new file mode 100644
index 000000000000..ee6b0c6ac906
--- /dev/null
+++ b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-host-sections.txt
@@ -0,0 +1,930 @@
+=== groupBy=none pinnedInGroups=false ===
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+HOST key=host:local label="Local Linux" kind=local detail="This computer" health=local count=11
+HEADER key=pinned collapseKey=pinned label="Pinned" count=4 tone="text-foreground" icon=Pin hostId=local hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+HEADER key=all collapseKey=all label="All" count=7 tone="text-foreground" icon=List hostId=local hostCounts={runtime:env-1:2 local:7 ssh:gpu-vm:2} hostIds={runtime:env-1:[api::/w/api-y,api::/api] local:[shared::/w/same,orca::/orca,orca::/w/Zeta,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[shared::/w/same,orca::/orca,orca::/w/Zeta,lab::/lab,ext::/ext]
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+HOST key=host:runtime:env-1 label="env-1" kind=runtime detail="Orca server" health=connecting count=2
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=all collapseKey=all:host:runtime:env-1 label="All" count=2 tone="text-foreground" icon=List hostId=runtime:env-1 hostCounts={runtime:env-1:2 local:7 ssh:gpu-vm:2} hostIds={runtime:env-1:[api::/w/api-y,api::/api] local:[shared::/w/same,orca::/orca,orca::/w/Zeta,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[api::/w/api-y,api::/api]
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HOST key=host:ssh:gpu-vm label="GPU VM" kind=ssh detail="SSH" health=disconnected count=4
+HEADER key=pinned collapseKey=pinned:host:ssh:gpu-vm label="Pinned" count=2 tone="text-foreground" icon=Pin hostId=ssh:gpu-vm hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=all collapseKey=all:host:ssh:gpu-vm label="All" count=2 tone="text-foreground" icon=List hostId=ssh:gpu-vm hostCounts={runtime:env-1:2 local:7 ssh:gpu-vm:2} hostIds={runtime:env-1:[api::/w/api-y,api::/api] local:[shared::/w/same,orca::/orca,orca::/w/Zeta,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[orca-ssh::/orca-ssh]
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+-- rows before host sections --
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=all label="All" count=11 tone="text-foreground" icon=List hostCounts={runtime:env-1:2 local:7 ssh:gpu-vm:2} hostIds={runtime:env-1:[api::/w/api-y,api::/api] local:[shared::/w/same,orca::/orca,orca::/w/Zeta,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[api::/w/api-y,shared::/w/same,orca::/orca,orca::/w/Zeta,orca-ssh::/orca-ssh,api::/api,lab::/lab,ext::/ext]
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+renderedKeys: 23
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr local|shared::/w/same |orca::/orca |orca::/w/Zeta |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes runtime:env-1|api::/w/api-y runtime:env-1|api::/api ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same |orca-ssh::/orca-ssh ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=shared::/w/same@local 6=orca::/orca 7=orca::/w/Zeta 8=lab::/lab 9=ext::/ext
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=shared::/w/same@local 6=orca::/orca 7=orca::/w/Zeta 8=lab::/lab 9=ext::/ext
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr shared::/w/same orca::/orca orca::/w/Zeta lab::/lab ext::/ext folder:fw-review folder:fw-notes api::/w/api-y api::/api orca-ssh::/w/remote-x orca-ssh::/orca-ssh folder:fw-remote
+-- collapsed: host:local all all:host:runtime:env-1 pinned:host:ssh:gpu-vm pinned lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+HOST key=host:local label="Local Linux" kind=local detail="This computer" health=local collapsed=true count=8
+HOST key=host:runtime:env-1 label="env-1" kind=runtime detail="Orca server" health=connecting count=2
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=all collapseKey=all:host:runtime:env-1 label="All" count=2 tone="text-foreground" icon=List hostId=runtime:env-1 hostCounts={runtime:env-1:2 local:7 ssh:gpu-vm:2} hostIds={runtime:env-1:[api::/w/api-y,api::/api] local:[shared::/w/same,orca::/orca,orca::/w/Zeta,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[api::/w/api-y,api::/api]
+HOST key=host:ssh:gpu-vm label="GPU VM" kind=ssh detail="SSH" health=disconnected count=4
+HEADER key=pinned collapseKey=pinned:host:ssh:gpu-vm label="Pinned" count=2 tone="text-foreground" icon=Pin hostId=ssh:gpu-vm hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=all collapseKey=all:host:ssh:gpu-vm label="All" count=2 tone="text-foreground" icon=List hostId=ssh:gpu-vm hostCounts={runtime:env-1:2 local:7 ssh:gpu-vm:2} hostIds={runtime:env-1:[api::/w/api-y,api::/api] local:[shared::/w/same,orca::/orca,orca::/w/Zeta,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[orca-ssh::/orca-ssh]
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+-- rows before host sections --
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a lineageCollapsed=true hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=all label="All" count=11 tone="text-foreground" icon=List hostCounts={runtime:env-1:2 local:7 ssh:gpu-vm:2} hostIds={runtime:env-1:[api::/w/api-y,api::/api] local:[shared::/w/same,orca::/orca,orca::/w/Zeta,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[api::/w/api-y,shared::/w/same,orca::/orca,orca::/w/Zeta,orca-ssh::/orca-ssh,api::/api,lab::/lab,ext::/ext]
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION all: all:runtime:env-1|api::/w/api-y all:local|shared::/w/same all:|orca::/orca all:|orca::/w/Zeta all:|orca-ssh::/orca-ssh all:runtime:env-1|api::/api all:|lab::/lab all:|ext::/ext
+renderedKeys: 6
+placeholders: -
+selectionOrder: |orca-ssh::/orca-ssh ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca-ssh::/orca-ssh 2=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: -
+cmd ids unmounted: -
+=== groupBy=none pinnedInGroups=true ===
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+HOST key=host:local label="Local Linux" kind=local detail="This computer" health=local count=11
+HEADER key=pinned collapseKey=pinned label="Pinned" count=4 tone="text-foreground" icon=Pin hostId=local hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+HEADER key=all collapseKey=all label="All" count=11 tone="text-foreground" icon=List hostId=local hostCounts={local:11 ssh:gpu-vm:4 runtime:env-1:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/Zeta,orca::/w/feat-c,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] runtime:env-1:[api::/w/api-y,api::/api]} ids=[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/Zeta,orca::/w/feat-c,lab::/lab,ext::/ext]
+ITEM rowKey=all:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=natural owning=project:p-orca parent=all:|orca::/w/feat-a
+ITEM rowKey=all:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca parent=all:|orca::/w/feat-b
+ITEM rowKey=all:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab parent=all:|orca::/w/feat-a
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+HOST key=host:runtime:env-1 label="env-1" kind=runtime detail="Orca server" health=connecting count=2
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=all collapseKey=all:host:runtime:env-1 label="All" count=2 tone="text-foreground" icon=List hostId=runtime:env-1 hostCounts={local:11 ssh:gpu-vm:4 runtime:env-1:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/Zeta,orca::/w/feat-c,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] runtime:env-1:[api::/w/api-y,api::/api]} ids=[api::/w/api-y,api::/api]
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HOST key=host:ssh:gpu-vm label="GPU VM" kind=ssh detail="SSH" health=disconnected count=4
+HEADER key=pinned collapseKey=pinned:host:ssh:gpu-vm label="Pinned" count=2 tone="text-foreground" icon=Pin hostId=ssh:gpu-vm hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=all collapseKey=all:host:ssh:gpu-vm label="All" count=4 tone="text-foreground" icon=List hostId=ssh:gpu-vm hostCounts={local:11 ssh:gpu-vm:4 runtime:env-1:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/Zeta,orca::/w/feat-c,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] runtime:env-1:[api::/w/api-y,api::/api]} ids=[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh]
+ITEM rowKey=all:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+-- rows before host sections --
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=all label="All" count=17 tone="text-foreground" icon=List hostCounts={local:11 ssh:gpu-vm:4 runtime:env-1:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/Zeta,orca::/w/feat-c,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] runtime:env-1:[api::/w/api-y,api::/api]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,api::/w/api-y,lab::/w/gitlab-mr,shared::/w/same,shared::/w/same,orca::/orca,orca::/w/Zeta,orca-ssh::/orca-ssh,api::/api,orca::/w/feat-c,lab::/lab,ext::/ext]
+ITEM rowKey=all:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=natural owning=project:p-orca parent=all:|orca::/w/feat-a
+ITEM rowKey=all:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca parent=all:|orca::/w/feat-b
+ITEM rowKey=all:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab parent=all:|orca::/w/feat-a
+ITEM rowKey=all:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=all:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+PREFERRED |orca::/w/feat-a -> all:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> all:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> all:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> all:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> all:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> all:ssh:gpu-vm|shared::/w/same
+renderedKeys: 29
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr local|shared::/w/same |orca::/orca |orca::/w/Zeta |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes runtime:env-1|api::/w/api-y runtime:env-1|api::/api ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same |orca-ssh::/orca-ssh ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=shared::/w/same@local 6=orca::/orca 7=orca::/w/Zeta 8=lab::/lab 9=ext::/ext
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=shared::/w/same@local 6=orca::/orca 7=orca::/w/Zeta 8=lab::/lab 9=ext::/ext
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr shared::/w/same orca::/orca orca::/w/Zeta lab::/lab ext::/ext folder:fw-review folder:fw-notes api::/w/api-y api::/api orca-ssh::/w/remote-x orca-ssh::/orca-ssh folder:fw-remote
+-- collapsed: host:local all all:host:runtime:env-1 pinned:host:ssh:gpu-vm pinned lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+HOST key=host:local label="Local Linux" kind=local detail="This computer" health=local collapsed=true count=8
+HOST key=host:runtime:env-1 label="env-1" kind=runtime detail="Orca server" health=connecting count=2
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=all collapseKey=all:host:runtime:env-1 label="All" count=2 tone="text-foreground" icon=List hostId=runtime:env-1 hostCounts={local:11 ssh:gpu-vm:4 runtime:env-1:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/Zeta,orca::/w/feat-c,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] runtime:env-1:[api::/w/api-y,api::/api]} ids=[api::/w/api-y,api::/api]
+HOST key=host:ssh:gpu-vm label="GPU VM" kind=ssh detail="SSH" health=disconnected count=4
+HEADER key=pinned collapseKey=pinned:host:ssh:gpu-vm label="Pinned" count=2 tone="text-foreground" icon=Pin hostId=ssh:gpu-vm hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=all collapseKey=all:host:ssh:gpu-vm label="All" count=4 tone="text-foreground" icon=List hostId=ssh:gpu-vm hostCounts={local:11 ssh:gpu-vm:4 runtime:env-1:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/Zeta,orca::/w/feat-c,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] runtime:env-1:[api::/w/api-y,api::/api]} ids=[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh]
+ITEM rowKey=all:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+-- rows before host sections --
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a lineageCollapsed=true hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=all label="All" count=17 tone="text-foreground" icon=List hostCounts={local:11 ssh:gpu-vm:4 runtime:env-1:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/Zeta,orca::/w/feat-c,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] runtime:env-1:[api::/w/api-y,api::/api]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,api::/w/api-y,lab::/w/gitlab-mr,shared::/w/same,shared::/w/same,orca::/orca,orca::/w/Zeta,orca-ssh::/orca-ssh,api::/api,orca::/w/feat-c,lab::/lab,ext::/ext]
+ITEM rowKey=all:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a lineageCollapsed=true hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=all:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION all: all:|orca::/w/feat-a all:|orca::/w/feat-b all:|orca::/w/feat-c all:|lab::/w/gitlab-mr all:ssh:gpu-vm|orca-ssh::/w/remote-x all:runtime:env-1|api::/w/api-y all:local|shared::/w/same all:ssh:gpu-vm|shared::/w/same all:|orca::/orca all:|orca::/w/Zeta all:|orca-ssh::/orca-ssh all:runtime:env-1|api::/api all:|lab::/lab all:|ext::/ext
+PREFERRED |orca::/w/feat-a -> all:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> all:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> all:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> all:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> all:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> all:ssh:gpu-vm|shared::/w/same
+renderedKeys: 8
+placeholders: -
+selectionOrder: ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same |orca-ssh::/orca-ssh ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca-ssh::/w/remote-x@ssh:gpu-vm 2=shared::/w/same@ssh:gpu-vm 3=orca-ssh::/orca-ssh 4=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: -
+cmd ids unmounted: -
+=== groupBy=repo pinnedInGroups=false ===
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+HOST key=host:local label="Local Linux" kind=local detail="This computer" health=local count=15
+HEADER key=pinned collapseKey=pinned label="Pinned" count=4 tone="text-foreground" icon=Pin hostId=local hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=3 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+ITEM rowKey=project:p-orca:|orca::/orca depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/Zeta depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+ITEM rowKey=project:repo:lab:|lab::/lab depth=0 groupDepth=2 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab path=project-group:pg-work>project-group:pg-nested>project:repo:lab
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+HEADER key=project:repo:shared label="shared" count=1 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+HOST key=host:runtime:env-1 label="env-1" kind=runtime detail="Orca server" health=connecting count=3
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HOST key=host:ssh:gpu-vm label="GPU VM" kind=ssh detail="SSH" health=disconnected count=4
+HEADER key=pinned collapseKey=pinned:host:ssh:gpu-vm label="Pinned" count=2 tone="text-foreground" icon=Pin hostId=ssh:gpu-vm hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+ITEM rowKey=project:p-orca:|orca-ssh::/orca-ssh depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+-- rows before host sections --
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=3 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+ITEM rowKey=project:p-orca:|orca::/orca depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca-ssh::/orca-ssh depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/Zeta depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+ITEM rowKey=project:repo:lab:|lab::/lab depth=0 groupDepth=2 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab path=project-group:pg-work>project-group:pg-nested>project:repo:lab
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=1 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+SECTION project:repo:empty: -
+renderedKeys: 33
+placeholders: empty
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr |orca::/orca |orca::/w/Zeta |lab::/lab local|folder:fw-review local|folder:fw-notes local|shared::/w/same |ext::/ext runtime:env-1|api::/api runtime:env-1|api::/w/api-y ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same |orca-ssh::/orca-ssh ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca::/orca 6=orca::/w/Zeta 7=lab::/lab 8=folder:fw-review@local 9=folder:fw-notes@local
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca::/orca 6=orca::/w/Zeta 7=lab::/lab 8=folder:fw-review@local 9=folder:fw-notes@local
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca::/orca orca::/w/Zeta lab::/lab folder:fw-review folder:fw-notes shared::/w/same ext::/ext api::/api api::/w/api-y orca-ssh::/w/remote-x orca-ssh::/orca-ssh folder:fw-remote
+-- collapsed: host:local project-group:pg-work project-group:pg-nested project-group:pg-folders project:repo:shared project:repo:ext project-group:pg-remote-folders host:ssh:gpu-vm pinned project:p-orca project:repo:lab lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+HOST key=host:local label="Local Linux" kind=local detail="This computer" health=local collapsed=true count=4
+HOST key=host:runtime:env-1 label="env-1" kind=runtime detail="Orca server" health=connecting count=3
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HOST key=host:ssh:gpu-vm label="GPU VM" kind=ssh detail="SSH" health=disconnected collapsed=true count=2
+-- rows before host sections --
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a lineageCollapsed=true hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=1 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION project:p-orca: project:p-orca:|orca::/orca project:p-orca:|orca-ssh::/orca-ssh project:p-orca:|orca::/w/Zeta
+SECTION project:repo:lab: project:repo:lab:|lab::/lab
+SECTION project:repo:shared: project:repo:shared:local|shared::/w/same
+SECTION project:repo:empty: -
+SECTION project:repo:ext: project:repo:ext:|ext::/ext
+renderedKeys: 7
+placeholders: empty
+selectionOrder: runtime:env-1|api::/api runtime:env-1|api::/w/api-y
+cmd1-9 mounted: 1=api::/api@runtime:env-1 2=api::/w/api-y@runtime:env-1
+cmd1-9 unmounted: 1=api::/api@runtime:env-1 2=api::/w/api-y@runtime:env-1
+cmd ids unmounted: api::/api api::/w/api-y
+=== groupBy=repo pinnedInGroups=true ===
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+HOST key=host:local label="Local Linux" kind=local detail="This computer" health=local count=15
+HEADER key=pinned collapseKey=pinned label="Pinned" count=4 tone="text-foreground" icon=Pin hostId=local hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=8 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+ITEM rowKey=project:p-orca:|orca::/orca depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/feat-a depth=0 groupDepth=1 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/feat-b depth=1 groupDepth=1 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-a
+ITEM rowKey=project:p-orca:|orca::/w/feat-c depth=2 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-b
+ITEM rowKey=project:p-orca:|lab::/w/gitlab-mr depth=1 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-a
+ITEM rowKey=project:p-orca:|orca::/w/Zeta depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+ITEM rowKey=project:repo:lab:|lab::/lab depth=0 groupDepth=2 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab path=project-group:pg-work>project-group:pg-nested>project:repo:lab
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+HEADER key=project:repo:shared label="shared" count=2 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+HOST key=host:runtime:env-1 label="env-1" kind=runtime detail="Orca server" health=connecting count=3
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HOST key=host:ssh:gpu-vm label="GPU VM" kind=ssh detail="SSH" health=disconnected count=4
+HEADER key=pinned collapseKey=pinned:host:ssh:gpu-vm label="Pinned" count=2 tone="text-foreground" icon=Pin hostId=ssh:gpu-vm hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+ITEM rowKey=project:p-orca:|orca-ssh::/orca-ssh depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+ITEM rowKey=project:repo:shared:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+-- rows before host sections --
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=8 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+ITEM rowKey=project:p-orca:|orca::/orca depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca-ssh::/orca-ssh depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/feat-a depth=0 groupDepth=1 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/feat-b depth=1 groupDepth=1 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-a
+ITEM rowKey=project:p-orca:|orca::/w/feat-c depth=2 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-b
+ITEM rowKey=project:p-orca:|lab::/w/gitlab-mr depth=1 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-a
+ITEM rowKey=project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/Zeta depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+ITEM rowKey=project:repo:lab:|lab::/lab depth=0 groupDepth=2 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab path=project-group:pg-work>project-group:pg-nested>project:repo:lab
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=2 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=project:repo:shared:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+SECTION project:repo:empty: -
+PREFERRED |orca::/w/feat-a -> project:p-orca:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> project:p-orca:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> project:p-orca:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> project:p-orca:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> project:repo:shared:ssh:gpu-vm|shared::/w/same
+renderedKeys: 39
+placeholders: empty
+selectionOrder: |orca::/orca |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr |orca::/w/Zeta |lab::/lab local|folder:fw-review local|folder:fw-notes local|shared::/w/same |ext::/ext runtime:env-1|api::/api runtime:env-1|api::/w/api-y |orca-ssh::/orca-ssh ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|folder:fw-remote ssh:gpu-vm|shared::/w/same
+cmd1-9 mounted: 1=orca::/orca 2=orca::/w/feat-a#lineage:orca::/w/feat-a 3=orca::/w/feat-b#lineage:orca::/w/feat-b 4=orca::/w/feat-c 5=lab::/w/gitlab-mr 6=orca::/w/Zeta 7=lab::/lab 8=folder:fw-review@local 9=folder:fw-notes@local
+cmd1-9 unmounted: 1=orca::/orca 2=orca::/w/feat-a 3=orca::/w/feat-b 4=orca::/w/feat-c 5=lab::/w/gitlab-mr 6=orca::/w/Zeta 7=lab::/lab 8=folder:fw-review@local 9=folder:fw-notes@local
+cmd ids unmounted: orca::/orca orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca::/w/Zeta lab::/lab folder:fw-review folder:fw-notes shared::/w/same ext::/ext api::/api api::/w/api-y orca-ssh::/orca-ssh orca-ssh::/w/remote-x folder:fw-remote
+-- collapsed: host:local project-group:pg-work project-group:pg-nested project-group:pg-folders project:repo:shared project:repo:ext project-group:pg-remote-folders host:ssh:gpu-vm pinned project:p-orca project:repo:lab lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+HOST key=host:local label="Local Linux" kind=local detail="This computer" health=local collapsed=true count=5
+HOST key=host:runtime:env-1 label="env-1" kind=runtime detail="Orca server" health=connecting count=3
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HOST key=host:ssh:gpu-vm label="GPU VM" kind=ssh detail="SSH" health=disconnected collapsed=true count=2
+-- rows before host sections --
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a lineageCollapsed=true hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=2 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION project:p-orca: project:p-orca:|orca::/orca project:p-orca:|orca-ssh::/orca-ssh project:p-orca:|orca::/w/feat-a project:p-orca:|orca::/w/feat-b project:p-orca:|orca::/w/feat-c project:p-orca:|lab::/w/gitlab-mr project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x project:p-orca:|orca::/w/Zeta
+SECTION project:repo:lab: project:repo:lab:|lab::/lab
+SECTION project:repo:shared: project:repo:shared:local|shared::/w/same project:repo:shared:ssh:gpu-vm|shared::/w/same
+SECTION project:repo:empty: -
+SECTION project:repo:ext: project:repo:ext:|ext::/ext
+PREFERRED |orca::/w/feat-a -> project:p-orca:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> project:p-orca:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> project:p-orca:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> project:p-orca:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> project:repo:shared:ssh:gpu-vm|shared::/w/same
+renderedKeys: 7
+placeholders: empty
+selectionOrder: runtime:env-1|api::/api runtime:env-1|api::/w/api-y
+cmd1-9 mounted: 1=api::/api@runtime:env-1 2=api::/w/api-y@runtime:env-1
+cmd1-9 unmounted: 1=api::/api@runtime:env-1 2=api::/w/api-y@runtime:env-1
+cmd ids unmounted: api::/api api::/w/api-y
+=== groupBy=workspace-status pinnedInGroups=false ===
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+HOST key=host:local label="Local Linux" kind=local detail="This computer" health=local count=11
+HEADER key=pinned collapseKey=pinned label="Pinned" count=4 tone="text-foreground" icon=Pin hostId=local hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+HEADER key=workspace-status:in-progress collapseKey=workspace-status:in-progress label="In progress" count=5 tone="text-[#d4a300]" icon=ConductorProgressIcon hostId=local hostCounts={local:5 ssh:gpu-vm:2 runtime:env-1:1} hostIds={local:[shared::/w/same,orca::/orca,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[shared::/w/same,orca::/orca,lab::/lab,ext::/ext]
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review collapseKey=workspace-status:in-review label="In review" count=1 tone="text-[#16a34a]" icon=ConductorReviewIcon hostId=local hostCounts={local:1} hostIds={local:[]} ids=[]
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+HEADER key=workspace-status:completed collapseKey=workspace-status:completed label="Done" count=1 tone="text-[#c7a594]" icon=ConductorDoneIcon hostId=local hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+HOST key=host:runtime:env-1 label="env-1" kind=runtime detail="Orca server" health=connecting count=2
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=workspace-status:in-progress collapseKey=workspace-status:in-progress:host:runtime:env-1 label="In progress" count=1 tone="text-[#d4a300]" icon=ConductorProgressIcon hostId=runtime:env-1 hostCounts={local:5 ssh:gpu-vm:2 runtime:env-1:1} hostIds={local:[shared::/w/same,orca::/orca,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[api::/api]
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=workspace-status:completed collapseKey=workspace-status:completed:host:runtime:env-1 label="Done" count=1 tone="text-[#c7a594]" icon=ConductorDoneIcon hostId=runtime:env-1 hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[api::/w/api-y]
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HOST key=host:ssh:gpu-vm label="GPU VM" kind=ssh detail="SSH" health=disconnected count=4
+HEADER key=pinned collapseKey=pinned:host:ssh:gpu-vm label="Pinned" count=2 tone="text-foreground" icon=Pin hostId=ssh:gpu-vm hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=workspace-status:in-progress collapseKey=workspace-status:in-progress:host:ssh:gpu-vm label="In progress" count=2 tone="text-[#d4a300]" icon=ConductorProgressIcon hostId=ssh:gpu-vm hostCounts={local:5 ssh:gpu-vm:2 runtime:env-1:1} hostIds={local:[shared::/w/same,orca::/orca,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[orca-ssh::/orca-ssh]
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+-- rows before host sections --
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=workspace-status:in-progress label="In progress" count=8 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:5 ssh:gpu-vm:2 runtime:env-1:1} hostIds={local:[shared::/w/same,orca::/orca,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[shared::/w/same,orca::/orca,orca-ssh::/orca-ssh,api::/api,lab::/lab,ext::/ext]
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=1 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:1} hostIds={local:[]} ids=[]
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[api::/w/api-y,orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+SECTION workspace-status:in-review: -
+renderedKeys: 25
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr local|shared::/w/same |orca::/orca |lab::/lab |ext::/ext local|folder:fw-notes local|folder:fw-review |orca::/w/Zeta runtime:env-1|api::/api runtime:env-1|api::/w/api-y ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same |orca-ssh::/orca-ssh ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=shared::/w/same@local 6=orca::/orca 7=lab::/lab 8=ext::/ext 9=folder:fw-notes@local
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=shared::/w/same@local 6=orca::/orca 7=lab::/lab 8=ext::/ext 9=folder:fw-notes@local
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr shared::/w/same orca::/orca lab::/lab ext::/ext folder:fw-notes folder:fw-review orca::/w/Zeta api::/api api::/w/api-y orca-ssh::/w/remote-x orca-ssh::/orca-ssh folder:fw-remote
+-- collapsed: host:local workspace-status:in-progress workspace-status:completed workspace-status:in-progress:host:runtime:env-1 host:ssh:gpu-vm workspace-status:in-progress:host:ssh:gpu-vm lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+HOST key=host:local label="Local Linux" kind=local detail="This computer" health=local collapsed=true count=8
+HOST key=host:runtime:env-1 label="env-1" kind=runtime detail="Orca server" health=connecting count=2
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=workspace-status:in-progress collapseKey=workspace-status:in-progress:host:runtime:env-1 label="In progress" count=1 tone="text-[#d4a300]" icon=ConductorProgressIcon hostId=runtime:env-1 hostCounts={local:5 ssh:gpu-vm:2 runtime:env-1:1} hostIds={local:[shared::/w/same,orca::/orca,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[api::/api]
+HEADER key=workspace-status:completed collapseKey=workspace-status:completed:host:runtime:env-1 label="Done" count=1 tone="text-[#c7a594]" icon=ConductorDoneIcon hostId=runtime:env-1 hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[api::/w/api-y]
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HOST key=host:ssh:gpu-vm label="GPU VM" kind=ssh detail="SSH" health=disconnected collapsed=true count=4
+-- rows before host sections --
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a lineageCollapsed=true hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=workspace-status:in-progress label="In progress" count=8 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:5 ssh:gpu-vm:2 runtime:env-1:1} hostIds={local:[shared::/w/same,orca::/orca,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[shared::/w/same,orca::/orca,orca-ssh::/orca-ssh,api::/api,lab::/lab,ext::/ext]
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=1 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:1} hostIds={local:[]} ids=[]
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[api::/w/api-y,orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION workspace-status:in-progress: workspace-status:in-progress:local|shared::/w/same workspace-status:in-progress:|orca::/orca workspace-status:in-progress:|orca-ssh::/orca-ssh workspace-status:in-progress:runtime:env-1|api::/api workspace-status:in-progress:|lab::/lab workspace-status:in-progress:|ext::/ext
+SECTION workspace-status:in-review: -
+SECTION workspace-status:completed: workspace-status:completed:runtime:env-1|api::/w/api-y workspace-status:completed:|orca::/w/Zeta
+renderedKeys: 4
+placeholders: -
+selectionOrder: runtime:env-1|api::/w/api-y
+cmd1-9 mounted: 1=api::/w/api-y@runtime:env-1
+cmd1-9 unmounted: -
+cmd ids unmounted: -
+=== groupBy=workspace-status pinnedInGroups=true ===
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+HOST key=host:local label="Local Linux" kind=local detail="This computer" health=local count=11
+HEADER key=pinned collapseKey=pinned label="Pinned" count=4 tone="text-foreground" icon=Pin hostId=local hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+HEADER key=workspace-status:in-progress collapseKey=workspace-status:in-progress label="In progress" count=8 tone="text-[#d4a300]" icon=ConductorProgressIcon hostId=local hostCounts={local:8 ssh:gpu-vm:4 runtime:env-1:1} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/feat-c,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[orca::/w/feat-a,lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/feat-c,lab::/lab,ext::/ext]
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-a depth=0 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab parent=workspace-status:in-progress:|orca::/w/feat-a
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review collapseKey=workspace-status:in-review label="In review" count=2 tone="text-[#16a34a]" icon=ConductorReviewIcon hostId=local hostCounts={local:2} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+ITEM rowKey=workspace-status:in-review:|orca::/w/feat-b depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+HEADER key=workspace-status:completed collapseKey=workspace-status:completed label="Done" count=1 tone="text-[#c7a594]" icon=ConductorDoneIcon hostId=local hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+HOST key=host:runtime:env-1 label="env-1" kind=runtime detail="Orca server" health=connecting count=2
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=workspace-status:in-progress collapseKey=workspace-status:in-progress:host:runtime:env-1 label="In progress" count=1 tone="text-[#d4a300]" icon=ConductorProgressIcon hostId=runtime:env-1 hostCounts={local:8 ssh:gpu-vm:4 runtime:env-1:1} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/feat-c,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[api::/api]
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=workspace-status:completed collapseKey=workspace-status:completed:host:runtime:env-1 label="Done" count=1 tone="text-[#c7a594]" icon=ConductorDoneIcon hostId=runtime:env-1 hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[api::/w/api-y]
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HOST key=host:ssh:gpu-vm label="GPU VM" kind=ssh detail="SSH" health=disconnected count=4
+HEADER key=pinned collapseKey=pinned:host:ssh:gpu-vm label="Pinned" count=2 tone="text-foreground" icon=Pin hostId=ssh:gpu-vm hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=workspace-status:in-progress collapseKey=workspace-status:in-progress:host:ssh:gpu-vm label="In progress" count=4 tone="text-[#d4a300]" icon=ConductorProgressIcon hostId=ssh:gpu-vm hostCounts={local:8 ssh:gpu-vm:4 runtime:env-1:1} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/feat-c,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh]
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+-- rows before host sections --
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=workspace-status:in-progress label="In progress" count=13 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:8 ssh:gpu-vm:4 runtime:env-1:1} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/feat-c,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,lab::/w/gitlab-mr,shared::/w/same,shared::/w/same,orca::/orca,orca-ssh::/orca-ssh,api::/api,orca::/w/feat-c,lab::/lab,ext::/ext]
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-a depth=0 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab parent=workspace-status:in-progress:|orca::/w/feat-a
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=2 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:2} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+ITEM rowKey=workspace-status:in-review:|orca::/w/feat-b depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[api::/w/api-y,orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+PREFERRED |orca::/w/feat-a -> workspace-status:in-progress:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> workspace-status:in-review:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> workspace-status:in-progress:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> workspace-status:in-progress:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> workspace-status:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 31
+placeholders: -
+selectionOrder: |orca::/w/feat-a |lab::/w/gitlab-mr local|shared::/w/same |orca::/orca |orca::/w/feat-c |lab::/lab |ext::/ext local|folder:fw-notes |orca::/w/feat-b local|folder:fw-review |orca::/w/Zeta runtime:env-1|api::/api runtime:env-1|api::/w/api-y ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same |orca-ssh::/orca-ssh ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=lab::/w/gitlab-mr 3=shared::/w/same@local 4=orca::/orca 5=orca::/w/feat-c 6=lab::/lab 7=ext::/ext 8=folder:fw-notes@local 9=orca::/w/feat-b#lineage:orca::/w/feat-b
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=lab::/w/gitlab-mr 3=shared::/w/same@local 4=orca::/orca 5=orca::/w/feat-c 6=lab::/lab 7=ext::/ext 8=folder:fw-notes@local 9=orca::/w/feat-b
+cmd ids unmounted: orca::/w/feat-a lab::/w/gitlab-mr shared::/w/same orca::/orca orca::/w/feat-c lab::/lab ext::/ext folder:fw-notes orca::/w/feat-b folder:fw-review orca::/w/Zeta api::/api api::/w/api-y orca-ssh::/w/remote-x orca-ssh::/orca-ssh folder:fw-remote
+-- collapsed: host:local workspace-status:in-progress workspace-status:completed workspace-status:in-progress:host:runtime:env-1 host:ssh:gpu-vm workspace-status:in-progress:host:ssh:gpu-vm lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+HOST key=host:local label="Local Linux" kind=local detail="This computer" health=local collapsed=true count=10
+HOST key=host:runtime:env-1 label="env-1" kind=runtime detail="Orca server" health=connecting count=2
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=workspace-status:in-progress collapseKey=workspace-status:in-progress:host:runtime:env-1 label="In progress" count=1 tone="text-[#d4a300]" icon=ConductorProgressIcon hostId=runtime:env-1 hostCounts={local:8 ssh:gpu-vm:4 runtime:env-1:1} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/feat-c,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[api::/api]
+HEADER key=workspace-status:completed collapseKey=workspace-status:completed:host:runtime:env-1 label="Done" count=1 tone="text-[#c7a594]" icon=ConductorDoneIcon hostId=runtime:env-1 hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[api::/w/api-y]
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HOST key=host:ssh:gpu-vm label="GPU VM" kind=ssh detail="SSH" health=disconnected collapsed=true count=4
+-- rows before host sections --
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a lineageCollapsed=true hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=workspace-status:in-progress label="In progress" count=13 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:8 ssh:gpu-vm:4 runtime:env-1:1} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/feat-c,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,lab::/w/gitlab-mr,shared::/w/same,shared::/w/same,orca::/orca,orca-ssh::/orca-ssh,api::/api,orca::/w/feat-c,lab::/lab,ext::/ext]
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-a depth=0 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-a lineageCollapsed=true hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=2 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:2} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+ITEM rowKey=workspace-status:in-review:|orca::/w/feat-b depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[api::/w/api-y,orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION workspace-status:in-progress: workspace-status:in-progress:|orca::/w/feat-a workspace-status:in-progress:|lab::/w/gitlab-mr workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x workspace-status:in-progress:local|shared::/w/same workspace-status:in-progress:ssh:gpu-vm|shared::/w/same workspace-status:in-progress:|orca::/orca workspace-status:in-progress:|orca-ssh::/orca-ssh workspace-status:in-progress:runtime:env-1|api::/api workspace-status:in-progress:|orca::/w/feat-c workspace-status:in-progress:|lab::/lab workspace-status:in-progress:|ext::/ext
+SECTION workspace-status:in-review: workspace-status:in-review:|orca::/w/feat-b
+SECTION workspace-status:completed: workspace-status:completed:runtime:env-1|api::/w/api-y workspace-status:completed:|orca::/w/Zeta
+PREFERRED |orca::/w/feat-a -> workspace-status:in-progress:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> workspace-status:in-review:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> workspace-status:in-progress:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> workspace-status:in-progress:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> workspace-status:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 4
+placeholders: -
+selectionOrder: runtime:env-1|api::/w/api-y
+cmd1-9 mounted: 1=api::/w/api-y@runtime:env-1
+cmd1-9 unmounted: -
+cmd ids unmounted: -
+=== groupBy=pr-status pinnedInGroups=false ===
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+HOST key=host:local label="Local Linux" kind=local detail="This computer" health=local count=11
+HEADER key=pinned collapseKey=pinned label="Pinned" count=4 tone="text-foreground" icon=Pin hostId=local hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+HEADER key=pr:in-progress collapseKey=pr:in-progress label="In progress" count=6 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostId=local hostCounts={local:6 ssh:gpu-vm:2 runtime:env-1:1} hostIds={local:[shared::/w/same,orca::/orca,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[shared::/w/same,orca::/orca,lab::/lab,ext::/ext]
+ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+HEADER key=pr:closed collapseKey=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostId=local hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=pr:closed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+HOST key=host:runtime:env-1 label="env-1" kind=runtime detail="Orca server" health=connecting count=2
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pr:in-review collapseKey=pr:in-review:host:runtime:env-1 label="In review" count=1 tone="text-workspace-status-review" icon=ConductorReviewIcon hostId=runtime:env-1 hostCounts={runtime:env-1:1} hostIds={runtime:env-1:[api::/w/api-y]} ids=[api::/w/api-y]
+ITEM rowKey=pr:in-review:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=pr:in-progress collapseKey=pr:in-progress:host:runtime:env-1 label="In progress" count=1 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostId=runtime:env-1 hostCounts={local:6 ssh:gpu-vm:2 runtime:env-1:1} hostIds={local:[shared::/w/same,orca::/orca,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[api::/api]
+ITEM rowKey=pr:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HOST key=host:ssh:gpu-vm label="GPU VM" kind=ssh detail="SSH" health=disconnected count=4
+HEADER key=pinned collapseKey=pinned:host:ssh:gpu-vm label="Pinned" count=2 tone="text-foreground" icon=Pin hostId=ssh:gpu-vm hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=pr:in-progress collapseKey=pr:in-progress:host:ssh:gpu-vm label="In progress" count=2 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostId=ssh:gpu-vm hostCounts={local:6 ssh:gpu-vm:2 runtime:env-1:1} hostIds={local:[shared::/w/same,orca::/orca,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[orca-ssh::/orca-ssh]
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+-- rows before host sections --
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=pr:in-review label="In review" count=1 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={runtime:env-1:1} hostIds={runtime:env-1:[api::/w/api-y]} ids=[api::/w/api-y]
+ITEM rowKey=pr:in-review:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=pr:in-progress label="In progress" count=9 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={local:6 ssh:gpu-vm:2 runtime:env-1:1} hostIds={local:[shared::/w/same,orca::/orca,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[shared::/w/same,orca::/orca,orca-ssh::/orca-ssh,api::/api,lab::/lab,ext::/ext]
+ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=pr:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=pr:closed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+renderedKeys: 25
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr local|shared::/w/same |orca::/orca |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes |orca::/w/Zeta runtime:env-1|api::/w/api-y runtime:env-1|api::/api ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same |orca-ssh::/orca-ssh ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=shared::/w/same@local 6=orca::/orca 7=lab::/lab 8=ext::/ext 9=folder:fw-review@local
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=shared::/w/same@local 6=orca::/orca 7=lab::/lab 8=ext::/ext 9=folder:fw-review@local
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr shared::/w/same orca::/orca lab::/lab ext::/ext folder:fw-review folder:fw-notes orca::/w/Zeta api::/w/api-y api::/api orca-ssh::/w/remote-x orca-ssh::/orca-ssh folder:fw-remote
+-- collapsed: host:local pr:in-progress host:runtime:env-1 pr:in-progress:host:runtime:env-1 pinned:host:ssh:gpu-vm pinned lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+HOST key=host:local label="Local Linux" kind=local detail="This computer" health=local collapsed=true count=8
+HOST key=host:runtime:env-1 label="env-1" kind=runtime detail="Orca server" health=connecting collapsed=true count=2
+HOST key=host:ssh:gpu-vm label="GPU VM" kind=ssh detail="SSH" health=disconnected count=4
+HEADER key=pinned collapseKey=pinned:host:ssh:gpu-vm label="Pinned" count=2 tone="text-foreground" icon=Pin hostId=ssh:gpu-vm hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=pr:in-progress collapseKey=pr:in-progress:host:ssh:gpu-vm label="In progress" count=2 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostId=ssh:gpu-vm hostCounts={local:6 ssh:gpu-vm:2 runtime:env-1:1} hostIds={local:[shared::/w/same,orca::/orca,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[orca-ssh::/orca-ssh]
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+-- rows before host sections --
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a lineageCollapsed=true hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=pr:in-review label="In review" count=1 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={runtime:env-1:1} hostIds={runtime:env-1:[api::/w/api-y]} ids=[api::/w/api-y]
+ITEM rowKey=pr:in-review:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=pr:in-progress label="In progress" count=9 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={local:6 ssh:gpu-vm:2 runtime:env-1:1} hostIds={local:[shared::/w/same,orca::/orca,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[shared::/w/same,orca::/orca,orca-ssh::/orca-ssh,api::/api,lab::/lab,ext::/ext]
+ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=pr:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=pr:closed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION pr:in-review: pr:in-review:runtime:env-1|api::/w/api-y
+SECTION pr:in-progress: pr:in-progress:local|shared::/w/same pr:in-progress:|orca::/orca pr:in-progress:|orca-ssh::/orca-ssh pr:in-progress:runtime:env-1|api::/api pr:in-progress:|lab::/lab pr:in-progress:|ext::/ext
+SECTION pr:closed: pr:closed:|orca::/w/Zeta
+renderedKeys: 5
+placeholders: -
+selectionOrder: |orca-ssh::/orca-ssh ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca-ssh::/orca-ssh 2=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: -
+cmd ids unmounted: -
+=== groupBy=pr-status pinnedInGroups=true ===
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+HOST key=host:local label="Local Linux" kind=local detail="This computer" health=local count=11
+HEADER key=pinned collapseKey=pinned label="Pinned" count=4 tone="text-foreground" icon=Pin hostId=local hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+HEADER key=pr:done collapseKey=pr:done label="Done" count=1 tone="text-workspace-status-done" icon=ConductorDoneIcon hostId=local hostCounts={local:1} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+ITEM rowKey=pr:done:|orca::/w/feat-b depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+HEADER key=pr:in-review collapseKey=pr:in-review label="In review" count=1 tone="text-workspace-status-review" icon=ConductorReviewIcon hostId=local hostCounts={local:1 runtime:env-1:1} hostIds={local:[orca::/w/feat-a] runtime:env-1:[api::/w/api-y]} ids=[orca::/w/feat-a]
+ITEM rowKey=pr:in-review:|orca::/w/feat-a depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+HEADER key=pr:in-progress collapseKey=pr:in-progress label="In progress" count=8 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostId=local hostCounts={ssh:gpu-vm:4 local:8 runtime:env-1:1} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] local:[lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/feat-c,lab::/lab,ext::/ext] runtime:env-1:[api::/api]} ids=[lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/feat-c,lab::/lab,ext::/ext]
+ITEM rowKey=pr:in-progress:|lab::/w/gitlab-mr depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+HEADER key=pr:closed collapseKey=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostId=local hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=pr:closed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+HOST key=host:runtime:env-1 label="env-1" kind=runtime detail="Orca server" health=connecting count=2
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pr:in-review collapseKey=pr:in-review:host:runtime:env-1 label="In review" count=1 tone="text-workspace-status-review" icon=ConductorReviewIcon hostId=runtime:env-1 hostCounts={local:1 runtime:env-1:1} hostIds={local:[orca::/w/feat-a] runtime:env-1:[api::/w/api-y]} ids=[api::/w/api-y]
+ITEM rowKey=pr:in-review:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=pr:in-progress collapseKey=pr:in-progress:host:runtime:env-1 label="In progress" count=1 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostId=runtime:env-1 hostCounts={ssh:gpu-vm:4 local:8 runtime:env-1:1} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] local:[lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/feat-c,lab::/lab,ext::/ext] runtime:env-1:[api::/api]} ids=[api::/api]
+ITEM rowKey=pr:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HOST key=host:ssh:gpu-vm label="GPU VM" kind=ssh detail="SSH" health=disconnected count=4
+HEADER key=pinned collapseKey=pinned:host:ssh:gpu-vm label="Pinned" count=2 tone="text-foreground" icon=Pin hostId=ssh:gpu-vm hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=pr:in-progress collapseKey=pr:in-progress:host:ssh:gpu-vm label="In progress" count=4 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostId=ssh:gpu-vm hostCounts={ssh:gpu-vm:4 local:8 runtime:env-1:1} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] local:[lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/feat-c,lab::/lab,ext::/ext] runtime:env-1:[api::/api]} ids=[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh]
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+-- rows before host sections --
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=pr:done label="Done" count=1 tone="text-workspace-status-done" icon=ConductorDoneIcon hostCounts={local:1} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+ITEM rowKey=pr:done:|orca::/w/feat-b depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+HEADER key=pr:in-review label="In review" count=2 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={local:1 runtime:env-1:1} hostIds={local:[orca::/w/feat-a] runtime:env-1:[api::/w/api-y]} ids=[orca::/w/feat-a,api::/w/api-y]
+ITEM rowKey=pr:in-review:|orca::/w/feat-a depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-review:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=pr:in-progress label="In progress" count=13 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={ssh:gpu-vm:4 local:8 runtime:env-1:1} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] local:[lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/feat-c,lab::/lab,ext::/ext] runtime:env-1:[api::/api]} ids=[orca-ssh::/w/remote-x,lab::/w/gitlab-mr,shared::/w/same,shared::/w/same,orca::/orca,orca-ssh::/orca-ssh,api::/api,orca::/w/feat-c,lab::/lab,ext::/ext]
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|lab::/w/gitlab-mr depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=pr:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=pr:closed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+PREFERRED |orca::/w/feat-a -> pr:in-review:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> pr:done:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> pr:in-progress:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> pr:in-progress:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> pr:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 32
+placeholders: -
+selectionOrder: |orca::/w/feat-b |orca::/w/feat-a |lab::/w/gitlab-mr local|shared::/w/same |orca::/orca |orca::/w/feat-c |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes |orca::/w/Zeta runtime:env-1|api::/w/api-y runtime:env-1|api::/api ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same |orca-ssh::/orca-ssh ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-b#lineage:orca::/w/feat-b 2=orca::/w/feat-a#lineage:orca::/w/feat-a 3=lab::/w/gitlab-mr 4=shared::/w/same@local 5=orca::/orca 6=orca::/w/feat-c 7=lab::/lab 8=ext::/ext 9=folder:fw-review@local
+cmd1-9 unmounted: 1=orca::/w/feat-b 2=orca::/w/feat-a 3=lab::/w/gitlab-mr 4=shared::/w/same@local 5=orca::/orca 6=orca::/w/feat-c 7=lab::/lab 8=ext::/ext 9=folder:fw-review@local
+cmd ids unmounted: orca::/w/feat-b orca::/w/feat-a lab::/w/gitlab-mr shared::/w/same orca::/orca orca::/w/feat-c lab::/lab ext::/ext folder:fw-review folder:fw-notes orca::/w/Zeta api::/w/api-y api::/api orca-ssh::/w/remote-x orca-ssh::/orca-ssh folder:fw-remote
+-- collapsed: host:local pr:done pr:in-progress host:runtime:env-1 pr:in-progress:host:runtime:env-1 pinned:host:ssh:gpu-vm pinned pr:in-review pr:closed lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+HOST key=host:local label="Local Linux" kind=local detail="This computer" health=local collapsed=true count=11
+HOST key=host:runtime:env-1 label="env-1" kind=runtime detail="Orca server" health=connecting collapsed=true count=2
+HOST key=host:ssh:gpu-vm label="GPU VM" kind=ssh detail="SSH" health=disconnected count=4
+HEADER key=pinned collapseKey=pinned:host:ssh:gpu-vm label="Pinned" count=2 tone="text-foreground" icon=Pin hostId=ssh:gpu-vm hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=pr:in-progress collapseKey=pr:in-progress:host:ssh:gpu-vm label="In progress" count=4 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostId=ssh:gpu-vm hostCounts={ssh:gpu-vm:4 local:8 runtime:env-1:1} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] local:[lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/feat-c,lab::/lab,ext::/ext] runtime:env-1:[api::/api]} ids=[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh]
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+-- rows before host sections --
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a lineageCollapsed=true hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=pr:done label="Done" count=1 tone="text-workspace-status-done" icon=ConductorDoneIcon hostCounts={local:1} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+ITEM rowKey=pr:done:|orca::/w/feat-b depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+HEADER key=pr:in-review label="In review" count=2 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={local:1 runtime:env-1:1} hostIds={local:[orca::/w/feat-a] runtime:env-1:[api::/w/api-y]} ids=[orca::/w/feat-a,api::/w/api-y]
+ITEM rowKey=pr:in-review:|orca::/w/feat-a depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-review:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=pr:in-progress label="In progress" count=13 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={ssh:gpu-vm:4 local:8 runtime:env-1:1} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] local:[lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/feat-c,lab::/lab,ext::/ext] runtime:env-1:[api::/api]} ids=[orca-ssh::/w/remote-x,lab::/w/gitlab-mr,shared::/w/same,shared::/w/same,orca::/orca,orca-ssh::/orca-ssh,api::/api,orca::/w/feat-c,lab::/lab,ext::/ext]
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|lab::/w/gitlab-mr depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=pr:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=pr:closed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION pr:done: pr:done:|orca::/w/feat-b
+SECTION pr:in-review: pr:in-review:|orca::/w/feat-a pr:in-review:runtime:env-1|api::/w/api-y
+SECTION pr:in-progress: pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x pr:in-progress:|lab::/w/gitlab-mr pr:in-progress:local|shared::/w/same pr:in-progress:ssh:gpu-vm|shared::/w/same pr:in-progress:|orca::/orca pr:in-progress:|orca-ssh::/orca-ssh pr:in-progress:runtime:env-1|api::/api pr:in-progress:|orca::/w/feat-c pr:in-progress:|lab::/lab pr:in-progress:|ext::/ext
+SECTION pr:closed: pr:closed:|orca::/w/Zeta
+PREFERRED |orca::/w/feat-a -> pr:in-review:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> pr:done:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> pr:in-progress:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> pr:in-progress:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> pr:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 7
+placeholders: -
+selectionOrder: ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same |orca-ssh::/orca-ssh ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca-ssh::/w/remote-x@ssh:gpu-vm 2=shared::/w/same@ssh:gpu-vm 3=orca-ssh::/orca-ssh 4=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: -
+cmd ids unmounted: -
diff --git a/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-name-order.txt b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-name-order.txt
new file mode 100644
index 000000000000..069aac84a128
--- /dev/null
+++ b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-name-order.txt
@@ -0,0 +1,219 @@
+=== groupBy=none sort=name projectOrder=manual ===
+visible: r-angstrom::/w/angstrom r-angstrom::/w/angstrom r-angstrom::/w/ångström r-eclair::/w/Eclair r-ssh::/w/eclair r-eclair::/w/eclair r-eclair::/w/éclair r-eclair::/w/éclair r-eclair::/w/W2 r-ssh::/w/w2 r-eclair::/w/w2 r-eclair::/w/w10 r-eclair::/w/zebra
+HEADER key=all label="All" count=23 tone="text-foreground" icon=List hostCounts={local:20 ssh:gpu-vm:3} hostIds={local:[r-angstrom::/w/angstrom,r-angstrom::/w/ångström,r-eclair::/w/Eclair,r-eclair::/w/eclair,r-eclair::/w/éclair,r-eclair::/w/éclair,r-eclair::/w/W2,r-eclair::/w/w2,r-eclair::/w/w10,r-eclair::/w/zebra] ssh:gpu-vm:[r-angstrom::/w/angstrom,r-ssh::/w/eclair,r-ssh::/w/w2]} ids=[r-angstrom::/w/angstrom,r-angstrom::/w/angstrom,r-angstrom::/w/ångström,r-eclair::/w/Eclair,r-ssh::/w/eclair,r-eclair::/w/eclair,r-eclair::/w/éclair,r-eclair::/w/éclair,r-eclair::/w/W2,r-ssh::/w/w2,r-eclair::/w/w2,r-eclair::/w/w10,r-eclair::/w/zebra]
+ITEM rowKey=all:|r-angstrom::/w/angstrom depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-angstrom
+ITEM rowKey=all:ssh:gpu-vm|r-angstrom::/w/angstrom depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:r-angstrom
+ITEM rowKey=all:|r-angstrom::/w/ångström depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-angstrom
+ITEM rowKey=all:|r-eclair::/w/Eclair depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair
+ITEM rowKey=all:ssh:gpu-vm|r-ssh::/w/eclair depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:r-ssh
+ITEM rowKey=all:|r-eclair::/w/eclair depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair
+ITEM rowKey=all:|r-eclair::/w/éclair depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair
+ITEM rowKey=all:|r-eclair::/w/éclair depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair
+ITEM rowKey=all:|r-eclair::/w/W2 depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair
+ITEM rowKey=all:ssh:gpu-vm|r-ssh::/w/w2 depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:r-ssh
+ITEM rowKey=all:|r-eclair::/w/w2 depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair
+ITEM rowKey=all:|r-eclair::/w/w10 depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair
+ITEM rowKey=all:|r-eclair::/w/zebra depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair
+FOLDER key=folder-workspace:fw-angstrom projectGroup=pg-eclair depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-angstrom-accent projectGroup=pg-eclair depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-Eclair projectGroup=pg-zebra depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-eclair projectGroup=pg-angstrom depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-eclair-accent projectGroup=pg-zebra depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-W2 projectGroup=pg-zebra depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-w2-a projectGroup=pg-zebra depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-w2-b projectGroup=pg-zebra depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-w10 projectGroup=pg-zebra depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-zebra projectGroup=pg-zebra depth=0 groupDepth=0
+renderedKeys: 34
+placeholders: -
+selectionOrder: |r-angstrom::/w/angstrom ssh:gpu-vm|r-angstrom::/w/angstrom |r-angstrom::/w/ångström |r-eclair::/w/Eclair ssh:gpu-vm|r-ssh::/w/eclair |r-eclair::/w/eclair |r-eclair::/w/éclair |r-eclair::/w/éclair |r-eclair::/w/W2 ssh:gpu-vm|r-ssh::/w/w2 |r-eclair::/w/w2 |r-eclair::/w/w10 |r-eclair::/w/zebra local|folder:fw-angstrom local|folder:fw-angstrom-accent local|folder:fw-Eclair local|folder:fw-eclair local|folder:fw-eclair-accent local|folder:fw-W2 local|folder:fw-w2-a local|folder:fw-w2-b local|folder:fw-w10 local|folder:fw-zebra
+cmd1-9 mounted: 1=r-angstrom::/w/angstrom 2=r-angstrom::/w/angstrom@ssh:gpu-vm 3=r-angstrom::/w/ångström 4=r-eclair::/w/Eclair 5=r-ssh::/w/eclair@ssh:gpu-vm 6=r-eclair::/w/eclair 7=r-eclair::/w/éclair 8=r-eclair::/w/éclair 9=r-eclair::/w/W2
+cmd1-9 unmounted: 1=r-angstrom::/w/angstrom 2=r-angstrom::/w/angstrom@ssh:gpu-vm 3=r-angstrom::/w/ångström 4=r-eclair::/w/Eclair 5=r-ssh::/w/eclair@ssh:gpu-vm 6=r-eclair::/w/eclair 7=r-eclair::/w/éclair 8=r-eclair::/w/éclair 9=r-eclair::/w/W2
+cmd ids unmounted: r-angstrom::/w/angstrom r-angstrom::/w/ångström r-eclair::/w/Eclair r-ssh::/w/eclair r-eclair::/w/eclair r-eclair::/w/éclair r-eclair::/w/éclair r-eclair::/w/W2 r-ssh::/w/w2 r-eclair::/w/w2 r-eclair::/w/w10 r-eclair::/w/zebra folder:fw-angstrom folder:fw-angstrom-accent folder:fw-Eclair folder:fw-eclair folder:fw-eclair-accent folder:fw-W2 folder:fw-w2-a folder:fw-w2-b folder:fw-w10 folder:fw-zebra
+=== groupBy=none sort=name projectOrder=recent === same as groupBy=none sort=name projectOrder=manual
+=== groupBy=none sort=recent projectOrder=manual ===
+visible: r-eclair::/w/w10 r-eclair::/w/zebra r-angstrom::/w/angstrom r-angstrom::/w/angstrom r-angstrom::/w/ångström r-eclair::/w/Eclair r-ssh::/w/eclair r-eclair::/w/eclair r-eclair::/w/éclair r-eclair::/w/éclair r-eclair::/w/W2 r-ssh::/w/w2 r-eclair::/w/w2
+HEADER key=all label="All" count=23 tone="text-foreground" icon=List hostCounts={local:20 ssh:gpu-vm:3} hostIds={local:[r-eclair::/w/w10,r-eclair::/w/zebra,r-angstrom::/w/angstrom,r-angstrom::/w/ångström,r-eclair::/w/Eclair,r-eclair::/w/eclair,r-eclair::/w/éclair,r-eclair::/w/éclair,r-eclair::/w/W2,r-eclair::/w/w2] ssh:gpu-vm:[r-angstrom::/w/angstrom,r-ssh::/w/eclair,r-ssh::/w/w2]} ids=[r-eclair::/w/w10,r-eclair::/w/zebra,r-angstrom::/w/angstrom,r-angstrom::/w/angstrom,r-angstrom::/w/ångström,r-eclair::/w/Eclair,r-ssh::/w/eclair,r-eclair::/w/eclair,r-eclair::/w/éclair,r-eclair::/w/éclair,r-eclair::/w/W2,r-ssh::/w/w2,r-eclair::/w/w2]
+ITEM rowKey=all:|r-eclair::/w/w10 depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair
+ITEM rowKey=all:|r-eclair::/w/zebra depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair
+ITEM rowKey=all:|r-angstrom::/w/angstrom depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-angstrom
+ITEM rowKey=all:ssh:gpu-vm|r-angstrom::/w/angstrom depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:r-angstrom
+ITEM rowKey=all:|r-angstrom::/w/ångström depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-angstrom
+ITEM rowKey=all:|r-eclair::/w/Eclair depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair
+ITEM rowKey=all:ssh:gpu-vm|r-ssh::/w/eclair depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:r-ssh
+ITEM rowKey=all:|r-eclair::/w/eclair depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair
+ITEM rowKey=all:|r-eclair::/w/éclair depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair
+ITEM rowKey=all:|r-eclair::/w/éclair depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair
+ITEM rowKey=all:|r-eclair::/w/W2 depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair
+ITEM rowKey=all:ssh:gpu-vm|r-ssh::/w/w2 depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:r-ssh
+ITEM rowKey=all:|r-eclair::/w/w2 depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair
+FOLDER key=folder-workspace:fw-angstrom projectGroup=pg-eclair depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-angstrom-accent projectGroup=pg-eclair depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-Eclair projectGroup=pg-zebra depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-eclair projectGroup=pg-angstrom depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-eclair-accent projectGroup=pg-zebra depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-W2 projectGroup=pg-zebra depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-w2-a projectGroup=pg-zebra depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-w2-b projectGroup=pg-zebra depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-w10 projectGroup=pg-zebra depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-zebra projectGroup=pg-zebra depth=0 groupDepth=0
+renderedKeys: 34
+placeholders: -
+selectionOrder: |r-eclair::/w/w10 |r-eclair::/w/zebra |r-angstrom::/w/angstrom ssh:gpu-vm|r-angstrom::/w/angstrom |r-angstrom::/w/ångström |r-eclair::/w/Eclair ssh:gpu-vm|r-ssh::/w/eclair |r-eclair::/w/eclair |r-eclair::/w/éclair |r-eclair::/w/éclair |r-eclair::/w/W2 ssh:gpu-vm|r-ssh::/w/w2 |r-eclair::/w/w2 local|folder:fw-angstrom local|folder:fw-angstrom-accent local|folder:fw-Eclair local|folder:fw-eclair local|folder:fw-eclair-accent local|folder:fw-W2 local|folder:fw-w2-a local|folder:fw-w2-b local|folder:fw-w10 local|folder:fw-zebra
+cmd1-9 mounted: 1=r-eclair::/w/w10 2=r-eclair::/w/zebra 3=r-angstrom::/w/angstrom 4=r-angstrom::/w/angstrom@ssh:gpu-vm 5=r-angstrom::/w/ångström 6=r-eclair::/w/Eclair 7=r-ssh::/w/eclair@ssh:gpu-vm 8=r-eclair::/w/eclair 9=r-eclair::/w/éclair
+cmd1-9 unmounted: 1=r-eclair::/w/w10 2=r-eclair::/w/zebra 3=r-angstrom::/w/angstrom 4=r-angstrom::/w/angstrom@ssh:gpu-vm 5=r-angstrom::/w/ångström 6=r-eclair::/w/Eclair 7=r-ssh::/w/eclair@ssh:gpu-vm 8=r-eclair::/w/eclair 9=r-eclair::/w/éclair
+cmd ids unmounted: r-eclair::/w/w10 r-eclair::/w/zebra r-angstrom::/w/angstrom r-angstrom::/w/ångström r-eclair::/w/Eclair r-ssh::/w/eclair r-eclair::/w/eclair r-eclair::/w/éclair r-eclair::/w/éclair r-eclair::/w/W2 r-ssh::/w/w2 r-eclair::/w/w2 folder:fw-angstrom folder:fw-angstrom-accent folder:fw-Eclair folder:fw-eclair folder:fw-eclair-accent folder:fw-W2 folder:fw-w2-a folder:fw-w2-b folder:fw-w10 folder:fw-zebra
+=== groupBy=none sort=recent projectOrder=recent === same as groupBy=none sort=recent projectOrder=manual
+=== groupBy=none sort=repo projectOrder=manual ===
+visible: r-angstrom::/w/angstrom r-angstrom::/w/angstrom r-angstrom::/w/ångström r-ssh::/w/eclair r-ssh::/w/w2 r-eclair::/w/Eclair r-eclair::/w/eclair r-eclair::/w/éclair r-eclair::/w/éclair r-eclair::/w/W2 r-eclair::/w/w2 r-eclair::/w/w10 r-eclair::/w/zebra
+HEADER key=all label="All" count=23 tone="text-foreground" icon=List hostCounts={local:20 ssh:gpu-vm:3} hostIds={local:[r-angstrom::/w/angstrom,r-angstrom::/w/ångström,r-eclair::/w/Eclair,r-eclair::/w/eclair,r-eclair::/w/éclair,r-eclair::/w/éclair,r-eclair::/w/W2,r-eclair::/w/w2,r-eclair::/w/w10,r-eclair::/w/zebra] ssh:gpu-vm:[r-angstrom::/w/angstrom,r-ssh::/w/eclair,r-ssh::/w/w2]} ids=[r-angstrom::/w/angstrom,r-angstrom::/w/angstrom,r-angstrom::/w/ångström,r-ssh::/w/eclair,r-ssh::/w/w2,r-eclair::/w/Eclair,r-eclair::/w/eclair,r-eclair::/w/éclair,r-eclair::/w/éclair,r-eclair::/w/W2,r-eclair::/w/w2,r-eclair::/w/w10,r-eclair::/w/zebra]
+ITEM rowKey=all:|r-angstrom::/w/angstrom depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-angstrom
+ITEM rowKey=all:ssh:gpu-vm|r-angstrom::/w/angstrom depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:r-angstrom
+ITEM rowKey=all:|r-angstrom::/w/ångström depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-angstrom
+ITEM rowKey=all:ssh:gpu-vm|r-ssh::/w/eclair depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:r-ssh
+ITEM rowKey=all:ssh:gpu-vm|r-ssh::/w/w2 depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:r-ssh
+ITEM rowKey=all:|r-eclair::/w/Eclair depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair
+ITEM rowKey=all:|r-eclair::/w/eclair depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair
+ITEM rowKey=all:|r-eclair::/w/éclair depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair
+ITEM rowKey=all:|r-eclair::/w/éclair depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair
+ITEM rowKey=all:|r-eclair::/w/W2 depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair
+ITEM rowKey=all:|r-eclair::/w/w2 depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair
+ITEM rowKey=all:|r-eclair::/w/w10 depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair
+ITEM rowKey=all:|r-eclair::/w/zebra depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair
+FOLDER key=folder-workspace:fw-angstrom projectGroup=pg-eclair depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-angstrom-accent projectGroup=pg-eclair depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-Eclair projectGroup=pg-zebra depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-eclair projectGroup=pg-angstrom depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-eclair-accent projectGroup=pg-zebra depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-W2 projectGroup=pg-zebra depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-w2-a projectGroup=pg-zebra depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-w2-b projectGroup=pg-zebra depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-w10 projectGroup=pg-zebra depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-zebra projectGroup=pg-zebra depth=0 groupDepth=0
+renderedKeys: 34
+placeholders: -
+selectionOrder: |r-angstrom::/w/angstrom ssh:gpu-vm|r-angstrom::/w/angstrom |r-angstrom::/w/ångström ssh:gpu-vm|r-ssh::/w/eclair ssh:gpu-vm|r-ssh::/w/w2 |r-eclair::/w/Eclair |r-eclair::/w/eclair |r-eclair::/w/éclair |r-eclair::/w/éclair |r-eclair::/w/W2 |r-eclair::/w/w2 |r-eclair::/w/w10 |r-eclair::/w/zebra local|folder:fw-angstrom local|folder:fw-angstrom-accent local|folder:fw-Eclair local|folder:fw-eclair local|folder:fw-eclair-accent local|folder:fw-W2 local|folder:fw-w2-a local|folder:fw-w2-b local|folder:fw-w10 local|folder:fw-zebra
+cmd1-9 mounted: 1=r-angstrom::/w/angstrom 2=r-angstrom::/w/angstrom@ssh:gpu-vm 3=r-angstrom::/w/ångström 4=r-ssh::/w/eclair@ssh:gpu-vm 5=r-ssh::/w/w2@ssh:gpu-vm 6=r-eclair::/w/Eclair 7=r-eclair::/w/eclair 8=r-eclair::/w/éclair 9=r-eclair::/w/éclair
+cmd1-9 unmounted: 1=r-angstrom::/w/angstrom 2=r-angstrom::/w/angstrom@ssh:gpu-vm 3=r-angstrom::/w/ångström 4=r-ssh::/w/eclair@ssh:gpu-vm 5=r-ssh::/w/w2@ssh:gpu-vm 6=r-eclair::/w/Eclair 7=r-eclair::/w/eclair 8=r-eclair::/w/éclair 9=r-eclair::/w/éclair
+cmd ids unmounted: r-angstrom::/w/angstrom r-angstrom::/w/ångström r-ssh::/w/eclair r-ssh::/w/w2 r-eclair::/w/Eclair r-eclair::/w/eclair r-eclair::/w/éclair r-eclair::/w/éclair r-eclair::/w/W2 r-eclair::/w/w2 r-eclair::/w/w10 r-eclair::/w/zebra folder:fw-angstrom folder:fw-angstrom-accent folder:fw-Eclair folder:fw-eclair folder:fw-eclair-accent folder:fw-W2 folder:fw-w2-a folder:fw-w2-b folder:fw-w10 folder:fw-zebra
+=== groupBy=none sort=repo projectOrder=recent === same as groupBy=none sort=repo projectOrder=manual
+=== groupBy=repo sort=name projectOrder=manual ===
+visible: r-angstrom::/w/angstrom r-angstrom::/w/angstrom r-angstrom::/w/ångström r-eclair::/w/Eclair r-ssh::/w/eclair r-eclair::/w/eclair r-eclair::/w/éclair r-eclair::/w/éclair r-eclair::/w/W2 r-ssh::/w/w2 r-eclair::/w/w2 r-eclair::/w/w10 r-eclair::/w/zebra
+HEADER key=project-group:pg-angstrom label="angstrom" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-angstrom projectGroupDepth=0
+FOLDER key=folder-workspace:fw-eclair projectGroup=pg-angstrom depth=0 groupDepth=1
+HEADER key=project-group:pg-angstrom-accent label="ångström" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-angstrom-accent projectGroupDepth=0
+HEADER key=project:repo:r-angstrom label="ångström" count=3 tone="text-foreground" icon=FolderTree repo=r-angstrom projectGroupDepth=1
+ITEM rowKey=project:repo:r-angstrom:|r-angstrom::/w/angstrom depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-angstrom path=project-group:pg-angstrom-accent>project:repo:r-angstrom
+ITEM rowKey=project:repo:r-angstrom:ssh:gpu-vm|r-angstrom::/w/angstrom depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:r-angstrom path=project-group:pg-angstrom-accent>project:repo:r-angstrom
+ITEM rowKey=project:repo:r-angstrom:|r-angstrom::/w/ångström depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-angstrom path=project-group:pg-angstrom-accent>project:repo:r-angstrom
+HEADER key=project-group:pg-eclair label="eclair" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-eclair projectGroupDepth=0
+FOLDER key=folder-workspace:fw-angstrom projectGroup=pg-eclair depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-angstrom-accent projectGroup=pg-eclair depth=0 groupDepth=1
+HEADER key=project-group:pg-eclair-accent label="Éclair" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-eclair-accent projectGroupDepth=0
+HEADER key=project:repo:r-eclair label="Éclair" count=8 tone="text-foreground" icon=FolderTree repo=r-eclair projectGroupDepth=1
+ITEM rowKey=project:repo:r-eclair:|r-eclair::/w/Eclair depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair path=project-group:pg-eclair-accent>project:repo:r-eclair
+ITEM rowKey=project:repo:r-eclair:|r-eclair::/w/eclair depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair path=project-group:pg-eclair-accent>project:repo:r-eclair
+ITEM rowKey=project:repo:r-eclair:|r-eclair::/w/éclair depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair path=project-group:pg-eclair-accent>project:repo:r-eclair
+ITEM rowKey=project:repo:r-eclair:|r-eclair::/w/éclair depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair path=project-group:pg-eclair-accent>project:repo:r-eclair
+ITEM rowKey=project:repo:r-eclair:|r-eclair::/w/W2 depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair path=project-group:pg-eclair-accent>project:repo:r-eclair
+ITEM rowKey=project:repo:r-eclair:|r-eclair::/w/w2 depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair path=project-group:pg-eclair-accent>project:repo:r-eclair
+ITEM rowKey=project:repo:r-eclair:|r-eclair::/w/w10 depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair path=project-group:pg-eclair-accent>project:repo:r-eclair
+ITEM rowKey=project:repo:r-eclair:|r-eclair::/w/zebra depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair path=project-group:pg-eclair-accent>project:repo:r-eclair
+HEADER key=project-group:pg-zebra label="zebra" count=7 tone="text-foreground" icon=FolderTree projectGroup=pg-zebra projectGroupDepth=0
+FOLDER key=folder-workspace:fw-Eclair projectGroup=pg-zebra depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-eclair-accent projectGroup=pg-zebra depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-W2 projectGroup=pg-zebra depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-w2-a projectGroup=pg-zebra depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-w2-b projectGroup=pg-zebra depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-w10 projectGroup=pg-zebra depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-zebra projectGroup=pg-zebra depth=0 groupDepth=1
+HEADER key=project:repo:r-ssh label="eclair" count=2 tone="text-foreground" icon=FolderTree repo=r-ssh projectGroupDepth=0
+ITEM rowKey=project:repo:r-ssh:ssh:gpu-vm|r-ssh::/w/eclair depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:r-ssh
+ITEM rowKey=project:repo:r-ssh:ssh:gpu-vm|r-ssh::/w/w2 depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:r-ssh
+renderedKeys: 41
+placeholders: -
+selectionOrder: local|folder:fw-eclair |r-angstrom::/w/angstrom ssh:gpu-vm|r-angstrom::/w/angstrom |r-angstrom::/w/ångström local|folder:fw-angstrom local|folder:fw-angstrom-accent |r-eclair::/w/Eclair |r-eclair::/w/eclair |r-eclair::/w/éclair |r-eclair::/w/éclair |r-eclair::/w/W2 |r-eclair::/w/w2 |r-eclair::/w/w10 |r-eclair::/w/zebra local|folder:fw-Eclair local|folder:fw-eclair-accent local|folder:fw-W2 local|folder:fw-w2-a local|folder:fw-w2-b local|folder:fw-w10 local|folder:fw-zebra ssh:gpu-vm|r-ssh::/w/eclair ssh:gpu-vm|r-ssh::/w/w2
+cmd1-9 mounted: 1=folder:fw-eclair@local 2=r-angstrom::/w/angstrom 3=r-angstrom::/w/angstrom@ssh:gpu-vm 4=r-angstrom::/w/ångström 5=folder:fw-angstrom@local 6=folder:fw-angstrom-accent@local 7=r-eclair::/w/Eclair 8=r-eclair::/w/eclair 9=r-eclair::/w/éclair
+cmd1-9 unmounted: 1=folder:fw-eclair@local 2=r-angstrom::/w/angstrom 3=r-angstrom::/w/angstrom@ssh:gpu-vm 4=r-angstrom::/w/ångström 5=folder:fw-angstrom@local 6=folder:fw-angstrom-accent@local 7=r-eclair::/w/Eclair 8=r-eclair::/w/eclair 9=r-eclair::/w/éclair
+cmd ids unmounted: folder:fw-eclair r-angstrom::/w/angstrom r-angstrom::/w/ångström folder:fw-angstrom folder:fw-angstrom-accent r-eclair::/w/Eclair r-eclair::/w/eclair r-eclair::/w/éclair r-eclair::/w/éclair r-eclair::/w/W2 r-eclair::/w/w2 r-eclair::/w/w10 r-eclair::/w/zebra folder:fw-Eclair folder:fw-eclair-accent folder:fw-W2 folder:fw-w2-a folder:fw-w2-b folder:fw-w10 folder:fw-zebra r-ssh::/w/eclair r-ssh::/w/w2
+=== groupBy=repo sort=name projectOrder=recent === same as groupBy=repo sort=name projectOrder=manual
+=== groupBy=repo sort=recent projectOrder=manual ===
+visible: r-eclair::/w/w10 r-eclair::/w/zebra r-angstrom::/w/angstrom r-angstrom::/w/angstrom r-angstrom::/w/ångström r-eclair::/w/Eclair r-ssh::/w/eclair r-eclair::/w/eclair r-eclair::/w/éclair r-eclair::/w/éclair r-eclair::/w/W2 r-ssh::/w/w2 r-eclair::/w/w2
+HEADER key=project-group:pg-angstrom label="angstrom" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-angstrom projectGroupDepth=0
+FOLDER key=folder-workspace:fw-eclair projectGroup=pg-angstrom depth=0 groupDepth=1
+HEADER key=project-group:pg-angstrom-accent label="ångström" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-angstrom-accent projectGroupDepth=0
+HEADER key=project:repo:r-angstrom label="ångström" count=3 tone="text-foreground" icon=FolderTree repo=r-angstrom projectGroupDepth=1
+ITEM rowKey=project:repo:r-angstrom:|r-angstrom::/w/angstrom depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-angstrom path=project-group:pg-angstrom-accent>project:repo:r-angstrom
+ITEM rowKey=project:repo:r-angstrom:ssh:gpu-vm|r-angstrom::/w/angstrom depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:r-angstrom path=project-group:pg-angstrom-accent>project:repo:r-angstrom
+ITEM rowKey=project:repo:r-angstrom:|r-angstrom::/w/ångström depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-angstrom path=project-group:pg-angstrom-accent>project:repo:r-angstrom
+HEADER key=project-group:pg-eclair label="eclair" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-eclair projectGroupDepth=0
+FOLDER key=folder-workspace:fw-angstrom projectGroup=pg-eclair depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-angstrom-accent projectGroup=pg-eclair depth=0 groupDepth=1
+HEADER key=project-group:pg-eclair-accent label="Éclair" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-eclair-accent projectGroupDepth=0
+HEADER key=project:repo:r-eclair label="Éclair" count=8 tone="text-foreground" icon=FolderTree repo=r-eclair projectGroupDepth=1
+ITEM rowKey=project:repo:r-eclair:|r-eclair::/w/w10 depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair path=project-group:pg-eclair-accent>project:repo:r-eclair
+ITEM rowKey=project:repo:r-eclair:|r-eclair::/w/zebra depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair path=project-group:pg-eclair-accent>project:repo:r-eclair
+ITEM rowKey=project:repo:r-eclair:|r-eclair::/w/Eclair depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair path=project-group:pg-eclair-accent>project:repo:r-eclair
+ITEM rowKey=project:repo:r-eclair:|r-eclair::/w/eclair depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair path=project-group:pg-eclair-accent>project:repo:r-eclair
+ITEM rowKey=project:repo:r-eclair:|r-eclair::/w/éclair depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair path=project-group:pg-eclair-accent>project:repo:r-eclair
+ITEM rowKey=project:repo:r-eclair:|r-eclair::/w/éclair depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair path=project-group:pg-eclair-accent>project:repo:r-eclair
+ITEM rowKey=project:repo:r-eclair:|r-eclair::/w/W2 depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair path=project-group:pg-eclair-accent>project:repo:r-eclair
+ITEM rowKey=project:repo:r-eclair:|r-eclair::/w/w2 depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair path=project-group:pg-eclair-accent>project:repo:r-eclair
+HEADER key=project-group:pg-zebra label="zebra" count=7 tone="text-foreground" icon=FolderTree projectGroup=pg-zebra projectGroupDepth=0
+FOLDER key=folder-workspace:fw-Eclair projectGroup=pg-zebra depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-eclair-accent projectGroup=pg-zebra depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-W2 projectGroup=pg-zebra depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-w2-a projectGroup=pg-zebra depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-w2-b projectGroup=pg-zebra depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-w10 projectGroup=pg-zebra depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-zebra projectGroup=pg-zebra depth=0 groupDepth=1
+HEADER key=project:repo:r-ssh label="eclair" count=2 tone="text-foreground" icon=FolderTree repo=r-ssh projectGroupDepth=0
+ITEM rowKey=project:repo:r-ssh:ssh:gpu-vm|r-ssh::/w/eclair depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:r-ssh
+ITEM rowKey=project:repo:r-ssh:ssh:gpu-vm|r-ssh::/w/w2 depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:r-ssh
+renderedKeys: 41
+placeholders: -
+selectionOrder: local|folder:fw-eclair |r-angstrom::/w/angstrom ssh:gpu-vm|r-angstrom::/w/angstrom |r-angstrom::/w/ångström local|folder:fw-angstrom local|folder:fw-angstrom-accent |r-eclair::/w/w10 |r-eclair::/w/zebra |r-eclair::/w/Eclair |r-eclair::/w/eclair |r-eclair::/w/éclair |r-eclair::/w/éclair |r-eclair::/w/W2 |r-eclair::/w/w2 local|folder:fw-Eclair local|folder:fw-eclair-accent local|folder:fw-W2 local|folder:fw-w2-a local|folder:fw-w2-b local|folder:fw-w10 local|folder:fw-zebra ssh:gpu-vm|r-ssh::/w/eclair ssh:gpu-vm|r-ssh::/w/w2
+cmd1-9 mounted: 1=folder:fw-eclair@local 2=r-angstrom::/w/angstrom 3=r-angstrom::/w/angstrom@ssh:gpu-vm 4=r-angstrom::/w/ångström 5=folder:fw-angstrom@local 6=folder:fw-angstrom-accent@local 7=r-eclair::/w/w10 8=r-eclair::/w/zebra 9=r-eclair::/w/Eclair
+cmd1-9 unmounted: 1=folder:fw-eclair@local 2=r-angstrom::/w/angstrom 3=r-angstrom::/w/angstrom@ssh:gpu-vm 4=r-angstrom::/w/ångström 5=folder:fw-angstrom@local 6=folder:fw-angstrom-accent@local 7=r-eclair::/w/w10 8=r-eclair::/w/zebra 9=r-eclair::/w/Eclair
+cmd ids unmounted: folder:fw-eclair r-angstrom::/w/angstrom r-angstrom::/w/ångström folder:fw-angstrom folder:fw-angstrom-accent r-eclair::/w/w10 r-eclair::/w/zebra r-eclair::/w/Eclair r-eclair::/w/eclair r-eclair::/w/éclair r-eclair::/w/éclair r-eclair::/w/W2 r-eclair::/w/w2 folder:fw-Eclair folder:fw-eclair-accent folder:fw-W2 folder:fw-w2-a folder:fw-w2-b folder:fw-w10 folder:fw-zebra r-ssh::/w/eclair r-ssh::/w/w2
+=== groupBy=repo sort=recent projectOrder=recent === same as groupBy=repo sort=recent projectOrder=manual
+=== groupBy=repo sort=repo projectOrder=manual ===
+visible: r-angstrom::/w/angstrom r-angstrom::/w/angstrom r-angstrom::/w/ångström r-ssh::/w/eclair r-ssh::/w/w2 r-eclair::/w/Eclair r-eclair::/w/eclair r-eclair::/w/éclair r-eclair::/w/éclair r-eclair::/w/W2 r-eclair::/w/w2 r-eclair::/w/w10 r-eclair::/w/zebra
+HEADER key=project-group:pg-angstrom label="angstrom" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-angstrom projectGroupDepth=0
+FOLDER key=folder-workspace:fw-eclair projectGroup=pg-angstrom depth=0 groupDepth=1
+HEADER key=project-group:pg-angstrom-accent label="ångström" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-angstrom-accent projectGroupDepth=0
+HEADER key=project:repo:r-angstrom label="ångström" count=3 tone="text-foreground" icon=FolderTree repo=r-angstrom projectGroupDepth=1
+ITEM rowKey=project:repo:r-angstrom:|r-angstrom::/w/angstrom depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-angstrom path=project-group:pg-angstrom-accent>project:repo:r-angstrom
+ITEM rowKey=project:repo:r-angstrom:ssh:gpu-vm|r-angstrom::/w/angstrom depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:r-angstrom path=project-group:pg-angstrom-accent>project:repo:r-angstrom
+ITEM rowKey=project:repo:r-angstrom:|r-angstrom::/w/ångström depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-angstrom path=project-group:pg-angstrom-accent>project:repo:r-angstrom
+HEADER key=project-group:pg-eclair label="eclair" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-eclair projectGroupDepth=0
+FOLDER key=folder-workspace:fw-angstrom projectGroup=pg-eclair depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-angstrom-accent projectGroup=pg-eclair depth=0 groupDepth=1
+HEADER key=project-group:pg-eclair-accent label="Éclair" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-eclair-accent projectGroupDepth=0
+HEADER key=project:repo:r-eclair label="Éclair" count=8 tone="text-foreground" icon=FolderTree repo=r-eclair projectGroupDepth=1
+ITEM rowKey=project:repo:r-eclair:|r-eclair::/w/Eclair depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair path=project-group:pg-eclair-accent>project:repo:r-eclair
+ITEM rowKey=project:repo:r-eclair:|r-eclair::/w/eclair depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair path=project-group:pg-eclair-accent>project:repo:r-eclair
+ITEM rowKey=project:repo:r-eclair:|r-eclair::/w/éclair depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair path=project-group:pg-eclair-accent>project:repo:r-eclair
+ITEM rowKey=project:repo:r-eclair:|r-eclair::/w/éclair depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair path=project-group:pg-eclair-accent>project:repo:r-eclair
+ITEM rowKey=project:repo:r-eclair:|r-eclair::/w/W2 depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair path=project-group:pg-eclair-accent>project:repo:r-eclair
+ITEM rowKey=project:repo:r-eclair:|r-eclair::/w/w2 depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair path=project-group:pg-eclair-accent>project:repo:r-eclair
+ITEM rowKey=project:repo:r-eclair:|r-eclair::/w/w10 depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair path=project-group:pg-eclair-accent>project:repo:r-eclair
+ITEM rowKey=project:repo:r-eclair:|r-eclair::/w/zebra depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair path=project-group:pg-eclair-accent>project:repo:r-eclair
+HEADER key=project-group:pg-zebra label="zebra" count=7 tone="text-foreground" icon=FolderTree projectGroup=pg-zebra projectGroupDepth=0
+FOLDER key=folder-workspace:fw-Eclair projectGroup=pg-zebra depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-eclair-accent projectGroup=pg-zebra depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-W2 projectGroup=pg-zebra depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-w2-a projectGroup=pg-zebra depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-w2-b projectGroup=pg-zebra depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-w10 projectGroup=pg-zebra depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-zebra projectGroup=pg-zebra depth=0 groupDepth=1
+HEADER key=project:repo:r-ssh label="eclair" count=2 tone="text-foreground" icon=FolderTree repo=r-ssh projectGroupDepth=0
+ITEM rowKey=project:repo:r-ssh:ssh:gpu-vm|r-ssh::/w/eclair depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:r-ssh
+ITEM rowKey=project:repo:r-ssh:ssh:gpu-vm|r-ssh::/w/w2 depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:r-ssh
+renderedKeys: 41
+placeholders: -
+selectionOrder: local|folder:fw-eclair |r-angstrom::/w/angstrom ssh:gpu-vm|r-angstrom::/w/angstrom |r-angstrom::/w/ångström local|folder:fw-angstrom local|folder:fw-angstrom-accent |r-eclair::/w/Eclair |r-eclair::/w/eclair |r-eclair::/w/éclair |r-eclair::/w/éclair |r-eclair::/w/W2 |r-eclair::/w/w2 |r-eclair::/w/w10 |r-eclair::/w/zebra local|folder:fw-Eclair local|folder:fw-eclair-accent local|folder:fw-W2 local|folder:fw-w2-a local|folder:fw-w2-b local|folder:fw-w10 local|folder:fw-zebra ssh:gpu-vm|r-ssh::/w/eclair ssh:gpu-vm|r-ssh::/w/w2
+cmd1-9 mounted: 1=folder:fw-eclair@local 2=r-angstrom::/w/angstrom 3=r-angstrom::/w/angstrom@ssh:gpu-vm 4=r-angstrom::/w/ångström 5=folder:fw-angstrom@local 6=folder:fw-angstrom-accent@local 7=r-eclair::/w/Eclair 8=r-eclair::/w/eclair 9=r-eclair::/w/éclair
+cmd1-9 unmounted: 1=folder:fw-eclair@local 2=r-angstrom::/w/angstrom 3=r-angstrom::/w/angstrom@ssh:gpu-vm 4=r-angstrom::/w/ångström 5=folder:fw-angstrom@local 6=folder:fw-angstrom-accent@local 7=r-eclair::/w/Eclair 8=r-eclair::/w/eclair 9=r-eclair::/w/éclair
+cmd ids unmounted: folder:fw-eclair r-angstrom::/w/angstrom r-angstrom::/w/ångström folder:fw-angstrom folder:fw-angstrom-accent r-eclair::/w/Eclair r-eclair::/w/eclair r-eclair::/w/éclair r-eclair::/w/éclair r-eclair::/w/W2 r-eclair::/w/w2 r-eclair::/w/w10 r-eclair::/w/zebra folder:fw-Eclair folder:fw-eclair-accent folder:fw-W2 folder:fw-w2-a folder:fw-w2-b folder:fw-w10 folder:fw-zebra r-ssh::/w/eclair r-ssh::/w/w2
+=== groupBy=repo sort=repo projectOrder=recent === same as groupBy=repo sort=repo projectOrder=manual
diff --git a/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-new-external-inbox.txt b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-new-external-inbox.txt
new file mode 100644
index 000000000000..f78cc894cda5
--- /dev/null
+++ b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-new-external-inbox.txt
@@ -0,0 +1,541 @@
+=== groupBy=none pinnedInGroups=false ===
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=all label="All" count=11 tone="text-foreground" icon=List hostCounts={runtime:env-1:2 local:7 ssh:gpu-vm:2} hostIds={runtime:env-1:[api::/w/api-y,api::/api] local:[shared::/w/same,orca::/orca,orca::/w/Zeta,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[api::/w/api-y,shared::/w/same,orca::/orca,orca::/w/Zeta,orca-ssh::/orca-ssh,api::/api,lab::/lab,ext::/ext]
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+renderedKeys: 23
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same runtime:env-1|api::/w/api-y local|shared::/w/same |orca::/orca |orca::/w/Zeta |orca-ssh::/orca-ssh runtime:env-1|api::/api |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=api::/w/api-y@runtime:env-1 8=shared::/w/same@local 9=orca::/orca
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=shared::/w/same@local 8=api::/w/api-y@runtime:env-1 9=orca::/orca
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x shared::/w/same api::/w/api-y orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext folder:fw-review folder:fw-notes folder:fw-remote
+-- collapsed: pinned lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+HEADER key=all label="All" count=11 tone="text-foreground" icon=List hostCounts={runtime:env-1:2 local:7 ssh:gpu-vm:2} hostIds={runtime:env-1:[api::/w/api-y,api::/api] local:[shared::/w/same,orca::/orca,orca::/w/Zeta,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[api::/w/api-y,shared::/w/same,orca::/orca,orca::/w/Zeta,orca-ssh::/orca-ssh,api::/api,lab::/lab,ext::/ext]
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+renderedKeys: 17
+placeholders: -
+selectionOrder: runtime:env-1|api::/w/api-y local|shared::/w/same |orca::/orca |orca::/w/Zeta |orca-ssh::/orca-ssh runtime:env-1|api::/api |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=api::/w/api-y@runtime:env-1 2=shared::/w/same@local 3=orca::/orca 4=orca::/w/Zeta 5=orca-ssh::/orca-ssh 6=api::/api@runtime:env-1 7=lab::/lab 8=ext::/ext 9=folder:fw-review@local
+cmd1-9 unmounted: 1=api::/w/api-y@runtime:env-1 2=shared::/w/same@local 3=orca::/orca 4=orca::/w/Zeta 5=orca-ssh::/orca-ssh 6=api::/api@runtime:env-1 7=lab::/lab 8=ext::/ext 9=folder:fw-review@local
+cmd ids unmounted: api::/w/api-y shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext folder:fw-review folder:fw-notes folder:fw-remote
+=== groupBy=none pinnedInGroups=true ===
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=all label="All" count=17 tone="text-foreground" icon=List hostCounts={local:11 ssh:gpu-vm:4 runtime:env-1:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/Zeta,orca::/w/feat-c,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] runtime:env-1:[api::/w/api-y,api::/api]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,api::/w/api-y,lab::/w/gitlab-mr,shared::/w/same,shared::/w/same,orca::/orca,orca::/w/Zeta,orca-ssh::/orca-ssh,api::/api,orca::/w/feat-c,lab::/lab,ext::/ext]
+ITEM rowKey=all:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=natural owning=project:p-orca parent=all:|orca::/w/feat-a
+ITEM rowKey=all:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca parent=all:|orca::/w/feat-b
+ITEM rowKey=all:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab parent=all:|orca::/w/feat-a
+ITEM rowKey=all:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=all:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+PREFERRED |orca::/w/feat-a -> all:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> all:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> all:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> all:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> all:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> all:ssh:gpu-vm|shared::/w/same
+renderedKeys: 29
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x runtime:env-1|api::/w/api-y local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/orca |orca::/w/Zeta |orca-ssh::/orca-ssh runtime:env-1|api::/api |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=api::/w/api-y@runtime:env-1 7=shared::/w/same@local 8=shared::/w/same@ssh:gpu-vm 9=orca::/orca
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=api::/w/api-y@runtime:env-1 7=shared::/w/same@local 8=shared::/w/same@ssh:gpu-vm 9=orca::/orca
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x api::/w/api-y shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext folder:fw-review folder:fw-notes folder:fw-remote
+-- collapsed: pinned lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+HEADER key=all label="All" count=17 tone="text-foreground" icon=List hostCounts={local:11 ssh:gpu-vm:4 runtime:env-1:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/Zeta,orca::/w/feat-c,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] runtime:env-1:[api::/w/api-y,api::/api]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,api::/w/api-y,lab::/w/gitlab-mr,shared::/w/same,shared::/w/same,orca::/orca,orca::/w/Zeta,orca-ssh::/orca-ssh,api::/api,orca::/w/feat-c,lab::/lab,ext::/ext]
+ITEM rowKey=all:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a lineageCollapsed=true hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=all:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION all: all:|orca::/w/feat-a all:|orca::/w/feat-b all:|orca::/w/feat-c all:|lab::/w/gitlab-mr all:ssh:gpu-vm|orca-ssh::/w/remote-x all:runtime:env-1|api::/w/api-y all:local|shared::/w/same all:ssh:gpu-vm|shared::/w/same all:|orca::/orca all:|orca::/w/Zeta all:|orca-ssh::/orca-ssh all:runtime:env-1|api::/api all:|lab::/lab all:|ext::/ext
+PREFERRED |orca::/w/feat-a -> all:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> all:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> all:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> all:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> all:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> all:ssh:gpu-vm|shared::/w/same
+renderedKeys: 20
+placeholders: -
+selectionOrder: |orca::/w/feat-a ssh:gpu-vm|orca-ssh::/w/remote-x runtime:env-1|api::/w/api-y local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/orca |orca::/w/Zeta |orca-ssh::/orca-ssh runtime:env-1|api::/api |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=api::/w/api-y@runtime:env-1 4=shared::/w/same@local 5=shared::/w/same@ssh:gpu-vm 6=orca::/orca 7=orca::/w/Zeta 8=orca-ssh::/orca-ssh 9=api::/api@runtime:env-1
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=api::/w/api-y@runtime:env-1 4=shared::/w/same@local 5=shared::/w/same@ssh:gpu-vm 6=orca::/orca 7=orca::/w/Zeta 8=orca-ssh::/orca-ssh 9=api::/api@runtime:env-1
+cmd ids unmounted: orca::/w/feat-a orca-ssh::/w/remote-x api::/w/api-y shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext folder:fw-review folder:fw-notes folder:fw-remote
+=== groupBy=repo pinnedInGroups=false ===
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=3 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+ITEM rowKey=project:p-orca:|orca::/orca depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca-ssh::/orca-ssh depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/Zeta depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+ITEM rowKey=project:repo:lab:|lab::/lab depth=0 groupDepth=2 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab path=project-group:pg-work>project-group:pg-nested>project:repo:lab
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=1 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+INBOX key=new-external-worktrees-inbox:ext repo=ext inbox=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+SECTION project:repo:empty: -
+renderedKeys: 33
+placeholders: empty
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh |orca::/w/Zeta |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/api runtime:env-1|api::/w/api-y local|shared::/w/same |ext::/ext
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=orca::/orca 8=orca-ssh::/orca-ssh 9=orca::/w/Zeta
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=orca::/orca 8=orca-ssh::/orca-ssh 9=orca::/w/Zeta
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x shared::/w/same orca::/orca orca-ssh::/orca-ssh orca::/w/Zeta lab::/lab folder:fw-review folder:fw-notes folder:fw-remote api::/api api::/w/api-y ext::/ext
+-- collapsed: pinned project:p-orca project:repo:lab project-group:pg-remote-folders project:repo:shared project:repo:ext lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=3 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=1 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION project:p-orca: project:p-orca:|orca::/orca project:p-orca:|orca-ssh::/orca-ssh project:p-orca:|orca::/w/Zeta
+SECTION project:repo:lab: project:repo:lab:|lab::/lab
+SECTION project:repo:shared: project:repo:shared:local|shared::/w/same
+SECTION project:repo:empty: -
+SECTION project:repo:ext: project:repo:ext:|ext::/ext
+renderedKeys: 18
+placeholders: empty
+selectionOrder: local|folder:fw-review local|folder:fw-notes runtime:env-1|api::/api runtime:env-1|api::/w/api-y
+cmd1-9 mounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1
+cmd1-9 unmounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1
+cmd ids unmounted: folder:fw-review folder:fw-notes api::/api api::/w/api-y
+=== groupBy=repo pinnedInGroups=true ===
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=8 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+ITEM rowKey=project:p-orca:|orca::/orca depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca-ssh::/orca-ssh depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/feat-a depth=0 groupDepth=1 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/feat-b depth=1 groupDepth=1 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-a
+ITEM rowKey=project:p-orca:|orca::/w/feat-c depth=2 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-b
+ITEM rowKey=project:p-orca:|lab::/w/gitlab-mr depth=1 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-a
+ITEM rowKey=project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/Zeta depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+ITEM rowKey=project:repo:lab:|lab::/lab depth=0 groupDepth=2 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab path=project-group:pg-work>project-group:pg-nested>project:repo:lab
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=2 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=project:repo:shared:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+INBOX key=new-external-worktrees-inbox:ext repo=ext inbox=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+SECTION project:repo:empty: -
+PREFERRED |orca::/w/feat-a -> project:p-orca:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> project:p-orca:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> project:p-orca:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> project:p-orca:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> project:repo:shared:ssh:gpu-vm|shared::/w/same
+renderedKeys: 39
+placeholders: empty
+selectionOrder: |orca::/orca |orca-ssh::/orca-ssh |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x |orca::/w/Zeta |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/api runtime:env-1|api::/w/api-y local|shared::/w/same ssh:gpu-vm|shared::/w/same |ext::/ext
+cmd1-9 mounted: 1=orca::/orca 2=orca-ssh::/orca-ssh 3=orca::/w/feat-a#lineage:orca::/w/feat-a 4=orca::/w/feat-b#lineage:orca::/w/feat-b 5=orca::/w/feat-c 6=lab::/w/gitlab-mr 7=orca-ssh::/w/remote-x@ssh:gpu-vm 8=orca::/w/Zeta 9=lab::/lab
+cmd1-9 unmounted: 1=orca::/orca 2=orca-ssh::/orca-ssh 3=orca::/w/feat-a 4=orca::/w/feat-b 5=orca::/w/feat-c 6=lab::/w/gitlab-mr 7=orca-ssh::/w/remote-x@ssh:gpu-vm 8=orca::/w/Zeta 9=lab::/lab
+cmd ids unmounted: orca::/orca orca-ssh::/orca-ssh orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x orca::/w/Zeta lab::/lab folder:fw-review folder:fw-notes folder:fw-remote api::/api api::/w/api-y shared::/w/same ext::/ext
+-- collapsed: pinned project:p-orca project:repo:lab project-group:pg-remote-folders project:repo:shared project:repo:ext lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=8 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=2 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION project:p-orca: project:p-orca:|orca::/orca project:p-orca:|orca-ssh::/orca-ssh project:p-orca:|orca::/w/feat-a project:p-orca:|orca::/w/feat-b project:p-orca:|orca::/w/feat-c project:p-orca:|lab::/w/gitlab-mr project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x project:p-orca:|orca::/w/Zeta
+SECTION project:repo:lab: project:repo:lab:|lab::/lab
+SECTION project:repo:shared: project:repo:shared:local|shared::/w/same project:repo:shared:ssh:gpu-vm|shared::/w/same
+SECTION project:repo:empty: -
+SECTION project:repo:ext: project:repo:ext:|ext::/ext
+PREFERRED |orca::/w/feat-a -> project:p-orca:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> project:p-orca:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> project:p-orca:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> project:p-orca:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> project:repo:shared:ssh:gpu-vm|shared::/w/same
+renderedKeys: 18
+placeholders: empty
+selectionOrder: local|folder:fw-review local|folder:fw-notes runtime:env-1|api::/api runtime:env-1|api::/w/api-y
+cmd1-9 mounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1
+cmd1-9 unmounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1
+cmd ids unmounted: folder:fw-review folder:fw-notes api::/api api::/w/api-y
+=== groupBy=workspace-status pinnedInGroups=false ===
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=workspace-status:in-progress label="In progress" count=8 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:5 ssh:gpu-vm:2 runtime:env-1:1} hostIds={local:[shared::/w/same,orca::/orca,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[shared::/w/same,orca::/orca,orca-ssh::/orca-ssh,api::/api,lab::/lab,ext::/ext]
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=1 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:1} hostIds={local:[]} ids=[]
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[api::/w/api-y,orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+SECTION workspace-status:in-review: -
+renderedKeys: 25
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same local|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |lab::/lab |ext::/ext local|folder:fw-notes ssh:gpu-vm|folder:fw-remote local|folder:fw-review runtime:env-1|api::/w/api-y |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=shared::/w/same@local 8=orca::/orca 9=orca-ssh::/orca-ssh
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=shared::/w/same@local 8=orca::/orca 9=orca-ssh::/orca-ssh
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x shared::/w/same orca::/orca orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext folder:fw-notes folder:fw-remote folder:fw-review api::/w/api-y orca::/w/Zeta
+-- collapsed: pinned workspace-status:in-review lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+HEADER key=workspace-status:in-progress label="In progress" count=8 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:5 ssh:gpu-vm:2 runtime:env-1:1} hostIds={local:[shared::/w/same,orca::/orca,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[shared::/w/same,orca::/orca,orca-ssh::/orca-ssh,api::/api,lab::/lab,ext::/ext]
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=1 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:1} hostIds={local:[]} ids=[]
+HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[api::/w/api-y,orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION workspace-status:in-review: -
+renderedKeys: 17
+placeholders: -
+selectionOrder: local|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |lab::/lab |ext::/ext local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/w/api-y |orca::/w/Zeta
+cmd1-9 mounted: 1=shared::/w/same@local 2=orca::/orca 3=orca-ssh::/orca-ssh 4=api::/api@runtime:env-1 5=lab::/lab 6=ext::/ext 7=folder:fw-notes@local 8=folder:fw-remote@ssh:gpu-vm 9=api::/w/api-y@runtime:env-1
+cmd1-9 unmounted: 1=shared::/w/same@local 2=orca::/orca 3=orca-ssh::/orca-ssh 4=api::/api@runtime:env-1 5=lab::/lab 6=ext::/ext 7=folder:fw-notes@local 8=folder:fw-remote@ssh:gpu-vm 9=api::/w/api-y@runtime:env-1
+cmd ids unmounted: shared::/w/same orca::/orca orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext folder:fw-notes folder:fw-remote api::/w/api-y orca::/w/Zeta
+=== groupBy=workspace-status pinnedInGroups=true ===
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=workspace-status:in-progress label="In progress" count=13 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:8 ssh:gpu-vm:4 runtime:env-1:1} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/feat-c,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,lab::/w/gitlab-mr,shared::/w/same,shared::/w/same,orca::/orca,orca-ssh::/orca-ssh,api::/api,orca::/w/feat-c,lab::/lab,ext::/ext]
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-a depth=0 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab parent=workspace-status:in-progress:|orca::/w/feat-a
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=2 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:2} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+ITEM rowKey=workspace-status:in-review:|orca::/w/feat-b depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[api::/w/api-y,orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+PREFERRED |orca::/w/feat-a -> workspace-status:in-progress:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> workspace-status:in-review:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> workspace-status:in-progress:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> workspace-status:in-progress:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> workspace-status:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 31
+placeholders: -
+selectionOrder: |orca::/w/feat-a |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |orca::/w/feat-c |lab::/lab |ext::/ext local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/feat-b local|folder:fw-review runtime:env-1|api::/w/api-y |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca-ssh::/w/remote-x@ssh:gpu-vm 4=shared::/w/same@local 5=shared::/w/same@ssh:gpu-vm 6=orca::/orca 7=orca-ssh::/orca-ssh 8=api::/api@runtime:env-1 9=orca::/w/feat-c
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca-ssh::/w/remote-x@ssh:gpu-vm 4=shared::/w/same@local 5=shared::/w/same@ssh:gpu-vm 6=orca::/orca 7=orca-ssh::/orca-ssh 8=api::/api@runtime:env-1 9=orca::/w/feat-c
+cmd ids unmounted: orca::/w/feat-a lab::/w/gitlab-mr orca-ssh::/w/remote-x shared::/w/same orca::/orca orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext folder:fw-notes folder:fw-remote orca::/w/feat-b folder:fw-review api::/w/api-y orca::/w/Zeta
+-- collapsed: pinned workspace-status:in-review lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+HEADER key=workspace-status:in-progress label="In progress" count=13 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:8 ssh:gpu-vm:4 runtime:env-1:1} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/feat-c,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,lab::/w/gitlab-mr,shared::/w/same,shared::/w/same,orca::/orca,orca-ssh::/orca-ssh,api::/api,orca::/w/feat-c,lab::/lab,ext::/ext]
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-a depth=0 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-a lineageCollapsed=true hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=2 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:2} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[api::/w/api-y,orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION workspace-status:in-progress: workspace-status:in-progress:|orca::/w/feat-a workspace-status:in-progress:|lab::/w/gitlab-mr workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x workspace-status:in-progress:local|shared::/w/same workspace-status:in-progress:ssh:gpu-vm|shared::/w/same workspace-status:in-progress:|orca::/orca workspace-status:in-progress:|orca-ssh::/orca-ssh workspace-status:in-progress:runtime:env-1|api::/api workspace-status:in-progress:|orca::/w/feat-c workspace-status:in-progress:|lab::/lab workspace-status:in-progress:|ext::/ext
+SECTION workspace-status:in-review: workspace-status:in-review:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-a -> workspace-status:in-progress:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> workspace-status:in-review:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> workspace-status:in-progress:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> workspace-status:in-progress:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> workspace-status:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 21
+placeholders: -
+selectionOrder: |orca::/w/feat-a ssh:gpu-vm|orca-ssh::/w/remote-x local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |orca::/w/feat-c |lab::/lab |ext::/ext local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/w/api-y |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=shared::/w/same@local 4=shared::/w/same@ssh:gpu-vm 5=orca::/orca 6=orca-ssh::/orca-ssh 7=api::/api@runtime:env-1 8=orca::/w/feat-c 9=lab::/lab
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=shared::/w/same@local 4=shared::/w/same@ssh:gpu-vm 5=orca::/orca 6=orca-ssh::/orca-ssh 7=api::/api@runtime:env-1 8=orca::/w/feat-c 9=lab::/lab
+cmd ids unmounted: orca::/w/feat-a orca-ssh::/w/remote-x shared::/w/same orca::/orca orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext folder:fw-notes folder:fw-remote api::/w/api-y orca::/w/Zeta
+=== groupBy=pr-status pinnedInGroups=false ===
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=pr:in-review label="In review" count=1 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={runtime:env-1:1} hostIds={runtime:env-1:[api::/w/api-y]} ids=[api::/w/api-y]
+ITEM rowKey=pr:in-review:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=pr:in-progress label="In progress" count=9 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={local:6 ssh:gpu-vm:2 runtime:env-1:1} hostIds={local:[shared::/w/same,orca::/orca,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[shared::/w/same,orca::/orca,orca-ssh::/orca-ssh,api::/api,lab::/lab,ext::/ext]
+ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=pr:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=pr:closed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+renderedKeys: 25
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same runtime:env-1|api::/w/api-y local|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=api::/w/api-y@runtime:env-1 8=shared::/w/same@local 9=orca::/orca
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=api::/w/api-y@runtime:env-1 8=shared::/w/same@local 9=orca::/orca
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x shared::/w/same api::/w/api-y orca::/orca orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext folder:fw-review folder:fw-notes folder:fw-remote orca::/w/Zeta
+-- collapsed: pinned pr:in-progress lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+HEADER key=pr:in-review label="In review" count=1 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={runtime:env-1:1} hostIds={runtime:env-1:[api::/w/api-y]} ids=[api::/w/api-y]
+ITEM rowKey=pr:in-review:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=pr:in-progress label="In progress" count=9 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={local:6 ssh:gpu-vm:2 runtime:env-1:1} hostIds={local:[shared::/w/same,orca::/orca,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[shared::/w/same,orca::/orca,orca-ssh::/orca-ssh,api::/api,lab::/lab,ext::/ext]
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=pr:closed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION pr:in-progress: pr:in-progress:local|shared::/w/same pr:in-progress:|orca::/orca pr:in-progress:|orca-ssh::/orca-ssh pr:in-progress:runtime:env-1|api::/api pr:in-progress:|lab::/lab pr:in-progress:|ext::/ext
+renderedKeys: 7
+placeholders: -
+selectionOrder: runtime:env-1|api::/w/api-y |orca::/w/Zeta
+cmd1-9 mounted: 1=api::/w/api-y@runtime:env-1 2=orca::/w/Zeta
+cmd1-9 unmounted: 1=api::/w/api-y@runtime:env-1 2=orca::/w/Zeta
+cmd ids unmounted: api::/w/api-y orca::/w/Zeta
+=== groupBy=pr-status pinnedInGroups=true ===
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=pr:done label="Done" count=1 tone="text-workspace-status-done" icon=ConductorDoneIcon hostCounts={local:1} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+ITEM rowKey=pr:done:|orca::/w/feat-b depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+HEADER key=pr:in-review label="In review" count=2 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={local:1 runtime:env-1:1} hostIds={local:[orca::/w/feat-a] runtime:env-1:[api::/w/api-y]} ids=[orca::/w/feat-a,api::/w/api-y]
+ITEM rowKey=pr:in-review:|orca::/w/feat-a depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-review:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=pr:in-progress label="In progress" count=13 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={ssh:gpu-vm:4 local:8 runtime:env-1:1} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] local:[lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/feat-c,lab::/lab,ext::/ext] runtime:env-1:[api::/api]} ids=[orca-ssh::/w/remote-x,lab::/w/gitlab-mr,shared::/w/same,shared::/w/same,orca::/orca,orca-ssh::/orca-ssh,api::/api,orca::/w/feat-c,lab::/lab,ext::/ext]
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|lab::/w/gitlab-mr depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=pr:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=pr:closed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+PREFERRED |orca::/w/feat-a -> pr:in-review:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> pr:done:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> pr:in-progress:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> pr:in-progress:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> pr:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 32
+placeholders: -
+selectionOrder: |orca::/w/feat-b |orca::/w/feat-a runtime:env-1|api::/w/api-y ssh:gpu-vm|orca-ssh::/w/remote-x |lab::/w/gitlab-mr local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |orca::/w/feat-c |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-b#lineage:orca::/w/feat-b 2=orca::/w/feat-a#lineage:orca::/w/feat-a 3=api::/w/api-y@runtime:env-1 4=orca-ssh::/w/remote-x@ssh:gpu-vm 5=lab::/w/gitlab-mr 6=shared::/w/same@local 7=shared::/w/same@ssh:gpu-vm 8=orca::/orca 9=orca-ssh::/orca-ssh
+cmd1-9 unmounted: 1=orca::/w/feat-b 2=orca::/w/feat-a 3=api::/w/api-y@runtime:env-1 4=orca-ssh::/w/remote-x@ssh:gpu-vm 5=lab::/w/gitlab-mr 6=shared::/w/same@local 7=shared::/w/same@ssh:gpu-vm 8=orca::/orca 9=orca-ssh::/orca-ssh
+cmd ids unmounted: orca::/w/feat-b orca::/w/feat-a api::/w/api-y orca-ssh::/w/remote-x lab::/w/gitlab-mr shared::/w/same orca::/orca orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext folder:fw-review folder:fw-notes folder:fw-remote orca::/w/Zeta
+-- collapsed: pinned pr:in-review pr:closed lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca-ssh::/w/remote-x orca::/w/feat-b api::/w/api-y lab::/w/gitlab-mr shared::/w/same shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]
+HEADER key=pr:done label="Done" count=1 tone="text-workspace-status-done" icon=ConductorDoneIcon hostCounts={local:1} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+ITEM rowKey=pr:done:|orca::/w/feat-b depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+HEADER key=pr:in-review label="In review" count=2 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={local:1 runtime:env-1:1} hostIds={local:[orca::/w/feat-a] runtime:env-1:[api::/w/api-y]} ids=[orca::/w/feat-a,api::/w/api-y]
+HEADER key=pr:in-progress label="In progress" count=13 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={ssh:gpu-vm:4 local:8 runtime:env-1:1} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] local:[lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/feat-c,lab::/lab,ext::/ext] runtime:env-1:[api::/api]} ids=[orca-ssh::/w/remote-x,lab::/w/gitlab-mr,shared::/w/same,shared::/w/same,orca::/orca,orca-ssh::/orca-ssh,api::/api,orca::/w/feat-c,lab::/lab,ext::/ext]
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|lab::/w/gitlab-mr depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=pr:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION pr:in-review: pr:in-review:|orca::/w/feat-a pr:in-review:runtime:env-1|api::/w/api-y
+SECTION pr:closed: pr:closed:|orca::/w/Zeta
+PREFERRED |orca::/w/feat-a -> pr:in-review:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> pr:done:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> pr:in-progress:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> pr:in-progress:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> pr:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 23
+placeholders: -
+selectionOrder: |orca::/w/feat-b ssh:gpu-vm|orca-ssh::/w/remote-x |lab::/w/gitlab-mr local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |orca::/w/feat-c |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-b 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=lab::/w/gitlab-mr 4=shared::/w/same@local 5=shared::/w/same@ssh:gpu-vm 6=orca::/orca 7=orca-ssh::/orca-ssh 8=api::/api@runtime:env-1 9=orca::/w/feat-c
+cmd1-9 unmounted: 1=orca::/w/feat-b 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=lab::/w/gitlab-mr 4=shared::/w/same@local 5=shared::/w/same@ssh:gpu-vm 6=orca::/orca 7=orca-ssh::/orca-ssh 8=api::/api@runtime:env-1 9=orca::/w/feat-c
+cmd ids unmounted: orca::/w/feat-b orca-ssh::/w/remote-x lab::/w/gitlab-mr shared::/w/same orca::/orca orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext folder:fw-review folder:fw-notes folder:fw-remote
diff --git a/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-repo-filter.txt b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-repo-filter.txt
new file mode 100644
index 000000000000..c39418781a35
--- /dev/null
+++ b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-repo-filter.txt
@@ -0,0 +1,410 @@
+=== groupBy=none pinnedInGroups=false ===
+visible: orca::/w/feat-a orca::/w/feat-b lab::/w/gitlab-mr orca::/orca orca::/w/Zeta orca::/w/feat-c lab::/lab
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=4 tone="text-foreground" icon=Pin hostCounts={local:4} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]} ids=[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 lastChild=true children=2 lineageKey=lineage:orca::/w/feat-a placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+HEADER key=all label="All" count=6 tone="text-foreground" icon=List hostCounts={local:5 ssh:gpu-vm:1} hostIds={local:[orca::/orca,orca::/w/Zeta,lab::/lab] ssh:gpu-vm:[]} ids=[orca::/orca,orca::/w/Zeta,lab::/lab]
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 children=0 placement=natural owning=project:p-orca
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:repo:lab
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+renderedKeys: 16
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr |orca::/orca |orca::/w/Zeta |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca::/orca 6=orca::/w/Zeta 7=lab::/lab 8=folder:fw-review@local 9=folder:fw-notes@local
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca::/orca 6=orca::/w/Zeta 7=lab::/lab 8=folder:fw-review@local 9=folder:fw-notes@local
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca::/orca orca::/w/Zeta lab::/lab folder:fw-review folder:fw-notes folder:fw-remote
+-- collapsed: pinned lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca::/w/feat-b lab::/w/gitlab-mr orca::/orca orca::/w/Zeta orca::/w/feat-c lab::/lab
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=4 tone="text-foreground" icon=Pin hostCounts={local:4} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]} ids=[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]
+HEADER key=all label="All" count=6 tone="text-foreground" icon=List hostCounts={local:5 ssh:gpu-vm:1} hostIds={local:[orca::/orca,orca::/w/Zeta,lab::/lab] ssh:gpu-vm:[]} ids=[orca::/orca,orca::/w/Zeta,lab::/lab]
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 children=0 placement=natural owning=project:p-orca
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:repo:lab
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr
+renderedKeys: 12
+placeholders: -
+selectionOrder: |orca::/orca |orca::/w/Zeta |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/orca 2=orca::/w/Zeta 3=lab::/lab 4=folder:fw-review@local 5=folder:fw-notes@local 6=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca::/orca 2=orca::/w/Zeta 3=lab::/lab 4=folder:fw-review@local 5=folder:fw-notes@local 6=folder:fw-remote@ssh:gpu-vm
+cmd ids unmounted: orca::/orca orca::/w/Zeta lab::/lab folder:fw-review folder:fw-notes folder:fw-remote
+=== groupBy=none pinnedInGroups=true ===
+visible: orca::/w/feat-a orca::/w/feat-b lab::/w/gitlab-mr orca::/orca orca::/w/Zeta orca::/w/feat-c lab::/lab
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=4 tone="text-foreground" icon=Pin hostCounts={local:4} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]} ids=[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 lastChild=true children=2 lineageKey=lineage:orca::/w/feat-a placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+HEADER key=all label="All" count=10 tone="text-foreground" icon=List hostCounts={local:9 ssh:gpu-vm:1} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/orca,orca::/w/Zeta,orca::/w/feat-c,lab::/lab] ssh:gpu-vm:[]} ids=[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/orca,orca::/w/Zeta,orca::/w/feat-c,lab::/lab]
+ITEM rowKey=all:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b placement=natural owning=project:p-orca parent=all:|orca::/w/feat-a
+ITEM rowKey=all:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 placement=natural owning=project:p-orca parent=all:|orca::/w/feat-b
+ITEM rowKey=all:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 showProject=true placement=natural owning=project:repo:lab parent=all:|orca::/w/feat-a
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 children=0 placement=natural owning=project:p-orca
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:repo:lab
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+PREFERRED |orca::/w/feat-a -> all:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> all:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> all:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> all:|lab::/w/gitlab-mr
+renderedKeys: 20
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr |orca::/orca |orca::/w/Zeta |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca::/orca 6=orca::/w/Zeta 7=lab::/lab 8=folder:fw-review@local 9=folder:fw-notes@local
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca::/orca 6=orca::/w/Zeta 7=lab::/lab 8=folder:fw-review@local 9=folder:fw-notes@local
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca::/orca orca::/w/Zeta lab::/lab folder:fw-review folder:fw-notes folder:fw-remote
+-- collapsed: pinned lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca::/w/feat-b lab::/w/gitlab-mr orca::/orca orca::/w/Zeta orca::/w/feat-c lab::/lab
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=4 tone="text-foreground" icon=Pin hostCounts={local:4} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]} ids=[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]
+HEADER key=all label="All" count=10 tone="text-foreground" icon=List hostCounts={local:9 ssh:gpu-vm:1} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/orca,orca::/w/Zeta,orca::/w/feat-c,lab::/lab] ssh:gpu-vm:[]} ids=[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/orca,orca::/w/Zeta,orca::/w/feat-c,lab::/lab]
+ITEM rowKey=all:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a lineageCollapsed=true placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 children=0 placement=natural owning=project:p-orca
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:repo:lab
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr
+SECTION all: all:|orca::/w/feat-a all:|orca::/w/feat-b all:|orca::/w/feat-c all:|lab::/w/gitlab-mr all:|orca::/orca all:|orca::/w/Zeta all:|lab::/lab
+PREFERRED |orca::/w/feat-a -> all:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> all:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> all:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> all:|lab::/w/gitlab-mr
+renderedKeys: 13
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/orca |orca::/w/Zeta |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/orca 3=orca::/w/Zeta 4=lab::/lab 5=folder:fw-review@local 6=folder:fw-notes@local 7=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/orca 3=orca::/w/Zeta 4=lab::/lab 5=folder:fw-review@local 6=folder:fw-notes@local 7=folder:fw-remote@ssh:gpu-vm
+cmd ids unmounted: orca::/w/feat-a orca::/orca orca::/w/Zeta lab::/lab folder:fw-review folder:fw-notes folder:fw-remote
+=== groupBy=repo pinnedInGroups=false ===
+visible: orca::/w/feat-a orca::/w/feat-b lab::/w/gitlab-mr orca::/orca orca::/w/Zeta orca::/w/feat-c lab::/lab
+HEADER key=pinned label="Pinned" count=4 tone="text-foreground" icon=Pin hostCounts={local:4} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]} ids=[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 lastChild=true children=2 lineageKey=lineage:orca::/w/feat-a placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=2 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+ITEM rowKey=project:p-orca:|orca::/orca depth=0 groupDepth=1 children=0 placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/Zeta depth=0 groupDepth=1 lastChild=true children=0 placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+ITEM rowKey=project:repo:lab:|lab::/lab depth=0 groupDepth=2 lastChild=true children=0 placement=natural owning=project:repo:lab path=project-group:pg-work>project-group:pg-nested>project:repo:lab
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:repo:api label="api" count=0 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+SECTION project:repo:api: -
+renderedKeys: 22
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr |orca::/orca |orca::/w/Zeta |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca::/orca 6=orca::/w/Zeta 7=lab::/lab 8=folder:fw-review@local 9=folder:fw-notes@local
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca::/orca 6=orca::/w/Zeta 7=lab::/lab 8=folder:fw-review@local 9=folder:fw-notes@local
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca::/orca orca::/w/Zeta lab::/lab folder:fw-review folder:fw-notes folder:fw-remote
+-- collapsed: pinned project:p-orca project:repo:lab project-group:pg-remote-folders lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca::/w/feat-b lab::/w/gitlab-mr orca::/orca orca::/w/Zeta orca::/w/feat-c lab::/lab
+HEADER key=pinned label="Pinned" count=4 tone="text-foreground" icon=Pin hostCounts={local:4} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]} ids=[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=2 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+HEADER key=project:repo:api label="api" count=0 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr
+SECTION project:p-orca: project:p-orca:|orca::/orca project:p-orca:|orca::/w/Zeta
+SECTION project:repo:api: -
+SECTION project:repo:lab: project:repo:lab:|lab::/lab
+renderedKeys: 13
+placeholders: -
+selectionOrder: local|folder:fw-review local|folder:fw-notes
+cmd1-9 mounted: 1=folder:fw-review@local 2=folder:fw-notes@local
+cmd1-9 unmounted: 1=folder:fw-review@local 2=folder:fw-notes@local
+cmd ids unmounted: folder:fw-review folder:fw-notes
+=== groupBy=repo pinnedInGroups=true ===
+visible: orca::/w/feat-a orca::/w/feat-b lab::/w/gitlab-mr orca::/orca orca::/w/Zeta orca::/w/feat-c lab::/lab
+HEADER key=pinned label="Pinned" count=4 tone="text-foreground" icon=Pin hostCounts={local:4} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]} ids=[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 lastChild=true children=2 lineageKey=lineage:orca::/w/feat-a placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=6 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+ITEM rowKey=project:p-orca:|orca::/orca depth=0 groupDepth=1 children=0 placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/feat-a depth=0 groupDepth=1 children=2 lineageKey=lineage:orca::/w/feat-a placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/feat-b depth=1 groupDepth=1 children=1 lineageKey=lineage:orca::/w/feat-b placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-a
+ITEM rowKey=project:p-orca:|orca::/w/feat-c depth=2 groupDepth=1 lastChild=true children=0 placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-b
+ITEM rowKey=project:p-orca:|lab::/w/gitlab-mr depth=1 groupDepth=1 lastChild=true children=0 showProject=true placement=natural owning=project:repo:lab path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-a
+ITEM rowKey=project:p-orca:|orca::/w/Zeta depth=0 groupDepth=1 lastChild=true children=0 placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+ITEM rowKey=project:repo:lab:|lab::/lab depth=0 groupDepth=2 lastChild=true children=0 placement=natural owning=project:repo:lab path=project-group:pg-work>project-group:pg-nested>project:repo:lab
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:repo:api label="api" count=0 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+SECTION project:repo:api: -
+PREFERRED |orca::/w/feat-a -> project:p-orca:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> project:p-orca:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> project:p-orca:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> project:p-orca:|lab::/w/gitlab-mr
+renderedKeys: 26
+placeholders: -
+selectionOrder: |orca::/orca |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr |orca::/w/Zeta |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/orca 2=orca::/w/feat-a#lineage:orca::/w/feat-a 3=orca::/w/feat-b#lineage:orca::/w/feat-b 4=orca::/w/feat-c 5=lab::/w/gitlab-mr 6=orca::/w/Zeta 7=lab::/lab 8=folder:fw-review@local 9=folder:fw-notes@local
+cmd1-9 unmounted: 1=orca::/orca 2=orca::/w/feat-a 3=orca::/w/feat-b 4=orca::/w/feat-c 5=lab::/w/gitlab-mr 6=orca::/w/Zeta 7=lab::/lab 8=folder:fw-review@local 9=folder:fw-notes@local
+cmd ids unmounted: orca::/orca orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca::/w/Zeta lab::/lab folder:fw-review folder:fw-notes folder:fw-remote
+-- collapsed: pinned project:p-orca project:repo:lab project-group:pg-remote-folders lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca::/w/feat-b lab::/w/gitlab-mr orca::/orca orca::/w/Zeta orca::/w/feat-c lab::/lab
+HEADER key=pinned label="Pinned" count=4 tone="text-foreground" icon=Pin hostCounts={local:4} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]} ids=[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=6 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+HEADER key=project:repo:api label="api" count=0 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr
+SECTION project:p-orca: project:p-orca:|orca::/orca project:p-orca:|orca::/w/feat-a project:p-orca:|orca::/w/feat-b project:p-orca:|orca::/w/feat-c project:p-orca:|lab::/w/gitlab-mr project:p-orca:|orca::/w/Zeta
+SECTION project:repo:api: -
+SECTION project:repo:lab: project:repo:lab:|lab::/lab
+PREFERRED |orca::/w/feat-a -> project:p-orca:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> project:p-orca:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> project:p-orca:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> project:p-orca:|lab::/w/gitlab-mr
+renderedKeys: 13
+placeholders: -
+selectionOrder: local|folder:fw-review local|folder:fw-notes
+cmd1-9 mounted: 1=folder:fw-review@local 2=folder:fw-notes@local
+cmd1-9 unmounted: 1=folder:fw-review@local 2=folder:fw-notes@local
+cmd ids unmounted: folder:fw-review folder:fw-notes
+=== groupBy=workspace-status pinnedInGroups=false ===
+visible: orca::/w/feat-a orca::/w/feat-b lab::/w/gitlab-mr orca::/orca orca::/w/Zeta orca::/w/feat-c lab::/lab
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=4 tone="text-foreground" icon=Pin hostCounts={local:4} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]} ids=[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 lastChild=true children=2 lineageKey=lineage:orca::/w/feat-a placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+HEADER key=workspace-status:in-progress label="In progress" count=4 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:3 ssh:gpu-vm:1} hostIds={local:[orca::/orca,lab::/lab] ssh:gpu-vm:[]} ids=[orca::/orca,lab::/lab]
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:repo:lab
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=1 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:1} hostIds={local:[]} ids=[]
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+HEADER key=workspace-status:completed label="Done" count=1 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:p-orca
+SECTION workspace-status:in-review: -
+renderedKeys: 18
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr |orca::/orca |lab::/lab local|folder:fw-notes ssh:gpu-vm|folder:fw-remote local|folder:fw-review |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca::/orca 6=lab::/lab 7=folder:fw-notes@local 8=folder:fw-remote@ssh:gpu-vm 9=folder:fw-review@local
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca::/orca 6=lab::/lab 7=folder:fw-notes@local 8=folder:fw-remote@ssh:gpu-vm 9=folder:fw-review@local
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca::/orca lab::/lab folder:fw-notes folder:fw-remote folder:fw-review orca::/w/Zeta
+-- collapsed: pinned workspace-status:in-review lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca::/w/feat-b lab::/w/gitlab-mr orca::/orca orca::/w/Zeta orca::/w/feat-c lab::/lab
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=4 tone="text-foreground" icon=Pin hostCounts={local:4} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]} ids=[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]
+HEADER key=workspace-status:in-progress label="In progress" count=4 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:3 ssh:gpu-vm:1} hostIds={local:[orca::/orca,lab::/lab] ssh:gpu-vm:[]} ids=[orca::/orca,lab::/lab]
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:repo:lab
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=1 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:1} hostIds={local:[]} ids=[]
+HEADER key=workspace-status:completed label="Done" count=1 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:p-orca
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr
+SECTION workspace-status:in-review: -
+renderedKeys: 12
+placeholders: -
+selectionOrder: |orca::/orca |lab::/lab local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/orca 2=lab::/lab 3=folder:fw-notes@local 4=folder:fw-remote@ssh:gpu-vm 5=orca::/w/Zeta
+cmd1-9 unmounted: 1=orca::/orca 2=lab::/lab 3=folder:fw-notes@local 4=folder:fw-remote@ssh:gpu-vm 5=orca::/w/Zeta
+cmd ids unmounted: orca::/orca lab::/lab folder:fw-notes folder:fw-remote orca::/w/Zeta
+=== groupBy=workspace-status pinnedInGroups=true ===
+visible: orca::/w/feat-a orca::/w/feat-b lab::/w/gitlab-mr orca::/orca orca::/w/Zeta orca::/w/feat-c lab::/lab
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=4 tone="text-foreground" icon=Pin hostCounts={local:4} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]} ids=[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 lastChild=true children=2 lineageKey=lineage:orca::/w/feat-a placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+HEADER key=workspace-status:in-progress label="In progress" count=7 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:6 ssh:gpu-vm:1} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/orca,orca::/w/feat-c,lab::/lab] ssh:gpu-vm:[]} ids=[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/orca,orca::/w/feat-c,lab::/lab]
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-a depth=0 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-a placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 showProject=true placement=natural owning=project:repo:lab parent=workspace-status:in-progress:|orca::/w/feat-a
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:repo:lab
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=2 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:2} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+ITEM rowKey=workspace-status:in-review:|orca::/w/feat-b depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+HEADER key=workspace-status:completed label="Done" count=1 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:p-orca
+PREFERRED |orca::/w/feat-a -> workspace-status:in-progress:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> workspace-status:in-review:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> workspace-status:in-progress:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> workspace-status:in-progress:|lab::/w/gitlab-mr
+renderedKeys: 22
+placeholders: -
+selectionOrder: |orca::/w/feat-a |lab::/w/gitlab-mr |orca::/orca |orca::/w/feat-c |lab::/lab local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/feat-b local|folder:fw-review |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca::/orca 4=orca::/w/feat-c 5=lab::/lab 6=folder:fw-notes@local 7=folder:fw-remote@ssh:gpu-vm 8=orca::/w/feat-b#lineage:orca::/w/feat-b 9=folder:fw-review@local
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca::/orca 4=orca::/w/feat-c 5=lab::/lab 6=folder:fw-notes@local 7=folder:fw-remote@ssh:gpu-vm 8=orca::/w/feat-b 9=folder:fw-review@local
+cmd ids unmounted: orca::/w/feat-a lab::/w/gitlab-mr orca::/orca orca::/w/feat-c lab::/lab folder:fw-notes folder:fw-remote orca::/w/feat-b folder:fw-review orca::/w/Zeta
+-- collapsed: pinned workspace-status:in-review lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca::/w/feat-b lab::/w/gitlab-mr orca::/orca orca::/w/Zeta orca::/w/feat-c lab::/lab
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=4 tone="text-foreground" icon=Pin hostCounts={local:4} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]} ids=[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]
+HEADER key=workspace-status:in-progress label="In progress" count=7 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:6 ssh:gpu-vm:1} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/orca,orca::/w/feat-c,lab::/lab] ssh:gpu-vm:[]} ids=[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/orca,orca::/w/feat-c,lab::/lab]
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-a depth=0 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-a lineageCollapsed=true placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:repo:lab
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=2 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:2} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+HEADER key=workspace-status:completed label="Done" count=1 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:p-orca
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr
+SECTION workspace-status:in-progress: workspace-status:in-progress:|orca::/w/feat-a workspace-status:in-progress:|lab::/w/gitlab-mr workspace-status:in-progress:|orca::/orca workspace-status:in-progress:|orca::/w/feat-c workspace-status:in-progress:|lab::/lab
+SECTION workspace-status:in-review: workspace-status:in-review:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-a -> workspace-status:in-progress:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> workspace-status:in-review:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> workspace-status:in-progress:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> workspace-status:in-progress:|lab::/w/gitlab-mr
+renderedKeys: 14
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/orca |orca::/w/feat-c |lab::/lab local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/orca 3=orca::/w/feat-c 4=lab::/lab 5=folder:fw-notes@local 6=folder:fw-remote@ssh:gpu-vm 7=orca::/w/Zeta
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/orca 3=orca::/w/feat-c 4=lab::/lab 5=folder:fw-notes@local 6=folder:fw-remote@ssh:gpu-vm 7=orca::/w/Zeta
+cmd ids unmounted: orca::/w/feat-a orca::/orca orca::/w/feat-c lab::/lab folder:fw-notes folder:fw-remote orca::/w/Zeta
+=== groupBy=pr-status pinnedInGroups=false ===
+visible: orca::/w/feat-a orca::/w/feat-b lab::/w/gitlab-mr orca::/orca orca::/w/Zeta orca::/w/feat-c lab::/lab
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=4 tone="text-foreground" icon=Pin hostCounts={local:4} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]} ids=[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 lastChild=true children=2 lineageKey=lineage:orca::/w/feat-a placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+HEADER key=pr:in-progress label="In progress" count=5 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={local:4 ssh:gpu-vm:1} hostIds={local:[orca::/orca,lab::/lab] ssh:gpu-vm:[]} ids=[orca::/orca,lab::/lab]
+ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|lab::/lab depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:repo:lab
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=pr:closed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:p-orca
+renderedKeys: 17
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr |orca::/orca |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca::/orca 6=lab::/lab 7=folder:fw-review@local 8=folder:fw-notes@local 9=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca::/orca 6=lab::/lab 7=folder:fw-review@local 8=folder:fw-notes@local 9=folder:fw-remote@ssh:gpu-vm
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca::/orca lab::/lab folder:fw-review folder:fw-notes folder:fw-remote orca::/w/Zeta
+-- collapsed: pinned pr:closed lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca::/w/feat-b lab::/w/gitlab-mr orca::/orca orca::/w/Zeta orca::/w/feat-c lab::/lab
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=4 tone="text-foreground" icon=Pin hostCounts={local:4} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]} ids=[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]
+HEADER key=pr:in-progress label="In progress" count=5 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={local:4 ssh:gpu-vm:1} hostIds={local:[orca::/orca,lab::/lab] ssh:gpu-vm:[]} ids=[orca::/orca,lab::/lab]
+ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|lab::/lab depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:repo:lab
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr
+SECTION pr:closed: pr:closed:|orca::/w/Zeta
+renderedKeys: 12
+placeholders: -
+selectionOrder: |orca::/orca |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/orca 2=lab::/lab 3=folder:fw-review@local 4=folder:fw-notes@local 5=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca::/orca 2=lab::/lab 3=folder:fw-review@local 4=folder:fw-notes@local 5=folder:fw-remote@ssh:gpu-vm
+cmd ids unmounted: orca::/orca lab::/lab folder:fw-review folder:fw-notes folder:fw-remote
+=== groupBy=pr-status pinnedInGroups=true ===
+visible: orca::/w/feat-a orca::/w/feat-b lab::/w/gitlab-mr orca::/orca orca::/w/Zeta orca::/w/feat-c lab::/lab
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=4 tone="text-foreground" icon=Pin hostCounts={local:4} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]} ids=[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 lastChild=true children=2 lineageKey=lineage:orca::/w/feat-a placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+HEADER key=pr:done label="Done" count=1 tone="text-workspace-status-done" icon=ConductorDoneIcon hostCounts={local:1} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+ITEM rowKey=pr:done:|orca::/w/feat-b depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:p-orca
+HEADER key=pr:in-review label="In review" count=1 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={local:1} hostIds={local:[orca::/w/feat-a]} ids=[orca::/w/feat-a]
+ITEM rowKey=pr:in-review:|orca::/w/feat-a depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:p-orca
+HEADER key=pr:in-progress label="In progress" count=7 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={local:6 ssh:gpu-vm:1} hostIds={local:[lab::/w/gitlab-mr,orca::/orca,orca::/w/feat-c,lab::/lab] ssh:gpu-vm:[]} ids=[lab::/w/gitlab-mr,orca::/orca,orca::/w/feat-c,lab::/lab]
+ITEM rowKey=pr:in-progress:|lab::/w/gitlab-mr depth=0 groupDepth=0 children=0 placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|lab::/lab depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:repo:lab
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=pr:closed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:p-orca
+PREFERRED |orca::/w/feat-a -> pr:in-review:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> pr:done:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> pr:in-progress:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> pr:in-progress:|lab::/w/gitlab-mr
+renderedKeys: 23
+placeholders: -
+selectionOrder: |orca::/w/feat-b |orca::/w/feat-a |lab::/w/gitlab-mr |orca::/orca |orca::/w/feat-c |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-b#lineage:orca::/w/feat-b 2=orca::/w/feat-a#lineage:orca::/w/feat-a 3=lab::/w/gitlab-mr 4=orca::/orca 5=orca::/w/feat-c 6=lab::/lab 7=folder:fw-review@local 8=folder:fw-notes@local 9=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca::/w/feat-b 2=orca::/w/feat-a 3=lab::/w/gitlab-mr 4=orca::/orca 5=orca::/w/feat-c 6=lab::/lab 7=folder:fw-review@local 8=folder:fw-notes@local 9=folder:fw-remote@ssh:gpu-vm
+cmd ids unmounted: orca::/w/feat-b orca::/w/feat-a lab::/w/gitlab-mr orca::/orca orca::/w/feat-c lab::/lab folder:fw-review folder:fw-notes folder:fw-remote orca::/w/Zeta
+-- collapsed: pinned pr:in-review pr:closed lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a orca::/w/feat-b lab::/w/gitlab-mr orca::/orca orca::/w/Zeta orca::/w/feat-c lab::/lab
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=4 tone="text-foreground" icon=Pin hostCounts={local:4} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]} ids=[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c]
+HEADER key=pr:done label="Done" count=1 tone="text-workspace-status-done" icon=ConductorDoneIcon hostCounts={local:1} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+ITEM rowKey=pr:done:|orca::/w/feat-b depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:p-orca
+HEADER key=pr:in-review label="In review" count=1 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={local:1} hostIds={local:[orca::/w/feat-a]} ids=[orca::/w/feat-a]
+HEADER key=pr:in-progress label="In progress" count=7 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={local:6 ssh:gpu-vm:1} hostIds={local:[lab::/w/gitlab-mr,orca::/orca,orca::/w/feat-c,lab::/lab] ssh:gpu-vm:[]} ids=[lab::/w/gitlab-mr,orca::/orca,orca::/w/feat-c,lab::/lab]
+ITEM rowKey=pr:in-progress:|lab::/w/gitlab-mr depth=0 groupDepth=0 children=0 placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|lab::/lab depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:repo:lab
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr
+SECTION pr:in-review: pr:in-review:|orca::/w/feat-a
+SECTION pr:closed: pr:closed:|orca::/w/Zeta
+PREFERRED |orca::/w/feat-a -> pr:in-review:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> pr:done:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> pr:in-progress:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> pr:in-progress:|lab::/w/gitlab-mr
+renderedKeys: 17
+placeholders: -
+selectionOrder: |orca::/w/feat-b |lab::/w/gitlab-mr |orca::/orca |orca::/w/feat-c |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-b 2=lab::/w/gitlab-mr 3=orca::/orca 4=orca::/w/feat-c 5=lab::/lab 6=folder:fw-review@local 7=folder:fw-notes@local 8=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca::/w/feat-b 2=lab::/w/gitlab-mr 3=orca::/orca 4=orca::/w/feat-c 5=lab::/lab 6=folder:fw-review@local 7=folder:fw-notes@local 8=folder:fw-remote@ssh:gpu-vm
+cmd ids unmounted: orca::/w/feat-b lab::/w/gitlab-mr orca::/orca orca::/w/feat-c lab::/lab folder:fw-review folder:fw-notes folder:fw-remote
diff --git a/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-single-host-scope.txt b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-single-host-scope.txt
new file mode 100644
index 000000000000..ea86f7553fe6
--- /dev/null
+++ b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-single-host-scope.txt
@@ -0,0 +1,350 @@
+=== groupBy=none pinnedInGroups=false ===
+visible: orca-ssh::/w/remote-x shared::/w/same orca-ssh::/orca-ssh
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned collapseKey=pinned:host:ssh:gpu-vm label="Pinned" count=2 tone="text-foreground" icon=Pin hostCounts={ssh:gpu-vm:2} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 placement=pinned owning=project:repo:shared
+HEADER key=all collapseKey=all:host:ssh:gpu-vm label="All" count=2 tone="text-foreground" icon=List hostCounts={ssh:gpu-vm:2} hostIds={ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[orca-ssh::/orca-ssh]
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+renderedKeys: 8
+placeholders: -
+selectionOrder: ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same |orca-ssh::/orca-ssh ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca-ssh::/w/remote-x@ssh:gpu-vm 2=shared::/w/same@ssh:gpu-vm 3=orca-ssh::/orca-ssh 4=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca-ssh::/w/remote-x@ssh:gpu-vm 2=shared::/w/same@ssh:gpu-vm 3=orca-ssh::/orca-ssh 4=folder:fw-remote@ssh:gpu-vm
+cmd ids unmounted: orca-ssh::/w/remote-x shared::/w/same orca-ssh::/orca-ssh folder:fw-remote
+-- collapsed: pinned:host:ssh:gpu-vm --
+visible: orca-ssh::/w/remote-x shared::/w/same orca-ssh::/orca-ssh
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned collapseKey=pinned:host:ssh:gpu-vm label="Pinned" count=2 tone="text-foreground" icon=Pin hostCounts={ssh:gpu-vm:2} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=all collapseKey=all:host:ssh:gpu-vm label="All" count=2 tone="text-foreground" icon=List hostCounts={ssh:gpu-vm:2} hostIds={ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[orca-ssh::/orca-ssh]
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+-- rows before host sections --
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=2 tone="text-foreground" icon=Pin hostCounts={ssh:gpu-vm:2} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 placement=pinned owning=project:repo:shared
+HEADER key=all label="All" count=2 tone="text-foreground" icon=List hostCounts={ssh:gpu-vm:2} hostIds={ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[orca-ssh::/orca-ssh]
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+SECTION pinned: pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+renderedKeys: 6
+placeholders: -
+selectionOrder: |orca-ssh::/orca-ssh ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca-ssh::/orca-ssh 2=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca-ssh::/w/remote-x@ssh:gpu-vm 2=shared::/w/same@ssh:gpu-vm 3=orca-ssh::/orca-ssh 4=folder:fw-remote@ssh:gpu-vm
+cmd ids unmounted: orca-ssh::/w/remote-x shared::/w/same orca-ssh::/orca-ssh folder:fw-remote
+=== groupBy=none pinnedInGroups=true ===
+visible: orca-ssh::/w/remote-x shared::/w/same orca-ssh::/orca-ssh
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned collapseKey=pinned:host:ssh:gpu-vm label="Pinned" count=2 tone="text-foreground" icon=Pin hostCounts={ssh:gpu-vm:2} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 placement=pinned owning=project:repo:shared
+HEADER key=all collapseKey=all:host:ssh:gpu-vm label="All" count=4 tone="text-foreground" icon=List hostCounts={ssh:gpu-vm:4} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh]} ids=[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh]
+ITEM rowKey=all:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 placement=natural owning=project:p-orca
+ITEM rowKey=all:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 placement=natural owning=project:repo:shared
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> all:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> all:ssh:gpu-vm|shared::/w/same
+renderedKeys: 10
+placeholders: -
+selectionOrder: ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same |orca-ssh::/orca-ssh ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca-ssh::/w/remote-x@ssh:gpu-vm 2=shared::/w/same@ssh:gpu-vm 3=orca-ssh::/orca-ssh 4=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca-ssh::/w/remote-x@ssh:gpu-vm 2=shared::/w/same@ssh:gpu-vm 3=orca-ssh::/orca-ssh 4=folder:fw-remote@ssh:gpu-vm
+cmd ids unmounted: orca-ssh::/w/remote-x shared::/w/same orca-ssh::/orca-ssh folder:fw-remote
+-- collapsed: pinned:host:ssh:gpu-vm --
+visible: orca-ssh::/w/remote-x shared::/w/same orca-ssh::/orca-ssh
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned collapseKey=pinned:host:ssh:gpu-vm label="Pinned" count=2 tone="text-foreground" icon=Pin hostCounts={ssh:gpu-vm:2} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=all collapseKey=all:host:ssh:gpu-vm label="All" count=4 tone="text-foreground" icon=List hostCounts={ssh:gpu-vm:4} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh]} ids=[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh]
+ITEM rowKey=all:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 placement=natural owning=project:p-orca
+ITEM rowKey=all:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 placement=natural owning=project:repo:shared
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+-- rows before host sections --
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=2 tone="text-foreground" icon=Pin hostCounts={ssh:gpu-vm:2} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 placement=pinned owning=project:repo:shared
+HEADER key=all label="All" count=4 tone="text-foreground" icon=List hostCounts={ssh:gpu-vm:4} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh]} ids=[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh]
+ITEM rowKey=all:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 placement=natural owning=project:p-orca
+ITEM rowKey=all:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 placement=natural owning=project:repo:shared
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+SECTION pinned: pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> all:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> all:ssh:gpu-vm|shared::/w/same
+renderedKeys: 8
+placeholders: -
+selectionOrder: ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same |orca-ssh::/orca-ssh ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca-ssh::/w/remote-x@ssh:gpu-vm 2=shared::/w/same@ssh:gpu-vm 3=orca-ssh::/orca-ssh 4=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca-ssh::/w/remote-x@ssh:gpu-vm 2=shared::/w/same@ssh:gpu-vm 3=orca-ssh::/orca-ssh 4=folder:fw-remote@ssh:gpu-vm
+cmd ids unmounted: orca-ssh::/w/remote-x shared::/w/same orca-ssh::/orca-ssh folder:fw-remote
+=== groupBy=repo pinnedInGroups=false ===
+visible: orca-ssh::/w/remote-x shared::/w/same orca-ssh::/orca-ssh
+HEADER key=pinned collapseKey=pinned:host:ssh:gpu-vm label="Pinned" count=2 tone="text-foreground" icon=Pin hostCounts={ssh:gpu-vm:2} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 placement=pinned owning=project:repo:shared
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:p-orca label="orca" count=1 tone="text-foreground" icon=FolderTree repo=orca-ssh projectGroupDepth=0
+ITEM rowKey=project:p-orca:|orca-ssh::/orca-ssh depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:p-orca
+HEADER key=project:repo:api label="api" count=0 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+SECTION project:repo:api: -
+renderedKeys: 10
+placeholders: -
+selectionOrder: ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same ssh:gpu-vm|folder:fw-remote |orca-ssh::/orca-ssh
+cmd1-9 mounted: 1=orca-ssh::/w/remote-x@ssh:gpu-vm 2=shared::/w/same@ssh:gpu-vm 3=folder:fw-remote@ssh:gpu-vm 4=orca-ssh::/orca-ssh
+cmd1-9 unmounted: 1=orca-ssh::/w/remote-x@ssh:gpu-vm 2=shared::/w/same@ssh:gpu-vm 3=folder:fw-remote@ssh:gpu-vm 4=orca-ssh::/orca-ssh
+cmd ids unmounted: orca-ssh::/w/remote-x shared::/w/same folder:fw-remote orca-ssh::/orca-ssh
+-- collapsed: pinned:host:ssh:gpu-vm project:p-orca --
+visible: orca-ssh::/w/remote-x shared::/w/same orca-ssh::/orca-ssh
+HEADER key=pinned collapseKey=pinned:host:ssh:gpu-vm label="Pinned" count=2 tone="text-foreground" icon=Pin hostCounts={ssh:gpu-vm:2} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:p-orca label="orca" count=1 tone="text-foreground" icon=FolderTree repo=orca-ssh projectGroupDepth=0
+HEADER key=project:repo:api label="api" count=0 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+-- rows before host sections --
+HEADER key=pinned label="Pinned" count=2 tone="text-foreground" icon=Pin hostCounts={ssh:gpu-vm:2} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 placement=pinned owning=project:repo:shared
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:p-orca label="orca" count=1 tone="text-foreground" icon=FolderTree repo=orca-ssh projectGroupDepth=0
+HEADER key=project:repo:api label="api" count=0 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+SECTION pinned: pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION project:p-orca: project:p-orca:|orca-ssh::/orca-ssh
+SECTION project:repo:api: -
+renderedKeys: 7
+placeholders: -
+selectionOrder: ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca-ssh::/w/remote-x@ssh:gpu-vm 2=shared::/w/same@ssh:gpu-vm 3=folder:fw-remote@ssh:gpu-vm
+cmd ids unmounted: orca-ssh::/w/remote-x shared::/w/same folder:fw-remote
+=== groupBy=repo pinnedInGroups=true ===
+visible: orca-ssh::/w/remote-x shared::/w/same orca-ssh::/orca-ssh
+HEADER key=pinned collapseKey=pinned:host:ssh:gpu-vm label="Pinned" count=2 tone="text-foreground" icon=Pin hostCounts={ssh:gpu-vm:2} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 placement=pinned owning=project:repo:shared
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:p-orca label="orca" count=2 tone="text-foreground" icon=FolderTree repo=orca-ssh projectGroupDepth=0
+ITEM rowKey=project:p-orca:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 placement=natural owning=project:p-orca
+ITEM rowKey=project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:p-orca
+HEADER key=project:repo:api label="api" count=0 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=project:repo:shared label="shared" count=1 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+ITEM rowKey=project:repo:shared:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:repo:shared
+SECTION project:repo:api: -
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> project:repo:shared:ssh:gpu-vm|shared::/w/same
+renderedKeys: 13
+placeholders: -
+selectionOrder: ssh:gpu-vm|folder:fw-remote |orca-ssh::/orca-ssh ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same
+cmd1-9 mounted: 1=folder:fw-remote@ssh:gpu-vm 2=orca-ssh::/orca-ssh 3=orca-ssh::/w/remote-x@ssh:gpu-vm 4=shared::/w/same@ssh:gpu-vm
+cmd1-9 unmounted: 1=folder:fw-remote@ssh:gpu-vm 2=orca-ssh::/orca-ssh 3=orca-ssh::/w/remote-x@ssh:gpu-vm 4=shared::/w/same@ssh:gpu-vm
+cmd ids unmounted: folder:fw-remote orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same
+-- collapsed: pinned:host:ssh:gpu-vm project:p-orca project:repo:shared --
+visible: orca-ssh::/w/remote-x shared::/w/same orca-ssh::/orca-ssh
+HEADER key=pinned collapseKey=pinned:host:ssh:gpu-vm label="Pinned" count=2 tone="text-foreground" icon=Pin hostCounts={ssh:gpu-vm:2} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:p-orca label="orca" count=2 tone="text-foreground" icon=FolderTree repo=orca-ssh projectGroupDepth=0
+HEADER key=project:repo:api label="api" count=0 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=project:repo:shared label="shared" count=1 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+-- rows before host sections --
+HEADER key=pinned label="Pinned" count=2 tone="text-foreground" icon=Pin hostCounts={ssh:gpu-vm:2} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 placement=pinned owning=project:repo:shared
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:p-orca label="orca" count=2 tone="text-foreground" icon=FolderTree repo=orca-ssh projectGroupDepth=0
+HEADER key=project:repo:api label="api" count=0 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=project:repo:shared label="shared" count=1 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+SECTION pinned: pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION project:p-orca: project:p-orca:|orca-ssh::/orca-ssh project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x
+SECTION project:repo:api: -
+SECTION project:repo:shared: project:repo:shared:ssh:gpu-vm|shared::/w/same
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> project:repo:shared:ssh:gpu-vm|shared::/w/same
+renderedKeys: 8
+placeholders: -
+selectionOrder: ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca-ssh::/w/remote-x@ssh:gpu-vm 2=shared::/w/same@ssh:gpu-vm 3=folder:fw-remote@ssh:gpu-vm
+cmd ids unmounted: orca-ssh::/w/remote-x shared::/w/same folder:fw-remote
+=== groupBy=workspace-status pinnedInGroups=false ===
+visible: orca-ssh::/w/remote-x shared::/w/same orca-ssh::/orca-ssh
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned collapseKey=pinned:host:ssh:gpu-vm label="Pinned" count=2 tone="text-foreground" icon=Pin hostCounts={ssh:gpu-vm:2} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 placement=pinned owning=project:repo:shared
+HEADER key=workspace-status:in-progress collapseKey=workspace-status:in-progress:host:ssh:gpu-vm label="In progress" count=2 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={ssh:gpu-vm:2} hostIds={ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[orca-ssh::/orca-ssh]
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+renderedKeys: 8
+placeholders: -
+selectionOrder: ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same |orca-ssh::/orca-ssh ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca-ssh::/w/remote-x@ssh:gpu-vm 2=shared::/w/same@ssh:gpu-vm 3=orca-ssh::/orca-ssh 4=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca-ssh::/w/remote-x@ssh:gpu-vm 2=shared::/w/same@ssh:gpu-vm 3=orca-ssh::/orca-ssh 4=folder:fw-remote@ssh:gpu-vm
+cmd ids unmounted: orca-ssh::/w/remote-x shared::/w/same orca-ssh::/orca-ssh folder:fw-remote
+-- collapsed: pinned:host:ssh:gpu-vm --
+visible: orca-ssh::/w/remote-x shared::/w/same orca-ssh::/orca-ssh
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned collapseKey=pinned:host:ssh:gpu-vm label="Pinned" count=2 tone="text-foreground" icon=Pin hostCounts={ssh:gpu-vm:2} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=workspace-status:in-progress collapseKey=workspace-status:in-progress:host:ssh:gpu-vm label="In progress" count=2 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={ssh:gpu-vm:2} hostIds={ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[orca-ssh::/orca-ssh]
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+-- rows before host sections --
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=2 tone="text-foreground" icon=Pin hostCounts={ssh:gpu-vm:2} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 placement=pinned owning=project:repo:shared
+HEADER key=workspace-status:in-progress label="In progress" count=2 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={ssh:gpu-vm:2} hostIds={ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[orca-ssh::/orca-ssh]
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+SECTION pinned: pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+renderedKeys: 6
+placeholders: -
+selectionOrder: |orca-ssh::/orca-ssh ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca-ssh::/orca-ssh 2=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca-ssh::/w/remote-x@ssh:gpu-vm 2=shared::/w/same@ssh:gpu-vm 3=orca-ssh::/orca-ssh 4=folder:fw-remote@ssh:gpu-vm
+cmd ids unmounted: orca-ssh::/w/remote-x shared::/w/same orca-ssh::/orca-ssh folder:fw-remote
+=== groupBy=workspace-status pinnedInGroups=true ===
+visible: orca-ssh::/w/remote-x shared::/w/same orca-ssh::/orca-ssh
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned collapseKey=pinned:host:ssh:gpu-vm label="Pinned" count=2 tone="text-foreground" icon=Pin hostCounts={ssh:gpu-vm:2} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 placement=pinned owning=project:repo:shared
+HEADER key=workspace-status:in-progress collapseKey=workspace-status:in-progress:host:ssh:gpu-vm label="In progress" count=4 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={ssh:gpu-vm:4} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh]} ids=[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh]
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> workspace-status:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 10
+placeholders: -
+selectionOrder: ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same |orca-ssh::/orca-ssh ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca-ssh::/w/remote-x@ssh:gpu-vm 2=shared::/w/same@ssh:gpu-vm 3=orca-ssh::/orca-ssh 4=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca-ssh::/w/remote-x@ssh:gpu-vm 2=shared::/w/same@ssh:gpu-vm 3=orca-ssh::/orca-ssh 4=folder:fw-remote@ssh:gpu-vm
+cmd ids unmounted: orca-ssh::/w/remote-x shared::/w/same orca-ssh::/orca-ssh folder:fw-remote
+-- collapsed: pinned:host:ssh:gpu-vm --
+visible: orca-ssh::/w/remote-x shared::/w/same orca-ssh::/orca-ssh
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned collapseKey=pinned:host:ssh:gpu-vm label="Pinned" count=2 tone="text-foreground" icon=Pin hostCounts={ssh:gpu-vm:2} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=workspace-status:in-progress collapseKey=workspace-status:in-progress:host:ssh:gpu-vm label="In progress" count=4 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={ssh:gpu-vm:4} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh]} ids=[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh]
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+-- rows before host sections --
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=2 tone="text-foreground" icon=Pin hostCounts={ssh:gpu-vm:2} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 placement=pinned owning=project:repo:shared
+HEADER key=workspace-status:in-progress label="In progress" count=4 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={ssh:gpu-vm:4} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh]} ids=[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh]
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+SECTION pinned: pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> workspace-status:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 8
+placeholders: -
+selectionOrder: ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same |orca-ssh::/orca-ssh ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca-ssh::/w/remote-x@ssh:gpu-vm 2=shared::/w/same@ssh:gpu-vm 3=orca-ssh::/orca-ssh 4=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca-ssh::/w/remote-x@ssh:gpu-vm 2=shared::/w/same@ssh:gpu-vm 3=orca-ssh::/orca-ssh 4=folder:fw-remote@ssh:gpu-vm
+cmd ids unmounted: orca-ssh::/w/remote-x shared::/w/same orca-ssh::/orca-ssh folder:fw-remote
+=== groupBy=pr-status pinnedInGroups=false ===
+visible: orca-ssh::/w/remote-x shared::/w/same orca-ssh::/orca-ssh
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned collapseKey=pinned:host:ssh:gpu-vm label="Pinned" count=2 tone="text-foreground" icon=Pin hostCounts={ssh:gpu-vm:2} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 placement=pinned owning=project:repo:shared
+HEADER key=pr:in-progress collapseKey=pr:in-progress:host:ssh:gpu-vm label="In progress" count=2 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={ssh:gpu-vm:2} hostIds={ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[orca-ssh::/orca-ssh]
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+renderedKeys: 8
+placeholders: -
+selectionOrder: ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same |orca-ssh::/orca-ssh ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca-ssh::/w/remote-x@ssh:gpu-vm 2=shared::/w/same@ssh:gpu-vm 3=orca-ssh::/orca-ssh 4=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca-ssh::/w/remote-x@ssh:gpu-vm 2=shared::/w/same@ssh:gpu-vm 3=orca-ssh::/orca-ssh 4=folder:fw-remote@ssh:gpu-vm
+cmd ids unmounted: orca-ssh::/w/remote-x shared::/w/same orca-ssh::/orca-ssh folder:fw-remote
+-- collapsed: pinned:host:ssh:gpu-vm --
+visible: orca-ssh::/w/remote-x shared::/w/same orca-ssh::/orca-ssh
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned collapseKey=pinned:host:ssh:gpu-vm label="Pinned" count=2 tone="text-foreground" icon=Pin hostCounts={ssh:gpu-vm:2} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=pr:in-progress collapseKey=pr:in-progress:host:ssh:gpu-vm label="In progress" count=2 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={ssh:gpu-vm:2} hostIds={ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[orca-ssh::/orca-ssh]
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+-- rows before host sections --
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=2 tone="text-foreground" icon=Pin hostCounts={ssh:gpu-vm:2} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 placement=pinned owning=project:repo:shared
+HEADER key=pr:in-progress label="In progress" count=2 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={ssh:gpu-vm:2} hostIds={ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[orca-ssh::/orca-ssh]
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+SECTION pinned: pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+renderedKeys: 6
+placeholders: -
+selectionOrder: |orca-ssh::/orca-ssh ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca-ssh::/orca-ssh 2=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca-ssh::/w/remote-x@ssh:gpu-vm 2=shared::/w/same@ssh:gpu-vm 3=orca-ssh::/orca-ssh 4=folder:fw-remote@ssh:gpu-vm
+cmd ids unmounted: orca-ssh::/w/remote-x shared::/w/same orca-ssh::/orca-ssh folder:fw-remote
+=== groupBy=pr-status pinnedInGroups=true ===
+visible: orca-ssh::/w/remote-x shared::/w/same orca-ssh::/orca-ssh
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned collapseKey=pinned:host:ssh:gpu-vm label="Pinned" count=2 tone="text-foreground" icon=Pin hostCounts={ssh:gpu-vm:2} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 placement=pinned owning=project:repo:shared
+HEADER key=pr:in-progress collapseKey=pr:in-progress:host:ssh:gpu-vm label="In progress" count=4 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={ssh:gpu-vm:4} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh]} ids=[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh]
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> pr:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 10
+placeholders: -
+selectionOrder: ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same |orca-ssh::/orca-ssh ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca-ssh::/w/remote-x@ssh:gpu-vm 2=shared::/w/same@ssh:gpu-vm 3=orca-ssh::/orca-ssh 4=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca-ssh::/w/remote-x@ssh:gpu-vm 2=shared::/w/same@ssh:gpu-vm 3=orca-ssh::/orca-ssh 4=folder:fw-remote@ssh:gpu-vm
+cmd ids unmounted: orca-ssh::/w/remote-x shared::/w/same orca-ssh::/orca-ssh folder:fw-remote
+-- collapsed: pinned:host:ssh:gpu-vm --
+visible: orca-ssh::/w/remote-x shared::/w/same orca-ssh::/orca-ssh
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned collapseKey=pinned:host:ssh:gpu-vm label="Pinned" count=2 tone="text-foreground" icon=Pin hostCounts={ssh:gpu-vm:2} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=pr:in-progress collapseKey=pr:in-progress:host:ssh:gpu-vm label="In progress" count=4 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={ssh:gpu-vm:4} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh]} ids=[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh]
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+-- rows before host sections --
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=2 tone="text-foreground" icon=Pin hostCounts={ssh:gpu-vm:2} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 placement=pinned owning=project:repo:shared
+HEADER key=pr:in-progress label="In progress" count=4 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={ssh:gpu-vm:4} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh]} ids=[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh]
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 lastChild=true children=0 placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+SECTION pinned: pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> pr:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 8
+placeholders: -
+selectionOrder: ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same |orca-ssh::/orca-ssh ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca-ssh::/w/remote-x@ssh:gpu-vm 2=shared::/w/same@ssh:gpu-vm 3=orca-ssh::/orca-ssh 4=folder:fw-remote@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca-ssh::/w/remote-x@ssh:gpu-vm 2=shared::/w/same@ssh:gpu-vm 3=orca-ssh::/orca-ssh 4=folder:fw-remote@ssh:gpu-vm
+cmd ids unmounted: orca-ssh::/w/remote-x shared::/w/same orca-ssh::/orca-ssh folder:fw-remote
diff --git a/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-stamp-tiers.txt b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-stamp-tiers.txt
new file mode 100644
index 000000000000..a53212f6bc8f
--- /dev/null
+++ b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-stamp-tiers.txt
@@ -0,0 +1,1086 @@
+=== sort=smart groupBy=none pinnedInGroups=false ===
+visible: orca::/w/Zeta api::/w/api-y orca::/w/feat-a orca-ssh::/w/remote-x lab::/w/gitlab-mr orca::/w/feat-b orca::/orca orca::/w/feat-c api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh shared::/w/same shared::/w/same
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 lastChild=true children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=all label="All" count=11 tone="text-foreground" icon=List hostCounts={local:7 runtime:env-1:2 ssh:gpu-vm:2} hostIds={local:[orca::/w/Zeta,orca::/orca,ext::/ext,lab::/lab,shared::/w/same] runtime:env-1:[api::/w/api-y,api::/api] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[orca::/w/Zeta,api::/w/api-y,orca::/orca,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,shared::/w/same]
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+renderedKeys: 23
+placeholders: -
+selectionOrder: |orca::/w/feat-a |lab::/w/gitlab-mr |orca::/w/feat-b |orca::/w/feat-c ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same |orca::/w/Zeta runtime:env-1|api::/w/api-y |orca::/orca runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh local|shared::/w/same local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca::/w/feat-b#lineage:orca::/w/feat-b 4=orca::/w/feat-c 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=orca::/w/Zeta 8=api::/w/api-y@runtime:env-1 9=orca::/orca
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca::/w/feat-b 4=orca::/w/feat-c 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=shared::/w/same@local 8=orca::/w/Zeta 9=api::/w/api-y@runtime:env-1
+cmd ids unmounted: orca::/w/feat-a lab::/w/gitlab-mr orca::/w/feat-b orca::/w/feat-c orca-ssh::/w/remote-x shared::/w/same orca::/w/Zeta api::/w/api-y orca::/orca api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh folder:fw-review folder:fw-notes folder:fw-remote
+-- collapsed: pinned lineage:orca::/w/feat-a --
+visible: orca::/w/Zeta api::/w/api-y orca::/w/feat-a orca-ssh::/w/remote-x lab::/w/gitlab-mr orca::/w/feat-b orca::/orca orca::/w/feat-c api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh shared::/w/same shared::/w/same
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c,shared::/w/same]
+HEADER key=all label="All" count=11 tone="text-foreground" icon=List hostCounts={local:7 runtime:env-1:2 ssh:gpu-vm:2} hostIds={local:[orca::/w/Zeta,orca::/orca,ext::/ext,lab::/lab,shared::/w/same] runtime:env-1:[api::/w/api-y,api::/api] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[orca::/w/Zeta,api::/w/api-y,orca::/orca,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,shared::/w/same]
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|lab::/w/gitlab-mr pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+renderedKeys: 17
+placeholders: -
+selectionOrder: |orca::/w/Zeta runtime:env-1|api::/w/api-y |orca::/orca runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh local|shared::/w/same local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/Zeta 2=api::/w/api-y@runtime:env-1 3=orca::/orca 4=api::/api@runtime:env-1 5=ext::/ext 6=lab::/lab 7=orca-ssh::/orca-ssh 8=shared::/w/same@local 9=folder:fw-review@local
+cmd1-9 unmounted: 1=orca::/w/Zeta 2=api::/w/api-y@runtime:env-1 3=orca::/orca 4=api::/api@runtime:env-1 5=ext::/ext 6=lab::/lab 7=orca-ssh::/orca-ssh 8=shared::/w/same@local 9=folder:fw-review@local
+cmd ids unmounted: orca::/w/Zeta api::/w/api-y orca::/orca api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh shared::/w/same folder:fw-review folder:fw-notes folder:fw-remote
+=== sort=smart groupBy=none pinnedInGroups=true ===
+visible: orca::/w/Zeta api::/w/api-y orca::/w/feat-a orca-ssh::/w/remote-x lab::/w/gitlab-mr orca::/w/feat-b orca::/orca orca::/w/feat-c api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh shared::/w/same shared::/w/same
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 lastChild=true children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=all label="All" count=17 tone="text-foreground" icon=List hostCounts={local:11 runtime:env-1:2 ssh:gpu-vm:4} hostIds={local:[orca::/w/Zeta,orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/orca,orca::/w/feat-c,ext::/ext,lab::/lab,shared::/w/same] runtime:env-1:[api::/w/api-y,api::/api] ssh:gpu-vm:[orca-ssh::/w/remote-x,orca-ssh::/orca-ssh,shared::/w/same]} ids=[orca::/w/Zeta,api::/w/api-y,orca::/w/feat-a,orca-ssh::/w/remote-x,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/orca,orca::/w/feat-c,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,shared::/w/same,shared::/w/same]
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|lab::/w/gitlab-mr depth=1 groupDepth=0 children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab parent=all:|orca::/w/feat-a
+ITEM rowKey=all:|orca::/w/feat-b depth=1 groupDepth=0 lastChild=true children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=natural owning=project:p-orca parent=all:|orca::/w/feat-a
+ITEM rowKey=all:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca parent=all:|orca::/w/feat-b
+ITEM rowKey=all:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=all:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+PREFERRED |orca::/w/feat-a -> all:|orca::/w/feat-a
+PREFERRED |lab::/w/gitlab-mr -> all:|lab::/w/gitlab-mr
+PREFERRED |orca::/w/feat-b -> all:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> all:|orca::/w/feat-c
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> all:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> all:ssh:gpu-vm|shared::/w/same
+renderedKeys: 29
+placeholders: -
+selectionOrder: |orca::/w/Zeta runtime:env-1|api::/w/api-y |orca::/w/feat-a |lab::/w/gitlab-mr |orca::/w/feat-b |orca::/w/feat-c ssh:gpu-vm|orca-ssh::/w/remote-x |orca::/orca runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh local|shared::/w/same ssh:gpu-vm|shared::/w/same local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/Zeta 2=api::/w/api-y@runtime:env-1 3=orca::/w/feat-a#lineage:orca::/w/feat-a 4=lab::/w/gitlab-mr 5=orca::/w/feat-b#lineage:orca::/w/feat-b 6=orca::/w/feat-c 7=orca-ssh::/w/remote-x@ssh:gpu-vm 8=orca::/orca 9=api::/api@runtime:env-1
+cmd1-9 unmounted: 1=orca::/w/Zeta 2=api::/w/api-y@runtime:env-1 3=orca::/w/feat-a 4=lab::/w/gitlab-mr 5=orca::/w/feat-b 6=orca::/w/feat-c 7=orca-ssh::/w/remote-x@ssh:gpu-vm 8=orca::/orca 9=api::/api@runtime:env-1
+cmd ids unmounted: orca::/w/Zeta api::/w/api-y orca::/w/feat-a lab::/w/gitlab-mr orca::/w/feat-b orca::/w/feat-c orca-ssh::/w/remote-x orca::/orca api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh shared::/w/same folder:fw-review folder:fw-notes folder:fw-remote
+-- collapsed: pinned lineage:orca::/w/feat-a --
+visible: orca::/w/Zeta api::/w/api-y orca::/w/feat-a orca-ssh::/w/remote-x lab::/w/gitlab-mr orca::/w/feat-b orca::/orca orca::/w/feat-c api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh shared::/w/same shared::/w/same
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c,shared::/w/same]
+HEADER key=all label="All" count=17 tone="text-foreground" icon=List hostCounts={local:11 runtime:env-1:2 ssh:gpu-vm:4} hostIds={local:[orca::/w/Zeta,orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/orca,orca::/w/feat-c,ext::/ext,lab::/lab,shared::/w/same] runtime:env-1:[api::/w/api-y,api::/api] ssh:gpu-vm:[orca-ssh::/w/remote-x,orca-ssh::/orca-ssh,shared::/w/same]} ids=[orca::/w/Zeta,api::/w/api-y,orca::/w/feat-a,orca-ssh::/w/remote-x,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/orca,orca::/w/feat-c,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,shared::/w/same,shared::/w/same]
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a lineageCollapsed=true hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=all:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|lab::/w/gitlab-mr pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION all: all:|orca::/w/Zeta all:runtime:env-1|api::/w/api-y all:|orca::/w/feat-a all:|lab::/w/gitlab-mr all:|orca::/w/feat-b all:|orca::/w/feat-c all:ssh:gpu-vm|orca-ssh::/w/remote-x all:|orca::/orca all:runtime:env-1|api::/api all:|ext::/ext all:|lab::/lab all:|orca-ssh::/orca-ssh all:local|shared::/w/same all:ssh:gpu-vm|shared::/w/same
+PREFERRED |orca::/w/feat-a -> all:|orca::/w/feat-a
+PREFERRED |lab::/w/gitlab-mr -> all:|lab::/w/gitlab-mr
+PREFERRED |orca::/w/feat-b -> all:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> all:|orca::/w/feat-c
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> all:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> all:ssh:gpu-vm|shared::/w/same
+renderedKeys: 20
+placeholders: -
+selectionOrder: |orca::/w/Zeta runtime:env-1|api::/w/api-y |orca::/w/feat-a ssh:gpu-vm|orca-ssh::/w/remote-x |orca::/orca runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh local|shared::/w/same ssh:gpu-vm|shared::/w/same local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/Zeta 2=api::/w/api-y@runtime:env-1 3=orca::/w/feat-a#lineage:orca::/w/feat-a 4=orca-ssh::/w/remote-x@ssh:gpu-vm 5=orca::/orca 6=api::/api@runtime:env-1 7=ext::/ext 8=lab::/lab 9=orca-ssh::/orca-ssh
+cmd1-9 unmounted: 1=orca::/w/Zeta 2=api::/w/api-y@runtime:env-1 3=orca::/w/feat-a 4=orca-ssh::/w/remote-x@ssh:gpu-vm 5=orca::/orca 6=api::/api@runtime:env-1 7=ext::/ext 8=lab::/lab 9=orca-ssh::/orca-ssh
+cmd ids unmounted: orca::/w/Zeta api::/w/api-y orca::/w/feat-a orca-ssh::/w/remote-x orca::/orca api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh shared::/w/same folder:fw-review folder:fw-notes folder:fw-remote
+=== sort=smart groupBy=repo pinnedInGroups=false ===
+visible: orca::/w/Zeta api::/w/api-y orca::/w/feat-a orca-ssh::/w/remote-x lab::/w/gitlab-mr orca::/w/feat-b orca::/orca orca::/w/feat-c api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh shared::/w/same shared::/w/same
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 lastChild=true children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=3 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+ITEM rowKey=project:p-orca:|orca::/orca depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca-ssh::/orca-ssh depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/Zeta depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+ITEM rowKey=project:repo:lab:|lab::/lab depth=0 groupDepth=2 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab path=project-group:pg-work>project-group:pg-nested>project:repo:lab
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=1 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+SECTION project:repo:empty: -
+renderedKeys: 33
+placeholders: empty
+selectionOrder: |orca::/w/feat-a |lab::/w/gitlab-mr |orca::/w/feat-b |orca::/w/feat-c ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh |orca::/w/Zeta |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/api runtime:env-1|api::/w/api-y local|shared::/w/same |ext::/ext
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca::/w/feat-b#lineage:orca::/w/feat-b 4=orca::/w/feat-c 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=orca::/orca 8=orca-ssh::/orca-ssh 9=orca::/w/Zeta
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca::/w/feat-b 4=orca::/w/feat-c 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=orca::/orca 8=orca-ssh::/orca-ssh 9=orca::/w/Zeta
+cmd ids unmounted: orca::/w/feat-a lab::/w/gitlab-mr orca::/w/feat-b orca::/w/feat-c orca-ssh::/w/remote-x shared::/w/same orca::/orca orca-ssh::/orca-ssh orca::/w/Zeta lab::/lab folder:fw-review folder:fw-notes folder:fw-remote api::/api api::/w/api-y ext::/ext
+-- collapsed: pinned project:p-orca project:repo:lab project-group:pg-remote-folders project:repo:shared project:repo:empty lineage:orca::/w/feat-a --
+visible: orca::/w/Zeta api::/w/api-y orca::/w/feat-a orca-ssh::/w/remote-x lab::/w/gitlab-mr orca::/w/feat-b orca::/orca orca::/w/feat-c api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh shared::/w/same shared::/w/same
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c,shared::/w/same]
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=3 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=1 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|lab::/w/gitlab-mr pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION project:p-orca: project:p-orca:|orca::/orca project:p-orca:|orca-ssh::/orca-ssh project:p-orca:|orca::/w/Zeta
+SECTION project:repo:lab: project:repo:lab:|lab::/lab
+SECTION project:repo:shared: project:repo:shared:local|shared::/w/same
+SECTION project:repo:empty: -
+renderedKeys: 20
+placeholders: empty
+selectionOrder: local|folder:fw-review local|folder:fw-notes runtime:env-1|api::/api runtime:env-1|api::/w/api-y |ext::/ext
+cmd1-9 mounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1 5=ext::/ext
+cmd1-9 unmounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1 5=ext::/ext
+cmd ids unmounted: folder:fw-review folder:fw-notes api::/api api::/w/api-y ext::/ext
+=== sort=smart groupBy=repo pinnedInGroups=true ===
+visible: orca::/w/Zeta api::/w/api-y orca::/w/feat-a orca-ssh::/w/remote-x lab::/w/gitlab-mr orca::/w/feat-b orca::/orca orca::/w/feat-c api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh shared::/w/same shared::/w/same
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 lastChild=true children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=8 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+ITEM rowKey=project:p-orca:|orca::/orca depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca-ssh::/orca-ssh depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/Zeta depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/feat-a depth=0 groupDepth=1 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|lab::/w/gitlab-mr depth=1 groupDepth=1 children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-a
+ITEM rowKey=project:p-orca:|orca::/w/feat-b depth=1 groupDepth=1 lastChild=true children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-a
+ITEM rowKey=project:p-orca:|orca::/w/feat-c depth=2 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-b
+ITEM rowKey=project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=1 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+ITEM rowKey=project:repo:lab:|lab::/lab depth=0 groupDepth=2 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab path=project-group:pg-work>project-group:pg-nested>project:repo:lab
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=2 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=project:repo:shared:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+SECTION project:repo:empty: -
+PREFERRED |orca::/w/feat-a -> project:p-orca:|orca::/w/feat-a
+PREFERRED |lab::/w/gitlab-mr -> project:p-orca:|lab::/w/gitlab-mr
+PREFERRED |orca::/w/feat-b -> project:p-orca:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> project:p-orca:|orca::/w/feat-c
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> project:repo:shared:ssh:gpu-vm|shared::/w/same
+renderedKeys: 39
+placeholders: empty
+selectionOrder: |orca::/orca |orca-ssh::/orca-ssh |orca::/w/Zeta |orca::/w/feat-a |lab::/w/gitlab-mr |orca::/w/feat-b |orca::/w/feat-c ssh:gpu-vm|orca-ssh::/w/remote-x |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/api runtime:env-1|api::/w/api-y local|shared::/w/same ssh:gpu-vm|shared::/w/same |ext::/ext
+cmd1-9 mounted: 1=orca::/orca 2=orca-ssh::/orca-ssh 3=orca::/w/Zeta 4=orca::/w/feat-a#lineage:orca::/w/feat-a 5=lab::/w/gitlab-mr 6=orca::/w/feat-b#lineage:orca::/w/feat-b 7=orca::/w/feat-c 8=orca-ssh::/w/remote-x@ssh:gpu-vm 9=lab::/lab
+cmd1-9 unmounted: 1=orca::/orca 2=orca-ssh::/orca-ssh 3=orca::/w/Zeta 4=orca::/w/feat-a 5=lab::/w/gitlab-mr 6=orca::/w/feat-b 7=orca::/w/feat-c 8=orca-ssh::/w/remote-x@ssh:gpu-vm 9=lab::/lab
+cmd ids unmounted: orca::/orca orca-ssh::/orca-ssh orca::/w/Zeta orca::/w/feat-a lab::/w/gitlab-mr orca::/w/feat-b orca::/w/feat-c orca-ssh::/w/remote-x lab::/lab folder:fw-review folder:fw-notes folder:fw-remote api::/api api::/w/api-y shared::/w/same ext::/ext
+-- collapsed: pinned project:p-orca project:repo:lab project-group:pg-remote-folders project:repo:shared project:repo:empty lineage:orca::/w/feat-a --
+visible: orca::/w/Zeta api::/w/api-y orca::/w/feat-a orca-ssh::/w/remote-x lab::/w/gitlab-mr orca::/w/feat-b orca::/orca orca::/w/feat-c api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh shared::/w/same shared::/w/same
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c,shared::/w/same]
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=8 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=2 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|lab::/w/gitlab-mr pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION project:p-orca: project:p-orca:|orca::/orca project:p-orca:|orca-ssh::/orca-ssh project:p-orca:|orca::/w/Zeta project:p-orca:|orca::/w/feat-a project:p-orca:|lab::/w/gitlab-mr project:p-orca:|orca::/w/feat-b project:p-orca:|orca::/w/feat-c project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x
+SECTION project:repo:lab: project:repo:lab:|lab::/lab
+SECTION project:repo:shared: project:repo:shared:local|shared::/w/same project:repo:shared:ssh:gpu-vm|shared::/w/same
+SECTION project:repo:empty: -
+PREFERRED |orca::/w/feat-a -> project:p-orca:|orca::/w/feat-a
+PREFERRED |lab::/w/gitlab-mr -> project:p-orca:|lab::/w/gitlab-mr
+PREFERRED |orca::/w/feat-b -> project:p-orca:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> project:p-orca:|orca::/w/feat-c
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> project:repo:shared:ssh:gpu-vm|shared::/w/same
+renderedKeys: 20
+placeholders: empty
+selectionOrder: local|folder:fw-review local|folder:fw-notes runtime:env-1|api::/api runtime:env-1|api::/w/api-y |ext::/ext
+cmd1-9 mounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1 5=ext::/ext
+cmd1-9 unmounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1 5=ext::/ext
+cmd ids unmounted: folder:fw-review folder:fw-notes api::/api api::/w/api-y ext::/ext
+=== sort=smart groupBy=workspace-status pinnedInGroups=false ===
+visible: orca::/w/Zeta api::/w/api-y orca::/w/feat-a orca-ssh::/w/remote-x lab::/w/gitlab-mr orca::/w/feat-b orca::/orca orca::/w/feat-c api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh shared::/w/same shared::/w/same
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 lastChild=true children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=workspace-status:in-progress label="In progress" count=8 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:5 runtime:env-1:1 ssh:gpu-vm:2} hostIds={local:[orca::/orca,ext::/ext,lab::/lab,shared::/w/same] runtime:env-1:[api::/api] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[orca::/orca,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,shared::/w/same]
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=1 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:1} hostIds={local:[]} ids=[]
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={local:1 runtime:env-1:1} hostIds={local:[orca::/w/Zeta] runtime:env-1:[api::/w/api-y]} ids=[orca::/w/Zeta,api::/w/api-y]
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+SECTION workspace-status:in-review: -
+renderedKeys: 25
+placeholders: -
+selectionOrder: |orca::/w/feat-a |lab::/w/gitlab-mr |orca::/w/feat-b |orca::/w/feat-c ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same |orca::/orca runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh local|shared::/w/same local|folder:fw-notes ssh:gpu-vm|folder:fw-remote local|folder:fw-review |orca::/w/Zeta runtime:env-1|api::/w/api-y
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca::/w/feat-b#lineage:orca::/w/feat-b 4=orca::/w/feat-c 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=orca::/orca 8=api::/api@runtime:env-1 9=ext::/ext
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca::/w/feat-b 4=orca::/w/feat-c 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=shared::/w/same@local 8=orca::/orca 9=api::/api@runtime:env-1
+cmd ids unmounted: orca::/w/feat-a lab::/w/gitlab-mr orca::/w/feat-b orca::/w/feat-c orca-ssh::/w/remote-x shared::/w/same orca::/orca api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh folder:fw-notes folder:fw-remote folder:fw-review orca::/w/Zeta api::/w/api-y
+-- collapsed: pinned workspace-status:in-review lineage:orca::/w/feat-a --
+visible: orca::/w/Zeta api::/w/api-y orca::/w/feat-a orca-ssh::/w/remote-x lab::/w/gitlab-mr orca::/w/feat-b orca::/orca orca::/w/feat-c api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh shared::/w/same shared::/w/same
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c,shared::/w/same]
+HEADER key=workspace-status:in-progress label="In progress" count=8 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:5 runtime:env-1:1 ssh:gpu-vm:2} hostIds={local:[orca::/orca,ext::/ext,lab::/lab,shared::/w/same] runtime:env-1:[api::/api] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[orca::/orca,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,shared::/w/same]
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=1 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:1} hostIds={local:[]} ids=[]
+HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={local:1 runtime:env-1:1} hostIds={local:[orca::/w/Zeta] runtime:env-1:[api::/w/api-y]} ids=[orca::/w/Zeta,api::/w/api-y]
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|lab::/w/gitlab-mr pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION workspace-status:in-review: -
+renderedKeys: 17
+placeholders: -
+selectionOrder: |orca::/orca runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh local|shared::/w/same local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/Zeta runtime:env-1|api::/w/api-y
+cmd1-9 mounted: 1=orca::/orca 2=api::/api@runtime:env-1 3=ext::/ext 4=lab::/lab 5=orca-ssh::/orca-ssh 6=shared::/w/same@local 7=folder:fw-notes@local 8=folder:fw-remote@ssh:gpu-vm 9=orca::/w/Zeta
+cmd1-9 unmounted: 1=orca::/orca 2=api::/api@runtime:env-1 3=ext::/ext 4=lab::/lab 5=orca-ssh::/orca-ssh 6=shared::/w/same@local 7=folder:fw-notes@local 8=folder:fw-remote@ssh:gpu-vm 9=orca::/w/Zeta
+cmd ids unmounted: orca::/orca api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh shared::/w/same folder:fw-notes folder:fw-remote orca::/w/Zeta api::/w/api-y
+=== sort=smart groupBy=workspace-status pinnedInGroups=true ===
+visible: orca::/w/Zeta api::/w/api-y orca::/w/feat-a orca-ssh::/w/remote-x lab::/w/gitlab-mr orca::/w/feat-b orca::/orca orca::/w/feat-c api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh shared::/w/same shared::/w/same
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 lastChild=true children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=workspace-status:in-progress label="In progress" count=13 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:8 ssh:gpu-vm:4 runtime:env-1:1} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/orca,orca::/w/feat-c,ext::/ext,lab::/lab,shared::/w/same] ssh:gpu-vm:[orca-ssh::/w/remote-x,orca-ssh::/orca-ssh,shared::/w/same] runtime:env-1:[api::/api]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,lab::/w/gitlab-mr,orca::/orca,orca::/w/feat-c,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,shared::/w/same,shared::/w/same]
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-a depth=0 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab parent=workspace-status:in-progress:|orca::/w/feat-a
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=2 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:2} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+ITEM rowKey=workspace-status:in-review:|orca::/w/feat-b depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={local:1 runtime:env-1:1} hostIds={local:[orca::/w/Zeta] runtime:env-1:[api::/w/api-y]} ids=[orca::/w/Zeta,api::/w/api-y]
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+PREFERRED |orca::/w/feat-a -> workspace-status:in-progress:|orca::/w/feat-a
+PREFERRED |lab::/w/gitlab-mr -> workspace-status:in-progress:|lab::/w/gitlab-mr
+PREFERRED |orca::/w/feat-b -> workspace-status:in-review:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> workspace-status:in-progress:|orca::/w/feat-c
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> workspace-status:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 31
+placeholders: -
+selectionOrder: |orca::/w/feat-a |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x |orca::/orca |orca::/w/feat-c runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh local|shared::/w/same ssh:gpu-vm|shared::/w/same local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/feat-b local|folder:fw-review |orca::/w/Zeta runtime:env-1|api::/w/api-y
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca-ssh::/w/remote-x@ssh:gpu-vm 4=orca::/orca 5=orca::/w/feat-c 6=api::/api@runtime:env-1 7=ext::/ext 8=lab::/lab 9=orca-ssh::/orca-ssh
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca-ssh::/w/remote-x@ssh:gpu-vm 4=orca::/orca 5=orca::/w/feat-c 6=api::/api@runtime:env-1 7=ext::/ext 8=lab::/lab 9=orca-ssh::/orca-ssh
+cmd ids unmounted: orca::/w/feat-a lab::/w/gitlab-mr orca-ssh::/w/remote-x orca::/orca orca::/w/feat-c api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh shared::/w/same folder:fw-notes folder:fw-remote orca::/w/feat-b folder:fw-review orca::/w/Zeta api::/w/api-y
+-- collapsed: pinned workspace-status:in-review lineage:orca::/w/feat-a --
+visible: orca::/w/Zeta api::/w/api-y orca::/w/feat-a orca-ssh::/w/remote-x lab::/w/gitlab-mr orca::/w/feat-b orca::/orca orca::/w/feat-c api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh shared::/w/same shared::/w/same
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c,shared::/w/same]
+HEADER key=workspace-status:in-progress label="In progress" count=13 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:8 ssh:gpu-vm:4 runtime:env-1:1} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/orca,orca::/w/feat-c,ext::/ext,lab::/lab,shared::/w/same] ssh:gpu-vm:[orca-ssh::/w/remote-x,orca-ssh::/orca-ssh,shared::/w/same] runtime:env-1:[api::/api]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,lab::/w/gitlab-mr,orca::/orca,orca::/w/feat-c,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,shared::/w/same,shared::/w/same]
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-a depth=0 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-a lineageCollapsed=true hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=2 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:2} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={local:1 runtime:env-1:1} hostIds={local:[orca::/w/Zeta] runtime:env-1:[api::/w/api-y]} ids=[orca::/w/Zeta,api::/w/api-y]
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|lab::/w/gitlab-mr pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION workspace-status:in-progress: workspace-status:in-progress:|orca::/w/feat-a workspace-status:in-progress:|lab::/w/gitlab-mr workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x workspace-status:in-progress:|orca::/orca workspace-status:in-progress:|orca::/w/feat-c workspace-status:in-progress:runtime:env-1|api::/api workspace-status:in-progress:|ext::/ext workspace-status:in-progress:|lab::/lab workspace-status:in-progress:|orca-ssh::/orca-ssh workspace-status:in-progress:local|shared::/w/same workspace-status:in-progress:ssh:gpu-vm|shared::/w/same
+SECTION workspace-status:in-review: workspace-status:in-review:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-a -> workspace-status:in-progress:|orca::/w/feat-a
+PREFERRED |lab::/w/gitlab-mr -> workspace-status:in-progress:|lab::/w/gitlab-mr
+PREFERRED |orca::/w/feat-b -> workspace-status:in-review:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> workspace-status:in-progress:|orca::/w/feat-c
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> workspace-status:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 21
+placeholders: -
+selectionOrder: |orca::/w/feat-a ssh:gpu-vm|orca-ssh::/w/remote-x |orca::/orca |orca::/w/feat-c runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh local|shared::/w/same ssh:gpu-vm|shared::/w/same local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/Zeta runtime:env-1|api::/w/api-y
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=orca::/orca 4=orca::/w/feat-c 5=api::/api@runtime:env-1 6=ext::/ext 7=lab::/lab 8=orca-ssh::/orca-ssh 9=shared::/w/same@local
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=orca::/orca 4=orca::/w/feat-c 5=api::/api@runtime:env-1 6=ext::/ext 7=lab::/lab 8=orca-ssh::/orca-ssh 9=shared::/w/same@local
+cmd ids unmounted: orca::/w/feat-a orca-ssh::/w/remote-x orca::/orca orca::/w/feat-c api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh shared::/w/same folder:fw-notes folder:fw-remote orca::/w/Zeta api::/w/api-y
+=== sort=smart groupBy=pr-status pinnedInGroups=false ===
+visible: orca::/w/Zeta api::/w/api-y orca::/w/feat-a orca-ssh::/w/remote-x lab::/w/gitlab-mr orca::/w/feat-b orca::/orca orca::/w/feat-c api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh shared::/w/same shared::/w/same
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 lastChild=true children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=pr:in-review label="In review" count=1 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={runtime:env-1:1} hostIds={runtime:env-1:[api::/w/api-y]} ids=[api::/w/api-y]
+ITEM rowKey=pr:in-review:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=pr:in-progress label="In progress" count=9 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={local:6 runtime:env-1:1 ssh:gpu-vm:2} hostIds={local:[orca::/orca,ext::/ext,lab::/lab,shared::/w/same] runtime:env-1:[api::/api] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[orca::/orca,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,shared::/w/same]
+ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=pr:in-progress:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=pr:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=pr:closed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+renderedKeys: 25
+placeholders: -
+selectionOrder: |orca::/w/feat-a |lab::/w/gitlab-mr |orca::/w/feat-b |orca::/w/feat-c ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same runtime:env-1|api::/w/api-y |orca::/orca runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh local|shared::/w/same local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca::/w/feat-b#lineage:orca::/w/feat-b 4=orca::/w/feat-c 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=api::/w/api-y@runtime:env-1 8=orca::/orca 9=api::/api@runtime:env-1
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca::/w/feat-b 4=orca::/w/feat-c 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=api::/w/api-y@runtime:env-1 8=shared::/w/same@local 9=orca::/orca
+cmd ids unmounted: orca::/w/feat-a lab::/w/gitlab-mr orca::/w/feat-b orca::/w/feat-c orca-ssh::/w/remote-x shared::/w/same api::/w/api-y orca::/orca api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh folder:fw-review folder:fw-notes folder:fw-remote orca::/w/Zeta
+-- collapsed: pinned pr:in-progress lineage:orca::/w/feat-a --
+visible: orca::/w/Zeta api::/w/api-y orca::/w/feat-a orca-ssh::/w/remote-x lab::/w/gitlab-mr orca::/w/feat-b orca::/orca orca::/w/feat-c api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh shared::/w/same shared::/w/same
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c,shared::/w/same]
+HEADER key=pr:in-review label="In review" count=1 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={runtime:env-1:1} hostIds={runtime:env-1:[api::/w/api-y]} ids=[api::/w/api-y]
+ITEM rowKey=pr:in-review:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=pr:in-progress label="In progress" count=9 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={local:6 runtime:env-1:1 ssh:gpu-vm:2} hostIds={local:[orca::/orca,ext::/ext,lab::/lab,shared::/w/same] runtime:env-1:[api::/api] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[orca::/orca,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,shared::/w/same]
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=pr:closed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|lab::/w/gitlab-mr pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION pr:in-progress: pr:in-progress:|orca::/orca pr:in-progress:runtime:env-1|api::/api pr:in-progress:|ext::/ext pr:in-progress:|lab::/lab pr:in-progress:|orca-ssh::/orca-ssh pr:in-progress:local|shared::/w/same
+renderedKeys: 7
+placeholders: -
+selectionOrder: runtime:env-1|api::/w/api-y |orca::/w/Zeta
+cmd1-9 mounted: 1=api::/w/api-y@runtime:env-1 2=orca::/w/Zeta
+cmd1-9 unmounted: 1=api::/w/api-y@runtime:env-1 2=orca::/w/Zeta
+cmd ids unmounted: api::/w/api-y orca::/w/Zeta
+=== sort=smart groupBy=pr-status pinnedInGroups=true ===
+visible: orca::/w/Zeta api::/w/api-y orca::/w/feat-a orca-ssh::/w/remote-x lab::/w/gitlab-mr orca::/w/feat-b orca::/orca orca::/w/feat-c api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh shared::/w/same shared::/w/same
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 lastChild=true children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=pr:done label="Done" count=1 tone="text-workspace-status-done" icon=ConductorDoneIcon hostCounts={local:1} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+ITEM rowKey=pr:done:|orca::/w/feat-b depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+HEADER key=pr:in-review label="In review" count=2 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/feat-a]} ids=[api::/w/api-y,orca::/w/feat-a]
+ITEM rowKey=pr:in-review:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=pr:in-review:|orca::/w/feat-a depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+HEADER key=pr:in-progress label="In progress" count=13 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={ssh:gpu-vm:4 local:8 runtime:env-1:1} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,orca-ssh::/orca-ssh,shared::/w/same] local:[lab::/w/gitlab-mr,orca::/orca,orca::/w/feat-c,ext::/ext,lab::/lab,shared::/w/same] runtime:env-1:[api::/api]} ids=[orca-ssh::/w/remote-x,lab::/w/gitlab-mr,orca::/orca,orca::/w/feat-c,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,shared::/w/same,shared::/w/same]
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|lab::/w/gitlab-mr depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=pr:in-progress:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=pr:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=pr:closed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+PREFERRED |orca::/w/feat-a -> pr:in-review:|orca::/w/feat-a
+PREFERRED |lab::/w/gitlab-mr -> pr:in-progress:|lab::/w/gitlab-mr
+PREFERRED |orca::/w/feat-b -> pr:done:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> pr:in-progress:|orca::/w/feat-c
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> pr:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 32
+placeholders: -
+selectionOrder: |orca::/w/feat-b runtime:env-1|api::/w/api-y |orca::/w/feat-a ssh:gpu-vm|orca-ssh::/w/remote-x |lab::/w/gitlab-mr |orca::/orca |orca::/w/feat-c runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh local|shared::/w/same ssh:gpu-vm|shared::/w/same local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-b#lineage:orca::/w/feat-b 2=api::/w/api-y@runtime:env-1 3=orca::/w/feat-a#lineage:orca::/w/feat-a 4=orca-ssh::/w/remote-x@ssh:gpu-vm 5=lab::/w/gitlab-mr 6=orca::/orca 7=orca::/w/feat-c 8=api::/api@runtime:env-1 9=ext::/ext
+cmd1-9 unmounted: 1=orca::/w/feat-b 2=api::/w/api-y@runtime:env-1 3=orca::/w/feat-a 4=orca-ssh::/w/remote-x@ssh:gpu-vm 5=lab::/w/gitlab-mr 6=orca::/orca 7=orca::/w/feat-c 8=api::/api@runtime:env-1 9=ext::/ext
+cmd ids unmounted: orca::/w/feat-b api::/w/api-y orca::/w/feat-a orca-ssh::/w/remote-x lab::/w/gitlab-mr orca::/orca orca::/w/feat-c api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh shared::/w/same folder:fw-review folder:fw-notes folder:fw-remote orca::/w/Zeta
+-- collapsed: pinned pr:in-review pr:closed lineage:orca::/w/feat-a --
+visible: orca::/w/Zeta api::/w/api-y orca::/w/feat-a orca-ssh::/w/remote-x lab::/w/gitlab-mr orca::/w/feat-b orca::/orca orca::/w/feat-c api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh shared::/w/same shared::/w/same
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,lab::/w/gitlab-mr,orca::/w/feat-b,orca::/w/feat-c,shared::/w/same]
+HEADER key=pr:done label="Done" count=1 tone="text-workspace-status-done" icon=ConductorDoneIcon hostCounts={local:1} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+ITEM rowKey=pr:done:|orca::/w/feat-b depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+HEADER key=pr:in-review label="In review" count=2 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/feat-a]} ids=[api::/w/api-y,orca::/w/feat-a]
+HEADER key=pr:in-progress label="In progress" count=13 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={ssh:gpu-vm:4 local:8 runtime:env-1:1} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,orca-ssh::/orca-ssh,shared::/w/same] local:[lab::/w/gitlab-mr,orca::/orca,orca::/w/feat-c,ext::/ext,lab::/lab,shared::/w/same] runtime:env-1:[api::/api]} ids=[orca-ssh::/w/remote-x,lab::/w/gitlab-mr,orca::/orca,orca::/w/feat-c,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,shared::/w/same,shared::/w/same]
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|lab::/w/gitlab-mr depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=pr:in-progress:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=pr:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|lab::/w/gitlab-mr pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION pr:in-review: pr:in-review:runtime:env-1|api::/w/api-y pr:in-review:|orca::/w/feat-a
+SECTION pr:closed: pr:closed:|orca::/w/Zeta
+PREFERRED |orca::/w/feat-a -> pr:in-review:|orca::/w/feat-a
+PREFERRED |lab::/w/gitlab-mr -> pr:in-progress:|lab::/w/gitlab-mr
+PREFERRED |orca::/w/feat-b -> pr:done:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> pr:in-progress:|orca::/w/feat-c
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> pr:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 23
+placeholders: -
+selectionOrder: |orca::/w/feat-b ssh:gpu-vm|orca-ssh::/w/remote-x |lab::/w/gitlab-mr |orca::/orca |orca::/w/feat-c runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh local|shared::/w/same ssh:gpu-vm|shared::/w/same local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-b 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=lab::/w/gitlab-mr 4=orca::/orca 5=orca::/w/feat-c 6=api::/api@runtime:env-1 7=ext::/ext 8=lab::/lab 9=orca-ssh::/orca-ssh
+cmd1-9 unmounted: 1=orca::/w/feat-b 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=lab::/w/gitlab-mr 4=orca::/orca 5=orca::/w/feat-c 6=api::/api@runtime:env-1 7=ext::/ext 8=lab::/lab 9=orca-ssh::/orca-ssh
+cmd ids unmounted: orca::/w/feat-b orca-ssh::/w/remote-x lab::/w/gitlab-mr orca::/orca orca::/w/feat-c api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh shared::/w/same folder:fw-review folder:fw-notes folder:fw-remote
+=== sort=recent groupBy=none pinnedInGroups=false ===
+visible: orca::/w/feat-a api::/w/api-y orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=all label="All" count=11 tone="text-foreground" icon=List hostCounts={runtime:env-1:2 local:7 ssh:gpu-vm:2} hostIds={runtime:env-1:[api::/w/api-y,api::/api] local:[orca::/orca,ext::/ext,lab::/lab,shared::/w/same,orca::/w/Zeta] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[api::/w/api-y,orca::/orca,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,shared::/w/same,orca::/w/Zeta]
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+renderedKeys: 23
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same runtime:env-1|api::/w/api-y |orca::/orca runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh local|shared::/w/same |orca::/w/Zeta local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=api::/w/api-y@runtime:env-1 8=orca::/orca 9=api::/api@runtime:env-1
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=shared::/w/same@local 8=api::/w/api-y@runtime:env-1 9=orca::/orca
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x shared::/w/same api::/w/api-y orca::/orca api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca::/w/Zeta folder:fw-review folder:fw-notes folder:fw-remote
+-- collapsed: pinned lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a api::/w/api-y orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=all label="All" count=11 tone="text-foreground" icon=List hostCounts={runtime:env-1:2 local:7 ssh:gpu-vm:2} hostIds={runtime:env-1:[api::/w/api-y,api::/api] local:[orca::/orca,ext::/ext,lab::/lab,shared::/w/same,orca::/w/Zeta] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[api::/w/api-y,orca::/orca,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,shared::/w/same,orca::/w/Zeta]
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+renderedKeys: 17
+placeholders: -
+selectionOrder: runtime:env-1|api::/w/api-y |orca::/orca runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh local|shared::/w/same |orca::/w/Zeta local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=api::/w/api-y@runtime:env-1 2=orca::/orca 3=api::/api@runtime:env-1 4=ext::/ext 5=lab::/lab 6=orca-ssh::/orca-ssh 7=shared::/w/same@local 8=orca::/w/Zeta 9=folder:fw-review@local
+cmd1-9 unmounted: 1=api::/w/api-y@runtime:env-1 2=orca::/orca 3=api::/api@runtime:env-1 4=ext::/ext 5=lab::/lab 6=orca-ssh::/orca-ssh 7=shared::/w/same@local 8=orca::/w/Zeta 9=folder:fw-review@local
+cmd ids unmounted: api::/w/api-y orca::/orca api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh shared::/w/same orca::/w/Zeta folder:fw-review folder:fw-notes folder:fw-remote
+=== sort=recent groupBy=none pinnedInGroups=true ===
+visible: orca::/w/feat-a api::/w/api-y orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=all label="All" count=17 tone="text-foreground" icon=List hostCounts={local:11 runtime:env-1:2 ssh:gpu-vm:4} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/orca,orca::/w/feat-c,lab::/w/gitlab-mr,ext::/ext,lab::/lab,shared::/w/same,orca::/w/Zeta] runtime:env-1:[api::/w/api-y,api::/api] ssh:gpu-vm:[orca-ssh::/orca-ssh,orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,api::/w/api-y,orca::/w/feat-b,orca::/orca,orca::/w/feat-c,lab::/w/gitlab-mr,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,orca-ssh::/w/remote-x,shared::/w/same,shared::/w/same,orca::/w/Zeta]
+ITEM rowKey=all:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=natural owning=project:p-orca parent=all:|orca::/w/feat-a
+ITEM rowKey=all:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca parent=all:|orca::/w/feat-b
+ITEM rowKey=all:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab parent=all:|orca::/w/feat-a
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=all:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+PREFERRED |orca::/w/feat-a -> all:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> all:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> all:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> all:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> all:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> all:ssh:gpu-vm|shared::/w/same
+renderedKeys: 29
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr runtime:env-1|api::/w/api-y |orca::/orca runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh ssh:gpu-vm|orca-ssh::/w/remote-x local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/w/Zeta local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=api::/w/api-y@runtime:env-1 6=orca::/orca 7=api::/api@runtime:env-1 8=ext::/ext 9=lab::/lab
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=api::/w/api-y@runtime:env-1 6=orca::/orca 7=api::/api@runtime:env-1 8=ext::/ext 9=lab::/lab
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr api::/w/api-y orca::/orca api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same orca::/w/Zeta folder:fw-review folder:fw-notes folder:fw-remote
+-- collapsed: pinned lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a api::/w/api-y orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=all label="All" count=17 tone="text-foreground" icon=List hostCounts={local:11 runtime:env-1:2 ssh:gpu-vm:4} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/orca,orca::/w/feat-c,lab::/w/gitlab-mr,ext::/ext,lab::/lab,shared::/w/same,orca::/w/Zeta] runtime:env-1:[api::/w/api-y,api::/api] ssh:gpu-vm:[orca-ssh::/orca-ssh,orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,api::/w/api-y,orca::/w/feat-b,orca::/orca,orca::/w/feat-c,lab::/w/gitlab-mr,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,orca-ssh::/w/remote-x,shared::/w/same,shared::/w/same,orca::/w/Zeta]
+ITEM rowKey=all:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a lineageCollapsed=true hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=all:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=all:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=all:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=all:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION all: all:|orca::/w/feat-a all:|orca::/w/feat-b all:|orca::/w/feat-c all:|lab::/w/gitlab-mr all:runtime:env-1|api::/w/api-y all:|orca::/orca all:runtime:env-1|api::/api all:|ext::/ext all:|lab::/lab all:|orca-ssh::/orca-ssh all:ssh:gpu-vm|orca-ssh::/w/remote-x all:local|shared::/w/same all:ssh:gpu-vm|shared::/w/same all:|orca::/w/Zeta
+PREFERRED |orca::/w/feat-a -> all:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> all:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> all:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> all:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> all:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> all:ssh:gpu-vm|shared::/w/same
+renderedKeys: 20
+placeholders: -
+selectionOrder: |orca::/w/feat-a runtime:env-1|api::/w/api-y |orca::/orca runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh ssh:gpu-vm|orca-ssh::/w/remote-x local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/w/Zeta local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=api::/w/api-y@runtime:env-1 3=orca::/orca 4=api::/api@runtime:env-1 5=ext::/ext 6=lab::/lab 7=orca-ssh::/orca-ssh 8=orca-ssh::/w/remote-x@ssh:gpu-vm 9=shared::/w/same@local
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=api::/w/api-y@runtime:env-1 3=orca::/orca 4=api::/api@runtime:env-1 5=ext::/ext 6=lab::/lab 7=orca-ssh::/orca-ssh 8=orca-ssh::/w/remote-x@ssh:gpu-vm 9=shared::/w/same@local
+cmd ids unmounted: orca::/w/feat-a api::/w/api-y orca::/orca api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same orca::/w/Zeta folder:fw-review folder:fw-notes folder:fw-remote
+=== sort=recent groupBy=repo pinnedInGroups=false ===
+visible: orca::/w/feat-a api::/w/api-y orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=3 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+ITEM rowKey=project:p-orca:|orca::/orca depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca-ssh::/orca-ssh depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/Zeta depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+ITEM rowKey=project:repo:lab:|lab::/lab depth=0 groupDepth=2 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab path=project-group:pg-work>project-group:pg-nested>project:repo:lab
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=1 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+SECTION project:repo:empty: -
+renderedKeys: 33
+placeholders: empty
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh |orca::/w/Zeta |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/api runtime:env-1|api::/w/api-y local|shared::/w/same |ext::/ext
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=orca::/orca 8=orca-ssh::/orca-ssh 9=orca::/w/Zeta
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=orca::/orca 8=orca-ssh::/orca-ssh 9=orca::/w/Zeta
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x shared::/w/same orca::/orca orca-ssh::/orca-ssh orca::/w/Zeta lab::/lab folder:fw-review folder:fw-notes folder:fw-remote api::/api api::/w/api-y ext::/ext
+-- collapsed: pinned project:p-orca project:repo:lab project-group:pg-remote-folders project:repo:shared project:repo:empty lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a api::/w/api-y orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=3 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=1 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION project:p-orca: project:p-orca:|orca::/orca project:p-orca:|orca-ssh::/orca-ssh project:p-orca:|orca::/w/Zeta
+SECTION project:repo:lab: project:repo:lab:|lab::/lab
+SECTION project:repo:shared: project:repo:shared:local|shared::/w/same
+SECTION project:repo:empty: -
+renderedKeys: 20
+placeholders: empty
+selectionOrder: local|folder:fw-review local|folder:fw-notes runtime:env-1|api::/api runtime:env-1|api::/w/api-y |ext::/ext
+cmd1-9 mounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1 5=ext::/ext
+cmd1-9 unmounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1 5=ext::/ext
+cmd ids unmounted: folder:fw-review folder:fw-notes api::/api api::/w/api-y ext::/ext
+=== sort=recent groupBy=repo pinnedInGroups=true ===
+visible: orca::/w/feat-a api::/w/api-y orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=8 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+ITEM rowKey=project:p-orca:|orca::/orca depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca-ssh::/orca-ssh depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/feat-a depth=0 groupDepth=1 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/feat-b depth=1 groupDepth=1 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-a
+ITEM rowKey=project:p-orca:|orca::/w/feat-c depth=2 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-b
+ITEM rowKey=project:p-orca:|lab::/w/gitlab-mr depth=1 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab path=project-group:pg-work>project:p-orca parent=project:p-orca:|orca::/w/feat-a
+ITEM rowKey=project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+ITEM rowKey=project:p-orca:|orca::/w/Zeta depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+ITEM rowKey=project:repo:lab:|lab::/lab depth=0 groupDepth=2 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab path=project-group:pg-work>project-group:pg-nested>project:repo:lab
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=2 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=project:repo:shared:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+SECTION project:repo:empty: -
+PREFERRED |orca::/w/feat-a -> project:p-orca:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> project:p-orca:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> project:p-orca:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> project:p-orca:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> project:repo:shared:ssh:gpu-vm|shared::/w/same
+renderedKeys: 39
+placeholders: empty
+selectionOrder: |orca::/orca |orca-ssh::/orca-ssh |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x |orca::/w/Zeta |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/api runtime:env-1|api::/w/api-y local|shared::/w/same ssh:gpu-vm|shared::/w/same |ext::/ext
+cmd1-9 mounted: 1=orca::/orca 2=orca-ssh::/orca-ssh 3=orca::/w/feat-a#lineage:orca::/w/feat-a 4=orca::/w/feat-b#lineage:orca::/w/feat-b 5=orca::/w/feat-c 6=lab::/w/gitlab-mr 7=orca-ssh::/w/remote-x@ssh:gpu-vm 8=orca::/w/Zeta 9=lab::/lab
+cmd1-9 unmounted: 1=orca::/orca 2=orca-ssh::/orca-ssh 3=orca::/w/feat-a 4=orca::/w/feat-b 5=orca::/w/feat-c 6=lab::/w/gitlab-mr 7=orca-ssh::/w/remote-x@ssh:gpu-vm 8=orca::/w/Zeta 9=lab::/lab
+cmd ids unmounted: orca::/orca orca-ssh::/orca-ssh orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x orca::/w/Zeta lab::/lab folder:fw-review folder:fw-notes folder:fw-remote api::/api api::/w/api-y shared::/w/same ext::/ext
+-- collapsed: pinned project:p-orca project:repo:lab project-group:pg-remote-folders project:repo:shared project:repo:empty lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a api::/w/api-y orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=project-group:pg-work label="Work" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-work projectGroupDepth=0
+HEADER key=project:p-orca label="orca" count=8 tone="text-foreground" icon=FolderTree repo=orca projectGroupDepth=1
+HEADER key=project-group:pg-nested label="Nested" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-nested projectGroupDepth=1
+HEADER key=project:repo:lab label="lab" count=1 tone="text-foreground" icon=FolderTree repo=lab projectGroupDepth=2
+HEADER key=project-group:pg-folders label="Folders" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-folders projectGroupDepth=0
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=1
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=1
+HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0
+HEADER key=project:repo:api label="api" count=2 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=project:repo:shared label="shared" count=2 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0
+HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0
+IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden
+ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION project:p-orca: project:p-orca:|orca::/orca project:p-orca:|orca-ssh::/orca-ssh project:p-orca:|orca::/w/feat-a project:p-orca:|orca::/w/feat-b project:p-orca:|orca::/w/feat-c project:p-orca:|lab::/w/gitlab-mr project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x project:p-orca:|orca::/w/Zeta
+SECTION project:repo:lab: project:repo:lab:|lab::/lab
+SECTION project:repo:shared: project:repo:shared:local|shared::/w/same project:repo:shared:ssh:gpu-vm|shared::/w/same
+SECTION project:repo:empty: -
+PREFERRED |orca::/w/feat-a -> project:p-orca:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> project:p-orca:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> project:p-orca:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> project:p-orca:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> project:repo:shared:ssh:gpu-vm|shared::/w/same
+renderedKeys: 20
+placeholders: empty
+selectionOrder: local|folder:fw-review local|folder:fw-notes runtime:env-1|api::/api runtime:env-1|api::/w/api-y |ext::/ext
+cmd1-9 mounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1 5=ext::/ext
+cmd1-9 unmounted: 1=folder:fw-review@local 2=folder:fw-notes@local 3=api::/api@runtime:env-1 4=api::/w/api-y@runtime:env-1 5=ext::/ext
+cmd ids unmounted: folder:fw-review folder:fw-notes api::/api api::/w/api-y ext::/ext
+=== sort=recent groupBy=workspace-status pinnedInGroups=false ===
+visible: orca::/w/feat-a api::/w/api-y orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=workspace-status:in-progress label="In progress" count=8 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:5 runtime:env-1:1 ssh:gpu-vm:2} hostIds={local:[orca::/orca,ext::/ext,lab::/lab,shared::/w/same] runtime:env-1:[api::/api] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[orca::/orca,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,shared::/w/same]
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=1 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:1} hostIds={local:[]} ids=[]
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[api::/w/api-y,orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+SECTION workspace-status:in-review: -
+renderedKeys: 25
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same |orca::/orca runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh local|shared::/w/same local|folder:fw-notes ssh:gpu-vm|folder:fw-remote local|folder:fw-review runtime:env-1|api::/w/api-y |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=orca::/orca 8=api::/api@runtime:env-1 9=ext::/ext
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=shared::/w/same@local 8=orca::/orca 9=api::/api@runtime:env-1
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x shared::/w/same orca::/orca api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh folder:fw-notes folder:fw-remote folder:fw-review api::/w/api-y orca::/w/Zeta
+-- collapsed: pinned workspace-status:in-review lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a api::/w/api-y orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=workspace-status:in-progress label="In progress" count=8 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:5 runtime:env-1:1 ssh:gpu-vm:2} hostIds={local:[orca::/orca,ext::/ext,lab::/lab,shared::/w/same] runtime:env-1:[api::/api] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[orca::/orca,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,shared::/w/same]
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=1 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:1} hostIds={local:[]} ids=[]
+HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[api::/w/api-y,orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION workspace-status:in-review: -
+renderedKeys: 17
+placeholders: -
+selectionOrder: |orca::/orca runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh local|shared::/w/same local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/w/api-y |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/orca 2=api::/api@runtime:env-1 3=ext::/ext 4=lab::/lab 5=orca-ssh::/orca-ssh 6=shared::/w/same@local 7=folder:fw-notes@local 8=folder:fw-remote@ssh:gpu-vm 9=api::/w/api-y@runtime:env-1
+cmd1-9 unmounted: 1=orca::/orca 2=api::/api@runtime:env-1 3=ext::/ext 4=lab::/lab 5=orca-ssh::/orca-ssh 6=shared::/w/same@local 7=folder:fw-notes@local 8=folder:fw-remote@ssh:gpu-vm 9=api::/w/api-y@runtime:env-1
+cmd ids unmounted: orca::/orca api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh shared::/w/same folder:fw-notes folder:fw-remote api::/w/api-y orca::/w/Zeta
+=== sort=recent groupBy=workspace-status pinnedInGroups=true ===
+visible: orca::/w/feat-a api::/w/api-y orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=workspace-status:in-progress label="In progress" count=13 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:8 runtime:env-1:1 ssh:gpu-vm:4} hostIds={local:[orca::/w/feat-a,orca::/orca,orca::/w/feat-c,lab::/w/gitlab-mr,ext::/ext,lab::/lab,shared::/w/same] runtime:env-1:[api::/api] ssh:gpu-vm:[orca-ssh::/orca-ssh,orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/orca,orca::/w/feat-c,lab::/w/gitlab-mr,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,orca-ssh::/w/remote-x,shared::/w/same,shared::/w/same]
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-a depth=0 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab parent=workspace-status:in-progress:|orca::/w/feat-a
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=2 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:2} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+ITEM rowKey=workspace-status:in-review:|orca::/w/feat-b depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[api::/w/api-y,orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+PREFERRED |orca::/w/feat-a -> workspace-status:in-progress:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> workspace-status:in-review:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> workspace-status:in-progress:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> workspace-status:in-progress:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> workspace-status:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 31
+placeholders: -
+selectionOrder: |orca::/w/feat-a |lab::/w/gitlab-mr |orca::/orca |orca::/w/feat-c runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh ssh:gpu-vm|orca-ssh::/w/remote-x local|shared::/w/same ssh:gpu-vm|shared::/w/same local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/feat-b local|folder:fw-review runtime:env-1|api::/w/api-y |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca::/orca 4=orca::/w/feat-c 5=api::/api@runtime:env-1 6=ext::/ext 7=lab::/lab 8=orca-ssh::/orca-ssh 9=orca-ssh::/w/remote-x@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca::/orca 4=orca::/w/feat-c 5=api::/api@runtime:env-1 6=ext::/ext 7=lab::/lab 8=orca-ssh::/orca-ssh 9=orca-ssh::/w/remote-x@ssh:gpu-vm
+cmd ids unmounted: orca::/w/feat-a lab::/w/gitlab-mr orca::/orca orca::/w/feat-c api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same folder:fw-notes folder:fw-remote orca::/w/feat-b folder:fw-review api::/w/api-y orca::/w/Zeta
+-- collapsed: pinned workspace-status:in-review lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a api::/w/api-y orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=workspace-status:in-progress label="In progress" count=13 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:8 runtime:env-1:1 ssh:gpu-vm:4} hostIds={local:[orca::/w/feat-a,orca::/orca,orca::/w/feat-c,lab::/w/gitlab-mr,ext::/ext,lab::/lab,shared::/w/same] runtime:env-1:[api::/api] ssh:gpu-vm:[orca-ssh::/orca-ssh,orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/orca,orca::/w/feat-c,lab::/w/gitlab-mr,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,orca-ssh::/w/remote-x,shared::/w/same,shared::/w/same]
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-a depth=0 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-a lineageCollapsed=true hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:in-progress:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=workspace-status:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=workspace-status:in-review label="In review" count=2 tone="text-[#16a34a]" icon=ConductorReviewIcon hostCounts={local:2} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" icon=ConductorDoneIcon hostCounts={runtime:env-1:1 local:1} hostIds={runtime:env-1:[api::/w/api-y] local:[orca::/w/Zeta]} ids=[api::/w/api-y,orca::/w/Zeta]
+ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION workspace-status:in-progress: workspace-status:in-progress:|orca::/w/feat-a workspace-status:in-progress:|lab::/w/gitlab-mr workspace-status:in-progress:|orca::/orca workspace-status:in-progress:|orca::/w/feat-c workspace-status:in-progress:runtime:env-1|api::/api workspace-status:in-progress:|ext::/ext workspace-status:in-progress:|lab::/lab workspace-status:in-progress:|orca-ssh::/orca-ssh workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x workspace-status:in-progress:local|shared::/w/same workspace-status:in-progress:ssh:gpu-vm|shared::/w/same
+SECTION workspace-status:in-review: workspace-status:in-review:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-a -> workspace-status:in-progress:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> workspace-status:in-review:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> workspace-status:in-progress:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> workspace-status:in-progress:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> workspace-status:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 21
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/orca |orca::/w/feat-c runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh ssh:gpu-vm|orca-ssh::/w/remote-x local|shared::/w/same ssh:gpu-vm|shared::/w/same local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/w/api-y |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/orca 3=orca::/w/feat-c 4=api::/api@runtime:env-1 5=ext::/ext 6=lab::/lab 7=orca-ssh::/orca-ssh 8=orca-ssh::/w/remote-x@ssh:gpu-vm 9=shared::/w/same@local
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/orca 3=orca::/w/feat-c 4=api::/api@runtime:env-1 5=ext::/ext 6=lab::/lab 7=orca-ssh::/orca-ssh 8=orca-ssh::/w/remote-x@ssh:gpu-vm 9=shared::/w/same@local
+cmd ids unmounted: orca::/w/feat-a orca::/orca orca::/w/feat-c api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same folder:fw-notes folder:fw-remote api::/w/api-y orca::/w/Zeta
+=== sort=recent groupBy=pr-status pinnedInGroups=false ===
+visible: orca::/w/feat-a api::/w/api-y orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=pr:in-review label="In review" count=1 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={runtime:env-1:1} hostIds={runtime:env-1:[api::/w/api-y]} ids=[api::/w/api-y]
+ITEM rowKey=pr:in-review:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=pr:in-progress label="In progress" count=9 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={local:6 runtime:env-1:1 ssh:gpu-vm:2} hostIds={local:[orca::/orca,ext::/ext,lab::/lab,shared::/w/same] runtime:env-1:[api::/api] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[orca::/orca,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,shared::/w/same]
+ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=pr:in-progress:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=pr:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=pr:closed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+renderedKeys: 25
+placeholders: -
+selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same runtime:env-1|api::/w/api-y |orca::/orca runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh local|shared::/w/same local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=api::/w/api-y@runtime:env-1 8=orca::/orca 9=api::/api@runtime:env-1
+cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=shared::/w/same@ssh:gpu-vm 7=api::/w/api-y@runtime:env-1 8=shared::/w/same@local 9=orca::/orca
+cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x shared::/w/same api::/w/api-y orca::/orca api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh folder:fw-review folder:fw-notes folder:fw-remote orca::/w/Zeta
+-- collapsed: pinned pr:in-progress lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a api::/w/api-y orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=pr:in-review label="In review" count=1 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={runtime:env-1:1} hostIds={runtime:env-1:[api::/w/api-y]} ids=[api::/w/api-y]
+ITEM rowKey=pr:in-review:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=pr:in-progress label="In progress" count=9 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={local:6 runtime:env-1:1 ssh:gpu-vm:2} hostIds={local:[orca::/orca,ext::/ext,lab::/lab,shared::/w/same] runtime:env-1:[api::/api] ssh:gpu-vm:[orca-ssh::/orca-ssh]} ids=[orca::/orca,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,shared::/w/same]
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=pr:closed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION pr:in-progress: pr:in-progress:|orca::/orca pr:in-progress:runtime:env-1|api::/api pr:in-progress:|ext::/ext pr:in-progress:|lab::/lab pr:in-progress:|orca-ssh::/orca-ssh pr:in-progress:local|shared::/w/same
+renderedKeys: 7
+placeholders: -
+selectionOrder: runtime:env-1|api::/w/api-y |orca::/w/Zeta
+cmd1-9 mounted: 1=api::/w/api-y@runtime:env-1 2=orca::/w/Zeta
+cmd1-9 unmounted: 1=api::/w/api-y@runtime:env-1 2=orca::/w/Zeta
+cmd ids unmounted: api::/w/api-y orca::/w/Zeta
+=== sort=recent groupBy=pr-status pinnedInGroups=true ===
+visible: orca::/w/feat-a api::/w/api-y orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:|orca::/w/feat-b depth=1 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-b hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=pinned owning=project:p-orca parent=pinned:|orca::/w/feat-b
+ITEM rowKey=pinned:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=pinned owning=project:repo:lab parent=pinned:|orca::/w/feat-a
+ITEM rowKey=pinned:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=pinned owning=project:p-orca
+ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=pinned owning=project:repo:shared
+HEADER key=pr:done label="Done" count=1 tone="text-workspace-status-done" icon=ConductorDoneIcon hostCounts={local:1} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+ITEM rowKey=pr:done:|orca::/w/feat-b depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+HEADER key=pr:in-review label="In review" count=2 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={local:1 runtime:env-1:1} hostIds={local:[orca::/w/feat-a] runtime:env-1:[api::/w/api-y]} ids=[orca::/w/feat-a,api::/w/api-y]
+ITEM rowKey=pr:in-review:|orca::/w/feat-a depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-review:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+HEADER key=pr:in-progress label="In progress" count=13 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={local:8 runtime:env-1:1 ssh:gpu-vm:4} hostIds={local:[orca::/orca,orca::/w/feat-c,lab::/w/gitlab-mr,ext::/ext,lab::/lab,shared::/w/same] runtime:env-1:[api::/api] ssh:gpu-vm:[orca-ssh::/orca-ssh,orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/orca,orca::/w/feat-c,lab::/w/gitlab-mr,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,orca-ssh::/w/remote-x,shared::/w/same,shared::/w/same]
+ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|lab::/w/gitlab-mr depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=pr:in-progress:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=pr:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+ITEM rowKey=pr:closed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+PREFERRED |orca::/w/feat-a -> pr:in-review:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> pr:done:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> pr:in-progress:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> pr:in-progress:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> pr:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 32
+placeholders: -
+selectionOrder: |orca::/w/feat-b |orca::/w/feat-a runtime:env-1|api::/w/api-y |orca::/orca |orca::/w/feat-c |lab::/w/gitlab-mr runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh ssh:gpu-vm|orca-ssh::/w/remote-x local|shared::/w/same ssh:gpu-vm|shared::/w/same local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/Zeta
+cmd1-9 mounted: 1=orca::/w/feat-b#lineage:orca::/w/feat-b 2=orca::/w/feat-a#lineage:orca::/w/feat-a 3=api::/w/api-y@runtime:env-1 4=orca::/orca 5=orca::/w/feat-c 6=lab::/w/gitlab-mr 7=api::/api@runtime:env-1 8=ext::/ext 9=lab::/lab
+cmd1-9 unmounted: 1=orca::/w/feat-b 2=orca::/w/feat-a 3=api::/w/api-y@runtime:env-1 4=orca::/orca 5=orca::/w/feat-c 6=lab::/w/gitlab-mr 7=api::/api@runtime:env-1 8=ext::/ext 9=lab::/lab
+cmd ids unmounted: orca::/w/feat-b orca::/w/feat-a api::/w/api-y orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same folder:fw-review folder:fw-notes folder:fw-remote orca::/w/Zeta
+-- collapsed: pinned pr:in-review pr:closed lineage:orca::/w/feat-a --
+visible: orca::/w/feat-a api::/w/api-y orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same shared::/w/same orca::/w/Zeta
+PENDING key=pending:creation-1 creation=creation-1 repo=api
+HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca::/w/feat-b,orca::/w/feat-c,lab::/w/gitlab-mr,orca-ssh::/w/remote-x,shared::/w/same]
+HEADER key=pr:done label="Done" count=1 tone="text-workspace-status-done" icon=ConductorDoneIcon hostCounts={local:1} hostIds={local:[orca::/w/feat-b]} ids=[orca::/w/feat-b]
+ITEM rowKey=pr:done:|orca::/w/feat-b depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+HEADER key=pr:in-review label="In review" count=2 tone="text-workspace-status-review" icon=ConductorReviewIcon hostCounts={local:1 runtime:env-1:1} hostIds={local:[orca::/w/feat-a] runtime:env-1:[api::/w/api-y]} ids=[orca::/w/feat-a,api::/w/api-y]
+HEADER key=pr:in-progress label="In progress" count=13 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={local:8 runtime:env-1:1 ssh:gpu-vm:4} hostIds={local:[orca::/orca,orca::/w/feat-c,lab::/w/gitlab-mr,ext::/ext,lab::/lab,shared::/w/same] runtime:env-1:[api::/api] ssh:gpu-vm:[orca-ssh::/orca-ssh,orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/orca,orca::/w/feat-c,lab::/w/gitlab-mr,api::/api,ext::/ext,lab::/lab,orca-ssh::/orca-ssh,orca-ssh::/w/remote-x,shared::/w/same,shared::/w/same]
+ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:|lab::/w/gitlab-mr depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api
+ITEM rowKey=pr:in-progress:|ext::/ext depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext
+ITEM rowKey=pr:in-progress:|lab::/lab depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab
+ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca
+ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared
+ITEM rowKey=pr:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared
+FOLDER key=folder-workspace:fw-review projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-notes projectGroup=pg-folders depth=0 groupDepth=0
+FOLDER key=folder-workspace:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0
+HEADER key=pr:closed label="Closed" count=1 tone="text-zinc-600 dark:text-zinc-300" icon=CircleX hostCounts={local:1} hostIds={local:[orca::/w/Zeta]} ids=[orca::/w/Zeta]
+SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same
+SECTION pr:in-review: pr:in-review:|orca::/w/feat-a pr:in-review:runtime:env-1|api::/w/api-y
+SECTION pr:closed: pr:closed:|orca::/w/Zeta
+PREFERRED |orca::/w/feat-a -> pr:in-review:|orca::/w/feat-a
+PREFERRED |orca::/w/feat-b -> pr:done:|orca::/w/feat-b
+PREFERRED |orca::/w/feat-c -> pr:in-progress:|orca::/w/feat-c
+PREFERRED |lab::/w/gitlab-mr -> pr:in-progress:|lab::/w/gitlab-mr
+PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x
+PREFERRED ssh:gpu-vm|shared::/w/same -> pr:in-progress:ssh:gpu-vm|shared::/w/same
+renderedKeys: 23
+placeholders: -
+selectionOrder: |orca::/w/feat-b |orca::/orca |orca::/w/feat-c |lab::/w/gitlab-mr runtime:env-1|api::/api |ext::/ext |lab::/lab |orca-ssh::/orca-ssh ssh:gpu-vm|orca-ssh::/w/remote-x local|shared::/w/same ssh:gpu-vm|shared::/w/same local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote
+cmd1-9 mounted: 1=orca::/w/feat-b 2=orca::/orca 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=api::/api@runtime:env-1 6=ext::/ext 7=lab::/lab 8=orca-ssh::/orca-ssh 9=orca-ssh::/w/remote-x@ssh:gpu-vm
+cmd1-9 unmounted: 1=orca::/w/feat-b 2=orca::/orca 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=api::/api@runtime:env-1 6=ext::/ext 7=lab::/lab 8=orca-ssh::/orca-ssh 9=orca-ssh::/w/remote-x@ssh:gpu-vm
+cmd ids unmounted: orca::/w/feat-b orca::/orca orca::/w/feat-c lab::/w/gitlab-mr api::/api ext::/ext lab::/lab orca-ssh::/orca-ssh orca-ssh::/w/remote-x shared::/w/same folder:fw-review folder:fw-notes folder:fw-remote
diff --git a/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/unranked-rows-last.txt b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/unranked-rows-last.txt
new file mode 100644
index 000000000000..479bafbb6076
--- /dev/null
+++ b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/unranked-rows-last.txt
@@ -0,0 +1,3 @@
+sorted [orca::/w/Zeta orca::/w/feat-a] -> orca::/w/Zeta orca::/w/feat-a orca::/orca orca::/w/feat-b orca::/w/feat-c orca-ssh::/orca-ssh orca-ssh::/w/remote-x api::/api api::/w/api-y lab::/lab lab::/w/gitlab-mr shared::/w/same shared::/w/same ext::/ext
+sorted [orca::/w/feat-a] -> orca::/w/feat-a orca::/orca orca::/w/feat-b orca::/w/feat-c orca::/w/Zeta orca-ssh::/orca-ssh orca-ssh::/w/remote-x api::/api api::/w/api-y lab::/lab lab::/w/gitlab-mr shared::/w/same shared::/w/same ext::/ext
+sorted [] -> orca::/orca orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c orca::/w/Zeta orca-ssh::/orca-ssh orca-ssh::/w/remote-x api::/api api::/w/api-y lab::/lab lab::/w/gitlab-mr shared::/w/same shared::/w/same ext::/ext
diff --git a/src/renderer/src/components/sidebar/sidebar-list-golden-suite.test-fixture.tsx b/src/renderer/src/components/sidebar/sidebar-list-golden-suite.test-fixture.tsx
new file mode 100644
index 000000000000..3c10c0d3a60a
--- /dev/null
+++ b/src/renderer/src/components/sidebar/sidebar-list-golden-suite.test-fixture.tsx
@@ -0,0 +1,360 @@
+/** The sidebar row model golden suite; each build switch runs it into its own directory. */
+import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
+import { cleanup, renderHook } from '@testing-library/react'
+import { useMemo } from 'react'
+import { useShallow } from 'zustand/react/shallow'
+import { useAppStore } from '@/store'
+import {
+ getRepoMapFromState,
+ useProjectHostSetupProjection,
+ useRepoMap,
+ useWorktreeMap
+} from '@/store/selectors'
+import type { AppState } from '@/store/types'
+import { getSettingsFocusedExecutionHostId } from '../../../../shared/execution-host'
+import { getPinnedWorktreeDisplayPolicy } from '../../../../shared/sidebar-list/row-types'
+import { selectWorktreeListReviewCacheInputs } from './worktree-list/listing/review-cache-inputs'
+import { useAgentSendTargetWorktreeId } from './worktree-list/listing/use-agent-send-target'
+import { useSidebarExternalWorktreeCards } from './worktree-list/listing/use-external-worktree-cards'
+import { useSidebarHostVisibleScope } from './worktree-list/listing/use-host-visible-scope'
+import { useSidebarSectionRows } from './worktree-list/listing/use-section-rows'
+import { useSidebarWorktreeFilters } from './worktree-list/listing/use-filters'
+import { useSidebarWorktreeSelection } from './worktree-list/navigation/use-selection'
+import { useSidebarWorktreeSortOrder } from './worktree-list/listing/use-sort-order'
+import { useVisibleSidebarWorktrees } from './worktree-list/listing/use-visible-worktrees'
+import { EMPTY_PROJECT_GROUPS } from './worktree-list/viewport/viewport-props'
+import {
+ getPublishedVisibleWorktreeShortcutTargets,
+ getVisibleWorktreeIds,
+ getVisibleWorktreeShortcutTargets
+} from './visible-worktrees'
+import { computeVisibleWorktreeIds } from './compute-visible-worktrees'
+import { buildVisibleWorktreeOptionsFromState } from './visible-worktree-options-from-state'
+import { GOLDEN_NOW } from './sidebar-list-golden-factories.test-fixture'
+import {
+ GOLDEN_WORKTREE_IDS,
+ buildGoldenStoreState,
+ goldenInboxState,
+ goldenLiveTerminalState,
+ type GoldenView
+} from './sidebar-list-golden-store.test-fixture'
+import { goldenNameOrderState } from './sidebar-list-golden-name-order.test-fixture'
+import {
+ serializeOccurrencePlan,
+ serializeShortcutTargets,
+ serializeSidebarRow
+} from './sidebar-list-golden-serialize.test-fixture'
+
+export const initialState = useAppStore.getInitialState()
+
+/** The WorktreeList row pipeline, hook for hook, without the virtualized viewport. */
+function useGoldenSidebarPipeline() {
+ const repoMap = useRepoMap()
+ const worktreeMap = useWorktreeMap()
+ const repos = useAppStore((s) => s.repos)
+ const worktreeLineageById = useAppStore((s) => s.worktreeLineageById)
+ const detectedWorktreesByRepo = useAppStore((s) => s.detectedWorktreesByRepo)
+ const groupBy = useAppStore((s) => s.groupBy)
+ const workspaceStatuses = useAppStore((s) => s.workspaceStatuses)
+ const sortBy = useAppStore((s) => s.sortBy)
+ const projectOrderBy = useAppStore((s) => s.projectOrderBy)
+ const collapsedGroups = useAppStore((s) => s.collapsedGroups)
+ const projectGroups = useAppStore((s) => s.projectGroups ?? EMPTY_PROJECT_GROUPS)
+ const folderWorkspaces = useAppStore((s) => s.folderWorkspaces)
+ const settings = useAppStore((s) => s.settings)
+ const cardProps = useAppStore((s) => s.worktreeCardProperties)
+ const { prCache } = useAppStore(
+ useShallow((s) => selectWorktreeListReviewCacheInputs(s, groupBy, cardProps))
+ )
+ const pinnedDisplayPolicy = getPinnedWorktreeDisplayPolicy(settings)
+ const defaultHostId = getSettingsFocusedExecutionHostId(settings)
+ const projection = useProjectHostSetupProjection()
+ const projectGrouping = useMemo(
+ () => ({ projects: projection.projects, projectHostSetups: projection.setups }),
+ [projection]
+ )
+ const agentSendTargetWorktreeId = useAgentSendTargetWorktreeId()
+ const { filterState } = useSidebarWorktreeFilters()
+ const sortedIds = useSidebarWorktreeSortOrder({ repoMap, sortBy })
+ const { visibleWorktrees, pairedDeviceIdsByEnvironment } = useVisibleSidebarWorktrees({
+ filterState,
+ sortBy,
+ sortedIds,
+ repoMap,
+ worktreeLineageById,
+ defaultHostId,
+ agentSendTargetWorktreeId
+ })
+ const visibleScope = useSidebarHostVisibleScope({
+ filterState,
+ defaultHostId,
+ repos,
+ projectGroups,
+ folderWorkspaces,
+ pairedDeviceIdsByEnvironment
+ })
+ const externalWorktreeCards = useSidebarExternalWorktreeCards({
+ repos,
+ visibleReposForRows: visibleScope.visibleReposForRows,
+ detectedWorktreesByRepo,
+ filterRepoIds: filterState.filterRepoIds
+ })
+ const rowModel = useSidebarSectionRows({
+ groupBy,
+ projectOrderBy,
+ pinnedDisplayPolicy,
+ defaultHostId,
+ worktrees: visibleWorktrees,
+ repos,
+ repoMap,
+ worktreeMap,
+ worktreeLineageById,
+ prCache,
+ settings,
+ workspaceStatuses,
+ effectiveCollapsedGroups: collapsedGroups,
+ agentSendTargetWorktreeId,
+ projectGrouping,
+ visibleReposForRows: visibleScope.visibleReposForRows,
+ visibleProjectGroupsForRows: visibleScope.visibleProjectGroupsForRows,
+ visibleFolderWorkspacesForRows: visibleScope.visibleFolderWorkspacesForRows,
+ importedWorktreesByRepo: externalWorktreeCards.importedWorktreesByRepo,
+ newExternalWorktreesInboxByRepo: externalWorktreeCards.newExternalWorktreesInboxByRepo,
+ filterRepoIds: filterState.filterRepoIds,
+ visibleWorkspaceHostIds: filterState.visibleWorkspaceHostIds,
+ workspaceHostScope: filterState.workspaceHostScope
+ })
+ const selection = useSidebarWorktreeSelection({
+ sectionRows: rowModel.sectionRows,
+ pinnedDisplayPolicy
+ })
+ return { visibleWorktrees, rowModel, selection }
+}
+
+function captureGolden(state: Partial): string {
+ useAppStore.setState(state)
+ const { result, unmount } = renderHook(() => useGoldenSidebarPipeline())
+ const { visibleWorktrees, rowModel, selection } = result.current
+ const statuses = useAppStore.getState().workspaceStatuses
+ const lines = [
+ `visible: ${visibleWorktrees.map((worktree) => worktree.id).join(' ') || '-'}`,
+ ...rowModel.sectionRows.map((row) => serializeSidebarRow(row, statuses))
+ ]
+ if (rowModel.sectionRows.length !== rowModel.rows.length) {
+ lines.push(
+ '-- rows before host sections --',
+ ...rowModel.rows.map((row) => serializeSidebarRow(row, statuses))
+ )
+ }
+ lines.push(
+ ...serializeOccurrencePlan(
+ rowModel.occurrencePlan,
+ new Set(rowModel.sectionRows.flatMap((row) => (row.type === 'item' ? [row.rowKey] : [])))
+ ),
+ `renderedKeys: ${rowModel.renderedSidebarRowKeys.size}`,
+ `placeholders: ${[...rowModel.placeholderRepoIds].join(' ') || '-'}`,
+ `selectionOrder: ${selection.renderedWorktreeIdentities.join(' ') || '-'}`,
+ `cmd1-9 mounted: ${serializeShortcutTargets(getPublishedVisibleWorktreeShortcutTargets())}`
+ )
+ unmount()
+ lines.push(
+ `cmd1-9 unmounted: ${serializeShortcutTargets(getVisibleWorktreeShortcutTargets())}`,
+ `cmd ids unmounted: ${getVisibleWorktreeIds().join(' ') || '-'}`
+ )
+ return lines.join('\n')
+}
+
+/** Collapses every other header and the first lineage parent, as read from the expanded output. */
+function collapsedKeysFrom(expanded: string): Set {
+ const keys: string[] = []
+ let lineageKey: string | null = null
+ for (const row of expanded.split('\n')) {
+ const header = /^(?:HEADER|HOST) key=(\S+)(?: collapseKey=(\S+))?/.exec(row)
+ if (header) {
+ keys.push(header[2] ?? header[1])
+ }
+ const lineage = / lineageKey=(\S+)/.exec(row)
+ if (!lineageKey && lineage) {
+ lineageKey = lineage[1]
+ }
+ }
+ const collapsed = new Set(keys.filter((_, index) => index % 2 === 0))
+ if (lineageKey) {
+ collapsed.add(lineageKey)
+ }
+ return collapsed
+}
+
+export const GROUP_BYS: AppState['groupBy'][] = ['none', 'repo', 'workspace-status', 'pr-status']
+const SORT_BYS: AppState['sortBy'][] = ['manual', 'name', 'recent', 'smart', 'repo']
+const PROJECT_ORDER_BYS: AppState['projectOrderBy'][] = ['manual', 'recent']
+
+/** Appends one labelled capture, or a pointer to the earlier identical one. */
+export function appendCapture(
+ sections: string[],
+ seen: Map,
+ label: string,
+ output: string
+) {
+ const earlier = seen.get(output)
+ if (earlier) {
+ sections.push(`=== ${label} === same as ${earlier}`)
+ return
+ }
+ seen.set(output, label)
+ sections.push(`=== ${label} ===`, output)
+}
+
+function viewLabel(view: GoldenView): string {
+ return `sort=${view.sortBy} projectOrder=${view.projectOrderBy} pinnedInGroups=${view.pinnedInGroups}`
+}
+
+export function captureScenario(view: GoldenView, overrides: Partial = {}): string {
+ const expanded = captureGolden(buildGoldenStoreState(view, overrides))
+ useAppStore.setState(initialState, true)
+ const collapsed = collapsedKeysFrom(expanded)
+ const collapsedOutput = captureGolden(
+ buildGoldenStoreState({ ...view, collapsedGroups: collapsed }, overrides)
+ )
+ return [expanded, `-- collapsed: ${[...collapsed].join(' ') || '-'} --`, collapsedOutput].join(
+ '\n'
+ )
+}
+
+/** The golden suite, writing its files under `goldenDir` (relative to the test file). */
+export function defineSidebarListGoldens(goldenDir: string): void {
+ describe('sidebar row model goldens', () => {
+ beforeEach(() => {
+ vi.useFakeTimers({ toFake: ['Date'] })
+ vi.setSystemTime(GOLDEN_NOW)
+ useAppStore.setState(initialState, true)
+ })
+
+ afterEach(() => {
+ cleanup()
+ useAppStore.setState(initialState, true)
+ vi.useRealTimers()
+ })
+
+ for (const groupBy of GROUP_BYS) {
+ it(`groupBy=${groupBy} across sort, project order and pinned policy`, async () => {
+ const sections: string[] = []
+ const seen = new Map()
+ for (const sortBy of SORT_BYS) {
+ for (const projectOrderBy of PROJECT_ORDER_BYS) {
+ for (const pinnedInGroups of [false, true]) {
+ const view: GoldenView = {
+ groupBy,
+ sortBy,
+ projectOrderBy,
+ pinnedInGroups,
+ collapsedGroups: new Set()
+ }
+ appendCapture(sections, seen, viewLabel(view), captureScenario(view))
+ useAppStore.setState(initialState, true)
+ }
+ }
+ }
+ await expect(`${sections.join('\n')}\n`).toMatchFileSnapshot(
+ `${goldenDir}/group-by-${groupBy}.txt`
+ )
+ })
+ }
+
+ const SCENARIOS: Record> = {
+ 'host-sections': {
+ visibleWorkspaceHostIds: ['local', 'ssh:gpu-vm', 'runtime:env-1']
+ },
+ 'single-host-scope': { workspaceHostScope: 'ssh:gpu-vm' },
+ 'repo-filter': { filterRepoIds: ['orca', 'lab'] },
+ 'hide-sleeping': { showSleepingWorkspaces: false, ...goldenLiveTerminalState() },
+ 'hide-default-branch': { hideDefaultBranchWorkspace: true },
+ 'new-external-inbox': goldenInboxState()
+ }
+
+ for (const [name, overrides] of Object.entries(SCENARIOS)) {
+ it(`scenario ${name} across groupBy and pinned policy`, async () => {
+ const sections: string[] = []
+ const seen = new Map()
+ for (const groupBy of GROUP_BYS) {
+ for (const pinnedInGroups of [false, true]) {
+ const view: GoldenView = {
+ groupBy,
+ sortBy: 'manual',
+ projectOrderBy: 'manual',
+ pinnedInGroups,
+ collapsedGroups: new Set()
+ }
+ appendCapture(
+ sections,
+ seen,
+ `groupBy=${groupBy} pinnedInGroups=${pinnedInGroups}`,
+ captureScenario(view, overrides)
+ )
+ useAppStore.setState(initialState, true)
+ }
+ }
+ await expect(`${sections.join('\n')}\n`).toMatchFileSnapshot(
+ `${goldenDir}/scenario-${name}.txt`
+ )
+ })
+ }
+
+ it('orders accented, mixed-case and numbered names across sorts and grouping', async () => {
+ const sections: string[] = []
+ const seen = new Map()
+ for (const groupBy of ['none', 'repo'] as const) {
+ for (const sortBy of ['name', 'recent', 'repo'] as const) {
+ for (const projectOrderBy of PROJECT_ORDER_BYS) {
+ const view: GoldenView = {
+ groupBy,
+ sortBy,
+ projectOrderBy,
+ pinnedInGroups: false,
+ collapsedGroups: new Set()
+ }
+ appendCapture(
+ sections,
+ seen,
+ `groupBy=${groupBy} sort=${sortBy} projectOrder=${projectOrderBy}`,
+ captureGolden(buildGoldenStoreState(view, goldenNameOrderState()))
+ )
+ useAppStore.setState(initialState, true)
+ }
+ }
+ }
+ await expect(`${sections.join('\n')}\n`).toMatchFileSnapshot(
+ `${goldenDir}/scenario-name-order.txt`
+ )
+ })
+
+ it('orders rows missing from the frozen sort order last', async () => {
+ const state = buildGoldenStoreState({
+ groupBy: 'none',
+ sortBy: 'manual',
+ projectOrderBy: 'manual',
+ pinnedInGroups: false,
+ collapsedGroups: new Set()
+ })
+ useAppStore.setState(state)
+ const fullState = useAppStore.getState()
+ const repoMap = getRepoMapFromState(fullState)
+ const options = buildVisibleWorktreeOptionsFromState(fullState, repoMap)
+ const lines = [
+ [GOLDEN_WORKTREE_IDS.orcaFeatD, GOLDEN_WORKTREE_IDS.orcaFeatA],
+ [GOLDEN_WORKTREE_IDS.orcaFeatA],
+ []
+ ].map(
+ (sortedIds) =>
+ `sorted [${sortedIds.join(' ')}] -> ${computeVisibleWorktreeIds(
+ fullState.worktreesByRepo,
+ sortedIds,
+ options
+ ).join(' ')}`
+ )
+ await expect(`${lines.join('\n')}\n`).toMatchFileSnapshot(
+ `${goldenDir}/unranked-rows-last.txt`
+ )
+ })
+ })
+}
diff --git a/src/renderer/src/components/sidebar/sidebar-list-goldens-stamp-order.test.tsx b/src/renderer/src/components/sidebar/sidebar-list-goldens-stamp-order.test.tsx
new file mode 100644
index 000000000000..7cf8fd0a335a
--- /dev/null
+++ b/src/renderer/src/components/sidebar/sidebar-list-goldens-stamp-order.test.tsx
@@ -0,0 +1,105 @@
+// @vitest-environment happy-dom
+
+/**
+ * The same goldens with ORCA_SIDEBAR_INPUTS=main, where Recent and Smart read the owning host's
+ * sort stamps; plus every Smart tier, which only a stamping host writes.
+ */
+import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
+import { cleanup } from '@testing-library/react'
+import { useAppStore } from '@/store'
+import type { AppState } from '@/store/types'
+import type { SmartStampFields } from '../../../../shared/sidebar-list/sort-stamps'
+import { GOLDEN_NOW } from './sidebar-list-golden-factories.test-fixture'
+import { buildGoldenStoreState, type GoldenView } from './sidebar-list-golden-store.test-fixture'
+import {
+ appendCapture,
+ captureScenario,
+ defineSidebarListGoldens,
+ GROUP_BYS,
+ initialState
+} from './sidebar-list-golden-suite.test-fixture'
+
+vi.mock('../../../../shared/sidebar-inputs-switch', () => ({ ORCA_SIDEBAR_INPUTS_IS_MAIN: true }))
+// Main's list session is a runtime call with no bearing on the rows.
+vi.mock('@/lib/sidebar-list-session', () => ({ useSidebarListSession: () => {} }))
+
+const GOLDEN_DIR = './__goldens__/sidebar-list-stamp-order'
+
+defineSidebarListGoldens(GOLDEN_DIR)
+
+// One row per tier and tie: two Done rows a second apart, two Working rows (the older one resumed
+// after an approval keeps the ask's time), and Rest rows that only Recent orders.
+const TIERS: Record = {
+ Zeta: { smartTier: 'needs-you', smartAt: GOLDEN_NOW - 600_000 },
+ 'feat-a': { smartTier: 'done', smartAt: GOLDEN_NOW - 60_000 },
+ 'api-y': { smartTier: 'done', smartAt: GOLDEN_NOW - 59_000 },
+ 'remote-x': { smartTier: 'working', smartAt: GOLDEN_NOW - 30_000 },
+ 'gitlab-mr': { smartTier: 'working', smartAt: GOLDEN_NOW - 900_000 }
+}
+
+function stampTierState(): Partial {
+ const base = buildGoldenStoreState({
+ groupBy: 'none',
+ sortBy: 'smart',
+ projectOrderBy: 'manual',
+ pinnedInGroups: false,
+ collapsedGroups: new Set()
+ })
+ const worktreesByRepo: AppState['worktreesByRepo'] = {}
+ for (const [repoId, worktrees] of Object.entries(base.worktreesByRepo ?? {})) {
+ worktreesByRepo[repoId] = worktrees.map((worktree) => {
+ const branch = worktree.branch.replace('refs/heads/', '')
+ return TIERS[branch] ? { ...worktree, ...TIERS[branch] } : worktree
+ })
+ }
+ return {
+ worktreesByRepo,
+ folderWorkspaces: (base.folderWorkspaces ?? []).map((folder) =>
+ folder.id === 'fw-notes'
+ ? { ...folder, smartTier: 'needs-you', smartAt: GOLDEN_NOW - 1_000 }
+ : folder
+ )
+ }
+}
+
+describe('sidebar row model goldens: stamp tiers', () => {
+ beforeEach(() => {
+ vi.useFakeTimers({ toFake: ['Date'] })
+ vi.setSystemTime(GOLDEN_NOW)
+ useAppStore.setState(initialState, true)
+ })
+
+ afterEach(() => {
+ cleanup()
+ useAppStore.setState(initialState, true)
+ vi.useRealTimers()
+ })
+
+ it('orders Needs you, Done, Working and Rest across groupBy and pinned policy', async () => {
+ const sections: string[] = []
+ const seen = new Map()
+ for (const sortBy of ['smart', 'recent'] as const) {
+ for (const groupBy of GROUP_BYS) {
+ for (const pinnedInGroups of [false, true]) {
+ const view: GoldenView = {
+ groupBy,
+ sortBy,
+ projectOrderBy: 'recent',
+ pinnedInGroups,
+ collapsedGroups: new Set()
+ }
+ appendCapture(
+ sections,
+ seen,
+ `sort=${sortBy} groupBy=${groupBy} pinnedInGroups=${pinnedInGroups}`,
+ captureScenario(view, stampTierState())
+ )
+ useAppStore.setState(initialState, true)
+ }
+ }
+ }
+ await expect(`${sections.join('\n')}\n`).toMatchFileSnapshot(
+ `${GOLDEN_DIR}/scenario-stamp-tiers.txt`
+ )
+ })
+})
diff --git a/src/renderer/src/components/sidebar/sidebar-list-goldens.test.tsx b/src/renderer/src/components/sidebar/sidebar-list-goldens.test.tsx
index 3cac6d7301b5..c610ac0b38ee 100644
--- a/src/renderer/src/components/sidebar/sidebar-list-goldens.test.tsx
+++ b/src/renderer/src/components/sidebar/sidebar-list-goldens.test.tsx
@@ -6,359 +6,6 @@
* correctness reference for any change that moves or reshapes that pipeline.
* A diff in these files is a visible change and needs its own review.
*/
-import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
-import { cleanup, renderHook } from '@testing-library/react'
-import { useMemo } from 'react'
-import { useShallow } from 'zustand/react/shallow'
-import { useAppStore } from '@/store'
-import {
- getRepoMapFromState,
- useProjectHostSetupProjection,
- useRepoMap,
- useWorktreeMap
-} from '@/store/selectors'
-import type { AppState } from '@/store/types'
-import { getSettingsFocusedExecutionHostId } from '../../../../shared/execution-host'
-import { getPinnedWorktreeDisplayPolicy } from '../../../../shared/sidebar-list/row-types'
-import { selectWorktreeListReviewCacheInputs } from './worktree-list/listing/review-cache-inputs'
-import { useAgentSendTargetWorktreeId } from './worktree-list/listing/use-agent-send-target'
-import { useSidebarExternalWorktreeCards } from './worktree-list/listing/use-external-worktree-cards'
-import { useSidebarHostVisibleScope } from './worktree-list/listing/use-host-visible-scope'
-import { useSidebarSectionRows } from './worktree-list/listing/use-section-rows'
-import { useSidebarWorktreeFilters } from './worktree-list/listing/use-filters'
-import { useSidebarWorktreeSelection } from './worktree-list/navigation/use-selection'
-import { useSidebarWorktreeSortOrder } from './worktree-list/listing/use-sort-order'
-import { useVisibleSidebarWorktrees } from './worktree-list/listing/use-visible-worktrees'
-import { EMPTY_PROJECT_GROUPS } from './worktree-list/viewport/viewport-props'
-import {
- getPublishedVisibleWorktreeShortcutTargets,
- getVisibleWorktreeIds,
- getVisibleWorktreeShortcutTargets
-} from './visible-worktrees'
-import { computeVisibleWorktreeIds } from './compute-visible-worktrees'
-import { buildVisibleWorktreeOptionsFromState } from './visible-worktree-options-from-state'
-import { GOLDEN_NOW } from './sidebar-list-golden-factories.test-fixture'
-import {
- GOLDEN_WORKTREE_IDS,
- buildGoldenStoreState,
- goldenInboxState,
- goldenLiveTerminalState,
- type GoldenView
-} from './sidebar-list-golden-store.test-fixture'
-import { goldenNameOrderState } from './sidebar-list-golden-name-order.test-fixture'
-import {
- serializeOccurrencePlan,
- serializeShortcutTargets,
- serializeSidebarRow
-} from './sidebar-list-golden-serialize.test-fixture'
+import { defineSidebarListGoldens } from './sidebar-list-golden-suite.test-fixture'
-const initialState = useAppStore.getInitialState()
-
-/** The WorktreeList row pipeline, hook for hook, without the virtualized viewport. */
-function useGoldenSidebarPipeline() {
- const repoMap = useRepoMap()
- const worktreeMap = useWorktreeMap()
- const repos = useAppStore((s) => s.repos)
- const worktreeLineageById = useAppStore((s) => s.worktreeLineageById)
- const detectedWorktreesByRepo = useAppStore((s) => s.detectedWorktreesByRepo)
- const groupBy = useAppStore((s) => s.groupBy)
- const workspaceStatuses = useAppStore((s) => s.workspaceStatuses)
- const sortBy = useAppStore((s) => s.sortBy)
- const projectOrderBy = useAppStore((s) => s.projectOrderBy)
- const collapsedGroups = useAppStore((s) => s.collapsedGroups)
- const projectGroups = useAppStore((s) => s.projectGroups ?? EMPTY_PROJECT_GROUPS)
- const folderWorkspaces = useAppStore((s) => s.folderWorkspaces)
- const settings = useAppStore((s) => s.settings)
- const cardProps = useAppStore((s) => s.worktreeCardProperties)
- const { prCache } = useAppStore(
- useShallow((s) => selectWorktreeListReviewCacheInputs(s, groupBy, cardProps))
- )
- const pinnedDisplayPolicy = getPinnedWorktreeDisplayPolicy(settings)
- const defaultHostId = getSettingsFocusedExecutionHostId(settings)
- const projection = useProjectHostSetupProjection()
- const projectGrouping = useMemo(
- () => ({ projects: projection.projects, projectHostSetups: projection.setups }),
- [projection]
- )
- const agentSendTargetWorktreeId = useAgentSendTargetWorktreeId()
- const { filterState } = useSidebarWorktreeFilters()
- const sortedIds = useSidebarWorktreeSortOrder({ repoMap, sortBy })
- const { visibleWorktrees, pairedDeviceIdsByEnvironment } = useVisibleSidebarWorktrees({
- filterState,
- sortBy,
- sortedIds,
- repoMap,
- worktreeLineageById,
- defaultHostId,
- agentSendTargetWorktreeId
- })
- const visibleScope = useSidebarHostVisibleScope({
- filterState,
- defaultHostId,
- repos,
- projectGroups,
- folderWorkspaces,
- pairedDeviceIdsByEnvironment
- })
- const externalWorktreeCards = useSidebarExternalWorktreeCards({
- repos,
- visibleReposForRows: visibleScope.visibleReposForRows,
- detectedWorktreesByRepo,
- filterRepoIds: filterState.filterRepoIds
- })
- const rowModel = useSidebarSectionRows({
- groupBy,
- projectOrderBy,
- pinnedDisplayPolicy,
- defaultHostId,
- worktrees: visibleWorktrees,
- repos,
- repoMap,
- worktreeMap,
- worktreeLineageById,
- prCache,
- settings,
- workspaceStatuses,
- effectiveCollapsedGroups: collapsedGroups,
- agentSendTargetWorktreeId,
- projectGrouping,
- visibleReposForRows: visibleScope.visibleReposForRows,
- visibleProjectGroupsForRows: visibleScope.visibleProjectGroupsForRows,
- visibleFolderWorkspacesForRows: visibleScope.visibleFolderWorkspacesForRows,
- importedWorktreesByRepo: externalWorktreeCards.importedWorktreesByRepo,
- newExternalWorktreesInboxByRepo: externalWorktreeCards.newExternalWorktreesInboxByRepo,
- filterRepoIds: filterState.filterRepoIds,
- visibleWorkspaceHostIds: filterState.visibleWorkspaceHostIds,
- workspaceHostScope: filterState.workspaceHostScope
- })
- const selection = useSidebarWorktreeSelection({
- sectionRows: rowModel.sectionRows,
- pinnedDisplayPolicy
- })
- return { visibleWorktrees, rowModel, selection }
-}
-
-function captureGolden(state: Partial): string {
- useAppStore.setState(state)
- const { result, unmount } = renderHook(() => useGoldenSidebarPipeline())
- const { visibleWorktrees, rowModel, selection } = result.current
- const statuses = useAppStore.getState().workspaceStatuses
- const lines = [
- `visible: ${visibleWorktrees.map((worktree) => worktree.id).join(' ') || '-'}`,
- ...rowModel.sectionRows.map((row) => serializeSidebarRow(row, statuses))
- ]
- if (rowModel.sectionRows.length !== rowModel.rows.length) {
- lines.push(
- '-- rows before host sections --',
- ...rowModel.rows.map((row) => serializeSidebarRow(row, statuses))
- )
- }
- lines.push(
- ...serializeOccurrencePlan(
- rowModel.occurrencePlan,
- new Set(rowModel.sectionRows.flatMap((row) => (row.type === 'item' ? [row.rowKey] : [])))
- ),
- `renderedKeys: ${rowModel.renderedSidebarRowKeys.size}`,
- `placeholders: ${[...rowModel.placeholderRepoIds].join(' ') || '-'}`,
- `selectionOrder: ${selection.renderedWorktreeIdentities.join(' ') || '-'}`,
- `cmd1-9 mounted: ${serializeShortcutTargets(getPublishedVisibleWorktreeShortcutTargets())}`
- )
- unmount()
- lines.push(
- `cmd1-9 unmounted: ${serializeShortcutTargets(getVisibleWorktreeShortcutTargets())}`,
- `cmd ids unmounted: ${getVisibleWorktreeIds().join(' ') || '-'}`
- )
- return lines.join('\n')
-}
-
-/** Collapses every other header and the first lineage parent, as read from the expanded output. */
-function collapsedKeysFrom(expanded: string): Set {
- const keys: string[] = []
- let lineageKey: string | null = null
- for (const row of expanded.split('\n')) {
- const header = /^(?:HEADER|HOST) key=(\S+)(?: collapseKey=(\S+))?/.exec(row)
- if (header) {
- keys.push(header[2] ?? header[1])
- }
- const lineage = / lineageKey=(\S+)/.exec(row)
- if (!lineageKey && lineage) {
- lineageKey = lineage[1]
- }
- }
- const collapsed = new Set(keys.filter((_, index) => index % 2 === 0))
- if (lineageKey) {
- collapsed.add(lineageKey)
- }
- return collapsed
-}
-
-const GROUP_BYS: AppState['groupBy'][] = ['none', 'repo', 'workspace-status', 'pr-status']
-const SORT_BYS: AppState['sortBy'][] = ['manual', 'name', 'recent', 'smart', 'repo']
-const PROJECT_ORDER_BYS: AppState['projectOrderBy'][] = ['manual', 'recent']
-
-/** Appends one labelled capture, or a pointer to the earlier identical one. */
-function appendCapture(
- sections: string[],
- seen: Map,
- label: string,
- output: string
-) {
- const earlier = seen.get(output)
- if (earlier) {
- sections.push(`=== ${label} === same as ${earlier}`)
- return
- }
- seen.set(output, label)
- sections.push(`=== ${label} ===`, output)
-}
-
-function viewLabel(view: GoldenView): string {
- return `sort=${view.sortBy} projectOrder=${view.projectOrderBy} pinnedInGroups=${view.pinnedInGroups}`
-}
-
-function captureScenario(view: GoldenView, overrides: Partial = {}): string {
- const expanded = captureGolden(buildGoldenStoreState(view, overrides))
- useAppStore.setState(initialState, true)
- const collapsed = collapsedKeysFrom(expanded)
- const collapsedOutput = captureGolden(
- buildGoldenStoreState({ ...view, collapsedGroups: collapsed }, overrides)
- )
- return [expanded, `-- collapsed: ${[...collapsed].join(' ') || '-'} --`, collapsedOutput].join(
- '\n'
- )
-}
-
-describe('sidebar row model goldens', () => {
- beforeEach(() => {
- vi.useFakeTimers({ toFake: ['Date'] })
- vi.setSystemTime(GOLDEN_NOW)
- useAppStore.setState(initialState, true)
- })
-
- afterEach(() => {
- cleanup()
- useAppStore.setState(initialState, true)
- vi.useRealTimers()
- })
-
- for (const groupBy of GROUP_BYS) {
- it(`groupBy=${groupBy} across sort, project order and pinned policy`, async () => {
- const sections: string[] = []
- const seen = new Map()
- for (const sortBy of SORT_BYS) {
- for (const projectOrderBy of PROJECT_ORDER_BYS) {
- for (const pinnedInGroups of [false, true]) {
- const view: GoldenView = {
- groupBy,
- sortBy,
- projectOrderBy,
- pinnedInGroups,
- collapsedGroups: new Set()
- }
- appendCapture(sections, seen, viewLabel(view), captureScenario(view))
- useAppStore.setState(initialState, true)
- }
- }
- }
- await expect(`${sections.join('\n')}\n`).toMatchFileSnapshot(
- `./__goldens__/sidebar-list/group-by-${groupBy}.txt`
- )
- })
- }
-
- const SCENARIOS: Record> = {
- 'host-sections': {
- visibleWorkspaceHostIds: ['local', 'ssh:gpu-vm', 'runtime:env-1']
- },
- 'single-host-scope': { workspaceHostScope: 'ssh:gpu-vm' },
- 'repo-filter': { filterRepoIds: ['orca', 'lab'] },
- 'hide-sleeping': { showSleepingWorkspaces: false, ...goldenLiveTerminalState() },
- 'hide-default-branch': { hideDefaultBranchWorkspace: true },
- 'new-external-inbox': goldenInboxState()
- }
-
- for (const [name, overrides] of Object.entries(SCENARIOS)) {
- it(`scenario ${name} across groupBy and pinned policy`, async () => {
- const sections: string[] = []
- const seen = new Map()
- for (const groupBy of GROUP_BYS) {
- for (const pinnedInGroups of [false, true]) {
- const view: GoldenView = {
- groupBy,
- sortBy: 'manual',
- projectOrderBy: 'manual',
- pinnedInGroups,
- collapsedGroups: new Set()
- }
- appendCapture(
- sections,
- seen,
- `groupBy=${groupBy} pinnedInGroups=${pinnedInGroups}`,
- captureScenario(view, overrides)
- )
- useAppStore.setState(initialState, true)
- }
- }
- await expect(`${sections.join('\n')}\n`).toMatchFileSnapshot(
- `./__goldens__/sidebar-list/scenario-${name}.txt`
- )
- })
- }
-
- it('orders accented, mixed-case and numbered names across sorts and grouping', async () => {
- const sections: string[] = []
- const seen = new Map()
- for (const groupBy of ['none', 'repo'] as const) {
- for (const sortBy of ['name', 'recent', 'repo'] as const) {
- for (const projectOrderBy of PROJECT_ORDER_BYS) {
- const view: GoldenView = {
- groupBy,
- sortBy,
- projectOrderBy,
- pinnedInGroups: false,
- collapsedGroups: new Set()
- }
- appendCapture(
- sections,
- seen,
- `groupBy=${groupBy} sort=${sortBy} projectOrder=${projectOrderBy}`,
- captureGolden(buildGoldenStoreState(view, goldenNameOrderState()))
- )
- useAppStore.setState(initialState, true)
- }
- }
- }
- await expect(`${sections.join('\n')}\n`).toMatchFileSnapshot(
- './__goldens__/sidebar-list/scenario-name-order.txt'
- )
- })
-
- it('orders rows missing from the frozen sort order last', async () => {
- const state = buildGoldenStoreState({
- groupBy: 'none',
- sortBy: 'manual',
- projectOrderBy: 'manual',
- pinnedInGroups: false,
- collapsedGroups: new Set()
- })
- useAppStore.setState(state)
- const fullState = useAppStore.getState()
- const repoMap = getRepoMapFromState(fullState)
- const options = buildVisibleWorktreeOptionsFromState(fullState, repoMap)
- const lines = [
- [GOLDEN_WORKTREE_IDS.orcaFeatD, GOLDEN_WORKTREE_IDS.orcaFeatA],
- [GOLDEN_WORKTREE_IDS.orcaFeatA],
- []
- ].map(
- (sortedIds) =>
- `sorted [${sortedIds.join(' ')}] -> ${computeVisibleWorktreeIds(
- fullState.worktreesByRepo,
- sortedIds,
- options
- ).join(' ')}`
- )
- await expect(`${lines.join('\n')}\n`).toMatchFileSnapshot(
- './__goldens__/sidebar-list/unranked-rows-last.txt'
- )
- })
-})
+defineSidebarListGoldens('./__goldens__/sidebar-list')
diff --git a/src/renderer/src/components/sidebar/worktree-list/listing/held-order.test.ts b/src/renderer/src/components/sidebar/worktree-list/listing/held-order.test.ts
new file mode 100644
index 000000000000..1ea326dc82ec
--- /dev/null
+++ b/src/renderer/src/components/sidebar/worktree-list/listing/held-order.test.ts
@@ -0,0 +1,14 @@
+import { describe, expect, it } from 'vitest'
+import { mergeHeldOrder } from './held-order'
+
+describe('mergeHeldOrder', () => {
+ it('keeps the held order, and the same array, while the set is unchanged', () => {
+ const held = ['a', 'b', 'c']
+ expect(mergeHeldOrder(held, ['c', 'a', 'b'])).toBe(held)
+ })
+
+ it('drops a removed row and places a new one where the new order puts it', () => {
+ expect(mergeHeldOrder(['a', 'b', 'c'], ['new', 'c', 'a'])).toEqual(['new', 'a', 'c'])
+ expect(mergeHeldOrder(['a', 'b'], ['b', 'x', 'y', 'a'])).toEqual(['a', 'b', 'x', 'y'])
+ })
+})
diff --git a/src/renderer/src/components/sidebar/worktree-list/listing/held-order.ts b/src/renderer/src/components/sidebar/worktree-list/listing/held-order.ts
new file mode 100644
index 000000000000..2fbccf34a78e
--- /dev/null
+++ b/src/renderer/src/components/sidebar/worktree-list/listing/held-order.ts
@@ -0,0 +1,18 @@
+/**
+ * The order shown while the pointer is over the list or a drag runs: rows keep their places, rows
+ * that left go, and new rows enter where the new order puts them. Same set, same array.
+ */
+export function mergeHeldOrder(held: string[], next: readonly string[]): string[] {
+ const nextIds = new Set(next)
+ const heldIds = new Set(held)
+ const kept = held.filter((id) => nextIds.has(id))
+ if (kept.length === held.length && kept.length === next.length) {
+ return held
+ }
+ next.forEach((id, index) => {
+ if (!heldIds.has(id)) {
+ kept.splice(index === 0 ? 0 : kept.indexOf(next[index - 1]) + 1, 0, id)
+ }
+ })
+ return kept
+}
diff --git a/src/renderer/src/components/sidebar/worktree-list/listing/use-order-hold.test.ts b/src/renderer/src/components/sidebar/worktree-list/listing/use-order-hold.test.ts
new file mode 100644
index 000000000000..566bca1e4d44
--- /dev/null
+++ b/src/renderer/src/components/sidebar/worktree-list/listing/use-order-hold.test.ts
@@ -0,0 +1,95 @@
+// @vitest-environment happy-dom
+import { afterEach, describe, expect, it, vi } from 'vitest'
+import { act, cleanup, renderHook } from '@testing-library/react'
+import type { SortBy } from '../../../../../../shared/sidebar-list/smart-sort'
+import { useOrderHeldWhileEngaged } from './use-order-hold'
+
+vi.mock('../../../../../../shared/sidebar-inputs-switch', () => ({
+ ORCA_SIDEBAR_INPUTS_IS_MAIN: true
+}))
+
+function mountList() {
+ const list = document.createElement('div')
+ list.setAttribute('data-worktree-sidebar-container', '')
+ const row = document.createElement('div')
+ list.append(row)
+ document.body.append(list)
+ return { list, row }
+}
+
+function fire(target: EventTarget, type: string, init: PointerEventInit = {}): void {
+ act(() => {
+ target.dispatchEvent(new PointerEvent(type, { bubbles: true, ...init }))
+ })
+}
+
+describe('useOrderHeldWhileEngaged', () => {
+ afterEach(() => {
+ cleanup()
+ document.body.replaceChildren()
+ })
+
+ it('holds the order under the pointer and applies it when the pointer leaves', () => {
+ const { row } = mountList()
+ const outside = document.createElement('div')
+ document.body.append(outside)
+ const { result, rerender } = renderHook(
+ ({ ids, sortBy }: { ids: string[]; sortBy: SortBy }) => useOrderHeldWhileEngaged(ids, sortBy),
+ { initialProps: { ids: ['a', 'b'], sortBy: 'recent' } }
+ )
+ fire(row, 'pointerover')
+ rerender({ ids: ['b', 'a', 'new'], sortBy: 'recent' })
+ // Rows keep their places; a new row shows at once, after the row the new order puts before it.
+ expect(result.current).toEqual(['a', 'new', 'b'])
+ fire(outside, 'pointerover')
+ expect(result.current).toEqual(['b', 'a', 'new'])
+ })
+
+ it('holds through a press that leaves the list, and a mode switch applies at once', () => {
+ const { row } = mountList()
+ const outside = document.createElement('div')
+ document.body.append(outside)
+ const { result, rerender } = renderHook(
+ ({ ids, sortBy }: { ids: string[]; sortBy: SortBy }) => useOrderHeldWhileEngaged(ids, sortBy),
+ { initialProps: { ids: ['a', 'b'], sortBy: 'smart' } }
+ )
+ fire(row, 'pointerdown')
+ fire(outside, 'pointerover')
+ rerender({ ids: ['b', 'a'], sortBy: 'smart' })
+ expect(result.current).toEqual(['a', 'b'])
+ fire(outside, 'pointerup')
+ expect(result.current).toEqual(['b', 'a'])
+
+ fire(row, 'pointerover')
+ rerender({ ids: ['a', 'b'], sortBy: 'name' })
+ expect(result.current).toEqual(['a', 'b'])
+ })
+
+ it('holds through a drag in Smart and applies the order when the drag ends over the list', () => {
+ const { row } = mountList()
+ const { result, rerender } = renderHook(
+ ({ ids, sortBy }: { ids: string[]; sortBy: SortBy }) => useOrderHeldWhileEngaged(ids, sortBy),
+ { initialProps: { ids: ['a', 'b'], sortBy: 'smart' } }
+ )
+ fire(row, 'pointerover')
+ fire(row, 'dragstart')
+ rerender({ ids: ['b', 'a'], sortBy: 'smart' })
+ expect(result.current).toEqual(['a', 'b'])
+ fire(row, 'dragend')
+ expect(result.current).toEqual(['b', 'a'])
+ })
+
+ it('never holds Manual or Name: your own drop or rename shows at once', () => {
+ const { row } = mountList()
+ const { result, rerender } = renderHook(
+ ({ ids, sortBy }: { ids: string[]; sortBy: SortBy }) => useOrderHeldWhileEngaged(ids, sortBy),
+ { initialProps: { ids: ['a', 'b'], sortBy: 'manual' } }
+ )
+ fire(row, 'pointerover')
+ fire(row, 'dragstart')
+ rerender({ ids: ['b', 'a'], sortBy: 'manual' })
+ expect(result.current).toEqual(['b', 'a'])
+ rerender({ ids: ['a', 'b'], sortBy: 'name' })
+ expect(result.current).toEqual(['a', 'b'])
+ })
+})
diff --git a/src/renderer/src/components/sidebar/worktree-list/listing/use-order-hold.ts b/src/renderer/src/components/sidebar/worktree-list/listing/use-order-hold.ts
new file mode 100644
index 000000000000..db2cb29fa82a
--- /dev/null
+++ b/src/renderer/src/components/sidebar/worktree-list/listing/use-order-hold.ts
@@ -0,0 +1,94 @@
+import { useState, useSyncExternalStore } from 'react'
+import { ORCA_SIDEBAR_INPUTS_IS_MAIN } from '../../../../../../shared/sidebar-inputs-switch'
+import type { SortBy } from '../../../../../../shared/sidebar-list/smart-sort'
+import { mergeHeldOrder } from './held-order'
+
+const LIST_SELECTOR = '[data-worktree-sidebar-container]'
+
+let pointerInside = false
+let pressedInside = false
+let dragging = false
+const listeners = new Set<() => void>()
+
+function inList(target: EventTarget | null): boolean {
+ return target instanceof Element && target.closest(LIST_SELECTOR) !== null
+}
+
+function update(next: { inside?: boolean; pressed?: boolean; drag?: boolean }): void {
+ const before = isEngaged()
+ pointerInside = next.inside ?? pointerInside
+ pressedInside = next.pressed ?? pressedInside
+ dragging = next.drag ?? dragging
+ if (before !== isEngaged()) {
+ listeners.forEach((listener) => listener())
+ }
+}
+
+function isEngaged(): boolean {
+ return pointerInside || pressedInside || dragging
+}
+
+const DOCUMENT_HANDLERS: [string, (event: Event) => void][] = [
+ ['pointerover', (event) => update({ inside: inList(event.target) })],
+ [
+ 'pointerout',
+ (event) => {
+ if (event instanceof PointerEvent && event.relatedTarget === null) {
+ update({ inside: false })
+ }
+ }
+ ],
+ ['pointerdown', (event) => update({ pressed: inList(event.target) })],
+ ['pointerup', () => update({ pressed: false })],
+ ['pointercancel', () => update({ pressed: false })],
+ ['dragstart', (event) => update({ drag: inList(event.target) })],
+ // Pointer events pause during a drag, so its end also ends the hover hold.
+ ['dragend', () => update({ drag: false, inside: false })],
+ ['drop', () => update({ drag: false, inside: false })]
+]
+
+function subscribe(listener: () => void): () => void {
+ if (listeners.size === 0) {
+ for (const [type, handler] of DOCUMENT_HANDLERS) {
+ document.addEventListener(type, handler, true)
+ }
+ }
+ listeners.add(listener)
+ return () => {
+ listeners.delete(listener)
+ if (listeners.size === 0) {
+ for (const [type, handler] of DOCUMENT_HANDLERS) {
+ document.removeEventListener(type, handler, true)
+ }
+ pointerInside = pressedInside = dragging = false
+ }
+ }
+}
+
+const noSubscription = (): (() => void) => () => {}
+const notEngaged = (): boolean => false
+
+/**
+ * Desktop only, display only: in Recent and Smart, rows stay put under the pointer and during a
+ * drag, so a click never lands on a row that just moved; the new order applies on leave or drag end.
+ */
+export function useOrderHeldWhileEngaged(ids: string[], sortBy: SortBy): string[] {
+ // Switch point: the stamp-sorted list moves on events, so it holds; today's list settles itself.
+ const engaged = useSyncExternalStore(
+ ORCA_SIDEBAR_INPUTS_IS_MAIN ? subscribe : noSubscription,
+ ORCA_SIDEBAR_INPUTS_IS_MAIN ? isEngaged : notEngaged,
+ notEngaged
+ )
+ const [shown, setShown] = useState({ ids, sortBy })
+ // Only Recent and Smart move on their own; a mode switch applies at once, like adds and removals.
+ const holds = engaged && (sortBy === 'recent' || sortBy === 'smart')
+ const next =
+ holds && shown.sortBy === sortBy
+ ? { ids: mergeHeldOrder(shown.ids, ids), sortBy }
+ : { ids, sortBy }
+ const changed = next.ids !== shown.ids || next.sortBy !== shown.sortBy
+ if (ORCA_SIDEBAR_INPUTS_IS_MAIN && changed) {
+ setShown(next)
+ }
+ return ORCA_SIDEBAR_INPUTS_IS_MAIN ? next.ids : ids
+}
diff --git a/src/renderer/src/components/sidebar/worktree-list/listing/use-sort-order.ts b/src/renderer/src/components/sidebar/worktree-list/listing/use-sort-order.ts
index dee921f80034..afc8a262a37d 100644
--- a/src/renderer/src/components/sidebar/worktree-list/listing/use-sort-order.ts
+++ b/src/renderer/src/components/sidebar/worktree-list/listing/use-sort-order.ts
@@ -15,6 +15,7 @@ import {
} from '../../../../../../shared/sidebar-list/smart-sort-phase'
import { useReusedArrayIdentity } from './use-reused-array-identity'
import { useSidebarListSession } from '@/lib/sidebar-list-session'
+import { ORCA_SIDEBAR_INPUTS_IS_MAIN } from '../../../../../../shared/sidebar-inputs-switch'
function trackSmartClassDistribution(attention: ReadonlyMap): void {
let class1 = 0
@@ -56,6 +57,8 @@ export function useSidebarWorktreeSortOrder(args: {
// Why settled (not live): the store coalesces bump bursts so rows don't jump (store/settled-sort-epoch.ts).
const settledSortEpoch = useAppStore((s) => s.settledSortEpoch)
const sortOrderEpoch = useAppStore((s) => s.sortOrderEpoch)
+ // Switch point: the host's stamps arrive on the rows, so a re-list is what re-sorts.
+ const stampedRows = useAppStore((s) => (ORCA_SIDEBAR_INPUTS_IS_MAIN ? s.worktreesByRepo : null))
// Why a latching ref: a live signal makes Smart authoritative for the session, even after that activity ends.
const sessionHasHadLiveSmartSignal = useRef(false)
@@ -81,9 +84,9 @@ export function useSidebarWorktreeSortOrder(args: {
attentionByWorktree: ranking.attentionByWorktree,
detectedLiveSmartSignal: ranking.detectedLiveSmartSignal
}
- // settledSortEpoch is an intentional trigger not read in the memo; its change signals a recompute.
+ // settledSortEpoch and stampedRows are triggers not read in the memo; a change signals a recompute.
// oxlint-disable-next-line react-hooks/exhaustive-deps
- }, [settledSortEpoch, persistedRankTrigger, repoMap, sortBy])
+ }, [settledSortEpoch, persistedRankTrigger, stampedRows, repoMap, sortBy])
// Why: stable ID order prevents rank-only refreshes from echoing an unchanged snapshot.
const sortedIds = useReusedArrayIdentity(recomputedSort.sortedIds)
diff --git a/src/renderer/src/store/slices/workspace-attention/workspace-unread-flag.ts b/src/renderer/src/store/slices/workspace-attention/workspace-unread-flag.ts
index f86db521ec28..14ab0850a8c4 100644
--- a/src/renderer/src/store/slices/workspace-attention/workspace-unread-flag.ts
+++ b/src/renderer/src/store/slices/workspace-attention/workspace-unread-flag.ts
@@ -11,6 +11,7 @@ import type { AppState } from '../../types'
import { persistPassiveWorktreeMetaForOwner } from '../worktrees/listing/worktree-owner-settings'
import type { WorkspaceAttentionGet, WorkspaceAttentionSet } from './workspace-attention-contract'
import { workspaceHasLiveMarker } from './workspace-live-markers'
+import { ORCA_SIDEBAR_INPUTS_IS_MAIN } from '../../../../../shared/sidebar-inputs-switch'
// The persisted workspace flag `isUnread`. Only the workspace-attention module writes it.
@@ -19,7 +20,8 @@ export function markWorkspaceUnreadFlag(
get: WorkspaceAttentionGet,
worktreeId: string
): void {
- const now = Date.now()
+ // Switch point: the owning host stamps bells and finishes; the flag alone is the window's.
+ const stamp = ORCA_SIDEBAR_INPUTS_IS_MAIN ? {} : { lastActivityAt: Date.now() }
const workspaceScope = parseWorkspaceKey(worktreeId)
if (workspaceScope?.type === 'folder') {
const folderWorkspaceId = workspaceScope.folderWorkspaceId
@@ -35,14 +37,14 @@ export function markWorkspaceUnreadFlag(
}
set((s) => ({
folderWorkspaces: s.folderWorkspaces.map((workspace) =>
- workspace === marked ? { ...workspace, isUnread: true, lastActivityAt: now } : workspace
+ workspace === marked ? { ...workspace, isUnread: true, ...stamp } : workspace
),
sortEpoch: s.sortEpoch + 1
}))
// Why the row's own host: the row flipped here is the owner updateFolderWorkspace writes.
void get().updateFolderWorkspace(
folderWorkspaceId,
- { isUnread: true, lastActivityAt: now },
+ { isUnread: true, ...stamp },
{ executionHostId: getFolderWorkspaceHostId(marked, state.projectGroups) }
)
return
@@ -56,14 +58,14 @@ export function markWorkspaceUnreadFlag(
shouldPersist = true
const nextWorktrees = applyWorktreeUpdates(s.worktreesByRepo, worktreeId, {
isUnread: true,
- lastActivityAt: now
+ ...stamp
})
const nextDetectedWorktrees = applyDetectedWorktreeUpdates(
s.detectedWorktreesByRepo,
worktreeId,
{
isUnread: true,
- lastActivityAt: now
+ ...stamp
}
)
return {
@@ -83,7 +85,7 @@ export function markWorkspaceUnreadFlag(
persistPassiveWorktreeMetaForOwner(
get,
worktreeId,
- { isUnread: true, lastActivityAt: now },
+ { isUnread: true, ...stamp },
'persist unread worktree state'
)
}
diff --git a/src/renderer/src/store/slices/worktrees-recent-stamp-switch-on.test.ts b/src/renderer/src/store/slices/worktrees-recent-stamp-switch-on.test.ts
new file mode 100644
index 000000000000..52689e5c45c4
--- /dev/null
+++ b/src/renderer/src/store/slices/worktrees-recent-stamp-switch-on.test.ts
@@ -0,0 +1,104 @@
+import { beforeEach, describe, expect, it, vi } from 'vitest'
+import { folderWorkspaceKey } from '../../../../shared/workspace-scope'
+import { makeFolderWorkspace, makeWorktree } from './worktrees-slice-test-fixtures'
+import {
+ createTestStore,
+ mockApi,
+ resetRemoteRuntimeMocks,
+ resetWorktreeSliceModuleMemory
+} from './worktrees-slice-test-harness'
+
+vi.mock('../../../../shared/sidebar-inputs-switch', () => ({ ORCA_SIDEBAR_INPUTS_IS_MAIN: true }))
+
+vi.mock('sonner', () => ({
+ toast: {
+ warning: vi.fn(),
+ info: vi.fn(),
+ success: vi.fn(),
+ error: vi.fn(),
+ dismiss: vi.fn()
+ }
+}))
+
+vi.mock('@/components/worktree-base-fallback-notice', () => ({
+ requestWorktreeBaseFallbackNotice: vi.fn()
+}))
+
+beforeEach(resetWorktreeSliceModuleMemory)
+
+// With the switch on, the owning host writes every Recent stamp; the window writes none.
+describe('window-side Recent stamps with the sidebar-inputs switch on', () => {
+ const wt = makeWorktree({
+ id: 'repo1::/path/wt1',
+ repoId: 'repo1',
+ path: '/path/wt1',
+ lastActivityAt: 5
+ })
+
+ beforeEach(() => {
+ vi.clearAllMocks()
+ resetRemoteRuntimeMocks()
+ })
+
+ function storeWith() {
+ const store = createTestStore()
+ store.setState({ worktreesByRepo: { repo1: [wt] } })
+ return store
+ }
+
+ const lastActivityAt = (store: ReturnType) =>
+ store.getState().worktreesByRepo.repo1[0].lastActivityAt
+
+ const persistedStamp = () =>
+ mockApi.worktrees.updateMeta.mock.calls.some(
+ ([args]: [{ updates: Record }]) => 'lastActivityAt' in args.updates
+ )
+
+ it('a terminal start or exit writes no stamp', () => {
+ const store = storeWith()
+ store.getState().bumpWorktreeActivity(wt.id)
+ expect(lastActivityAt(store)).toBe(5)
+ expect(persistedStamp()).toBe(false)
+ })
+
+ it('a bell or finish raises the unread flag but writes no stamp', () => {
+ const store = storeWith()
+ store.getState().markAgentAttentionUnread({
+ workspaceId: wt.id,
+ subjectKey: null,
+ groupId: null,
+ reason: 'agent-completion'
+ })
+ expect(store.getState().worktreesByRepo.repo1[0].isUnread).toBe(true)
+ expect(lastActivityAt(store)).toBe(5)
+ expect(persistedStamp()).toBe(false)
+ })
+
+ it('a comment edit writes no stamp', async () => {
+ const store = storeWith()
+ await store.getState().updateWorktreeMeta(wt.id, { comment: 'note' })
+ expect(store.getState().worktreesByRepo.repo1[0].comment).toBe('note')
+ expect(lastActivityAt(store)).toBe(5)
+ expect(persistedStamp()).toBe(false)
+ })
+
+ it('a folder workspace’s terminal activity and unread mark write no stamp', async () => {
+ const store = createTestStore()
+ const folder = makeFolderWorkspace({ id: 'folder-1', lastActivityAt: 5 })
+ store.setState({ folderWorkspaces: [folder], projectGroups: [] })
+ store.getState().bumpWorktreeActivity(folderWorkspaceKey(folder.id))
+ store.getState().markAgentAttentionUnread({
+ workspaceId: folderWorkspaceKey(folder.id),
+ subjectKey: null,
+ groupId: null,
+ reason: 'agent-completion'
+ })
+ await new Promise((resolve) => setTimeout(resolve, 0))
+ expect(store.getState().folderWorkspaces[0]).toMatchObject({
+ isUnread: true,
+ lastActivityAt: 5
+ })
+ const folderWrites = vi.mocked(store.getState().updateFolderWorkspace).mock.calls
+ expect(folderWrites.some(([, updates]) => 'lastActivityAt' in updates)).toBe(false)
+ })
+})
diff --git a/src/renderer/src/store/slices/worktrees/listing/detected-worktree-meta.ts b/src/renderer/src/store/slices/worktrees/listing/detected-worktree-meta.ts
index cd57cf0464cb..d894d5700011 100644
--- a/src/renderer/src/store/slices/worktrees/listing/detected-worktree-meta.ts
+++ b/src/renderer/src/store/slices/worktrees/listing/detected-worktree-meta.ts
@@ -9,6 +9,7 @@ import {
getRepoExecutionHostId
} from '../../../../../../shared/execution-host'
import { parseWorkspaceKey } from '../../../../../../shared/workspace-scope'
+import { ORCA_SIDEBAR_INPUTS_IS_MAIN } from '../../../../../../shared/sidebar-inputs-switch'
import { folderWorkspaceToWorktree } from '../../../../../../shared/folder-workspace-worktree'
import {
floatingWorkspaceToWorktree,
@@ -178,7 +179,11 @@ export function getFolderWorkspaceMetaUpdates(
? null
: updates.firstAgentMessageRenameError
}
- if (updates.comment !== undefined && updates.lastActivityAt === undefined) {
+ if (
+ updates.comment !== undefined &&
+ updates.lastActivityAt === undefined &&
+ !ORCA_SIDEBAR_INPUTS_IS_MAIN
+ ) {
next.lastActivityAt = Date.now()
}
if (updates.linkedWorkItem !== undefined) {
diff --git a/src/renderer/src/store/slices/worktrees/metadata/update-worktree-meta.ts b/src/renderer/src/store/slices/worktrees/metadata/update-worktree-meta.ts
index 50f142883bee..37770b3d8728 100644
--- a/src/renderer/src/store/slices/worktrees/metadata/update-worktree-meta.ts
+++ b/src/renderer/src/store/slices/worktrees/metadata/update-worktree-meta.ts
@@ -14,6 +14,7 @@ import { translate } from '@/i18n/i18n'
import { isPositiveHostedReviewNumber } from '../../../../../../shared/hosted-review'
import { displayNameUpdatePinsLabel } from '../../../../../../shared/worktree/display-name-provenance'
import { parseWorkspaceKey } from '../../../../../../shared/workspace-scope'
+import { ORCA_SIDEBAR_INPUTS_IS_MAIN } from '../../../../../../shared/sidebar-inputs-switch'
import { applyWorktreeUpdates, getRepoIdFromWorktreeId } from '../../worktree-helpers'
import { getHostedReviewCacheKey } from '../../hosted-review-cache-identity'
import { getGitHubPRCacheKeyCandidates } from '../../../../../../shared/github/github-cache-key'
@@ -165,8 +166,11 @@ export function createUpdateWorktreeMeta(
firstAgentMessageRenameError: null
}
: targetEnriched
+ // Switch point: a comment edit is not a Recent event once the host owns the stamps.
const enriched =
- 'comment' in renameCleared ? { ...renameCleared, lastActivityAt: Date.now() } : renameCleared
+ 'comment' in renameCleared && !ORCA_SIDEBAR_INPUTS_IS_MAIN
+ ? { ...renameCleared, lastActivityAt: Date.now() }
+ : renameCleared
let didApply = false
set((s) => {
diff --git a/src/renderer/src/store/slices/worktrees/session/worktree-activity-bump.ts b/src/renderer/src/store/slices/worktrees/session/worktree-activity-bump.ts
index 43c019af6faa..40fab2d82c98 100644
--- a/src/renderer/src/store/slices/worktrees/session/worktree-activity-bump.ts
+++ b/src/renderer/src/store/slices/worktrees/session/worktree-activity-bump.ts
@@ -2,6 +2,7 @@ import type { WorktreeSlice } from '../../worktree-helpers'
import { tryRuntimeTargetForWorktreeOwner } from '../listing/worktree-owner-target'
import type { WorktreeSliceGet, WorktreeSliceSet } from '../listing/worktree-slice-types'
import { parseWorkspaceKey } from '../../../../../../shared/workspace-scope'
+import { ORCA_SIDEBAR_INPUTS_IS_MAIN } from '../../../../../../shared/sidebar-inputs-switch'
import { applyWorktreeUpdates, getRepoIdFromWorktreeId } from '../../worktree-helpers'
import {
applyDetectedWorktreeUpdates,
@@ -17,6 +18,10 @@ export function createBumpWorktreeActivity(
get: WorktreeSliceGet
): WorktreeSlice['bumpWorktreeActivity'] {
return (worktreeId) => {
+ // Switch point: the owning host writes Recent stamps; terminal start and exit are not events.
+ if (ORCA_SIDEBAR_INPUTS_IS_MAIN) {
+ return
+ }
const now = Date.now()
const workspaceScope = parseWorkspaceKey(worktreeId)
if (workspaceScope?.type === 'folder') {
diff --git a/src/shared/runtime-worktree-contracts.ts b/src/shared/runtime-worktree-contracts.ts
index 8e1c7a8fc90d..6fa03833ba79 100644
--- a/src/shared/runtime-worktree-contracts.ts
+++ b/src/shared/runtime-worktree-contracts.ts
@@ -1,3 +1,4 @@
+import type { SmartTier } from './sidebar-list/sort-stamps'
import type { AgentStatusState, AgentType, AgentWorkingMode } from './agent-status-types'
import type { AgentMainAgentStatus } from './main-agent-status'
import type { CheckStatus } from './github/pull-request-types'
@@ -72,6 +73,11 @@ export type RuntimeWorktreePsSummary = {
sortOrder: number
manualOrder?: number
lastActivityAt?: number
+ /** The owning host's Smart stamps (sidebar-list/sort-stamps.ts); absent tier is Rest. */
+ smartTier?: SmartTier
+ smartAt?: number
+ /** Set by a host that writes sort stamps: clients sort Recent and Smart by them alone. */
+ sortedByStamps?: true
createdAt?: number
creatorProvenance?: Worktree['creatorProvenance']
linkedIssue: number | null
diff --git a/src/shared/sidebar-list/smart-sort.ts b/src/shared/sidebar-list/smart-sort.ts
index f08feb4b7890..69f7baecb307 100644
--- a/src/shared/sidebar-list/smart-sort.ts
+++ b/src/shared/sidebar-list/smart-sort.ts
@@ -19,6 +19,8 @@ import {
type WorktreeAttention
} from './smart-attention'
import { smartSortPhase } from './smart-sort-phase'
+import { ORCA_SIDEBAR_INPUTS_IS_MAIN } from '../sidebar-inputs-switch'
+import { compareSmartStamps, recentStamp } from './stamp-order'
export type SortBy = WorkspaceSortBy
@@ -93,16 +95,25 @@ export function buildWorktreeComparator(
attentionByWorktree: Map,
labels?: WorktreeSortLabels
): (a: Worktree, b: Worktree) => number {
- const label = (worktree: Worktree): string =>
- labels?.get(worktree) ?? getWorktreeSortLabel(worktree)
- return buildWorkspaceRowComparator(sortBy, {
- label,
+ const read = {
+ label: (worktree: Worktree): string => labels?.get(worktree) ?? getWorktreeSortLabel(worktree),
identity: getWorktreeHostIdentity,
- repoLabel: (worktree) => repoMap.get(worktree.repoId)?.displayName ?? '',
- recentActivity: (worktree) => effectiveRecentActivity(worktree, now),
+ repoLabel: (worktree: Worktree) => repoMap.get(worktree.repoId)?.displayName ?? '',
// Why fallback to sortOrder: existing users have a persisted smart-sort snapshot but no
// manualOrder yet, so Manual starts from that order instead of alphabetizing.
- manualRank: (worktree) => worktree.manualOrder ?? worktree.sortOrder,
+ manualRank: (worktree: Worktree) => worktree.manualOrder ?? worktree.sortOrder
+ }
+ // Switch point: Recent and Smart read the owning host's stamps, with no clock.
+ if (ORCA_SIDEBAR_INPUTS_IS_MAIN) {
+ return buildWorkspaceRowComparator(sortBy, {
+ ...read,
+ recentActivity: recentStamp,
+ compareSmart: compareSmartStamps
+ })
+ }
+ return buildWorkspaceRowComparator(sortBy, {
+ ...read,
+ recentActivity: (worktree) => effectiveRecentActivity(worktree, now),
compareSmart: (a, b) => {
const aw = attentionByWorktree.get(a.id) ?? IDLE
const bw = attentionByWorktree.get(b.id) ?? IDLE
@@ -192,6 +203,11 @@ export function rankWorktreesForSort(args: {
const { worktrees, sortBy, now, sources } = args
// Why precompute: the label tiebreaker runs on every comparison in every mode.
const labels = buildWorktreeSortLabels(worktrees)
+ // Switch point: stamps need no cold phase, latch or attention map.
+ if (ORCA_SIDEBAR_INPUTS_IS_MAIN) {
+ worktrees.sort(buildWorktreeComparator(sortBy, args.repoMap, now, new Map(), labels))
+ return { sorted: worktrees, attentionByWorktree: null, detectedLiveSmartSignal: false }
+ }
let detectedLiveSmartSignal = false
// Why cold-start detection: agent-status hydrates async, so the warm comparator would collapse all to Class 4; keep the persisted order until a live signal appears.
diff --git a/src/shared/sidebar-list/stamp-order-scenarios.test.ts b/src/shared/sidebar-list/stamp-order-scenarios.test.ts
new file mode 100644
index 000000000000..00a33d00a5ac
--- /dev/null
+++ b/src/shared/sidebar-list/stamp-order-scenarios.test.ts
@@ -0,0 +1,204 @@
+import { describe, expect, it } from 'vitest'
+import {
+ buildWorkspaceRowComparator,
+ type WorkspaceSortBy
+} from '../workspace-view/workspace-row-sort'
+import {
+ classifySortStampEvent,
+ nextAgentPaneState,
+ REST_PANE,
+ type AgentPaneState,
+ type AgentPhase,
+ type SortStamps
+} from './sort-stamps'
+import { compareSmartStamps, recentStamp } from './stamp-order'
+
+/**
+ * Every row of the before/after table in the sort-stamps design note, replayed through the host's
+ * classifier and the stamp order every client sorts by.
+ */
+type Row = { id: string; stamps: SortStamps; pane: AgentPaneState }
+
+const T0 = 10_000_000
+
+class Host {
+ readonly rows = new Map()
+ now = T0
+
+ constructor(ids: string[]) {
+ // Older rows were touched earlier: b before a, c before b, ...
+ ids.forEach((id, index) => {
+ this.rows.set(id, { id, stamps: { recentAt: T0 - (index + 1) * 60_000 }, pane: REST_PANE })
+ })
+ }
+
+ advance(ms: number): void {
+ this.now += ms
+ }
+
+ agent(id: string, observed: AgentPhase): void {
+ const row = this.rows.get(id)!
+ const pane = nextAgentPaneState(row.pane, observed, this.now)
+ if (pane === row.pane) {
+ return
+ }
+ this.apply(row, { kind: 'agent', from: row.pane.phase, to: pane.phase, panes: [pane] })
+ row.pane = pane
+ }
+
+ bell(id: string): void {
+ this.apply(this.rows.get(id)!, { kind: 'bell' })
+ }
+
+ create(id: string): void {
+ // Creation writes the first Recent stamp on the new record.
+ this.rows.set(id, { id, stamps: { recentAt: this.now }, pane: REST_PANE })
+ }
+
+ order(sortBy: WorkspaceSortBy): string[] {
+ const compare = buildWorkspaceRowComparator(sortBy, {
+ label: (row) => row.id,
+ identity: (row) => row.id,
+ repoLabel: () => '',
+ recentActivity: (row) => recentStamp({ lastActivityAt: row.stamps.recentAt }),
+ manualRank: () => null,
+ compareSmart: (a, b) => compareSmartStamps(view(a), view(b))
+ })
+ return [...this.rows.values()].sort(compare).map((row) => row.id)
+ }
+
+ private apply(row: Row, event: Parameters[1]): void {
+ row.stamps = classifySortStampEvent(row.stamps, event, this.now) ?? row.stamps
+ }
+}
+
+function view(row: Row) {
+ return {
+ lastActivityAt: row.stamps.recentAt,
+ smartTier: row.stamps.smartTier,
+ smartAt: row.stamps.smartAt
+ }
+}
+
+function both(host: Host): { recent: string[]; smart: string[] } {
+ return { recent: host.order('recent'), smart: host.order('smart') }
+}
+
+describe('sort stamps: the design note’s before/after table', () => {
+ it('an agent streaming output for minutes stays put', () => {
+ const host = new Host(['a', 'b', 'c'])
+ host.agent('b', 'working')
+ const before = both(host)
+ // Output, tool calls and lease renewals are no events; only a finish would move it.
+ for (let minute = 0; minute < 40; minute++) {
+ host.advance(60_000)
+ host.agent('b', 'working')
+ }
+ expect(both(host)).toEqual(before)
+ })
+
+ it('an agent finishing a turn tops Recent and Done at once, and stays until the next prompt', () => {
+ const host = new Host(['a', 'b', 'c'])
+ host.agent('c', 'working')
+ host.advance(20_000)
+ host.agent('c', 'done')
+ expect(both(host)).toEqual({ recent: ['c', 'a', 'b'], smart: ['c', 'a', 'b'] })
+ // No fade: Done holds after any time without an event (owner decision Q1).
+ host.advance(3 * 60 * 60_000)
+ expect(host.order('smart')).toEqual(['c', 'a', 'b'])
+ })
+
+ it('a finish in the open workspace moves it the same way; opening never stamps', () => {
+ const host = new Host(['a', 'b'])
+ // Opening b is not an event, so nothing changes until its agent finishes.
+ expect(both(host)).toEqual({ recent: ['a', 'b'], smart: ['a', 'b'] })
+ host.agent('b', 'working')
+ host.advance(20_000)
+ host.agent('b', 'done')
+ expect(both(host)).toEqual({ recent: ['b', 'a'], smart: ['b', 'a'] })
+ })
+
+ it('an agent asking for approval tops Needs you at once', () => {
+ const host = new Host(['a', 'b', 'c'])
+ host.agent('a', 'working')
+ host.agent('b', 'working')
+ host.advance(20_000)
+ host.agent('b', 'done')
+ host.advance(20_000)
+ host.agent('c', 'needs-you')
+ expect(host.order('smart')).toEqual(['c', 'b', 'a'])
+ })
+
+ it('typing in a plain shell, renaming and editing a comment are not events', () => {
+ // None reaches the classifier; worktrees-recent-stamp-switch-on.test.ts proves the window writes none.
+ const host = new Host(['a', 'b', 'c'])
+ const before = both(host)
+ host.advance(60_000)
+ expect(both(host)).toEqual(before)
+ })
+
+ it('sending a prompt tops Recent and moves the row to Working', () => {
+ const host = new Host(['a', 'b', 'c'])
+ host.agent('c', 'working')
+ expect(host.order('recent')[0]).toBe('c')
+ expect(host.rows.get('c')!.stamps.smartTier).toBe('working')
+ })
+
+ it('a created workspace is on top until something newer happens', () => {
+ const host = new Host(['a', 'b'])
+ host.advance(1_000)
+ host.create('new')
+ expect(both(host).recent).toEqual(['new', 'a', 'b'])
+ host.advance(11 * 60_000)
+ expect(both(host).recent).toEqual(['new', 'a', 'b'])
+ host.bell('b')
+ expect(both(host).recent).toEqual(['b', 'new', 'a'])
+ })
+
+ it('two agents finishing a second apart: the newer is on top', () => {
+ const host = new Host(['a', 'b', 'c'])
+ host.agent('a', 'working')
+ host.agent('b', 'working')
+ host.advance(20_000)
+ host.agent('a', 'done')
+ host.advance(1_000)
+ host.agent('b', 'done')
+ expect(both(host)).toEqual({ recent: ['b', 'a', 'c'], smart: ['b', 'a', 'c'] })
+ })
+
+ it('an SSH host disconnecting holds every row until a real event', () => {
+ const host = new Host(['a', 'b'])
+ host.agent('b', 'working')
+ const before = both(host)
+ // Loss of contact produces no event; time alone moves nothing.
+ host.advance(2 * 60 * 60_000)
+ expect(both(host)).toEqual(before)
+ })
+
+ it('a restart keeps the identical order: the stamps are on the records', () => {
+ const host = new Host(['a', 'b', 'c'])
+ host.agent('a', 'working')
+ host.advance(20_000)
+ host.agent('a', 'done')
+ host.agent('c', 'needs-you')
+ const before = both(host)
+ const restarted = new Host([])
+ for (const row of host.rows.values()) {
+ restarted.rows.set(row.id, { ...row, pane: REST_PANE })
+ }
+ expect(both(restarted)).toEqual(before)
+ })
+
+ it('a resumed approval goes back to Working without topping Recent', () => {
+ const host = new Host(['a', 'b'])
+ host.agent('b', 'working')
+ host.advance(20_000)
+ host.agent('b', 'needs-you')
+ host.advance(20_000)
+ host.agent('a', 'working')
+ host.advance(20_000)
+ host.agent('b', 'working')
+ expect(host.order('recent')).toEqual(['a', 'b'])
+ expect(host.rows.get('b')!.stamps).toMatchObject({ smartTier: 'working' })
+ })
+})
diff --git a/src/shared/sidebar-list/stamp-order.test.ts b/src/shared/sidebar-list/stamp-order.test.ts
new file mode 100644
index 000000000000..5d46911662cc
--- /dev/null
+++ b/src/shared/sidebar-list/stamp-order.test.ts
@@ -0,0 +1,48 @@
+import { describe, expect, it } from 'vitest'
+import { compareSmartStamps, recentStamp, type StampOrderRow } from './stamp-order'
+
+function sortSmart(rows: Record): string[] {
+ return Object.entries(rows)
+ .sort(([, a], [, b]) => compareSmartStamps(a, b))
+ .map(([id]) => id)
+}
+
+describe('stamp order', () => {
+ it('ranks Needs you, Done, Working, then Rest, each newest first', () => {
+ expect(
+ sortSmart({
+ rest: { lastActivityAt: 900 },
+ working: { lastActivityAt: 1, smartTier: 'working', smartAt: 50 },
+ doneOld: { lastActivityAt: 1, smartTier: 'done', smartAt: 10 },
+ doneNew: { lastActivityAt: 1, smartTier: 'done', smartAt: 20 },
+ needsYou: { lastActivityAt: 1, smartTier: 'needs-you', smartAt: 5 },
+ restOld: { lastActivityAt: 100 }
+ })
+ ).toEqual(['needsYou', 'doneNew', 'doneOld', 'working', 'rest', 'restOld'])
+ })
+
+ it('reads a tier it does not know, and missing or broken stamps, as Rest', () => {
+ // A newer host's tier, parsed off the wire as this client receives it.
+ const unknownTier: StampOrderRow = JSON.parse(
+ '{"lastActivityAt":30,"smartTier":"later","smartAt":99}'
+ )
+ expect(
+ sortSmart({
+ unknown: unknownTier,
+ broken: { lastActivityAt: Number.NaN },
+ missing: {},
+ recent: { lastActivityAt: 40 }
+ })
+ ).toEqual(['recent', 'unknown', 'broken', 'missing'])
+ expect(recentStamp({ lastActivityAt: Number.POSITIVE_INFINITY })).toBe(0)
+ })
+
+ it('ties within a tier fall to Recent', () => {
+ expect(
+ sortSmart({
+ older: { lastActivityAt: 1, smartTier: 'done', smartAt: 5 },
+ newer: { lastActivityAt: 2, smartTier: 'done', smartAt: 5 }
+ })
+ ).toEqual(['newer', 'older'])
+ })
+})
diff --git a/src/shared/sidebar-list/stamp-order.ts b/src/shared/sidebar-list/stamp-order.ts
new file mode 100644
index 000000000000..8d3adba89e87
--- /dev/null
+++ b/src/shared/sidebar-list/stamp-order.ts
@@ -0,0 +1,36 @@
+import { isSmartTier, type SmartTier } from './sort-stamps'
+
+/** The sort stamps a row carries, as its owning host wrote them. */
+export type StampOrderRow = {
+ lastActivityAt?: number
+ smartTier?: SmartTier
+ smartAt?: number
+}
+
+const TIER_RANK: Record = { 'needs-you': 0, done: 1, working: 2 }
+const REST_RANK = 3
+
+function finiteOr0(value: number | undefined): number {
+ return value !== undefined && Number.isFinite(value) ? value : 0
+}
+
+/** Recent by the host's stamp alone: no clock, no create grace. */
+export function recentStamp(row: StampOrderRow): number {
+ return finiteOr0(row.lastActivityAt)
+}
+
+// A tier a newer host knows and this client does not reads as Rest.
+function tierRank(row: StampOrderRow): number {
+ return isSmartTier(row.smartTier) ? TIER_RANK[row.smartTier] : REST_RANK
+}
+
+/** Smart by stamps: Needs you, Done, Working, each newest first; then Rest by Recent. */
+export function compareSmartStamps(a: StampOrderRow, b: StampOrderRow): number {
+ const rankA = tierRank(a)
+ const rankB = tierRank(b)
+ return (
+ rankA - rankB ||
+ (rankA < REST_RANK ? finiteOr0(b.smartAt) - finiteOr0(a.smartAt) : 0) ||
+ recentStamp(b) - recentStamp(a)
+ )
+}
diff --git a/tests/e2e/sidebar-sort-stamps-order.spec.ts b/tests/e2e/sidebar-sort-stamps-order.spec.ts
new file mode 100644
index 000000000000..d556ac149d66
--- /dev/null
+++ b/tests/e2e/sidebar-sort-stamps-order.spec.ts
@@ -0,0 +1,68 @@
+import type { Page } from '@stablyai/playwright-test'
+import { test, expect } from './helpers/orca-app'
+import { postClaudeHook, readHookEndpoint } from './helpers/agent-hook-endpoint'
+import { SIDEBAR_INPUTS_BUILD, expectNoSidebarShadowMismatches } from './helpers/sidebar-shadow'
+import { ensureTerminalVisible, waitForActiveWorktree, waitForSessionReady } from './helpers/store'
+import { waitForActivePaneHookDescriptor, waitForActiveTerminalManager } from './helpers/terminal'
+import { RECENT_STAMP_THROTTLE_MS } from '../../src/shared/sidebar-list/sort-stamps'
+
+test.skip(
+ !SIDEBAR_INPUTS_BUILD,
+ 'the window sorts by host stamps only in an ORCA_SIDEBAR_INPUTS=main build'
+)
+
+async function rowOrder(page: Page, ids: string[]): Promise {
+ return page.evaluate(
+ (wanted) =>
+ Array.from(document.querySelectorAll('[data-worktree-id]'))
+ .filter((row) => row.getAttribute('role') === 'option')
+ .map((row) => row.dataset.worktreeId ?? '')
+ .filter((id) => wanted.includes(id)),
+ ids
+ )
+}
+
+test('the window sidebar order follows the host stamps in Recent and Smart', async ({
+ orcaPage,
+ electronApp
+}) => {
+ test.setTimeout(90_000)
+ await waitForSessionReady(orcaPage)
+ await waitForActiveWorktree(orcaPage)
+ await ensureTerminalVisible(orcaPage)
+ await waitForActiveTerminalManager(orcaPage, 30_000)
+ const endpoint = await readHookEndpoint(electronApp)
+ const pane = await waitForActivePaneHookDescriptor(orcaPage)
+
+ const otherId = await orcaPage.evaluate((activeId) => {
+ const store = window.__store!
+ store.getState().setGroupBy('none')
+ store.getState().setSortBy('smart')
+ const other = Object.values(store.getState().worktreesByRepo)
+ .flat()
+ .find((worktree) => worktree.id !== activeId && !worktree.isArchived)
+ if (!other) {
+ throw new Error('Expected the seeded secondary worktree')
+ }
+ // A newer Recent stamp on the other row, with no tier on either.
+ store.getState().updateWorktreeMeta(other.id, { lastActivityAt: Date.now() })
+ return other.id
+ }, pane.worktreeId)
+ const ids = [pane.worktreeId, otherId]
+ await expect.poll(() => rowOrder(orcaPage, ids)).toEqual([otherId, pane.worktreeId])
+
+ await orcaPage.waitForTimeout(RECENT_STAMP_THROTTLE_MS + 500)
+ await postClaudeHook(endpoint, pane, { hook_event_name: 'UserPromptSubmit', prompt: 'go' })
+ // Working outranks a row with no tier; the prompt's Recent stamp also tops Recent.
+ await expect.poll(() => rowOrder(orcaPage, ids)).toEqual([pane.worktreeId, otherId])
+ await orcaPage.evaluate(() => window.__store!.getState().setSortBy('recent'))
+ await expect.poll(() => rowOrder(orcaPage, ids)).toEqual([pane.worktreeId, otherId])
+
+ await orcaPage.evaluate(() => window.__store!.getState().setSortBy('smart'))
+ await postClaudeHook(endpoint, pane, { hook_event_name: 'Stop', last_assistant_message: 'ok' })
+ // Done holds the top with no fade and no settle.
+ await orcaPage.waitForTimeout(2_000)
+ expect(await rowOrder(orcaPage, ids)).toEqual([pane.worktreeId, otherId])
+
+ await expectNoSidebarShadowMismatches(orcaPage)
+})
diff --git a/tests/e2e/worktree-smart-sort.spec.ts b/tests/e2e/worktree-smart-sort.spec.ts
index 2c193d3336b9..d3dcc1219e1d 100644
--- a/tests/e2e/worktree-smart-sort.spec.ts
+++ b/tests/e2e/worktree-smart-sort.spec.ts
@@ -3,6 +3,7 @@ import type { Page } from '@stablyai/playwright-test'
import type { TerminalPaneLayoutNode } from '../../src/shared/terminal-tab-types'
import { ensureTerminalVisible, waitForActiveWorktree, waitForSessionReady } from './helpers/store'
import { worktreeRow } from './worktree-row-locators'
+import { SIDEBAR_INPUTS_BUILD } from './helpers/sidebar-shadow'
type SmartSortScenario = {
blockedId: string
@@ -211,6 +212,8 @@ async function getSmartSortScenarioReadiness(
}
test.describe('Worktree Smart Sort', () => {
+ // The window-seeded statuses here never reach the host, which owns Smart in that build.
+ test.skip(SIDEBAR_INPUTS_BUILD, 'ORCA_SIDEBAR_INPUTS=main sorts by host stamps')
test.beforeEach(async ({ orcaPage }) => {
await waitForSessionReady(orcaPage)
await waitForActiveWorktree(orcaPage)
From b6325ef95180e905364b1f1d76cbccd27c4b040b Mon Sep 17 00:00:00 2001
From: Brennan Benson <79079362+brennanb2025@users.noreply.github.com>
Date: Sun, 18 Oct 2026 11:17:20 -0700
Subject: [PATCH 15/15] style: format the resume and transcript files main left
unformatted (#30137)
Two merged changes left lines past the formatter's 100-column width in
structured-session-create-support.ts, structured-agent-session-create-adoption.ts
and transcript-opencode-sqlite-query.ts. Any branch that merges main gets them
reformatted by the pre-commit hook, which pushes two of them past the 300-line
limit and fails CI. Format them, and keep them under the limit by moving the
bounded row readers and the resume adopt payload into the modules that own them.
No behavior change.
---
.../transcript-opencode-row-budget.ts | 29 ++++++++
.../transcript-opencode-sqlite-query.ts | 36 ++--------
.../structured-session-create-support.ts | 41 +++++------
...tructured-agent-session-create-adoption.ts | 71 ++++++++++++++++---
4 files changed, 115 insertions(+), 62 deletions(-)
create mode 100644 src/main/native-chat/transcript-opencode-row-budget.ts
diff --git a/src/main/native-chat/transcript-opencode-row-budget.ts b/src/main/native-chat/transcript-opencode-row-budget.ts
new file mode 100644
index 000000000000..1060ebe12775
--- /dev/null
+++ b/src/main/native-chat/transcript-opencode-row-budget.ts
@@ -0,0 +1,29 @@
+import type SyncDatabase from '../sqlite/sync-database'
+
+type BindValue = SyncDatabase.BindValue
+type SqliteStatement = SyncDatabase.Statement
+
+// Every transcript query reads within one row and byte budget so a corrupt store cannot exhaust memory.
+export function rowsOf(statement: SqliteStatement, ...params: BindValue[]): T[] {
+ return rowsWithinBudget(statement, { bytes: 0 }, ...params)
+}
+
+export function rowsWithinBudget(
+ statement: SqliteStatement,
+ budget: { bytes: number },
+ ...params: BindValue[]
+): T[] {
+ const rows: ReturnType = []
+ for (const row of statement.iterate(...params)) {
+ budget.bytes += Object.values(row).reduce(
+ (size, value) => size + (typeof value === 'string' ? Buffer.byteLength(value) : 0),
+ 0
+ )
+ if (rows.length >= 10000 || budget.bytes > 16 * 1024 * 1024) {
+ throw new Error('OpenCode transcript query exceeds its read limit')
+ }
+ rows.push(row)
+ }
+ // oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: Each caller names the columns projected by its internal SQL query.
+ return rows as T[]
+}
diff --git a/src/main/native-chat/transcript-opencode-sqlite-query.ts b/src/main/native-chat/transcript-opencode-sqlite-query.ts
index 3f2072166985..121f8721c9f9 100644
--- a/src/main/native-chat/transcript-opencode-sqlite-query.ts
+++ b/src/main/native-chat/transcript-opencode-sqlite-query.ts
@@ -10,9 +10,7 @@ import { openCodeTranscriptPageLimit } from '../../shared/opencode-transcript-pa
import { columnExists, tableExists } from '../opencode-usage/schema-helpers'
import { asRecord, extractString, parseJsonObject } from '../ai-vault/session-scanner-values'
import type SyncDatabase from '../sqlite/sync-database'
-
-type BindValue = SyncDatabase.BindValue
-type SqliteStatement = SyncDatabase.Statement
+import { rowsOf, rowsWithinBudget } from './transcript-opencode-row-budget'
import {
opencodeMessages,
OPENCODE_TRANSCRIPT_MAX_ROW_BYTES
@@ -48,30 +46,6 @@ function sessionExists(db: SyncDatabase, sessionId: string): boolean {
)
}
-function rowsOf(statement: SqliteStatement, ...params: BindValue[]): T[] {
- return rowsWithinBudget(statement, { bytes: 0 }, ...params)
-}
-
-function rowsWithinBudget(
- statement: SqliteStatement,
- budget: { bytes: number },
- ...params: BindValue[]
-): T[] {
- const rows: ReturnType = []
- for (const row of statement.iterate(...params)) {
- budget.bytes += Object.values(row).reduce(
- (size, value) => size + (typeof value === 'string' ? Buffer.byteLength(value) : 0),
- 0
- )
- if (rows.length >= 10000 || budget.bytes > 16 * 1024 * 1024) {
- throw new Error('OpenCode transcript query exceeds its read limit')
- }
- rows.push(row)
- }
- // oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: Each caller names the columns projected by its internal SQL query.
- return rows as T[]
-}
-
export function readOpenCodeTranscriptSignal(
dbPath: string,
sessionId: string,
@@ -117,7 +91,8 @@ export function readOpenCodeTranscriptSignal(
return {
cwd: columnExists(db, 'session', 'directory')
? extractString(
- asRecord(db.prepare('SELECT directory FROM session WHERE id = ?').get(sessionId))?.directory
+ asRecord(db.prepare('SELECT directory FROM session WHERE id = ?').get(sessionId))
+ ?.directory
)
: null,
messageCount: messageRow?.message_count ?? 0,
@@ -303,7 +278,10 @@ function mapMessageRows(
? [{ message_id: row.id, time_updated: row.time_updated, data: null }]
: partList
)
- const updated = partList.reduce((max, row) => (row.time_updated > max ? row.time_updated : max), 0)
+ const updated = partList.reduce(
+ (max, row) => (row.time_updated > max ? row.time_updated : max),
+ 0
+ )
for (const message of messages.toReversed()) {
items.push({
rowid: row.message_rowid,
diff --git a/src/main/runtime/session-tabs/structured-session-create-support.ts b/src/main/runtime/session-tabs/structured-session-create-support.ts
index 2220e7499a07..112c0270fc90 100644
--- a/src/main/runtime/session-tabs/structured-session-create-support.ts
+++ b/src/main/runtime/session-tabs/structured-session-create-support.ts
@@ -10,6 +10,7 @@ import {
resolveCommittedStructuredAgentSessionAdoptionIntent,
requireUnownedStructuredAgentSessionAdoption,
resolveStructuredAgentSessionAdoptionForCreate,
+ structuredAgentSessionAdoptAttach,
type StructuredAgentSessionCreateIntentInput
} from '../structured-agent-session-create-adoption'
import { isNativeLocalLocation, LOCAL_EXECUTION_HOST_ID } from '../../../shared/execution-host'
@@ -161,7 +162,8 @@ export abstract class OrcaRuntimeWithGetStructuredAgentSessionCreateSupport exte
selfSessionId: input.envelope.sessionId
})
}
- const structuredAgentCliSourceEvidence = input.structuredAgentCliSourceEvidence ??
+ const structuredAgentCliSourceEvidence =
+ input.structuredAgentCliSourceEvidence ??
(input.resumeFrom?.cliSource
? captureStructuredAgentCliSource(() => this.getAgentProviderSessionRows())
: undefined)
@@ -241,7 +243,9 @@ export abstract class OrcaRuntimeWithGetStructuredAgentSessionCreateSupport exte
return committedReplay
}
const resumeFrom = input.resumeFrom
- const workspaceCwd = resumeFrom ? (await this.resolveRuntimeFileTarget(input.worktree)).worktree.path : ''
+ const workspaceCwd = resumeFrom
+ ? (await this.resolveRuntimeFileTarget(input.worktree)).worktree.path
+ : ''
const selectedAccountHome = await resolveAccountHome({ launchEnv, location })
// Adopting pins the account home to wherever the conversation actually lives, which is not
// necessarily the one a fresh create would pick: Codex resolves its rollout under
@@ -254,10 +258,13 @@ export abstract class OrcaRuntimeWithGetStructuredAgentSessionCreateSupport exte
agent: input.agent,
transcriptImport,
providerSessionId: resumeFrom.providerSessionId,
- resolveTranscriptPath: () => structuredAgentCliSourcePathFromEvidence({
- agent: input.agent, resumeFrom, workspaceId: location.workspaceId,
- evidence: input.structuredAgentCliSourceEvidence
- }),
+ resolveTranscriptPath: () =>
+ structuredAgentCliSourcePathFromEvidence({
+ agent: input.agent,
+ resumeFrom,
+ workspaceId: location.workspaceId,
+ evidence: input.structuredAgentCliSourceEvidence
+ }),
prepareCodexResume: this.prepareAiVaultSessionResumeFn ?? undefined,
selectedAccountHome,
launchEnv: await resolveHostStructuredAgentLaunchEnvironment(input.agent, settings),
@@ -278,23 +285,13 @@ export abstract class OrcaRuntimeWithGetStructuredAgentSessionCreateSupport exte
...(options ? { options } : {}),
...(input.resumeFrom && adoption
? {
- // `adopt` is what makes the reservation seed the handle chain. Presence of
- // `providerHandle` alone must not: `agentSession.ensure` already passes one today
- // without adopting anything.
- adopt: {
- providerHandle: {
- transport: definition.handleTransport,
- agent: definition.agent,
- nativeId: transcriptImport!.handleNamesTranscript
- ? adoption.transcriptPath
- : input.resumeFrom.providerSessionId
- },
+ adopt: structuredAgentSessionAdoptAttach({
+ definition,
+ handleNamesTranscript: transcriptImport!.handleNamesTranscript,
transcriptPath: adoption.transcriptPath,
- source: {
- providerSessionId: input.resumeFrom.providerSessionId,
- workspaceCwd: workspaceCwd
- }
- }
+ providerSessionId: input.resumeFrom.providerSessionId,
+ workspaceCwd
+ })
}
: {}),
runtimeKind: 'native'
diff --git a/src/main/runtime/structured-agent-session-create-adoption.ts b/src/main/runtime/structured-agent-session-create-adoption.ts
index 0288fdeb8d52..d4bf3a99255d 100644
--- a/src/main/runtime/structured-agent-session-create-adoption.ts
+++ b/src/main/runtime/structured-agent-session-create-adoption.ts
@@ -1,12 +1,18 @@
import { stat } from 'node:fs/promises'
-import { agentSessionRefusalError, isAgentSessionRefusalError } from '../../shared/agent-session-wire-refusals'
+import {
+ agentSessionRefusalError,
+ isAgentSessionRefusalError
+} from '../../shared/agent-session-wire-refusals'
import { prepareCodexAdoption } from '../native-chat/codex-adoption-preparation'
import type { NativeCodexResumePreparation } from '../codex/codex-ai-vault-session-resume'
import type { StructuredAgentSessionResumeSource } from '../../shared/structured-agent-session-create'
import type { StructuredAgentCliSourceEvidence } from '../native-chat/structured-agent-cli-source'
import type { AgentSessionAccountHome } from '../../shared/agent-session-account-home'
import type { AgentSessionExecutionLocation } from '../../shared/agent-session-record'
-import type { StructuredAgentId } from '../../shared/agent-session-provider-handle'
+import type {
+ AgentSessionProviderHandle,
+ StructuredAgentId
+} from '../../shared/agent-session-provider-handle'
import { agentSessionExecutionLocationsEqual } from '../../shared/agent-session-record'
import type { AgentSessionAttachParams } from '../native-chat/agent-session-wire/structured-agent-session-attach'
import type { StructuredAgentSessionHost } from '../native-chat/agent-session-wire/structured-agent-session-host'
@@ -112,9 +118,13 @@ export async function resolveStructuredAgentSessionAdoptionForCreate(input: {
const stores = new Map()
const storeOf = (accountHome: AgentSessionAccountHome): string | null => {
if (!stores.has(accountHome)) {
- stores.set(accountHome, input.transcriptImport.conversationStore({
- accountHome, launchEnv: input.launchEnv
- }))
+ stores.set(
+ accountHome,
+ input.transcriptImport.conversationStore({
+ accountHome,
+ launchEnv: input.launchEnv
+ })
+ )
}
return stores.get(accountHome) ?? null
}
@@ -145,8 +155,13 @@ export async function resolveStructuredAgentSessionAdoptionForCreate(input: {
return exact
}
} catch (error) {
- if (!(error instanceof Error && 'code' in error &&
- (error.code === 'ENOENT' || error.code === 'ENOTDIR'))) {
+ if (
+ !(
+ error instanceof Error &&
+ 'code' in error &&
+ (error.code === 'ENOENT' || error.code === 'ENOTDIR')
+ )
+ ) {
throw error
}
}
@@ -165,7 +180,10 @@ export async function resolveStructuredAgentSessionAdoptionForCreate(input: {
if (!found) {
return null
}
- const path = await input.transcriptImport.admitTranscriptPath({ store, transcriptPath: found })
+ const path = await input.transcriptImport.admitTranscriptPath({
+ store,
+ transcriptPath: found
+ })
if (!path) {
throw new Error('The conversation path is outside its account storage.')
}
@@ -175,13 +193,44 @@ export async function resolveStructuredAgentSessionAdoptionForCreate(input: {
workspaceCwd: input.workspaceCwd
})
return input.agent === 'codex'
- ? await prepareCodexAdoption(adoption, input.providerSessionId, input.prepareCodexResume, candidates)
+ ? await prepareCodexAdoption(
+ adoption,
+ input.providerSessionId,
+ input.prepareCodexResume,
+ candidates
+ )
: adoption
} catch (error) {
if (isAgentSessionRefusalError(error)) {
throw error
}
- throw agentSessionRefusalError('agent_session_identity_required',
- { reason: 'transcriptUnreadable' }, error instanceof Error ? error.message : String(error))
+ throw agentSessionRefusalError(
+ 'agent_session_identity_required',
+ { reason: 'transcriptUnreadable' },
+ error instanceof Error ? error.message : String(error)
+ )
+ }
+}
+
+/** `adopt` is what makes the reservation seed the handle chain. Presence of `providerHandle` alone
+ * must not: `agentSession.ensure` already passes one today without adopting anything. */
+export function structuredAgentSessionAdoptAttach(input: {
+ definition: {
+ handleTransport: AgentSessionProviderHandle['transport']
+ agent: AgentSessionProviderHandle['agent']
+ }
+ handleNamesTranscript: boolean | undefined
+ transcriptPath: string
+ providerSessionId: string
+ workspaceCwd: string
+}): NonNullable {
+ return {
+ providerHandle: {
+ transport: input.definition.handleTransport,
+ agent: input.definition.agent,
+ nativeId: input.handleNamesTranscript ? input.transcriptPath : input.providerSessionId
+ },
+ transcriptPath: input.transcriptPath,
+ source: { providerSessionId: input.providerSessionId, workspaceCwd: input.workspaceCwd }
}
}