From 506aa03195a7da0803de8db4d45bbb84f8f83597 Mon Sep 17 00:00:00 2001 From: Neil <4138956+nwparker@users.noreply.github.com> Date: Sun, 18 Oct 2026 06:01:46 -0700 Subject: [PATCH] refactor(managed-server): move the managed server's lifecycle into src/main/managed-server/lifecycle/ (#30343) orcad-managed-*, orcad-runtime-*, orcad-stdio-bridge-*, orcad-decommission-* and orcad-rollback-* leave src/main/ssh. git mv plus import and path-literal rewrites; two e2e route regexes learn the new folder. orcad-runtime-maintenance stays for now because open #29834 edits it. --- config/legacy-relay-compat-tags-baseline.txt | 2 +- config/legacy-relay-importers-baseline.txt | 2 +- config/scripts/ci-shard-timings.json | 42 +++++++-------- .../scripts/pr-e2e-route-contracts.test.mjs | 10 ++-- config/scripts/pr-e2e-source-routing.mjs | 4 +- .../scripts/vitest-sqlite-runtime-files.mjs | 2 +- ...ral-vm-runtime-environment-release.test.ts | 4 +- ...phemeral-vm-runtime-environment-release.ts | 3 +- .../ipc/desktop-browser-bridge-wiring.test.ts | 4 +- src/main/ipc/desktop-browser-bridge-wiring.ts | 2 +- src/main/ipc/managed-orcad-actions.ts | 6 +-- .../ipc/orcad-delta-move-handlers.test.ts | 6 +-- src/main/ipc/orcad-delta-move-handlers.ts | 6 +-- .../orcad-runtime-conversion-handlers.test.ts | 6 +-- .../ipc/orcad-runtime-conversion-handlers.ts | 6 +-- .../orcad-runtime-lifecycle-handlers.test.ts | 4 +- .../ipc/orcad-runtime-lifecycle-handlers.ts | 4 +- ...orcad-runtime-maintenance-handlers.test.ts | 2 +- ...runtime-environment-managed-tunnel.test.ts | 14 ++--- .../ipc/runtime-environment-managed-tunnel.ts | 11 ++-- src/main/ipc/ssh-app-shutdown.test.ts | 2 +- .../ipc/ssh-host-launch-session-note.test.ts | 2 +- src/main/ipc/ssh-host-launch-session-note.ts | 2 +- .../ssh-host-server-on-connect-wiring.test.ts | 10 ++-- .../ipc/ssh-host-server-on-connect-wiring.ts | 12 ++--- src/main/ipc/ssh-host-sleep-reconnect.test.ts | 2 +- src/main/ipc/ssh-host-sleep-reconnect.ts | 2 +- src/main/ipc/ssh-shutdown-drain.ts | 2 +- ...ssh-target-crud-handlers-ownership.test.ts | 4 +- src/main/ipc/ssh-target-crud-handlers.ts | 2 +- src/main/ipc/ssh.ts | 2 +- .../orcad-activation-crash-recovery.test.ts | 4 +- .../activation/orcad-activation-recovery.ts | 2 +- .../orcad-activation-transaction.ts | 2 +- .../install/orcad-remote-context.ts | 2 +- .../install/orcad-remote-decommission.ts | 6 +-- .../orcad-remote-lifecycle-windows.test.ts | 4 +- .../install/orcad-remote-rollback.test.ts | 4 +- .../install/orcad-remote-rollback.ts | 2 +- .../orcad-remote-windows-commands.test.ts | 2 +- .../lifecycle}/orcad-decommission-recovery.ts | 10 ++-- ...ecommission-released-peer-recovery.test.ts | 14 ++--- .../lifecycle}/orcad-decommission-stop.ts | 8 +-- .../orcad-decommission-transaction.test.ts | 6 +-- .../orcad-decommission-transaction.ts | 6 +-- .../orcad-managed-auto-update.test.ts | 10 ++-- .../lifecycle}/orcad-managed-auto-update.ts | 19 ++++--- .../orcad-managed-bound-port.test.ts | 12 ++--- .../lifecycle}/orcad-managed-bound-port.ts | 14 ++--- .../orcad-managed-launch-session.test.ts | 18 ++++--- .../orcad-managed-launch-session.ts | 20 +++---- .../orcad-managed-lifecycle-test-fixture.ts | 14 ++--- .../orcad-managed-migration-status.ts | 6 +-- .../lifecycle}/orcad-managed-remote-stop.ts | 24 ++++----- .../orcad-managed-runtime-context.ts | 33 ++++++------ .../orcad-managed-serving-verify.ts | 2 +- .../lifecycle}/orcad-managed-serving.test.ts | 2 +- .../lifecycle}/orcad-managed-serving.ts | 8 +-- .../lifecycle}/orcad-managed-tunnel-active.ts | 15 +++--- .../orcad-managed-tunnel-bridge-port.test.ts | 8 +-- ...ad-managed-tunnel-identity-restart.test.ts | 16 +++--- .../orcad-managed-tunnel-identity.test.ts | 10 ++-- .../orcad-managed-tunnel-identity.ts | 18 +++---- .../orcad-managed-tunnel-manager.ts | 16 +++--- .../lifecycle}/orcad-managed-tunnel-resume.ts | 14 ++--- .../orcad-managed-tunnel-serving.ts | 6 +-- .../orcad-managed-tunnel-target.test.ts | 12 ++--- .../lifecycle}/orcad-managed-tunnel-target.ts | 11 ++-- .../orcad-managed-tunnel-transport.test.ts | 8 +-- .../orcad-managed-tunnel-transport.ts | 14 ++--- .../lifecycle}/orcad-managed-tunnel.test.ts | 16 +++--- .../lifecycle}/orcad-managed-tunnel.ts | 12 ++--- .../orcad-managed-update-deferrals.test.ts | 0 .../orcad-managed-update-deferrals.ts | 4 +- .../orcad-managed-update-on-restore.test.ts | 4 +- .../orcad-managed-update-on-restore.ts | 4 +- .../orcad-managed-version-gc.test.ts | 8 +-- .../lifecycle}/orcad-managed-version-gc.ts | 12 ++--- .../lifecycle}/orcad-managed-wake.test.ts | 25 ++++----- .../lifecycle}/orcad-managed-wake.ts | 22 ++++---- .../orcad-rollback-terminal-barrier.ts | 4 +- .../lifecycle}/orcad-rollback-transition.ts | 48 ++++++++--------- .../orcad-runtime-conversion-wiring.ts | 16 +++--- .../orcad-runtime-conversion.test.ts | 26 ++++----- .../lifecycle}/orcad-runtime-conversion.ts | 32 +++++------ .../orcad-runtime-decommission.test.ts | 26 ++++----- .../lifecycle}/orcad-runtime-decommission.ts | 24 ++++----- .../orcad-runtime-deployment.test.ts | 54 ++++++++++--------- .../lifecycle}/orcad-runtime-deployment.ts | 48 ++++++++--------- .../lifecycle}/orcad-runtime-forget.test.ts | 14 ++--- .../lifecycle}/orcad-runtime-status.ts | 10 ++-- .../lifecycle}/orcad-runtime-target.test.ts | 12 ++--- .../lifecycle}/orcad-runtime-target.ts | 12 ++--- .../lifecycle}/orcad-stdio-bridge-listener.ts | 6 +-- .../orcad-stdio-bridge-provider.test.ts | 12 ++--- .../lifecycle}/orcad-stdio-bridge-provider.ts | 14 ++--- .../lifecycle}/orcad-stdio-bridge-script.ts | 8 +-- .../lifecycle}/orcad-stdio-bridge-stream.ts | 0 .../orcad-stdio-bridge-test-channel.ts | 2 +- .../ssh-hostile-host-managed-orcad.ts | 2 +- .../ssh-host-relay-census-for-target.test.ts | 2 +- .../ssh-host-relay-census-for-target.ts | 2 +- .../ssh/managed-server-fence-recheck.test.ts | 2 +- src/main/ssh/managed-server-serving-gate.ts | 2 +- .../ssh/managed-server-update-check.test.ts | 2 +- src/main/ssh/managed-server-update-check.ts | 2 +- .../ssh/managed-server-update-deps.test.ts | 2 +- src/main/ssh/managed-server-update-deps.ts | 4 +- src/main/ssh/orcad-already-active-wake.ts | 2 +- src/main/ssh/orcad-conversion-abandon.ts | 2 +- .../ssh/orcad-migration-delta-move.test.ts | 11 ++-- .../orcad-migration-delta-snapshot.test.ts | 11 ++-- .../orcad-migration-repository-link.test.ts | 9 ++-- .../orcad-migration-source-retention.test.ts | 2 +- src/main/ssh/orcad-remote-deploy.ts | 2 +- .../orcad-running-version-adoption.test.ts | 4 +- .../ssh/orcad-running-version-adoption.ts | 2 +- .../ssh/orcad-runtime-maintenance.test.ts | 13 +++-- src/main/ssh/orcad-runtime-maintenance.ts | 13 +++-- src/main/ssh/orcad-ssh-provisioning.test.ts | 6 ++- src/main/ssh/orcad-ssh-provisioning.ts | 4 +- src/main/ssh/orcad-stdio-bridge.test.ts | 12 +++-- src/main/ssh/orcad-stdio-bridge.ts | 7 ++- .../ssh/orcad-terminal-census-client.test.ts | 8 ++- src/main/ssh/orcad-terminal-census-client.ts | 4 +- .../ssh/orcad-unreachable-setup-release.ts | 4 +- .../ssh/orcad-unreachable-setup-stop.test.ts | 4 +- src/main/ssh/orcad-windows-host-script.ts | 2 +- .../orcad-windows-stdio-bridge-test-cell.ts | 2 +- src/main/ssh/runtime-ssh-access.test.ts | 4 +- src/main/ssh/runtime-ssh-access.ts | 4 +- ...erver-on-connect-stopped-elsewhere.test.ts | 4 +- ...h-host-server-on-connect-telemetry.test.ts | 2 +- src/main/ssh/ssh-host-server-on-connect.ts | 2 +- src/main/wsl/wsl-host-server-stop.ts | 4 +- src/main/wsl/wsl-orcad-bridge-test-child.ts | 2 +- src/main/wsl/wsl-orcad-connection.test.ts | 4 +- src/main/wsl/wsl-orcad-connection.ts | 2 +- src/main/wsl/wsl-orcad-deploy.test.ts | 12 +++-- src/main/wsl/wsl-orcad-deploy.ts | 8 +-- src/main/wsl/wsl-orcad-incumbent.ts | 6 +-- .../wsl/wsl-orcad-instance-adoption.test.ts | 2 +- src/main/wsl/wsl-orcad-instance-adoption.ts | 2 +- src/main/wsl/wsl-orcad-pairing-identity.ts | 2 +- src/main/wsl/wsl-orcad-stdio-bridge.test.ts | 4 +- src/main/wsl/wsl-orcad-stdio-bridge.ts | 2 +- src/main/wsl/wsl-orcad-watch.ts | 2 +- 147 files changed, 663 insertions(+), 608 deletions(-) rename src/main/{ssh => managed-server/lifecycle}/orcad-decommission-recovery.ts (86%) rename src/main/{ssh => managed-server/lifecycle}/orcad-decommission-released-peer-recovery.test.ts (93%) rename src/main/{ssh => managed-server/lifecycle}/orcad-decommission-stop.ts (90%) rename src/main/{ssh => managed-server/lifecycle}/orcad-decommission-transaction.test.ts (94%) rename src/main/{ssh => managed-server/lifecycle}/orcad-decommission-transaction.ts (96%) rename src/main/{ssh => managed-server/lifecycle}/orcad-managed-auto-update.test.ts (95%) rename src/main/{ssh => managed-server/lifecycle}/orcad-managed-auto-update.ts (91%) rename src/main/{ssh => managed-server/lifecycle}/orcad-managed-bound-port.test.ts (89%) rename src/main/{ssh => managed-server/lifecycle}/orcad-managed-bound-port.ts (85%) rename src/main/{ssh => managed-server/lifecycle}/orcad-managed-launch-session.test.ts (91%) rename src/main/{ssh => managed-server/lifecycle}/orcad-managed-launch-session.ts (90%) rename src/main/{ssh => managed-server/lifecycle}/orcad-managed-lifecycle-test-fixture.ts (86%) rename src/main/{ssh => managed-server/lifecycle}/orcad-managed-migration-status.ts (91%) rename src/main/{ssh => managed-server/lifecycle}/orcad-managed-remote-stop.ts (88%) rename src/main/{ssh => managed-server/lifecycle}/orcad-managed-runtime-context.ts (82%) rename src/main/{ssh => managed-server/lifecycle}/orcad-managed-serving-verify.ts (87%) rename src/main/{ssh => managed-server/lifecycle}/orcad-managed-serving.test.ts (99%) rename src/main/{ssh => managed-server/lifecycle}/orcad-managed-serving.ts (96%) rename src/main/{ssh => managed-server/lifecycle}/orcad-managed-tunnel-active.ts (86%) rename src/main/{ssh => managed-server/lifecycle}/orcad-managed-tunnel-bridge-port.test.ts (84%) rename src/main/{ssh => managed-server/lifecycle}/orcad-managed-tunnel-identity-restart.test.ts (89%) rename src/main/{ssh => managed-server/lifecycle}/orcad-managed-tunnel-identity.test.ts (93%) rename src/main/{ssh => managed-server/lifecycle}/orcad-managed-tunnel-identity.ts (86%) rename src/main/{ssh => managed-server/lifecycle}/orcad-managed-tunnel-manager.ts (95%) rename src/main/{ssh => managed-server/lifecycle}/orcad-managed-tunnel-resume.ts (94%) rename src/main/{ssh => managed-server/lifecycle}/orcad-managed-tunnel-serving.ts (87%) rename src/main/{ssh => managed-server/lifecycle}/orcad-managed-tunnel-target.test.ts (95%) rename src/main/{ssh => managed-server/lifecycle}/orcad-managed-tunnel-target.ts (95%) rename src/main/{ssh => managed-server/lifecycle}/orcad-managed-tunnel-transport.test.ts (95%) rename src/main/{ssh => managed-server/lifecycle}/orcad-managed-tunnel-transport.ts (91%) rename src/main/{ssh => managed-server/lifecycle}/orcad-managed-tunnel.test.ts (98%) rename src/main/{ssh => managed-server/lifecycle}/orcad-managed-tunnel.ts (86%) rename src/main/{ssh => managed-server/lifecycle}/orcad-managed-update-deferrals.test.ts (100%) rename src/main/{ssh => managed-server/lifecycle}/orcad-managed-update-deferrals.ts (90%) rename src/main/{ssh => managed-server/lifecycle}/orcad-managed-update-on-restore.test.ts (97%) rename src/main/{ssh => managed-server/lifecycle}/orcad-managed-update-on-restore.ts (97%) rename src/main/{ssh => managed-server/lifecycle}/orcad-managed-version-gc.test.ts (92%) rename src/main/{ssh => managed-server/lifecycle}/orcad-managed-version-gc.ts (80%) rename src/main/{ssh => managed-server/lifecycle}/orcad-managed-wake.test.ts (93%) rename src/main/{ssh => managed-server/lifecycle}/orcad-managed-wake.ts (87%) rename src/main/{ssh => managed-server/lifecycle}/orcad-rollback-terminal-barrier.ts (96%) rename src/main/{ssh => managed-server/lifecycle}/orcad-rollback-transition.ts (84%) rename src/main/{ssh => managed-server/lifecycle}/orcad-runtime-conversion-wiring.ts (82%) rename src/main/{ssh => managed-server/lifecycle}/orcad-runtime-conversion.test.ts (94%) rename src/main/{ssh => managed-server/lifecycle}/orcad-runtime-conversion.ts (89%) rename src/main/{ssh => managed-server/lifecycle}/orcad-runtime-decommission.test.ts (91%) rename src/main/{ssh => managed-server/lifecycle}/orcad-runtime-decommission.ts (90%) rename src/main/{ssh => managed-server/lifecycle}/orcad-runtime-deployment.test.ts (94%) rename src/main/{ssh => managed-server/lifecycle}/orcad-runtime-deployment.ts (83%) rename src/main/{ssh => managed-server/lifecycle}/orcad-runtime-forget.test.ts (88%) rename src/main/{ssh => managed-server/lifecycle}/orcad-runtime-status.ts (85%) rename src/main/{ssh => managed-server/lifecycle}/orcad-runtime-target.test.ts (84%) rename src/main/{ssh => managed-server/lifecycle}/orcad-runtime-target.ts (61%) rename src/main/{ssh => managed-server/lifecycle}/orcad-stdio-bridge-listener.ts (95%) rename src/main/{ssh => managed-server/lifecycle}/orcad-stdio-bridge-provider.test.ts (94%) rename src/main/{ssh => managed-server/lifecycle}/orcad-stdio-bridge-provider.ts (86%) rename src/main/{ssh => managed-server/lifecycle}/orcad-stdio-bridge-script.ts (94%) rename src/main/{ssh => managed-server/lifecycle}/orcad-stdio-bridge-stream.ts (100%) rename src/main/{ssh => managed-server/lifecycle}/orcad-stdio-bridge-test-channel.ts (95%) diff --git a/config/legacy-relay-compat-tags-baseline.txt b/config/legacy-relay-compat-tags-baseline.txt index 04999e172a9..e926fc7a62b 100644 --- a/config/legacy-relay-compat-tags-baseline.txt +++ b/config/legacy-relay-compat-tags-baseline.txt @@ -17,7 +17,7 @@ src/main/ssh/orcad-migration-repository-link.test.ts src/main/ssh/orcad-migration-terminal-gate-host-wide.test.ts src/main/ssh/orcad-migration-terminal-gate.test.ts src/main/ssh/orcad-migration-terminal-gate.ts -src/main/ssh/orcad-runtime-conversion.test.ts +src/main/managed-server/lifecycle/orcad-runtime-conversion.test.ts src/main/ssh/ssh-host-server-on-connect.test.ts src/main/ssh/ssh-host-server-on-connect.ts src/main/ssh/ssh-target-orcad-preflight.ts diff --git a/config/legacy-relay-importers-baseline.txt b/config/legacy-relay-importers-baseline.txt index 0fab6a1a129..f6750a2f7b3 100644 --- a/config/legacy-relay-importers-baseline.txt +++ b/config/legacy-relay-importers-baseline.txt @@ -10,6 +10,6 @@ src/main/ipc/ssh-host-server-on-connect-wiring.ts src/main/ipc/ssh-session-teardown.ts src/main/ipc/ssh.ts src/main/ssh/orcad-migration-terminal-gate-host-wide.test.ts -src/main/ssh/orcad-runtime-conversion-wiring.ts +src/main/managed-server/lifecycle/orcad-runtime-conversion-wiring.ts tests/e2e/cross-version-wire/legacy-relay-bridge.unit.test.ts tests/e2e/helpers/legacy-relay-docker-host.ts diff --git a/config/scripts/ci-shard-timings.json b/config/scripts/ci-shard-timings.json index 9c87ea86576..e9812315df6 100644 --- a/config/scripts/ci-shard-timings.json +++ b/config/scripts/ci-shard-timings.json @@ -5593,27 +5593,27 @@ "src/main/ssh/orcad-activation-outcome-log.test.ts": 40, "src/main/managed-server/activation/orcad-activation-record.test.ts": 245, "src/main/managed-server/activation/orcad-activation-transaction.test.ts": 451, - "src/main/ssh/orcad-decommission-released-peer-recovery.test.ts": 266, - "src/main/ssh/orcad-decommission-transaction.test.ts": 309, + "src/main/managed-server/lifecycle/orcad-decommission-released-peer-recovery.test.ts": 266, + "src/main/managed-server/lifecycle/orcad-decommission-transaction.test.ts": 309, "src/main/ssh/orcad-deployment-target.test.ts": 263, "src/main/ssh/orcad-exited-own-fence-mutation-race.test.ts": 822, "src/main/ssh/orcad-exited-own-fence.test.ts": 5949, "src/main/ssh/orcad-exited-own-install-lock.test.ts": 4491, "src/main/ssh/orcad-exited-own-lock-windows.test.ts": 422, "src/main/ssh/orcad-fence-lost-classification.test.ts": 374, - "src/main/ssh/orcad-managed-auto-update.test.ts": 438, - "src/main/ssh/orcad-managed-bound-port.test.ts": 442, - "src/main/ssh/orcad-managed-serving.test.ts": 489, - "src/main/ssh/orcad-managed-tunnel-bridge-port.test.ts": 414, - "src/main/ssh/orcad-managed-tunnel-identity-restart.test.ts": 5282, - "src/main/ssh/orcad-managed-tunnel-identity.test.ts": 447, - "src/main/ssh/orcad-managed-tunnel-target.test.ts": 558, - "src/main/ssh/orcad-managed-tunnel-transport.test.ts": 437, - "src/main/ssh/orcad-managed-tunnel.test.ts": 914, - "src/main/ssh/orcad-managed-update-deferrals.test.ts": 30, - "src/main/ssh/orcad-managed-update-on-restore.test.ts": 422, - "src/main/ssh/orcad-managed-version-gc.test.ts": 380, - "src/main/ssh/orcad-managed-wake.test.ts": 567, + "src/main/managed-server/lifecycle/orcad-managed-auto-update.test.ts": 438, + "src/main/managed-server/lifecycle/orcad-managed-bound-port.test.ts": 442, + "src/main/managed-server/lifecycle/orcad-managed-serving.test.ts": 489, + "src/main/managed-server/lifecycle/orcad-managed-tunnel-bridge-port.test.ts": 414, + "src/main/managed-server/lifecycle/orcad-managed-tunnel-identity-restart.test.ts": 5282, + "src/main/managed-server/lifecycle/orcad-managed-tunnel-identity.test.ts": 447, + "src/main/managed-server/lifecycle/orcad-managed-tunnel-target.test.ts": 558, + "src/main/managed-server/lifecycle/orcad-managed-tunnel-transport.test.ts": 437, + "src/main/managed-server/lifecycle/orcad-managed-tunnel.test.ts": 914, + "src/main/managed-server/lifecycle/orcad-managed-update-deferrals.test.ts": 30, + "src/main/managed-server/lifecycle/orcad-managed-update-on-restore.test.ts": 422, + "src/main/managed-server/lifecycle/orcad-managed-version-gc.test.ts": 380, + "src/main/managed-server/lifecycle/orcad-managed-wake.test.ts": 567, "src/main/ssh/orcad-migration-catalog-client-extra-agent-args.test.ts": 351, "src/main/ssh/orcad-migration-catalog-client-source-kind.test.ts": 378, "src/main/ssh/orcad-migration-catalog-client.test.ts": 373, @@ -5660,19 +5660,19 @@ "src/main/ssh/orcad-retained-fence-takeover.test.ts": 200, "src/main/ssh/orcad-retained-source-lists.test.ts": 504, "src/main/ssh/orcad-running-version-adoption.test.ts": 383, - "src/main/ssh/orcad-runtime-conversion.test.ts": 2187, - "src/main/ssh/orcad-runtime-decommission.test.ts": 877, - "src/main/ssh/orcad-runtime-deployment.test.ts": 873, - "src/main/ssh/orcad-runtime-forget.test.ts": 814, + "src/main/managed-server/lifecycle/orcad-runtime-conversion.test.ts": 2187, + "src/main/managed-server/lifecycle/orcad-runtime-decommission.test.ts": 877, + "src/main/managed-server/lifecycle/orcad-runtime-deployment.test.ts": 873, + "src/main/managed-server/lifecycle/orcad-runtime-forget.test.ts": 814, "src/main/ssh/orcad-runtime-maintenance.test.ts": 894, - "src/main/ssh/orcad-runtime-target.test.ts": 217, + "src/main/managed-server/lifecycle/orcad-runtime-target.test.ts": 217, "src/main/ssh/orcad-ssh-provisioning.test.ts": 271, "src/main/ssh/orcad-state-mutation-exec.test.ts": 360, "src/main/ssh/orcad-state-mutation-fence-heartbeat.test.ts": 4403, "src/main/ssh/orcad-state-mutation-timeout.test.ts": 434, "src/main/ssh/orcad-state-snapshot-shell.test.ts": 832, "src/main/ssh/orcad-state-snapshot.test.ts": 334, - "src/main/ssh/orcad-stdio-bridge-provider.test.ts": 705, + "src/main/managed-server/lifecycle/orcad-stdio-bridge-provider.test.ts": 705, "src/main/ssh/orcad-stdio-bridge.test.ts": 597, "src/main/ssh/orcad-terminal-census-client.test.ts": 302, "src/main/ssh/orcad-tunneled-pairing.test.ts": 257, diff --git a/config/scripts/pr-e2e-route-contracts.test.mjs b/config/scripts/pr-e2e-route-contracts.test.mjs index 0ea8c2e17de..5bfed39aca8 100644 --- a/config/scripts/pr-e2e-route-contracts.test.mjs +++ b/config/scripts/pr-e2e-route-contracts.test.mjs @@ -354,7 +354,7 @@ describe('orcad-e2e-routing', () => { it('routes the auto-convert spec from its conversion sources and harness', () => { expectRouted( [ - 'src/main/ssh/orcad-runtime-conversion.ts', + 'src/main/managed-server/lifecycle/orcad-runtime-conversion.ts', 'tests/e2e/helpers/orcad-convert-flow.ts', 'tests/e2e/helpers/orcad-convert-host.ts', 'tests/e2e/helpers/orcad-template-variant.ts', @@ -362,9 +362,9 @@ describe('orcad-e2e-routing', () => { ], ORCAD_AUTO_CONVERT_E2E_SPEC ) - expect(selectPrE2eSpecs(['src/main/ssh/orcad-runtime-conversion.test.ts'])).not.toContain( - ORCAD_AUTO_CONVERT_E2E_SPEC - ) + expect( + selectPrE2eSpecs(['src/main/managed-server/lifecycle/orcad-runtime-conversion.test.ts']) + ).not.toContain(ORCAD_AUTO_CONVERT_E2E_SPEC) }) it('routes the idle-exit spec from its idle sources and the shared convert harness', () => { @@ -372,7 +372,7 @@ describe('orcad-e2e-routing', () => { [ 'src/shared/orcad-idle-exit.ts', 'src/main/managed-server/install/orcad-remote-runtime-control.ts', - 'src/main/ssh/orcad-managed-serving.ts', + 'src/main/managed-server/lifecycle/orcad-managed-serving.ts', 'tests/e2e/helpers/orcad-convert-flow.ts', 'tests/e2e/helpers/orcad-convert-host.ts' ], diff --git a/config/scripts/pr-e2e-source-routing.mjs b/config/scripts/pr-e2e-source-routing.mjs index 1bfe018d222..46f6f0265ae 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\/(?:ssh-host-server-|orcad-runtime-conversion|orcad-migration-|orcad-retained-source|orcad-runtime-deployment))/.test( + /^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( file )) }, @@ -248,7 +248,7 @@ export const PR_E2E_SOURCE_ROUTES = [ file ) || (isProductSource(file) && - /^src\/(?:main\/ssh\/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-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( file )) }, diff --git a/config/scripts/vitest-sqlite-runtime-files.mjs b/config/scripts/vitest-sqlite-runtime-files.mjs index fdb3f6de94d..f1467cab8cb 100644 --- a/config/scripts/vitest-sqlite-runtime-files.mjs +++ b/config/scripts/vitest-sqlite-runtime-files.mjs @@ -296,7 +296,7 @@ export const SQLITE_RUNTIME_INCLUDE = [ 'src/main/ssh/orcad-migration-source-fence.test.ts', 'src/main/ssh/orcad-migration-ssh-relay-source.test.ts', 'src/main/ssh/orcad-migration-stuck-host-profiles.test.ts', - 'src/main/ssh/orcad-runtime-conversion.test.ts', + 'src/main/managed-server/lifecycle/orcad-runtime-conversion.test.ts', 'src/main/ssh/orcad-unreachable-setup-release.test.ts', 'src/main/ssh/ssh-target-orcad-preflight.test.ts', 'src/main/worktree-identity-persistence.test.ts', diff --git a/src/main/ephemeral-vm-runtime-environment-release.test.ts b/src/main/ephemeral-vm-runtime-environment-release.test.ts index e563cfc9b1a..5ae4485f316 100644 --- a/src/main/ephemeral-vm-runtime-environment-release.test.ts +++ b/src/main/ephemeral-vm-runtime-environment-release.test.ts @@ -14,7 +14,9 @@ vi.mock('../shared/runtime-environment-store', () => ({ vi.mock('../shared/runtime-environment-managed-orcad-store', () => ({ removeManagedOrcadEnvironment: mocks.removeManaged })) -vi.mock('./ssh/orcad-managed-tunnel', () => ({ closeOrcadManagedTunnel: mocks.closeTunnel })) +vi.mock('./managed-server/lifecycle/orcad-managed-tunnel', () => ({ + closeOrcadManagedTunnel: mocks.closeTunnel +})) import { releaseEphemeralVmRuntimeEnvironments } from './ephemeral-vm-runtime-environment-release' diff --git a/src/main/ephemeral-vm-runtime-environment-release.ts b/src/main/ephemeral-vm-runtime-environment-release.ts index 59d5ab1b58c..0158ff5f8ae 100644 --- a/src/main/ephemeral-vm-runtime-environment-release.ts +++ b/src/main/ephemeral-vm-runtime-environment-release.ts @@ -20,7 +20,8 @@ export async function releaseEphemeralVmRuntimeEnvironments( removeEnvironment(userDataPath, environment.id) continue } - const { closeOrcadManagedTunnel } = await import('./ssh/orcad-managed-tunnel') + const { closeOrcadManagedTunnel } = + await import('./managed-server/lifecycle/orcad-managed-tunnel') await closeOrcadManagedTunnel(environment.id).catch(() => undefined) removeManagedOrcadEnvironment(userDataPath, environment.id) } diff --git a/src/main/ipc/desktop-browser-bridge-wiring.test.ts b/src/main/ipc/desktop-browser-bridge-wiring.test.ts index 58b0b889517..50e753882cd 100644 --- a/src/main/ipc/desktop-browser-bridge-wiring.test.ts +++ b/src/main/ipc/desktop-browser-bridge-wiring.test.ts @@ -10,7 +10,9 @@ 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/orcad-managed-tunnel', () => ({ ensureOrcadManagedTunnel: vi.fn() })) +vi.mock('../managed-server/lifecycle/orcad-managed-tunnel', () => ({ + ensureOrcadManagedTunnel: vi.fn() +})) vi.mock('../ssh/ssh-target-registry', async (importOriginal) => ({ ...(await importOriginal>()), getSshTargetRegistryStore: () => ({ listTargets: () => targets }) diff --git a/src/main/ipc/desktop-browser-bridge-wiring.ts b/src/main/ipc/desktop-browser-bridge-wiring.ts index a0c176c12ee..3f777d63f45 100644 --- a/src/main/ipc/desktop-browser-bridge-wiring.ts +++ b/src/main/ipc/desktop-browser-bridge-wiring.ts @@ -30,7 +30,7 @@ import { rendererResolveRemoteCliWorkspace } from '../browser/desktop-browser-br import type { OrcaRuntimeService } from '../runtime/orca-runtime' import { RpcDispatcher } from '../runtime/rpc/dispatcher' import { ALL_RPC_METHODS } from '../runtime/rpc/methods' -import { ensureOrcadManagedTunnel } from '../ssh/orcad-managed-tunnel' +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' diff --git a/src/main/ipc/managed-orcad-actions.ts b/src/main/ipc/managed-orcad-actions.ts index eac186709ee..3171b8bf181 100644 --- a/src/main/ipc/managed-orcad-actions.ts +++ b/src/main/ipc/managed-orcad-actions.ts @@ -3,8 +3,8 @@ import { cancelManagedOrcadStop, forgetManagedOrcadEnvironment, stopManagedOrcadEnvironment -} from '../ssh/orcad-runtime-decommission' -import { getManagedOrcadRuntimeStatus } from '../ssh/orcad-runtime-status' +} from '../managed-server/lifecycle/orcad-runtime-decommission' +import { getManagedOrcadRuntimeStatus } from '../managed-server/lifecycle/orcad-runtime-status' import { recoverManagedOrcadEnvironment, rollbackManagedOrcadEnvironment, @@ -13,7 +13,7 @@ import { import { getOrcadSshDeployment } from '../../shared/runtime-environments' import { resolveEnvironment } from '../../shared/runtime-environment-store' import type { OrcadManagedRestartResult } from '../../shared/orcad-managed-runtime' -import { restartManagedOrcadEnvironment } from '../ssh/orcad-managed-launch-session' +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' diff --git a/src/main/ipc/orcad-delta-move-handlers.test.ts b/src/main/ipc/orcad-delta-move-handlers.test.ts index 47bc074b325..f1197f36d45 100644 --- a/src/main/ipc/orcad-delta-move-handlers.test.ts +++ b/src/main/ipc/orcad-delta-move-handlers.test.ts @@ -19,7 +19,7 @@ vi.mock('electron', () => ({ ipcMain: { handle: mocks.handle } })) vi.mock('../../shared/runtime-environment-store', () => ({ listEnvironments: () => [{ id: 'env-1' }] })) -vi.mock('../ssh/orcad-managed-runtime-context', () => ({ +vi.mock('../managed-server/lifecycle/orcad-managed-runtime-context', () => ({ requireManagedOrcadInfrastructure: () => ({ claims: {}, targetStore: { getOrcadMigrationSource: () => ({ getSshTarget: () => mocks.target }) } @@ -29,10 +29,10 @@ vi.mock('../ssh/orcad-migration-delta-move', () => ({ runOrcadDeltaMove: mocks.move, keepOrcadServerVersion: mocks.keep })) -vi.mock('../ssh/orcad-runtime-conversion-wiring', () => ({ +vi.mock('../managed-server/lifecycle/orcad-runtime-conversion-wiring', () => ({ orcadMigrationDestinationFor: () => ({}) })) -vi.mock('../ssh/orcad-managed-tunnel', () => ({ +vi.mock('../managed-server/lifecycle/orcad-managed-tunnel', () => ({ ensureOrcadManagedTunnel: vi.fn() })) vi.mock('./ssh-session-teardown', () => ({ diff --git a/src/main/ipc/orcad-delta-move-handlers.ts b/src/main/ipc/orcad-delta-move-handlers.ts index 123e5134cc3..301f176023a 100644 --- a/src/main/ipc/orcad-delta-move-handlers.ts +++ b/src/main/ipc/orcad-delta-move-handlers.ts @@ -5,12 +5,12 @@ import type { OrcadDeltaMoveResult } from '../../shared/orcad-managed-runtime' import { listEnvironments } from '../../shared/runtime-environment-store' -import { requireManagedOrcadInfrastructure } from '../ssh/orcad-managed-runtime-context' -import { ensureOrcadManagedTunnel } from '../ssh/orcad-managed-tunnel' +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 '../ssh/orcad-runtime-conversion-wiring' +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' diff --git a/src/main/ipc/orcad-runtime-conversion-handlers.test.ts b/src/main/ipc/orcad-runtime-conversion-handlers.test.ts index 5f570e5c586..6da525e48c0 100644 --- a/src/main/ipc/orcad-runtime-conversion-handlers.test.ts +++ b/src/main/ipc/orcad-runtime-conversion-handlers.test.ts @@ -7,13 +7,13 @@ const mocks = vi.hoisted(() => ({ })) vi.mock('electron', () => ({ ipcMain: { handle: mocks.handle } })) -vi.mock('../ssh/orcad-runtime-conversion', () => ({ +vi.mock('../managed-server/lifecycle/orcad-runtime-conversion', () => ({ convertSshTargetToManagedOrcad: mocks.convert })) -vi.mock('../ssh/orcad-managed-migration-status', () => ({ +vi.mock('../managed-server/lifecycle/orcad-managed-migration-status', () => ({ listPendingManagedOrcadMigrations: mocks.pending })) -vi.mock('../ssh/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/orcad-runtime-conversion-handlers.ts index 5ad1837a3fc..de3d8931abd 100644 --- a/src/main/ipc/orcad-runtime-conversion-handlers.ts +++ b/src/main/ipc/orcad-runtime-conversion-handlers.ts @@ -3,9 +3,9 @@ import type { OrcadManagedConversionResult, OrcadManagedPendingMigrationRow } from '../../shared/orcad-managed-runtime' -import { listPendingManagedOrcadMigrations } from '../ssh/orcad-managed-migration-status' -import { convertSshTargetToManagedOrcad } from '../ssh/orcad-runtime-conversion' -import { conversionCollaborators } from '../ssh/orcad-runtime-conversion-wiring' +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/orcad-runtime-lifecycle-handlers.test.ts index 233108aa431..b0de2efa3b5 100644 --- a/src/main/ipc/orcad-runtime-lifecycle-handlers.test.ts +++ b/src/main/ipc/orcad-runtime-lifecycle-handlers.test.ts @@ -8,10 +8,10 @@ const mocks = vi.hoisted(() => ({ })) vi.mock('electron', () => ({ ipcMain: { handle: mocks.handle } })) -vi.mock('../ssh/orcad-runtime-deployment', () => ({ +vi.mock('../managed-server/lifecycle/orcad-runtime-deployment', () => ({ createManagedOrcadEnvironment: mocks.deploy })) -vi.mock('../ssh/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/orcad-runtime-lifecycle-handlers.ts index ebdd5efe38e..0383bec3696 100644 --- a/src/main/ipc/orcad-runtime-lifecycle-handlers.ts +++ b/src/main/ipc/orcad-runtime-lifecycle-handlers.ts @@ -1,7 +1,7 @@ import { ipcMain } from 'electron' import type { OrcadManagedRuntimeStatus } from '../../shared/orcad-managed-runtime' -import { createManagedOrcadEnvironment } from '../ssh/orcad-runtime-deployment' -import { getManagedOrcadRuntimeStatus } from '../ssh/orcad-runtime-status' +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/orcad-runtime-maintenance-handlers.test.ts index 5b23df3fbfd..e452664a91e 100644 --- a/src/main/ipc/orcad-runtime-maintenance-handlers.test.ts +++ b/src/main/ipc/orcad-runtime-maintenance-handlers.test.ts @@ -16,7 +16,7 @@ vi.mock('../ssh/orcad-runtime-maintenance', () => ({ rollbackManagedOrcadEnvironment: mocks.rollback, recoverManagedOrcadEnvironment: mocks.recover })) -vi.mock('../ssh/orcad-runtime-decommission', () => ({ +vi.mock('../managed-server/lifecycle/orcad-runtime-decommission', () => ({ stopManagedOrcadEnvironment: mocks.stop, cancelManagedOrcadStop: mocks.cancel })) diff --git a/src/main/ipc/runtime-environment-managed-tunnel.test.ts b/src/main/ipc/runtime-environment-managed-tunnel.test.ts index 374a531eb58..a90f26a1d08 100644 --- a/src/main/ipc/runtime-environment-managed-tunnel.test.ts +++ b/src/main/ipc/runtime-environment-managed-tunnel.test.ts @@ -1,6 +1,6 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type * as ServingModule from '../ssh/orcad-managed-serving' -import type { ManagedOrcadStartListener } from '../ssh/orcad-managed-serving' +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(() => { @@ -38,14 +38,14 @@ vi.mock('../wsl/wsl-host-service-instance', () => ({ mocks.hasWslService ? { ensureForRuntimeCall: mocks.ensureForRuntimeCall } : null })) vi.mock('../ssh/managed-server-update-deps', () => ({ managedServerUpdateDeps: () => ({}) })) -vi.mock('../ssh/orcad-managed-tunnel', () => ({ +vi.mock('../managed-server/lifecycle/orcad-managed-tunnel', () => ({ ensureOrcadManagedTunnel: mocks.ensureTunnel, rebuildOrcadManagedTunnel: mocks.rebuildTunnel })) -vi.mock('../ssh/orcad-managed-serving-verify', () => ({ +vi.mock('../managed-server/lifecycle/orcad-managed-serving-verify', () => ({ verifyOrcadManagedServing: mocks.verify })) -vi.mock('../ssh/orcad-managed-update-on-restore', () => ({ +vi.mock('../managed-server/lifecycle/orcad-managed-update-on-restore', () => ({ updateManagedOrcadOnRestore: mocks.restoreUpdate, redeployStoppedManagedOrcad: mocks.redeploy })) @@ -56,14 +56,14 @@ vi.mock('./ssh-renderer-broadcast', () => ({ broadcastSshState: vi.fn() })) vi.mock('./ssh-host-launch-session-note', () => ({ forgetLaunchSessionVerdict: mocks.forgetVerdict })) -vi.mock('../ssh/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 '../ssh/orcad-managed-serving' +import { MANAGED_ORCAD_NOT_ACTIVATED_DETAIL } from '../managed-server/lifecycle/orcad-managed-serving' import { installManagedOrcadStartStatus, resolveManagedRuntimeEnvironment diff --git a/src/main/ipc/runtime-environment-managed-tunnel.ts b/src/main/ipc/runtime-environment-managed-tunnel.ts index 0f67da3ebe8..d2e3b326e48 100644 --- a/src/main/ipc/runtime-environment-managed-tunnel.ts +++ b/src/main/ipc/runtime-environment-managed-tunnel.ts @@ -10,17 +10,20 @@ import type { SshTarget } from '../../shared/ssh-types' import { managedServerUpdateDeps } from '../ssh/managed-server-update-deps' -import { ensureOrcadManagedTunnel, rebuildOrcadManagedTunnel } from '../ssh/orcad-managed-tunnel' -import { verifyOrcadManagedServing } from '../ssh/orcad-managed-serving-verify' +import { + ensureOrcadManagedTunnel, + rebuildOrcadManagedTunnel +} 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 '../ssh/orcad-managed-serving' +} from '../managed-server/lifecycle/orcad-managed-serving' import { redeployStoppedManagedOrcad, updateManagedOrcadOnRestore -} from '../ssh/orcad-managed-update-on-restore' +} 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' diff --git a/src/main/ipc/ssh-app-shutdown.test.ts b/src/main/ipc/ssh-app-shutdown.test.ts index 5ed11af3f87..a299063c4b3 100644 --- a/src/main/ipc/ssh-app-shutdown.test.ts +++ b/src/main/ipc/ssh-app-shutdown.test.ts @@ -14,7 +14,7 @@ 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('../ssh/orcad-managed-tunnel', async (importOriginal) => ({ +vi.mock('../managed-server/lifecycle/orcad-managed-tunnel', async (importOriginal) => ({ ...(await importOriginal>()), shutdownOrcadManagedTunnels: shutdownTunnelsMock })) diff --git a/src/main/ipc/ssh-host-launch-session-note.test.ts b/src/main/ipc/ssh-host-launch-session-note.test.ts index 2b349a62892..89a58f0f63d 100644 --- a/src/main/ipc/ssh-host-launch-session-note.test.ts +++ b/src/main/ipc/ssh-host-launch-session-note.test.ts @@ -17,7 +17,7 @@ vi.mock('../../shared/app-environment', () => ({ vi.mock('../../shared/runtime-environment-store', () => ({ listEnvironments: () => mocks.environments.current.map((id) => ({ id })) })) -vi.mock('../ssh/orcad-managed-launch-session', () => ({ +vi.mock('../managed-server/lifecycle/orcad-managed-launch-session', () => ({ readManagedOrcadLaunchSshSession: mocks.read })) vi.mock('../ssh/ssh-host-platform-memo', () => ({ diff --git a/src/main/ipc/ssh-host-launch-session-note.ts b/src/main/ipc/ssh-host-launch-session-note.ts index 853ab5e6bae..4487277e0cc 100644 --- a/src/main/ipc/ssh-host-launch-session-note.ts +++ b/src/main/ipc/ssh-host-launch-session-note.ts @@ -1,7 +1,7 @@ /** 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 '../ssh/orcad-managed-launch-session' +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' diff --git a/src/main/ipc/ssh-host-server-on-connect-wiring.test.ts b/src/main/ipc/ssh-host-server-on-connect-wiring.test.ts index 51d05f5a4e8..053bdd4f908 100644 --- a/src/main/ipc/ssh-host-server-on-connect-wiring.test.ts +++ b/src/main/ipc/ssh-host-server-on-connect-wiring.test.ts @@ -25,11 +25,15 @@ vi.mock('../../shared/app-environment', () => ({ vi.mock('../ssh/ssh-target-registry', () => ({ getSshTargetRegistryStore: () => mocks.registry.current })) -vi.mock('../ssh/orcad-runtime-deployment', () => ({ createManagedOrcadEnvironment: mocks.deploy })) -vi.mock('../ssh/orcad-runtime-conversion', () => ({ +vi.mock('../managed-server/lifecycle/orcad-runtime-deployment', () => ({ + createManagedOrcadEnvironment: mocks.deploy +})) +vi.mock('../managed-server/lifecycle/orcad-runtime-conversion', () => ({ convertSshTargetToManagedOrcad: mocks.convert })) -vi.mock('../ssh/orcad-managed-tunnel', () => ({ ensureOrcadManagedTunnel: mocks.tunnel })) +vi.mock('../managed-server/lifecycle/orcad-managed-tunnel', () => ({ + ensureOrcadManagedTunnel: mocks.tunnel +})) vi.mock('../orcad/orcad-artifact-materializer', () => ({ hasOrcadTemplate: () => true })) vi.mock('./ssh-renderer-broadcast', () => ({ broadcastSshState: mocks.broadcast })) vi.mock('./ssh-ipc-context', () => ({ getCurrentMainWindow: () => null })) diff --git a/src/main/ipc/ssh-host-server-on-connect-wiring.ts b/src/main/ipc/ssh-host-server-on-connect-wiring.ts index 65835a7150b..d9e550b0960 100644 --- a/src/main/ipc/ssh-host-server-on-connect-wiring.ts +++ b/src/main/ipc/ssh-host-server-on-connect-wiring.ts @@ -10,21 +10,21 @@ 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 '../ssh/orcad-managed-tunnel' -import { verifyOrcadManagedServing } from '../ssh/orcad-managed-serving-verify' -import { convertSshTargetToManagedOrcad } from '../ssh/orcad-runtime-conversion' +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 '../ssh/orcad-runtime-conversion-wiring' -import { createManagedOrcadEnvironment } from '../ssh/orcad-runtime-deployment' +} 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 '../ssh/orcad-managed-runtime-context' +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' diff --git a/src/main/ipc/ssh-host-sleep-reconnect.test.ts b/src/main/ipc/ssh-host-sleep-reconnect.test.ts index b48488ca5ec..1f73cd1d5f4 100644 --- a/src/main/ipc/ssh-host-sleep-reconnect.test.ts +++ b/src/main/ipc/ssh-host-sleep-reconnect.test.ts @@ -7,7 +7,7 @@ vi.mock('electron', async () => { const { EventEmitter } = await import('node:events') return { powerMonitor: new EventEmitter() } }) -vi.mock('../ssh/orcad-managed-tunnel', () => ({ +vi.mock('../managed-server/lifecycle/orcad-managed-tunnel', () => ({ recoverOrcadManagedTunnelsAfterHostResume: recoverManagedTunnels })) vi.mock('../ssh/ssh-target-registry', () => ({ diff --git a/src/main/ipc/ssh-host-sleep-reconnect.ts b/src/main/ipc/ssh-host-sleep-reconnect.ts index 449db416d92..f0af2f5856d 100644 --- a/src/main/ipc/ssh-host-sleep-reconnect.ts +++ b/src/main/ipc/ssh-host-sleep-reconnect.ts @@ -1,5 +1,5 @@ import { powerMonitor } from 'electron' -import { recoverOrcadManagedTunnelsAfterHostResume } from '../ssh/orcad-managed-tunnel' +import { recoverOrcadManagedTunnelsAfterHostResume } from '../managed-server/lifecycle/orcad-managed-tunnel' import { getSshConnectionManager } from '../ssh/ssh-target-registry' import { errorMessage } from '../../shared/error-message' diff --git a/src/main/ipc/ssh-shutdown-drain.ts b/src/main/ipc/ssh-shutdown-drain.ts index d4855b0460b..1e8b9322e3a 100644 --- a/src/main/ipc/ssh-shutdown-drain.ts +++ b/src/main/ipc/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 '../ssh/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-target-crud-handlers-ownership.test.ts b/src/main/ipc/ssh-target-crud-handlers-ownership.test.ts index 15d2c53fd91..edc8fdcc952 100644 --- a/src/main/ipc/ssh-target-crud-handlers-ownership.test.ts +++ b/src/main/ipc/ssh-target-crud-handlers-ownership.test.ts @@ -26,7 +26,9 @@ vi.mock('../ssh/ssh-target-registry', () => ({ setSshTargetMutations: mocks.setMutations })) vi.mock('./ssh-session-teardown', () => ({ removeRegisteredSshTarget: mocks.remove })) -vi.mock('../ssh/orcad-managed-tunnel', () => ({ closeOrcadManagedTunnel: mocks.closeTunnel })) +vi.mock('../managed-server/lifecycle/orcad-managed-tunnel', () => ({ + closeOrcadManagedTunnel: mocks.closeTunnel +})) vi.mock('./ssh-ipc-context', () => ({ getCurrentMainWindow: () => null, connectionManager: { disconnect: mocks.disconnect } diff --git a/src/main/ipc/ssh-target-crud-handlers.ts b/src/main/ipc/ssh-target-crud-handlers.ts index b22ddace50c..ab5ea2d2cdb 100644 --- a/src/main/ipc/ssh-target-crud-handlers.ts +++ b/src/main/ipc/ssh-target-crud-handlers.ts @@ -12,7 +12,7 @@ import { resolveUserSshConfigHost } from '../ssh/ssh-config-host-picker' import { getManagedOrcadFenceEnvironmentId } from '../../shared/managed-orcad-ssh-owner' -import { closeOrcadManagedTunnel } from '../ssh/orcad-managed-tunnel' +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 { diff --git a/src/main/ipc/ssh.ts b/src/main/ipc/ssh.ts index b91c3872a23..3cfb60aa477 100644 --- a/src/main/ipc/ssh.ts +++ b/src/main/ipc/ssh.ts @@ -52,7 +52,7 @@ 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 '../ssh/orcad-managed-tunnel' +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' 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 685c5140fea..f3fa0e0d6b5 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 @@ -44,8 +44,8 @@ import { writeAtomicOrcadRemoteRecord } from '../install/orcad-remote-record-fil import { deployOrcad } from '../../ssh/orcad-remote-deploy' import { rollbackOrcad } from '../install/orcad-remote-rollback' import { recoverInterruptedOrcadActivation } from './orcad-activation-recovery' -import { wakeStoppedManagedOrcad } from '../../ssh/orcad-managed-wake' -import { planManagedOrcadAutoUpdate } from '../../ssh/orcad-managed-auto-update' +import { wakeStoppedManagedOrcad } from '../lifecycle/orcad-managed-wake' +import { planManagedOrcadAutoUpdate } from '../lifecycle/orcad-managed-auto-update' import { parseOrcadActivationRecord } from './orcad-activation-record' import { getRemoteHostPlatform } from '../../ssh/ssh-remote-platform' import type { OrcadHostTransport } from '../../ssh/orcad-host-transport' diff --git a/src/main/managed-server/activation/orcad-activation-recovery.ts b/src/main/managed-server/activation/orcad-activation-recovery.ts index dcb5d2a57d6..5a681d60f75 100644 --- a/src/main/managed-server/activation/orcad-activation-recovery.ts +++ b/src/main/managed-server/activation/orcad-activation-recovery.ts @@ -19,7 +19,7 @@ import { } from './orcad-activation-lock' import { RemoteInstallLockBusyError } from '../install/remote-install-lock' import { ensureOrcadSlotServing, resolveOrcadSlotIdentity } from '../../ssh/orcad-recovery-slot' -import { reconcileOrcadDecommission } from '../../ssh/orcad-decommission-recovery' +import { reconcileOrcadDecommission } from '../lifecycle/orcad-decommission-recovery' import { recoverOrcadIncumbent, type OrcadIncumbentRecoveryOptions diff --git a/src/main/managed-server/activation/orcad-activation-transaction.ts b/src/main/managed-server/activation/orcad-activation-transaction.ts index 75d346c036f..2de8fd077b3 100644 --- a/src/main/managed-server/activation/orcad-activation-transaction.ts +++ b/src/main/managed-server/activation/orcad-activation-transaction.ts @@ -22,7 +22,7 @@ import { planOrcadDecommissionRecovery, type OrcadDecommissionRecoveryPlan, type OrcadDecommissionTransaction -} from '../../ssh/orcad-decommission-transaction' +} 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' diff --git a/src/main/managed-server/install/orcad-remote-context.ts b/src/main/managed-server/install/orcad-remote-context.ts index 305e319b80b..fee4e071447 100644 --- a/src/main/managed-server/install/orcad-remote-context.ts +++ b/src/main/managed-server/install/orcad-remote-context.ts @@ -3,7 +3,7 @@ import type { NodeRuntimeTarget } from '../../../shared/node-runtime-pin' import type { SshTarget } from '../../../shared/ssh-types' import type { OrcadActivationRecord } from '../activation/orcad-activation-record' import { readOrcadActivationRecord } from '../activation/orcad-activation-record-store' -import { resolveOrcadRuntimeTarget } from '../../ssh/orcad-runtime-target' +import { resolveOrcadRuntimeTarget } from '../lifecycle/orcad-runtime-target' import { prepareWindowsOrcadHost } from '../../ssh/orcad-windows-host-preparation' import { isWslOrcadHostTarget, diff --git a/src/main/managed-server/install/orcad-remote-decommission.ts b/src/main/managed-server/install/orcad-remote-decommission.ts index 814290ab3cc..bd16b407d7f 100644 --- a/src/main/managed-server/install/orcad-remote-decommission.ts +++ b/src/main/managed-server/install/orcad-remote-decommission.ts @@ -22,9 +22,9 @@ import { createOrcadDecommissionTransaction, withOrcadDecommissionProcessExited, withOrcadDecommissionStopDispatched -} from '../../ssh/orcad-decommission-transaction' -import { readRemoteOrcadManagedStopTarget } from '../../ssh/orcad-managed-remote-stop' -import { settleOrcadDecommissionStop } from '../../ssh/orcad-decommission-stop' +} from '../lifecycle/orcad-decommission-transaction' +import { readRemoteOrcadManagedStopTarget } from '../lifecycle/orcad-managed-remote-stop' +import { settleOrcadDecommissionStop } from '../lifecycle/orcad-decommission-stop' import type { OrcadSlotOptions } from '../../ssh/orcad-recovery-slot' import type { OrcadDecommissionResult } from '../../../shared/orcad-decommission' import type { OrcadTerminalCensus } from '../../../shared/orcad-terminal-census' 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 352ac916dc1..bb7a72827c8 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,5 +1,5 @@ import type * as ExecCommandModule from '../../ssh/remote-exec-command' -import type * as TerminalBarrier from '../../ssh/orcad-rollback-terminal-barrier' +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 * fake: no POSIX command, no `-EncodedCommand` and no PowerShell hop on the orcad path. @@ -24,7 +24,7 @@ vi.mock('./orcad-remote-record-file', async (importOriginal) => ({ writeAtomicOrcadRemoteRecord: vi.fn().mockResolvedValue(undefined) })) // The managed stop's Windows commands are covered by orcad-remote-windows-decommission.test.ts. -vi.mock('../../ssh/orcad-rollback-terminal-barrier', async (importOriginal) => ({ +vi.mock('../lifecycle/orcad-rollback-terminal-barrier', async (importOriginal) => ({ ...(await importOriginal()), readOrcadRollbackBarrierTarget: async (_options: unknown, version: string) => ({ state: 'ready', 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 61baf679a33..071de4d2cef 100644 --- a/src/main/managed-server/install/orcad-remote-rollback.test.ts +++ b/src/main/managed-server/install/orcad-remote-rollback.test.ts @@ -2,7 +2,7 @@ import type * as ExecCommandModule from '../../ssh/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 '../../ssh/orcad-rollback-terminal-barrier' +import type * as TerminalBarrier from '../lifecycle/orcad-rollback-terminal-barrier' vi.mock('../../ssh/remote-exec-command', async (importOriginal) => ({ ...(await importOriginal()), @@ -30,7 +30,7 @@ const barrier = vi.hoisted(() => { return state }) // The managed stop and its terminal barrier are proven in orcad-activation-crash-recovery.test.ts. -vi.mock('../../ssh/orcad-rollback-terminal-barrier', async (importOriginal) => ({ +vi.mock('../lifecycle/orcad-rollback-terminal-barrier', async (importOriginal) => ({ ...(await importOriginal()), readOrcadRollbackBarrierTarget: async (_options: unknown, version: string) => ({ state: 'ready', diff --git a/src/main/managed-server/install/orcad-remote-rollback.ts b/src/main/managed-server/install/orcad-remote-rollback.ts index 0cba7fafc22..bb410cabacf 100644 --- a/src/main/managed-server/install/orcad-remote-rollback.ts +++ b/src/main/managed-server/install/orcad-remote-rollback.ts @@ -28,7 +28,7 @@ import { } from '../activation/orcad-activation-lock' import { orcadActivationFenceRefusal } from '../activation/orcad-activation-fence-hold' import { ORCAD_STARTUP_READINESS_TIMEOUT_MS } from '../../../shared/orcad-profile-preflight' -import { rollbackOrcadLocked } from '../../ssh/orcad-rollback-transition' +import { rollbackOrcadLocked } from '../lifecycle/orcad-rollback-transition' export type OrcadRollbackOptions = { conn: OrcadHostTransport 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 5a7644309fa..cb13e1e8444 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 @@ -26,7 +26,7 @@ import { } from './orcad-remote-record-file' import { launchOrcadAndAwaitReadiness } from './orcad-remote-runtime-control' import { probeActiveOrcadReadiness } from '../../ssh/orcad-active-readiness' -import { completeRemoteOrcadManagedStop } from '../../ssh/orcad-managed-remote-stop' +import { completeRemoteOrcadManagedStop } from '../lifecycle/orcad-managed-remote-stop' import { installOrcadWindowsHostScript, orcadWindowsNodeCommandLine, diff --git a/src/main/ssh/orcad-decommission-recovery.ts b/src/main/managed-server/lifecycle/orcad-decommission-recovery.ts similarity index 86% rename from src/main/ssh/orcad-decommission-recovery.ts rename to src/main/managed-server/lifecycle/orcad-decommission-recovery.ts index 97d50d98726..ed918519146 100644 --- a/src/main/ssh/orcad-decommission-recovery.ts +++ b/src/main/managed-server/lifecycle/orcad-decommission-recovery.ts @@ -1,20 +1,20 @@ /** Recovering an interrupted decommission from its journal entry; see orcad-decommission-transaction. */ -import { writeOrcadActivationRecord } from '../managed-server/activation/orcad-activation-record-store' -import type { OrcadActivationRecoveryResult } from '../managed-server/activation/orcad-activation-recovery' +import { writeOrcadActivationRecord } from '../activation/orcad-activation-record-store' +import type { OrcadActivationRecoveryResult } from '../activation/orcad-activation-recovery' import type { OrcadDecommissionRecoveryPlan } from './orcad-decommission-transaction' import { settleOrcadDecommissionStop } from './orcad-decommission-stop' import { orcadLivenessProbeCommand, orcadLivenessProvenExited, parseOrcadLiveness -} from '../managed-server/install/orcad-remote-launch' -import { execOrcadRemote } from '../managed-server/install/orcad-remote-runtime-control' +} from '../install/orcad-remote-launch' +import { execOrcadRemote } from '../install/orcad-remote-runtime-control' import { ensureOrcadSlotServing, orcadSlotDir, resolveOrcadSlotIdentity, type OrcadSlotOptions -} from './orcad-recovery-slot' +} from '../../ssh/orcad-recovery-slot' /** Finishes an interrupted decommission; the record is only cleared on proven exit. */ export async function reconcileOrcadDecommission( diff --git a/src/main/ssh/orcad-decommission-released-peer-recovery.test.ts b/src/main/managed-server/lifecycle/orcad-decommission-released-peer-recovery.test.ts similarity index 93% rename from src/main/ssh/orcad-decommission-released-peer-recovery.test.ts rename to src/main/managed-server/lifecycle/orcad-decommission-released-peer-recovery.test.ts index cb1ccb6744e..241448f118c 100644 --- a/src/main/ssh/orcad-decommission-released-peer-recovery.test.ts +++ b/src/main/managed-server/lifecycle/orcad-decommission-released-peer-recovery.test.ts @@ -8,24 +8,20 @@ import { coreOrcadActivationRecord, serializeOrcadActivationRecord, type OrcadActivationRecord -} from '../managed-server/activation/orcad-activation-record' +} from '../activation/orcad-activation-record' import { parseOrcadActivationTransaction, serializeOrcadActivationTransaction -} from '../managed-server/activation/orcad-activation-transaction' +} from '../activation/orcad-activation-transaction' import { createOrcadDecommissionTransaction, withOrcadDecommissionProcessExited, withOrcadDecommissionStopDispatched, type OrcadDecommissionTransaction } from './orcad-decommission-transaction' -import { - FakeOrcadHost, - NEW, - OLD -} from '../managed-server/activation/orcad-activation-host-test-harness' -import { compareAppVersions } from '../../shared/app-version' -import type { OrcadManagedStopRequest } from '../../shared/orcad-stop-request' +import { FakeOrcadHost, NEW, OLD } from '../activation/orcad-activation-host-test-harness' +import { compareAppVersions } from '../../../shared/app-version' +import type { OrcadManagedStopRequest } from '../../../shared/orcad-stop-request' const T = new Date('2026-02-02T00:00:00.000Z') const ID = '7f1c2a7e-6c1b-4a8e-9f0e-0a1b2c3d4e5f' diff --git a/src/main/ssh/orcad-decommission-stop.ts b/src/main/managed-server/lifecycle/orcad-decommission-stop.ts similarity index 90% rename from src/main/ssh/orcad-decommission-stop.ts rename to src/main/managed-server/lifecycle/orcad-decommission-stop.ts index 24745570ed3..2d482f6c87f 100644 --- a/src/main/ssh/orcad-decommission-stop.ts +++ b/src/main/managed-server/lifecycle/orcad-decommission-stop.ts @@ -5,17 +5,17 @@ * 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 './remote-exec-command' +import { isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec-command' import { cancelRemoteOrcadManagedStop, completeRemoteOrcadManagedStop } from './orcad-managed-remote-stop' -import type { OrcadSlotOptions } from './orcad-recovery-slot' +import type { OrcadSlotOptions } from '../../ssh/orcad-recovery-slot' import type { OrcadDaemonRetirementVerdict, OrcadManagedStopRequest -} from '../../shared/orcad-stop-request' -import { errorMessage } from '../../shared/error-message' +} from '../../../shared/orcad-stop-request' +import { errorMessage } from '../../../shared/error-message' export type OrcadDecommissionStopSettlement = | { state: 'exited'; retirement: OrcadDaemonRetirementVerdict } diff --git a/src/main/ssh/orcad-decommission-transaction.test.ts b/src/main/managed-server/lifecycle/orcad-decommission-transaction.test.ts similarity index 94% rename from src/main/ssh/orcad-decommission-transaction.test.ts rename to src/main/managed-server/lifecycle/orcad-decommission-transaction.test.ts index 03b1d656f5e..4f5813e9bcf 100644 --- a/src/main/ssh/orcad-decommission-transaction.test.ts +++ b/src/main/managed-server/lifecycle/orcad-decommission-transaction.test.ts @@ -3,15 +3,15 @@ import { parseOrcadActivationTransaction, planOrcadTransactionRecovery, serializeOrcadActivationTransaction -} from '../managed-server/activation/orcad-activation-transaction' +} from '../activation/orcad-activation-transaction' import { committedOrcadDecommissionRecord, createOrcadDecommissionTransaction, withOrcadDecommissionProcessExited, withOrcadDecommissionStopDispatched } from './orcad-decommission-transaction' -import { FakeOrcadHost, NEW } from '../managed-server/activation/orcad-activation-host-test-harness' -import type { OrcadManagedStopRequest } from '../../shared/orcad-stop-request' +import { FakeOrcadHost, NEW } from '../activation/orcad-activation-host-test-harness' +import type { OrcadManagedStopRequest } from '../../../shared/orcad-stop-request' const T = new Date('2026-02-02T00:00:00.000Z') const ID = '7f1c2a7e-6c1b-4a8e-9f0e-0a1b2c3d4e5f' diff --git a/src/main/ssh/orcad-decommission-transaction.ts b/src/main/managed-server/lifecycle/orcad-decommission-transaction.ts similarity index 96% rename from src/main/ssh/orcad-decommission-transaction.ts rename to src/main/managed-server/lifecycle/orcad-decommission-transaction.ts index c76c0a2640c..b1fd019b4d1 100644 --- a/src/main/ssh/orcad-decommission-transaction.ts +++ b/src/main/managed-server/lifecycle/orcad-decommission-transaction.ts @@ -11,9 +11,9 @@ import { withDeactivatedVersion, withDeactivatedVersionCommitted, type OrcadActivationRecord -} from '../managed-server/activation/orcad-activation-record' -import { ORCAD_ACTIVATION_TRANSACTION_SCHEMA_VERSION } from '../managed-server/activation/orcad-activation-transaction-schema' -import type { OrcadManagedStopRequest } from '../../shared/orcad-stop-request' +} from '../activation/orcad-activation-record' +import { ORCAD_ACTIVATION_TRANSACTION_SCHEMA_VERSION } from '../activation/orcad-activation-transaction-schema' +import type { OrcadManagedStopRequest } from '../../../shared/orcad-stop-request' export type OrcadDecommissionTransaction = { schemaVersion: typeof ORCAD_ACTIVATION_TRANSACTION_SCHEMA_VERSION diff --git a/src/main/ssh/orcad-managed-auto-update.test.ts b/src/main/managed-server/lifecycle/orcad-managed-auto-update.test.ts similarity index 95% rename from src/main/ssh/orcad-managed-auto-update.test.ts rename to src/main/managed-server/lifecycle/orcad-managed-auto-update.test.ts index 3f1e52a24b8..ee57ff8f05f 100644 --- a/src/main/ssh/orcad-managed-auto-update.test.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-auto-update.test.ts @@ -2,8 +2,8 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { emptyOrcadActivationRecord, type OrcadActivationRecord -} from '../managed-server/activation/orcad-activation-record' -import { OrcadHostUnsupportedError } from '../orcad/orcad-host-unavailable' +} from '../activation/orcad-activation-record' +import { OrcadHostUnsupportedError } from '../../orcad/orcad-host-unavailable' const mocks = vi.hoisted(() => { const state: { record: OrcadActivationRecord | null } = { record: null } @@ -15,7 +15,7 @@ const mocks = vi.hoisted(() => { } }) -vi.mock('./orcad-runtime-maintenance', () => ({ +vi.mock('../../ssh/orcad-runtime-maintenance', () => ({ withManagedOrcadLifecycle: ( _userData: string, _selector: string, @@ -32,10 +32,10 @@ vi.mock('./orcad-managed-runtime-context', () => ({ vi.mock('./orcad-managed-migration-status', () => ({ findIncompleteManagedOrcadMigration: mocks.migrating })) -vi.mock('../orcad/orcad-artifact-materializer', () => ({ +vi.mock('../../orcad/orcad-artifact-materializer', () => ({ materializeOrcadArtifact: mocks.materialize })) -vi.mock('../managed-server/install/remote-versioned-install', () => ({ +vi.mock('../install/remote-versioned-install', () => ({ readLocalFullVersion: () => '0.1.0+new' })) diff --git a/src/main/ssh/orcad-managed-auto-update.ts b/src/main/managed-server/lifecycle/orcad-managed-auto-update.ts similarity index 91% rename from src/main/ssh/orcad-managed-auto-update.ts rename to src/main/managed-server/lifecycle/orcad-managed-auto-update.ts index 4a2a58f793c..3af2778ce5d 100644 --- a/src/main/ssh/orcad-managed-auto-update.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-auto-update.ts @@ -5,22 +5,25 @@ * terminals, and a rejected candidate is restored through the activation journal, so the old * version keeps serving. A host a newer Orca activated is never downgraded. */ -import type { OrcadActivationRecord } from '../managed-server/activation/orcad-activation-record' +import type { OrcadActivationRecord } from '../activation/orcad-activation-record' import { refuseOrcadHostDowngrade, type OrcadHostVersionRefusal -} from './orcad-host-version-admission' -import { materializeOrcadArtifact } from '../orcad/orcad-artifact-materializer' +} from '../../ssh/orcad-host-version-admission' +import { materializeOrcadArtifact } from '../../orcad/orcad-artifact-materializer' import { OrcadArtifactsUnavailableError, OrcadHostUnsupportedError -} from '../orcad/orcad-host-unavailable' +} from '../../orcad/orcad-host-unavailable' import { findIncompleteManagedOrcadMigration } from './orcad-managed-migration-status' -import { ORCAD_ACTIVATION_FENCE_BUSY_CODE } from '../managed-server/activation/orcad-activation-fence-hold' +import { ORCAD_ACTIVATION_FENCE_BUSY_CODE } from '../activation/orcad-activation-fence-hold' import { resolveLinkedOrcadContext } from './orcad-managed-runtime-context' -import { runManagedOrcadUpdate, withManagedOrcadLifecycle } from './orcad-runtime-maintenance' -import type { OrcadUpdateDeferCode } from './orcad-update-plan' -import { readLocalFullVersion } from '../managed-server/install/remote-versioned-install' +import { + runManagedOrcadUpdate, + withManagedOrcadLifecycle +} from '../../ssh/orcad-runtime-maintenance' +import type { OrcadUpdateDeferCode } from '../../ssh/orcad-update-plan' +import { readLocalFullVersion } from '../install/remote-versioned-install' export type ManagedOrcadAutoUpdateSkip = | 'current' diff --git a/src/main/ssh/orcad-managed-bound-port.test.ts b/src/main/managed-server/lifecycle/orcad-managed-bound-port.test.ts similarity index 89% rename from src/main/ssh/orcad-managed-bound-port.test.ts rename to src/main/managed-server/lifecycle/orcad-managed-bound-port.test.ts index 12b87da1590..170f6ae092f 100644 --- a/src/main/ssh/orcad-managed-bound-port.test.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-bound-port.test.ts @@ -1,19 +1,19 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { OrcadHostTransport } from './orcad-host-transport' -import { getRemoteHostPlatform } from './ssh-remote-platform' +import type { OrcadHostTransport } from '../../ssh/orcad-host-transport' +import { getRemoteHostPlatform } from '../../ssh/ssh-remote-platform' const execOrcadRemote = vi.hoisted(() => vi.fn()) -vi.mock('../managed-server/install/orcad-remote-runtime-control', () => ({ execOrcadRemote })) +vi.mock('../install/orcad-remote-runtime-control', () => ({ execOrcadRemote })) const resolveOrcadRemoteContext = vi.hoisted(() => vi.fn()) -vi.mock('../managed-server/install/orcad-remote-context', () => ({ resolveOrcadRemoteContext })) +vi.mock('../install/orcad-remote-context', () => ({ resolveOrcadRemoteContext })) import { orcadBoundPort, readManagedOrcadBoundPort, resolveManagedOrcadTunnelPort } from './orcad-managed-bound-port' -import type { KnownRuntimeEnvironment } from '../../shared/runtime-environments' -import type { SshTarget } from '../../shared/ssh-types' +import type { KnownRuntimeEnvironment } from '../../../shared/runtime-environments' +import type { SshTarget } from '../../../shared/ssh-types' function readinessLine(boundEndpoint: string | null): string { return `${JSON.stringify({ type: 'orca_server_ready', runtimeId: 'runtime-1', boundEndpoint })}\n` diff --git a/src/main/ssh/orcad-managed-bound-port.ts b/src/main/managed-server/lifecycle/orcad-managed-bound-port.ts similarity index 85% rename from src/main/ssh/orcad-managed-bound-port.ts rename to src/main/managed-server/lifecycle/orcad-managed-bound-port.ts index 861399e58c2..b64a9f64f27 100644 --- a/src/main/ssh/orcad-managed-bound-port.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-bound-port.ts @@ -6,20 +6,20 @@ import { getRuntimeSshAccess, type KnownRuntimeEnvironment -} from '../../shared/runtime-environments' -import type { SshTarget } from '../../shared/ssh-types' -import type { ServeReadiness } from '../server/serve-readiness' +} from '../../../shared/runtime-environments' +import type { SshTarget } from '../../../shared/ssh-types' +import type { ServeReadiness } from '../../server/serve-readiness' import { managedOrcadInstallDir } from './orcad-managed-runtime-context' -import { resolveOrcadRemoteContext } from '../managed-server/install/orcad-remote-context' +import { resolveOrcadRemoteContext } from '../install/orcad-remote-context' import { parseOrcadReadinessWaitOutput, readOrcadReadinessNowCommand -} from '../managed-server/install/orcad-remote-readiness-wait' +} from '../install/orcad-remote-readiness-wait' import { execOrcadRemote, type OrcadRemoteExecTarget -} from '../managed-server/install/orcad-remote-runtime-control' -import type { OrcadHostTransport } from './orcad-host-transport' +} from '../install/orcad-remote-runtime-control' +import type { OrcadHostTransport } from '../../ssh/orcad-host-transport' export type OrcadTunnelPortInput = { environment: KnownRuntimeEnvironment diff --git a/src/main/ssh/orcad-managed-launch-session.test.ts b/src/main/managed-server/lifecycle/orcad-managed-launch-session.test.ts similarity index 91% rename from src/main/ssh/orcad-managed-launch-session.test.ts rename to src/main/managed-server/lifecycle/orcad-managed-launch-session.test.ts index c471111b585..f28d137d237 100644 --- a/src/main/ssh/orcad-managed-launch-session.test.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-launch-session.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import { getRemoteHostPlatform, type RemoteHostPlatform } from './ssh-remote-platform' +import { getRemoteHostPlatform, type RemoteHostPlatform } from '../../ssh/ssh-remote-platform' const mocks = vi.hoisted(() => { const host: { current: RemoteHostPlatform | null } = { current: null } @@ -16,7 +16,7 @@ const mocks = vi.hoisted(() => { } }) -vi.mock('./orcad-runtime-maintenance', () => ({ +vi.mock('../../ssh/orcad-runtime-maintenance', () => ({ withManagedOrcadLifecycle: ( _path: string, _selector: string, @@ -48,7 +48,7 @@ vi.mock('./orcad-managed-runtime-context', () => ({ }), managedOrcadInstallDir: () => '/Users/dev/.orca-remote/orcad-1.0.0' })) -vi.mock('../managed-server/install/orcad-remote-context', () => ({ +vi.mock('../install/orcad-remote-context', () => ({ resolveOrcadRemoteContext: async () => ({ host: mocks.host.current, connection: {}, @@ -57,12 +57,12 @@ vi.mock('../managed-server/install/orcad-remote-context', () => ({ activationRecord: { active: mocks.active.current } }) })) -vi.mock('./orcad-ssh-host-transport', () => ({ sshOrcadHostTransport: (c: unknown) => c })) -vi.mock('../managed-server/activation/orcad-activation-lock', () => ({ +vi.mock('../../ssh/orcad-ssh-host-transport', () => ({ sshOrcadHostTransport: (c: unknown) => c })) +vi.mock('../activation/orcad-activation-lock', () => ({ withOrcadActivationLock: (_slot: unknown, run: (lock: unknown) => Promise) => run({ retain: mocks.retain }) })) -vi.mock('../managed-server/activation/orcad-activation-record-store', () => ({ +vi.mock('../activation/orcad-activation-record-store', () => ({ readOrcadActivationRecord: async () => ({ active: mocks.active.current }) })) vi.mock('./orcad-managed-remote-stop', () => ({ @@ -73,8 +73,10 @@ vi.mock('./orcad-rollback-terminal-barrier', () => ({ })) vi.mock('./orcad-managed-wake', () => ({ wakeStoppedManagedOrcad: mocks.wake })) vi.mock('./orcad-managed-tunnel', () => ({ rebuildOrcadManagedTunnel: mocks.rebuild })) -vi.mock('./orcad-terminal-census-client', () => ({ collectManagedTerminalCensus: mocks.census })) -vi.mock('../managed-server/install/orcad-remote-runtime-control', () => ({ +vi.mock('../../ssh/orcad-terminal-census-client', () => ({ + collectManagedTerminalCensus: mocks.census +})) +vi.mock('../install/orcad-remote-runtime-control', () => ({ execOrcadRemote: mocks.exec })) diff --git a/src/main/ssh/orcad-managed-launch-session.ts b/src/main/managed-server/lifecycle/orcad-managed-launch-session.ts similarity index 90% rename from src/main/ssh/orcad-managed-launch-session.ts rename to src/main/managed-server/lifecycle/orcad-managed-launch-session.ts index deb7d9bdb1f..6c581579aaa 100644 --- a/src/main/ssh/orcad-managed-launch-session.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-launch-session.ts @@ -3,19 +3,19 @@ * the restart that re-attributes it to the current session. See orcad-launch-ssh-session.ts. */ import { randomUUID } from 'node:crypto' -import type { OrcadManagedRestartResult } from '../../shared/orcad-managed-runtime' +import type { OrcadManagedRestartResult } from '../../../shared/orcad-managed-runtime' import { withOrcadActivationLock, type OrcadActivationLockControl -} from '../managed-server/activation/orcad-activation-lock' -import { readOrcadActivationRecord } from '../managed-server/activation/orcad-activation-record-store' +} from '../activation/orcad-activation-lock' +import { readOrcadActivationRecord } from '../activation/orcad-activation-record-store' import { orcadLaunchSshSessionProbeCommand, parseOrcadLaunchSshSession, recordsOrcadLaunchSshSession, type OrcadLaunchSshSession -} from './orcad-launch-ssh-session' -import { withManagedOrcadLifecycle } from './orcad-runtime-maintenance' +} from '../../ssh/orcad-launch-ssh-session' +import { withManagedOrcadLifecycle } from '../../ssh/orcad-runtime-maintenance' import { managedOrcadInstallDir, managedOrcadSlot, @@ -23,15 +23,15 @@ import { requireManagedOrcadInfrastructure, resolveLinkedOrcadContext } from './orcad-managed-runtime-context' -import { resolveOrcadRemoteContext } from '../managed-server/install/orcad-remote-context' -import { sshOrcadHostTransport } from './orcad-ssh-host-transport' +import { resolveOrcadRemoteContext } from '../install/orcad-remote-context' +import { sshOrcadHostTransport } from '../../ssh/orcad-ssh-host-transport' import { rebuildOrcadManagedTunnel } from './orcad-managed-tunnel' import { wakeStoppedManagedOrcad } from './orcad-managed-wake' import { readRemoteOrcadManagedStopTarget } from './orcad-managed-remote-stop' -import { orcadSlotDir, type OrcadSlotOptions } from './orcad-recovery-slot' +import { orcadSlotDir, type OrcadSlotOptions } from '../../ssh/orcad-recovery-slot' import { stopIncumbentBehindTerminalBarrier } from './orcad-rollback-terminal-barrier' -import { execOrcadRemote } from '../managed-server/install/orcad-remote-runtime-control' -import { collectManagedTerminalCensus } from './orcad-terminal-census-client' +import { execOrcadRemote } from '../install/orcad-remote-runtime-control' +import { collectManagedTerminalCensus } from '../../ssh/orcad-terminal-census-client' export async function readManagedOrcadLaunchSshSession( userDataPath: string, diff --git a/src/main/ssh/orcad-managed-lifecycle-test-fixture.ts b/src/main/managed-server/lifecycle/orcad-managed-lifecycle-test-fixture.ts similarity index 86% rename from src/main/ssh/orcad-managed-lifecycle-test-fixture.ts rename to src/main/managed-server/lifecycle/orcad-managed-lifecycle-test-fixture.ts index 764acc35d56..3d029ee0682 100644 --- a/src/main/ssh/orcad-managed-lifecycle-test-fixture.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-lifecycle-test-fixture.ts @@ -1,13 +1,13 @@ import { mkdtempSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' -import { encodePairingOffer, PAIRING_OFFER_VERSION } from '../../shared/pairing' -import { addManagedOrcadEnvironment } from '../../shared/runtime-environment-managed-orcad-store' -import type { SshTarget } from '../../shared/ssh-types' -import type { ServeReadiness } from '../server/serve-readiness' -import { getRemoteHostPlatform } from './ssh-remote-platform' -import { SshTargetOrcadClaims } from './ssh-target-orcad-claims' -import { emptyDependentStateStore } from './ssh-target-orcad-dependents-fixture' +import { encodePairingOffer, PAIRING_OFFER_VERSION } from '../../../shared/pairing' +import { addManagedOrcadEnvironment } from '../../../shared/runtime-environment-managed-orcad-store' +import type { SshTarget } from '../../../shared/ssh-types' +import type { ServeReadiness } from '../../server/serve-readiness' +import { getRemoteHostPlatform } from '../../ssh/ssh-remote-platform' +import { SshTargetOrcadClaims } from '../../ssh/ssh-target-orcad-claims' +import { emptyDependentStateStore } from '../../ssh/ssh-target-orcad-dependents-fixture' export const MANAGED_VERSION = '0.2.0+abc' export const MANAGED_PREVIOUS_VERSION = '0.1.0+def' diff --git a/src/main/ssh/orcad-managed-migration-status.ts b/src/main/managed-server/lifecycle/orcad-managed-migration-status.ts similarity index 91% rename from src/main/ssh/orcad-managed-migration-status.ts rename to src/main/managed-server/lifecycle/orcad-managed-migration-status.ts index d5d0b92823d..f6add6dfa95 100644 --- a/src/main/ssh/orcad-managed-migration-status.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-migration-status.ts @@ -2,12 +2,12 @@ import { isRetainedOrcadMigrationSourceCutover, type OrcadMigrationSourceCutover -} from '../../shared/orcad-migration-source-cutover' +} from '../../../shared/orcad-migration-source-cutover' import { getOrcadSshDeployment, type KnownRuntimeEnvironment -} from '../../shared/runtime-environments' -import { listOrcadMigrationSourceCutovers } from './orcad-migration-cutover-journal' +} from '../../../shared/runtime-environments' +import { listOrcadMigrationSourceCutovers } from '../../ssh/orcad-migration-cutover-journal' export type OrcadManagedPendingMigration = { migrationId: string diff --git a/src/main/ssh/orcad-managed-remote-stop.ts b/src/main/managed-server/lifecycle/orcad-managed-remote-stop.ts similarity index 88% rename from src/main/ssh/orcad-managed-remote-stop.ts rename to src/main/managed-server/lifecycle/orcad-managed-remote-stop.ts index 39308b6b7ea..e01236bb4f3 100644 --- a/src/main/ssh/orcad-managed-remote-stop.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-remote-stop.ts @@ -6,24 +6,24 @@ * nonce). The slot's own `orcad.js` then writes the request and proves exit on the host. */ import { randomUUID } from 'node:crypto' -import { shellEscape } from './ssh-connection-utils' -import { selectOrcadSlotRuntimeCommand } from '../managed-server/install/orcad-remote-runtime' +import { shellEscape } from '../../ssh/ssh-connection-utils' +import { selectOrcadSlotRuntimeCommand } from '../install/orcad-remote-runtime' import { parseOrcadReadinessWaitOutput, readOrcadReadinessNowCommand -} from '../managed-server/install/orcad-remote-readiness-wait' -import { execOrcadRemote } from '../managed-server/install/orcad-remote-runtime-control' -import { readBoundedOrcadRemoteRecord } from '../managed-server/install/orcad-remote-record-file' -import { orcadSlotDir, type OrcadSlotOptions } from './orcad-recovery-slot' -import { isWindowsRemoteHost, joinRemotePath } from './ssh-remote-platform' -import { isUnconfirmedSshCommandTermination } from './remote-exec-command' +} from '../install/orcad-remote-readiness-wait' +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 { orcadWindowsNodeCommandLine, orcadWindowsSlotOpCommand, readOrcadWindowsEncodedAnswer -} from '../managed-server/install/orcad-remote-windows-node' -import { ORCAD_WINDOWS_RUNTIME_MARKER } from './orcad-windows-host-script' -import { ORCAD_LOCK_FILE_NAME, parseOrcadInstanceLockRecord } from '../orcad/orcad-instance-lock' +} from '../install/orcad-remote-windows-node' +import { ORCAD_WINDOWS_RUNTIME_MARKER } from '../../ssh/orcad-windows-host-script' +import { ORCAD_LOCK_FILE_NAME, parseOrcadInstanceLockRecord } from '../../orcad/orcad-instance-lock' import { ORCAD_CANCEL_MANAGED_STOP_FLAG, ORCAD_COMPLETE_MANAGED_STOP_FLAG, @@ -35,7 +35,7 @@ import { type OrcadManagedStopCompletion, type OrcadManagedStopContext, type OrcadManagedStopRequest -} from '../../shared/orcad-stop-request' +} from '../../../shared/orcad-stop-request' const LOCK_RECORD_MAX_BYTES = 64 * 1024 diff --git a/src/main/ssh/orcad-managed-runtime-context.ts b/src/main/managed-server/lifecycle/orcad-managed-runtime-context.ts similarity index 82% rename from src/main/ssh/orcad-managed-runtime-context.ts rename to src/main/managed-server/lifecycle/orcad-managed-runtime-context.ts index ba1dda09cf8..5f2defd47e1 100644 --- a/src/main/ssh/orcad-managed-runtime-context.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-runtime-context.ts @@ -1,25 +1,22 @@ -import { resolveEnvironment } from '../../shared/runtime-environment-store' +import { resolveEnvironment } from '../../../shared/runtime-environment-store' import { getOrcadSshDeployment, type KnownRuntimeEnvironment, type OrcadSshDeploymentLink -} from '../../shared/runtime-environments' -import { getManagedOrcadFenceEnvironmentId } from '../../shared/managed-orcad-ssh-owner' -import type { ServeReadiness } from '../server/serve-readiness' -import { computeLocalOrcadBuildHash } from './orcad-local-build-hash' -import { sshOrcadHostTransport } from './orcad-ssh-host-transport' -import type { OrcadHostTarget } from './orcad-host-transport' -import type { OrcadActivationRecord } from '../managed-server/activation/orcad-activation-record' -import { refuseOrcadHostDowngrade } from './orcad-host-version-admission' -import type { OrcadTerminalCensus } from '../../shared/orcad-terminal-census' -import { probeActiveOrcadReadiness } from './orcad-active-readiness' -import { - resolveOrcadRemoteContext, - type OrcadRemoteContext -} from '../managed-server/install/orcad-remote-context' -import { ORCAD_INSTALL_MODEL } from '../managed-server/install/remote-install-model' -import { computeRemoteInstallDir } from '../managed-server/install/remote-versioned-install' -import { getSshConnectionManager, getSshTargetRegistryStore } from './ssh-target-registry' +} from '../../../shared/runtime-environments' +import { getManagedOrcadFenceEnvironmentId } from '../../../shared/managed-orcad-ssh-owner' +import type { ServeReadiness } from '../../server/serve-readiness' +import { computeLocalOrcadBuildHash } from '../../ssh/orcad-local-build-hash' +import { sshOrcadHostTransport } from '../../ssh/orcad-ssh-host-transport' +import type { OrcadHostTarget } from '../../ssh/orcad-host-transport' +import type { OrcadActivationRecord } from '../activation/orcad-activation-record' +import { refuseOrcadHostDowngrade } from '../../ssh/orcad-host-version-admission' +import type { OrcadTerminalCensus } from '../../../shared/orcad-terminal-census' +import { probeActiveOrcadReadiness } from '../../ssh/orcad-active-readiness' +import { resolveOrcadRemoteContext, type OrcadRemoteContext } from '../install/orcad-remote-context' +import { ORCAD_INSTALL_MODEL } from '../install/remote-install-model' +import { computeRemoteInstallDir } from '../install/remote-versioned-install' +import { getSshConnectionManager, getSshTargetRegistryStore } from '../../ssh/ssh-target-registry' export const ORCAD_BIND_HOST = '127.0.0.1' diff --git a/src/main/ssh/orcad-managed-serving-verify.ts b/src/main/managed-server/lifecycle/orcad-managed-serving-verify.ts similarity index 87% rename from src/main/ssh/orcad-managed-serving-verify.ts rename to src/main/managed-server/lifecycle/orcad-managed-serving-verify.ts index 65a4b3dedaf..933cb50c74f 100644 --- a/src/main/ssh/orcad-managed-serving-verify.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-serving-verify.ts @@ -1,4 +1,4 @@ -import { resolveEnvironment } from '../../shared/runtime-environment-store' +import { resolveEnvironment } from '../../../shared/runtime-environment-store' import type { OrcadManagedServing } from './orcad-managed-serving' import { verifyManagedTunnelServing } from './orcad-managed-tunnel' diff --git a/src/main/ssh/orcad-managed-serving.test.ts b/src/main/managed-server/lifecycle/orcad-managed-serving.test.ts similarity index 99% rename from src/main/ssh/orcad-managed-serving.test.ts rename to src/main/managed-server/lifecycle/orcad-managed-serving.test.ts index 860d91690dd..d5b2d082382 100644 --- a/src/main/ssh/orcad-managed-serving.test.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-serving.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -vi.mock('../managed-server/install/orcad-remote-context', () => ({ +vi.mock('../install/orcad-remote-context', () => ({ resolveOrcadRemoteContext: vi.fn(async () => ({ connection: {}, host: {}, diff --git a/src/main/ssh/orcad-managed-serving.ts b/src/main/managed-server/lifecycle/orcad-managed-serving.ts similarity index 96% rename from src/main/ssh/orcad-managed-serving.ts rename to src/main/managed-server/lifecycle/orcad-managed-serving.ts index 241af86424a..ce6ee905e59 100644 --- a/src/main/ssh/orcad-managed-serving.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-serving.ts @@ -7,13 +7,13 @@ * Never throws. A server that cannot be started stays `unverifiable` with the reason, and is * never read as evidence that its terminals exited. */ -import type { KnownRuntimeEnvironment } from '../../shared/runtime-environments' -import type { SshTarget } from '../../shared/ssh-types' +import type { KnownRuntimeEnvironment } from '../../../shared/runtime-environments' +import type { SshTarget } from '../../../shared/ssh-types' import { orcadBoundPort } from './orcad-managed-bound-port' import { managedOrcadSlot } from './orcad-managed-runtime-context' import { wakeStoppedManagedOrcad } from './orcad-managed-wake' -import { resolveOrcadRemoteContext } from '../managed-server/install/orcad-remote-context' -import type { OrcadHostTransport } from './orcad-host-transport' +import { resolveOrcadRemoteContext } from '../install/orcad-remote-context' +import type { OrcadHostTransport } from '../../ssh/orcad-host-transport' export type OrcadManagedServing = | { state: 'serving' } diff --git a/src/main/ssh/orcad-managed-tunnel-active.ts b/src/main/managed-server/lifecycle/orcad-managed-tunnel-active.ts similarity index 86% rename from src/main/ssh/orcad-managed-tunnel-active.ts rename to src/main/managed-server/lifecycle/orcad-managed-tunnel-active.ts index 59c0b2474c5..2c0a73fd2f3 100644 --- a/src/main/ssh/orcad-managed-tunnel-active.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-tunnel-active.ts @@ -1,14 +1,17 @@ /** The managed tunnels a client holds, and the one rule for whether one still belongs to its server. */ -import { getManagedOrcadFenceEnvironmentId } from '../../shared/managed-orcad-ssh-owner' +import { getManagedOrcadFenceEnvironmentId } from '../../../shared/managed-orcad-ssh-owner' import { getRuntimeSshAccess, type KnownRuntimeEnvironment, type RuntimeSshTunnelLink -} from '../../shared/runtime-environments' -import type { SshTarget } from '../../shared/ssh-types' -import type { SshConnection } from './ssh-connection' -import { adoptSshConnection } from './ssh-connection-attribution' -import type { PortForwardEntry, SshPortForwardManager } from './port-forwarding/ssh-port-forward' +} from '../../../shared/runtime-environments' +import type { SshTarget } from '../../../shared/ssh-types' +import type { SshConnection } from '../../ssh/ssh-connection' +import { adoptSshConnection } from '../../ssh/ssh-connection-attribution' +import type { + PortForwardEntry, + SshPortForwardManager +} from '../../ssh/port-forwarding/ssh-port-forward' export type ActiveOrcadTunnel = { connection: SshConnection diff --git a/src/main/ssh/orcad-managed-tunnel-bridge-port.test.ts b/src/main/managed-server/lifecycle/orcad-managed-tunnel-bridge-port.test.ts similarity index 84% rename from src/main/ssh/orcad-managed-tunnel-bridge-port.test.ts rename to src/main/managed-server/lifecycle/orcad-managed-tunnel-bridge-port.test.ts index 639257ae3f5..d00c8d4a298 100644 --- a/src/main/ssh/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-connection' -import type { PortForwardStartOptions } from './port-forwarding/ssh-port-forward-provider' -import type * as ForwardProcess from './system-ssh-forward-process' +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' const { reserveLocalForwardPort } = vi.hoisted(() => ({ reserveLocalForwardPort: vi.fn(async (port: number, _orphanArgs?: readonly string[]) => port) })) -vi.mock('./system-ssh-forward-process', async (importOriginal) => ({ +vi.mock('../../ssh/system-ssh-forward-process', async (importOriginal) => ({ ...(await importOriginal()), reserveLocalForwardPort })) diff --git a/src/main/ssh/orcad-managed-tunnel-identity-restart.test.ts b/src/main/managed-server/lifecycle/orcad-managed-tunnel-identity-restart.test.ts similarity index 89% rename from src/main/ssh/orcad-managed-tunnel-identity-restart.test.ts rename to src/main/managed-server/lifecycle/orcad-managed-tunnel-identity-restart.test.ts index fc9447c152c..4ef2a3013aa 100644 --- a/src/main/ssh/orcad-managed-tunnel-identity-restart.test.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-tunnel-identity-restart.test.ts @@ -1,21 +1,21 @@ -import { pairedRuntimeConnectionFromOffer } from '../../shared/paired-runtime-connection' +import { pairedRuntimeConnectionFromOffer } from '../../../shared/paired-runtime-connection' import { mkdtempSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, describe, expect, it, vi } from 'vitest' -import { encodePairingOffer, parsePairingCode, type PairingOffer } from '../../shared/pairing' +import { encodePairingOffer, parsePairingCode, type PairingOffer } from '../../../shared/pairing' import { addEnvironmentFromPairingCode, listEnvironments, markEnvironmentUsed -} from '../../shared/runtime-environment-store' -import type { KnownRuntimeEnvironment } from '../../shared/runtime-environments' -import { OrcaRuntimeService } from '../runtime/orca-runtime' -import { OrcaRuntimeRpcServer } from '../runtime/runtime-rpc' -import { verifyRuntimePairingIdentity } from '../runtime/runtime-environment-identity-verification' +} from '../../../shared/runtime-environment-store' +import type { KnownRuntimeEnvironment } from '../../../shared/runtime-environments' +import { OrcaRuntimeService } from '../../runtime/orca-runtime' +import { OrcaRuntimeRpcServer } from '../../runtime/runtime-rpc' +import { verifyRuntimePairingIdentity } from '../../runtime/runtime-environment-identity-verification' import { verifyManagedOrcadTunnelIdentity } from './orcad-managed-tunnel-identity' -vi.mock('../git/worktree', () => ({ +vi.mock('../../git/worktree', () => ({ listWorktrees: vi.fn().mockResolvedValue([]), listWorktreesStrict: vi.fn().mockResolvedValue([]) })) diff --git a/src/main/ssh/orcad-managed-tunnel-identity.test.ts b/src/main/managed-server/lifecycle/orcad-managed-tunnel-identity.test.ts similarity index 93% rename from src/main/ssh/orcad-managed-tunnel-identity.test.ts rename to src/main/managed-server/lifecycle/orcad-managed-tunnel-identity.test.ts index 63a7c79804b..f69bb8041c1 100644 --- a/src/main/ssh/orcad-managed-tunnel-identity.test.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-tunnel-identity.test.ts @@ -1,13 +1,13 @@ -import type { PairedRuntimeConnection } from '../../shared/paired-runtime-connection' +import type { PairedRuntimeConnection } from '../../../shared/paired-runtime-connection' import { beforeEach, describe, expect, it, vi } from 'vitest' -import { encodePairingOffer, PAIRING_OFFER_VERSION } from '../../shared/pairing' -import { RemoteRuntimeClientError } from '../../shared/remote-runtime-client-error' -import type { ServeReadiness } from '../server/serve-readiness' +import { encodePairingOffer, PAIRING_OFFER_VERSION } from '../../../shared/pairing' +import { RemoteRuntimeClientError } from '../../../shared/remote-runtime-client-error' +import type { ServeReadiness } from '../../server/serve-readiness' const verifyRuntimePairingIdentity = vi.hoisted(() => vi.fn<(pairing: PairedRuntimeConnection, expected: unknown) => Promise>() ) -vi.mock('../runtime/runtime-environment-identity-verification', () => ({ +vi.mock('../../runtime/runtime-environment-identity-verification', () => ({ verifyRuntimePairingIdentity })) diff --git a/src/main/ssh/orcad-managed-tunnel-identity.ts b/src/main/managed-server/lifecycle/orcad-managed-tunnel-identity.ts similarity index 86% rename from src/main/ssh/orcad-managed-tunnel-identity.ts rename to src/main/managed-server/lifecycle/orcad-managed-tunnel-identity.ts index 8d9f509125f..1b580f0cbc8 100644 --- a/src/main/ssh/orcad-managed-tunnel-identity.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-tunnel-identity.ts @@ -3,25 +3,25 @@ * runtime still accepts the connection, so a forward that opened proves nothing; only a status * call that completes the pairing handshake and reports the paired runtime id does. */ -import { parsePairingCode } from '../../shared/pairing' +import { parsePairingCode } from '../../../shared/pairing' import { pairedRuntimeConnectionFromOffer, type PairedRuntimeConnection -} from '../../shared/paired-runtime-connection' -import { ORCAD_MANAGED_REMOTE_PORT } from '../../shared/orcad-managed-runtime' +} from '../../../shared/paired-runtime-connection' +import { ORCAD_MANAGED_REMOTE_PORT } from '../../../shared/orcad-managed-runtime' import { isRecoverableRemoteRuntimeConnectionError, toRemoteRuntimeClientErrorLike -} from '../../shared/remote-runtime-client-error-classification' -import { RemoteRuntimeClientError } from '../../shared/remote-runtime-client-error' +} from '../../../shared/remote-runtime-client-error-classification' +import { RemoteRuntimeClientError } from '../../../shared/remote-runtime-client-error' import { getPreferredPairedRuntimeConnection, type KnownRuntimeEnvironment -} from '../../shared/runtime-environments' -import { verifyRuntimePairingIdentity } from '../runtime/runtime-environment-identity-verification' -import type { ServeReadiness } from '../server/serve-readiness' +} from '../../../shared/runtime-environments' +import { verifyRuntimePairingIdentity } from '../../runtime/runtime-environment-identity-verification' +import type { ServeReadiness } from '../../server/serve-readiness' import { orcadBoundPort } from './orcad-managed-bound-port' -import { tunneledOrcadPairingCode } from './orcad-tunneled-pairing' +import { tunneledOrcadPairingCode } from '../../ssh/orcad-tunneled-pairing' /** `unreachable` means nothing answered; it is never evidence about which server holds the port. */ export type OrcadTunnelIdentity = diff --git a/src/main/ssh/orcad-managed-tunnel-manager.ts b/src/main/managed-server/lifecycle/orcad-managed-tunnel-manager.ts similarity index 95% rename from src/main/ssh/orcad-managed-tunnel-manager.ts rename to src/main/managed-server/lifecycle/orcad-managed-tunnel-manager.ts index 82b4dfc7c54..76227d71e1e 100644 --- a/src/main/ssh/orcad-managed-tunnel-manager.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-tunnel-manager.ts @@ -5,13 +5,13 @@ import { getRuntimeSshAccess, type KnownRuntimeEnvironment -} from '../../shared/runtime-environments' -import type { SshTarget } from '../../shared/ssh-types' -import { getManagedOrcadFenceEnvironmentId } from '../../shared/managed-orcad-ssh-owner' -import type { SshConnection } from './ssh-connection' -import { isAuthError } from './ssh-connection-utils' -import type { SshConnectionManager } from './ssh-connection-manager' -import { SshPortForwardManager } from './port-forwarding/ssh-port-forward' +} from '../../../shared/runtime-environments' +import type { SshTarget } from '../../../shared/ssh-types' +import { getManagedOrcadFenceEnvironmentId } from '../../../shared/managed-orcad-ssh-owner' +import type { SshConnection } from '../../ssh/ssh-connection' +import { isAuthError } from '../../ssh/ssh-connection-utils' +import type { SshConnectionManager } from '../../ssh/ssh-connection-manager' +import { SshPortForwardManager } from '../../ssh/port-forwarding/ssh-port-forward' import { OrcadManagedTunnelTransportProvider } from './orcad-managed-tunnel-transport' import { OrcadManagedTunnelResumeRecovery, @@ -28,7 +28,7 @@ import { type ActiveOrcadTunnel } from './orcad-managed-tunnel-active' import { checkManagedTunnelServing, type OrcadTunnelServing } from './orcad-managed-tunnel-serving' -import type { getSshTargetRegistryStore } from './ssh-target-registry' +import type { getSshTargetRegistryStore } from '../../ssh/ssh-target-registry' import { environmentForwardChecks, forwardToVerifiedOrcad, diff --git a/src/main/ssh/orcad-managed-tunnel-resume.ts b/src/main/managed-server/lifecycle/orcad-managed-tunnel-resume.ts similarity index 94% rename from src/main/ssh/orcad-managed-tunnel-resume.ts rename to src/main/managed-server/lifecycle/orcad-managed-tunnel-resume.ts index 2c09953e147..eccc4853ddd 100644 --- a/src/main/ssh/orcad-managed-tunnel-resume.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-tunnel-resume.ts @@ -1,15 +1,15 @@ -import { sendRemoteRuntimeRequest } from '../../shared/remote-runtime-client' +import { sendRemoteRuntimeRequest } from '../../../shared/remote-runtime-client' import { getPreferredPairedRuntimeConnection, type KnownRuntimeEnvironment, type RuntimeSshTunnelLink -} from '../../shared/runtime-environments' -import type { SshConnection } from './ssh-connection' -import type { SshTarget } from '../../shared/ssh-types' +} from '../../../shared/runtime-environments' +import type { SshConnection } from '../../ssh/ssh-connection' +import type { SshTarget } from '../../../shared/ssh-types' import type { OrcadManagedServing } from './orcad-managed-serving' -import type { SshConnectionManager } from './ssh-connection-manager' -import type { SshPortForwardManager } from './port-forwarding/ssh-port-forward' -import type { getSshTargetRegistryStore } from './ssh-target-registry' +import type { SshConnectionManager } from '../../ssh/ssh-connection-manager' +import type { SshPortForwardManager } from '../../ssh/port-forwarding/ssh-port-forward' +import type { getSshTargetRegistryStore } from '../../ssh/ssh-target-registry' import { dropActiveOrcadTunnel, managedTunnelAccess, diff --git a/src/main/ssh/orcad-managed-tunnel-serving.ts b/src/main/managed-server/lifecycle/orcad-managed-tunnel-serving.ts similarity index 87% rename from src/main/ssh/orcad-managed-tunnel-serving.ts rename to src/main/managed-server/lifecycle/orcad-managed-tunnel-serving.ts index 980b90dfdca..abe65a01af9 100644 --- a/src/main/ssh/orcad-managed-tunnel-serving.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-tunnel-serving.ts @@ -3,12 +3,12 @@ * other than the one the tunnel forwards to; the forward is then dropped, and the next build * forwards to the port the new server actually bound. */ -import type { KnownRuntimeEnvironment } from '../../shared/runtime-environments' +import type { KnownRuntimeEnvironment } from '../../../shared/runtime-environments' import type { OrcadManagedServing } from './orcad-managed-serving' import type { OrcadManagedServingCheck } from './orcad-managed-tunnel-resume' import type { ActiveOrcadTunnel } from './orcad-managed-tunnel-active' -import type { SshPortForwardManager } from './port-forwarding/ssh-port-forward' -import type { SshTarget } from '../../shared/ssh-types' +import type { SshPortForwardManager } from '../../ssh/port-forwarding/ssh-port-forward' +import type { SshTarget } from '../../../shared/ssh-types' export type OrcadTunnelServing = OrcadManagedServing & { rebind?: true } diff --git a/src/main/ssh/orcad-managed-tunnel-target.test.ts b/src/main/managed-server/lifecycle/orcad-managed-tunnel-target.test.ts similarity index 95% rename from src/main/ssh/orcad-managed-tunnel-target.test.ts rename to src/main/managed-server/lifecycle/orcad-managed-tunnel-target.test.ts index 019b66cc470..40395f4c8dc 100644 --- a/src/main/ssh/orcad-managed-tunnel-target.test.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-tunnel-target.test.ts @@ -1,9 +1,9 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { SshTarget } from '../../shared/ssh-types' -import type { KnownRuntimeEnvironment } from '../../shared/runtime-environments' -import type { OrcadHostTransport } from './orcad-host-transport' -import type { SshConnection } from './ssh-connection' -import type { SshPortForwardManager } from './port-forwarding/ssh-port-forward' +import type { SshTarget } from '../../../shared/ssh-types' +import type { KnownRuntimeEnvironment } from '../../../shared/runtime-environments' +import type { OrcadHostTransport } from '../../ssh/orcad-host-transport' +import type { SshConnection } from '../../ssh/ssh-connection' +import type { SshPortForwardManager } from '../../ssh/port-forwarding/ssh-port-forward' import { OrcadManagedIdentityError, type OrcadTunnelIdentity @@ -16,7 +16,7 @@ import { const mocks = vi.hoisted(() => ({ wake: vi.fn(), resolveContext: vi.fn() })) vi.mock('./orcad-managed-wake', () => ({ wakeStoppedManagedOrcad: mocks.wake })) -vi.mock('../managed-server/install/orcad-remote-context', () => ({ +vi.mock('../install/orcad-remote-context', () => ({ resolveOrcadRemoteContext: mocks.resolveContext })) diff --git a/src/main/ssh/orcad-managed-tunnel-target.ts b/src/main/managed-server/lifecycle/orcad-managed-tunnel-target.ts similarity index 95% rename from src/main/ssh/orcad-managed-tunnel-target.ts rename to src/main/managed-server/lifecycle/orcad-managed-tunnel-target.ts index 71d67febe38..4a9e5b7349f 100644 --- a/src/main/ssh/orcad-managed-tunnel-target.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-tunnel-target.ts @@ -2,7 +2,7 @@ import { getRuntimeSshAccess, type KnownRuntimeEnvironment -} from '../../shared/runtime-environments' +} from '../../../shared/runtime-environments' import { resolveManagedOrcadTunnelPort, type OrcadTunnelPortInput @@ -14,9 +14,12 @@ import { } from './orcad-managed-tunnel-identity' import { managedOrcadSlot } from './orcad-managed-runtime-context' import { wakeStoppedManagedOrcad } from './orcad-managed-wake' -import { resolveOrcadRemoteContext } from '../managed-server/install/orcad-remote-context' -import type { SshConnection } from './ssh-connection' -import type { PortForwardEntry, SshPortForwardManager } from './port-forwarding/ssh-port-forward' +import { resolveOrcadRemoteContext } from '../install/orcad-remote-context' +import type { SshConnection } from '../../ssh/ssh-connection' +import type { + PortForwardEntry, + SshPortForwardManager +} from '../../ssh/port-forwarding/ssh-port-forward' export type OrcadManagedTunnelTargeting = { resolveRemotePort: (input: OrcadTunnelPortInput) => Promise diff --git a/src/main/ssh/orcad-managed-tunnel-transport.test.ts b/src/main/managed-server/lifecycle/orcad-managed-tunnel-transport.test.ts similarity index 95% rename from src/main/ssh/orcad-managed-tunnel-transport.test.ts rename to src/main/managed-server/lifecycle/orcad-managed-tunnel-transport.test.ts index fd352ac96e8..a8a00092955 100644 --- a/src/main/ssh/orcad-managed-tunnel-transport.test.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-tunnel-transport.test.ts @@ -1,13 +1,13 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { OrcadManagedTunnelTransportProvider } from './orcad-managed-tunnel-transport' -import { knownOrcadTunnelTransport } from './orcad-tunnel-transport-memo' -import type { SshConnection } from './ssh-connection' +import { knownOrcadTunnelTransport } from '../../ssh/orcad-tunnel-transport-memo' +import type { SshConnection } from '../../ssh/ssh-connection' import type { PortForwardStartOptions, SshPortForwardProvider, StartedPortForward -} from './port-forwarding/ssh-port-forward-provider' -import type { TcpForwardingVerdict } from './ssh-tcp-forwarding-probe' +} from '../../ssh/port-forwarding/ssh-port-forward-provider' +import type { TcpForwardingVerdict } from '../../ssh/ssh-tcp-forwarding-probe' let generation = 1 // oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: the selector reads only the transport generation. diff --git a/src/main/ssh/orcad-managed-tunnel-transport.ts b/src/main/managed-server/lifecycle/orcad-managed-tunnel-transport.ts similarity index 91% rename from src/main/ssh/orcad-managed-tunnel-transport.ts rename to src/main/managed-server/lifecycle/orcad-managed-tunnel-transport.ts index 1d9ef79e983..833f5204bda 100644 --- a/src/main/ssh/orcad-managed-tunnel-transport.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-tunnel-transport.ts @@ -3,27 +3,27 @@ * wherever the host allows it, and the stdio bridge where its sshd refuses forwarding. */ import { OrcadStdioBridgePortForwardProvider } from './orcad-stdio-bridge-provider' -import { rememberOrcadTunnelTransport } from './orcad-tunnel-transport-memo' -import type { SshConnection } from './ssh-connection' +import { rememberOrcadTunnelTransport } from '../../ssh/orcad-tunnel-transport-memo' +import type { SshConnection } from '../../ssh/ssh-connection' import type { PortForwardStartOptions, SshPortForwardProvider, StartedPortForward -} from './port-forwarding/ssh-port-forward-provider' +} from '../../ssh/port-forwarding/ssh-port-forward-provider' import { checkForwardChannel, probeTcpForwarding, type TcpForwardingVerdict -} from './ssh-tcp-forwarding-probe' -import { Ssh2PortForwardProvider } from './port-forwarding/ssh2-port-forward-provider' +} from '../../ssh/ssh-tcp-forwarding-probe' +import { Ssh2PortForwardProvider } from '../../ssh/port-forwarding/ssh2-port-forward-provider' import { SystemSshPortForwardProvider, systemSshForwardBuildArgsOptions -} from './port-forwarding/system-ssh-port-forward-provider' +} from '../../ssh/port-forwarding/system-ssh-port-forward-provider' import { buildSystemSshPortForwardArgs, reserveLocalForwardPort -} from './system-ssh-forward-process' +} from '../../ssh/system-ssh-forward-process' type OrcadManagedTunnelTransportDependencies = { forwards: SshPortForwardProvider[] diff --git a/src/main/ssh/orcad-managed-tunnel.test.ts b/src/main/managed-server/lifecycle/orcad-managed-tunnel.test.ts similarity index 98% rename from src/main/ssh/orcad-managed-tunnel.test.ts rename to src/main/managed-server/lifecycle/orcad-managed-tunnel.test.ts index 5dd16768f5a..fca8ecbf4b3 100644 --- a/src/main/ssh/orcad-managed-tunnel.test.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-tunnel.test.ts @@ -2,16 +2,16 @@ import { describe, expect, it, vi } from 'vitest' import { createEnvironmentFromPairingOffer, type KnownRuntimeEnvironment -} from '../../shared/runtime-environments' -import { PAIRING_OFFER_VERSION } from '../../shared/pairing' -import type { SshTarget } from '../../shared/ssh-types' -import type { SshConnection } from './ssh-connection' -import type { SshConnectionManager } from './ssh-connection-manager' -import type { SshConnectionStore } from './ssh-connection-store' -import type { SshPortForwardManager } from './port-forwarding/ssh-port-forward' +} from '../../../shared/runtime-environments' +import { PAIRING_OFFER_VERSION } from '../../../shared/pairing' +import type { SshTarget } from '../../../shared/ssh-types' +import type { SshConnection } from '../../ssh/ssh-connection' +import type { SshConnectionManager } from '../../ssh/ssh-connection-manager' +import type { SshConnectionStore } from '../../ssh/ssh-connection-store' +import type { SshPortForwardManager } from '../../ssh/port-forwarding/ssh-port-forward' import { OrcadManagedTunnelManager } from './orcad-managed-tunnel-manager' import type { OrcadManagedTunnelTargeting } from './orcad-managed-tunnel-target' -import { createCancelledConnectAttemptError } from './ssh-connect-attempt-cancellation' +import { createCancelledConnectAttemptError } from '../../ssh/ssh-connect-attempt-cancellation' function createEnvironment(linkKind: 'orcadDeployment' | 'sshAccess'): KnownRuntimeEnvironment { const paired = createEnvironmentFromPairingOffer({ diff --git a/src/main/ssh/orcad-managed-tunnel.ts b/src/main/managed-server/lifecycle/orcad-managed-tunnel.ts similarity index 86% rename from src/main/ssh/orcad-managed-tunnel.ts rename to src/main/managed-server/lifecycle/orcad-managed-tunnel.ts index 85164eb1b70..ab97c595c09 100644 --- a/src/main/ssh/orcad-managed-tunnel.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-tunnel.ts @@ -1,12 +1,12 @@ -import type { KnownRuntimeEnvironment } from '../../shared/runtime-environments' -import { resolveEnvironment } from '../../shared/runtime-environment-store' -import type { SshTarget } from '../../shared/ssh-types' -import type { SshConnection } from './ssh-connection' +import type { KnownRuntimeEnvironment } from '../../../shared/runtime-environments' +import { resolveEnvironment } from '../../../shared/runtime-environment-store' +import type { SshTarget } from '../../../shared/ssh-types' +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 { getSshConnectionManager, getSshTargetRegistryStore } from './ssh-target-registry' +import { getRemoteRuntimeSharedControlAnsweredAt } from '../../ipc/runtime-environment-shared-control-answers' +import { getSshConnectionManager, getSshTargetRegistryStore } from '../../ssh/ssh-target-registry' import { MANAGED_ORCAD_TUNNEL_TARGETING, type OrcadTunnelStartChecks diff --git a/src/main/ssh/orcad-managed-update-deferrals.test.ts b/src/main/managed-server/lifecycle/orcad-managed-update-deferrals.test.ts similarity index 100% rename from src/main/ssh/orcad-managed-update-deferrals.test.ts rename to src/main/managed-server/lifecycle/orcad-managed-update-deferrals.test.ts diff --git a/src/main/ssh/orcad-managed-update-deferrals.ts b/src/main/managed-server/lifecycle/orcad-managed-update-deferrals.ts similarity index 90% rename from src/main/ssh/orcad-managed-update-deferrals.ts rename to src/main/managed-server/lifecycle/orcad-managed-update-deferrals.ts index e05dba6e3bc..f5c7e73af71 100644 --- a/src/main/ssh/orcad-managed-update-deferrals.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-update-deferrals.ts @@ -1,6 +1,6 @@ /** The last update each managed server deferred in this session, so status can report it. */ -import type { OrcadManagedDeferral } from '../../shared/orcad-managed-runtime' -import { compareAppVersions } from '../../shared/app-version' +import type { OrcadManagedDeferral } from '../../../shared/orcad-managed-runtime' +import { compareAppVersions } from '../../../shared/app-version' type RecordedDeferral = OrcadManagedDeferral & { deferredAt: string } diff --git a/src/main/ssh/orcad-managed-update-on-restore.test.ts b/src/main/managed-server/lifecycle/orcad-managed-update-on-restore.test.ts similarity index 97% rename from src/main/ssh/orcad-managed-update-on-restore.test.ts rename to src/main/managed-server/lifecycle/orcad-managed-update-on-restore.test.ts index cc8b75416fa..15cc78345a2 100644 --- a/src/main/ssh/orcad-managed-update-on-restore.test.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-update-on-restore.test.ts @@ -1,6 +1,6 @@ -import type { ManagedServerUpdateDeps } from './managed-server-update-check' +import type { ManagedServerUpdateDeps } from '../../ssh/managed-server-update-check' import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { SshTarget } from '../../shared/ssh-types' +import type { SshTarget } from '../../../shared/ssh-types' import type { ManagedOrcadAutoUpdateOutcome } from './orcad-managed-auto-update' import { redeployStoppedManagedOrcad, diff --git a/src/main/ssh/orcad-managed-update-on-restore.ts b/src/main/managed-server/lifecycle/orcad-managed-update-on-restore.ts similarity index 97% rename from src/main/ssh/orcad-managed-update-on-restore.ts rename to src/main/managed-server/lifecycle/orcad-managed-update-on-restore.ts index e7a335f34a3..b31463d8228 100644 --- a/src/main/ssh/orcad-managed-update-on-restore.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-update-on-restore.ts @@ -2,11 +2,11 @@ * The launch-time tunnel restore reaches a managed server without an SSH connect, so it runs the * same update check a connect would, once per server per session and off the caller's path. */ -import type { SshManagedServerUpdateNote, SshTarget } from '../../shared/ssh-types' +import type { SshManagedServerUpdateNote, SshTarget } from '../../../shared/ssh-types' import { checkManagedServerUpdate, type ManagedServerUpdateDeps -} from './managed-server-update-check' +} from '../../ssh/managed-server-update-check' export type ManagedOrcadRestoreUpdateDeps = ManagedServerUpdateDeps & { /** The SSH target that serves this managed server, or null when it is gone or unlinked. */ diff --git a/src/main/ssh/orcad-managed-version-gc.test.ts b/src/main/managed-server/lifecycle/orcad-managed-version-gc.test.ts similarity index 92% rename from src/main/ssh/orcad-managed-version-gc.test.ts rename to src/main/managed-server/lifecycle/orcad-managed-version-gc.test.ts index d99bfa74767..f75e69e5b01 100644 --- a/src/main/ssh/orcad-managed-version-gc.test.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-version-gc.test.ts @@ -1,14 +1,14 @@ import { afterEach, describe, expect, it, vi } from 'vitest' -import type { ServeReadiness } from '../server/serve-readiness' -import { NODE_RUNTIME_ASSETS, NODE_RUNTIME_COMPAT_ASSETS } from '../../shared/node-runtime-pin' +import type { ServeReadiness } from '../../server/serve-readiness' +import { NODE_RUNTIME_ASSETS, NODE_RUNTIME_COMPAT_ASSETS } from '../../../shared/node-runtime-pin' const { gcMock, readRecordMock } = vi.hoisted(() => ({ gcMock: vi.fn(), readRecordMock: vi.fn() })) -vi.mock('../managed-server/install/orcad-remote-gc', () => ({ gcOldOrcadVersions: gcMock })) -vi.mock('../managed-server/activation/orcad-activation-record-store', () => ({ +vi.mock('../install/orcad-remote-gc', () => ({ gcOldOrcadVersions: gcMock })) +vi.mock('../activation/orcad-activation-record-store', () => ({ readOrcadActivationRecord: readRecordMock })) diff --git a/src/main/ssh/orcad-managed-version-gc.ts b/src/main/managed-server/lifecycle/orcad-managed-version-gc.ts similarity index 80% rename from src/main/ssh/orcad-managed-version-gc.ts rename to src/main/managed-server/lifecycle/orcad-managed-version-gc.ts index 4704d6c9216..1f4ae5c6742 100644 --- a/src/main/ssh/orcad-managed-version-gc.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-version-gc.ts @@ -4,12 +4,12 @@ * rollback target, journaled versions, and the version the live terminal daemon was forked * from. Anything the host cannot answer about is kept. */ -import type { NodeRuntimeTarget } from '../../shared/node-runtime-pin' -import type { ServeReadiness } from '../server/serve-readiness' -import { readOrcadActivationRecord } from '../managed-server/activation/orcad-activation-record-store' -import { orcadSlotDir, type OrcadSlotOptions } from './orcad-recovery-slot' -import { gcOldOrcadVersions } from '../managed-server/install/orcad-remote-gc' -import { nodeRuntimeStorePins } from './pinned-runtime-host-target' +import type { NodeRuntimeTarget } from '../../../shared/node-runtime-pin' +import type { ServeReadiness } from '../../server/serve-readiness' +import { readOrcadActivationRecord } from '../activation/orcad-activation-record-store' +import { orcadSlotDir, type OrcadSlotOptions } from '../../ssh/orcad-recovery-slot' +import { gcOldOrcadVersions } from '../install/orcad-remote-gc' +import { nodeRuntimeStorePins } from '../../ssh/pinned-runtime-host-target' /** The daemon's build when the readiness proves it; undefined when it cannot say. */ export function provenLiveDaemonVersion(readiness: ServeReadiness): string | null | undefined { diff --git a/src/main/ssh/orcad-managed-wake.test.ts b/src/main/managed-server/lifecycle/orcad-managed-wake.test.ts similarity index 93% rename from src/main/ssh/orcad-managed-wake.test.ts rename to src/main/managed-server/lifecycle/orcad-managed-wake.test.ts index cce10d9b209..43035d1c8bc 100644 --- a/src/main/ssh/orcad-managed-wake.test.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-wake.test.ts @@ -1,30 +1,27 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type * as ExecCommandModule from './remote-exec-command' -import type * as InstallLock from '../managed-server/install/remote-install-lock' +import type * as ExecCommandModule from '../../ssh/remote-exec-command' +import type * as InstallLock from '../install/remote-install-lock' -vi.mock('./remote-exec-command', async (importOriginal) => ({ +vi.mock('../../ssh/remote-exec-command', async (importOriginal) => ({ ...(await importOriginal()), execCommand: vi.fn() })) -vi.mock('./ssh-connection-utils', () => ({ shellEscape: (s: string) => `'${s}'` })) -vi.mock('../managed-server/install/remote-install-lock', async (importOriginal) => ({ +vi.mock('../../ssh/ssh-connection-utils', () => ({ shellEscape: (s: string) => `'${s}'` })) +vi.mock('../install/remote-install-lock', async (importOriginal) => ({ ...(await importOriginal()), acquireInstallLock: vi.fn() })) -import { execCommand } from './remote-exec-command' -import { - acquireInstallLock, - RemoteInstallLockBusyError -} from '../managed-server/install/remote-install-lock' +import { execCommand } from '../../ssh/remote-exec-command' +import { acquireInstallLock, RemoteInstallLockBusyError } from '../install/remote-install-lock' import { wakeStoppedManagedOrcad } from './orcad-managed-wake' -import { getRemoteHostPlatform } from './ssh-remote-platform' -import type { OrcadHostTransport } from './orcad-host-transport' -import { FakeOrcadHost, OLD } from '../managed-server/activation/orcad-activation-host-test-harness' +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' +} from '../../../shared/orcad-idle-exit' let host = new FakeOrcadHost() diff --git a/src/main/ssh/orcad-managed-wake.ts b/src/main/managed-server/lifecycle/orcad-managed-wake.ts similarity index 87% rename from src/main/ssh/orcad-managed-wake.ts rename to src/main/managed-server/lifecycle/orcad-managed-wake.ts index 76dbb95c835..5846cf13640 100644 --- a/src/main/ssh/orcad-managed-wake.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-wake.ts @@ -3,32 +3,32 @@ * that stopped itself after idling. A stopped server is just "not running": it is neither a * failure nor evidence about terminals, which the daemon owns and which outlive orcad. */ -import { ORCAD_FENCE_OWNER_FILENAME } from '../managed-server/activation/orcad-activation-fence-scope' -import type { ServeReadiness } from '../server/serve-readiness' -import { readOrcadActivationRecord } from '../managed-server/activation/orcad-activation-record-store' +import { ORCAD_FENCE_OWNER_FILENAME } from '../activation/orcad-activation-fence-scope' +import type { ServeReadiness } from '../../server/serve-readiness' +import { readOrcadActivationRecord } from '../activation/orcad-activation-record-store' import { randomUUID } from 'node:crypto' import { orcadActivationFenceExists, releaseOrcadActivationFence, withOrcadActivationLock -} from '../managed-server/activation/orcad-activation-lock' -import { orcadLivenessProvenExited } from '../managed-server/install/orcad-remote-launch' -import { readBoundedOrcadRemoteRecord } from '../managed-server/install/orcad-remote-record-file' -import { orcadActivationFenceLockDir } from '../managed-server/activation/orcad-activation-transaction' -import { joinRemotePath } from './ssh-remote-platform' +} from '../activation/orcad-activation-lock' +import { orcadLivenessProvenExited } from '../install/orcad-remote-launch' +import { readBoundedOrcadRemoteRecord } from '../install/orcad-remote-record-file' +import { orcadActivationFenceLockDir } from '../activation/orcad-activation-transaction' +import { joinRemotePath } from '../../ssh/ssh-remote-platform' -import { readOrcadActivationTransaction } from '../managed-server/activation/orcad-activation-transaction-store' +import { readOrcadActivationTransaction } from '../activation/orcad-activation-transaction-store' import { ORCAD_RECOVERY_UNVERIFIABLE_CODE, recoverInterruptedOrcadActivation -} from '../managed-server/activation/orcad-activation-recovery' +} from '../activation/orcad-activation-recovery' import { ensureOrcadSlotServing, orcadSlotDir, resolveOrcadSlotIdentity, slotLiveness, type OrcadSlotOptions -} from './orcad-recovery-slot' +} from '../../ssh/orcad-recovery-slot' export type OrcadManagedWake = | { outcome: 'serving' | 'not-activated' | 'unverifiable' } diff --git a/src/main/ssh/orcad-rollback-terminal-barrier.ts b/src/main/managed-server/lifecycle/orcad-rollback-terminal-barrier.ts similarity index 96% rename from src/main/ssh/orcad-rollback-terminal-barrier.ts rename to src/main/managed-server/lifecycle/orcad-rollback-terminal-barrier.ts index d719910f065..6ea3486375f 100644 --- a/src/main/ssh/orcad-rollback-terminal-barrier.ts +++ b/src/main/managed-server/lifecycle/orcad-rollback-terminal-barrier.ts @@ -11,8 +11,8 @@ import { type OrcadManagedStopTarget } from './orcad-managed-remote-stop' import { settleOrcadDecommissionStop } from './orcad-decommission-stop' -import type { OrcadSlotOptions } from './orcad-recovery-slot' -import type { OrcadManagedStopContext } from '../../shared/orcad-stop-request' +import type { OrcadSlotOptions } from '../../ssh/orcad-recovery-slot' +import type { OrcadManagedStopContext } from '../../../shared/orcad-stop-request' export type OrcadRollbackBarrier = | { state: 'retired' } diff --git a/src/main/ssh/orcad-rollback-transition.ts b/src/main/managed-server/lifecycle/orcad-rollback-transition.ts similarity index 84% rename from src/main/ssh/orcad-rollback-transition.ts rename to src/main/managed-server/lifecycle/orcad-rollback-transition.ts index 5b01ad20559..1fc64390bb9 100644 --- a/src/main/ssh/orcad-rollback-transition.ts +++ b/src/main/managed-server/lifecycle/orcad-rollback-transition.ts @@ -1,16 +1,13 @@ /** The locked, journaled half of `rollbackOrcad`. */ -import { orcadRemoteBaseDir } from '../managed-server/install/orcad-remote-windows-node' +import { orcadRemoteBaseDir } from '../install/orcad-remote-windows-node' import { randomUUID } from 'node:crypto' -import type { - OrcadRollbackOptions, - OrcadRollbackResult -} from '../managed-server/install/orcad-remote-rollback' -import { isUnconfirmedSshCommandTermination } from './remote-exec-command' -import { withRolledBackVersion } from '../managed-server/activation/orcad-activation-record' -import { writeOrcadActivationRecord } from '../managed-server/activation/orcad-activation-record-store' -import { launchAndJudgeOrcadSlot } from './orcad-candidate-launch-verdict' -import { assessOrcadRollback } from './orcad-update-plan' -import { ORCAD_LOG_FILENAME } from '../managed-server/install/orcad-remote-host-support' +import type { OrcadRollbackOptions, OrcadRollbackResult } from '../install/orcad-remote-rollback' +import { isUnconfirmedSshCommandTermination } from '../../ssh/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' +import { assessOrcadRollback } from '../../ssh/orcad-update-plan' +import { ORCAD_LOG_FILENAME } from '../install/orcad-remote-host-support' import { captureOrcadStateSnapshotCommand, newestStateMtimeCommand, @@ -21,41 +18,38 @@ import { parseOrcadSnapshotRestore, probeOrcadStateSnapshotCommand, restoreOrcadStateSnapshotCommand -} from './orcad-state-snapshot' -import { joinRemotePath } from './ssh-remote-platform' -import type { OrcadActivationLockControl } from '../managed-server/activation/orcad-activation-lock' +} from '../../ssh/orcad-state-snapshot' +import { joinRemotePath } from '../../ssh/ssh-remote-platform' +import type { OrcadActivationLockControl } from '../activation/orcad-activation-lock' import { rollbackStartingState, type OrcadRollbackTransaction -} from '../managed-server/activation/orcad-activation-transaction' +} from '../activation/orcad-activation-transaction' import { createOrcadRollbackTransaction, withOrcadRollbackPhase, withOrcadRollbackRescue -} from '../managed-server/activation/orcad-activation-transaction-transitions' -import { writeOrcadActivationTransaction } from '../managed-server/activation/orcad-activation-transaction-store' -import { - execOrcadRemoteOr, - withoutAbortSignal -} from '../managed-server/install/orcad-remote-runtime-control' -import { execOrcadStateMutationOr } from './orcad-state-mutation-exec' +} from '../activation/orcad-activation-transaction-transitions' +import { writeOrcadActivationTransaction } from '../activation/orcad-activation-transaction-store' +import { execOrcadRemoteOr, withoutAbortSignal } from '../install/orcad-remote-runtime-control' +import { execOrcadStateMutationOr } from '../../ssh/orcad-state-mutation-exec' import { orcadSlotDir, resolveOrcadSlotIdentity, type OrcadSlotIdentity -} from './orcad-recovery-slot' -import { orcadSnapshotPath } from './orcad-incumbent-recovery' +} from '../../ssh/orcad-recovery-slot' +import { orcadSnapshotPath } from '../../ssh/orcad-incumbent-recovery' import { putTransactionIncumbentBack, restoreAfterRejectedCandidate -} from './orcad-transaction-incumbent' +} from '../../ssh/orcad-transaction-incumbent' import { readOrcadRollbackBarrierTarget, rollbackBarrierRefusal, stopIncumbentBehindTerminalBarrier } from './orcad-rollback-terminal-barrier' -import { withOrcadLogTail } from '../managed-server/install/orcad-remote-log-tail' -import { errorMessage } from '../../shared/error-message' +import { withOrcadLogTail } from '../install/orcad-remote-log-tail' +import { errorMessage } from '../../../shared/error-message' async function stateWritesSinceActivation(options: OrcadRollbackOptions): Promise { const activatedAtSeconds = Math.floor(Date.parse(options.record.activatedAt ?? '') / 1000) diff --git a/src/main/ssh/orcad-runtime-conversion-wiring.ts b/src/main/managed-server/lifecycle/orcad-runtime-conversion-wiring.ts similarity index 82% rename from src/main/ssh/orcad-runtime-conversion-wiring.ts rename to src/main/managed-server/lifecycle/orcad-runtime-conversion-wiring.ts index 055373aa0dd..fc87b033d36 100644 --- a/src/main/ssh/orcad-runtime-conversion-wiring.ts +++ b/src/main/managed-server/lifecycle/orcad-runtime-conversion-wiring.ts @@ -1,11 +1,11 @@ /** The live collaborators a host conversion needs: the census, the direct session and the server. */ -import { encodePairingOffer } from '../../shared/pairing' +import { encodePairingOffer } from '../../../shared/pairing' import { getPreferredPairingOffer, type KnownRuntimeEnvironment -} from '../../shared/runtime-environments' -import { disconnectRegisteredSshTarget } from '../ipc/ssh-session-teardown' -import type { OrcadMigrationDestinationCatalog } from './orcad-migration-cutover-coordinator' +} from '../../../shared/runtime-environments' +import { disconnectRegisteredSshTarget } from '../../ipc/ssh-session-teardown' +import type { OrcadMigrationDestinationCatalog } from '../../ssh/orcad-migration-cutover-coordinator' import { abortRemoteOrcadMigrationCatalog, commitRemoteOrcadMigrationCatalog, @@ -13,14 +13,14 @@ import { readRemoteOrcadMigrationCatalogState, stageRemoteOrcadMigrationCatalog, stageRemoteOrcadMigrationSnapshotChunk -} from './orcad-migration-catalog-client' -import { censusHostRelayTerminalsFor } from './legacy-relay/ssh-host-relay-census-for-target' +} from '../../ssh/orcad-migration-catalog-client' +import { censusHostRelayTerminalsFor } from '../../ssh/legacy-relay/ssh-host-relay-census-for-target' import type { OrcadManagedConversionArgs } from './orcad-runtime-conversion' -import type { OrcadServerRepository } from './orcad-migration-repository-link' +import type { OrcadServerRepository } from '../../ssh/orcad-migration-repository-link' import { listRemoteOrcadFolderCatalog, type OrcadServerFolderCatalog -} from './orcad-server-folder-workspaces' +} from '../../ssh/orcad-server-folder-workspaces' /** The T6-9 client against this server, pinned to the runtime it paired with. */ export function orcadMigrationDestinationFor( diff --git a/src/main/ssh/orcad-runtime-conversion.test.ts b/src/main/managed-server/lifecycle/orcad-runtime-conversion.test.ts similarity index 94% rename from src/main/ssh/orcad-runtime-conversion.test.ts rename to src/main/managed-server/lifecycle/orcad-runtime-conversion.test.ts index dc562057aee..08f03f8c05b 100644 --- a/src/main/ssh/orcad-runtime-conversion.test.ts +++ b/src/main/managed-server/lifecycle/orcad-runtime-conversion.test.ts @@ -2,27 +2,27 @@ 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 { getManagedOrcadFenceEnvironmentId } from '../../shared/managed-orcad-ssh-owner' -import { encodePairingOffer, PAIRING_OFFER_VERSION } from '../../shared/pairing' +import { getManagedOrcadFenceEnvironmentId } from '../../../shared/managed-orcad-ssh-owner' +import { encodePairingOffer, PAIRING_OFFER_VERSION } from '../../../shared/pairing' import { addManagedOrcadEnvironment, removeManagedOrcadEnvironment -} from '../../shared/runtime-environment-managed-orcad-store' -import { listEnvironments } from '../../shared/runtime-environment-store' -import type { SshTarget } from '../../shared/ssh-types' -import { closeTestStores, createSqliteTestStore } from '../persistence-test-harness' -import { Store } from '../persistence/loading-store/store' -import { listOrcadMigrationSourceCutovers } from './orcad-migration-cutover-journal' +} from '../../../shared/runtime-environment-managed-orcad-store' +import { listEnvironments } from '../../../shared/runtime-environment-store' +import type { SshTarget } from '../../../shared/ssh-types' +import { closeTestStores, createSqliteTestStore } from '../../persistence-test-harness' +import { Store } from '../../persistence/loading-store/store' +import { listOrcadMigrationSourceCutovers } from '../../ssh/orcad-migration-cutover-journal' import type { OrcadManagedConversionArgs } from './orcad-runtime-conversion' -import { fakeOrcadMigrationDestination } from './orcad-migration-destination-fake' -import { reconcileManagedOrcadSshTargets, visibleRepos } from './orcad-retained-source' -import { SshConnectionStore } from './ssh-connection-store' +import { fakeOrcadMigrationDestination } from '../../ssh/orcad-migration-destination-fake' +import { reconcileManagedOrcadSshTargets, visibleRepos } from '../../ssh/orcad-retained-source' +import { SshConnectionStore } from '../../ssh/ssh-connection-store' const mocks = vi.hoisted(() => { const state: { targetStore: unknown } = { targetStore: null } return { state, deploy: vi.fn(), ensureTunnel: vi.fn() } }) -vi.mock('./ssh-target-registry', () => ({ +vi.mock('../../ssh/ssh-target-registry', () => ({ getSshConnectionManager: () => ({}), getSshTargetRegistryStore: () => mocks.state.targetStore })) @@ -33,7 +33,7 @@ vi.mock('./orcad-managed-tunnel', () => ({ })) const { convertSshTargetToManagedOrcad } = await import('./orcad-runtime-conversion') -const { abandonOrcadConversion } = await import('./orcad-conversion-abandon') +const { abandonOrcadConversion } = await import('../../ssh/orcad-conversion-abandon') const TARGET: SshTarget = { id: 'ssh-prod', diff --git a/src/main/ssh/orcad-runtime-conversion.ts b/src/main/managed-server/lifecycle/orcad-runtime-conversion.ts similarity index 89% rename from src/main/ssh/orcad-runtime-conversion.ts rename to src/main/managed-server/lifecycle/orcad-runtime-conversion.ts index 49320162543..99908070557 100644 --- a/src/main/ssh/orcad-runtime-conversion.ts +++ b/src/main/managed-server/lifecycle/orcad-runtime-conversion.ts @@ -8,44 +8,44 @@ * destination proves its commit, and is never deleted afterwards. */ import { randomUUID } from 'node:crypto' -import type { OrcadManagedConversionResult } from '../../shared/orcad-managed-runtime' -import type { OrcadMigrationSourceCutover } from '../../shared/orcad-migration-source-cutover' -import { recordManagedOrcadMigration } from '../../shared/runtime-environment-managed-orcad-store' -import { listEnvironments } from '../../shared/runtime-environment-store' +import type { OrcadManagedConversionResult } from '../../../shared/orcad-managed-runtime' +import type { OrcadMigrationSourceCutover } from '../../../shared/orcad-migration-source-cutover' +import { recordManagedOrcadMigration } from '../../../shared/runtime-environment-managed-orcad-store' +import { listEnvironments } from '../../../shared/runtime-environment-store' import { getOrcadSshDeployment, redactRuntimeEnvironment, type KnownRuntimeEnvironment -} from '../../shared/runtime-environments' -import { runTargetLifecycle } from '../ipc/ssh-target-lifecycle-queue' +} from '../../../shared/runtime-environments' +import { runTargetLifecycle } from '../../ipc/ssh-target-lifecycle-queue' import { environmentMatchesManagedOrcadCutover } from './orcad-managed-migration-status' import { requireManagedOrcadInfrastructure } from './orcad-managed-runtime-context' import { ensureOrcadManagedTunnel } from './orcad-managed-tunnel' import { commitOrcadMigrationDestination, type OrcadMigrationDestinationCatalog -} from './orcad-migration-cutover-coordinator' +} from '../../ssh/orcad-migration-cutover-coordinator' import { findOrcadMigrationSourceCutoverForTarget, removeOrcadMigrationJournalsForDestination -} from './orcad-migration-cutover-journal' -import type { SshTarget } from '../../shared/ssh-types' -import type { CensusHostRelayTerminals } from './orcad-migration-terminal-gate' +} from '../../ssh/orcad-migration-cutover-journal' +import type { SshTarget } from '../../../shared/ssh-types' +import type { CensusHostRelayTerminals } from '../../ssh/orcad-migration-terminal-gate' import { createManagedOrcadEnvironment } from './orcad-runtime-deployment' -import { createSshRelayMigrationSource } from './orcad-migration-ssh-relay-source' +import { createSshRelayMigrationSource } from '../../ssh/orcad-migration-ssh-relay-source' import { leaveBehindClearsOrcadMigrationBlockers, onlyLeavableOrcadMigrationBlockers -} from './ssh-target-orcad-preflight' -import { ORCAD_MIGRATION_LEAVE_BEHIND_TERMINALS_REASON } from './orcad-migration-source-fence' -import { retainOrcadMigrationSource } from './orcad-migration-source-retention' +} from '../../ssh/ssh-target-orcad-preflight' +import { ORCAD_MIGRATION_LEAVE_BEHIND_TERMINALS_REASON } from '../../ssh/orcad-migration-source-fence' +import { retainOrcadMigrationSource } from '../../ssh/orcad-migration-source-retention' import { linkedOrcadMigrationCutoverPort, linkedOrcadMigrationProjects, linkServerHeldRepositories, type OrcadServerRepository -} from './orcad-migration-repository-link' -import type { OrcadServerFolderCatalog } from './orcad-server-folder-workspaces' +} from '../../ssh/orcad-migration-repository-link' +import type { OrcadServerFolderCatalog } from '../../ssh/orcad-server-folder-workspaces' export type OrcadManagedConversionArgs = { sshTargetId: string diff --git a/src/main/ssh/orcad-runtime-decommission.test.ts b/src/main/managed-server/lifecycle/orcad-runtime-decommission.test.ts similarity index 91% rename from src/main/ssh/orcad-runtime-decommission.test.ts rename to src/main/managed-server/lifecycle/orcad-runtime-decommission.test.ts index a28adcef1d2..aac63f6958e 100644 --- a/src/main/ssh/orcad-runtime-decommission.test.ts +++ b/src/main/managed-server/lifecycle/orcad-runtime-decommission.test.ts @@ -1,13 +1,13 @@ import { existsSync, readFileSync, rmSync } from 'node:fs' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { getManagedOrcadFenceEnvironmentId } from '../../shared/managed-orcad-ssh-owner' -import { getRuntimeEnvironmentSidecarPath } from '../../shared/runtime-environment-sidecar' -import { listEnvironments } from '../../shared/runtime-environment-store' +import { getManagedOrcadFenceEnvironmentId } from '../../../shared/managed-orcad-ssh-owner' +import { getRuntimeEnvironmentSidecarPath } from '../../../shared/runtime-environment-sidecar' +import { listEnvironments } from '../../../shared/runtime-environment-store' import { listOrcadMigrationSourceCutovers, writeOrcadMigrationSourceCutover -} from './orcad-migration-cutover-journal' -import { orcadMigrationCutoverFixture } from './orcad-migration-cutover-fixture' +} from '../../ssh/orcad-migration-cutover-journal' +import { orcadMigrationCutoverFixture } from '../../ssh/orcad-migration-cutover-fixture' import { createManagedLifecycleHarness, MANAGED_VERSION @@ -29,24 +29,26 @@ const mocks = vi.hoisted(() => { } }) -vi.mock('./ssh-target-registry', () => ({ +vi.mock('../../ssh/ssh-target-registry', () => ({ getSshConnectionManager: () => ({ connect: async () => ({}) }), getSshTargetRegistryStore: () => mocks.state.store })) -vi.mock('../managed-server/install/orcad-remote-context', () => ({ +vi.mock('../install/orcad-remote-context', () => ({ resolveOrcadRemoteContext: mocks.resolveContext })) -vi.mock('./orcad-terminal-census-client', () => ({ collectManagedTerminalCensus: mocks.census })) -vi.mock('../managed-server/install/orcad-remote-decommission', () => ({ +vi.mock('../../ssh/orcad-terminal-census-client', () => ({ + collectManagedTerminalCensus: mocks.census +})) +vi.mock('../install/orcad-remote-decommission', () => ({ decommissionRemoteOrcad: mocks.decommission })) -vi.mock('../managed-server/activation/orcad-activation-recovery', () => ({ +vi.mock('../activation/orcad-activation-recovery', () => ({ recoverInterruptedOrcadActivation: mocks.recover })) -vi.mock('../managed-server/activation/orcad-activation-transaction-store', () => ({ +vi.mock('../activation/orcad-activation-transaction-store', () => ({ readOrcadActivationTransaction: async () => mocks.state.transaction })) -vi.mock('../managed-server/activation/orcad-activation-lock', () => ({ +vi.mock('../activation/orcad-activation-lock', () => ({ withStaleOrcadActivationRecoveryLock: async ( _options: unknown, run: (lock: { retain: () => void }) => Promise diff --git a/src/main/ssh/orcad-runtime-decommission.ts b/src/main/managed-server/lifecycle/orcad-runtime-decommission.ts similarity index 90% rename from src/main/ssh/orcad-runtime-decommission.ts rename to src/main/managed-server/lifecycle/orcad-runtime-decommission.ts index 7ae19ecfb11..8285d04e741 100644 --- a/src/main/ssh/orcad-runtime-decommission.ts +++ b/src/main/managed-server/lifecycle/orcad-runtime-decommission.ts @@ -6,16 +6,16 @@ import type { OrcadManagedCancelStopResult, OrcadManagedForgetResult, OrcadManagedStopResult -} from '../../shared/orcad-managed-runtime' -import type { OrcadDaemonRetirementVerdict } from '../../shared/orcad-stop-request' -import { removeManagedOrcadEnvironment } from '../../shared/runtime-environment-managed-orcad-store' +} from '../../../shared/orcad-managed-runtime' +import type { OrcadDaemonRetirementVerdict } from '../../../shared/orcad-stop-request' +import { removeManagedOrcadEnvironment } from '../../../shared/runtime-environment-managed-orcad-store' import type { KnownRuntimeEnvironment, OrcadSshDeploymentLink -} from '../../shared/runtime-environments' -import { recoverInterruptedOrcadActivation } from '../managed-server/activation/orcad-activation-recovery' -import { withStaleOrcadActivationRecoveryLock } from '../managed-server/activation/orcad-activation-lock' -import { readOrcadActivationTransaction } from '../managed-server/activation/orcad-activation-transaction-store' +} from '../../../shared/runtime-environments' +import { recoverInterruptedOrcadActivation } from '../activation/orcad-activation-recovery' +import { withStaleOrcadActivationRecoveryLock } from '../activation/orcad-activation-lock' +import { readOrcadActivationTransaction } from '../activation/orcad-activation-transaction-store' import { reconcileOrcadDecommission } from './orcad-decommission-recovery' import { cancelRemoteOrcadManagedStop } from './orcad-managed-remote-stop' import { @@ -25,11 +25,11 @@ import { } from './orcad-managed-runtime-context' import { closeOrcadManagedTunnel, ensureOrcadManagedTunnel } from './orcad-managed-tunnel' import { clearManagedOrcadUpdateDeferral } from './orcad-managed-update-deferrals' -import { removeOrcadMigrationJournalsForDestination } from './orcad-migration-cutover-journal' -import { decommissionRemoteOrcad } from '../managed-server/install/orcad-remote-decommission' -import { withManagedOrcadLifecycle } from './orcad-runtime-maintenance' -import { collectManagedTerminalCensus } from './orcad-terminal-census-client' -import { RemoteInstallLockBusyError } from '../managed-server/install/remote-install-lock' +import { removeOrcadMigrationJournalsForDestination } from '../../ssh/orcad-migration-cutover-journal' +import { decommissionRemoteOrcad } from '../install/orcad-remote-decommission' +import { withManagedOrcadLifecycle } from '../../ssh/orcad-runtime-maintenance' +import { collectManagedTerminalCensus } from '../../ssh/orcad-terminal-census-client' +import { RemoteInstallLockBusyError } from '../install/remote-install-lock' export type ManagedOrcadStopPolicy = { isActiveEnvironment: (environmentId: string) => boolean diff --git a/src/main/ssh/orcad-runtime-deployment.test.ts b/src/main/managed-server/lifecycle/orcad-runtime-deployment.test.ts similarity index 94% rename from src/main/ssh/orcad-runtime-deployment.test.ts rename to src/main/managed-server/lifecycle/orcad-runtime-deployment.test.ts index b9f9dca4f64..3d5f6aee6b9 100644 --- a/src/main/ssh/orcad-runtime-deployment.test.ts +++ b/src/main/managed-server/lifecycle/orcad-runtime-deployment.test.ts @@ -2,23 +2,23 @@ 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 { getAppEnvironment } from '../../shared/app-environment' -import { encodePairingOffer, PAIRING_OFFER_VERSION } from '../../shared/pairing' -import { getManagedOrcadFenceEnvironmentId } from '../../shared/managed-orcad-ssh-owner' -import { writeOrcadMigrationSourceCutover } from './orcad-migration-cutover-journal' -import { orcadMigrationCutoverFixture } from './orcad-migration-cutover-fixture' -import { listEnvironments } from '../../shared/runtime-environment-store' -import type { SshTarget } from '../../shared/ssh-types' -import { getRemoteHostPlatform } from './ssh-remote-platform' -import { SshTargetOrcadClaims } from './ssh-target-orcad-claims' -import { emptyDependentStateStore } from './ssh-target-orcad-dependents-fixture' +import { getAppEnvironment } from '../../../shared/app-environment' +import { encodePairingOffer, PAIRING_OFFER_VERSION } from '../../../shared/pairing' +import { getManagedOrcadFenceEnvironmentId } from '../../../shared/managed-orcad-ssh-owner' +import { writeOrcadMigrationSourceCutover } from '../../ssh/orcad-migration-cutover-journal' +import { orcadMigrationCutoverFixture } from '../../ssh/orcad-migration-cutover-fixture' +import { listEnvironments } from '../../../shared/runtime-environment-store' +import type { SshTarget } from '../../../shared/ssh-types' +import { getRemoteHostPlatform } from '../../ssh/ssh-remote-platform' +import { SshTargetOrcadClaims } from '../../ssh/ssh-target-orcad-claims' +import { emptyDependentStateStore } from '../../ssh/ssh-target-orcad-dependents-fixture' import { withDeactivatedVersion, withDeactivatedVersionCommitted, type OrcadActivationRecord -} from '../managed-server/activation/orcad-activation-record' -import { ORCAD_ACTIVATION_POLICY_REFUSED_CODE } from './orcad-installed-activation' -import type { OrcadDeployOptions } from './orcad-remote-deploy' +} from '../activation/orcad-activation-record' +import { ORCAD_ACTIVATION_POLICY_REFUSED_CODE } from '../../ssh/orcad-installed-activation' +import type { OrcadDeployOptions } from '../../ssh/orcad-remote-deploy' const mocks = vi.hoisted(() => { const state: { store: unknown } = { store: null } @@ -41,43 +41,45 @@ const mocks = vi.hoisted(() => { } }) -vi.mock('./ssh-target-registry', () => ({ +vi.mock('../../ssh/ssh-target-registry', () => ({ getSshConnectionManager: () => ({ connect: mocks.connect }), getSshTargetRegistryStore: () => mocks.state.store })) -vi.mock('../managed-server/install/orcad-remote-context', () => ({ +vi.mock('../install/orcad-remote-context', () => ({ resolveOrcadRemoteContext: mocks.resolveContext })) -vi.mock('../managed-server/activation/orcad-activation-recovery', () => ({ +vi.mock('../activation/orcad-activation-recovery', () => ({ recoverInterruptedOrcadActivation: mocks.recover })) -vi.mock('../managed-server/activation/orcad-activation-record-store', () => ({ +vi.mock('../activation/orcad-activation-record-store', () => ({ readOrcadActivationRecord: mocks.readRecord })) -vi.mock('../managed-server/activation/orcad-activation-transaction-store', () => ({ +vi.mock('../activation/orcad-activation-transaction-store', () => ({ readOrcadActivationTransaction: mocks.readTransaction })) -vi.mock('./orcad-remote-deploy', () => ({ deployOrcad: mocks.deploy })) -vi.mock('../orcad/orcad-artifact-materializer', () => ({ +vi.mock('../../ssh/orcad-remote-deploy', () => ({ deployOrcad: mocks.deploy })) +vi.mock('../../orcad/orcad-artifact-materializer', () => ({ materializeOrcadArtifact: async () => '/local/orcad' })) vi.mock('./orcad-managed-wake', () => ({ wakeStoppedManagedOrcad: mocks.wake })) -vi.mock('../managed-server/activation/orcad-activation-fence-hold', () => ({ +vi.mock('../activation/orcad-activation-fence-hold', () => ({ orcadActivationFenceRefusal: mocks.fenceRefusal })) -vi.mock('../managed-server/install/orcad-remote-build-hash', () => ({ +vi.mock('../install/orcad-remote-build-hash', () => ({ readRemoteOrcadBuildHash: async () => 'running-hash' })) -vi.mock('../managed-server/install/remote-versioned-install', async (importOriginal) => ({ +vi.mock('../install/remote-versioned-install', async (importOriginal) => ({ ...(await importOriginal>()), readLocalFullVersion: mocks.localVersion })) -vi.mock('./orcad-local-build-hash', () => ({ computeLocalOrcadBuildHash: () => 'build-hash' })) -vi.mock('./orcad-active-readiness', async (importOriginal) => ({ +vi.mock('../../ssh/orcad-local-build-hash', () => ({ + computeLocalOrcadBuildHash: () => 'build-hash' +})) +vi.mock('../../ssh/orcad-active-readiness', async (importOriginal) => ({ ...(await importOriginal>()), probeActiveOrcadReadiness: mocks.probe })) -vi.mock('./orcad-terminal-census-client', () => ({ +vi.mock('../../ssh/orcad-terminal-census-client', () => ({ collectManagedTerminalCensus: async () => ({ liveSessions: 0, startedSinceActivation: 0, diff --git a/src/main/ssh/orcad-runtime-deployment.ts b/src/main/managed-server/lifecycle/orcad-runtime-deployment.ts similarity index 83% rename from src/main/ssh/orcad-runtime-deployment.ts rename to src/main/managed-server/lifecycle/orcad-runtime-deployment.ts index c6f3adee726..2f51232595d 100644 --- a/src/main/ssh/orcad-runtime-deployment.ts +++ b/src/main/managed-server/lifecycle/orcad-runtime-deployment.ts @@ -3,44 +3,44 @@ * The target claim is the resume point: an interrupted deploy leaves the target owned by the * environment id it was creating, and the next deploy of that target finishes the same one. */ -import { getAppEnvironment } from '../../shared/app-environment' +import { getAppEnvironment } from '../../../shared/app-environment' import { randomUUID } from 'node:crypto' -import { assertRuntimeEnvironmentNotReconciling } from '../../shared/runtime-environment-reconciliation-record' -import { listEnvironments } from '../../shared/runtime-environment-store' -import { addManagedOrcadEnvironment } from '../../shared/runtime-environment-managed-orcad-store' -import { getOrcadSshDeployment, redactRuntimeEnvironment } from '../../shared/runtime-environments' +import { assertRuntimeEnvironmentNotReconciling } from '../../../shared/runtime-environment-reconciliation-record' +import { listEnvironments } from '../../../shared/runtime-environment-store' +import { addManagedOrcadEnvironment } from '../../../shared/runtime-environment-managed-orcad-store' +import { + getOrcadSshDeployment, + redactRuntimeEnvironment +} from '../../../shared/runtime-environments' import { ORCAD_MANAGED_REMOTE_PORT, type OrcadManagedDeferral, type OrcadManagedDeployResult -} from '../../shared/orcad-managed-runtime' -import { getManagedOrcadFenceEnvironmentId } from '../../shared/managed-orcad-ssh-owner' -import { runTargetLifecycle } from '../ipc/ssh-target-lifecycle-queue' -import { materializeOrcadArtifact } from '../orcad/orcad-artifact-materializer' +} from '../../../shared/orcad-managed-runtime' +import { getManagedOrcadFenceEnvironmentId } from '../../../shared/managed-orcad-ssh-owner' +import { runTargetLifecycle } from '../../ipc/ssh-target-lifecycle-queue' +import { materializeOrcadArtifact } from '../../orcad/orcad-artifact-materializer' import { closeOrcadManagedTunnel, ensureOrcadManagedTunnel, startOrcadManagedTunnel } from './orcad-managed-tunnel' -import { recoverInterruptedOrcadActivation } from '../managed-server/activation/orcad-activation-recovery' -import { wakeAlreadyActiveOrcad } from './orcad-already-active-wake' -import { readOrcadActivationRecord } from '../managed-server/activation/orcad-activation-record-store' -import { - resolveOrcadRemoteContext, - type OrcadRemoteContext -} from '../managed-server/install/orcad-remote-context' -import { deployOrcad } from './orcad-remote-deploy' +import { recoverInterruptedOrcadActivation } from '../activation/orcad-activation-recovery' +import { wakeAlreadyActiveOrcad } from '../../ssh/orcad-already-active-wake' +import { readOrcadActivationRecord } from '../activation/orcad-activation-record-store' +import { resolveOrcadRemoteContext, type OrcadRemoteContext } from '../install/orcad-remote-context' +import { deployOrcad } from '../../ssh/orcad-remote-deploy' import { adoptRunningOrcadVersion, type OrcadRunningAdoption -} from './orcad-running-version-adoption' -import { readLocalFullVersion } from '../managed-server/install/remote-versioned-install' -import { sshOrcadHostTransport } from './orcad-ssh-host-transport' -import { ORCAD_ACTIVATION_POLICY_REFUSED_CODE } from './orcad-installed-activation' +} from '../../ssh/orcad-running-version-adoption' +import { readLocalFullVersion } from '../install/remote-versioned-install' +import { sshOrcadHostTransport } from '../../ssh/orcad-ssh-host-transport' +import { ORCAD_ACTIVATION_POLICY_REFUSED_CODE } from '../../ssh/orcad-installed-activation' import { pruneManagedOrcadVersions } from './orcad-managed-version-gc' -import { tunneledOrcadPairingCode } from './orcad-tunneled-pairing' -import { resolveOrcadMigrationFence } from './orcad-migration-source-fence' -import type { SshTarget } from '../../shared/ssh-types' +import { tunneledOrcadPairingCode } from '../../ssh/orcad-tunneled-pairing' +import { resolveOrcadMigrationFence } from '../../ssh/orcad-migration-source-fence' +import type { SshTarget } from '../../../shared/ssh-types' import { deployedOrcadTunnelChecks } from './orcad-managed-tunnel-identity' import { isForceableOrcadDeferral, diff --git a/src/main/ssh/orcad-runtime-forget.test.ts b/src/main/managed-server/lifecycle/orcad-runtime-forget.test.ts similarity index 88% rename from src/main/ssh/orcad-runtime-forget.test.ts rename to src/main/managed-server/lifecycle/orcad-runtime-forget.test.ts index e55a9ef9a34..09cddd448d0 100644 --- a/src/main/ssh/orcad-runtime-forget.test.ts +++ b/src/main/managed-server/lifecycle/orcad-runtime-forget.test.ts @@ -1,14 +1,14 @@ import { rmSync } from 'node:fs' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { getManagedOrcadFenceEnvironmentId } from '../../shared/managed-orcad-ssh-owner' -import { listEnvironments } from '../../shared/runtime-environment-store' +import { getManagedOrcadFenceEnvironmentId } from '../../../shared/managed-orcad-ssh-owner' +import { listEnvironments } from '../../../shared/runtime-environment-store' import { listOrcadMigrationSourceCutovers, writeOrcadMigrationSourceCutover -} from './orcad-migration-cutover-journal' -import { orcadMigrationCutoverFixture } from './orcad-migration-cutover-fixture' +} from '../../ssh/orcad-migration-cutover-journal' +import { orcadMigrationCutoverFixture } from '../../ssh/orcad-migration-cutover-fixture' import { createManagedLifecycleHarness } from './orcad-managed-lifecycle-test-fixture' -import { isManagedOrcadSshTarget } from './ssh-connection-store' +import { isManagedOrcadSshTarget } from '../../ssh/ssh-connection-store' const mocks = vi.hoisted(() => { const state: { store: unknown } = { store: null } @@ -21,11 +21,11 @@ const mocks = vi.hoisted(() => { } }) -vi.mock('./ssh-target-registry', () => ({ +vi.mock('../../ssh/ssh-target-registry', () => ({ getSshConnectionManager: () => ({ connect: mocks.connect }), getSshTargetRegistryStore: () => mocks.state.store })) -vi.mock('../managed-server/install/orcad-remote-context', () => ({ +vi.mock('../install/orcad-remote-context', () => ({ resolveOrcadRemoteContext: mocks.resolveContext })) vi.mock('./orcad-managed-tunnel', () => ({ diff --git a/src/main/ssh/orcad-runtime-status.ts b/src/main/managed-server/lifecycle/orcad-runtime-status.ts similarity index 85% rename from src/main/ssh/orcad-runtime-status.ts rename to src/main/managed-server/lifecycle/orcad-runtime-status.ts index 49c3391d86c..bf591d7fbad 100644 --- a/src/main/ssh/orcad-runtime-status.ts +++ b/src/main/managed-server/lifecycle/orcad-runtime-status.ts @@ -1,14 +1,14 @@ -import type { OrcadManagedRuntimeStatus } from '../../shared/orcad-managed-runtime' -import { runTargetLifecycle } from '../ipc/ssh-target-lifecycle-queue' -import type { OrcadActivationTransaction } from '../managed-server/activation/orcad-activation-transaction' -import { readOrcadActivationTransaction } from '../managed-server/activation/orcad-activation-transaction-store' +import type { OrcadManagedRuntimeStatus } from '../../../shared/orcad-managed-runtime' +import { runTargetLifecycle } from '../../ipc/ssh-target-lifecycle-queue' +import type { OrcadActivationTransaction } from '../activation/orcad-activation-transaction' +import { readOrcadActivationTransaction } from '../activation/orcad-activation-transaction-store' import { requireManagedOrcadEnvironment, resolveLinkedOrcadContext } from './orcad-managed-runtime-context' import { currentManagedOrcadUpdateDeferral } from './orcad-managed-update-deferrals' import { findIncompleteManagedOrcadMigration } from './orcad-managed-migration-status' -import { collectManagedTerminalCensus } from './orcad-terminal-census-client' +import { collectManagedTerminalCensus } from '../../ssh/orcad-terminal-census-client' /** Read-only: what the host's activation record and journal say, without repairing either. */ export async function getManagedOrcadRuntimeStatus( diff --git a/src/main/ssh/orcad-runtime-target.test.ts b/src/main/managed-server/lifecycle/orcad-runtime-target.test.ts similarity index 84% rename from src/main/ssh/orcad-runtime-target.test.ts rename to src/main/managed-server/lifecycle/orcad-runtime-target.test.ts index f2353532860..e95579e78e8 100644 --- a/src/main/ssh/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 './remote-exec-command' +import type * as ExecCommandModule from '../../ssh/remote-exec-command' import { beforeEach, describe, expect, it, vi } from 'vitest' import { resolveOrcadRuntimeTarget } from './orcad-runtime-target' -import { SshConnection } from './ssh-connection' -import { createCallbacks, createTarget } from './ssh-connection-test-fixtures' -import { execCommand } from './remote-exec-command' -import { getRemoteHostPlatform } from './ssh-remote-platform' +import { SshConnection } from '../../ssh/ssh-connection' +import { createCallbacks, createTarget } from '../../ssh/ssh-connection-test-fixtures' +import { execCommand } from '../../ssh/remote-exec-command' +import { getRemoteHostPlatform } from '../../ssh/ssh-remote-platform' -vi.mock('./remote-exec-command', async (importOriginal) => ({ +vi.mock('../../ssh/remote-exec-command', async (importOriginal) => ({ ...(await importOriginal()), execCommand: vi.fn() })) diff --git a/src/main/ssh/orcad-runtime-target.ts b/src/main/managed-server/lifecycle/orcad-runtime-target.ts similarity index 61% rename from src/main/ssh/orcad-runtime-target.ts rename to src/main/managed-server/lifecycle/orcad-runtime-target.ts index 4c29f94c06d..371a0c31903 100644 --- a/src/main/ssh/orcad-runtime-target.ts +++ b/src/main/managed-server/lifecycle/orcad-runtime-target.ts @@ -1,9 +1,9 @@ -import type { NodeRuntimeTarget } from '../../shared/node-runtime-pin' -import { resolveOrcadDeploymentTargetFacts } from './orcad-deployment-target' -import { OrcadHostUnsupportedError } from '../orcad/orcad-host-unavailable' -import type { OrcadHostTransport } from './orcad-host-transport' -import { pinnedRuntimeTargetForHost } from './pinned-runtime-host-target' -import type { RemoteHostPlatform } from './ssh-remote-platform' +import type { NodeRuntimeTarget } from '../../../shared/node-runtime-pin' +import { resolveOrcadDeploymentTargetFacts } from '../../ssh/orcad-deployment-target' +import { OrcadHostUnsupportedError } from '../../orcad/orcad-host-unavailable' +import type { OrcadHostTransport } from '../../ssh/orcad-host-transport' +import { pinnedRuntimeTargetForHost } from '../../ssh/pinned-runtime-host-target' +import type { RemoteHostPlatform } from '../../ssh/ssh-remote-platform' /** * The runtime target managed orcad deploys on a host, picked by glibc: the host's own target, or diff --git a/src/main/ssh/orcad-stdio-bridge-listener.ts b/src/main/managed-server/lifecycle/orcad-stdio-bridge-listener.ts similarity index 95% rename from src/main/ssh/orcad-stdio-bridge-listener.ts rename to src/main/managed-server/lifecycle/orcad-stdio-bridge-listener.ts index cdc9802064a..650c7d95d71 100644 --- a/src/main/ssh/orcad-stdio-bridge-listener.ts +++ b/src/main/managed-server/lifecycle/orcad-stdio-bridge-listener.ts @@ -10,12 +10,12 @@ import { OrcadStdioBridgeDecoder, type OrcadStdioBridgeSignal } from './orcad-stdio-bridge-stream' -import type { RemoteCommandChannel } from '../managed-server/install/remote-install-transport' +import type { RemoteCommandChannel } from '../install/remote-install-transport' import type { PortForwardStartOptions, StartedPortForward -} from './port-forwarding/ssh-port-forward-provider' -import { listenForPortForward } from './port-forwarding/ssh2-port-forward-provider' +} from '../../ssh/port-forwarding/ssh-port-forward-provider' +import { listenForPortForward } from '../../ssh/port-forwarding/ssh2-port-forward-provider' /** * Each bridge is one sshd session, and OpenSSH's MaxSessions defaults to 10 per connection. The diff --git a/src/main/ssh/orcad-stdio-bridge-provider.test.ts b/src/main/managed-server/lifecycle/orcad-stdio-bridge-provider.test.ts similarity index 94% rename from src/main/ssh/orcad-stdio-bridge-provider.test.ts rename to src/main/managed-server/lifecycle/orcad-stdio-bridge-provider.test.ts index d43b2ecec8f..bc3e1bd2b9b 100644 --- a/src/main/ssh/orcad-stdio-bridge-provider.test.ts +++ b/src/main/managed-server/lifecycle/orcad-stdio-bridge-provider.test.ts @@ -4,15 +4,15 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { PassThrough } from 'node:stream' import { afterAll, afterEach, beforeAll, describe, expect, it, vi } from 'vitest' -import { OrcadStdioBridgeUnavailableError } from '../orcad/orcad-host-unavailable' -import type { OrcadStdioBridge } from './orcad-stdio-bridge' +import { OrcadStdioBridgeUnavailableError } from '../../orcad/orcad-host-unavailable' +import type { OrcadStdioBridge } from '../../ssh/orcad-stdio-bridge' import { ORCAD_STDIO_BRIDGE_MAX_CHANNELS } from './orcad-stdio-bridge-listener' import { OrcadStdioBridgePortForwardProvider } from './orcad-stdio-bridge-provider' import { spawnLocalBridgeChannel, startEchoServer } from './orcad-stdio-bridge-test-channel' -import { ORCAD_WINDOWS_HOST_SCRIPT } from './orcad-windows-host-script' -import type { SshConnection } from './ssh-connection' -import type { StartedPortForward } from './port-forwarding/ssh-port-forward-provider' -import type { RemoteCommandChannel } from '../managed-server/install/remote-install-transport' +import { ORCAD_WINDOWS_HOST_SCRIPT } from '../../ssh/orcad-windows-host-script' +import type { SshConnection } from '../../ssh/ssh-connection' +import type { StartedPortForward } from '../../ssh/port-forwarding/ssh-port-forward-provider' +import type { RemoteCommandChannel } from '../install/remote-install-transport' let echo: { server: Server; port: number } let script: string diff --git a/src/main/ssh/orcad-stdio-bridge-provider.ts b/src/main/managed-server/lifecycle/orcad-stdio-bridge-provider.ts similarity index 86% rename from src/main/ssh/orcad-stdio-bridge-provider.ts rename to src/main/managed-server/lifecycle/orcad-stdio-bridge-provider.ts index 84b54fae18f..080823307a8 100644 --- a/src/main/ssh/orcad-stdio-bridge-provider.ts +++ b/src/main/managed-server/lifecycle/orcad-stdio-bridge-provider.ts @@ -6,23 +6,23 @@ * Disconnects match the forward: a lost channel drops its socket and the listener stays, so the * tunnel's own reconnect logic decides, and a lost transport never reads as a dead server. */ -import { OrcadStdioBridgeUnavailableError } from '../orcad/orcad-host-unavailable' -import type { OrcadHostTransport } from './orcad-host-transport' +import { OrcadStdioBridgeUnavailableError } from '../../orcad/orcad-host-unavailable' +import type { OrcadHostTransport } from '../../ssh/orcad-host-transport' import { checkOrcadStdioBridge, openOrcadStdioBridgeChannel, resolveOrcadStdioBridge, type OrcadStdioBridge -} from './orcad-stdio-bridge' +} from '../../ssh/orcad-stdio-bridge' import { listenOrcadStdioBridge } from './orcad-stdio-bridge-listener' -import { sshOrcadHostTransport } from './orcad-ssh-host-transport' -import type { RemoteCommandChannel } from '../managed-server/install/remote-install-transport' -import type { SshConnection } from './ssh-connection' +import { sshOrcadHostTransport } from '../../ssh/orcad-ssh-host-transport' +import type { RemoteCommandChannel } from '../install/remote-install-transport' +import type { SshConnection } from '../../ssh/ssh-connection' import type { PortForwardStartOptions, SshPortForwardProvider, StartedPortForward -} from './port-forwarding/ssh-port-forward-provider' +} from '../../ssh/port-forwarding/ssh-port-forward-provider' export type OrcadStdioBridgeDependencies = { resolveBridge: (conn: OrcadHostTransport, port: number) => Promise diff --git a/src/main/ssh/orcad-stdio-bridge-script.ts b/src/main/managed-server/lifecycle/orcad-stdio-bridge-script.ts similarity index 94% rename from src/main/ssh/orcad-stdio-bridge-script.ts rename to src/main/managed-server/lifecycle/orcad-stdio-bridge-script.ts index 42138b5d1a2..3e56de8339c 100644 --- a/src/main/ssh/orcad-stdio-bridge-script.ts +++ b/src/main/managed-server/lifecycle/orcad-stdio-bridge-script.ts @@ -12,10 +12,10 @@ import { ORCAD_NODE_RUNTIME_DIR_PREFIX, ORCAD_NODE_RUNTIME_POSIX_EXECUTABLE, ORCAD_RUNTIMES_DIRNAME -} from '../../shared/orcad-artifacts' -import { shellEscape } from './ssh-connection-utils' -import { RELAY_REMOTE_DIR } from './remote-frame-protocol' -import { ORCAD_MACHINE_HOMES_DIRNAME } from './orcad-machine-home' +} from '../../../shared/orcad-artifacts' +import { shellEscape } from '../../ssh/ssh-connection-utils' +import { RELAY_REMOTE_DIR } from '../../ssh/remote-frame-protocol' +import { ORCAD_MACHINE_HOMES_DIRNAME } from '../../ssh/orcad-machine-home' export type OrcadStdioBridgeMode = 'raw' | 'base64' diff --git a/src/main/ssh/orcad-stdio-bridge-stream.ts b/src/main/managed-server/lifecycle/orcad-stdio-bridge-stream.ts similarity index 100% rename from src/main/ssh/orcad-stdio-bridge-stream.ts rename to src/main/managed-server/lifecycle/orcad-stdio-bridge-stream.ts diff --git a/src/main/ssh/orcad-stdio-bridge-test-channel.ts b/src/main/managed-server/lifecycle/orcad-stdio-bridge-test-channel.ts similarity index 95% rename from src/main/ssh/orcad-stdio-bridge-test-channel.ts rename to src/main/managed-server/lifecycle/orcad-stdio-bridge-test-channel.ts index 6bb11977e54..463b5931547 100644 --- a/src/main/ssh/orcad-stdio-bridge-test-channel.ts +++ b/src/main/managed-server/lifecycle/orcad-stdio-bridge-test-channel.ts @@ -2,7 +2,7 @@ import { createServer, type Server } from 'node:net' import { Duplex } from 'node:stream' import { spawnProcess } from '@orca/process-host' -import type { RemoteCommandChannel } from '../managed-server/install/remote-install-transport' +import type { RemoteCommandChannel } from '../install/remote-install-transport' export function spawnLocalBridgeChannel( program: string, diff --git a/src/main/ssh/hostile-host-test-support/ssh-hostile-host-managed-orcad.ts b/src/main/ssh/hostile-host-test-support/ssh-hostile-host-managed-orcad.ts index 13ad40ef76f..70e071e8723 100644 --- a/src/main/ssh/hostile-host-test-support/ssh-hostile-host-managed-orcad.ts +++ b/src/main/ssh/hostile-host-test-support/ssh-hostile-host-managed-orcad.ts @@ -11,7 +11,7 @@ import { ORCAD_RUNTIMES_DIRNAME } from '../../../shared/orcad-artifacts' import type { SshTarget } from '../../../shared/ssh-types' import { readOrcadActivationRecord } from '../../managed-server/activation/orcad-activation-record-store' import { classifyOrcadHostUnavailable } from '../../orcad/orcad-host-unavailable' -import { managedOrcadSlot } from '../orcad-managed-runtime-context' +import { managedOrcadSlot } from '../../managed-server/lifecycle/orcad-managed-runtime-context' import { orcadSlotDir, type OrcadSlotOptions } from '../orcad-recovery-slot' import { resolveOrcadRemoteContext } from '../../managed-server/install/orcad-remote-context' import { deployOrcad } from '../orcad-remote-deploy' diff --git a/src/main/ssh/legacy-relay/ssh-host-relay-census-for-target.test.ts b/src/main/ssh/legacy-relay/ssh-host-relay-census-for-target.test.ts index 1a2af733778..c870871dba6 100644 --- a/src/main/ssh/legacy-relay/ssh-host-relay-census-for-target.test.ts +++ b/src/main/ssh/legacy-relay/ssh-host-relay-census-for-target.test.ts @@ -8,7 +8,7 @@ const mocks = vi.hoisted(() => ({ disconnectConnection: vi.fn(async () => undefined), census: vi.fn() })) -vi.mock('../orcad-managed-runtime-context', () => ({ +vi.mock('../../managed-server/lifecycle/orcad-managed-runtime-context', () => ({ requireManagedOrcadInfrastructure: () => ({ connectionManager: { connect: mocks.connect, diff --git a/src/main/ssh/legacy-relay/ssh-host-relay-census-for-target.ts b/src/main/ssh/legacy-relay/ssh-host-relay-census-for-target.ts index d16f425b783..3abea9e9025 100644 --- a/src/main/ssh/legacy-relay/ssh-host-relay-census-for-target.ts +++ b/src/main/ssh/legacy-relay/ssh-host-relay-census-for-target.ts @@ -1,6 +1,6 @@ import type { SshTarget } from '../../../shared/ssh-types' import type { CensusHostRelayTerminals } from '../orcad-migration-terminal-gate' -import { requireManagedOrcadInfrastructure } from '../orcad-managed-runtime-context' +import { requireManagedOrcadInfrastructure } from '../../managed-server/lifecycle/orcad-managed-runtime-context' import { beginSshHostCensus, currentSshOwner, diff --git a/src/main/ssh/managed-server-fence-recheck.test.ts b/src/main/ssh/managed-server-fence-recheck.test.ts index 2bd925dcfad..2a2d017140c 100644 --- a/src/main/ssh/managed-server-fence-recheck.test.ts +++ b/src/main/ssh/managed-server-fence-recheck.test.ts @@ -5,7 +5,7 @@ import { recheckFencedManagedServer, scheduleManagedServerFenceRecheck } from './managed-server-fence-recheck' -import { MANAGED_ORCAD_FENCED_DETAIL } from './orcad-managed-serving' +import { MANAGED_ORCAD_FENCED_DETAIL } from '../managed-server/lifecycle/orcad-managed-serving' const TARGET: SshTarget = { id: 'box', label: 'Box', host: 'box', port: 22, username: 'me' } diff --git a/src/main/ssh/managed-server-serving-gate.ts b/src/main/ssh/managed-server-serving-gate.ts index 7e07f48cf02..b65d280cf10 100644 --- a/src/main/ssh/managed-server-serving-gate.ts +++ b/src/main/ssh/managed-server-serving-gate.ts @@ -4,7 +4,7 @@ import { MANAGED_ORCAD_FENCED_DETAIL, MANAGED_ORCAD_NOT_ACTIVATED_DETAIL, type OrcadManagedServing -} from './orcad-managed-serving' +} from '../managed-server/lifecycle/orcad-managed-serving' import type { HostServerOnConnectResult } from './ssh-host-server-on-connect' type ManagedRoute = Extract diff --git a/src/main/ssh/managed-server-update-check.test.ts b/src/main/ssh/managed-server-update-check.test.ts index e5345b04a49..785dc64656b 100644 --- a/src/main/ssh/managed-server-update-check.test.ts +++ b/src/main/ssh/managed-server-update-check.test.ts @@ -4,7 +4,7 @@ import { checkManagedServerUpdate, type ManagedServerUpdateDeps } from './managed-server-update-check' -import type { ManagedOrcadAutoUpdateOutcome } from './orcad-managed-auto-update' +import type { ManagedOrcadAutoUpdateOutcome } from '../managed-server/lifecycle/orcad-managed-auto-update' import { ORCAD_ACTIVATION_FENCE_BUSY_CODE } from '../managed-server/activation/orcad-activation-fence-hold' // The retry decision is read under the host's lifecycle lock, so the stub's last call answers it. diff --git a/src/main/ssh/managed-server-update-check.ts b/src/main/ssh/managed-server-update-check.ts index 7ce58599464..a3088fba2ee 100644 --- a/src/main/ssh/managed-server-update-check.ts +++ b/src/main/ssh/managed-server-update-check.ts @@ -3,7 +3,7 @@ * into its status note and telemetry reason. */ import type { SshManagedServerUpdateNote, SshTarget } from '../../shared/ssh-types' -import type { ManagedOrcadAutoUpdateOutcome } from './orcad-managed-auto-update' +import type { ManagedOrcadAutoUpdateOutcome } from '../managed-server/lifecycle/orcad-managed-auto-update' import type { HostServerUpdateReason } from './ssh-host-server-connect-events' import { ORCAD_ACTIVATION_FENCE_BUSY_CODE } from '../managed-server/activation/orcad-activation-fence-hold' diff --git a/src/main/ssh/managed-server-update-deps.test.ts b/src/main/ssh/managed-server-update-deps.test.ts index fa2f2b82675..f8b89d4da90 100644 --- a/src/main/ssh/managed-server-update-deps.test.ts +++ b/src/main/ssh/managed-server-update-deps.test.ts @@ -5,7 +5,7 @@ import { managedServerUpdateDeps } from './managed-server-update-deps' vi.mock('../../shared/app-environment', () => ({ getAppEnvironment: () => ({ getVersion: () => '1.4.300' }) })) -vi.mock('./orcad-managed-runtime-context', () => ({ +vi.mock('../managed-server/lifecycle/orcad-managed-runtime-context', () => ({ requireManagedOrcadTargetStore: () => ({ updateTarget: vi.fn() }) })) diff --git a/src/main/ssh/managed-server-update-deps.ts b/src/main/ssh/managed-server-update-deps.ts index 6e6f51993d4..d37c2cf60f4 100644 --- a/src/main/ssh/managed-server-update-deps.ts +++ b/src/main/ssh/managed-server-update-deps.ts @@ -1,8 +1,8 @@ /** The live update-check collaborators, shared by the connect decision and the tunnel restore. */ import { getAppEnvironment } from '../../shared/app-environment' import type { ManagedServerUpdateDeps } from './managed-server-update-check' -import { autoUpdateManagedOrcadEnvironment } from './orcad-managed-auto-update' -import { requireManagedOrcadTargetStore } from './orcad-managed-runtime-context' +import { autoUpdateManagedOrcadEnvironment } from '../managed-server/lifecycle/orcad-managed-auto-update' +import { requireManagedOrcadTargetStore } from '../managed-server/lifecycle/orcad-managed-runtime-context' // Hosts whose update failed this launch. Session-only: SshTarget is published to peers. const failedThisLaunch = new Set() diff --git a/src/main/ssh/orcad-already-active-wake.ts b/src/main/ssh/orcad-already-active-wake.ts index e277f3d2c92..4b6f63cc77c 100644 --- a/src/main/ssh/orcad-already-active-wake.ts +++ b/src/main/ssh/orcad-already-active-wake.ts @@ -1,4 +1,4 @@ -import { wakeStoppedManagedOrcad } from './orcad-managed-wake' +import { wakeStoppedManagedOrcad } from '../managed-server/lifecycle/orcad-managed-wake' import type { OrcadSlotOptions } from './orcad-recovery-slot' /** diff --git a/src/main/ssh/orcad-conversion-abandon.ts b/src/main/ssh/orcad-conversion-abandon.ts index f7d64d0ede6..86eb4d1382a 100644 --- a/src/main/ssh/orcad-conversion-abandon.ts +++ b/src/main/ssh/orcad-conversion-abandon.ts @@ -6,7 +6,7 @@ import { removeManagedOrcadEnvironment } from '../../shared/runtime-environment-managed-orcad-store' import { listEnvironments } from '../../shared/runtime-environment-store' import type { KnownRuntimeEnvironment } from '../../shared/runtime-environments' -import { closeOrcadManagedTunnel } from './orcad-managed-tunnel' +import { closeOrcadManagedTunnel } from '../managed-server/lifecycle/orcad-managed-tunnel' import { abortOrcadMigrationCutover, type OrcadMigrationAbortResult, diff --git a/src/main/ssh/orcad-migration-delta-move.test.ts b/src/main/ssh/orcad-migration-delta-move.test.ts index 763b9b1edfd..6267e861def 100644 --- a/src/main/ssh/orcad-migration-delta-move.test.ts +++ b/src/main/ssh/orcad-migration-delta-move.test.ts @@ -38,10 +38,15 @@ vi.mock('./ssh-target-registry', () => ({ getSshConnectionManager: () => ({}), getSshTargetRegistryStore: () => mocks.state.targetStore })) -vi.mock('./orcad-runtime-deployment', () => ({ createManagedOrcadEnvironment: mocks.deploy })) -vi.mock('./orcad-managed-tunnel', () => ({ ensureOrcadManagedTunnel: mocks.ensureTunnel })) +vi.mock('../managed-server/lifecycle/orcad-runtime-deployment', () => ({ + createManagedOrcadEnvironment: mocks.deploy +})) +vi.mock('../managed-server/lifecycle/orcad-managed-tunnel', () => ({ + ensureOrcadManagedTunnel: mocks.ensureTunnel +})) -const { convertSshTargetToManagedOrcad } = await import('./orcad-runtime-conversion') +const { convertSshTargetToManagedOrcad } = + await import('../managed-server/lifecycle/orcad-runtime-conversion') const TARGET: SshTarget = { id: 'ssh-prod', diff --git a/src/main/ssh/orcad-migration-delta-snapshot.test.ts b/src/main/ssh/orcad-migration-delta-snapshot.test.ts index ef2a2224d98..3b74bdcd0b4 100644 --- a/src/main/ssh/orcad-migration-delta-snapshot.test.ts +++ b/src/main/ssh/orcad-migration-delta-snapshot.test.ts @@ -26,10 +26,15 @@ vi.mock('./ssh-target-registry', () => ({ getSshConnectionManager: () => ({}), getSshTargetRegistryStore: () => mocks.state.targetStore })) -vi.mock('./orcad-runtime-deployment', () => ({ createManagedOrcadEnvironment: mocks.deploy })) -vi.mock('./orcad-managed-tunnel', () => ({ ensureOrcadManagedTunnel: mocks.ensureTunnel })) +vi.mock('../managed-server/lifecycle/orcad-runtime-deployment', () => ({ + createManagedOrcadEnvironment: mocks.deploy +})) +vi.mock('../managed-server/lifecycle/orcad-managed-tunnel', () => ({ + ensureOrcadManagedTunnel: mocks.ensureTunnel +})) -const { convertSshTargetToManagedOrcad } = await import('./orcad-runtime-conversion') +const { convertSshTargetToManagedOrcad } = + await import('../managed-server/lifecycle/orcad-runtime-conversion') const TARGET: SshTarget = { id: 'ssh-prod', diff --git a/src/main/ssh/orcad-migration-repository-link.test.ts b/src/main/ssh/orcad-migration-repository-link.test.ts index 02dc339417e..a4f1a7cbeb9 100644 --- a/src/main/ssh/orcad-migration-repository-link.test.ts +++ b/src/main/ssh/orcad-migration-repository-link.test.ts @@ -40,13 +40,16 @@ vi.mock('./ssh-target-registry', () => ({ getSshConnectionManager: () => ({}), getSshTargetRegistryStore: () => mocks.state.targetStore })) -vi.mock('./orcad-runtime-deployment', () => ({ createManagedOrcadEnvironment: mocks.deploy })) -vi.mock('./orcad-managed-tunnel', () => ({ +vi.mock('../managed-server/lifecycle/orcad-runtime-deployment', () => ({ + createManagedOrcadEnvironment: mocks.deploy +})) +vi.mock('../managed-server/lifecycle/orcad-managed-tunnel', () => ({ ensureOrcadManagedTunnel: mocks.ensureTunnel, closeOrcadManagedTunnel: async () => {} })) -const { convertSshTargetToManagedOrcad } = await import('./orcad-runtime-conversion') +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') diff --git a/src/main/ssh/orcad-migration-source-retention.test.ts b/src/main/ssh/orcad-migration-source-retention.test.ts index e520123fe4c..3c31b2f722c 100644 --- a/src/main/ssh/orcad-migration-source-retention.test.ts +++ b/src/main/ssh/orcad-migration-source-retention.test.ts @@ -8,7 +8,7 @@ import { writeOrcadMigrationSourceCutover } from './orcad-migration-cutover-journal' import { orcadMigrationCutoverFixture } from './orcad-migration-cutover-fixture' -import { listPendingManagedOrcadMigrations } from './orcad-managed-migration-status' +import { listPendingManagedOrcadMigrations } from '../managed-server/lifecycle/orcad-managed-migration-status' import { retainOrcadMigrationSource } from './orcad-migration-source-retention' let userDataPath: string diff --git a/src/main/ssh/orcad-remote-deploy.ts b/src/main/ssh/orcad-remote-deploy.ts index 992aa927cf4..0079c237bd6 100644 --- a/src/main/ssh/orcad-remote-deploy.ts +++ b/src/main/ssh/orcad-remote-deploy.ts @@ -25,7 +25,7 @@ import type { NodeRuntimeTarget } from '../../shared/node-runtime-pin' import { ORCAD_STARTUP_READINESS_TIMEOUT_MS } from '../../shared/orcad-profile-preflight' import { materializeOrcadArtifact } from '../orcad/orcad-artifact-materializer' import { readOrcadBundleTarget } from './orcad-deployment-target' -import { resolveOrcadRuntimeTarget } from './orcad-runtime-target' +import { resolveOrcadRuntimeTarget } from '../managed-server/lifecycle/orcad-runtime-target' import { materializeNodeRuntimeArchive } from '../node-runtime/pinned-runtime-materializer' import { orcadActivationFenceExists, diff --git a/src/main/ssh/orcad-running-version-adoption.test.ts b/src/main/ssh/orcad-running-version-adoption.test.ts index 3d77894c647..eb54af78a1f 100644 --- a/src/main/ssh/orcad-running-version-adoption.test.ts +++ b/src/main/ssh/orcad-running-version-adoption.test.ts @@ -15,7 +15,9 @@ vi.mock('../managed-server/activation/orcad-activation-fence-hold', () => ({ orcadActivationFenceRefusal: mocks.fenceRefusal })) -vi.mock('./orcad-managed-wake', () => ({ wakeStoppedManagedOrcad: mocks.wake })) +vi.mock('../managed-server/lifecycle/orcad-managed-wake', () => ({ + wakeStoppedManagedOrcad: mocks.wake +})) vi.mock('../managed-server/activation/orcad-activation-record-store', () => ({ readOrcadActivationRecord: mocks.readRecord })) diff --git a/src/main/ssh/orcad-running-version-adoption.ts b/src/main/ssh/orcad-running-version-adoption.ts index 57052fc12e8..fc15252ad8d 100644 --- a/src/main/ssh/orcad-running-version-adoption.ts +++ b/src/main/ssh/orcad-running-version-adoption.ts @@ -9,7 +9,7 @@ import { orcadActivationFenceRefusal } from '../managed-server/activation/orcad- import { OrcadActiveReadinessError, probeActiveOrcadReadiness } from './orcad-active-readiness' import type { OrcadActivationRecord } from '../managed-server/activation/orcad-activation-record' import { readOrcadActivationRecord } from '../managed-server/activation/orcad-activation-record-store' -import { wakeStoppedManagedOrcad } from './orcad-managed-wake' +import { wakeStoppedManagedOrcad } from '../managed-server/lifecycle/orcad-managed-wake' import { resolveOrcadSlotIdentity, type OrcadSlotOptions } from './orcad-recovery-slot' export type OrcadRunningAdoption = { diff --git a/src/main/ssh/orcad-runtime-maintenance.test.ts b/src/main/ssh/orcad-runtime-maintenance.test.ts index d2da07df958..a0cba5e8fb0 100644 --- a/src/main/ssh/orcad-runtime-maintenance.test.ts +++ b/src/main/ssh/orcad-runtime-maintenance.test.ts @@ -9,7 +9,7 @@ import { MANAGED_PREVIOUS_VERSION, MANAGED_VERSION, managedReadiness -} from './orcad-managed-lifecycle-test-fixture' +} from '../managed-server/lifecycle/orcad-managed-lifecycle-test-fixture' const mocks = vi.hoisted(() => { const state: { store: unknown } = { store: null } @@ -52,19 +52,22 @@ vi.mock('../orcad/orcad-artifact-materializer', () => ({ materializeOrcadArtifact: async () => '/local/orcad' })) vi.mock('./orcad-local-build-hash', () => ({ computeLocalOrcadBuildHash: () => 'local-hash' })) -vi.mock('./orcad-managed-tunnel', () => ({ +vi.mock('../managed-server/lifecycle/orcad-managed-tunnel', () => ({ ensureOrcadManagedTunnel: mocks.ensureTunnel, rebuildOrcadManagedTunnel: mocks.rebuildTunnel })) -vi.mock('./orcad-managed-wake', () => ({ wakeStoppedManagedOrcad: mocks.wake })) -vi.mock('./orcad-managed-migration-status', () => ({ +vi.mock('../managed-server/lifecycle/orcad-managed-wake', () => ({ + wakeStoppedManagedOrcad: mocks.wake +})) +vi.mock('../managed-server/lifecycle/orcad-managed-migration-status', () => ({ findIncompleteManagedOrcadMigration: mocks.pendingMigration })) vi.mock('../managed-server/activation/orcad-activation-transaction-store', () => ({ readOrcadActivationTransaction: async () => null })) -const { getManagedOrcadRuntimeStatus } = await import('./orcad-runtime-status') +const { getManagedOrcadRuntimeStatus } = + await import('../managed-server/lifecycle/orcad-runtime-status') const { recoverManagedOrcadEnvironment, rollbackManagedOrcadEnvironment, diff --git a/src/main/ssh/orcad-runtime-maintenance.ts b/src/main/ssh/orcad-runtime-maintenance.ts index fc785f52300..2748e8ae2b6 100644 --- a/src/main/ssh/orcad-runtime-maintenance.ts +++ b/src/main/ssh/orcad-runtime-maintenance.ts @@ -21,12 +21,15 @@ import { recoverInterruptedOrcadActivation } from '../managed-server/activation/ import { probeActiveOrcadReadiness } from './orcad-active-readiness' import { materializeOrcadArtifact } from '../orcad/orcad-artifact-materializer' import { CURRENT_ORCAD_DAEMON_PROTOCOL } from './orcad-daemon-protocol-crossing' -import { ensureOrcadManagedTunnel, rebuildOrcadManagedTunnel } from './orcad-managed-tunnel' +import { + ensureOrcadManagedTunnel, + rebuildOrcadManagedTunnel +} from '../managed-server/lifecycle/orcad-managed-tunnel' import { wakeAlreadyActiveOrcad } from './orcad-already-active-wake' import { clearManagedOrcadUpdateDeferral, recordManagedOrcadUpdateDeferral -} from './orcad-managed-update-deferrals' +} from '../managed-server/lifecycle/orcad-managed-update-deferrals' import { isForceableOrcadDeferral, managedOrcadInstallDir, @@ -34,15 +37,15 @@ import { probeManagedOrcadReadiness, requireManagedOrcadEnvironment, resolveLinkedOrcadContext -} from './orcad-managed-runtime-context' +} from '../managed-server/lifecycle/orcad-managed-runtime-context' import type { OrcadRemoteContext } from '../managed-server/install/orcad-remote-context' import { readRemoteOrcadBuildHash } from '../managed-server/install/orcad-remote-build-hash' import { deployOrcad, type OrcadDeployOptions } from './orcad-remote-deploy' import { ORCAD_ACTIVATION_POLICY_REFUSED_CODE } from './orcad-installed-activation' -import { pruneManagedOrcadVersions } from './orcad-managed-version-gc' +import { pruneManagedOrcadVersions } from '../managed-server/lifecycle/orcad-managed-version-gc' import { rollbackOrcad } from '../managed-server/install/orcad-remote-rollback' import { collectManagedTerminalCensus } from './orcad-terminal-census-client' -import { findIncompleteManagedOrcadMigration } from './orcad-managed-migration-status' +import { findIncompleteManagedOrcadMigration } from '../managed-server/lifecycle/orcad-managed-migration-status' import { latestOrcadMigrationInto } from './orcad-migration-rollback-mark' import { tunneledOrcadPairingCode } from './orcad-tunneled-pairing' diff --git a/src/main/ssh/orcad-ssh-provisioning.test.ts b/src/main/ssh/orcad-ssh-provisioning.test.ts index 4640f0b93d5..4f13e5632a9 100644 --- a/src/main/ssh/orcad-ssh-provisioning.test.ts +++ b/src/main/ssh/orcad-ssh-provisioning.test.ts @@ -18,10 +18,12 @@ const mocks = vi.hoisted(() => { } }) -vi.mock('./orcad-managed-runtime-context', () => ({ +vi.mock('../managed-server/lifecycle/orcad-managed-runtime-context', () => ({ requireManagedOrcadTargetStore: () => mocks.targetStore })) -vi.mock('./orcad-runtime-deployment', () => ({ createManagedOrcadEnvironment: mocks.deploy })) +vi.mock('../managed-server/lifecycle/orcad-runtime-deployment', () => ({ + createManagedOrcadEnvironment: mocks.deploy +})) vi.mock('./ssh-provider-authority', () => ({ rotateSshProviderAuthority: mocks.rotate })) vi.mock('../../shared/runtime-environment-store', () => ({ listEnvironments: () => diff --git a/src/main/ssh/orcad-ssh-provisioning.ts b/src/main/ssh/orcad-ssh-provisioning.ts index d4d5641e147..f7f09150a6d 100644 --- a/src/main/ssh/orcad-ssh-provisioning.ts +++ b/src/main/ssh/orcad-ssh-provisioning.ts @@ -11,8 +11,8 @@ import { getOrcadSshDeployment } from '../../shared/runtime-environments' import { normalizeSshConfigAlias } from '../../shared/ssh-config-alias' import { runTargetLifecycle } from '../ipc/ssh-target-lifecycle-queue' import { normalizeSshTarget } from '../persistence/leasing-ssh-ptys/ssh-normalization' -import { requireManagedOrcadTargetStore } from './orcad-managed-runtime-context' -import { createManagedOrcadEnvironment } from './orcad-runtime-deployment' +import { requireManagedOrcadTargetStore } from '../managed-server/lifecycle/orcad-managed-runtime-context' +import { createManagedOrcadEnvironment } from '../managed-server/lifecycle/orcad-runtime-deployment' import { rotateSshProviderAuthority } from './ssh-provider-authority' // Why no port forwards: a managed server is only created on an empty host. diff --git a/src/main/ssh/orcad-stdio-bridge.test.ts b/src/main/ssh/orcad-stdio-bridge.test.ts index da03800137a..15f36022d5d 100644 --- a/src/main/ssh/orcad-stdio-bridge.test.ts +++ b/src/main/ssh/orcad-stdio-bridge.test.ts @@ -10,9 +10,15 @@ import { checkOrcadStdioBridge, type OrcadStdioBridge } from './orcad-stdio-brid import { orcadPosixStdioBridgeCommand, type OrcadStdioBridgeMode -} from './orcad-stdio-bridge-script' -import { OrcadStdioBridgeBase64Encoder, OrcadStdioBridgeDecoder } from './orcad-stdio-bridge-stream' -import { spawnLocalBridgeChannel, startEchoServer } from './orcad-stdio-bridge-test-channel' +} from '../managed-server/lifecycle/orcad-stdio-bridge-script' +import { + OrcadStdioBridgeBase64Encoder, + OrcadStdioBridgeDecoder +} from '../managed-server/lifecycle/orcad-stdio-bridge-stream' +import { + spawnLocalBridgeChannel, + startEchoServer +} from '../managed-server/lifecycle/orcad-stdio-bridge-test-channel' import { ORCAD_WINDOWS_HOST_SCRIPT } from './orcad-windows-host-script' import type { OrcadHostTransport } from './orcad-host-transport' import type { RemoteCommandChannel } from '../managed-server/install/remote-install-transport' diff --git a/src/main/ssh/orcad-stdio-bridge.ts b/src/main/ssh/orcad-stdio-bridge.ts index f59b4b6c17f..6586c451153 100644 --- a/src/main/ssh/orcad-stdio-bridge.ts +++ b/src/main/ssh/orcad-stdio-bridge.ts @@ -8,8 +8,11 @@ import { orcadWindowsHomeOpCommand } from '../managed-server/install/orcad-remot import { orcadPosixStdioBridgeCommand, type OrcadStdioBridgeMode -} from './orcad-stdio-bridge-script' -import { OrcadStdioBridgeDecoder, type OrcadStdioBridgeSignal } from './orcad-stdio-bridge-stream' +} from '../managed-server/lifecycle/orcad-stdio-bridge-script' +import { + OrcadStdioBridgeDecoder, + type OrcadStdioBridgeSignal +} from '../managed-server/lifecycle/orcad-stdio-bridge-stream' import { isWslOrcadHostTarget, type OrcadHostTransport } from './orcad-host-transport' import type { RemoteCommandChannel } from '../managed-server/install/remote-install-transport' import { isWindowsRemoteHost } from './ssh-remote-platform' diff --git a/src/main/ssh/orcad-terminal-census-client.test.ts b/src/main/ssh/orcad-terminal-census-client.test.ts index 894f7c17e88..fac9bca19c4 100644 --- a/src/main/ssh/orcad-terminal-census-client.test.ts +++ b/src/main/ssh/orcad-terminal-census-client.test.ts @@ -13,8 +13,12 @@ const mocks = vi.hoisted(() => ({ send: vi.fn(), ensure: vi.fn(), verify: vi.fn( vi.mock('../../shared/remote-runtime-client', () => ({ sendRemoteRuntimeRequestWithStatusPreflight: mocks.send })) -vi.mock('./orcad-managed-tunnel', () => ({ ensureOrcadManagedTunnel: mocks.ensure })) -vi.mock('./orcad-managed-serving-verify', () => ({ verifyOrcadManagedServing: mocks.verify })) +vi.mock('../managed-server/lifecycle/orcad-managed-tunnel', () => ({ + ensureOrcadManagedTunnel: mocks.ensure +})) +vi.mock('../managed-server/lifecycle/orcad-managed-serving-verify', () => ({ + verifyOrcadManagedServing: mocks.verify +})) const { collectManagedTerminalCensus } = await import('./orcad-terminal-census-client') const collect = (record: OrcadActivationRecord) => diff --git a/src/main/ssh/orcad-terminal-census-client.ts b/src/main/ssh/orcad-terminal-census-client.ts index 4a0520df2cf..3ad877ceb3d 100644 --- a/src/main/ssh/orcad-terminal-census-client.ts +++ b/src/main/ssh/orcad-terminal-census-client.ts @@ -16,8 +16,8 @@ import { } from '../../shared/orcad-terminal-census' import { sendRemoteRuntimeRequestWithStatusPreflight } from '../../shared/remote-runtime-client' import type { OrcadActivationRecord } from '../managed-server/activation/orcad-activation-record' -import { ensureOrcadManagedTunnel } from './orcad-managed-tunnel' -import { verifyOrcadManagedServing } from './orcad-managed-serving-verify' +import { ensureOrcadManagedTunnel } from '../managed-server/lifecycle/orcad-managed-tunnel' +import { verifyOrcadManagedServing } from '../managed-server/lifecycle/orcad-managed-serving-verify' const UNVERIFIABLE: OrcadTerminalCensus = { liveSessions: null, diff --git a/src/main/ssh/orcad-unreachable-setup-release.ts b/src/main/ssh/orcad-unreachable-setup-release.ts index c6c96d57cdc..b4d3b9b452c 100644 --- a/src/main/ssh/orcad-unreachable-setup-release.ts +++ b/src/main/ssh/orcad-unreachable-setup-release.ts @@ -9,7 +9,7 @@ import { listEnvironments } from '../../shared/runtime-environment-store' import { removeManagedOrcadEnvironment } from '../../shared/runtime-environment-managed-orcad-store' import { findOrcadMigrationSourceCutoverForTarget } from './orcad-migration-cutover-journal' import { releaseUndeployedMigrationFence } from './orcad-migration-source-fence' -import { closeOrcadManagedTunnel } from './orcad-managed-tunnel' +import { closeOrcadManagedTunnel } from '../managed-server/lifecycle/orcad-managed-tunnel' import type { SshTargetOrcadClaims } from './ssh-target-orcad-claims' import { withOrcadActivationLock } from '../managed-server/activation/orcad-activation-lock' import { withDeactivatedVersionCommitted } from '../managed-server/activation/orcad-activation-record' @@ -17,7 +17,7 @@ import { readOrcadActivationRecord, writeOrcadActivationRecord } from '../managed-server/activation/orcad-activation-record-store' -import { managedOrcadSlot } from './orcad-managed-runtime-context' +import { managedOrcadSlot } from '../managed-server/lifecycle/orcad-managed-runtime-context' import { resolveOrcadRemoteContext } from '../managed-server/install/orcad-remote-context' import { orcadStopFreedTheHost } from '../managed-server/install/orcad-remote-process-control' import { orcadSlotDir, stopOrcadSlot } from './orcad-recovery-slot' diff --git a/src/main/ssh/orcad-unreachable-setup-stop.test.ts b/src/main/ssh/orcad-unreachable-setup-stop.test.ts index 7307e6c2966..ffbe8db0fff 100644 --- a/src/main/ssh/orcad-unreachable-setup-stop.test.ts +++ b/src/main/ssh/orcad-unreachable-setup-stop.test.ts @@ -18,7 +18,9 @@ vi.mock('./orcad-migration-cutover-journal', () => ({ vi.mock('./orcad-migration-source-fence', () => ({ releaseUndeployedMigrationFence: mocks.release })) -vi.mock('./orcad-managed-tunnel', () => ({ closeOrcadManagedTunnel: async () => undefined })) +vi.mock('../managed-server/lifecycle/orcad-managed-tunnel', () => ({ + closeOrcadManagedTunnel: async () => undefined +})) vi.mock('./ssh-target-registry', () => ({ getSshTargetRegistryStore: () => ({ getTarget: () => ({ id: 'ssh-1' }) }), getSshConnectionManager: () => ({ connect: async () => ({}) }) diff --git a/src/main/ssh/orcad-windows-host-script.ts b/src/main/ssh/orcad-windows-host-script.ts index 522d9567617..4a00582bc9a 100644 --- a/src/main/ssh/orcad-windows-host-script.ts +++ b/src/main/ssh/orcad-windows-host-script.ts @@ -25,7 +25,7 @@ import { ORCAD_STOP_REQUEST_FILENAME, ORCAD_STOP_REQUESTS_CAPABILITY } from '../../shared/orcad-stop-request' -import { ORCAD_STDIO_BRIDGE_FUNCTION } from './orcad-stdio-bridge-script' +import { ORCAD_STDIO_BRIDGE_FUNCTION } from '../managed-server/lifecycle/orcad-stdio-bridge-script' import { ORCAD_WINDOWS_FENCE_PRELUDE, ORCAD_WINDOWS_HOST_FENCE_OPS diff --git a/src/main/ssh/orcad-windows-stdio-bridge-test-cell.ts b/src/main/ssh/orcad-windows-stdio-bridge-test-cell.ts index 935c8fe8a3f..2bdab5283db 100644 --- a/src/main/ssh/orcad-windows-stdio-bridge-test-cell.ts +++ b/src/main/ssh/orcad-windows-stdio-bridge-test-cell.ts @@ -3,7 +3,7 @@ * cells' accounts, so the managed tunnel must choose the bridge and reach the live orcad over it. */ import { connect } from 'node:net' -import { OrcadManagedTunnelTransportProvider } from './orcad-managed-tunnel-transport' +import { OrcadManagedTunnelTransportProvider } from '../managed-server/lifecycle/orcad-managed-tunnel-transport' import { parseOrcadReadinessWaitOutput, readOrcadReadinessNowCommand diff --git a/src/main/ssh/runtime-ssh-access.test.ts b/src/main/ssh/runtime-ssh-access.test.ts index 8a13d00565f..30a58279dae 100644 --- a/src/main/ssh/runtime-ssh-access.test.ts +++ b/src/main/ssh/runtime-ssh-access.test.ts @@ -23,10 +23,10 @@ const mocks = vi.hoisted(() => ({ flush: vi.fn(), preflight: vi.fn() })) -vi.mock('./orcad-managed-runtime-context', () => ({ +vi.mock('../managed-server/lifecycle/orcad-managed-runtime-context', () => ({ requireManagedOrcadInfrastructure: mocks.infrastructure })) -vi.mock('./orcad-managed-tunnel', () => ({ +vi.mock('../managed-server/lifecycle/orcad-managed-tunnel', () => ({ startOrcadManagedTunnel: mocks.start, closeOrcadManagedTunnel: mocks.close, ensureOrcadManagedTunnel: mocks.ensure diff --git a/src/main/ssh/runtime-ssh-access.ts b/src/main/ssh/runtime-ssh-access.ts index 9ecd3d7d110..e51133a52de 100644 --- a/src/main/ssh/runtime-ssh-access.ts +++ b/src/main/ssh/runtime-ssh-access.ts @@ -18,12 +18,12 @@ import { import { getManagedOrcadFenceEnvironmentId } from '../../shared/managed-orcad-ssh-owner' import type { SshTarget } from '../../shared/ssh-types' import { runTargetLifecycle } from '../ipc/ssh-target-lifecycle-queue' -import { requireManagedOrcadInfrastructure } from './orcad-managed-runtime-context' +import { requireManagedOrcadInfrastructure } from '../managed-server/lifecycle/orcad-managed-runtime-context' import { closeOrcadManagedTunnel, ensureOrcadManagedTunnel, startOrcadManagedTunnel -} from './orcad-managed-tunnel' +} from '../managed-server/lifecycle/orcad-managed-tunnel' import { verifyRuntimeEnvironmentSshTunnel } from './runtime-ssh-access-verification' type TargetClaims = ReturnType['claims'] diff --git a/src/main/ssh/ssh-host-server-on-connect-stopped-elsewhere.test.ts b/src/main/ssh/ssh-host-server-on-connect-stopped-elsewhere.test.ts index ff82110f725..aa09a59019b 100644 --- a/src/main/ssh/ssh-host-server-on-connect-stopped-elsewhere.test.ts +++ b/src/main/ssh/ssh-host-server-on-connect-stopped-elsewhere.test.ts @@ -6,12 +6,12 @@ import { withDeactivatedVersionCommitted, type OrcadActivationRecord } from '../managed-server/activation/orcad-activation-record' -import { planManagedOrcadAutoUpdate } from './orcad-managed-auto-update' +import { planManagedOrcadAutoUpdate } from '../managed-server/lifecycle/orcad-managed-auto-update' import { compareAppVersions } from '../../shared/app-version' import { MANAGED_ORCAD_FENCED_DETAIL, MANAGED_ORCAD_NOT_ACTIVATED_DETAIL -} from './orcad-managed-serving' +} from '../managed-server/lifecycle/orcad-managed-serving' import { resolveHostServerOnConnect } from './ssh-host-server-on-connect' import { hostServerDepsStub } from './ssh-host-server-on-connect-test-deps' diff --git a/src/main/ssh/ssh-host-server-on-connect-telemetry.test.ts b/src/main/ssh/ssh-host-server-on-connect-telemetry.test.ts index e88f755ff37..1086b93a6ff 100644 --- a/src/main/ssh/ssh-host-server-on-connect-telemetry.test.ts +++ b/src/main/ssh/ssh-host-server-on-connect-telemetry.test.ts @@ -4,7 +4,7 @@ import { OrcadHostUnsupportedError, OrcadStdioBridgeUnavailableError } from '../orcad/orcad-host-unavailable' -import type { ManagedOrcadAutoUpdateOutcome } from './orcad-managed-auto-update' +import type { ManagedOrcadAutoUpdateOutcome } from '../managed-server/lifecycle/orcad-managed-auto-update' import type { HostServerConnectEvent } from './ssh-host-server-connect-events' import { resolveHostServerOnConnect, diff --git a/src/main/ssh/ssh-host-server-on-connect.ts b/src/main/ssh/ssh-host-server-on-connect.ts index f331b6fb62a..a70df78d497 100644 --- a/src/main/ssh/ssh-host-server-on-connect.ts +++ b/src/main/ssh/ssh-host-server-on-connect.ts @@ -20,7 +20,7 @@ import type { SshManagedServerUpdateNote, SshTarget } from '../../shared/ssh-types' -import type { OrcadManagedServing } from './orcad-managed-serving' +import type { OrcadManagedServing } from '../managed-server/lifecycle/orcad-managed-serving' import { checkManagedServerUpdate, type ManagedServerUpdateDeps diff --git a/src/main/wsl/wsl-host-server-stop.ts b/src/main/wsl/wsl-host-server-stop.ts index 8d792a2dffd..513376c5037 100644 --- a/src/main/wsl/wsl-host-server-stop.ts +++ b/src/main/wsl/wsl-host-server-stop.ts @@ -13,8 +13,8 @@ import type { OrcadTerminalCensus } from '../../shared/orcad-terminal-census' import type { RuntimeTerminalListResult } from '../../shared/runtime-terminal-contracts' import type { WslHostServerStop } from '../../shared/wsl-host-types' import type { OrcadHostTransport } from '../ssh/orcad-host-transport' -import { readRemoteOrcadManagedStopTarget } from '../ssh/orcad-managed-remote-stop' -import { managedOrcadSlot } from '../ssh/orcad-managed-runtime-context' +import { readRemoteOrcadManagedStopTarget } from '../managed-server/lifecycle/orcad-managed-remote-stop' +import { managedOrcadSlot } from '../managed-server/lifecycle/orcad-managed-runtime-context' import { resolveOrcadRemoteContext } from '../managed-server/install/orcad-remote-context' import { decommissionRemoteOrcad } from '../managed-server/install/orcad-remote-decommission' import type { WslOrcadHostTarget } from './wsl-orcad-host-target' diff --git a/src/main/wsl/wsl-orcad-bridge-test-child.ts b/src/main/wsl/wsl-orcad-bridge-test-child.ts index 7353eb67c1c..d927afa65a3 100644 --- a/src/main/wsl/wsl-orcad-bridge-test-child.ts +++ b/src/main/wsl/wsl-orcad-bridge-test-child.ts @@ -11,7 +11,7 @@ import { ORCAD_STDIO_BRIDGE_READY, ORCAD_STDIO_BRIDGE_REFUSED, orcadPosixStdioBridgeCommand -} from '../ssh/orcad-stdio-bridge-script' +} from '../managed-server/lifecycle/orcad-stdio-bridge-script' import type { OrcadStdioBridge } from '../ssh/orcad-stdio-bridge' export type FakeWslBridgeChildren = { diff --git a/src/main/wsl/wsl-orcad-connection.test.ts b/src/main/wsl/wsl-orcad-connection.test.ts index 2e8139ec356..2ce335e41fa 100644 --- a/src/main/wsl/wsl-orcad-connection.test.ts +++ b/src/main/wsl/wsl-orcad-connection.test.ts @@ -2,9 +2,9 @@ import { connect, type Server, type Socket } from 'node:net' import { afterAll, afterEach, beforeAll, describe, expect, it, vi } from 'vitest' import { encodePairingOffer, parsePairingCode, PAIRING_OFFER_VERSION } from '../../shared/pairing' import type { ServeReadiness } from '../server/serve-readiness' -import { OrcadManagedIdentityError } from '../ssh/orcad-managed-tunnel-identity' +import { OrcadManagedIdentityError } from '../managed-server/lifecycle/orcad-managed-tunnel-identity' import { checkOrcadStdioBridge, openOrcadStdioBridgeChannel } from '../ssh/orcad-stdio-bridge' -import { startEchoServer } from '../ssh/orcad-stdio-bridge-test-channel' +import { startEchoServer } from '../managed-server/lifecycle/orcad-stdio-bridge-test-channel' import { fakeWslBridgeChildren, posixOrcadStdioBridge } from './wsl-orcad-bridge-test-child' import { WslOrcadConnectionManager, diff --git a/src/main/wsl/wsl-orcad-connection.ts b/src/main/wsl/wsl-orcad-connection.ts index 70c4c912f98..7c6a895ac5a 100644 --- a/src/main/wsl/wsl-orcad-connection.ts +++ b/src/main/wsl/wsl-orcad-connection.ts @@ -10,7 +10,7 @@ import type { OrcadHostTransport } from '../ssh/orcad-host-transport' import { OrcadManagedIdentityError, type OrcadTunnelIdentity -} from '../ssh/orcad-managed-tunnel-identity' +} from '../managed-server/lifecycle/orcad-managed-tunnel-identity' import { tunneledOrcadPairingCode } from '../ssh/orcad-tunneled-pairing' import type { StartedPortForward } from '../ssh/port-forwarding/ssh-port-forward-provider' import type { WslDistroHolder } from './wsl-distro-holder' diff --git a/src/main/wsl/wsl-orcad-deploy.test.ts b/src/main/wsl/wsl-orcad-deploy.test.ts index 7d7b97d9009..45d330ee634 100644 --- a/src/main/wsl/wsl-orcad-deploy.test.ts +++ b/src/main/wsl/wsl-orcad-deploy.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type { OrcadHostTransport } from '../ssh/orcad-host-transport' -import type * as ManagedRuntimeContext from '../ssh/orcad-managed-runtime-context' +import type * as ManagedRuntimeContext from '../managed-server/lifecycle/orcad-managed-runtime-context' import type * as RemoteVersionedInstall from '../managed-server/install/remote-versioned-install' import { emptyOrcadActivationRecord } from '../managed-server/activation/orcad-activation-record' import { getRemoteHostPlatform } from '../ssh/ssh-remote-platform' @@ -44,9 +44,13 @@ vi.mock('../orcad/orcad-artifact-materializer', () => ({ materializeOrcadArtifact: async () => '/local/orcad' })) vi.mock('../ssh/orcad-remote-deploy', () => ({ deployOrcad: mocks.deploy })) -vi.mock('../ssh/orcad-managed-version-gc', () => ({ pruneManagedOrcadVersions: mocks.prune })) -vi.mock('../ssh/orcad-managed-wake', () => ({ wakeStoppedManagedOrcad: mocks.wake })) -vi.mock('../ssh/orcad-managed-runtime-context', async (importOriginal) => ({ +vi.mock('../managed-server/lifecycle/orcad-managed-version-gc', () => ({ + pruneManagedOrcadVersions: mocks.prune +})) +vi.mock('../managed-server/lifecycle/orcad-managed-wake', () => ({ + wakeStoppedManagedOrcad: mocks.wake +})) +vi.mock('../managed-server/lifecycle/orcad-managed-runtime-context', async (importOriginal) => ({ ...(await importOriginal()), probeManagedOrcadReadiness: mocks.probe })) diff --git a/src/main/wsl/wsl-orcad-deploy.ts b/src/main/wsl/wsl-orcad-deploy.ts index a4e999b9ab6..4e18115ec89 100644 --- a/src/main/wsl/wsl-orcad-deploy.ts +++ b/src/main/wsl/wsl-orcad-deploy.ts @@ -13,16 +13,16 @@ import { materializeOrcadArtifact } from '../orcad/orcad-artifact-materializer' import { OrcadHostUnsupportedError } from '../orcad/orcad-host-unavailable' import type { OrcadHostTransport } from '../ssh/orcad-host-transport' import { ORCAD_ACTIVATION_POLICY_REFUSED_CODE } from '../ssh/orcad-installed-activation' -import { orcadBoundPort } from '../ssh/orcad-managed-bound-port' +import { orcadBoundPort } from '../managed-server/lifecycle/orcad-managed-bound-port' import { isForceableOrcadDeferral, managedOrcadDeployPolicy, managedOrcadInstallDir, managedOrcadSlot, probeManagedOrcadReadiness -} from '../ssh/orcad-managed-runtime-context' -import { isWaitingOrcadUpdateDeferral } from '../ssh/orcad-managed-auto-update' -import { pruneManagedOrcadVersions } from '../ssh/orcad-managed-version-gc' +} from '../managed-server/lifecycle/orcad-managed-runtime-context' +import { isWaitingOrcadUpdateDeferral } from '../managed-server/lifecycle/orcad-managed-auto-update' +import { pruneManagedOrcadVersions } from '../managed-server/lifecycle/orcad-managed-version-gc' import { wakeAlreadyActiveOrcad } from '../ssh/orcad-already-active-wake' import { resolveOrcadRemoteContext } from '../managed-server/install/orcad-remote-context' import { deployOrcad } from '../ssh/orcad-remote-deploy' diff --git a/src/main/wsl/wsl-orcad-incumbent.ts b/src/main/wsl/wsl-orcad-incumbent.ts index 72c07e3d3f9..829b31a6ca0 100644 --- a/src/main/wsl/wsl-orcad-incumbent.ts +++ b/src/main/wsl/wsl-orcad-incumbent.ts @@ -9,9 +9,9 @@ import { ORCAD_MANAGED_REMOTE_PORT } from '../../shared/orcad-managed-runtime' import type { OrcadTerminalCensus } from '../../shared/orcad-terminal-census' import type { ServeReadiness } from '../server/serve-readiness' import { probeActiveOrcadReadiness } from '../ssh/orcad-active-readiness' -import { orcadBoundPort } from '../ssh/orcad-managed-bound-port' -import { managedOrcadInstallDir } from '../ssh/orcad-managed-runtime-context' -import { wakeStoppedManagedOrcad } from '../ssh/orcad-managed-wake' +import { orcadBoundPort } from '../managed-server/lifecycle/orcad-managed-bound-port' +import { managedOrcadInstallDir } from '../managed-server/lifecycle/orcad-managed-runtime-context' +import { wakeStoppedManagedOrcad } from '../managed-server/lifecycle/orcad-managed-wake' import type { OrcadRemoteContext } from '../managed-server/install/orcad-remote-context' import type { OrcadSlotOptions } from '../ssh/orcad-recovery-slot' import { readRemoteOrcadBuildHash } from '../managed-server/install/orcad-remote-build-hash' diff --git a/src/main/wsl/wsl-orcad-instance-adoption.test.ts b/src/main/wsl/wsl-orcad-instance-adoption.test.ts index 481827324eb..cca28ec5647 100644 --- a/src/main/wsl/wsl-orcad-instance-adoption.test.ts +++ b/src/main/wsl/wsl-orcad-instance-adoption.test.ts @@ -59,7 +59,7 @@ vi.mock('../managed-server/install/orcad-remote-runtime-control', () => ({ return '' } })) -vi.mock('../ssh/orcad-managed-remote-stop', () => ({ +vi.mock('../managed-server/lifecycle/orcad-managed-remote-stop', () => ({ readRemoteOrcadManagedStopTarget: async () => host.stopTarget })) vi.mock('../ssh/orcad-recovery-slot', () => ({ diff --git a/src/main/wsl/wsl-orcad-instance-adoption.ts b/src/main/wsl/wsl-orcad-instance-adoption.ts index e31659dd6cb..050c60a66d0 100644 --- a/src/main/wsl/wsl-orcad-instance-adoption.ts +++ b/src/main/wsl/wsl-orcad-instance-adoption.ts @@ -16,7 +16,7 @@ import { evaluateOrcadActivation } from '../managed-server/activation/orcad-acti import { withOrcadActivationLock } from '../managed-server/activation/orcad-activation-lock' import { sameOrcadActivationRecord } from '../managed-server/activation/orcad-activation-transaction' import { readOrcadActivationTransaction } from '../managed-server/activation/orcad-activation-transaction-store' -import { readRemoteOrcadManagedStopTarget } from '../ssh/orcad-managed-remote-stop' +import { readRemoteOrcadManagedStopTarget } from '../managed-server/lifecycle/orcad-managed-remote-stop' import { orcadSlotDir, resolveOrcadSlotIdentity, diff --git a/src/main/wsl/wsl-orcad-pairing-identity.ts b/src/main/wsl/wsl-orcad-pairing-identity.ts index acda9dc6da8..4ecf5d392e0 100644 --- a/src/main/wsl/wsl-orcad-pairing-identity.ts +++ b/src/main/wsl/wsl-orcad-pairing-identity.ts @@ -4,7 +4,7 @@ import type { ServeReadiness } from '../server/serve-readiness' import { verifyOrcadPairingIdentity, type OrcadTunnelIdentity -} from '../ssh/orcad-managed-tunnel-identity' +} from '../managed-server/lifecycle/orcad-managed-tunnel-identity' /** Whether the server behind a WSL bridge is the orcad that published `readiness`. */ export async function verifyWslOrcadIdentity( diff --git a/src/main/wsl/wsl-orcad-stdio-bridge.test.ts b/src/main/wsl/wsl-orcad-stdio-bridge.test.ts index 3660b066a90..b07744a3650 100644 --- a/src/main/wsl/wsl-orcad-stdio-bridge.test.ts +++ b/src/main/wsl/wsl-orcad-stdio-bridge.test.ts @@ -1,8 +1,8 @@ import { connect, type Server, type Socket } from 'node:net' import { afterAll, afterEach, beforeAll, describe, expect, it } from 'vitest' import { checkOrcadStdioBridge, openOrcadStdioBridgeChannel } from '../ssh/orcad-stdio-bridge' -import { ORCAD_STDIO_BRIDGE_MAX_CHANNELS } from '../ssh/orcad-stdio-bridge-listener' -import { startEchoServer } from '../ssh/orcad-stdio-bridge-test-channel' +import { ORCAD_STDIO_BRIDGE_MAX_CHANNELS } from '../managed-server/lifecycle/orcad-stdio-bridge-listener' +import { startEchoServer } from '../managed-server/lifecycle/orcad-stdio-bridge-test-channel' import type { StartedPortForward } from '../ssh/port-forwarding/ssh-port-forward-provider' import { fakeWslBridgeChildren, posixOrcadStdioBridge } from './wsl-orcad-bridge-test-child' import { createWslOrcadHostTransport } from './wsl-orcad-host-transport' diff --git a/src/main/wsl/wsl-orcad-stdio-bridge.ts b/src/main/wsl/wsl-orcad-stdio-bridge.ts index b2aec579ef7..eaa76268f35 100644 --- a/src/main/wsl/wsl-orcad-stdio-bridge.ts +++ b/src/main/wsl/wsl-orcad-stdio-bridge.ts @@ -9,7 +9,7 @@ import { ORCAD_STDIO_BRIDGE_DEPENDENCIES, startOrcadStdioBridge, type OrcadStdioBridgeDependencies -} from '../ssh/orcad-stdio-bridge-provider' +} from '../managed-server/lifecycle/orcad-stdio-bridge-provider' import type { StartedPortForward } from '../ssh/port-forwarding/ssh-port-forward-provider' export type WslOrcadStdioBridgeOptions = { diff --git a/src/main/wsl/wsl-orcad-watch.ts b/src/main/wsl/wsl-orcad-watch.ts index a2a0fd91b93..089b13edf18 100644 --- a/src/main/wsl/wsl-orcad-watch.ts +++ b/src/main/wsl/wsl-orcad-watch.ts @@ -9,7 +9,7 @@ import { openOrcadStdioBridgeChannel, resolveOrcadStdioBridge } from '../ssh/orc import { OrcadStdioBridgeDecoder, type OrcadStdioBridgeSignal -} from '../ssh/orcad-stdio-bridge-stream' +} from '../managed-server/lifecycle/orcad-stdio-bridge-stream' import type { RemoteCommandChannel } from '../managed-server/install/remote-install-transport' export type WslOrcadWatch = {