From 7bf0377072f9b2e9ace445a2acad951990de1d3a Mon Sep 17 00:00:00 2001 From: Neil <4138956+nwparker@users.noreply.github.com> Date: Tue, 3 Nov 2026 22:49:34 -0800 Subject: [PATCH] refactor: place terminal and workspace contracts with concrete owners (#38061) --- .github/workflows/pr.yml | 2 +- .github/workflows/ssh-hostile-hosts.yml | 2 +- .github/workflows/ssh-windows-hosts.yml | 2 +- config/flaky-test-pattern-baseline.txt | 6 +- .../process-host-direct-import-baseline.txt | 4 +- config/reliability-gates.jsonc | 58 ++++++------- config/repo-host-read-baseline.txt | 2 +- .../agent-status-hot-path-benchmark.ts | 2 +- config/scripts/ci-shard-timings.json | 82 +++++++++---------- config/scripts/ci-unit-files.mjs | 2 +- config/scripts/ci-unit-input-ownership.json | 2 +- config/scripts/node-server-test-paths.mjs | 2 +- config/scripts/pr-code-change-scope.mjs | 2 +- config/scripts/pr-layout-oracle-route.mjs | 2 +- config/scripts/pr-shell-contract-prefixes.mjs | 2 +- config/scripts/pr-wsl-e2e-source-routes.mjs | 2 +- .../session-write-hot-path-benchmark.mjs | 6 +- ...terminal-shutdown-byte-limit-benchmark.mjs | 2 +- config/scripts/vitest-node-runtime-files.mjs | 2 +- config/scripts/wsl-e2e-lane-contract.test.mjs | 2 +- config/scripts/wsl-git-shell-benchmark.mjs | 4 +- .../src/automations/automation-run-agent.ts | 2 +- mobile/src/platform/native-pdf-focus.test.tsx | 2 +- .../mobile-existing-agent-launch.test.ts | 4 +- .../session/mobile-existing-agent-launch.ts | 2 +- .../src/session/mobile-terminal-tab-agent.ts | 2 +- .../native-chat/mobile-native-chat-send.ts | 2 +- mobile/src/session/notification-pane-tab.ts | 2 +- ...ssion-terminal-create-agent-launch.test.ts | 2 +- src/cli/handlers/account.ts | 2 +- src/cli/handlers/terminal-close.ts | 2 +- src/cli/handlers/terminal-daemon.ts | 2 +- src/cli/orchestration-mutation-recovery.ts | 2 +- .../paired-terminal-desktop-reveal.test.ts | 2 +- src/cli/paired-terminal-desktop-reveal.ts | 2 +- src/cli/shell-command-quote.ts | 2 +- src/cli/terminal-format.ts | 5 +- .../ended-process-reconciliation.test.ts | 2 +- .../first-work-branch-rename-test-harness.ts | 3 +- .../first-work-branch-rename.test.ts | 3 +- .../agent-hooks/first-work-branch-rename.ts | 2 +- .../manual-compact-hook-stream.test.ts | 2 +- .../manual-compact-status-cleanup.test.ts | 2 +- src/main/agent-hooks/posix-hook-command.ts | 2 +- ...estored-status-dead-terminal-sweep.test.ts | 2 +- .../agent-hooks/server-agent-presence.test.ts | 2 +- .../server-ai-vault-liveness.test.ts | 2 +- .../server-authority-evidence.test.ts | 2 +- .../server-closed-tab-suppression.test.ts | 2 +- .../server-codex-subagent-transcript.test.ts | 2 +- .../agent-hooks/server-grok-discovery.test.ts | 2 +- .../server-hook-http-ingest.test.ts | 2 +- .../server-hook-root-acquisition.test.ts | 2 +- .../server-hook-root-replay.test.ts | 2 +- ...ver-last-status-hydrate-validation.test.ts | 2 +- .../server-muse-session-log-poll.test.ts | 2 +- .../server-observation-provenance.test.ts | 2 +- .../server-opencode-binder.test.ts | 2 +- .../server-opencode-lifecycle.test.ts | 2 +- .../server-opencode-tui-identity.test.ts | 2 +- .../agent-hooks/server-pane-authority.test.ts | 2 +- ...removed-worktree-foreign-authority.test.ts | 2 +- .../server-removed-worktree-status.test.ts | 2 +- .../server-start-failure-lifecycle.test.ts | 2 +- .../server-status-listener-fanout.test.ts | 2 +- ...server-structured-canonical-status.test.ts | 2 +- ...server.claude-interactive-question.test.ts | 2 +- src/main/agent-hooks/server.test-fixtures.ts | 2 +- .../server/launch-resume-identity-event.ts | 10 +++ .../server/server-authority-aliases.ts | 2 +- .../server/server-authority-fences.ts | 2 +- .../server/server-ingest-remote.ts | 2 +- .../server/server-ingest-terminal.ts | 20 ++--- .../agent-hooks/server/server-lifecycle.ts | 2 +- .../agent-hooks/server/server-listeners.ts | 2 +- .../server/server-persistence-validation.ts | 2 +- .../server/server-status-disposition.ts | 5 +- .../server/server-status-identity.ts | 5 +- src/main/agent-hooks/spool.test.ts | 2 +- .../agent-launch/agent-launch-executor.ts | 2 +- src/main/agent-launch/agent-launch-mode.ts | 2 +- .../agent-launch-pane-attachment.ts | 4 +- .../trust/agent-workspace-trust-spawn.ts | 2 +- .../antigravity/antigravity-browser-helper.ts | 2 +- src/main/antigravity/hook-service.ts | 2 +- .../antigravity/posix-hook-invocation.test.ts | 2 +- .../automation-agent-run-result.ts | 2 +- src/main/automations/precheck-runner.ts | 2 +- .../browser-extension-discarded-tabs.test.ts | 2 +- .../browser-extension-discarded-tabs.ts | 2 +- .../claude-accounts/claude-command-process.ts | 2 +- .../claude/agent-view/agent-view-bridge.ts | 2 +- .../compact-status-registration.test.ts | 2 +- src/main/cli/appimage-stable-launcher.ts | 2 +- .../cli/cli-command-filesystem-transaction.ts | 2 +- src/main/cli/cli-dev-launcher.ts | 2 +- src/main/cli/legacy-appimage-cli-wrapper.ts | 2 +- src/main/cli/linux-bare-orca-dispatcher.ts | 2 +- src/main/cli/linux-terminal-orca-cli-shim.ts | 2 +- src/main/cli/wsl-cli-installer.ts | 2 +- src/main/cli/wsl-cli-registration-command.ts | 2 +- src/main/cli/wsl-cli-scripts.ts | 2 +- src/main/cli/wsl-cli-status.ts | 2 +- .../codex-managed-home-lifecycle.ts | 2 +- .../codex-accounts/codex-managed-home-path.ts | 2 +- ...y-wsl-runtime-auth-drain-shell-commands.ts | 2 +- src/main/codex-accounts/wsl-codex-command.ts | 2 +- .../wsl-codex-session-bridge-script.ts | 2 +- .../definitions/codex-hook-definition.ts | 2 +- src/main/daemon/client.ts | 5 +- src/main/daemon/daemon-checkpoint-file.ts | 2 +- .../daemon/daemon-client-notify-settlement.ts | 2 +- .../daemon/daemon-client-pending-requests.ts | 9 +- .../daemon-color-query-reply-colors.test.ts | 2 +- src/main/daemon/daemon-control-request.ts | 2 +- .../daemon/daemon-create-or-attach-result.ts | 2 +- src/main/daemon/daemon-fenced-termination.ts | 2 +- src/main/daemon/daemon-history-replay-pty.ts | 2 +- src/main/daemon/daemon-liveness-report.ts | 2 +- src/main/daemon/daemon-pid-file-parse.ts | 2 +- ...-pty-adapter-replacement-exit-race.test.ts | 2 +- .../daemon/daemon-pty-adapter-test-harness.ts | 2 +- ...-pty-adapter-wake-relaunch-history.test.ts | 2 +- src/main/daemon/daemon-pty-adapter.ts | 4 +- .../daemon/daemon-pty-event-subscriptions.ts | 2 +- .../daemon/daemon-pty-process-inspection.ts | 15 ++-- src/main/daemon/daemon-pty-router-events.ts | 4 +- src/main/daemon/daemon-pty-router.ts | 6 +- src/main/daemon/daemon-pty-session-input.ts | 5 +- .../daemon/daemon-pty-session-inventory.ts | 2 +- ...emon-pty-write-settlement-recovery.test.ts | 2 +- ...mon-relaunch-unattached-inspection.test.ts | 4 +- src/main/daemon/daemon-request-router.ts | 2 +- src/main/daemon/daemon-spawner.ts | 2 +- src/main/daemon/daemon-stream-events.ts | 4 +- src/main/daemon/daemon-terminal-admission.ts | 3 +- src/main/daemon/daemon-wsl-sleep-cwd.ts | 2 +- .../degraded-daemon-pty-provider.test.ts | 6 +- .../daemon/degraded-daemon-pty-provider.ts | 4 +- src/main/daemon/legacy-restore-admission.ts | 8 +- src/main/daemon/node-pty-error-hints.ts | 2 +- src/main/daemon/pty-session-id.test.ts | 2 +- src/main/daemon/pty-session-id.ts | 2 +- ...ty-subprocess-git-credential-guard.test.ts | 2 +- src/main/daemon/pty-subprocess.ts | 2 +- .../daemon-pty-physical-owner.ts | 6 +- .../foreground-process-tracker.ts | 4 +- .../native-pty-spawn-windows.test.ts | 2 +- .../daemon/pty-subprocess/native-pty-spawn.ts | 2 +- .../pty-subprocess/pre-listener-events.ts | 2 +- .../pty-subprocess/spawn-environment.ts | 2 +- .../spawn-file-child-processes.ts | 2 +- .../spawn-file-foreground-process.ts | 2 +- .../pty-subprocess/subprocess-handle.ts | 2 +- .../session-conpty-resize-history.test.ts | 2 +- .../session-conpty-resize-transcript.test.ts | 2 +- src/main/daemon/session-initial-output.ts | 2 +- src/main/daemon/session-options.ts | 4 +- src/main/daemon/session-output-plane.ts | 9 +- .../session-powershell-prompt-repaint.ts | 2 +- src/main/daemon/session-process-inspection.ts | 2 +- src/main/daemon/session-subprocess-handle.ts | 6 +- src/main/daemon/session.test.ts | 2 +- src/main/daemon/session.ts | 4 +- src/main/daemon/terminal-creation-work.ts | 2 +- .../terminal-history-checkpoint-reader.ts | 2 +- .../terminal-history-cold-restore-info.ts | 2 +- .../terminal-host-agent-session-claim.ts | 10 +-- .../terminal-host-agent-session.test.ts | 2 +- .../daemon/terminal-host-create-contract.ts | 6 +- .../terminal-host-fenced-termination.test.ts | 2 +- .../terminal-host-fenced-termination.ts | 2 +- src/main/daemon/terminal-host-options.ts | 2 +- .../terminal-host-process-inspection.test.ts | 2 +- .../terminal-host-process-inspection.ts | 6 +- .../daemon/terminal-host-returned-process.ts | 2 +- .../daemon/terminal-host-session-publish.ts | 6 +- src/main/daemon/terminal-host.ts | 16 ++-- src/main/daemon/terminal-scopes-runtime.ts | 2 +- src/main/daemon/terminal-scopes.test.ts | 2 +- src/main/daemon/terminal-scopes.ts | 4 +- .../terminal-shell-lifecycle-scanner.ts | 2 +- .../terminal-shell-recovery-barrier.test.ts | 2 +- .../daemon/terminal-shell-recovery-barrier.ts | 4 +- ...ell-recovery-clean-exit-retirement.test.ts | 2 +- src/main/daemon/terminal-snapshot.ts | 2 +- src/main/daemon/terminal-spawn-gate.test.ts | 2 +- src/main/daemon/terminal-spawn-host-share.ts | 2 +- .../daemon/terminal-start-failure.test.ts | 4 +- src/main/daemon/types.ts | 4 +- src/main/daemon/wsl-session-context.ts | 2 +- .../android/android-input-commands.ts | 2 +- .../external-conversation.test-fixture.ts | 2 +- .../external-editor-launch.ts | 2 +- .../remote-ssh-editor-launch.ts | 2 +- .../command-runner/wsl-command-resolution.ts | 2 +- .../git/git-network-safety-real-git.test.ts | 2 +- .../worktree-push-target-reconciliation.ts | 2 +- src/main/git/wsl-process-group-termination.ts | 2 +- src/main/hermes/hook-service.test.ts | 2 +- src/main/ipc/agent-hooks.test.ts | 2 +- src/main/ipc/agent-pane-authority-ipc.ts | 2 +- .../ipc/agent-pane-retirement-ipc.test.ts | 2 +- src/main/ipc/agent-status-ipc-boundary.ts | 2 +- src/main/ipc/agent-status-row-teardown-ipc.ts | 2 +- .../local-worktree-runtime-options.test.ts | 4 +- src/main/ipc/native-notification-delivery.ts | 2 +- src/main/ipc/preflight-command-exec.ts | 2 +- ...eflight-provider-command-selection.test.ts | 2 +- .../ipc/preflight-runnable-local-cli.test.ts | 2 +- src/main/ipc/preflight-wsl-agent-detection.ts | 2 +- .../pty-attach-view-joins-main-start.test.ts | 2 +- src/main/ipc/pty/delivery/accounting.ts | 2 +- src/main/ipc/pty/delivery/debug-snapshot.ts | 2 +- src/main/ipc/pty/delivery/debug.ts | 2 +- src/main/ipc/pty/delivery/payload.ts | 2 +- src/main/ipc/pty/delivery/pending.ts | 2 +- .../pty-ipc-hidden-delivery-gate.test.ts | 2 +- src/main/ipc/pty/host-env/assembly.ts | 2 +- .../pty/host-env/saved-resume-admission.ts | 2 +- src/main/ipc/pty/host-env/spawn-cwd.ts | 2 +- .../pty/ipc/closed-pane-spawn-refusal.test.ts | 2 +- src/main/ipc/pty/ipc/inspect.ts | 2 +- src/main/ipc/pty/ipc/leaf-move.ts | 2 +- src/main/ipc/pty/ipc/renderer-kill.ts | 4 +- src/main/ipc/pty/ipc/resize-visibility.ts | 4 +- src/main/ipc/pty/ipc/session-listing.ts | 2 +- .../ipc/pty/ipc/spawn-agent-launch-end.ts | 2 +- src/main/ipc/pty/ipc/spawn-agent-launch.ts | 4 +- src/main/ipc/pty/ipc/spawn-commit.ts | 6 +- src/main/ipc/pty/ipc/spawn-env.ts | 4 +- src/main/ipc/pty/ipc/spawn-types.ts | 2 +- src/main/ipc/pty/ipc/spawn.ts | 2 +- .../pty/ipc/write-input-user-input.test.ts | 2 +- src/main/ipc/pty/ipc/write-input.ts | 5 +- src/main/ipc/pty/pane/absent-pane-owner.ts | 2 +- src/main/ipc/pty/pane/adopt-stable.ts | 4 +- .../pty/pane/agent-launch-pane-evidence.ts | 2 +- src/main/ipc/pty/pane/agent-session-owners.ts | 4 +- .../ipc/pty/pane/complete-pane-adoption.ts | 17 ++-- src/main/ipc/pty/pane/join-pane-spawn.test.ts | 2 +- src/main/ipc/pty/pane/key-state.ts | 2 +- src/main/ipc/pty/pane/launch-authority.ts | 2 +- .../ipc/pty/pane/pane-owner-replacement.ts | 2 +- src/main/ipc/pty/pane/pane-spawn-operation.ts | 2 +- .../pane/serializer-document-lifetime.test.ts | 2 +- src/main/ipc/pty/pane/spawn-registration.ts | 2 +- src/main/ipc/pty/pane/stable-owner.ts | 2 +- ...ble-pane-absence-death-certificate.test.ts | 2 +- .../pane/stable-pane-absence-respawn.test.ts | 2 +- src/main/ipc/pty/provider/ownership-state.ts | 2 +- src/main/ipc/pty/provider/registry.ts | 4 +- .../pty/pty-agent-launch-pane-attach.test.ts | 4 +- .../pty/pty-closed-pane-spawn-refusal.test.ts | 2 +- .../pty-controller-spawn-admission.test.ts | 2 +- .../pty-daemon-controller-teardown.test.ts | 2 +- .../pty-daemon-spawn-session-identity.test.ts | 2 +- .../ipc/pty/pty-dead-owner-respawn.test.ts | 2 +- ...y-dispatcher-handshake-osc-answers.test.ts | 2 +- src/main/ipc/pty/pty-first-size.ts | 2 +- src/main/ipc/pty/pty-launch-parity.test.ts | 2 +- .../ipc/pty/pty-launch-race-parity.test.ts | 2 +- .../ipc/pty/pty-launch-race-test-fixture.ts | 2 +- .../pty/pty-pane-claim-arbitration.test.ts | 2 +- .../pty/pty-pane-materialization-race.test.ts | 2 +- .../pty/pty-pane-owner-swap.test-fixture.ts | 2 +- .../pty-pane-reservation-settlement.test.ts | 2 +- .../pty-persisted-incarnation-repair.test.ts | 2 +- .../pty/pty-restore-record-seeding.test.ts | 2 +- .../pty-serializer-settlement-mapping.test.ts | 2 +- ...pty-session-liveness-and-ownership.test.ts | 2 +- .../pty/pty-spawn-env-terminal-basics.test.ts | 2 +- .../pty-spawn-runtime-handle-binding.test.ts | 2 +- src/main/ipc/pty/pty-ssh-stop-verdict.test.ts | 2 +- src/main/ipc/pty/register-handlers.ts | 2 +- src/main/ipc/pty/runtime/controller-deps.ts | 2 +- src/main/ipc/pty/runtime/controller.ts | 2 +- src/main/ipc/pty/runtime/kill.ts | 2 +- src/main/ipc/pty/runtime/operations.ts | 2 +- .../runtime/spawn-commit-run-facts.test.ts | 2 +- src/main/ipc/pty/runtime/spawn-commit.ts | 3 +- src/main/ipc/pty/runtime/spawn-options.ts | 4 +- src/main/ipc/pty/runtime/spawn-preflight.ts | 4 +- src/main/ipc/pty/runtime/spawn-state.ts | 2 +- src/main/ipc/pty/session.ts | 2 +- src/main/ipc/pty/spawn-commit-assembly.ts | 4 +- src/main/ipc/pty/spawn-commit-binding.ts | 4 +- src/main/ipc/pty/spawn-operation.ts | 2 +- src/main/ipc/pty/spawn-outcome.ts | 6 +- src/main/ipc/pty/spawn-pane-coordinates.ts | 4 +- src/main/ipc/pty/spawn-pane-env.ts | 4 +- src/main/ipc/pty/spawn-startup-target.ts | 2 +- ...-shutdown-checkpoint-sleep-records.test.ts | 2 +- .../ipc/renderer-shutdown-checkpoint.test.ts | 2 +- src/main/ipc/renderer-shutdown-checkpoint.ts | 2 +- .../session-close-terminal-surface.test.ts | 2 +- src/main/ipc/session-window-view-save.test.ts | 2 +- src/main/ipc/session.ts | 4 +- src/main/ipc/shell-owned-path-target.ts | 2 +- src/main/ipc/shell.ts | 2 +- .../ipc/terminal-git-credential-guard.test.ts | 2 +- ...rminal-startup-color-query-replies.test.ts | 4 +- .../terminal-startup-color-query-replies.ts | 4 +- src/main/ipc/worktree-folder-rename-target.ts | 3 +- ...thoritative-local-metadata-pruning.test.ts | 2 +- .../ipc/worktrees-removal-recovery.test.ts | 2 +- src/main/ipc/wsl/wsl-move-undo-wiring.test.ts | 2 +- .../orcad-activation-crash-recovery.test.ts | 2 +- .../orcad-activation-fence-scope.ts | 2 +- .../activation/orcad-activation-lock.ts | 2 +- .../host-state/orcad-machine-claim-command.ts | 2 +- .../host-state/orcad-machine-home.ts | 2 +- .../orcad-state-mutation-timeout.test.ts | 2 +- .../host-state/orcad-state-newest-mtime.ts | 2 +- .../orcad-state-snapshot-shell.test.ts | 2 +- .../host-state/orcad-state-snapshot-space.ts | 2 +- .../host-state/orcad-state-snapshot.ts | 2 +- .../install/orcad-node-runtime-globs.ts | 2 +- .../install/orcad-remote-build-hash.ts | 2 +- .../install/orcad-remote-context.ts | 2 +- .../install/orcad-remote-decommission.test.ts | 2 +- .../install/orcad-remote-gc.test.ts | 2 +- .../managed-server/install/orcad-remote-gc.ts | 2 +- .../install/orcad-remote-install.ts | 2 +- .../install/orcad-remote-launch.ts | 2 +- .../install/orcad-remote-log-tail.ts | 2 +- ...rcad-remote-node-runtime-recorded-probe.ts | 2 +- .../install/orcad-remote-node-runtime.ts | 2 +- .../install/orcad-remote-preflight.ts | 2 +- .../install/orcad-remote-process-control.ts | 2 +- .../orcad-remote-readiness-wait.test.ts | 2 +- .../install/orcad-remote-readiness-wait.ts | 2 +- .../install/orcad-remote-record-file.ts | 2 +- .../install/orcad-remote-rollback.test.ts | 2 +- .../install/orcad-remote-runtime.test.ts | 2 +- .../install/orcad-remote-runtime.ts | 2 +- ...-remote-shell-commands.integration.test.ts | 2 +- .../install/remote-install-gc-claim.ts | 2 +- .../remote-install-gc-listing.test-fixture.ts | 2 +- .../install/remote-install-lock-commands.ts | 2 +- .../remote-install-lock-exited-owner.ts | 2 +- .../install/remote-install-out-of-space.ts | 2 +- .../remote-node-runtime-host-download.ts | 2 +- .../install/remote-node-runtime-store-gc.ts | 2 +- .../remote-node-runtime-store-inventory.ts | 2 +- .../install/remote-node-runtime-store-lock.ts | 2 +- .../install/remote-versioned-install.test.ts | 2 +- .../lifecycle/orcad-managed-remote-stop.ts | 2 +- .../orcad-managed-stale-lock-reclaim.test.ts | 2 +- .../orcad-managed-stale-lock-reclaim.ts | 2 +- .../orcad-managed-wake-one-fence.test.ts | 2 +- .../lifecycle/orcad-managed-wake.test.ts | 2 +- .../lifecycle/orcad-stdio-bridge-script.ts | 2 +- src/main/memory/hydrate-local-pty-registry.ts | 2 +- .../native-chat-media-path.test.ts | 2 +- .../native-chat/native-chat-media-path.ts | 2 +- .../notification-delivery-service.test.ts | 9 +- .../notification-delivery-service.ts | 2 +- .../opencode/opencode-session-binder.test.ts | 2 +- .../opencode/opencode-startup-prompt-owner.ts | 2 +- ...-project-session-field-disposition.test.ts | 9 +- ...ofile-project-session-field-disposition.ts | 2 +- .../profile-project-session-state.test.ts | 2 +- .../profile-project-session-state.ts | 2 +- .../profile-project-session-transfer.ts | 2 +- .../profile-project-source-removal.ts | 3 +- .../profile-project-state-file.ts | 2 +- .../profile-project-transfer-payload.ts | 2 +- .../profile-project-worktree-identity.ts | 11 ++- .../profile-session-markdown-transfer.ts | 4 +- .../profile-session-owner-transfer.test.ts | 2 +- .../profile-session-owner-transfer.ts | 6 +- .../orcad-bundled-runtime.integration.test.ts | 2 +- src/main/orcad/orcad-health.ts | 2 +- ...ckaged-structured-chat.integration.test.ts | 2 +- .../wsl-mover/wsl-mover-heavy-profile.ts | 2 +- .../wsl-mover/wsl-mover-profile-rows.ts | 2 +- .../applying-settings/settings-update.ts | 2 +- .../applying-settings/ui-interaction-merge.ts | 3 +- ...closed-terminal-panes-registration.test.ts | 4 +- .../closed-terminal-tab-write-fence.test.ts | 2 +- .../closed-terminal-tab-write-fence.ts | 6 +- .../ssh-pty-binding-cleanup.ts | 2 +- .../loading-store/layout-editor-views.ts | 2 +- .../loading-store/loaded-state-parsing.ts | 4 +- .../metadata-lineage-operations.ts | 12 +-- .../normalize-loaded-global-settings.ts | 2 +- .../normalize-loaded-state-collections.ts | 4 +- .../persisted-state-redundancy.test.ts | 4 +- .../profile-state-caller-cancellation.spec.ts | 2 +- .../pty-binding-fast-lane.test.ts | 2 +- .../loading-store/pty-binding-fast-lane.ts | 4 +- .../loading-store/pty-binding-persistence.ts | 8 +- .../pty-binding-placement-inertness.test.ts | 4 +- .../loading-store/pty-binding-refusals.ts | 6 +- .../pty-binding-session-update.ts | 4 +- .../loading-store/pty-binding-span.ts | 4 +- .../pty-binding-write-rollback.ts | 4 +- .../pty-incarnation-renderer-save.test.ts | 2 +- .../pty-spawn-exit-durability.test.ts | 2 +- .../pty-spawn-replacement-durability.test.ts | 2 +- .../loading-store/replaced-pane-binding.ts | 2 +- .../repo-lifecycle-operations.ts | 6 +- .../reused-terminal-id-unbind.test.ts | 2 +- .../reused-terminal-id-unbind.ts | 2 +- .../runtime-partition-topology-fence.ts | 2 +- .../loading-store/session-host-partitions.ts | 12 +-- .../session-snapshot-operations.ts | 11 +-- .../state-serialization-secret-handling.ts | 2 +- .../state-write-round-trip.test.ts | 2 +- ...store-host-partition-before-unload.test.ts | 2 +- .../store-prune-gate-signals.test.ts | 2 +- ...re-runtime-authored-session-writes.test.ts | 4 +- ...ore-workspace-session-host-removal.test.ts | 2 +- .../terminal-binding-recovery.ts | 4 +- .../loading-store/terminal-session-cleanup.ts | 2 +- .../terminal-tab-pty-ownership.ts | 2 +- .../workspace-session-partitions.test.ts | 4 +- .../workspace-session-partitions.ts | 6 +- .../workspace-session-snapshot-publication.ts | 6 +- ...ce-session-terminal-binding-replay.test.ts | 2 +- ...rkspace-session-terminal-binding-replay.ts | 4 +- .../workspace-session-write-listeners.spec.ts | 2 +- ...rcad-destination-workspace-session.test.ts | 6 +- .../orcad-destination-workspace-session.ts | 4 +- ...rcad-migration-blob-install-persistence.ts | 2 +- .../orcad-migration-export-holds.test.ts | 2 +- .../orcad-source-client-browser-intents.ts | 2 +- .../orcad-source-client-state.test.ts | 6 +- .../orcad-source-client-state.ts | 4 +- .../orcad-source-client-subtraction.ts | 8 +- .../orcad-source-dependency-census.ts | 2 +- .../orcad-source-draft-rename.ts | 2 +- ...ource-duplicate-session-identities.test.ts | 4 +- ...cad-source-duplicate-session-identities.ts | 2 +- .../orcad-source-export.test.ts | 2 +- .../orcad-source-left-behind-session-rows.ts | 4 +- .../orcad-source-partial-partition.test.ts | 2 +- .../orcad-source-release-upgrade.test.ts | 4 +- .../orcad-source-scrollback-state.test.ts | 2 +- .../orcad-source-scrollback-state.ts | 2 +- .../orcad-source-session-copy-resolution.ts | 6 +- .../orcad-source-session-dependencies.ts | 2 +- .../orcad-source-session-partitions.ts | 8 +- .../orcad-source-stale-state-move.test.ts | 6 +- ...source-workspace-session-ambiguity.test.ts | 2 +- ...ad-source-workspace-session-eligibility.ts | 4 +- ...rcad-source-workspace-session-fragments.ts | 2 +- .../orcad-source-workspace-session-layout.ts | 2 +- ...ad-source-workspace-session-subtraction.ts | 2 +- .../orcad-source-workspace-session.ts | 4 +- .../orcad-terminal-history-installer.ts | 4 +- .../wsl-move-exit-proof.ts | 5 +- .../wsl-move-gate-facts.ts | 6 +- .../wsl-move-gate-stub-agent-hooks.test.ts | 2 +- .../wsl-move-guest-foreground.test.ts | 2 +- .../wsl-move-guest-foreground.ts | 2 +- .../wsl-move-host-owned-chat-tabs.ts | 2 +- .../wsl-move-main-rewrite-stores.test.ts | 2 +- .../wsl-move-main-rewrite-stores.ts | 2 +- .../wsl-move-manifest-export.test.ts | 2 +- .../wsl-move-registry-complete.test.ts | 2 +- .../wsl-move-round-trip.test.ts | 4 +- .../wsl-move-seeded-view-state.test.ts | 2 +- .../wsl-move-seeded-view-state.ts | 6 +- .../wsl-move-session-freeze.test.ts | 2 +- .../wsl-move-session-freeze.ts | 8 +- .../wsl-move-session-projection.ts | 6 +- .../wsl-move-session-rewrite.test.ts | 2 +- .../wsl-move-session-rewrite.ts | 10 +-- .../wsl-move-slept-scrollback.test.ts | 2 +- .../wsl-move-slept-scrollback.ts | 19 +++-- .../wsl-move-state-projection.ts | 2 +- .../wsl-move-windows-shell-choices.ts | 2 +- ...ence-cohort-and-identity-migration.test.ts | 2 +- ...sistence-flush-and-save-scheduling.test.ts | 2 +- ...sistence-host-partitioned-sessions.test.ts | 4 +- .../persistence-initial-load.test.ts | 4 +- .../persistence-session-fixtures.ts | 7 +- .../profile-state-cutover-fixture.ts | 7 +- ...ofile-state-writer-capacity-errors.test.ts | 2 +- .../record-patch-versus-full-save.test.ts | 2 +- .../cross-host-pane-tab-ids.ts | 2 +- .../empty-terminal-layout-root-repair.ts | 4 +- .../invalid-workspace-layout-purge.ts | 2 +- .../pane-alias-normalization.test.ts | 2 +- .../pane-alias-normalization.ts | 2 +- .../pane-identity-migration.ts | 9 +- .../pane-key-remapping.test.ts | 2 +- .../restoring-sessions/pane-key-remapping.ts | 6 +- .../session-owner-fields.test.ts | 2 +- .../session-owner-fields.ts | 4 +- .../session-owner-removal.ts | 6 +- .../session-worktree-ownership.test.ts | 2 +- .../session-worktree-ownership.ts | 2 +- .../tab-terminal-pane-binding-repair.test.ts | 2 +- .../tab-terminal-pane-binding-repair.ts | 4 +- .../terminal-layout-normalization.test.ts | 2 +- .../terminal-layout-normalization.ts | 4 +- .../unattached-terminal-row-sweep.test.ts | 2 +- ...workspace-pane-normalization-index.test.ts | 7 +- .../workspace-pane-normalization.ts | 6 +- .../workspace-session-write-rollback.ts | 2 +- ...-authored-workspace-session-fields.test.ts | 2 +- ...ntime-authored-workspace-session-fields.ts | 4 +- .../automation-context-migration.ts | 5 +- .../closed-pane-binding-fence.test.ts | 2 +- .../closed-pane-binding-fence.ts | 2 +- .../cross-partition-tab-move.ts | 2 +- .../duplicate-pty-pane-repair.test.ts | 2 +- .../duplicate-pty-pane-repair.ts | 8 +- .../layout-command-binding-generations.ts | 2 +- .../layout-command-commit.ts | 2 +- .../layout-command-persistence.ts | 2 +- ...ayout-owner-written-session-golden.test.ts | 2 +- ...er-written-session-switch-off-load.test.ts | 2 +- .../pane-remote-session-follow.ts | 2 +- ...ersistence-binding-graft-placement.test.ts | 4 +- ...sistence-closed-pane-binding-fence.test.ts | 2 +- ...rsistence-cross-host-pane-identity.test.ts | 4 +- ...persistence-empty-root-layout-load.test.ts | 6 +- ...-host-partitioned-ssh-pty-bindings.test.ts | 2 +- ...ersistence-layout-binding-recovery.test.ts | 2 +- ...istence-pane-alias-selective-saves.test.ts | 2 +- ...ersistence-pane-identity-migration.test.ts | 2 +- ...ntime-admitted-terminal-membership.test.ts | 2 +- ...persistence-split-pane-incarnation.test.ts | 2 +- ...ence-ssh-remote-pty-binding-replay.test.ts | 2 +- ...sistence-ssh-targets-and-pane-keys.test.ts | 2 +- ...nce-tab-terminal-pane-binding-load.test.ts | 2 +- .../terminal-layout-create-resend.test.ts | 2 +- ...erminal-leaf-move-concurrent-close.test.ts | 2 +- .../terminal-leaf-move-fixture.ts | 2 +- .../terminal-topology/terminal-leaf-move.ts | 15 ++-- .../terminal-owner-invariants.test.ts | 2 +- .../terminal-owner-report-only.test.ts | 7 +- .../terminal-pane-admission-taken-ids.test.ts | 2 +- .../terminal-pane-admission.ts | 4 +- .../terminal-pane-placement-agreement.ts | 4 +- .../terminal-pane-placement-graft.ts | 4 +- .../terminal-sleep-quit-resume.test.ts | 2 +- .../terminal-stale-pane-tree-client.test.ts | 4 +- .../terminal-topology-commit.test.ts | 4 +- .../terminal-topology-commit.ts | 6 +- .../terminal-topology-membership.ts | 2 +- .../terminal-topology-model.test.ts | 4 +- ...erminal-topology-window-session-fixture.ts | 7 +- ...owless-host-reload-keeps-terminals.test.ts | 4 +- .../windowless-restart-lost-binding.test.ts | 2 +- .../workspace-layout-rules.test.ts | 4 +- .../deregistered-repo-residue.ts | 2 +- ...nce-invalid-workspace-layout-purge.test.ts | 2 +- ...tence-workspace-session-scrollback.test.ts | 4 +- .../project-group-session-batch.test.ts | 2 +- .../tracking-repos/repo-worktree-pruning.ts | 5 +- ...-identity-migration-field-coverage.test.ts | 2 +- .../worktree-identity-migration.ts | 5 +- ...window-save-divergence-first-group.test.ts | 2 +- .../window-save-divergence.test.ts | 2 +- .../persistence/window-save-divergence.ts | 4 +- .../window-save-raw-session-divergence.ts | 2 +- .../window-save-reconnect-facts.test.ts | 2 +- .../window-save-sleep-records.test.ts | 2 +- .../persistence/window-save-sleep-records.ts | 2 +- src/main/persistence/window-save-view.ts | 2 +- src/main/preflight/agent-detection.ts | 4 +- .../providers/agent-foreground-process.ts | 2 +- .../local-pty-child-process-verdict.test.ts | 2 +- .../local-pty/local-pty-executable-spawn.ts | 2 +- .../local-pty-foreground-inspection.ts | 2 +- .../local-pty/local-pty-provider-state.ts | 2 +- .../local-pty/local-pty-provider-types.ts | 2 +- .../providers/local-pty/local-pty-provider.ts | 7 +- .../local-pty/local-pty-session-activation.ts | 15 ++-- .../local-pty-shell-readiness-session.ts | 4 +- ...pty-shell-startup-command.node-pty.test.ts | 2 +- src/main/providers/pty-process-info.ts | 2 +- src/main/providers/pty-process-inspection.ts | 8 +- .../providers/pty-process-list-admission.ts | 2 +- src/main/providers/pty-provider-contract.ts | 12 +-- src/main/providers/pty-spawn-result.ts | 6 +- src/main/providers/settled-pty-write-stub.ts | 2 +- .../windows-agent-foreground-process.ts | 2 +- .../windows-cached-agent-revalidation.ts | 2 +- src/main/providers/windows-shell-args.ts | 2 +- .../pty-master-foreground-observation.test.ts | 2 +- .../pty-master-foreground-observation.ts | 4 +- ...nal-scrollback-snapshot-async-migration.ts | 2 +- .../terminal-scrollback-snapshots.ts | 2 +- .../shell-prompt-readiness-probe.test.ts | 4 +- .../shell-prompt-readiness-probe.ts | 4 +- src/main/qoder/real-cli.test.ts | 2 +- src/main/rate-limits/codex-fetcher.ts | 2 +- src/main/ripgrep/bundled-ripgrep-path.ts | 2 +- .../__fixtures__/main-layout-close-fixture.ts | 4 +- ...time-terminal-close-continuity-fixtures.ts | 4 +- ...terminal-close-continuity-graph-fixture.ts | 4 +- ...terminal-close-continuity-state-fixture.ts | 4 +- ...wledged-terminal-tab-retirement-fixture.ts | 2 +- .../agent-prompt-submission-verification.ts | 2 +- .../agent-session-tab-layout-command.test.ts | 2 +- .../runtime/agent-session-tab-layout-queue.ts | 2 +- .../agent-session-tab-layout.test.ts | 2 +- .../agent-session/agent-session-tab-layout.ts | 2 +- ...-agent-session-startup-tab-restore.test.ts | 2 +- ...ent-session-windowless-layout-host.test.ts | 2 +- ...ed-agent-session-windowless-layout.test.ts | 2 +- .../agent-transcript-pane-test-harness.ts | 2 +- .../runtime/bind-first-pane.test-fixture.ts | 4 +- ...owser-tab-create-caller-navigation.test.ts | 2 +- .../claude-agent-teams-tmux-dispatcher.ts | 2 +- ...owser-page-persistence.integration.test.ts | 2 +- ...nt-hosted-browser-page-persistence.test.ts | 6 +- .../client-hosted-browser-page-persistence.ts | 4 +- ...osted-browser-row-push.integration.test.ts | 2 +- ...ge-reconciliation-hold.integration.test.ts | 2 +- ...client-session-tab-selection-projection.ts | 2 +- .../runtime/client/runtime-client-state.ts | 4 +- .../runtime-construction-services.ts | 6 +- .../construction/runtime-identity-state.ts | 10 ++- ...obile-session-tab-caller-selection.test.ts | 2 +- src/main/runtime/dsb-terminal-runtime.test.ts | 2 +- .../runtime/dsh-readiness-transcript.test.ts | 2 +- .../runtime/editor-open-active-group.test.ts | 2 +- .../exited-split-pane-layout-close.test.ts | 2 +- .../runtime/exited-split-pane-layout-close.ts | 4 +- .../runtime/floating-snapshot-pty-bindings.ts | 2 +- ...older-workspace-mixed-host-routing.test.ts | 2 +- .../folder-workspace-pty-identity.test.ts | 4 +- ...c-live-daemon-pty-tab-preservation.test.ts | 2 +- .../graph-sync-mobile-snapshot-gating.test.ts | 2 +- .../graph-sync-payload-partition.test.ts | 2 +- .../headless-move-leaf-to-new-tab.test.ts | 6 +- ...dless-pane-layout-noop-publication.test.ts | 2 +- ...placeholder-graph-surface-standing.spec.ts | 4 +- .../headless-terminal-split-layout.test.ts | 4 +- .../runtime/headless-terminal-split-layout.ts | 2 +- .../runtime/hook-status-resume-record.test.ts | 2 +- ...minal-close-persistence-durability.test.ts | 2 +- .../host-terminal-scrollback-read.test.ts | 4 +- .../runtime/host-terminal-scrollback-read.ts | 2 +- .../launched-agent-composer-readiness.ts | 2 +- src/main/runtime/launched-agent-foreground.ts | 4 +- .../main-owned-workspace-runtime-fixture.ts | 4 +- .../markdown-tab-disk-documents.test.ts | 2 +- .../runtime/markdown-tab-disk-documents.ts | 2 +- src/main/runtime/markdown-tab-disk-host.ts | 2 +- .../mobile-relay-host-catalog.test.ts | 2 +- .../mobile-relay-host-catalog.ts | 4 +- .../on-demand-server-worktree-rows.test.ts | 2 +- .../mobile-session-editor-projection.test.ts | 4 +- .../mobile-session-editor-projection.ts | 2 +- .../mobile-session-layout-projection.ts | 6 +- ...session-terminal-persistence-retirement.ts | 4 +- .../mobile-session-terminal-projection.ts | 4 +- ...-session-terminal-retirement-proof.test.ts | 2 +- ...obile-session-terminal-retirement-proof.ts | 2 +- .../mobile-session-terminal-retirement.ts | 4 +- src/main/runtime/moved-pane-owner-rekey.ts | 4 +- .../runtime/opencode-run-lifetime-status.ts | 2 +- .../runtime/orca-runtime-agent-transitions.ts | 2 +- ...time-codex-idle-title-chat-address.test.ts | 2 +- ...e-cold-restore-terminal-membership.test.ts | 2 +- ...ca-runtime-create-terminal-dependencies.ts | 2 +- ...a-runtime-default-tab-agent-status.test.ts | 2 +- .../orca-runtime-desktop-tab-names.test.ts | 4 +- ...ca-runtime-exited-split-pane-close.test.ts | 4 +- ...ime-failed-start-pane-layout-owner.test.ts | 2 +- src/main/runtime/orca-runtime-get-status.ts | 2 +- ...ntime-headless-hydration-repo-gate.spec.ts | 2 +- ...ntime-hook-agent-status-projection.test.ts | 2 +- ...orca-runtime-layout-owner-start-fixture.ts | 2 +- ...ntime-mobile-agent-status-ordering.test.ts | 2 +- ...le-agent-status-title-truthfulness.test.ts | 2 +- ...obile-close-preserved-resurrection.test.ts | 4 +- ...runtime-mobile-markdown-tab-routes.test.ts | 2 +- ...-provider-reattach-launch-identity.test.ts | 2 +- ...orca-runtime-serve-browser-restore.test.ts | 2 +- ...ca-runtime-session-tabs-path-alias.test.ts | 2 +- ...runtime-structured-session-restore.test.ts | 2 +- ...-runtime-terminal-close-continuity.test.ts | 2 +- ...rca-runtime-terminal-close-records.test.ts | 4 +- ...ime-terminal-close-spill-partition.spec.ts | 4 +- ...untime-terminal-handle-incarnation.test.ts | 2 +- ...ntime-terminal-handle-leaf-removal.test.ts | 2 +- ...terminal-retirement-host-partition.spec.ts | 2 +- .../orca-runtime-terminal-retirement.test.ts | 2 +- ...a-runtime-terminal-split-authority.test.ts | 8 +- ...rca-runtime-terminal-surface-close.test.ts | 4 +- .../orca-runtime-test-fixtures.spec.ts | 8 +- .../runtime/orca-runtime-test-mocks.spec.ts | 6 +- .../imported-values.spec.ts | 4 +- ...rca-runtime-test-scenario-builders.spec.ts | 6 +- ...le-session-tabs-cold-serve-hydrate.spec.ts | 2 +- ...-session-tabs-duplicate-pty-repair.spec.ts | 2 +- ...session-tabs-headless-chat-rebuild.spec.ts | 2 +- .../mobile-session-tabs-part-04.spec.ts | 9 +- .../mobile-session-tabs-part-07.spec.ts | 7 +- .../mobile-session-tabs-part-09.spec.ts | 4 +- .../mobile-session-tabs-part-11.spec.ts | 2 +- .../mobile-session-tabs-part-14.spec.ts | 2 +- ...obile-session-tabs-split-agent-tab.spec.ts | 2 +- ...nal-creation-and-readiness-part-05.spec.ts | 2 +- ...l-handles-and-agent-status-part-03.spec.ts | 2 +- ...output-and-worker-recovery-part-02.spec.ts | 2 +- ...output-and-worker-recovery-part-03.spec.ts | 2 +- ...output-and-worker-recovery-part-04.spec.ts | 2 +- ...output-and-worker-recovery-part-05.spec.ts | 2 +- ...output-and-worker-recovery-part-06.spec.ts | 2 +- .../window-authority.spec.ts | 2 +- .../worktree-ps-agent-wait.spec.ts | 2 +- ...worktree-setup-and-startup-part-04.spec.ts | 7 +- .../worktree-setup-single-creator.spec.ts | 4 +- ...chestration-mailbox-cold-park-idle.spec.ts | 2 +- ...ation-mailbox-transport-settlement.spec.ts | 2 +- .../codex-reconnect-failed-dispatch.test.ts | 2 +- .../crew/crew-follow-up-authority-inputs.ts | 2 +- .../orchestration/crew/crew-parent-inputs.ts | 2 +- .../crew/crew-recipient-inputs.ts | 2 +- .../orchestration/crew/crew-source-inputs.ts | 2 +- .../crew/crew-workspace-names.ts | 2 +- src/main/runtime/orchestration/db.ts | 1 - .../db/attempt-observation-types.ts | 5 +- .../db/attempt-outcome-projection.ts | 2 +- .../dispatch-context-store.ts | 2 +- .../db/dispatch-context/dispatch-lookup.ts | 2 +- .../db/dispatch-mailbox-selection.ts | 2 +- .../remote-dispatch-attachment-stop.ts | 2 +- .../foreign-direct-mailbox-routing.ts | 2 +- .../orchestration/db/pane-key-match.ts | 2 +- .../worker-terminal-attention-query.ts | 2 +- .../worker-terminal-listing.ts | 13 +-- .../orchestration/lifecycle-reconciliation.ts | 2 +- ...tweight-run-worker-exit-escalation.test.ts | 4 +- .../mailbox-pointer-delivery-contract.ts | 2 +- .../mailbox-pointer-pty-write.ts | 2 +- .../mailbox-pointer-stage.test.ts | 2 +- .../orchestration/mailbox-pointer-stage.ts | 12 ++- .../mailbox-pointer-submit.test.ts | 2 +- .../orchestration/mailbox-pointer-submit.ts | 2 +- .../mailbox-terminal-identity.ts | 2 +- ...tration-legacy-worker-terminal-recovery.ts | 7 +- .../orchestration-sender-name.ts | 5 +- .../orchestration/setup-completion-signal.ts | 2 +- .../structured-worker-group-addressing.ts | 2 +- ...rify-orchestration-compatibility-caller.ts | 2 +- .../write-orchestration-pointer-pty.ts | 8 +- .../terminal-pane-mail-routing.ts | 4 +- src/main/runtime/orchestration/types.ts | 2 +- .../orchestration/worker-turn-stops.test.ts | 2 +- ...retirement-proof-publication-order.spec.ts | 2 +- .../profile-session-store.test-fixture.ts | 2 +- .../runtime/pty-recorded-surface-topology.ts | 2 +- .../runtime/pty-shell-ownership-mirror.ts | 2 +- .../restored-editor-move-restart.test.ts | 2 +- .../restored-pane-hook-store-resume.test.ts | 2 +- src/main/runtime/rpc/errors.test.ts | 2 +- src/main/runtime/rpc/errors.ts | 4 +- .../methods/agent-launch-caller-selection.ts | 2 +- .../rpc/methods/agent-launch-failure-code.ts | 2 +- .../methods/agent-launch-instant-tab.test.ts | 2 +- .../methods/agent-launch-prompt-carry.test.ts | 2 +- .../rpc/methods/agent-launch-replay.test.ts | 2 +- .../methods/agent-launch-tab-publication.ts | 2 +- .../federated-worker-release-host.ts | 2 +- .../federation/federation-control.ts | 2 +- ...ederation-launched-agent-readiness.test.ts | 2 +- .../federation/federation-start-receipt.ts | 2 +- .../worker/worker-archive-read.ts | 2 +- .../worker/worker-release-completion.ts | 2 +- ...worker-release-runtime-incarnation.spec.ts | 2 +- .../worker/worker-start-receipt.ts | 2 +- .../worker/worker-stop-exit-race.test.ts | 2 +- .../orchestration/worker/worker-stop.ts | 2 +- .../session-tabs-retirement-proof-delta.ts | 2 +- .../rpc/methods/terminal-reveal.test.ts | 2 +- .../terminal/terminal-viewer-colors-method.ts | 2 +- .../methods/workspace-layout-apply.test.ts | 2 +- .../orchestration-legacy-process-identity.ts | 2 +- .../rpc/orchestration-mutation-receipt.ts | 2 +- ...stration-runtime-update-settlement.test.ts | 2 +- .../terminal-send-question-answered.test.ts | 2 +- src/main/runtime/run-terminal-shell-alone.ts | 4 +- .../runtime-agent-orchestration-projection.ts | 2 +- .../runtime-agent-sender-associations.ts | 2 +- .../runtime/runtime-agent-terminal-startup.ts | 2 +- ...time-desktop-pane-title-forwarding.test.ts | 2 +- .../runtime/runtime-durable-store-fixture.ts | 2 +- .../runtime/runtime-folder-worktree-create.ts | 2 +- .../runtime-graph-mirror-capture.test.ts | 2 +- src/main/runtime/runtime-layout-apply.ts | 2 +- ...ime-leaf-record-projection.test-fixture.ts | 2 +- .../runtime/runtime-leaf-record-projection.ts | 2 +- ...acy-worker-terminal-recovery-controller.ts | 2 +- ...rker-terminal-recovery-persistence.test.ts | 2 +- ...cy-worker-terminal-recovery-persistence.ts | 2 +- ...-legacy-worker-terminal-recovery-runner.ts | 2 +- ...runtime-local-worktree-terminal-startup.ts | 2 +- .../runtime-mobile-session-projection.ts | 2 +- ...time-mobile-session-result-finalization.ts | 2 +- src/main/runtime/runtime-notifier-contract.ts | 6 +- .../runtime-orchestration-sender-names.ts | 4 +- src/main/runtime/runtime-pane-admission.ts | 2 +- .../runtime-pty-controller-contract.ts | 8 +- .../runtime/runtime-pty-foreground-agent.ts | 2 +- src/main/runtime/runtime-reference-agents.ts | 2 +- .../runtime-terminal-agent-presence.ts | 2 +- .../runtime-terminal-agent-status-query.ts | 2 +- ...inal-orphan-adoption-duplicate-pty.test.ts | 2 +- .../runtime-terminal-orphan-adoption-plan.ts | 6 +- ...-terminal-orphan-adoption-rollback.test.ts | 2 +- .../runtime-terminal-orphan-adoption.ts | 2 +- ...e-terminal-orphan-session-adoption.test.ts | 2 +- ...untime-terminal-orphan-session-adoption.ts | 4 +- .../runtime/runtime-terminal-pane-identity.ts | 8 +- .../runtime-terminal-spawn-placement.ts | 4 +- .../runtime/runtime-terminal-state-records.ts | 6 +- .../runtime/runtime-terminal-visual-layout.ts | 2 +- .../runtime/runtime-terminal-writer.test.ts | 2 +- src/main/runtime/runtime-terminal-writer.ts | 4 +- .../runtime-workspace-session-controller.ts | 6 +- .../runtime/runtime-worktree-binding-index.ts | 4 +- .../runtime-worktree-lineage-controller.ts | 3 +- .../runtime-worktree-lineage-recording.ts | 8 +- .../runtime-worktree-lineage-resolution.ts | 6 +- .../runtime/runtime-worktree-path-identity.ts | 4 +- .../runtime/runtime-worktree-ps-activity.ts | 6 +- ...time-worktree-ps-unverifiable-terminals.ts | 2 +- .../runtime-worktree-pty-agent-sources.ts | 5 +- .../runtime-worktree-startup-failure.test.ts | 5 +- .../runtime-worktree-startup-readiness.ts | 2 +- .../runtime-worktree-status-projection.ts | 4 +- ...ructured-agent-session-restoration.test.ts | 2 +- ...ed-structured-agent-session-restoration.ts | 2 +- .../runtime/serve-browser-tab-layout.test.ts | 4 +- src/main/runtime/serve-browser-tab-layout.ts | 2 +- .../serve-browser-tabs-layout-owner.test.ts | 2 +- src/main/runtime/serve-browser-tabs.ts | 2 +- .../session-graph/session-graph-promotion.ts | 2 +- .../session-layout-apply.test-fixture.ts | 2 +- ...close-by-split-handle-layout-owner.test.ts | 4 +- .../close-mobile-row-in-main-layout.test.ts | 2 +- .../agent-session-resume-ownership.ts | 2 +- ...ld-headless-mobile-session-browser-tabs.ts | 2 +- .../projection/pane-sleeping-record.test.ts | 2 +- .../projection/pane-sleeping-record.ts | 7 +- .../prune-mobile-session-tab-group-layout.ts | 2 +- ...le-headless-mobile-session-browser-tabs.ts | 4 +- .../projection/restored-pane-materialize.ts | 2 +- .../resume-agent-session-in-workspace.ts | 2 +- .../sleep-record-pane-claim.test.ts | 2 +- .../projection/sleep-record-pane-claim.ts | 2 +- .../desktop-pane-title-forwarding.ts | 9 +- .../explicit-terminal-close-pty-stops.ts | 2 +- .../explicit-terminal-close-stops.ts | 2 +- ...dless-mobile-session-absorbed-rows.test.ts | 2 +- .../headless-pane-move-to-new-tab.ts | 6 +- .../session-tabs/headless-tab-properties.ts | 9 +- .../headless-terminal-tab-close.ts | 4 +- .../session-tabs/main-layout-renames.ts | 2 +- .../session-tabs/mobile-session-hydration.ts | 2 +- .../session-tabs/mobile-session-membership.ts | 2 +- .../mobile-session-preservation.ts | 2 +- .../mobile-session-reconciliation.ts | 2 +- .../paired-host-terminal-close.ts | 4 +- .../renderer-session-terminal-rescue.ts | 2 +- .../structured-session-tab-presentation.ts | 2 +- .../structured-session-tab-restoration.ts | 2 +- .../sidebar-inputs/desktop-sidebar-facts.ts | 2 +- .../orca-runtime-workspace-activity-facts.ts | 2 +- .../sidebar-inputs/workspace-viewers.ts | 2 +- .../structured-worker-identity.test.ts | 2 +- .../runtime/structured-worker-identity.ts | 6 +- .../runtime/terminal-agent-fenced-keys.ts | 2 +- .../terminal-agent-prompt-answer.test.ts | 2 +- ...minal-create-closed-tab-durability.test.ts | 2 +- src/main/runtime/terminal-foreground-group.ts | 2 +- .../terminal-intentional-stop-exit.test.ts | 2 +- .../terminal-leaf-tab-resolution.test.ts | 4 +- ...terminal-list-execution-host-scope.spec.ts | 2 +- ...inal-list-pending-pty-registration.test.ts | 2 +- .../terminal-list-stale-leaf-liveness.spec.ts | 2 +- .../terminal-list-surface-lost-orphan.spec.ts | 9 +- .../terminal-restore-record-seed.test.ts | 4 +- .../terminal-send-stale-leaf-liveness.test.ts | 2 +- .../terminal-start-failure-readiness.test.ts | 2 +- .../runtime/terminal-surface-close.test.ts | 2 +- src/main/runtime/terminal-surface-close.ts | 10 +-- .../runtime/terminal-view-attribute-store.ts | 2 +- src/main/runtime/terminal-wait-detection.ts | 2 +- src/main/runtime/terminal-wait-results.ts | 2 +- .../adopt-terminal-orphans-from-inventory.ts | 2 +- .../unshown-live-terminal-placement.ts | 4 +- .../driver/terminal-driver-resources.ts | 4 +- .../runtime/terminal/focus/focus-terminal.ts | 4 +- .../terminal/identity/pty-worktree-record.ts | 2 +- .../identity/terminal-identity-source.test.ts | 2 +- .../terminal/input/terminal-input-dispatch.ts | 2 +- .../mobile-terminal-chat-fork-create.ts | 2 +- .../launch/mobile-terminal-owned-create.ts | 2 +- .../terminal/launch/terminal-create.ts | 3 +- .../terminal/launch/terminal-split-in-main.ts | 4 +- .../launch/terminal-split-retry.test.ts | 2 +- .../terminal/launch/terminal-split-retry.ts | 2 +- .../launch/terminal-split-source-authority.ts | 4 +- .../terminal/launch/terminal-split-surface.ts | 2 +- .../launch/terminal-workspace-scope.ts | 11 +-- .../window-tab-start-layout-owner.test.ts | 2 +- .../agent-generated-tab-titles-runtime.ts | 5 +- .../layout/agent-generated-tab-titles.test.ts | 2 +- .../layout/pane-grid-recording.test.ts | 2 +- .../terminal/layout/pane-grid-recording.ts | 4 +- .../terminal/layout/terminal-input-floor.ts | 2 +- .../layout/terminal-resize-listeners.ts | 5 +- .../terminal/layout/terminal-view-presence.ts | 2 +- .../lifecycle/closed-pane-of-exited-pty.ts | 4 +- .../lifecycle/exited-split-pane-rule.ts | 2 +- .../pty-controller-inventory-refresh.ts | 7 +- .../terminal/lifecycle/pty-exit-lifecycle.ts | 14 ++-- .../lifecycle/pty-handle-invalidation.ts | 4 +- .../terminal/lifecycle/pty-registration.ts | 8 +- .../output/headless-terminal-state.ts | 5 +- .../terminal-orchestration-authority.ts | 4 +- .../terminal/query/pty-terminal-summary.ts | 8 +- .../query/terminal-identity-read-context.ts | 2 +- .../recovery/foreign-pane-bindings.ts | 4 +- .../recovery/layout-command-pane-starts.ts | 2 +- .../recovery/resolve-terminal-pane.ts | 2 +- .../terminal/recovery/restored-pane-start.ts | 2 +- .../recovery/shutdown-reconnect-facts.ts | 2 +- .../stop/hook-status-resume-records.ts | 4 +- .../stop/worktree-sleep-resume-recording.ts | 4 +- .../stop/worktree-sleep-resume-records.ts | 4 +- .../terminal/stop/worktree-terminal-stop.ts | 2 +- .../terminal/surface/main-pane-verdict.ts | 2 +- .../surface/main-terminal-surfaces.ts | 2 +- .../terminal/surface/pty-pane-query.ts | 6 +- .../terminal-surface-index-spill.test.ts | 2 +- .../surface/terminal-surface-index.ts | 2 +- .../terminal-surface-replies.test-fixture.ts | 2 +- .../terminal/view/mobile-terminal-surface.ts | 2 +- .../terminal/wait/terminal-idle-polls.ts | 2 +- .../wait/terminal-interactive-wait.ts | 2 +- .../wait/terminal-wait-blocked-checks.ts | 2 +- .../terminal/wait/terminal-wait-permission.ts | 4 +- .../runtime/tui-idle-codex-plan-menu.test.ts | 2 +- src/main/runtime/tui-idle-evidence.ts | 4 +- .../tui-idle-hook-lane-runtime.test.ts | 2 +- .../runtime/tui-idle-wait-test-harness.ts | 2 +- src/main/runtime/twin-repo-session-host.ts | 6 +- .../runtime/unstopped-pty-verification.ts | 6 +- .../workspace-layout-live-titles.test.ts | 2 +- .../runtime/workspace-layout-stream.test.ts | 2 +- ...rkspace-session-membership-scaling.test.ts | 2 +- ...e-session-terminal-membership-authority.ts | 4 +- ...ession-terminal-tab-retirement-identity.ts | 2 +- .../workspace-session-worktree-id.test.ts | 2 +- .../runtime/workspace-session-worktree-id.ts | 2 +- .../workspaces/known-workspace-file-target.ts | 2 +- ...act-persisted-terminal-surface-identity.ts | 4 +- .../restored-terminal-placement.ts | 7 +- .../session-hosts/get-runtime-id.ts | 5 +- .../workspace-file-session-targets.ts | 2 +- .../workspace-query-prototype.test.ts | 2 +- .../runtime/workspaces/workspace-selectors.ts | 2 +- src/main/runtime/worktree-pty-stop-verdict.ts | 2 +- .../wsl-moved-project-chat-runtime.test.ts | 2 +- src/main/server/serve-readiness.ts | 2 +- .../skills/claude-plugin-skill-sources-wsl.ts | 2 +- src/main/skills/skill-discovery-wsl.ts | 2 +- .../skills/skill-wsl-provider-detection.ts | 2 +- .../ssh-expired-lease-pane-readoption.test.ts | 2 +- .../ssh-hostile-host-managed-orcad.ts | 2 +- .../legacy-relay-bridge-leases.ts | 2 +- .../legacy-relay/legacy-relay-cli-caller.ts | 2 +- .../legacy-relay/legacy-relay-endpoints.ts | 2 +- .../ssh-host-relay-endpoint-census.ts | 2 +- .../ssh-relay-endpoint-incumbent.ts | 2 +- .../ssh-relay-endpoint-pty-count.ts | 2 +- .../ssh/orcad-bash-stdio-bridge-test-host.ts | 2 +- src/main/ssh/orcad-exited-own-lock.ts | 2 +- .../ssh/orcad-initial-activation-admission.ts | 2 +- src/main/ssh/orcad-launch-ssh-session.ts | 2 +- src/main/ssh/orcad-migration-bridged-panes.ts | 2 +- .../ssh/orcad-migration-delta-move.test.ts | 2 +- .../ssh/orcad-migration-path-rewrite.test.ts | 2 +- src/main/ssh/orcad-migration-path-rewrite.ts | 2 +- .../orcad-migration-source-retention.test.ts | 2 +- .../ssh/orcad-migration-source-retention.ts | 2 +- ...rcad-migration-stuck-host-profiles.test.ts | 4 +- src/main/ssh/orcad-remote-deploy.test.ts | 4 +- src/main/ssh/orcad-snapshot-room.test.ts | 4 +- .../ssh/orcad-update-admission-fence.test.ts | 9 +- src/main/ssh/relay-daemon-service-children.ts | 2 +- ...gent-hook-interrupt-reconciliation.test.ts | 2 +- src/main/ssh/ssh-exec-stdin-file-transfer.ts | 2 +- src/main/ssh/ssh-login-shell-command.ts | 2 +- .../ssh/ssh-multiplexer-transport-writer.ts | 5 +- .../ssh/ssh-posix-command-wrapper.test.ts | 2 +- src/main/ssh/ssh-posix-command-wrapper.ts | 2 +- src/main/ssh/ssh-proxy-command.ts | 2 +- src/main/ssh/ssh-remote-commands.ts | 11 ++- src/main/ssh/ssh-remote-directory-browse.ts | 2 +- .../ssh/ssh-remote-node-toolchain-probe.ts | 2 +- .../system-ssh-file-binary-transfer.ts | 2 +- .../system-ssh-file-transfer.ts | 2 +- .../targets/ssh-target-id-migration.test.ts | 4 +- .../ssh/targets/ssh-target-id-migration.ts | 2 +- .../targets/ssh-target-orcad-dependents.ts | 2 +- src/main/startup/hydrate-shell-path.ts | 2 +- .../source-control-agent-cli-path.test.ts | 2 +- .../source-control-wsl-launch.test.ts | 2 +- .../linux-package-install-command.test.ts | 2 +- .../linux-package-install-command.ts | 2 +- src/main/window/runtime-window-lifecycle.ts | 2 +- .../window/terminal-pane-reveal-relay.test.ts | 2 +- src/main/window/terminal-pane-reveal-relay.ts | 6 +- .../terminal-tab-close-request-relay.ts | 6 +- .../windows/windows-msys-job.win32.test.ts | 2 +- src/main/workspace-hooks/hooks-runner.test.ts | 2 +- .../workspace-hooks/setup-hook-env-vars.ts | 2 +- .../removal/local-worktree-filesystem.ts | 2 +- .../worktree-removal-close-records.test.ts | 2 +- ...-removal-session-partition-fencing.test.ts | 2 +- src/main/wsl/execution/wsl-bash-command.ts | 2 +- .../wsl/execution/wsl-guest-pane-processes.ts | 2 +- .../wsl/filesystem/wsl-directory-upload.ts | 2 +- .../wsl-drive-unc-conversion-stores.ts | 2 +- .../wsl-drive-unc-identity-rewrite.ts | 2 +- .../filesystem/wsl-drive-unc-state-rewrite.ts | 2 +- .../wsl-host-uninstall-server-stop.ts | 2 +- .../wsl-orcad-chat-provider-fixture.ts | 2 +- .../__tests__/wsl-orcad-chat-windows-decoy.ts | 2 +- .../__tests__/wsl-orcad-midturn-stop-lane.ts | 2 +- .../wsl-orcad-scripted-provider-chat.ts | 2 +- .../wsl-orcad-structured-chat-contract.ts | 2 +- src/main/wsl/orcad/wsl-orcad-active-probe.ts | 2 +- .../orcad/wsl-orcad-connect-state-snapshot.ts | 2 +- .../wsl/orcad/wsl-orcad-instance-adoption.ts | 2 +- ...rcad-real-distro-idle-release-lane.test.ts | 2 +- .../wsl/orcad/wsl-orcad-slot-process-probe.ts | 2 +- src/preload/api-types.ts | 6 +- src/preload/api/app-api.ts | 2 +- src/preload/api/preflight-api.ts | 2 +- src/preload/api/pty-api.ts | 14 ++-- src/preload/api/pty-bridge-session-control.ts | 15 ++-- .../pty-bridge-stream-and-serialization.ts | 4 +- src/preload/api/shell-api.ts | 8 +- src/preload/api/shell-bridge.ts | 2 +- ...ui-bridge-clipboard-and-window-controls.ts | 2 +- .../ui-bridge-terminal-and-session-tabs.ts | 6 +- src/preload/api/ui-command-event-api.ts | 10 +-- src/preload/api/workspace-session-api.ts | 4 +- .../src/app-shell/AppBackgroundServices.tsx | 2 +- .../app-command-handlers-tab-rename.test.ts | 9 +- ...reconcile-hydrated-workspace-tab-models.ts | 2 +- .../startup-window-frame-parity.test.ts | 2 +- ...-window-parity-differences.test-fixture.ts | 2 +- .../app-shell/startup-window-parity.test.ts | 2 +- .../startup-window-view.test-fixture.ts | 4 +- .../attention/notification-subject-owner.ts | 4 +- .../ClaudeAccountSwitchSessionTree.tsx | 2 +- .../src/components/TerminalTitlebarTabs.tsx | 2 +- .../ActivityPrototypePage-test-fixtures.ts | 4 +- .../activity/ActivityPrototypePage.test.ts | 4 +- ...vity-auto-mark-read-loop.react185.test.tsx | 4 +- .../activity/activity-event-build-cache.ts | 2 +- .../activity-event-builder-context.ts | 2 +- .../activity-event-builder-sources.ts | 8 +- ...ivity-event-builder.identity-reuse.test.ts | 15 ++-- .../activity/activity-event-builder.ts | 2 +- .../activity/activity-pane-events.ts | 2 +- .../activity/activity-search-query.test.tsx | 2 +- .../activity-terminal-portal-status.ts | 2 +- .../activity/activity-thread-actions.ts | 2 +- .../activity/activity-thread-presentation.ts | 2 +- .../activity/activity-thread-types.ts | 2 +- .../activity/dev-activity-fixture.test.ts | 2 +- .../activity/dev-activity-fixture.ts | 4 +- .../agent-child-row-parity.test.tsx | 2 +- .../agent-default-env-draft.ts | 2 +- .../automations/automation-run-open-target.ts | 8 +- .../automations/automation-run-pane-layout.ts | 2 +- ...run-workspace-action.paired-server.test.ts | 2 +- .../automation-run-workspace-action.ts | 2 +- .../browser-address-bar-suggestions.ts | 2 +- .../history/browser-history-view-rows.ts | 2 +- .../use-remote-browser-page-navigation.ts | 2 +- .../cmd-j/palette-live-status.test.tsx | 4 +- .../components/cmd-j/palette-live-status.tsx | 11 ++- .../dashboard/DashboardAgentRow.test.tsx | 2 +- ...estination-navigation.integration.test.tsx | 2 +- .../dashboard/agent-row-lineage-model.test.ts | 2 +- .../agent-row-pane-live-title.test.ts | 2 +- .../dashboard/agent-row-pane-live-title.ts | 2 +- ...dashboard-bucket-counts.allocation.test.ts | 4 +- ...ashboard-bucket-counts.equivalence.test.ts | 4 +- ...ashboard-snapshot-folder-workspace.test.ts | 4 +- ...ard-snapshot-orchestration-routing.test.ts | 4 +- ...uild-dashboard-snapshot.rows-cache.test.ts | 4 +- .../build-dashboard-snapshot.test.ts | 4 +- .../dashboard/build-dashboard-snapshot.ts | 2 +- .../dashboard/dashboard-card-labels.ts | 4 +- .../use-agent-row-conversation-name.ts | 2 +- .../components/dashboard/useDashboardData.ts | 2 +- .../useLiveDashboardSnapshot.test.ts | 4 +- .../dashboard/useRetainedAgents.test.ts | 4 +- .../components/dashboard/useRetainedAgents.ts | 4 +- .../dashboard/useRetainedAgentsSync.test.ts | 4 +- .../dashboard/worktree-agent-rows-cache.ts | 5 +- .../buffer-text/editor-buffer-sharing.test.ts | 2 +- .../kernel/ipynb-kernel-setup-commands.ts | 2 +- .../ReviewNotesSendMenuContent.test.tsx | 2 +- .../FloatingTerminalPanel.behavior.test.tsx | 2 +- .../floating-terminal-panel-test-fixtures.ts | 2 +- .../floating-terminal-panel-test-harness.ts | 6 +- .../floating-workspace-surface-model.test.ts | 2 +- .../use-floating-workspace-chrome-model.ts | 2 +- ...tiveChatVisualGuestThemePublisher.test.tsx | 4 +- .../NativeChatVisualGuestThemePublisher.tsx | 2 +- ...ve-chat-agent-message-sender-view.test.tsx | 2 +- .../native-chat/native-chat-file-link.test.ts | 2 +- .../native-chat-floating-file-drop.test.tsx | 2 +- .../native-chat/native-chat-leaf-routing.ts | 2 +- .../native-chat/native-chat-open-wake.test.ts | 2 +- .../native-chat/native-chat-open-wake.ts | 2 +- .../native-chat-owner-selectors.test.tsx | 2 +- ...native-chat-runtime-owner-selector.test.ts | 2 +- .../native-chat-runtime-owner.test.ts | 2 +- .../native-chat-workspace-test-fixtures.ts | 2 +- .../structured-attention-surface.ts | 2 +- .../structured-child-records-switch.test.tsx | 2 +- .../use-native-chat-toggle-shortcut.ts | 2 +- .../onboarding/agent-picked-payload.ts | 2 +- .../CrewAgentIcons.test.tsx | 6 +- .../TerminalCrewPortals.test.tsx | 4 +- .../TerminalCrewPortals.tsx | 2 +- .../orchestration-panel-enabled.test.tsx | 2 +- .../use-terminal-crew-identity.ts | 2 +- .../ai-vault-original-pane.test.ts | 2 +- .../right-sidebar/ai-vault-original-pane.ts | 7 +- .../checks-panel-terminal-worktree.ts | 2 +- .../SshHostRecoverServerAction.tsx | 2 +- .../WorkspaceAttachmentOrigins.test.tsx | 2 +- .../sidebar/WorkspaceAttachmentOrigins.tsx | 4 +- ...rdAgents.acknowledgement-emphasis.test.tsx | 2 +- .../WorktreeCardAgents.activation.test.tsx | 4 +- .../sidebar/WorktreeCardAgents.test.tsx | 2 +- .../sidebar/WorktreeCardHelpers.tsx | 2 +- .../sidebar/WorktreeCardSubagents.fixture.tsx | 2 +- ....lineage-agent-expansion-coupling.test.tsx | 2 +- .../sidebar/activate-retained-agent-row.ts | 4 +- .../agent-send-picker-collapse.test.tsx | 2 +- .../sidebar/compute-visible-worktrees.ts | 2 +- .../sidebar/desktop-workspace-row-facts.ts | 2 +- .../sidebar/focused-agent-row-highlight.ts | 2 +- .../sidebar/host-section-reveal.test.tsx | 2 +- ...mirrored-terminal-lineage.test-fixture.tsx | 5 +- .../sidebar/prompt-cache-timer-selection.ts | 4 +- .../rendered-sidebar-worktree-order.test.ts | 2 +- .../title-derived-pane-agent-identity.ts | 4 +- .../use-worktree-activity-status.test.tsx | 7 +- .../sidebar/use-worktree-agent-activation.ts | 2 +- ...worktree-agent-rows-subscriptions.test.tsx | 2 +- .../sidebar/useWorktreeAgentRows.test.ts | 7 +- .../visible-worktree-activity-inputs.test.ts | 2 +- .../visible-worktree-activity-inputs.ts | 2 +- .../sidebar/visible-worktree-indexes.test.ts | 8 +- .../sidebar/visible-worktrees.test.ts | 2 +- .../workspace-view-evaluator-parity.test.ts | 2 +- .../worktree-agent-activity-summary.test.ts | 4 +- .../worktree-agent-live-index-patch.ts | 2 +- .../sidebar/worktree-agent-models.test.tsx | 2 +- ...worktree-agent-orchestration-batch.test.ts | 4 +- ...worktree-agent-orchestration-index.test.ts | 4 +- .../worktree-agent-orchestration-index.ts | 2 +- .../worktree-agent-remote-attribution.test.ts | 4 +- .../worktree-agent-row-fallback-tab.ts | 2 +- .../worktree-agent-row-selectors.test.ts | 4 +- .../sidebar/worktree-agent-row-selectors.ts | 4 +- .../sidebar/worktree-agent-row-type.ts | 2 +- .../components/sidebar/worktree-agent-rows.ts | 4 +- .../worktree-card-status-inputs.test.ts | 2 +- .../sidebar/worktree-card-status-inputs.ts | 4 +- .../listing/host-status-test-fixtures.ts | 2 +- .../worktree-list/listing/use-section-rows.ts | 2 +- .../rows/section-header-create-host.test.tsx | 2 +- .../sidebar/worktree-open-failure-toast.ts | 2 +- .../worktree-sidebar-running-children.test.ts | 2 +- .../sidebar/worktree-subagent-child-rows.ts | 2 +- ...worktree-title-classification-work.test.ts | 17 ++-- .../worktree-title-derived-agent-rows.test.ts | 9 +- .../worktree-title-derived-agent-rows.ts | 7 +- .../mergeSnapshotAndSessions.test.ts | 5 +- .../status-bar/mergeSnapshotAndSessions.ts | 4 +- .../resource-pty-view-model.test.ts | 4 +- .../status-bar/resource-pty-view-model.ts | 7 +- .../resource-pty-virtualization.test.tsx | 2 +- .../resource-session-bindings.test.ts | 5 +- .../status-bar/resource-session-bindings.ts | 11 ++- .../resource-session-inventory-cache.ts | 11 ++- .../resource-session-inventory.test.ts | 2 +- .../status-bar/resource-session-inventory.ts | 2 +- .../resource-session-kill-confirmation.ts | 2 +- .../status-bar/resource-session-labels.ts | 5 +- .../status-bar/resource-session-navigation.ts | 2 +- .../status-bar/resource-usage-merge-types.ts | 11 ++- .../use-resource-pty-actions.test.tsx | 4 +- .../status-bar/use-resource-pty-actions.ts | 2 +- .../use-resource-session-inventory.ts | 2 +- .../use-resource-usage-actions.test.tsx | 3 +- .../status-bar/use-resource-usage-actions.ts | 10 ++- .../use-resource-usage-derived-model.test.tsx | 2 +- .../use-resource-usage-derived-model.ts | 10 ++- .../workspace-space-decision-details.ts | 2 +- .../workspace-space-decision-inputs.ts | 2 +- .../workspace-space-presentation.ts | 4 +- .../tab-bar/CliChatResumeMenuItems.tsx | 2 +- .../src/components/tab-bar/SortableTab.tsx | 4 +- .../SortableTab.update-depth-probe.test.tsx | 5 +- .../tab-bar/SortableTabContextMenu.tsx | 2 +- .../src/components/tab-bar/TabBar.fixture.tsx | 2 +- .../TabBarCreateEntry.keyboard.test.tsx | 2 +- .../TabSessionSurfaceSwitchMenuItems.tsx | 2 +- .../tab-bar/TerminalSortableTab.tsx | 2 +- .../tab-bar/TerminalTabLeadingIcon.tsx | 4 +- .../tab-bar/cli-chat-resume-close-terminal.ts | 4 +- .../tab-bar/cli-chat-resume-run.test.ts | 2 +- .../components/tab-bar/cli-chat-resume-run.ts | 2 +- .../tab-bar/native-chat-tab-agent-evidence.ts | 2 +- .../tab-bar/open-tab-entry-dedupe.ts | 2 +- .../src/components/tab-bar/open-tab-search.ts | 2 +- .../tab-bar/tab-agent-types-by-tab-id.test.ts | 2 +- .../tab-bar/tab-agent-types-by-tab-id.ts | 2 +- .../components/tab-bar/tab-bar-item-model.ts | 2 +- .../src/components/tab-bar/tab-bar-props.ts | 2 +- .../tab-create-entry-history-placement.ts | 2 +- .../tab-bar/tab-session-history-switch.ts | 2 +- .../terminal-tab-activity-status.test.ts | 2 +- .../tab-bar/terminal-tab-activity-status.ts | 10 ++- .../terminal-tab-spinner-launch-agent.test.ts | 2 +- .../tab-bar/use-allow-auto-close.ts | 2 +- .../tab-bar/use-open-tab-search.test.ts | 2 +- .../use-tab-bar-item-projection.test.tsx | 2 +- .../tab-bar/use-terminal-tab-activity.ts | 2 +- .../tab-group/useTabGroupItemProjections.ts | 2 +- .../useTabGroupWorkspaceModel.focus.test.ts | 2 +- .../tab-group/useTabGroupWorkspaceModel.ts | 2 +- .../ClaudeDiffPanelNoticeBanner.tsx | 2 +- .../terminal-pane/ClaudeOldTerminalBanner.tsx | 2 +- .../terminal-pane/CodexSharedServerBanner.tsx | 2 +- .../terminal-pane/NewerDaemonHoldBanner.tsx | 2 +- .../terminal-pane/TerminalErrorToast.test.ts | 4 +- .../terminal-pane/TerminalOverlaySlot.tsx | 2 +- .../TerminalPaneHeaderOverlay.test.tsx | 2 +- .../TerminalPaneHeaderOverlay.tsx | 2 +- .../TerminalPaneNativeChatPortal.tsx | 2 +- .../TerminalPaneOverlayLayer.tsx | 2 +- .../TerminalPaneSleepingPortals.tsx | 2 +- .../terminal-pane/TerminalPaneSurface.tsx | 2 +- .../TerminalSessionStateSaveFailureDialog.tsx | 2 +- .../terminal-pane/WorkerAutoCloseBanner.tsx | 2 +- .../WslDistroStoppedHoldCard.tsx | 2 +- ...-coordinator-hook-title-precedence.test.ts | 2 +- ...on-coordinator-monitoring-turn-end.test.ts | 2 +- ...ordinator-pending-title-inspection.test.ts | 2 +- ...letion-coordinator-process-cadence.test.ts | 2 +- ...dinator-queued-inspection-disposal.test.ts | 2 +- ...ent-completion-coordinator-test-harness.ts | 2 +- .../agent-completion-coordinator-types.ts | 2 +- .../agent-completion-inspection-result.ts | 13 ++- ...ent-completion-no-evidence-cadence.test.ts | 2 +- .../agent-completion-process-monitor.ts | 4 +- ...-completion-stale-evidence-backoff.test.ts | 9 +- .../agent-launch-pane-notice-text.ts | 2 +- .../agent-pre-ready-typed-draft.test.ts | 2 +- .../claude-detached-pane-restart.test.ts | 2 +- .../claude-diff-panel-notice-banner.test.tsx | 2 +- .../claude-old-terminal-banner.test.tsx | 2 +- .../claude-side-question-completion.test.ts | 2 +- .../closed-terminal-leaf-notice.test.ts | 2 +- .../codex-detached-pane-restart.ts | 18 ++-- .../codex-shared-server-banner.test.tsx | 2 +- .../command-code-output-ownership.ts | 2 +- .../deferred-split-pane-handoff.test.ts | 2 +- .../deferred-split-pane-handoff.ts | 9 +- .../detached-pane-restart-spawn-context.ts | 2 +- .../focus-terminal-pane-event.test.ts | 2 +- .../host-scrollback-mount.test.ts | 2 +- ...ane-startup-color-reply-leak.repro.test.ts | 2 +- .../layout-serialization.test.ts | 2 +- .../terminal-pane/layout-serialization.ts | 4 +- .../leaf-scrollback-resolution.test.ts | 2 +- .../leaf-scrollback-resolution.ts | 6 +- .../legacy-relay-bridge-panes.ts | 2 +- .../terminal-pane/located-codex-pane.ts | 8 ++ .../newer-daemon-hold-banner.test.tsx | 2 +- .../notification-dispatch-test-harness.ts | 6 +- .../pane-account-restart-readiness.ts | 2 +- .../pane-foreground-agent-tracker-contract.ts | 2 +- .../pane-foreground-agent-tracker.ts | 4 +- .../pane-foreground-process-reader.ts | 6 +- .../terminal-pane/pane-helpers.test.ts | 3 +- .../components/terminal-pane/pane-helpers.ts | 2 +- ...e-title-update-global-scan-budget.test.tsx | 2 +- .../parked-terminal-buffer-capture.test.ts | 2 +- .../parked-terminal-buffer-capture.ts | 2 +- .../parked-terminal-byte-watcher.ts | 2 +- .../parked-terminal-command-status.ts | 2 +- ...rked-terminal-tab-capture-episodes.test.ts | 2 +- .../pending-pane-close-confirmation.test.ts | 2 +- .../pending-split-close-test-fixture.ts | 2 +- .../pty-agent-pane-launch.test.ts | 2 +- ...ty-connection-agent-session-resume.spec.ts | 7 +- ...nnection-cold-restore-agent-resume.spec.ts | 2 +- ...ection-cold-restore-resume-command.spec.ts | 2 +- ...onnection-command-finished-cleanup.spec.ts | 2 +- ...nection-command-finished-late-done.test.ts | 2 +- ...ction-command-input-agent-identity.spec.ts | 2 +- ...tion-deferred-reattach-live-output.spec.ts | 2 +- ...onnection-foreground-agent-routing.spec.ts | 2 +- ...nnection-foreground-agent-sampling.spec.ts | 2 +- ...connection-foreground-process-exit.spec.ts | 2 +- ...on-foreground-routing-confirmation.spec.ts | 2 +- ...nnection-git-bash-console-capacity.test.ts | 2 +- ...-hibernation-kill-shell-foreground.test.ts | 2 +- ...ty-connection-hidden-codex-queries.spec.ts | 2 +- ...y-connection-hidden-output-restore.spec.ts | 2 +- ...-connection-hidden-sleeping-resume.spec.ts | 7 +- ...n-hook-completion-bell-arbitration.spec.ts | 7 +- ...ction-hook-completion-side-effects.spec.ts | 2 +- ...y-connection-hook-idle-arbitration.test.ts | 2 +- ...pty-connection-interrupt-inference.spec.ts | 7 +- ...nection-main-side-effect-authority.spec.ts | 2 +- ...ction-notification-settings-gating.spec.ts | 7 +- .../pty-connection-preconnect-input.test.ts | 2 +- ...connection-process-exit-row-retire.test.ts | 4 +- .../pty-connection-pty-exit-teardown.spec.ts | 2 +- ...y-connection-remote-runtime-attach.spec.ts | 2 +- ...ection-runtime-owner-spawn-routing.spec.ts | 7 +- ...-connection-sleeping-resume-banner.spec.ts | 7 +- ...ty-connection-spawn-deferred-sleep.test.ts | 11 ++- ...onnection-startup-command-delivery.spec.ts | 2 +- ...-connection-startup-draft-delivery.spec.ts | 2 +- ...-connection-task-complete-dispatch.spec.ts | 2 +- ...y-connection-terminal-input-gating.spec.ts | 2 +- ...connection-test-exited-split-pane-close.ts | 2 +- ...onnection-test-main-pane-start-fixtures.ts | 2 +- .../pty-connection-test-store-state.ts | 2 +- ...ty-connection-typed-agent-identity.spec.ts | 2 +- .../terminal-pane/pty-connection-types.ts | 2 +- ...nnection-unanswered-command-finish.spec.ts | 2 +- ...-connection-windows-keyboard-reset.spec.ts | 2 +- .../command-inferred-pane-agent.ts | 2 +- .../confirmed-shell-agent-title.ts | 2 +- .../pty-connection/connect-pane-pty.ts | 2 +- .../deferred-session-reattach-choice.ts | 8 +- .../disposed-spawn-retention.test.ts | 5 +- .../foreground-output-refresh.ts | 2 +- .../hidden-output-restore-drain.ts | 2 +- .../pty-connection/live-data-callback.ts | 2 +- .../main-pane-resume-banner.test.ts | 2 +- .../pty-connection/main-pane-start-request.ts | 2 +- .../pty-connection/main-resumed-sleep-pane.ts | 2 +- .../paired-parked-terminal-restore.ts | 2 +- .../pty-connection/pane-transport-options.ts | 2 +- .../park-reveal-snapshot-verdict.ts | 2 +- .../pty-connection/pty-exit-hibernate.ts | 2 +- .../pty-connection/pty-kitty-file-reader.ts | 2 +- .../pty-connection/remote-program-redraw.ts | 2 +- .../pty-connection/shell-command-inference.ts | 2 +- .../pty-connection/sleeping-record-access.ts | 2 +- .../pty-connection/spawn-deferred-sleep.ts | 2 +- .../pty-connection/terminal-keydown-fit.ts | 2 +- .../pty-connection/terminal-tab-id.ts | 2 +- .../transport-output-callbacks.ts | 2 +- .../pty-input-write-queue.test.ts | 3 +- .../terminal-pane/pty-output-processor.ts | 2 +- .../terminal-pane/pty-pre-handler-buffer.ts | 2 +- .../pty-renderer-delivery-claims.ts | 2 +- .../pty-transport-connect-spawn.test.ts | 7 +- .../pty-transport-spawn-errors.test.ts | 2 +- .../terminal-pane/pty-transport-types.ts | 4 +- ...remote-layout-scrollback-retention.test.ts | 2 +- .../remote-layout-scrollback-retention.ts | 2 +- .../remote-pane-layout-push.test.ts | 2 +- .../terminal-pane/remote-pane-layout-push.ts | 4 +- ...-pty-transport-stopped-host-reopen.test.ts | 2 +- .../remote-runtime-pty-transport.ts | 4 +- ...mote-runtime-saved-result-consumer.test.ts | 2 +- .../components/terminal-pane/replay-guard.ts | 2 +- .../replayed-scrollback-store-release.test.ts | 2 +- .../replayed-scrollback-store-release.ts | 2 +- .../sleeping-record-park-exemption.ts | 5 +- .../terminal-pane/stale-agent-row.ts | 2 +- .../terminal-agent-paste-bracketing.ts | 2 +- .../terminal-agent-session-continuation.ts | 2 +- .../terminal-agent-session-fork.ts | 2 +- .../terminal-attention-surface.test.ts | 2 +- .../terminal-attention-surface.ts | 2 +- ...terminal-chat-ownership-lifecycle.test.tsx | 7 +- ...al-cold-park-exempt-flip.react185.test.tsx | 2 +- ...-cold-park-pre-gate-loop.react185.test.tsx | 2 +- ...k-subscription-narrowing.react185.test.tsx | 2 +- ...-park-tab-model-identity.react185.test.tsx | 2 +- .../terminal-cold-park-timer-rearm.test.tsx | 2 +- .../terminal-cold-park-verdict-loop.test.tsx | 2 +- .../terminal-cold-park-withheld-tabs.ts | 2 +- .../terminal-delivery-watchdog.test.ts | 2 +- .../terminal-delivery-watchdog.ts | 4 +- .../terminal-drop-path-writer.ts | 3 +- .../terminal-error-accumulation.test.ts | 2 +- .../terminal-error-accumulation.ts | 2 +- .../terminal-freeze-breadcrumbs.ts | 2 +- .../terminal-pane/terminal-handle-copy.ts | 2 +- .../terminal-hidden-view-parking.ts | 4 +- ...terminal-hidden-worktree-retention.test.ts | 2 +- .../terminal-hidden-worktree-retention.ts | 4 +- .../terminal-pane/terminal-input-activity.ts | 2 +- .../terminal-keyboard-runtime.ts | 2 +- .../terminal-layout-leaf-detach.ts | 2 +- .../terminal-layout-leaf-ids.test.ts | 2 +- .../terminal-pane/terminal-layout-leaf-ids.ts | 9 +- ...erminal-layout-pty-ownership-depth.test.ts | 4 +- .../terminal-layout-pty-ownership.test.ts | 4 +- ...erminal-live-layout-reconciliation.test.ts | 2 +- .../terminal-live-layout-reconciliation.ts | 4 +- .../terminal-notification-state.ts | 4 +- ...minal-pane-attention-subscriptions.test.ts | 2 +- .../terminal-pane-attention-subscriptions.ts | 2 +- .../terminal-pane-close-identity.ts | 2 +- .../terminal-pane-detach-layout-owner.test.ts | 2 +- .../terminal-pane-detach-layout-owner.ts | 2 +- .../terminal-pane-element-file-drop.test.tsx | 2 +- ...terminal-pane-frame-reconciliation.test.ts | 2 +- .../terminal-pane-frame-reconciliation.ts | 4 +- ...erminal-pane-layout-owner-gestures.test.ts | 2 +- .../terminal-pane-layout-owner-gestures.ts | 2 +- .../terminal-pane-layout-snapshot-merge.ts | 2 +- .../terminal-pane-lifecycle-primitives.ts | 12 ++- .../terminal-pane-lifecycle-types.ts | 2 +- .../terminal-pane-menu-copy-actions.ts | 2 +- .../terminal-pane-mount-events.ts | 2 +- .../terminal-pane-owner-context.ts | 2 +- .../terminal-pane-pane-closed.ts | 2 +- .../terminal-pane-pane-created.ts | 2 +- .../terminal-pane/terminal-pane-recovery.ts | 17 ++-- .../terminal-pane-spawn-placement.test.ts | 2 +- .../terminal-pane-spawn-placement.ts | 2 +- .../terminal-pane-split-in-main.test.ts | 2 +- .../terminal-pane-surface-ownership.test.ts | 4 +- .../terminal-pane-tab-detach-commit.test.ts | 2 +- .../terminal-pane-tab-detach-fixture.ts | 5 +- ...minal-pane-tab-detach-main.test-fixture.ts | 2 +- ...minal-pane-tab-detach-runtime-host.test.ts | 2 +- .../terminal-pane/terminal-pane-tab-detach.ts | 6 +- ...park-verdict-worktree-driver-loop.test.tsx | 2 +- .../terminal-parked-pty-watcher.ts | 4 +- .../terminal-parked-tab-watchers.ts | 2 +- .../terminal-parked-watcher-reconciliation.ts | 2 +- .../terminal-pending-startup-park-presence.ts | 2 +- .../terminal-recovery-ledger-test-store.ts | 2 +- ...render-desync-evidence-persistence.test.ts | 2 +- .../terminal-retention-churn-pins.test.tsx | 2 +- .../terminal-retention-exempt-growth.test.ts | 2 +- .../terminal-shutdown-layout-capture.test.ts | 2 +- .../terminal-shutdown-layout-capture.ts | 4 +- .../terminal-spawn-error-display.test.ts | 2 +- .../terminal-spawn-error-display.ts | 2 +- .../terminal-pane/terminal-tab-lookup.test.ts | 2 +- .../terminal-pane/terminal-tab-lookup.ts | 2 +- .../terminal-tab-park-candidates.ts | 2 +- .../terminal-title-evidence.test.ts | 2 +- .../terminal-pane/terminal-title-evidence.ts | 2 +- .../terminal-pane/use-host-pane-title-sync.ts | 2 +- .../use-layout-owner-pane-tree.test.ts | 2 +- ...-watcher-synchronization.react185.test.tsx | 5 +- ...parked-terminal-watcher-synchronization.ts | 5 +- .../use-terminal-pane-chat-state.ts | 2 +- .../use-terminal-pane-close-actions.ts | 2 +- .../use-terminal-pane-context-menu.ts | 2 +- .../use-terminal-pane-file-drop-owner.ts | 2 +- .../use-terminal-pane-layout-persistence.ts | 4 +- .../use-terminal-pane-process-exit-actions.ts | 2 +- .../use-terminal-pane-projection.ts | 2 +- .../use-terminal-pane-reconciliation.ts | 2 +- .../use-terminal-pane-title-effects.ts | 2 +- .../use-terminal-pane-title-state.ts | 2 +- .../use-terminal-park-verdict-pin.ts | 2 +- .../use-terminal-tab-cold-parking.test.ts | 4 +- .../use-terminal-tab-cold-parking.ts | 2 +- ...minal-parked-watcher-sync-entries.test.tsx | 2 +- .../terminal-parking-pass-candidates.ts | 2 +- ...terminal-startup-hold-placeholder.test.tsx | 2 +- ...ive-terminal-repair-loop.react185.test.tsx | 2 +- .../terminal/active-terminal-repair.ts | 2 +- ...cold-activation-deferral-stranding.test.ts | 2 +- .../terminal/pty-running-work-probe.ts | 7 +- .../startup-terminal-tab-hold.test.ts | 2 +- .../terminal/terminal-close-copy-kind.ts | 2 +- ...al-provider-snapshot-bound-pty-ids.test.ts | 2 +- ...erminal-provider-snapshot-bound-pty-ids.ts | 2 +- ...terminal-tab-actions-unified-close.test.ts | 2 +- ...erminal-tab-actions-unrouted-close.test.ts | 2 +- .../terminal/terminal-tab-actions.test.ts | 2 +- .../terminal/terminal-tab-actions.ts | 2 +- ...terminal-tab-close-running-confirm.test.ts | 2 +- .../terminal-worktree-prewarm-targets.ts | 2 +- .../terminal/terminal-worktree-prewarm.ts | 2 +- .../terminal/use-active-terminal-repair.ts | 2 +- .../terminal/use-terminal-worktree-prewarm.ts | 2 +- .../components/use-terminal-close-actions.ts | 2 +- .../use-terminal-watcher-effects.ts | 2 +- .../use-terminal-workspace-foundation.ts | 2 +- ...kspace-cleanup-removal.agent-stop.test.tsx | 2 +- ...eJumpPalette.recent-tabs.behavior.test.tsx | 2 +- .../WorktreeJumpPalette.recent-tabs.test.tsx | 2 +- .../use-worktree-jump-palette-recent-tabs.ts | 2 +- ...jump-palette-interleaved-sections.test.tsx | 2 +- .../worktree-jump-palette-test-fixtures.ts | 4 +- .../WslMoveOrchestratorStatusLine.tsx | 2 +- .../wsl-move/wsl-move-scope-rows.ts | 4 +- .../wsl-move/wsl-move-slept-pane-bindings.ts | 2 +- ...tion-background-turn-notifications.test.ts | 2 +- ...gent-hook-completion-fresh-working.test.ts | 2 +- ...hook-completion-grok-notifications.test.ts | 2 +- .../agent-hook-completion-notifications.ts | 4 +- .../hooks/agent-hook-turn-end-ownership.ts | 2 +- .../hooks/automation-dispatch-completion.ts | 2 +- ...events-agent-status-store-test-fixtures.ts | 2 +- .../ipc-events-close-routing-test-harness.ts | 2 +- .../hooks/ipc-events-harness-store-state.ts | 2 +- .../agent-status-event-applicator.ts | 2 +- ...tatus-pane-routing-index-retention.test.ts | 2 +- .../agent-status-pane-routing-index.test.ts | 2 +- .../agent-status-pane-routing-index.ts | 4 +- .../agent-status-program-status-only.test.ts | 2 +- ...atus-reconnect-replay-notification.test.ts | 2 +- .../hooks/ipc-events/agent-status-routing.ts | 2 +- ...nt-status-terminal-title-tab-write.test.ts | 4 +- .../ipc-events/launch-recipe-registration.ts | 2 +- .../ipc-events/terminal-command-state.ts | 2 +- .../terminal-pane-reveal-ipc-bridge.ts | 4 +- .../terminal-pane-title-ipc-bridge.ts | 4 +- ...pc-tab-switch-structured-tab-cycle.test.ts | 2 +- .../legacy-worker-terminal-recovery-event.ts | 2 +- src/renderer/src/hooks/pane-key-pty-id.ts | 2 +- ...ts-agent-status-snapshot-hydration.test.ts | 4 +- ...pcEvents-terminal-create-surfacing.test.ts | 2 +- .../useReadOnScreenAttention.away.test.ts | 2 +- ...seReadOnScreenAttention.clock-skew.test.ts | 2 +- ...adOnScreenAttention.floating-panel.test.ts | 2 +- ...dOnScreenAttention.mixed-workspace.test.ts | 2 +- .../hooks/useReadOnScreenAttention.test.ts | 2 +- ...e-agent-note-send-target-detection.test.ts | 2 +- .../active-agent-note-send-test-harness.ts | 2 +- .../src/lib/active-agent-note-target.ts | 6 +- .../src/lib/activity-thread-display.ts | 2 +- .../lib/adopt-agent-background-session-tab.ts | 6 +- .../lib/agent-account-restart-startup.test.ts | 2 +- .../src/lib/agent-account-restart-startup.ts | 2 +- .../src/lib/agent-background-session-exit.ts | 2 +- src/renderer/src/lib/agent-catalog.tsx | 2 +- .../src/lib/agent-followup-delivery.ts | 2 +- ...nt-hibernation-coordinator-test-fixture.ts | 5 +- .../lib/agent-hibernation-pane-age.test.ts | 5 +- .../src/lib/agent-hibernation-pane-age.ts | 7 +- .../lib/agent-hibernation-pane-eligibility.ts | 7 +- .../lib/agent-hibernation-planner-snapshot.ts | 5 +- .../src/lib/agent-hibernation-planner.test.ts | 5 +- .../src/lib/agent-hibernation-planner.ts | 2 +- .../src/lib/agent-launch-route-input.ts | 2 +- .../src/lib/agent-launch-tab-main-written.ts | 2 +- src/renderer/src/lib/agent-ready-wait.ts | 2 +- ...ured-agent-session-provisional-tab.test.ts | 2 +- .../src/lib/agent-startup-delayed-delivery.ts | 2 +- .../lib/agent-status-connection-ownership.ts | 2 +- .../src/lib/agent-status-pane-ownership.ts | 2 +- src/renderer/src/lib/agent-status.ts | 2 +- .../src/lib/ai-vault-tab-title-requests.ts | 4 +- .../ai-vault-tab-title-sync-inputs.test.ts | 2 +- .../src/lib/ai-vault-tab-title-sync-inputs.ts | 2 +- .../src/lib/ai-vault-tab-title-sync.test.ts | 2 +- .../lib/automation-session-observer.test.ts | 2 +- .../src/lib/automation-session-reuse.ts | 4 +- ...omation-terminal-bind-layout-owner.test.ts | 2 +- .../src/lib/automation-terminal-ownership.ts | 4 +- src/renderer/src/lib/claude-agent-row-view.ts | 2 +- .../lib/claude-session-account-move.test.ts | 4 +- .../src/lib/claude-session-account-move.ts | 17 ++-- .../src/lib/claude-session-pane-holders.ts | 2 +- ...host-qualified-candidate-ownership.test.ts | 2 +- .../src/lib/codex-pane-restart-eligibility.ts | 9 +- .../src/lib/codex-pane-selection-lane.ts | 4 +- src/renderer/src/lib/codex-session-restart.ts | 14 ++-- .../lib/command-code-prompt-status-seed.ts | 2 +- ...ault-terminal-tabs-applied-persist.test.ts | 2 +- ...finished-agent-resume-resurrection.test.ts | 2 +- .../lib/host-mirror-handle-gap-resume.test.ts | 2 +- ...st-mirror-handle-gap-verdict-union.test.ts | 2 +- .../src/lib/host-mirrored-pane-liveness.ts | 7 +- .../host-mirrored-pane-resume-replay.test.ts | 2 +- .../lib/launch-agent-background-session.ts | 2 +- ...h-agent-in-new-tab-host-resolution.test.ts | 2 +- .../launch-agent-in-new-tab-test-fixture.ts | 2 +- ...h-agent-in-new-tab-windows-quoting.test.ts | 2 +- .../launch-agent-in-new-tab.test-fixture.ts | 2 +- ...unch-agent-structured-chat-test-fixture.ts | 4 +- .../src/lib/launch-agent-web-host-tab.ts | 2 +- .../src/lib/notes-send-agent-targets.ts | 6 +- .../lib/open-located-agent-message-sender.ts | 2 +- .../src/lib/open-tab-occupant-agent.ts | 6 +- .../paired-runtime-closed-tab-resume.test.ts | 8 +- src/renderer/src/lib/pane-agent-evidence.ts | 4 +- .../lib/pane-manager/mint-stable-pane-id.ts | 2 +- .../src/lib/pane-manager/pane-dom-creation.ts | 2 +- .../pane-manager/pane-drag-reorder.test.ts | 2 +- .../lib/pane-manager/pane-drop-no-op.test.ts | 2 +- .../pane-manager/pane-identity-registry.ts | 5 +- .../lib/pane-manager/pane-key-resolution.ts | 2 +- .../pane-layout-geometry-apply.test.ts | 6 +- .../pane-layout-geometry-apply.ts | 4 +- .../lib/pane-manager/pane-manager-types.ts | 4 +- .../src/lib/pane-manager/pane-manager.ts | 5 +- .../pane-tree-match-moves.test.ts | 6 +- .../lib/pane-manager/pane-tree-match-moves.ts | 2 +- .../pane-viewport-present-lifetime.test.ts | 2 +- ...ewport-present-synchronized-output.test.ts | 2 +- ...rminal-scroll-intent-key-retention.test.ts | 10 ++- .../pane-manager/windows-pty-compatibility.ts | 5 +- .../src/lib/recent-workspace-tab-rows.ts | 2 +- ...eeping-agent-session-deferred-pane.test.ts | 2 +- ...ping-agent-session-live-ssh-dedupe.test.ts | 2 +- ...eping-agent-session-provider-claim.test.ts | 4 +- ...ping-agent-session-retired-binding.test.ts | 2 +- ...-agent-session-slept-pane-recovery.test.ts | 2 +- ...eping-agent-session-stranded-sleep.test.ts | 2 +- ...-agent-session-suppress-navigation.test.ts | 2 +- .../lib/resume-sleeping-agent-session.test.ts | 4 +- .../src/lib/resume-sleeping-agent-session.ts | 2 +- ...ume-stale-structured-agent-session.test.ts | 2 +- .../lib/retracted-host-pane-resume.test.ts | 2 +- src/renderer/src/lib/reveal-terminal-pane.ts | 2 +- src/renderer/src/lib/running-agent-targets.ts | 4 +- ...sktop-promotion-session-continuity.test.ts | 2 +- .../src/lib/session-write-subscriber.ts | 2 +- ...etup-split-activation-single-owner.test.ts | 6 +- .../src/lib/sleeping-agent-pane-ownership.ts | 9 +- .../src/lib/sleeping-agent-wake-requests.ts | 5 +- ...uctured-agent-synthetic-sleeping-record.ts | 2 +- .../src/lib/tab-agent-status-index.test.ts | 9 +- .../src/lib/tab-agent-status-index.ts | 4 +- src/renderer/src/lib/tab-agent.ts | 6 +- src/renderer/src/lib/terminal-close-route.ts | 2 +- .../src/lib/terminal-pane-placement-row.ts | 4 +- .../src/lib/terminal-reveal-identity.ts | 2 +- src/renderer/src/lib/unread-badge-count.ts | 2 +- ...ab-agent-observed-signal-dispatch.test.tsx | 9 +- ...se-tab-agent-opencode-native-title.test.ts | 11 ++- .../lib/use-tab-agent-process-signals.test.ts | 6 +- src/renderer/src/lib/use-tab-agent.test.ts | 9 +- src/renderer/src/lib/use-tab-agent.ts | 6 +- ...leeping-agents-live-unmounted-pane.test.ts | 4 +- ...eb-runtime-worktree-terminal-after-wake.ts | 2 +- .../workspace-attachment-observed-origin.ts | 4 +- .../workspace-session-browser-history.test.ts | 2 +- .../src/lib/workspace-session-browser-tabs.ts | 2 +- .../lib/workspace-session-close-intents.ts | 2 +- .../lib/workspace-session-focus-recency.ts | 2 +- .../workspace-session-host-contention.test.ts | 6 +- .../lib/workspace-session-host-contention.ts | 8 +- ...kspace-session-host-emptied-fields.test.ts | 2 +- .../lib/workspace-session-host-hydration.ts | 4 +- ...workspace-session-host-persistence.test.ts | 4 +- .../lib/workspace-session-host-persistence.ts | 8 +- .../src/lib/workspace-session-host-split.ts | 6 +- .../lib/workspace-session-hydration-keys.ts | 6 +- .../src/lib/workspace-session-patch.ts | 8 +- .../workspace-session-reconnect-targets.ts | 2 +- .../lib/workspace-session-sleeping-agents.ts | 2 +- ...space-session-ssh-partition-attribution.ts | 4 +- ...ce-session-ssh-partition-ownership.test.ts | 4 +- ...e-session-ssh-partition-round-trip.test.ts | 4 +- .../src/lib/workspace-session-unified-tabs.ts | 2 +- src/renderer/src/lib/workspace-session.ts | 8 +- .../workspace-tab-palette-entry-builder.ts | 2 +- .../src/lib/workspace-tab-palette-results.ts | 2 +- .../src/lib/workspace-tab-palette-search.ts | 7 +- .../lib/worktree-activation-pty-inventory.ts | 5 +- .../lib/worktree-activation-store-contract.ts | 2 +- .../worktree-activation-web-runtime.test.ts | 5 +- .../src/lib/worktree-activity-state.ts | 2 +- .../src/lib/worktree-agent-activation-gate.ts | 16 ++-- ...gent-live-surface-adoption-cli-tab.test.ts | 2 +- ...live-surface-adoption-layout-owner.test.ts | 9 +- .../worktree-agent-live-surface-adoption.ts | 4 +- .../src/lib/worktree-creation-agent-seeds.ts | 2 +- .../lib/worktree-initial-terminal-seeding.ts | 2 +- .../worktree-live-terminal-surface-owners.ts | 6 +- ...ivation-preserved-pane-replacement.test.ts | 2 +- ...rktree-status-spinner-launch-agent.test.ts | 5 +- src/renderer/src/lib/worktree-status.test.ts | 2 +- src/renderer/src/lib/worktree-status.ts | 2 +- .../runtime/agent-sender-alias-projection.ts | 7 +- .../client-hosted-browser-close-intents.ts | 2 +- .../runtime/close-mirrored-editor-tab.test.ts | 2 +- .../src/runtime/close-mirrored-editor-tab.ts | 2 +- .../host-session-mirror-frame-fixtures.ts | 4 +- ...sion-mirror-frame-ordering-test-harness.ts | 2 +- ...host-terminal-scrollback-hydration.test.ts | 2 +- .../host-terminal-scrollback-hydration.ts | 2 +- ...nverifiable-agent-row-presentation.test.ts | 4 +- .../src/runtime/layout-owner-pane-intents.ts | 2 +- .../legacy-chat-rename-migration.test.tsx | 4 +- ...local-structured-session-tabs-sync.test.ts | 2 +- .../main-loaded-layout-frames.test-fixture.ts | 2 +- .../mirrored-agent-status-clock-skew.test.ts | 4 +- ...paired-agent-row-turn-outcome-arms.test.ts | 4 +- ...ired-reconnect-sidebar-agent-count.test.ts | 4 +- ...inal-tab-close-environment-removal.test.ts | 2 +- .../paired-terminal-tab-close-intents.ts | 2 +- .../paired-terminal-tab-close-reload.test.ts | 4 +- .../src/runtime/pending-pane-title-renames.ts | 2 +- ...e-agent-row-last-assistant-message.test.ts | 4 +- ...mote-runtime-terminal-multiplexer-types.ts | 2 +- ...te-runtime-terminal-response-controller.ts | 2 +- .../remote-terminal-layout-resolution.ts | 2 +- .../restored-editor-move-reload.test.ts | 4 +- .../runtime-host-account-sign-in-client.ts | 2 +- .../runtime-terminal-input-recording.ts | 2 +- .../runtime/runtime-terminal-inspection.ts | 7 +- .../runtime-terminal-verified-input.ts | 4 +- .../src/runtime/server-held-panes.test.tsx | 4 +- src/renderer/src/runtime/server-held-panes.ts | 4 +- .../src/runtime/server-layout-apply.test.ts | 4 +- .../src/runtime/server-layout-apply.ts | 2 +- .../server-layout-editor-handover.test.ts | 2 +- .../runtime/server-layout-frame-ids.test.ts | 4 +- .../src/runtime/server-layout-frame-ids.ts | 4 +- .../server-layout-frames-handover.test.ts | 2 +- .../server-layout-frames-held-tabs.test.ts | 2 +- .../src/runtime/server-layout-frames.test.ts | 2 +- ...ession-tab-rows-main-window-parity.test.ts | 2 +- .../structured-chat-host-permission.test.ts | 2 +- .../sync-runtime-graph-parked-leaf.test.ts | 2 +- .../sync-runtime-graph-scheduling.test.ts | 2 +- .../sync-runtime-graph/graph-publication.ts | 4 +- .../mirrored-editor-tab-persistence.test.ts | 2 +- .../mobile-session-capture.ts | 2 +- .../mobile-session-inputs.ts | 2 +- .../mobile-session-surfaces.ts | 4 +- .../mobile-session-terminal-tabs.ts | 6 +- .../sync-runtime-graph/sync-projections.ts | 2 +- .../src/runtime/sync-runtime-graph/types.ts | 2 +- .../src/runtime/web-runtime-leaf-move.ts | 6 +- ...eb-runtime-plain-terminal-create-params.ts | 2 +- ...runtime-session-tab-activate-close.test.ts | 2 +- .../web-runtime-session-tab-lifecycle.ts | 2 +- .../runtime/web-runtime-session-tab-move.ts | 5 +- ...e-session-terminal-pane-delegation.test.ts | 2 +- .../src/runtime/web-runtime-split-focus.ts | 5 +- .../runtime/web-runtime-split-source-pty.ts | 2 +- .../runtime/web-runtime-terminal-actions.ts | 7 +- .../web-runtime-terminal-create-operation.ts | 2 +- .../runtime/web-runtime-terminal-creation.ts | 2 +- .../runtime/web-runtime-terminal-identity.ts | 2 +- ...b-runtime-terminal-placement-settlement.ts | 2 +- .../runtime/web-runtime-terminal-rename.ts | 7 +- .../runtime/web-session-close-replay.test.ts | 4 +- .../src/runtime/web-session-close-replay.ts | 2 +- ...sion-restored-placeholder-identity.test.ts | 2 +- ...ssion-split-pane-retirement-fences.test.ts | 2 +- ...abs-agent-completion-notifications.test.ts | 4 +- ...-tabs-retired-epoch-census-repair.test.tsx | 2 +- ...ssion-tabs-stream-end-resubscribe.test.tsx | 2 +- ...eb-session-tabs-sync-agent-handoff.test.ts | 2 +- ...web-session-tabs-sync-agent-status.test.ts | 2 +- ...on-tabs-sync-completion-on-reveal.test.tsx | 2 +- ...web-session-tabs-sync-focus-intent.test.ts | 2 +- ...ync-host-tab-retraction-ghost-rows.test.ts | 4 +- ...-session-tabs-sync-mirror-identity.test.ts | 2 +- ...abs-sync-remote-main-agent-verdict.test.ts | 4 +- ...tabs-sync-remote-status-title-flap.test.ts | 4 +- ...b-session-tabs-sync-sleep-activity.test.ts | 2 +- ...eb-session-tabs-sync-stale-spinner.test.ts | 4 +- ...ssion-tabs-sync-terminal-mirroring.test.ts | 6 +- ...ession-tabs-sync-tracking-teardown.test.ts | 2 +- ...on-tabs-sync-visibility-collision.test.tsx | 4 +- .../src/runtime/web-session-tabs-sync.test.ts | 2 +- .../agent-status-patch.ts | 4 +- .../agent-status-primitives.ts | 15 +++- .../apply-preparation-base.ts | 2 +- .../apply-preparation-groups.ts | 2 +- .../apply-preparation-unified.ts | 2 +- .../apply-terminal-records.ts | 2 +- .../frame-drawn-server-workspaces.test.ts | 4 +- .../frame-drawn-workspace-status-patch.ts | 2 +- .../host-retired-terminal-rows.ts | 5 +- .../web-session-tabs-sync/layout-groups.ts | 4 +- .../mirror-row-ownership.ts | 2 +- .../mirrored-status-tab-retractions.ts | 4 +- .../mirrored-terminal-handle-index.ts | 2 +- .../retraction-pane-ownership.test.ts | 4 +- .../retraction-pane-ownership.ts | 2 +- .../runtime-pane-title-patch.ts | 2 +- .../state-equality-tabs.ts | 9 +- .../runtime/web-session-tabs-sync/state.ts | 5 +- .../web-session-tabs-sync/tab-builders.ts | 2 +- .../web-session-tabs-sync/terminal-build.ts | 9 +- .../terminal-surfaces.ts | 9 +- ...ession-terminal-orphan-recovery-options.ts | 10 +++ ...b-session-terminal-orphan-recovery-pane.ts | 2 +- ...ion-terminal-orphan-recovery-sleep.test.ts | 2 +- ...-terminal-orphan-recovery-surface-index.ts | 2 +- ...ession-terminal-orphan-recovery-surface.ts | 7 +- .../web-session-terminal-orphan-recovery.ts | 14 ++-- .../web-session-terminal-orphan-topology.ts | 4 +- ...n-terminal-recovery-snapshot-validation.ts | 2 +- ...ession-terminal-retirement-proof-ledger.ts | 2 +- ...eb-session-visible-tab-pick-report.test.ts | 2 +- .../web-session-visible-tab-pick-report.ts | 5 +- .../workspace-layout-frame-apply-observer.ts | 2 +- .../workspace-layout-frame-binding.test.ts | 2 +- .../runtime/workspace-layout-frame-builds.ts | 2 +- .../workspace-layout-frame-held-tabs.test.ts | 4 +- .../workspace-layout-frame-records.test.ts | 2 +- .../workspace-layout-frame-sync.test.ts | 2 +- .../runtime/workspace-layout-frame-sync.ts | 10 ++- .../workspace-layout-frame-tab-props.test.ts | 2 +- .../always-mounted-selector-scan-cost.test.ts | 5 +- .../editor-buffer-record-lifecycle.test.ts | 2 +- .../floating-workspace-panel-selector.ts | 2 +- .../repo-removal-host-twin-attribution.ts | 2 +- .../wsl-moved-local-session-rows.test.ts | 4 +- .../repos/wsl-moved-local-session-rows.ts | 8 +- .../src/store/repos/wsl-moved-projects.ts | 6 +- src/renderer/src/store/selectors.test.ts | 2 +- src/renderer/src/store/selectors.ts | 2 +- .../store/slices/active-tab-owner-worktree.ts | 2 +- .../slices/agent-generated-tab-title.test.ts | 2 +- .../store/slices/agent-pane-authority.test.ts | 2 +- .../src/store/slices/agent-pane-authority.ts | 2 +- .../agent-status-capacity-eviction.ts | 2 +- .../agent-status/agent-status-contract.ts | 2 +- .../agent-status-pane-key-tab-binding.ts | 2 +- .../agent-status-provider-session.test.ts | 2 +- .../agent-status-row-order-origin.test.ts | 2 +- .../agent-status-sleeping-records.ts | 2 +- .../agent-status-verdict-copies.test.ts | 2 +- .../agent-status-worktree-purge-leak.test.ts | 2 +- .../slices/agent-status/agent-status.test.ts | 2 +- .../slices/browser-page-conversion.test.ts | 2 +- .../browser-workspace-doc-location.test.ts | 2 +- .../slices/browser/browser-history-actions.ts | 7 +- .../slices/browser/browser-hydration-state.ts | 6 +- .../browser/browser-page-state-actions.ts | 2 +- .../slices/browser/browser-slice-contract.ts | 4 +- .../slices/degraded-repo-hydration.test.ts | 2 +- .../slices/editor-hydration-scaling.test.ts | 2 +- .../editor-session-duplicate-restore.test.ts | 2 +- .../actions/hydrated-editor-session-state.ts | 2 +- .../file-ids/hydrated-editor-file-ids.ts | 2 +- .../slices/editor/types/editor-git-slice.ts | 2 +- ...ut-owner-written-session-hydration.test.ts | 2 +- .../local-detected-agent-store-state.ts | 2 +- .../src/store/slices/pane-foreground-agent.ts | 2 +- .../store/slices/repos-stale-fetch.spec.ts | 2 +- .../restored-editor-owner-reparent.test.ts | 2 +- ...host-purge-session-partition-split.test.ts | 2 +- ...erver-editor-file-restart-identity.test.ts | 2 +- .../store-session-terminal-reconnect.test.ts | 2 +- .../slices/store-session-test-harness.ts | 5 +- .../src/store/slices/tab-group-state.ts | 2 +- .../tabs-hydration-group-validation.test.ts | 2 +- .../tabs-hydration-main-load-drop.test.ts | 2 +- .../src/store/slices/tabs-hydration.test.ts | 2 +- .../src/store/slices/tabs-hydration.ts | 4 +- ...drated-workspace-reconciliation-fixture.ts | 2 +- .../store/slices/tabs/tabs-host-mirroring.ts | 2 +- .../store/slices/tabs/tabs-slice-contract.ts | 2 +- .../slices/tabs/worktree-layout-lifecycle.ts | 2 +- .../terminal-activation-spawn-suppression.ts | 2 +- .../src/store/slices/terminal-helpers.ts | 5 +- .../terminal-layout-pty-ownership.test.ts | 2 +- ...rminal-pane-detach-agent-retention.test.ts | 4 +- .../terminal-pty-identity-replacement.test.ts | 2 +- .../slices/terminal-session-row-hydration.ts | 9 +- .../slices/terminal-tab-title-batch.test.ts | 2 +- .../store/slices/terminal-tab-title-batch.ts | 7 +- ...ls-hydration-canonical-pty-overlap.test.ts | 4 +- ...terminals-hydration-canonical-rows.test.ts | 2 +- .../store/slices/terminals-hydration.test.ts | 2 +- .../store/slices/ui-agent-send-target.test.ts | 4 +- ...lice-agent-notification-acknowledgement.ts | 2 +- .../attention-removal-follow-up.ts | 7 +- .../workspace-live-markers.ts | 2 +- .../workspace-cleanup-agent-evidence.ts | 2 +- .../workspace-document-title-refresh.test.ts | 2 +- .../src/store/slices/worktree-helpers.ts | 4 +- .../slices/worktrees-slice-test-fixtures.ts | 2 +- ...trees-terminal-reference-admission.test.ts | 2 +- ...rktrees-terminal-reference-origins.test.ts | 2 +- .../create/worktree-create-parent-pick.ts | 3 +- .../create/worktree-create-payload.ts | 2 +- .../purged-structured-launch-retirement.ts | 2 +- .../wsl-moved-project-chat-hydration.test.ts | 2 +- ...aired-terminal-tab-close-intent-actions.ts | 2 +- .../restored-relay-session-identity.test.ts | 2 +- .../restored-terminal-rebind-restarts.test.ts | 2 +- .../src/store/terminals/terminal-actions.ts | 7 +- .../terminal-chat-pane-layout-owner.ts | 2 +- .../terminal-exited-pane-liveness.test.ts | 2 +- .../store/terminals/terminal-layout-state.ts | 6 +- .../terminals/terminal-pane-hibernation.ts | 2 +- .../terminals/terminal-pty-identities.ts | 10 ++- .../terminals/terminal-shutdown-guards.ts | 2 +- .../terminals/terminal-shutdown-state.ts | 2 +- .../terminals/terminal-sleep-layout-owner.ts | 2 +- .../terminal-startup-queue-restart.test.ts | 2 +- .../src/store/terminals/terminal-state.ts | 7 +- .../terminal-surface-close-intent.ts | 2 +- .../terminal-tab-agent-launch-pane.ts | 2 +- .../src/store/terminals/terminal-tab-close.ts | 2 +- ...erminal-tab-create-through-layout-owner.ts | 4 +- .../store/terminals/terminal-tab-creation.ts | 6 +- .../store/terminals/terminal-tab-location.ts | 2 +- .../terminals/terminal-tab-recovery-ledger.ts | 2 +- .../terminals/window-tab-start-in-main.ts | 6 +- .../workspace-terminal-active-tabs.ts | 4 +- .../workspace-terminal-hydration-patch.ts | 8 +- .../terminals/workspace-terminal-hydration.ts | 2 +- .../workspace-terminal-layout-plan.ts | 11 ++- .../workspace-terminal-reconnect-plan.ts | 2 +- .../terminals/workspace-terminal-reconnect.ts | 2 +- .../terminals/workspace-terminal-row-plan.ts | 6 +- .../workspace-terminal-ssh-placeholders.ts | 2 +- .../store/workspace-layout-frame-slices.ts | 2 +- ...workspace-layout-frame-store-patch.test.ts | 2 +- .../workspace-layout-frame-store-patch.ts | 2 +- .../workspace-layout-frame-store-view.ts | 4 +- .../src/web/preload-api/web-terminal-api.ts | 2 +- .../preload-api/web-workspace-session-api.ts | 2 +- src/renderer/src/web/web-workspace-session.ts | 2 +- .../agent-hook-listener/hook-envelope.ts | 2 +- ...t-hook-listener-claude-elicitation.test.ts | 2 +- ...ent-hook-listener-claude-subagents.test.ts | 2 +- ...-listener-claude-task-notification.test.ts | 2 +- ...nt-hook-listener-claude-turn-state.test.ts | 2 +- ...listener-startless-child-lifecycle.test.ts | 2 +- .../agent-hook-listener-test-harness.ts | 2 +- .../opencode-session-registry.ts | 2 +- .../presence/hook-process-root-evidence.ts | 2 +- ...agent-hook-session-binding.test-fixture.ts | 2 +- .../startup/agent-prompt-injection.ts | 2 +- .../agent-launch/startup/tui-agent-startup.ts | 2 +- .../agent-session-host-authority.ts | 4 +- .../view/agent-session-surface-tab-id.ts | 2 +- .../contracts/agent-status-types.ts | 2 +- .../agent-status-worktree-attribution.ts | 4 +- .../identity/pane-agent-identity-adapter.ts | 9 +- .../identity/pane-agent-identity-resolver.ts | 2 +- .../identity}/terminal-agent.ts | 2 +- .../agent-row-conversation-name.ts | 2 +- .../presentation/agent-type-icon-agent.ts | 2 +- .../process/agent-headless-command.ts | 2 +- .../process/agent-process-recognition.ts | 2 +- .../process}/shell-process-detection.test.ts | 0 .../process}/shell-process-detection.ts | 0 .../agent-status/title/agent-title-core.ts | 4 +- .../title/agent-title-evidence.ts | 2 +- .../title/agent-title-identity.ts | 2 +- .../title/agent-title-name-anchoring.ts | 2 +- .../agent-status/title/agent-title-owner.ts | 2 +- .../agent-status/title/agent-title-status.ts | 11 +-- .../title/providers/dsb-terminal-title.ts | 2 +- .../title}/terminal-title-agent-type.test.ts | 11 +-- .../title}/terminal-title-agent-type.ts | 22 ++--- .../terminal-title-classification-corpus.ts | 0 .../terminal-title-classification-memo.ts | 2 +- .../title}/terminal-title-wrapper-segments.ts | 0 .../resume/ai-vault-resume-command.ts | 2 +- src/shared/claimed-agent-pty-owner.ts | 4 +- .../claude-background-task-status.test.ts | 2 +- .../claude-subagent-row-lifecycle.test.ts | 2 +- .../codex-subagent-rollout-lifecycle.test.ts | 2 +- src/shared/constants.ts | 2 +- src/shared/ephemeral-vm-recipe-process.ts | 2 +- ...h-query-reply-child-stdin.node-pty.test.ts | 2 +- .../folder-workspace-types.ts | 6 -- .../git/commands/git-ssh-policy-env.test.ts | 2 +- src/shared/git/commands/git-ssh-policy-env.ts | 2 +- src/shared/image-path-paste.ts | 2 +- .../notification-attention-acknowledgement.ts | 2 +- .../orcad-migration-client-state-parsing.ts | 9 +- .../orcad-migration-client-state.ts | 2 +- ...gration-dormant-session-validation.test.ts | 4 +- ...ad-migration-dormant-session-validation.ts | 9 +- .../orcad-migration-manifest.ts | 2 +- .../orcad-migration-scrollback.ts | 2 +- .../orcad-migration-terminal-history.ts | 4 +- .../orcad-migration-terminal-restore-hints.ts | 2 +- src/shared/orcad-stale-lock-reclaim.ts | 2 +- src/shared/orchestration-worker-output.ts | 2 +- src/shared/pane-key-alias.test.ts | 2 +- src/shared/pane-key-alias.ts | 2 +- src/shared/persisted-state-types.ts | 5 +- src/shared/posix-command-path-lookup.ts | 2 +- .../terminal-agent-status-processor.test.ts | 0 .../terminal-agent-status-processor.ts | 15 ++-- src/shared/published-pane-agent-identity.ts | 2 +- .../remote-runtime-pty-id.test.ts | 2 +- ...nch-params.pre-observation.test-fixture.ts | 4 +- .../rpc-contract/agent-launch-params.ts | 4 +- .../rpc-contract/agent-session-params.ts | 2 +- .../session-tabs-schemas-params.ts | 2 +- .../rpc-contract/terminal-orphan-params.ts | 6 +- .../rpc-contract/workspace-layout-params.ts | 2 +- .../workspace-layout-sleep-wake-params.ts | 4 +- .../workspace-layout-terminal-tab-params.ts | 4 +- ...ate-params.pre-observation.test-fixture.ts | 2 +- .../rpc-contract/worktree-create-params.ts | 2 +- .../runtime-mobile-session-tab-contracts.ts | 2 +- src/shared/runtime-pane-title-leaf-id.test.ts | 2 +- src/shared/runtime-pane-title-leaf-id.ts | 7 +- src/shared/runtime-reference-contracts.ts | 2 +- src/shared/runtime-session-contracts.ts | 2 +- src/shared/runtime-terminal-contracts.ts | 10 +-- src/shared/runtime-terminal-send-contract.ts | 2 +- src/shared/setup-agent-sequencing.ts | 2 +- src/shared/setup-runner-command.ts | 5 +- .../launch}/shell-argument-quoting.ts | 0 .../launch}/shell-path-hydration-types.ts | 0 .../{ => shell/launch}/shell-path-quoting.ts | 0 .../launch}/terminal-default-shell.ts | 0 .../launch}/terminal-git-credential-guard.ts | 4 +- .../launch}/terminal-startup-cwd.test.ts | 4 +- .../launch}/terminal-startup-cwd.ts | 10 +-- .../{ => shell/opening}/shell-open-types.ts | 2 +- .../paired-server-activity-facts.test.ts | 2 +- .../paired-server-activity-facts.ts | 4 +- .../sidebar-list/smart-attention.test.ts | 2 +- src/shared/sidebar-list/smart-attention.ts | 4 +- src/shared/sidebar-list/smart-sort.test.ts | 4 +- src/shared/sidebar-list/smart-sort.ts | 2 +- src/shared/sleeping-record-legacy-pane-key.ts | 2 +- .../structured-session-notification-pane.ts | 2 +- src/shared/tab-agent-from-signals.ts | 6 +- src/shared/tab-title-resolution.ts | 2 +- .../telemetry-onboarding-event-schemas.ts | 5 +- .../queries/terminal-query-reply.test.ts | 2 +- .../pty-delivery-diagnostics.test.ts | 0 .../diagnostics}/pty-delivery-diagnostics.ts | 0 .../pty-renderer-delivery-health.ts | 0 .../pty-owner-color-query-colors.test.ts | 0 .../ingress}/pty-owner-color-query-colors.ts | 4 +- .../ingress}/pty-owner-color-query-replies.ts | 8 +- .../pty-reply-echo-shapes.node-pty.test.ts | 2 +- .../ingress}/pty-startup-ingress-contract.ts | 4 +- .../ingress}/pty-startup-ingress-intent.ts | 4 +- .../pty-startup-ingress-kitty.test.ts | 8 +- ...tartup-ingress-launcher-appearance.test.ts | 5 +- ...ty-startup-ingress-lifetime-colors.test.ts | 3 +- ...y-startup-ingress-live-query-reply.test.ts | 7 +- .../pty/ingress}/pty-startup-ingress.test.ts | 8 +- .../pty/ingress}/pty-startup-ingress.ts | 11 +-- .../pty/ingress}/pty-startup-query.ts | 4 +- .../ingress}/pty-startup-reply-delivery.ts | 4 +- .../pty-startup-reply-echo-shapes.test.ts | 0 .../ingress}/pty-startup-reply-echo-shapes.ts | 2 +- .../ingress}/terminal-query-reply-delivery.ts | 2 +- .../pty-consumer-session-contract.ts | 0 .../lifecycle}/pty-creation-disposition.ts | 0 .../pty/lifecycle}/pty-fenced-termination.ts | 0 .../pty/lifecycle}/pty-incarnation.ts | 0 .../pty/lifecycle}/pty-listed-session.ts | 0 .../lifecycle}/pty-liveness-verdict.test.ts | 0 .../pty/lifecycle}/pty-liveness-verdict.ts | 0 .../pty/lifecycle}/pty-owner-backend.test.ts | 0 .../pty/lifecycle}/pty-owner-backend.ts | 0 .../lifecycle}/pty-running-work-probe.test.ts | 0 .../pty/lifecycle}/pty-running-work-probe.ts | 2 +- .../pty/lifecycle}/pty-session-id-format.ts | 2 +- .../pty/lifecycle}/pty-write-settlement.ts | 0 .../pty/lifecycle}/terminal-attach-result.ts | 0 .../terminal-attachment-launch-result.ts | 10 +-- .../pty/lifecycle}/terminal-execution-host.ts | 6 +- .../lifecycle}/terminal-exit-cause.test.ts | 0 .../pty/lifecycle}/terminal-exit-cause.ts | 0 .../terminal-foreground-observation.ts | 0 .../pty/lifecycle}/terminal-owner.ts | 0 .../lifecycle}/terminal-process-inspection.ts | 2 +- .../terminal-send-acknowledgment.ts | 0 .../lifecycle}/terminal-spawn-error-copy.ts | 0 .../terminal-spawn-resource-error.ts | 0 .../pty/lifecycle}/terminal-spawn-response.ts | 0 .../lifecycle}/terminal-start-failure.test.ts | 0 .../pty/lifecycle}/terminal-start-failure.ts | 0 .../pty-process-ceiling-state.ts | 0 .../pty-slave-line-discipline-echo.test.ts | 0 .../pty-slave-line-discipline-echo.ts | 0 .../shell-process-readiness.test.ts | 0 .../shell-process-readiness.ts | 8 +- .../twin-repo-host-routing.test-fixture.ts | 2 +- .../closed-terminal-panes.ts | 0 .../closed-terminal-tab-tombstones.test.ts | 0 .../closed-terminal-tab-tombstones.ts | 2 +- .../headless-phone-layout.test-fixture.ts | 2 +- .../legacy-terminal-row-claims.ts | 6 +- .../old-client-method-translation.ts | 6 +- ...old-client-pane-layout-translation.test.ts | 2 +- .../old-client-pane-layout-translation.ts | 2 +- ...ssion-tabs-projection-owned-editor.test.ts | 2 +- .../old-client-session-tabs-projection.ts | 4 +- .../paired-terminal-tab-close-intent.ts | 0 .../workspace-layout/split-ratio-intents.ts | 2 +- .../stable-pane-id.test.ts | 0 .../{ => workspace-layout}/stable-pane-id.ts | 0 .../terminal-layout-equality.ts | 0 .../terminal-layout-leaf-retirement.ts | 0 .../terminal-layout-pty-ownership.ts | 0 .../terminal-layout-snapshot-schema.ts | 2 +- .../terminal-leaf-move.test.ts | 0 .../terminal-leaf-move.ts | 0 .../terminal-owner-invariants.ts | 6 +- .../terminal-pane-layout-tree.ts | 0 .../terminal-pane-placement.test.ts | 0 .../terminal-pane-placement.ts | 3 +- .../terminal-pane-reveal.ts | 2 +- .../terminal-pane-title-reset.test.ts | 0 .../terminal-pane-title-reset.ts | 2 +- .../terminal-pane-title-sanitization.test.ts | 0 .../terminal-pane-title-sanitization.ts | 0 .../workspace-layout/terminal-pane-tree.ts | 4 +- .../terminal-retirement-proof-ledger.ts | 2 +- .../terminal-reveal-identity.ts | 0 .../terminal-row-order.test.ts | 4 +- .../workspace-layout/terminal-row-order.ts | 2 +- .../terminal-split-outcome.ts | 0 .../terminal-surface-close-target.test.ts | 0 .../terminal-surface-close-target.ts | 0 .../terminal-surface-id.ts | 0 .../terminal-surface-tombstone-schema.ts | 0 .../terminal-tab-close.ts | 4 +- .../terminal-tab-id-schema.ts | 0 .../{ => workspace-layout}/terminal-tab-id.ts | 0 .../workspace-layout/terminal-tab-ordinal.ts | 2 +- .../terminal-tab-types.ts | 6 +- .../unattached-terminal-row-sweep.ts | 6 +- .../workspace-layout-beside.ts | 9 +- ...orkspace-layout-cold-local.test-fixture.ts | 4 +- ...rkspace-layout-command-persistence.test.ts | 2 +- .../workspace-layout-command-types.ts | 2 +- .../workspace-layout-disk-fields.ts | 6 +- .../workspace-layout-dropped-leaves.ts | 2 +- ...workspace-layout-editor-duplicates.test.ts | 2 +- ...workspace-layout-editor-file-owner.test.ts | 7 +- ...rkspace-layout-editor-open-file-id.test.ts | 2 +- .../workspace-layout-editor-open-file-id.ts | 2 +- .../workspace-layout-editor-tab-file.ts | 2 +- .../workspace-layout-fact-locations.test.ts | 2 +- .../workspace-layout-folded-rows.ts | 4 +- ...pace-layout-legacy-profile.test-fixture.ts | 2 +- .../workspace-layout-load-bindings.ts | 4 +- ...rkspace-layout-load-browser-repair.test.ts | 2 +- ...orkspace-layout-load-duplicate-pty.test.ts | 2 +- ...orkspace-layout-load-normalization.test.ts | 2 +- .../workspace-layout-load-report.ts | 2 +- .../workspace-layout-load-retirement.ts | 4 +- ...e-layout-load-synthetic-pane-title.test.ts | 4 +- .../workspace-layout-load-tabs.ts | 2 +- .../workspace-layout-load-types.ts | 4 +- ...rkspace-layout-load-view-less-tabs.test.ts | 2 +- .../workspace-layout-load-workspace.ts | 10 +-- .../workspace-layout/workspace-layout-load.ts | 4 +- .../workspace-layout-minted-ids.test.ts | 2 +- .../workspace-layout-model.ts | 10 +-- .../workspace-layout-owned-editor-id.test.ts | 4 +- .../workspace-layout-process-exit.ts | 2 +- .../workspace-layout-profile.test-fixture.ts | 2 +- .../workspace-layout-published.ts | 2 +- .../workspace-layout-record-patch.test.ts | 2 +- .../workspace-layout-record-patch.ts | 2 +- .../workspace-layout-recorded-key-order.ts | 2 +- .../workspace-layout-records.test.ts | 2 +- .../workspace-layout-records.ts | 2 +- .../workspace-layout-resume-record.test.ts | 2 +- .../workspace-layout-round-trip-check.ts | 2 +- .../workspace-layout-round-trip.test.ts | 2 +- .../workspace-layout-rule-types.ts | 2 +- .../workspace-layout-save-tabs.ts | 2 +- .../workspace-layout/workspace-layout-save.ts | 11 ++- .../workspace-layout-session.test-fixture.ts | 4 +- .../workspace-layout-tab-host.ts | 2 +- .../workspace-layout-view-tab-closes.ts | 2 +- .../workspace-layout-views-owned-file.test.ts | 2 +- src/shared/workspace-scope.ts | 7 +- .../client-hosted-browser-close-intent.ts | 0 .../client-hosted-browser-page-record.ts | 0 ...erminal-session-state-save-failure.test.ts | 0 .../terminal-session-state-save-failure.ts | 2 +- .../workspace-doc-history.test.ts | 0 .../workspace-doc-history.ts | 4 +- .../workspace-session-browser-history.test.ts | 2 +- .../workspace-session-browser-history.ts | 4 +- .../workspace-session-browser-schema.ts | 6 +- .../workspace-session-close-intent-schema.ts | 4 +- ...orkspace-session-contested-primary-host.ts | 2 +- .../workspace-session-draft-retention.ts | 0 .../workspace-session-editor-schema.ts | 0 .../workspace-session-host-field-ownership.ts | 0 .../workspace-session-host-records.ts | 0 .../workspace-session-pane-ownership.ts | 4 +- .../workspace-session-partition-owner.test.ts | 0 .../workspace-session-partition-owner.ts | 2 +- ...kspace-session-salvage-equivalence.test.ts | 4 +- .../workspace-session-salvage.test.ts | 2 +- .../workspace-session-salvage.ts | 2 +- ...pace-session-schema-field-coverage.test.ts | 0 ...pace-session-schema.sleeping-agent.test.ts | 0 .../workspace-session-schema.test.ts | 0 .../workspace-session-schema.ts | 31 ++++--- .../workspace-session-sleeping-agents.ts | 12 +-- .../workspace-session-state-types.ts | 18 ++-- ...ace-session-stranded-partition-adoption.ts | 4 +- .../workspace-session-tab-activity.test.ts | 4 +- .../workspace-session-tab-activity.ts | 4 +- .../workspace-session-tab-filter.ts | 4 +- ...workspace-session-tab-focus-schema.test.ts | 0 .../workspace-session-tab-type-schema.ts | 0 ...workspace-session-terminal-buffers.test.ts | 6 +- .../workspace-session-terminal-buffers.ts | 14 ++-- .../workspace-session-terminal-schema.test.ts | 0 ...rkspace-session-terminal-tab-close.test.ts | 6 +- .../workspace-session-terminal-tab-close.ts | 2 +- .../workspace-session-validation-work.test.ts | 0 src/shared/worktree/create-types.ts | 2 +- .../degraded-repo-worktree-validity.ts | 2 +- src/shared/worktree/id.ts | 4 +- src/shared/worktree/lineage-types.ts | 2 +- src/shared/wsl-login-shell-command.ts | 2 +- src/shared/wsl-move/wsl-move-dispositions.ts | 2 +- src/shared/xterm-conpty-options.ts | 2 +- ...gent-hook-interrupt-reconciliation.test.ts | 2 +- .../agent-hook-opencode-tui-identity.test.ts | 2 +- .../agent-hook-provider-normalization.test.ts | 2 +- ...er-claude-owed-notification-expiry.test.ts | 2 +- ...server-claude-session-continuation.test.ts | 2 +- ...k-server-codex-subagent-transcript.test.ts | 2 +- src/wsl-guest/agent-hook-server.test.ts | 2 +- src/wsl-guest/dispatcher-client-lifecycle.ts | 2 +- src/wsl-guest/dispatcher-client-state.ts | 2 +- src/wsl-guest/relay-agent-presence.test.ts | 2 +- .../relay-hook-root-acquisition.test.ts | 2 +- .../relay-http-owner-probe-lifecycle.test.ts | 2 +- .../relay-idle-process-owner.test.ts | 2 +- .../relay-nested-same-provider-owner.test.ts | 2 +- src/wsl-guest/wsl-agent-hook-relay.test.ts | 2 +- .../e2e/__mocks__/native-chat-ssh-delivery.ts | 2 +- .../accumulated-workspace-state-builder.ts | 2 +- .../e2e/agent-sender-open-unheld.unit.test.ts | 2 +- tests/e2e/claude-agent-row-view.unit.test.ts | 2 +- ...li-agent-unopened-workspace-resume.spec.ts | 2 +- ...eted-worker-retirement-resume.unit.test.ts | 6 +- ...oss-version-registered-agents.unit.test.ts | 2 +- ...session-tabs-retirement-proof.unit.test.ts | 2 +- .../daemon-live-session-preservation.spec.ts | 2 +- .../daemon-running-work-probe.unit.test.ts | 2 +- ...mon-slow-health-check-preservation.spec.ts | 2 +- tests/e2e/daemon-slow-init-pty-gate.spec.ts | 2 +- ...shed-split-orientation-legacy-leaf.spec.ts | 2 +- .../e2e/golden-quit-relaunch-session.spec.ts | 2 +- ...less-editor-mirror-identities.unit.test.ts | 2 +- ...paired-remote-terminal-reveal-grid.spec.ts | 2 +- ...red-remote-terminal-stall-recovery.spec.ts | 4 +- ...paired-remote-terminal-viewer-size.spec.ts | 2 +- .../headless-serve-chat-tab-placement.spec.ts | 2 +- ...erve-cli-terminal-retention-parity.spec.ts | 2 +- .../headless-serve-desktop-activation.spec.ts | 2 +- tests/e2e/helpers/docker-ssh-host-target.ts | 2 +- .../host-created-terminal-retention-oracle.ts | 2 +- tests/e2e/helpers/layout-compat-baseline.ts | 2 +- tests/e2e/helpers/legacy-relay-docker-host.ts | 2 +- .../helpers/orcad-upgrade-retained-state.ts | 2 +- .../helpers/paired-desktop-server-layout.ts | 2 +- .../paired-desktop-server-terminal-tab.ts | 2 +- tests/e2e/helpers/paired-host-terminal.ts | 6 +- .../paired-terminal-cold-activation-oracle.ts | 2 +- .../paired-terminal-parking-fixture.ts | 2 +- .../helpers/paired-terminal-parking-oracle.ts | 2 +- .../remote-session-bulk-open-fixture.ts | 2 +- .../remote-session-bulk-open-oracle.ts | 2 +- tests/e2e/helpers/runtime-types.ts | 2 +- .../ssh-remote-only-browser-fixture.ts | 2 +- .../helpers/startup-exec-readiness-oracle.ts | 4 +- .../terminal-kitty-file-image-proof.ts | 2 +- .../helpers/terminal-workspace-root-link.ts | 2 +- .../helpers/workspace-layout-oracle-model.ts | 2 +- .../helpers/workspace-layout-oracle-views.ts | 2 +- .../host-parked-pane-remote-viewer.spec.ts | 4 +- ...t-compat-new-desktop-on-old-server.spec.ts | 2 +- ...ackground-terminal-mount-authority.spec.ts | 2 +- .../e2e/local-cli-terminal-retention.spec.ts | 2 +- ...ve-chat-image-runtime-context.unit.test.ts | 2 +- .../omp-child-session-recovery.unit.test.ts | 2 +- .../omp-retired-host-renderer.unit.test.ts | 2 +- tests/e2e/omp-risk-remote-review.unit.test.ts | 4 +- ...-terminal-graph-sync-tab-retention.spec.ts | 2 +- ...ed-desktop-server-held-pane-reopen.spec.ts | 2 +- ...aired-desktop-server-layout-frames.spec.ts | 2 +- ...ired-desktop-server-layout-intents.spec.ts | 2 +- ...aired-desktop-server-layout-writes.spec.ts | 2 +- ...red-mobile-desktop-tab-composition.spec.ts | 5 +- .../paired-pane-title-desktop-host.spec.ts | 2 +- .../paired-remote-pane-layout-retry.spec.ts | 4 +- .../paired-remote-split-pane-focus.spec.ts | 2 +- ...mote-split-pane-host-retired-ghost.spec.ts | 2 +- ...e-terminal-client-restart-survival.spec.ts | 4 +- ...terminal-host-quit-reconnect-input.spec.ts | 4 +- ...minal-host-restart-background-sync.spec.ts | 4 +- ...rminal-initial-snapshot-scrollback.spec.ts | 2 +- ...te-terminal-lossy-initial-snapshot.spec.ts | 4 +- ...terminal-materialization-reconnect.spec.ts | 4 +- ...red-remote-terminal-network-outage.spec.ts | 4 +- ...mote-terminal-pane-move-to-new-tab.spec.ts | 2 +- ...rminal-parked-reveal-interactivity.spec.ts | 4 +- ...terminal-parked-scrollback-restart.spec.ts | 2 +- ...erminal-parked-scrollback-survives.spec.ts | 2 +- ...remote-terminal-probe-gap-recovery.spec.ts | 4 +- ...mote-terminal-reconnect-idle-frame.spec.ts | 4 +- ...ote-terminal-serve-restart-binding.spec.ts | 2 +- ...red-remote-terminal-stall-recovery.spec.ts | 2 +- ...erminal-truncated-tail-first-paint.spec.ts | 4 +- ...paired-serve-respawn-process-state.spec.ts | 2 +- ...ed-terminal-after-anchor-placement.spec.ts | 5 +- ...red-terminal-switch-desktop-reveal.spec.ts | 2 +- ...rsisted-session-production-upgrade.spec.ts | 2 +- ...mote-agent-session-focus-authority.spec.ts | 4 +- ...emote-terminal-tab-retirement.unit.test.ts | 2 +- tests/e2e/repo-registration-async.spec.ts | 2 +- .../restart-restore-terminal-input.spec.ts | 2 +- ...ettled-worker-tab-survives-restart.spec.ts | 2 +- ...etwork-execution-route.docker.unit.test.ts | 2 +- .../e2e/ssh-orcad-browser-drop-owner.spec.ts | 2 +- .../e2e/ssh-orcad-legacy-relay-bridge.spec.ts | 2 +- tests/e2e/ssh-orcad-open-in-owner.spec.ts | 2 +- .../e2e/ssh-orcad-terminal-root-owner.spec.ts | 2 +- .../e2e/ssh-orcad-vm-provisioned-root.spec.ts | 2 +- tests/e2e/ssh-orcad-workspace-tools.spec.ts | 2 +- ...ructured-chat-tab-lifetime.test-fixture.ts | 2 +- .../e2e/terminal-account-restart.unit.test.ts | 2 +- ...minal-binding-crash-hydration.unit.test.ts | 2 +- ...inal-duplicate-pty-renderer-reveal.spec.ts | 2 +- ...minal-inline-images-paired-runtime.spec.ts | 2 +- tests/e2e/terminal-node-command.ts | 2 +- .../e2e/terminal-restart-persistence.spec.ts | 2 +- ...terminal-tab-level-binding-upgrade.spec.ts | 2 +- ...al-warm-reattach-split-live-output.spec.ts | 2 +- ...ened-workspace-agent-single-resume.spec.ts | 2 +- .../workspace-layout-oracle-headless.spec.ts | 2 +- .../e2e/wsl-bridge-no-background-boot.spec.ts | 2 +- tests/e2e/wsl-move-host-pane-history.spec.ts | 4 +- tests/e2e/wsl-move-restore-lifecycle.spec.ts | 4 +- .../omp-remote-sidebar-rendered/fixture.tsx | 4 +- tests/tools/omp-startup-keyboard-smoke.mjs | 2 +- 2364 files changed, 3866 insertions(+), 3426 deletions(-) create mode 100644 src/main/agent-hooks/server/launch-resume-identity-event.ts create mode 100644 src/renderer/src/components/terminal-pane/located-codex-pane.ts create mode 100644 src/renderer/src/runtime/web-session-terminal-orphan-recovery-options.ts rename src/shared/{ => agent-status/identity}/terminal-agent.ts (64%) rename src/shared/{ => agent-status/process}/shell-process-detection.test.ts (100%) rename src/shared/{ => agent-status/process}/shell-process-detection.ts (100%) rename src/shared/{ => agent-status/title}/terminal-title-agent-type.test.ts (97%) rename src/shared/{ => agent-status/title}/terminal-title-agent-type.ts (91%) rename src/shared/{ => agent-status/title}/terminal-title-classification-corpus.ts (100%) rename src/shared/{ => agent-status/title}/terminal-title-classification-memo.ts (87%) rename src/shared/{ => agent-status/title}/terminal-title-wrapper-segments.ts (100%) rename src/shared/{ => program-status}/terminal-agent-status-processor.test.ts (100%) rename src/shared/{ => program-status}/terminal-agent-status-processor.ts (87%) rename src/shared/{ => shell/launch}/shell-argument-quoting.ts (100%) rename src/shared/{ => shell/launch}/shell-path-hydration-types.ts (100%) rename src/shared/{ => shell/launch}/shell-path-quoting.ts (100%) rename src/shared/{ => shell/launch}/terminal-default-shell.ts (100%) rename src/shared/{ => shell/launch}/terminal-git-credential-guard.ts (89%) rename src/shared/{ => shell/launch}/terminal-startup-cwd.test.ts (98%) rename src/shared/{ => shell/launch}/terminal-startup-cwd.ts (94%) rename src/shared/{ => shell/opening}/shell-open-types.ts (94%) rename src/shared/{ => terminal/pty/diagnostics}/pty-delivery-diagnostics.test.ts (100%) rename src/shared/{ => terminal/pty/diagnostics}/pty-delivery-diagnostics.ts (100%) rename src/shared/{ => terminal/pty/diagnostics}/pty-renderer-delivery-health.ts (100%) rename src/shared/{ => terminal/pty/ingress}/pty-owner-color-query-colors.test.ts (100%) rename src/shared/{ => terminal/pty/ingress}/pty-owner-color-query-colors.ts (94%) rename src/shared/{ => terminal/pty/ingress}/pty-owner-color-query-replies.ts (95%) rename src/shared/{ => terminal/pty/ingress}/pty-reply-echo-shapes.node-pty.test.ts (97%) rename src/shared/{ => terminal/pty/ingress}/pty-startup-ingress-contract.ts (89%) rename src/shared/{ => terminal/pty/ingress}/pty-startup-ingress-intent.ts (95%) rename src/shared/{ => terminal/pty/ingress}/pty-startup-ingress-kitty.test.ts (96%) rename src/shared/{ => terminal/pty/ingress}/pty-startup-ingress-launcher-appearance.test.ts (97%) rename src/shared/{ => terminal/pty/ingress}/pty-startup-ingress-lifetime-colors.test.ts (96%) rename src/shared/{ => terminal/pty/ingress}/pty-startup-ingress-live-query-reply.test.ts (97%) rename src/shared/{ => terminal/pty/ingress}/pty-startup-ingress.test.ts (99%) rename src/shared/{ => terminal/pty/ingress}/pty-startup-ingress.ts (96%) rename src/shared/{ => terminal/pty/ingress}/pty-startup-query.ts (95%) rename src/shared/{ => terminal/pty/ingress}/pty-startup-reply-delivery.ts (97%) rename src/shared/{ => terminal/pty/ingress}/pty-startup-reply-echo-shapes.test.ts (100%) rename src/shared/{ => terminal/pty/ingress}/pty-startup-reply-echo-shapes.ts (98%) rename src/shared/{ => terminal/pty/ingress}/terminal-query-reply-delivery.ts (93%) rename src/shared/{ => terminal/pty/lifecycle}/pty-consumer-session-contract.ts (100%) rename src/shared/{ => terminal/pty/lifecycle}/pty-creation-disposition.ts (100%) rename src/shared/{ => terminal/pty/lifecycle}/pty-fenced-termination.ts (100%) rename src/shared/{ => terminal/pty/lifecycle}/pty-incarnation.ts (100%) rename src/shared/{ => terminal/pty/lifecycle}/pty-listed-session.ts (100%) rename src/shared/{ => terminal/pty/lifecycle}/pty-liveness-verdict.test.ts (100%) rename src/shared/{ => terminal/pty/lifecycle}/pty-liveness-verdict.ts (100%) rename src/shared/{ => terminal/pty/lifecycle}/pty-owner-backend.test.ts (100%) rename src/shared/{ => terminal/pty/lifecycle}/pty-owner-backend.ts (100%) rename src/shared/{ => terminal/pty/lifecycle}/pty-running-work-probe.test.ts (100%) rename src/shared/{ => terminal/pty/lifecycle}/pty-running-work-probe.ts (97%) rename src/shared/{ => terminal/pty/lifecycle}/pty-session-id-format.ts (95%) rename src/shared/{ => terminal/pty/lifecycle}/pty-write-settlement.ts (100%) rename src/shared/{ => terminal/pty/lifecycle}/terminal-attach-result.ts (100%) rename src/shared/{ => terminal/pty/lifecycle}/terminal-attachment-launch-result.ts (82%) rename src/shared/{ => terminal/pty/lifecycle}/terminal-execution-host.ts (88%) rename src/shared/{ => terminal/pty/lifecycle}/terminal-exit-cause.test.ts (100%) rename src/shared/{ => terminal/pty/lifecycle}/terminal-exit-cause.ts (100%) rename src/shared/{ => terminal/pty/lifecycle}/terminal-foreground-observation.ts (100%) rename src/shared/{ => terminal/pty/lifecycle}/terminal-owner.ts (100%) rename src/shared/{ => terminal/pty/lifecycle}/terminal-process-inspection.ts (97%) rename src/shared/{ => terminal/pty/lifecycle}/terminal-send-acknowledgment.ts (100%) rename src/shared/{ => terminal/pty/lifecycle}/terminal-spawn-error-copy.ts (100%) rename src/shared/{ => terminal/pty/lifecycle}/terminal-spawn-resource-error.ts (100%) rename src/shared/{ => terminal/pty/lifecycle}/terminal-spawn-response.ts (100%) rename src/shared/{ => terminal/pty/lifecycle}/terminal-start-failure.test.ts (100%) rename src/shared/{ => terminal/pty/lifecycle}/terminal-start-failure.ts (100%) rename src/shared/{ => terminal/pty/native-process}/pty-process-ceiling-state.ts (100%) rename src/shared/{ => terminal/pty/native-process}/pty-slave-line-discipline-echo.test.ts (100%) rename src/shared/{ => terminal/pty/native-process}/pty-slave-line-discipline-echo.ts (100%) rename src/shared/{ => terminal/pty/native-process}/shell-process-readiness.test.ts (100%) rename src/shared/{ => terminal/pty/native-process}/shell-process-readiness.ts (94%) rename src/shared/{ => workspace-layout}/closed-terminal-panes.ts (100%) rename src/shared/{ => workspace-layout}/closed-terminal-tab-tombstones.test.ts (100%) rename src/shared/{ => workspace-layout}/closed-terminal-tab-tombstones.ts (97%) rename src/shared/{ => workspace-layout}/paired-terminal-tab-close-intent.ts (100%) rename src/shared/{ => workspace-layout}/stable-pane-id.test.ts (100%) rename src/shared/{ => workspace-layout}/stable-pane-id.ts (100%) rename src/shared/{ => workspace-layout}/terminal-layout-equality.ts (100%) rename src/shared/{ => workspace-layout}/terminal-layout-leaf-retirement.ts (100%) rename src/shared/{ => workspace-layout}/terminal-layout-pty-ownership.ts (100%) rename src/shared/{ => workspace-layout}/terminal-layout-snapshot-schema.ts (95%) rename src/shared/{ => workspace-layout}/terminal-leaf-move.test.ts (100%) rename src/shared/{ => workspace-layout}/terminal-leaf-move.ts (100%) rename src/shared/{ => workspace-layout}/terminal-pane-layout-tree.ts (100%) rename src/shared/{ => workspace-layout}/terminal-pane-placement.test.ts (100%) rename src/shared/{ => workspace-layout}/terminal-pane-placement.ts (91%) rename src/shared/{ => workspace-layout}/terminal-pane-reveal.ts (91%) rename src/shared/{ => workspace-layout}/terminal-pane-title-reset.test.ts (100%) rename src/shared/{ => workspace-layout}/terminal-pane-title-reset.ts (89%) rename src/shared/{ => workspace-layout}/terminal-pane-title-sanitization.test.ts (100%) rename src/shared/{ => workspace-layout}/terminal-pane-title-sanitization.ts (100%) rename src/shared/{ => workspace-layout}/terminal-retirement-proof-ledger.ts (98%) rename src/shared/{ => workspace-layout}/terminal-reveal-identity.ts (100%) rename src/shared/{ => workspace-layout}/terminal-split-outcome.ts (100%) rename src/shared/{ => workspace-layout}/terminal-surface-close-target.test.ts (100%) rename src/shared/{ => workspace-layout}/terminal-surface-close-target.ts (100%) rename src/shared/{ => workspace-layout}/terminal-surface-id.ts (100%) rename src/shared/{ => workspace-layout}/terminal-surface-tombstone-schema.ts (100%) rename src/shared/{ => workspace-layout}/terminal-tab-close.ts (95%) rename src/shared/{ => workspace-layout}/terminal-tab-id-schema.ts (100%) rename src/shared/{ => workspace-layout}/terminal-tab-id.ts (100%) rename src/shared/{ => workspace-layout}/terminal-tab-types.ts (95%) rename src/shared/{ => workspace-session}/client-hosted-browser-close-intent.ts (100%) rename src/shared/{ => workspace-session}/client-hosted-browser-page-record.ts (100%) rename src/shared/{ => workspace-session}/terminal-session-state-save-failure.test.ts (100%) rename src/shared/{ => workspace-session}/terminal-session-state-save-failure.ts (93%) rename src/shared/{ => workspace-session}/workspace-doc-history.test.ts (100%) rename src/shared/{ => workspace-session}/workspace-doc-history.ts (94%) rename src/shared/{ => workspace-session}/workspace-session-browser-history.test.ts (96%) rename src/shared/{ => workspace-session}/workspace-session-browser-history.ts (93%) rename src/shared/{ => workspace-session}/workspace-session-browser-schema.ts (96%) rename src/shared/{ => workspace-session}/workspace-session-close-intent-schema.ts (85%) rename src/shared/{ => workspace-session}/workspace-session-contested-primary-host.ts (97%) rename src/shared/{ => workspace-session}/workspace-session-draft-retention.ts (100%) rename src/shared/{ => workspace-session}/workspace-session-editor-schema.ts (100%) rename src/shared/{ => workspace-session}/workspace-session-host-field-ownership.ts (100%) rename src/shared/{ => workspace-session}/workspace-session-host-records.ts (100%) rename src/shared/{ => workspace-session}/workspace-session-pane-ownership.ts (90%) rename src/shared/{ => workspace-session}/workspace-session-partition-owner.test.ts (100%) rename src/shared/{ => workspace-session}/workspace-session-partition-owner.ts (95%) rename src/shared/{ => workspace-session}/workspace-session-salvage-equivalence.test.ts (99%) rename src/shared/{ => workspace-session}/workspace-session-salvage.test.ts (99%) rename src/shared/{ => workspace-session}/workspace-session-salvage.ts (96%) rename src/shared/{ => workspace-session}/workspace-session-schema-field-coverage.test.ts (100%) rename src/shared/{ => workspace-session}/workspace-session-schema.sleeping-agent.test.ts (100%) rename src/shared/{ => workspace-session}/workspace-session-schema.test.ts (100%) rename src/shared/{ => workspace-session}/workspace-session-schema.ts (91%) rename src/shared/{ => workspace-session}/workspace-session-sleeping-agents.ts (90%) rename src/shared/{ => workspace-session}/workspace-session-state-types.ts (90%) rename src/shared/{ => workspace-session}/workspace-session-stranded-partition-adoption.ts (99%) rename src/shared/{ => workspace-session}/workspace-session-tab-activity.test.ts (92%) rename src/shared/{ => workspace-session}/workspace-session-tab-activity.ts (88%) rename src/shared/{ => workspace-session}/workspace-session-tab-filter.ts (97%) rename src/shared/{ => workspace-session}/workspace-session-tab-focus-schema.test.ts (100%) rename src/shared/{ => workspace-session}/workspace-session-tab-type-schema.ts (100%) rename src/shared/{ => workspace-session}/workspace-session-terminal-buffers.test.ts (98%) rename src/shared/{ => workspace-session}/workspace-session-terminal-buffers.ts (94%) rename src/shared/{ => workspace-session}/workspace-session-terminal-schema.test.ts (100%) rename src/shared/{ => workspace-session}/workspace-session-terminal-tab-close.test.ts (98%) rename src/shared/{ => workspace-session}/workspace-session-terminal-tab-close.ts (99%) rename src/shared/{ => workspace-session}/workspace-session-validation-work.test.ts (100%) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 0b80ce33513..6f3e8ebc523 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -866,7 +866,7 @@ jobs: src/shared/fish-query-reply-child-stdin.node-pty.test.ts \ src/shared/fish-wsl-cwd-report.node-pty.test.ts \ src/main/wsl/filesystem/wsl-sh-cwd-report.node-pty.test.ts \ - src/shared/pty-reply-echo-shapes.node-pty.test.ts \ + src/shared/terminal/pty/ingress/pty-reply-echo-shapes.node-pty.test.ts \ src/shared/startup-shell-portability.live-shell.test.ts \ src/shared/posix-command-path-lookup.test.ts diff --git a/.github/workflows/ssh-hostile-hosts.yml b/.github/workflows/ssh-hostile-hosts.yml index 10905dd86ab..a862719e06e 100644 --- a/.github/workflows/ssh-hostile-hosts.yml +++ b/.github/workflows/ssh-hostile-hosts.yml @@ -30,7 +30,7 @@ on: - 'src/main/ssh/connection/**' - 'src/main/ssh/ssh-reconnect-error-classification.ts' - 'src/main/ssh/ssh-posix-command-wrapper.ts' - - 'src/shared/shell-argument-quoting.ts' + - 'src/shared/shell/launch/shell-argument-quoting.ts' - '!src/**/*.test.ts' - 'src/main/ssh/hostile-host-test-support/ssh-hostile-hosts.docker.test.ts' - '.github/workflows/ssh-hostile-hosts.yml' diff --git a/.github/workflows/ssh-windows-hosts.yml b/.github/workflows/ssh-windows-hosts.yml index 236868076b2..e34a3183812 100644 --- a/.github/workflows/ssh-windows-hosts.yml +++ b/.github/workflows/ssh-windows-hosts.yml @@ -46,7 +46,7 @@ on: - 'src/main/ssh/connection/**' - 'src/main/ssh/ssh-reconnect-error-classification.ts' - 'src/main/ssh/ssh-posix-command-wrapper.ts' - - 'src/shared/shell-argument-quoting.ts' + - 'src/shared/shell/launch/shell-argument-quoting.ts' - '!src/**/*.test.ts' - 'src/main/managed-server/host-state/orcad-windows-host-lane.test.ts' - 'tests/e2e/ssh-orcad-auto-convert.spec.ts' diff --git a/config/flaky-test-pattern-baseline.txt b/config/flaky-test-pattern-baseline.txt index 357f457a449..06c04f26cab 100644 --- a/config/flaky-test-pattern-baseline.txt +++ b/config/flaky-test-pattern-baseline.txt @@ -102,7 +102,7 @@ 1 test-no-polling-loop:src/renderer/src/components/terminal-pane/issue-12112-agent-pane-startup-color-reply-leak.repro.test.ts 1 test-no-polling-loop:src/shared/darwin-terminal-names-real-ps.test.ts 1 test-no-polling-loop:src/shared/fish-query-reply-child-stdin.node-pty.test.ts -1 test-no-polling-loop:src/shared/pty-reply-echo-shapes.node-pty.test.ts +1 test-no-polling-loop:src/shared/terminal/pty/ingress/pty-reply-echo-shapes.node-pty.test.ts 1 test-no-polling-loop:src/shared/remote-runtime/control/remote-runtime-shared-control-standing-intent.test.ts 1 test-no-polling-loop:src/shared/startup-command-staging.node-pty.test.ts 1 test-no-polling-loop:tests/e2e/agent-session-live-force-exit-resume.spec.ts @@ -1126,7 +1126,7 @@ 2 test-no-wall-clock:src/renderer/src/store/slices/github-pr-branch-linked-pr-divergence.test.ts 2 test-no-wall-clock:src/shared/crash-reporting.test.ts 2 test-no-wall-clock:src/shared/fish-query-reply-child-stdin.node-pty.test.ts -2 test-no-wall-clock:src/shared/pty-reply-echo-shapes.node-pty.test.ts +2 test-no-wall-clock:src/shared/terminal/pty/ingress/pty-reply-echo-shapes.node-pty.test.ts 2 test-no-wall-clock:src/shared/startup-command-staging.node-pty.test.ts 2 test-no-wall-clock:src/wsl-guest/agent-hook-server.test.ts 2 test-no-wall-clock:tests/e2e/cross-version-wire/legacy-relay-bridge.unit.test.ts @@ -1323,7 +1323,7 @@ 4 test-no-real-time-wait:src/main/runtime/worktree-teardown-unstopped-pty.test.ts 4 test-no-real-time-wait:src/main/ssh/connection/ssh-connection-host-key-store-wiring.test.ts 4 test-no-real-time-wait:src/renderer/src/components/activity/activity-auto-mark-read-loop.react185.test.tsx -4 test-no-real-time-wait:src/shared/pty-reply-echo-shapes.node-pty.test.ts +4 test-no-real-time-wait:src/shared/terminal/pty/ingress/pty-reply-echo-shapes.node-pty.test.ts 4 test-no-real-time-wait:tests/e2e/combined-diff-scroll-restore.spec.ts 4 test-no-real-time-wait:tests/e2e/floating-workspace-reopen-webgl-recovery.spec.ts 4 test-no-real-time-wait:tests/e2e/floating-workspace-shared-glyph-atlas.spec.ts diff --git a/config/process-host-direct-import-baseline.txt b/config/process-host-direct-import-baseline.txt index d47279a44b1..4b65d719398 100644 --- a/config/process-host-direct-import-baseline.txt +++ b/config/process-host-direct-import-baseline.txt @@ -102,6 +102,6 @@ src/shared/ephemeral-vm-recipe-process.ts src/shared/ephemeral-vm-recipe-runner.ts src/shared/fish-binary-requirement.ts src/shared/process-table-ps-capture.ts -src/shared/pty-slave-line-discipline-echo.ts -src/shared/shell-process-readiness.ts +src/shared/terminal/pty/native-process/pty-slave-line-discipline-echo.ts +src/shared/terminal/pty/native-process/shell-process-readiness.ts src/wsl-guest/preflight-handler.ts diff --git a/config/reliability-gates.jsonc b/config/reliability-gates.jsonc index 2f6b0fcc54a..f6638c3764e 100644 --- a/config/reliability-gates.jsonc +++ b/config/reliability-gates.jsonc @@ -2179,18 +2179,18 @@ "motivatingLinks": [ "https://github.com/stablyai/orca/issues/12721", "https://github.com/stablyai/orca/issues/18173", - "https://github.com/stablyai/orca/blob/main/src/shared/workspace-session-partition-owner.ts" + "https://github.com/stablyai/orca/blob/main/src/shared/workspace-session/workspace-session-partition-owner.ts" ], "invariant": "Every workspace the `ssh:` partition names is hydrated at boot, whatever kind of state it holds - terminal tabs, open editor files with unsaved hot-exit drafts, browser workspaces, tab groups, or host-qualified visit recency. An empty tab row is read as a gap, never as evidence the tabs were closed. A workspace the local partition already holds terminal tabs for is left untouched, and every workspace routes back to the partition that owns it. Adoption never destroys what it was not told about: a host row the partition holds nothing for cannot replace a populated base row, and a bare id the read found contested is gap-filled rather than replaced, because that is exactly the id where `local` and `ssh:` are not one workspace written twice. Tab-, pane- and file-keyed rows are recovered through the same indexes the split routed them by. An explicit empty tab row written by this build survives the round trip as a present empty row and is declined by the shared seeding predicate. Boot enumerates the partitions persistence actually holds rather than inferring them from the repo catalog, so a target whose only workspace is a folder is read like any other; a folder workspace routes to the same partition main's RuntimeWorkspaceSessionController writes it to, so one workspace is never written into two stores; and a workspace adopted out of a partition routes back to that partition even on a boot whose repo catalog cannot name the host, so the write cannot re-strand what the read just reunited. `contested` means a repo id the catalog registers on more than one host, or two SSH partitions naming one id - never the mere co-presence of 'local' and `ssh:`, which is the repair's own input.", "oracle": "Drive the shipping split and renderer read together for an editor-only draft, a contested primary plus parked shadow, and legacy repair followed by a closed-last-terminal round trip. Drive an assembled read into addressed patch callbacks while writing a sibling and require the declined row to survive in its own partition. These in-memory composition checks do not establish file durability or actual reboot recovery.", "commands": [ - "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/lib/workspace-session-ssh-partition-round-trip.test.ts src/renderer/src/lib/workspace-session-ssh-partition-ownership.test.ts src/renderer/src/lib/workspace-session-host-contention.test.ts src/shared/workspace-session-partition-owner.test.ts" + "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/lib/workspace-session-ssh-partition-round-trip.test.ts src/renderer/src/lib/workspace-session-ssh-partition-ownership.test.ts src/renderer/src/lib/workspace-session-host-contention.test.ts src/shared/workspace-session/workspace-session-partition-owner.test.ts" ], "testFiles": [ "src/renderer/src/lib/workspace-session-ssh-partition-round-trip.test.ts", "src/renderer/src/lib/workspace-session-ssh-partition-ownership.test.ts", "src/renderer/src/lib/workspace-session-host-contention.test.ts", - "src/shared/workspace-session-partition-owner.test.ts" + "src/shared/workspace-session/workspace-session-partition-owner.test.ts" ], "assertionRefs": [ { @@ -2212,7 +2212,7 @@ "assertions": ["does not strand the runtime co-claimant when the SSH row is written"] }, { - "file": "src/shared/workspace-session-partition-owner.test.ts", + "file": "src/shared/workspace-session/workspace-session-partition-owner.test.ts", "assertions": [ "gives an SSH host its own partition, matching what the runtime already writes" ] @@ -2224,6 +2224,7 @@ "runner": "local", "platform": "macos", "command": "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/lib/workspace-session-ssh-partition-round-trip.test.ts src/renderer/src/lib/workspace-session-ssh-partition-ownership.test.ts src/renderer/src/lib/workspace-session-host-contention.test.ts src/shared/workspace-session-partition-owner.test.ts", + "currentCommand": "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/lib/workspace-session-ssh-partition-round-trip.test.ts src/renderer/src/lib/workspace-session-ssh-partition-ownership.test.ts src/renderer/src/lib/workspace-session-host-contention.test.ts src/shared/workspace-session/workspace-session-partition-owner.test.ts", "result": "passed", "durationSeconds": 7.13, "summary": "64 tests passed across 5 files: the real Store publish, the shipping write/read split round trip, the older-client empty-publish skew direction, the contested-bare-id and empty-host-row guards, the closed-last-terminal tombstone boundary, and the partition-ownership suite covering folder-workspace routing, the persistence-side partition census, read-source write-back, and the catalog attribution that keeps a residue partition from winning the read." @@ -3175,10 +3176,10 @@ "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/lib/ensure-simulator-tab-behavior.test.ts", "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/lib/browser-palette-page-entries.test.ts src/renderer/src/lib/simulator-palette-search.test.ts", "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/lib/cmd-j-host-qualified-candidate-ownership.test.ts", - "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/lib/browser-palette-page-entries.test.ts src/renderer/src/lib/simulator-palette-search.test.ts src/renderer/src/lib/ensure-simulator-tab-behavior.test.ts src/shared/workspace-session-schema.test.ts", - "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/lib/cmd-j-host-qualified-candidate-ownership.test.ts src/renderer/src/lib/browser-palette-page-entries.test.ts src/renderer/src/lib/browser-palette-search.test.ts src/renderer/src/lib/simulator-palette-search.test.ts src/renderer/src/lib/browser-page-palette-activation.test.ts src/renderer/src/lib/simulator-tab-palette-activation.test.ts src/renderer/src/lib/ensure-simulator-tab-behavior.test.ts src/renderer/src/runtime/web-session-tabs-sync-mirror-identity.test.ts src/shared/workspace-session-schema.test.ts", - "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/cmd-j/worktree-checks-review-index.test.ts src/renderer/src/components/worktree-jump/WorktreeJumpPalette.test.tsx src/renderer/src/components/tab-bar/use-open-tab-search.test.ts src/renderer/src/lib/cmd-j-host-qualified-candidate-ownership.test.ts src/renderer/src/lib/browser-palette-page-entries.test.ts src/renderer/src/lib/browser-palette-search.test.ts src/renderer/src/lib/simulator-palette-search.test.ts src/renderer/src/lib/browser-page-palette-activation.test.ts src/renderer/src/lib/simulator-tab-palette-activation.test.ts src/renderer/src/lib/ensure-simulator-tab-behavior.test.ts src/renderer/src/runtime/web-session-tabs-sync-mirror-identity.test.ts src/shared/workspace-session-schema.test.ts", - "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/cmd-j/worktree-checks-review-index.test.ts src/renderer/src/components/worktree-jump/WorktreeJumpPalette.test.tsx src/renderer/src/components/tab-bar/use-open-tab-search.test.ts src/renderer/src/lib/cmd-j-host-qualified-candidate-ownership.test.ts src/renderer/src/lib/browser-palette-page-entries.test.ts src/renderer/src/lib/browser-palette-search.test.ts src/renderer/src/lib/simulator-palette-search.test.ts src/renderer/src/lib/browser-page-palette-activation.test.ts src/renderer/src/lib/simulator-tab-palette-activation.test.ts src/renderer/src/lib/ensure-simulator-tab-behavior.test.ts src/renderer/src/lib/open-mobile-emulator-tab.test.ts src/renderer/src/runtime/web-session-tabs-sync-mirror-identity.test.ts src/shared/workspace-session-schema.test.ts", + "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/lib/browser-palette-page-entries.test.ts src/renderer/src/lib/simulator-palette-search.test.ts src/renderer/src/lib/ensure-simulator-tab-behavior.test.ts src/shared/workspace-session/workspace-session-schema.test.ts", + "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/lib/cmd-j-host-qualified-candidate-ownership.test.ts src/renderer/src/lib/browser-palette-page-entries.test.ts src/renderer/src/lib/browser-palette-search.test.ts src/renderer/src/lib/simulator-palette-search.test.ts src/renderer/src/lib/browser-page-palette-activation.test.ts src/renderer/src/lib/simulator-tab-palette-activation.test.ts src/renderer/src/lib/ensure-simulator-tab-behavior.test.ts src/renderer/src/runtime/web-session-tabs-sync-mirror-identity.test.ts src/shared/workspace-session/workspace-session-schema.test.ts", + "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/cmd-j/worktree-checks-review-index.test.ts src/renderer/src/components/worktree-jump/WorktreeJumpPalette.test.tsx src/renderer/src/components/tab-bar/use-open-tab-search.test.ts src/renderer/src/lib/cmd-j-host-qualified-candidate-ownership.test.ts src/renderer/src/lib/browser-palette-page-entries.test.ts src/renderer/src/lib/browser-palette-search.test.ts src/renderer/src/lib/simulator-palette-search.test.ts src/renderer/src/lib/browser-page-palette-activation.test.ts src/renderer/src/lib/simulator-tab-palette-activation.test.ts src/renderer/src/lib/ensure-simulator-tab-behavior.test.ts src/renderer/src/runtime/web-session-tabs-sync-mirror-identity.test.ts src/shared/workspace-session/workspace-session-schema.test.ts", + "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/cmd-j/worktree-checks-review-index.test.ts src/renderer/src/components/worktree-jump/WorktreeJumpPalette.test.tsx src/renderer/src/components/tab-bar/use-open-tab-search.test.ts src/renderer/src/lib/cmd-j-host-qualified-candidate-ownership.test.ts src/renderer/src/lib/browser-palette-page-entries.test.ts src/renderer/src/lib/browser-palette-search.test.ts src/renderer/src/lib/simulator-palette-search.test.ts src/renderer/src/lib/browser-page-palette-activation.test.ts src/renderer/src/lib/simulator-tab-palette-activation.test.ts src/renderer/src/lib/ensure-simulator-tab-behavior.test.ts src/renderer/src/lib/open-mobile-emulator-tab.test.ts src/renderer/src/runtime/web-session-tabs-sync-mirror-identity.test.ts src/shared/workspace-session/workspace-session-schema.test.ts", "pnpm exec playwright test tests/e2e/paired-cmd-j-host-qualified-tabs.spec.ts --config tests/playwright.config.ts --project electron-headless --workers=1", "SKIP_BUILD=1 pnpm exec playwright test tests/e2e/paired-cmd-j-host-qualified-tabs.spec.ts --config tests/playwright.config.ts --project electron-headless --workers=1" ], @@ -3195,7 +3196,7 @@ "src/renderer/src/lib/ensure-simulator-tab-behavior.test.ts", "src/renderer/src/lib/open-mobile-emulator-tab.test.ts", "src/renderer/src/runtime/web-session-tabs-sync-mirror-identity.test.ts", - "src/shared/workspace-session-schema.test.ts", + "src/shared/workspace-session/workspace-session-schema.test.ts", "tests/e2e/paired-cmd-j-host-qualified-tabs.spec.ts" ], "assertionRefs": [ @@ -3280,7 +3281,7 @@ "result": "passed", "durationSeconds": 2.3, "summary": "6 test files passed, 104 tests passed on the STA-4965 candidate. Historical command and result are preserved after the test-value audit removed the tab-store assertions this run included. currentCommand is only an administrative link to the remaining gate command; the historical run has not validated that command or equivalent coverage.", - "currentCommand": "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/lib/browser-palette-page-entries.test.ts src/renderer/src/lib/simulator-palette-search.test.ts src/renderer/src/lib/ensure-simulator-tab-behavior.test.ts src/shared/workspace-session-schema.test.ts" + "currentCommand": "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/lib/browser-palette-page-entries.test.ts src/renderer/src/lib/simulator-palette-search.test.ts src/renderer/src/lib/ensure-simulator-tab-behavior.test.ts src/shared/workspace-session/workspace-session-schema.test.ts" }, { "date": "2026-08-20", @@ -3320,7 +3321,7 @@ "result": "passed", "durationSeconds": 10.5, "summary": "The review-hardened candidate passed 189/189 focused contracts, including direct browser-result host fallback, SSH plus paired-runtime current-row aliases, explicit-owner fail-closed behavior, generic workspace rows, simulator reuse, local creation stamping, activation, and same-id distinct-runtime mirror preservation. Historical command preserved after the test-value audit removed the palette repo resolver suite. currentCommand is an administrative link to a remaining gate command; this historical run has not validated that command or equivalent coverage. Historical command and result are preserved after the test-value audit removed the tab-store assertions this run included. currentCommand is only an administrative link to the remaining gate command; the historical run has not validated that command or equivalent coverage.", - "currentCommand": "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/lib/cmd-j-host-qualified-candidate-ownership.test.ts src/renderer/src/lib/browser-palette-page-entries.test.ts src/renderer/src/lib/browser-palette-search.test.ts src/renderer/src/lib/simulator-palette-search.test.ts src/renderer/src/lib/browser-page-palette-activation.test.ts src/renderer/src/lib/simulator-tab-palette-activation.test.ts src/renderer/src/lib/ensure-simulator-tab-behavior.test.ts src/renderer/src/runtime/web-session-tabs-sync-mirror-identity.test.ts src/shared/workspace-session-schema.test.ts" + "currentCommand": "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/lib/cmd-j-host-qualified-candidate-ownership.test.ts src/renderer/src/lib/browser-palette-page-entries.test.ts src/renderer/src/lib/browser-palette-search.test.ts src/renderer/src/lib/simulator-palette-search.test.ts src/renderer/src/lib/browser-page-palette-activation.test.ts src/renderer/src/lib/simulator-tab-palette-activation.test.ts src/renderer/src/lib/ensure-simulator-tab-behavior.test.ts src/renderer/src/runtime/web-session-tabs-sync-mirror-identity.test.ts src/shared/workspace-session/workspace-session-schema.test.ts" }, { "date": "2026-08-20", @@ -3337,7 +3338,7 @@ "runner": "local", "platform": "macos", "command": "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/cmd-j/worktree-checks-review-index.test.ts src/renderer/src/components/WorktreeJumpPalette.test.tsx src/renderer/src/components/tab-bar/use-open-tab-search.test.ts src/renderer/src/lib/cmd-j-host-qualified-candidate-ownership.test.ts src/renderer/src/lib/palette-repo-resolution.test.ts src/renderer/src/lib/browser-palette-page-entries.test.ts src/renderer/src/lib/browser-palette-search.test.ts src/renderer/src/lib/simulator-palette-search.test.ts src/renderer/src/lib/workspace-tab-palette-search.test.ts src/renderer/src/lib/browser-page-palette-activation.test.ts src/renderer/src/lib/simulator-tab-palette-activation.test.ts src/renderer/src/lib/ensure-simulator-tab-behavior.test.ts src/renderer/src/runtime/web-session-tabs-sync-mirror-identity.test.ts src/renderer/src/store/slices/tabs-open-close-lifecycle.test.ts src/renderer/src/store/slices/tabs-pane-layout-operations.test.ts src/shared/workspace-session-schema.test.ts", - "currentCommand": "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/cmd-j/worktree-checks-review-index.test.ts src/renderer/src/components/worktree-jump/WorktreeJumpPalette.test.tsx src/renderer/src/components/tab-bar/use-open-tab-search.test.ts src/renderer/src/lib/cmd-j-host-qualified-candidate-ownership.test.ts src/renderer/src/lib/browser-palette-page-entries.test.ts src/renderer/src/lib/browser-palette-search.test.ts src/renderer/src/lib/simulator-palette-search.test.ts src/renderer/src/lib/browser-page-palette-activation.test.ts src/renderer/src/lib/simulator-tab-palette-activation.test.ts src/renderer/src/lib/ensure-simulator-tab-behavior.test.ts src/renderer/src/runtime/web-session-tabs-sync-mirror-identity.test.ts src/shared/workspace-session-schema.test.ts", + "currentCommand": "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/cmd-j/worktree-checks-review-index.test.ts src/renderer/src/components/worktree-jump/WorktreeJumpPalette.test.tsx src/renderer/src/components/tab-bar/use-open-tab-search.test.ts src/renderer/src/lib/cmd-j-host-qualified-candidate-ownership.test.ts src/renderer/src/lib/browser-palette-page-entries.test.ts src/renderer/src/lib/browser-palette-search.test.ts src/renderer/src/lib/simulator-palette-search.test.ts src/renderer/src/lib/browser-page-palette-activation.test.ts src/renderer/src/lib/simulator-tab-palette-activation.test.ts src/renderer/src/lib/ensure-simulator-tab-behavior.test.ts src/renderer/src/runtime/web-session-tabs-sync-mirror-identity.test.ts src/shared/workspace-session/workspace-session-schema.test.ts", "result": "passed", "durationSeconds": 24.3, "summary": "The OpenCode-review-hardened candidate passed 225/225 focused contracts, including unfiltered ownership ambiguity under host filters and scoped open-tab search, review-cache ownership, rendered palette repo metadata, folder workspaces, inactive local simulator creation, paired SSH/runtime display metadata, and explicit-owner fail-closed resolution. Historical command preserved after the test-value audit removed the palette repo resolver suite. currentCommand is an administrative link to a remaining gate command; this historical run has not validated that command or equivalent coverage. Historical command and result are preserved after the test-value audit removed the tab-store assertions this run included. currentCommand is only an administrative link to the remaining gate command; the historical run has not validated that command or equivalent coverage." @@ -3651,8 +3652,8 @@ "invariant": "Shell startup scanning preserves every non-Orca output byte in order across arbitrary PTY chunk boundaries. Bash scalar and supported array PROMPT_COMMAND values preserve user bytes, hook order, and foreground exit status while emitting exactly one OSC 133 A/C/D lifecycle without syntax errors. Before user startup files run, the wrapper publishes its shell PID. If a later exec discards the ready marker, proof-based recovery releases queued startup input only after the launched shell's actual executable image with that exact PID owns the PTY foreground, emits its post-hook line-editor enable sequence, and exposes zle/readline termios; startup reads, line-init hooks, child foreground processes, and non-shell readline replacements cannot trigger that proof. The existing bounded compatibility timeout may enqueue input without proof, but must not publish readiness, lose or duplicate that input across reconnect, or execute it before the replacement shell can accept it.", "oracle": "Split Fish output immediately after the ready marker and after the following ESC introducer; local and daemon owners must emit the exact ESC [ ? 2004 h bytes and headless xterm must not render literal control text. Run the real generated wrappers under node-pty with disposable zsh, bash, and Fish startup files. Exercise Bash scalar and array PROMPT_COMMAND values with empty, repeated, escaped, whitespace, control-byte, odd-backslash, status-mutating, DEBUG-trap, zoxide, and RHEL-style hooks; require exact A,C,D:0,A,C,D:1,A,C ordering and byte preservation. Plain and exec -a replacement shells must receive one queued command at their first completed line editor without waiting for the 15-second timeout. The identical oracle must time out without the startup identity and prompt fallback. Same-shell reads, child-process reads, a blocking zle-line-init hook, sqlite3, and sqlite3 renamed zsh must not trigger prompt fallback. Relay owner coverage must use the same lossless scanner composition and release through the same prompt contract.", "commands": [ - "pnpm exec vitest run --config config/vitest.config.ts src/main/daemon/repro-13767-shell-ready-marker-lost-to-exec.test.ts src/main/daemon/bash-prompt-command-composition.test.ts src/main/pty/shell-startup/line-editor-ready-output-scanner.test.ts src/main/pty/shell-startup/shell-startup-identity-scanner.test.ts src/main/pty/shell-startup/shell-startup-output-scanner.test.ts src/main/pty/shell-startup/shell-prompt-readiness-probe.test.ts src/shared/pty-slave-line-discipline-echo.test.ts src/shared/shell-process-readiness.test.ts src/main/daemon/session.test.ts src/main/daemon/shell-ready.test.ts src/main/providers/local-pty/local-pty-shell-ready-marker-scan.test.ts src/main/providers/local-pty/local-pty-shell-ready-startup-command.test.ts src/main/providers/local-pty/local-pty-shell-ready-wrapper-generation.test.ts src/main/providers/local-pty/local-pty-provider-shell-readiness.test.ts", - "pnpm exec vitest run --config config/vitest.config.ts src/main/daemon/repro-13767-shell-ready-marker-lost-to-exec.test.ts src/main/pty/shell-startup/line-editor-ready-output-scanner.test.ts src/main/pty/shell-startup/shell-startup-identity-scanner.test.ts src/main/pty/shell-startup/shell-startup-output-scanner.test.ts src/main/pty/shell-startup/shell-prompt-readiness-probe.test.ts src/shared/pty-slave-line-discipline-echo.test.ts src/shared/shell-process-readiness.test.ts src/main/daemon/session.test.ts src/main/daemon/shell-ready.test.ts src/main/providers/local-pty/local-pty-shell-ready-marker-scan.test.ts src/main/providers/local-pty/local-pty-shell-ready-startup-command.test.ts src/main/providers/local-pty/local-pty-shell-ready-wrapper-generation.test.ts src/main/providers/local-pty/local-pty-provider-shell-readiness.test.ts", + "pnpm exec vitest run --config config/vitest.config.ts src/main/daemon/repro-13767-shell-ready-marker-lost-to-exec.test.ts src/main/daemon/bash-prompt-command-composition.test.ts src/main/pty/shell-startup/line-editor-ready-output-scanner.test.ts src/main/pty/shell-startup/shell-startup-identity-scanner.test.ts src/main/pty/shell-startup/shell-startup-output-scanner.test.ts src/main/pty/shell-startup/shell-prompt-readiness-probe.test.ts src/shared/terminal/pty/native-process/pty-slave-line-discipline-echo.test.ts src/shared/terminal/pty/native-process/shell-process-readiness.test.ts src/main/daemon/session.test.ts src/main/daemon/shell-ready.test.ts src/main/providers/local-pty/local-pty-shell-ready-marker-scan.test.ts src/main/providers/local-pty/local-pty-shell-ready-startup-command.test.ts src/main/providers/local-pty/local-pty-shell-ready-wrapper-generation.test.ts src/main/providers/local-pty/local-pty-provider-shell-readiness.test.ts", + "pnpm exec vitest run --config config/vitest.config.ts src/main/daemon/repro-13767-shell-ready-marker-lost-to-exec.test.ts src/main/pty/shell-startup/line-editor-ready-output-scanner.test.ts src/main/pty/shell-startup/shell-startup-identity-scanner.test.ts src/main/pty/shell-startup/shell-startup-output-scanner.test.ts src/main/pty/shell-startup/shell-prompt-readiness-probe.test.ts src/shared/terminal/pty/native-process/pty-slave-line-discipline-echo.test.ts src/shared/terminal/pty/native-process/shell-process-readiness.test.ts src/main/daemon/session.test.ts src/main/daemon/shell-ready.test.ts src/main/providers/local-pty/local-pty-shell-ready-marker-scan.test.ts src/main/providers/local-pty/local-pty-shell-ready-startup-command.test.ts src/main/providers/local-pty/local-pty-shell-ready-wrapper-generation.test.ts src/main/providers/local-pty/local-pty-provider-shell-readiness.test.ts", "pnpm exec vitest run --config config/vitest.config.ts --maxWorkers=1 src/main/daemon/shell-ready.test.ts src/main/pty/shell-startup/shell-startup-output-scanner.test.ts", "ORCA_E2E_WEB_CLIENT=1 SKIP_BUILD=1 pnpm exec playwright test tests/e2e/paired-startup-exec-readiness.spec.ts --config tests/playwright.config.ts --project electron-headless --project electron-headful --workers=1" ], @@ -3663,8 +3664,8 @@ "src/main/pty/shell-startup/shell-startup-identity-scanner.test.ts", "src/main/pty/shell-startup/shell-startup-output-scanner.test.ts", "src/main/pty/shell-startup/shell-prompt-readiness-probe.test.ts", - "src/shared/pty-slave-line-discipline-echo.test.ts", - "src/shared/shell-process-readiness.test.ts", + "src/shared/terminal/pty/native-process/pty-slave-line-discipline-echo.test.ts", + "src/shared/terminal/pty/native-process/shell-process-readiness.test.ts", "src/main/daemon/session.test.ts", "src/main/daemon/shell-ready.test.ts", "src/main/providers/local-pty/local-pty-shell-ready-marker-scan.test.ts", @@ -3738,7 +3739,7 @@ "runner": "local", "platform": "macos", "command": "pnpm exec vitest run --config config/vitest.config.ts src/main/daemon/repro-13767-shell-ready-marker-lost-to-exec.test.ts src/main/line-editor-ready-output-scanner.test.ts src/main/shell-startup-identity-scanner.test.ts src/main/shell-startup-output-scanner.test.ts src/main/shell-prompt-readiness-probe.test.ts src/shared/pty-slave-line-discipline-echo.test.ts src/shared/shell-process-readiness.test.ts src/main/daemon/session.test.ts src/main/daemon/shell-ready.test.ts src/main/providers/local-pty-shell-ready-marker-scan.test.ts src/main/providers/local-pty-shell-ready-startup-command.test.ts src/main/providers/local-pty-shell-ready-wrapper-generation.test.ts src/main/providers/local-pty-provider-shell-readiness.test.ts", - "currentCommand": "pnpm exec vitest run --config config/vitest.config.ts src/main/daemon/repro-13767-shell-ready-marker-lost-to-exec.test.ts src/main/pty/shell-startup/line-editor-ready-output-scanner.test.ts src/main/pty/shell-startup/shell-startup-identity-scanner.test.ts src/main/pty/shell-startup/shell-startup-output-scanner.test.ts src/main/pty/shell-startup/shell-prompt-readiness-probe.test.ts src/shared/pty-slave-line-discipline-echo.test.ts src/shared/shell-process-readiness.test.ts src/main/daemon/session.test.ts src/main/daemon/shell-ready.test.ts src/main/providers/local-pty/local-pty-shell-ready-marker-scan.test.ts src/main/providers/local-pty/local-pty-shell-ready-startup-command.test.ts src/main/providers/local-pty/local-pty-shell-ready-wrapper-generation.test.ts src/main/providers/local-pty/local-pty-provider-shell-readiness.test.ts", + "currentCommand": "pnpm exec vitest run --config config/vitest.config.ts src/main/daemon/repro-13767-shell-ready-marker-lost-to-exec.test.ts src/main/pty/shell-startup/line-editor-ready-output-scanner.test.ts src/main/pty/shell-startup/shell-startup-identity-scanner.test.ts src/main/pty/shell-startup/shell-startup-output-scanner.test.ts src/main/pty/shell-startup/shell-prompt-readiness-probe.test.ts src/shared/terminal/pty/native-process/pty-slave-line-discipline-echo.test.ts src/shared/terminal/pty/native-process/shell-process-readiness.test.ts src/main/daemon/session.test.ts src/main/daemon/shell-ready.test.ts src/main/providers/local-pty/local-pty-shell-ready-marker-scan.test.ts src/main/providers/local-pty/local-pty-shell-ready-startup-command.test.ts src/main/providers/local-pty/local-pty-shell-ready-wrapper-generation.test.ts src/main/providers/local-pty/local-pty-provider-shell-readiness.test.ts", "result": "passed", "durationSeconds": 6, "summary": "473 tests passed with one local Fish skip, including every-boundary scanner composition, real exec, silent-read, line-init-hook, renamed-image, disabled-bracketed-paste, and relay-owner oracles." @@ -3748,7 +3749,7 @@ "runner": "local", "platform": "macos", "command": "pnpm exec vitest run --config config/vitest.config.ts src/main/daemon/repro-13767-shell-ready-marker-lost-to-exec.test.ts src/main/daemon/bash-prompt-command-composition.test.ts src/main/line-editor-ready-output-scanner.test.ts src/main/shell-startup-identity-scanner.test.ts src/main/shell-startup-output-scanner.test.ts src/main/shell-prompt-readiness-probe.test.ts src/shared/pty-slave-line-discipline-echo.test.ts src/shared/shell-process-readiness.test.ts src/main/daemon/session.test.ts src/main/daemon/shell-ready.test.ts src/main/providers/local-pty-shell-ready-marker-scan.test.ts src/main/providers/local-pty-shell-ready-startup-command.test.ts src/main/providers/local-pty-shell-ready-wrapper-generation.test.ts src/main/providers/local-pty-provider-shell-readiness.test.ts", - "currentCommand": "pnpm exec vitest run --config config/vitest.config.ts src/main/daemon/repro-13767-shell-ready-marker-lost-to-exec.test.ts src/main/daemon/bash-prompt-command-composition.test.ts src/main/pty/shell-startup/line-editor-ready-output-scanner.test.ts src/main/pty/shell-startup/shell-startup-identity-scanner.test.ts src/main/pty/shell-startup/shell-startup-output-scanner.test.ts src/main/pty/shell-startup/shell-prompt-readiness-probe.test.ts src/shared/pty-slave-line-discipline-echo.test.ts src/shared/shell-process-readiness.test.ts src/main/daemon/session.test.ts src/main/daemon/shell-ready.test.ts src/main/providers/local-pty/local-pty-shell-ready-marker-scan.test.ts src/main/providers/local-pty/local-pty-shell-ready-startup-command.test.ts src/main/providers/local-pty/local-pty-shell-ready-wrapper-generation.test.ts src/main/providers/local-pty/local-pty-provider-shell-readiness.test.ts", + "currentCommand": "pnpm exec vitest run --config config/vitest.config.ts src/main/daemon/repro-13767-shell-ready-marker-lost-to-exec.test.ts src/main/daemon/bash-prompt-command-composition.test.ts src/main/pty/shell-startup/line-editor-ready-output-scanner.test.ts src/main/pty/shell-startup/shell-startup-identity-scanner.test.ts src/main/pty/shell-startup/shell-startup-output-scanner.test.ts src/main/pty/shell-startup/shell-prompt-readiness-probe.test.ts src/shared/terminal/pty/native-process/pty-slave-line-discipline-echo.test.ts src/shared/terminal/pty/native-process/shell-process-readiness.test.ts src/main/daemon/session.test.ts src/main/daemon/shell-ready.test.ts src/main/providers/local-pty/local-pty-shell-ready-marker-scan.test.ts src/main/providers/local-pty/local-pty-shell-ready-startup-command.test.ts src/main/providers/local-pty/local-pty-shell-ready-wrapper-generation.test.ts src/main/providers/local-pty/local-pty-provider-shell-readiness.test.ts", "result": "passed", "durationSeconds": 6, "summary": "233 tests passed with one local Fish skip, including exact Bash PROMPT_COMMAND byte/status/lifecycle composition across daemon, local, and relay owners." @@ -5783,7 +5784,7 @@ "pnpm exec vitest run --config config/vitest.config.ts src/main/ipc/browser/browser-preview-tool-authorization.test.ts src/main/browser/guest-lifecycle/manager/browser-manager-annotation-bridge.test.ts src/main/browser/guest-lifecycle/manager/browser-manager-guest-lifecycle.test.ts src/main/browser/backends/offscreen-browser-backend-lifecycle.test.ts src/main/browser/document-preview/doc-preview-guest-policy.test.ts src/shared/doc-preview-scheme.test.ts src/renderer/src/components/browser-pane/workspace-doc/doc-preview-document-actions.test.ts src/renderer/src/components/browser-pane/workspace-doc/use-doc-preview-guest-tools.test.ts src/renderer/src/components/editor/EditorPanelShell.header.test.tsx src/renderer/src/components/browser-pane/workspace-doc/HtmlDocPreview.toolbar.test.tsx", "pnpm exec vitest run --config config/vitest.config.ts src/main/ipc/doc-preview-grant-ipc.test.ts src/renderer/src/components/link-actions/LinkActionPopover.test.tsx src/renderer/src/runtime/sync-runtime-graph-editor-diff-tabs.test.ts", "pnpm exec vitest run --config config/vitest.config.ts src/main/ipc/browser/browser-preview-tool-authorization.test.ts src/main/ipc/browser/browser-tab-registration-wait.test.ts src/main/ipc/doc-preview-grant-ipc.test.ts src/main/browser/guest-lifecycle/manager/browser-manager-guest-lifecycle.test.ts src/main/browser/guest-lifecycle/manager/browser-manager-guest-policy-profile.test.ts src/main/browser/guest-lifecycle/manager/browser-manager-annotation-bridge.test.ts src/main/browser/backends/offscreen-browser-backend-lifecycle.test.ts src/main/browser/document-preview/doc-preview-guest-policy.test.ts src/shared/doc-preview-scheme.test.ts src/renderer/src/components/browser-pane/workspace-doc/use-doc-preview-guest-tools.test.ts src/renderer/src/components/browser-pane/workspace-doc/HtmlDocPreview.toolbar.test.tsx", - "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/store/slices/browser-page-conversion.test.ts src/renderer/src/runtime/sync-runtime-graph-conversion-publish.test.ts src/renderer/src/lib/workspace-doc-address-input.test.ts src/shared/workspace-doc-history.test.ts src/renderer/src/components/browser-pane/workspace-doc/HtmlDocPreview.toolbar.test.tsx src/renderer/src/components/browser-pane/assemble-chrome/browser-address-bar-suggestions.test.ts", + "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/store/slices/browser-page-conversion.test.ts src/renderer/src/runtime/sync-runtime-graph-conversion-publish.test.ts src/renderer/src/lib/workspace-doc-address-input.test.ts src/shared/workspace-session/workspace-doc-history.test.ts src/renderer/src/components/browser-pane/workspace-doc/HtmlDocPreview.toolbar.test.tsx src/renderer/src/components/browser-pane/assemble-chrome/browser-address-bar-suggestions.test.ts", "SKIP_BUILD=1 ORCA_E2E_WEB_CLIENT=1 ORCA_E2E_FORCE_HEADFUL=1 pnpm exec playwright test tests/e2e/paired-preview-address-bar-convergence.spec.ts --config tests/playwright.config.ts --project electron-headless --workers=1 --reporter=list", "SKIP_BUILD=1 ORCA_E2E_WEB_CLIENT=1 ORCA_E2E_FORCE_HEADFUL=1 pnpm exec playwright test tests/e2e/paired-remote-html-preview-local-render.spec.ts --config tests/playwright.config.ts --project electron-headless --workers=1 --reporter=line", "SKIP_BUILD=1 ORCA_E2E_WEB_CLIENT=1 ORCA_E2E_FORCE_HEADFUL=1 pnpm exec playwright test tests/e2e/paired-remote-html-preview-local-render.spec.ts --config tests/playwright.config.ts --project electron-headless --workers=1 --reporter=line --repeat-each=3", @@ -5830,7 +5831,7 @@ "src/renderer/src/store/slices/browser-page-conversion.test.ts", "src/renderer/src/runtime/sync-runtime-graph-conversion-publish.test.ts", "src/renderer/src/lib/workspace-doc-address-input.test.ts", - "src/shared/workspace-doc-history.test.ts", + "src/shared/workspace-session/workspace-doc-history.test.ts", "src/renderer/src/components/browser-pane/assemble-chrome/browser-address-bar-suggestions.test.ts", "tests/e2e/paired-remote-html-preview-local-render.spec.ts", "tests/e2e/paired-preview-address-bar-convergence.spec.ts", @@ -9296,14 +9297,14 @@ "invariant": "A fresh local renderer terminal spawn may recover from a saved startup cwd whose directory no longer exists only by spawning at the selected workspace root and printing a generic in-terminal notice; existing directories — including ones outside the worktree (#7685) — spawn as requested, and reattach, SSH, remote-runtime, runtime/API, and mobile callers keep exact cwd semantics. A long-lived POSIX shell whose cwd inode was deleted and replaced may run a wrapped OMP command from the live path named by its logical PWD only in a subshell; the parent shell cwd, OMP argv, status extension, and exit status remain unchanged, while a genuinely unavailable path fails visibly without invoking OMP. A usable physical cwd remains authoritative when PWD is unset or names a removed logical symlink instead of being remapped to a workspace fallback.", "oracle": "The shared resolver falls back to the workspace root only when the injected existence probe reports the resolved cwd missing and the workspace root present, and never probes floating terminals or a cwd equal to the root. The renderer sends cwdFallback only for fresh local IPC spawns, main honors it only when connectionId and sessionId are absent, WSL UNC paths never engage the probe-based fallback, main returns fallback metadata only after an actual fallback, the IPC transport preserves that metadata, and the connection layer writes a generic notice that omits the missing path. In real interactive Bash and Zsh PTYs, unset PWD and remove a logical symlink while the physical cwd stays usable, requiring OMP to remain there; then delete and recreate the active project path, require extension-enabled and extension-skipping invocations to observe the replacement inode with byte-exact argv and nonzero status preserved, require the parent shell to remain on the stale inode, unset PWD and require recovery through ORCA_WORKTREE_PATH, clear every logical fallback and require an actionable failure without invoking OMP, and finally delete the replacement and require the same for the missing PWD path.", "commands": [ - "pnpm exec vitest run --config config/vitest.config.ts src/shared/terminal-startup-cwd.test.ts", + "pnpm exec vitest run --config config/vitest.config.ts src/shared/shell/launch/terminal-startup-cwd.test.ts", "pnpm exec vitest run --config config/vitest.config.ts src/main/ipc/pty/pty-spawn-cwd-fallback.test.ts", "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/terminal-pane/pty-transport-connect-spawn.test.ts", "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/terminal-pane/pty-connection-spawn-and-startup.test.ts", "pnpm exec vitest run --config config/vitest.config.ts src/main/pty/shell-startup/omp-shell-wrapper.node-pty.test.ts src/main/pty/shell-startup/omp-shell-wrapper-alias-safety.test.ts" ], "testFiles": [ - "src/shared/terminal-startup-cwd.test.ts", + "src/shared/shell/launch/terminal-startup-cwd.test.ts", "src/main/ipc/pty/pty-spawn-cwd-fallback.test.ts", "src/renderer/src/components/terminal-pane/pty-transport-connect-spawn.test.ts", "src/renderer/src/components/terminal-pane/pty-connection-spawn-and-startup.test.ts", @@ -9312,7 +9313,7 @@ ], "assertionRefs": [ { - "file": "src/shared/terminal-startup-cwd.test.ts", + "file": "src/shared/shell/launch/terminal-startup-cwd.test.ts", "assertions": [ "a missing requested cwd falls back to the workspace root and reports the missing path to the callback", "existing cwds — nested or outside the worktree (#7685) — are never remapped", @@ -9371,6 +9372,7 @@ "runner": "local", "platform": "macos", "command": "pnpm exec vitest run --config config/vitest.config.ts src/shared/terminal-startup-cwd.test.ts", + "currentCommand": "pnpm exec vitest run --config config/vitest.config.ts src/shared/shell/launch/terminal-startup-cwd.test.ts", "result": "passed", "durationSeconds": 0.2, "summary": "1 test file passed, 21 tests passed; covers the missing-dir fallback policy, #7685 outside-worktree preservation, and root-missing/floating exemptions." @@ -16493,7 +16495,7 @@ "invariant": "The desktop PTY input queue retains at most 64 explicitly sourced pending terminal query replies and 4096 UTF-16 code units. Every retained reply reaches the provider as one atomic write, and ordinary, acknowledged, and reply input share one invocation-ordered FIFO so no later write overtakes an acknowledged write. Reentrant write callbacks cannot start a second drain worker or strand input admitted after clear/reuse. A reply's own echo is contained on the output side by projecting its known echo shapes; the ESC-initial verbatim shape is matched only when complete, never held as a partial, so a query torn at its own ESC is still answered. Overflow removes only the oldest query replies, never ordinary input except the documented modified-F3/CPR byte collision, and failure or teardown cannot clear a newer queue generation or strand an acknowledged promise.", "oracle": "Synchronously enqueue separate 10,000-entry OSC and DA1 reply floods before the scheduled drain and assert that only the initial immediate reply and newest 64 pending replies are written, each as one provider write, before a trailing keystroke. Stall an acknowledged write between earlier and later ordinary/reply input, then require teardown to settle it and same-id reuse to receive no stale tail. Reenter the queue synchronously from an acknowledged write with both enqueue and clear/reuse, requiring one drain and fresh input delivery only after the stale acknowledged write settles false. At the host boundary, defer an OSC reply and assert that separate or legacy-coalesced DA1/CPR replies flush after it in observed query order. At the remote-runtime boundary, preserve separate writes around pending ordinary input, async validation, and viewport-claim buffering. Repeat behind 10,000 ordinary inputs and exercise the text ceiling, real xterm generation, provider-write failure, rejected yield, and clear/reuse generation fencing.", "commands": [ - "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/terminal-pane/pty-input-write-queue.test.ts src/renderer/src/components/terminal-pane/pty-transport-input-write.test.ts src/shared/terminal/protocol/queries/terminal-query-reply.test.ts src/shared/pty-startup-ingress-live-query-reply.test.ts src/shared/pty-startup-reply-echo-shapes.test.ts", + "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/terminal-pane/pty-input-write-queue.test.ts src/renderer/src/components/terminal-pane/pty-transport-input-write.test.ts src/shared/terminal/protocol/queries/terminal-query-reply.test.ts src/shared/terminal/pty/ingress/pty-startup-ingress-live-query-reply.test.ts src/shared/terminal/pty/ingress/pty-startup-reply-echo-shapes.test.ts", "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/terminal-pane/remote-runtime-pty-batching.test.ts src/renderer/src/components/terminal-pane/remote-runtime-pty-query-reply-immediate.test.ts src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-input-coalescing.test.ts", "pnpm exec playwright test tests/e2e/terminal-osc-color-queries.spec.ts --config tests/playwright.config.ts --project electron-headless --workers=1", "pnpm exec playwright test tests/e2e/terminal-typing-latency.spec.ts --config tests/playwright.config.ts --project electron-headless --workers=1" @@ -16505,8 +16507,8 @@ "src/renderer/src/components/terminal-pane/remote-runtime-pty-query-reply-immediate.test.ts", "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-input-coalescing.test.ts", "src/shared/terminal/protocol/queries/terminal-query-reply.test.ts", - "src/shared/pty-startup-ingress-live-query-reply.test.ts", - "src/shared/pty-startup-reply-echo-shapes.test.ts", + "src/shared/terminal/pty/ingress/pty-startup-ingress-live-query-reply.test.ts", + "src/shared/terminal/pty/ingress/pty-startup-reply-echo-shapes.test.ts", "tests/e2e/terminal-osc-color-queries.spec.ts", "tests/e2e/terminal-typing-latency.spec.ts" ], @@ -16563,7 +16565,7 @@ ] }, { - "file": "src/shared/pty-startup-ingress-live-query-reply.test.ts", + "file": "src/shared/terminal/pty/ingress/pty-startup-ingress-live-query-reply.test.ts", "assertions": [ "repeated live query replies are delivered independently and their cooked echoes stay hidden" ] @@ -16587,7 +16589,7 @@ "runner": "local", "platform": "macos", "command": "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/terminal-pane/pty-input-write-queue.test.ts src/renderer/src/components/terminal-pane/pty-transport-input-write.test.ts src/shared/terminal-query-reply.test.ts src/shared/pty-startup-ingress-live-query-reply.test.ts src/shared/pty-startup-reply-echo-shapes.test.ts", - "currentCommand": "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/terminal-pane/pty-input-write-queue.test.ts src/renderer/src/components/terminal-pane/pty-transport-input-write.test.ts src/shared/terminal/protocol/queries/terminal-query-reply.test.ts src/shared/pty-startup-ingress-live-query-reply.test.ts src/shared/pty-startup-reply-echo-shapes.test.ts", + "currentCommand": "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/terminal-pane/pty-input-write-queue.test.ts src/renderer/src/components/terminal-pane/pty-transport-input-write.test.ts src/shared/terminal/protocol/queries/terminal-query-reply.test.ts src/shared/terminal/pty/ingress/pty-startup-ingress-live-query-reply.test.ts src/shared/terminal/pty/ingress/pty-startup-reply-echo-shapes.test.ts", "result": "passed", "durationSeconds": 15, "summary": "Five files and 149 tests passed in 15.16 seconds, including explicit IPC reply-source routing, the 10,000-reply count and text ceilings, 10,000-entry ordinary backlog preservation, acknowledged-write FIFO barriers, synchronous reentrancy fencing, prompt teardown settlement, same-id generation fencing, real xterm OSC query floods, single-shot drain-failure recovery, and one-reply-per-write echo containment." diff --git a/config/repo-host-read-baseline.txt b/config/repo-host-read-baseline.txt index 59ce100412c..05398b4ddea 100644 --- a/config/repo-host-read-baseline.txt +++ b/config/repo-host-read-baseline.txt @@ -51,5 +51,5 @@ 1 src/shared/github/github-cache-key.ts 1 src/shared/new-workspace-dialog-repo.ts 1 src/shared/sidebar-list/workspace-review-facts.ts -1 src/shared/workspace-session-terminal-buffers.ts +1 src/shared/workspace-session/workspace-session-terminal-buffers.ts 1 src/shared/worktree/ownership.ts diff --git a/config/scripts/agent-status-hot-path-benchmark.ts b/config/scripts/agent-status-hot-path-benchmark.ts index ba388654b13..2decbff25b5 100644 --- a/config/scripts/agent-status-hot-path-benchmark.ts +++ b/config/scripts/agent-status-hot-path-benchmark.ts @@ -16,7 +16,7 @@ import { makeWorktree, TEST_REPO } from '@/store/slices/store-test-helpers' -import { makePaneKey } from '../../src/shared/stable-pane-id' +import { makePaneKey } from '../../src/shared/workspace-layout/stable-pane-id' import { getDefaultSettings } from '../../src/shared/constants' import { createAgentStatusPaneRoutingIndex, diff --git a/config/scripts/ci-shard-timings.json b/config/scripts/ci-shard-timings.json index 237b6385e27..6d9662546f4 100644 --- a/config/scripts/ci-shard-timings.json +++ b/config/scripts/ci-shard-timings.json @@ -11278,7 +11278,7 @@ "src/shared/client-environment-info.test.ts": 46, "src/shared/clipboard-image.test.ts": 43, "src/shared/clipboard-text.test.ts": 73, - "src/shared/closed-terminal-tab-tombstones.test.ts": 94, + "src/shared/workspace-layout/closed-terminal-tab-tombstones.test.ts": 94, "src/shared/cloud-service-url.test.ts": 37, "src/shared/coalescing-keyed-runner.test.ts": 119, "src/shared/codebuddy-agent.test.ts": 301, @@ -11803,18 +11803,18 @@ "src/shared/project-identity-succession.test.ts": 76, "src/shared/promise-settlement-waiters.test.ts": 183, "src/shared/protocol-compat.test.ts": 153, - "src/shared/pty-delivery-diagnostics.test.ts": 47, - "src/shared/pty-liveness-verdict.test.ts": 40, - "src/shared/pty-owner-backend.test.ts": 52, - "src/shared/pty-owner-color-query-colors.test.ts": 65, - "src/shared/pty-running-work-probe.test.ts": 60, - "src/shared/pty-slave-line-discipline-echo.test.ts": 51, - "src/shared/pty-startup-ingress-kitty.test.ts": 135, - "src/shared/pty-startup-ingress-launcher-appearance.test.ts": 133, - "src/shared/pty-startup-ingress-lifetime-colors.test.ts": 115, - "src/shared/pty-startup-ingress-live-query-reply.test.ts": 120, - "src/shared/pty-startup-ingress.test.ts": 174, - "src/shared/pty-startup-reply-echo-shapes.test.ts": 66, + "src/shared/terminal/pty/diagnostics/pty-delivery-diagnostics.test.ts": 47, + "src/shared/terminal/pty/lifecycle/pty-liveness-verdict.test.ts": 40, + "src/shared/terminal/pty/lifecycle/pty-owner-backend.test.ts": 52, + "src/shared/terminal/pty/ingress/pty-owner-color-query-colors.test.ts": 65, + "src/shared/terminal/pty/lifecycle/pty-running-work-probe.test.ts": 60, + "src/shared/terminal/pty/native-process/pty-slave-line-discipline-echo.test.ts": 51, + "src/shared/terminal/pty/ingress/pty-startup-ingress-kitty.test.ts": 135, + "src/shared/terminal/pty/ingress/pty-startup-ingress-launcher-appearance.test.ts": 133, + "src/shared/terminal/pty/ingress/pty-startup-ingress-lifetime-colors.test.ts": 115, + "src/shared/terminal/pty/ingress/pty-startup-ingress-live-query-reply.test.ts": 120, + "src/shared/terminal/pty/ingress/pty-startup-ingress.test.ts": 174, + "src/shared/terminal/pty/ingress/pty-startup-reply-echo-shapes.test.ts": 66, "src/shared/published-pane-agent-identity.test.ts": 89, "src/shared/source-control/ai/generation/pull-request-generation.test.ts": 51, "src/shared/qoder-agent.test.ts": 445, @@ -11952,8 +11952,8 @@ "src/shared/workspace-setup/setup-script-telemetry.test.ts": 44, "src/shared/sha256.test.ts": 55, "src/shared/shell-foreground-snapshot.test.ts": 272, - "src/shared/shell-process-detection.test.ts": 47, - "src/shared/shell-process-readiness.test.ts": 89, + "src/shared/agent-status/process/shell-process-detection.test.ts": 47, + "src/shared/terminal/pty/native-process/shell-process-readiness.test.ts": 89, "src/shared/sidebar-feed-client/sidebar-feed-reader.test.ts": 438, "src/shared/sidebar-feed-client/sidebar-feed-snapshot.test.ts": 488, "src/shared/sidebar-list/paired-server-activity-facts.test.ts": 203, @@ -11999,7 +11999,7 @@ "src/shared/ssh-retained-payload-admission.test.ts": 69, "src/shared/ssh-target-generation.test.ts": 44, "src/shared/ssh-target-source.test.ts": 40, - "src/shared/stable-pane-id.test.ts": 42, + "src/shared/workspace-layout/stable-pane-id.test.ts": 42, "src/shared/startup-command-staging.node-pty.test.ts": 2207, "src/shared/startup-command-staging.test.ts": 302, "src/shared/startup-command-submission.test.ts": 37, @@ -12024,12 +12024,12 @@ "src/shared/telemetry-events.test.ts": 212, "src/shared/telemetry-payload-contracts.test.ts": 282, "src/shared/telemetry-workspace-create-schemas.test.ts": 192, - "src/shared/terminal-agent-status-processor.test.ts": 74, + "src/shared/program-status/terminal-agent-status-processor.test.ts": 74, "src/shared/terminal/output/terminal-bell-detector.test.ts": 40, "src/shared/terminal/protocol/queries/terminal-color-scheme-protocol.test.ts": 39, "src/shared/terminal/input/terminal-composer-draft.test.ts": 73, "src/shared/terminal-themes/terminal-custom-themes.test.ts": 48, - "src/shared/terminal-exit-cause.test.ts": 64, + "src/shared/terminal/pty/lifecycle/terminal-exit-cause.test.ts": 64, "src/shared/terminal/links/terminal-file-uri-link.test.ts": 51, "src/shared/terminal/links/terminal-file-url-target.test.ts": 47, "src/shared/terminal/appearance/terminal-fonts.test.ts": 40, @@ -12038,7 +12038,7 @@ "src/shared/terminal/input/terminal-input.test.ts": 85, "src/shared/terminal/protocol/input-modes/terminal-kitty-keyboard-mode-tracker.test.ts": 84, "src/shared/terminal/protocol/input-modes/terminal-kitty-keyboard-tail-retention.test.ts": 220, - "src/shared/terminal-leaf-move.test.ts": 47, + "src/shared/workspace-layout/terminal-leaf-move.test.ts": 47, "src/shared/terminal/appearance/terminal-line-height-settings.test.ts": 41, "src/shared/terminal/links/terminal-links-cjk.test.ts": 116, "src/shared/terminal/links/terminal-links-redos.test.ts": 90, @@ -12052,9 +12052,9 @@ "src/shared/terminal/output/terminal-osc133-carry-retention.test.ts": 443, "src/shared/terminal/output/terminal-osc133-self-closed-zone.test.ts": 97, "src/shared/terminal/output/terminal-output-side-effects.test.ts": 106, - "src/shared/terminal-pane-placement.test.ts": 300, - "src/shared/terminal-pane-title-reset.test.ts": 74, - "src/shared/terminal-pane-title-sanitization.test.ts": 41, + "src/shared/workspace-layout/terminal-pane-placement.test.ts": 300, + "src/shared/workspace-layout/terminal-pane-title-reset.test.ts": 74, + "src/shared/workspace-layout/terminal-pane-title-sanitization.test.ts": 41, "src/shared/terminal/protocol/escape/terminal-partial-escape-tail-ground-scan.test.ts": 59, "src/shared/terminal/protocol/escape/terminal-partial-escape-tail.fuzz.test.ts": 79, "src/shared/terminal/protocol/escape/terminal-partial-escape-tail.test.ts": 65, @@ -12066,15 +12066,15 @@ "src/shared/terminal/replay/testing/terminal-restore-parity-writes.test.ts": 153, "src/shared/terminal/replay/terminal-scrollback-policy.test.ts": 43, "src/shared/terminal/output/terminal-selection-gutter.test.ts": 49, - "src/shared/terminal-session-state-save-failure.test.ts": 46, - "src/shared/terminal-start-failure.test.ts": 46, - "src/shared/terminal-startup-cwd.test.ts": 276, + "src/shared/workspace-session/terminal-session-state-save-failure.test.ts": 46, + "src/shared/terminal/pty/lifecycle/terminal-start-failure.test.ts": 46, + "src/shared/shell/launch/terminal-startup-cwd.test.ts": 276, "src/shared/terminal/stream/terminal-stream-json-byte-length.test.ts": 51, "src/shared/terminal/stream/terminal-stream-protocol.test.ts": 39, - "src/shared/terminal-surface-close-target.test.ts": 43, + "src/shared/workspace-layout/terminal-surface-close-target.test.ts": 43, "src/shared/terminal/protocol/escape/terminal-synchronized-output-scan.test.ts": 45, "src/shared/terminal-themes/terminal-theme-selection.test.ts": 64, - "src/shared/terminal-title-agent-type.test.ts": 197, + "src/shared/agent-status/title/terminal-title-agent-type.test.ts": 197, "src/shared/terminal/protocol/queries/terminal-view-attributes.test.ts": 54, "src/shared/terminal/viewport/terminal-viewport.test.ts": 104, "src/shared/terminal/viewport/terminal-zero-dimensions-diagnostic.test.ts": 32, @@ -12138,7 +12138,7 @@ "src/shared/workspace-cleanup/workspace-cleanup-ui-state.test.ts": 46, "src/shared/workspace-cleanup/workspace-cleanup.test.ts": 46, "src/shared/workspace-creator-visibility.test.ts": 114, - "src/shared/workspace-doc-history.test.ts": 59, + "src/shared/workspace-session/workspace-doc-history.test.ts": 59, "src/shared/workspace-last-active-switch-on.test.ts": 52, "src/shared/workspace-last-active.test.ts": 50, "src/shared/workspace-layout/old-client/old-client-method-translation.test.ts": 352, @@ -12200,19 +12200,19 @@ "src/shared/workspace-name.test.ts": 49, "src/shared/workspace-attachments/workspace-reference-identity.test.ts": 82, "src/shared/workspace-review-checks.test.ts": 82, - "src/shared/workspace-session-browser-history.test.ts": 241, - "src/shared/workspace-session-partition-owner.test.ts": 31, - "src/shared/workspace-session-salvage-equivalence.test.ts": 531, - "src/shared/workspace-session-salvage.test.ts": 930, - "src/shared/workspace-session-schema-field-coverage.test.ts": 295, - "src/shared/workspace-session-schema.sleeping-agent.test.ts": 337, - "src/shared/workspace-session-schema.test.ts": 343, - "src/shared/workspace-session-tab-activity.test.ts": 45, - "src/shared/workspace-session-tab-focus-schema.test.ts": 290, - "src/shared/workspace-session-terminal-buffers.test.ts": 294, - "src/shared/workspace-session-terminal-schema.test.ts": 269, - "src/shared/workspace-session-terminal-tab-close.test.ts": 248, - "src/shared/workspace-session-validation-work.test.ts": 314, + "src/shared/workspace-session/workspace-session-browser-history.test.ts": 241, + "src/shared/workspace-session/workspace-session-partition-owner.test.ts": 31, + "src/shared/workspace-session/workspace-session-salvage-equivalence.test.ts": 531, + "src/shared/workspace-session/workspace-session-salvage.test.ts": 930, + "src/shared/workspace-session/workspace-session-schema-field-coverage.test.ts": 295, + "src/shared/workspace-session/workspace-session-schema.sleeping-agent.test.ts": 337, + "src/shared/workspace-session/workspace-session-schema.test.ts": 343, + "src/shared/workspace-session/workspace-session-tab-activity.test.ts": 45, + "src/shared/workspace-session/workspace-session-tab-focus-schema.test.ts": 290, + "src/shared/workspace-session/workspace-session-terminal-buffers.test.ts": 294, + "src/shared/workspace-session/workspace-session-terminal-schema.test.ts": 269, + "src/shared/workspace-session/workspace-session-terminal-tab-close.test.ts": 248, + "src/shared/workspace-session/workspace-session-validation-work.test.ts": 314, "src/shared/workspace-disk-space/workspace-space-compaction.test.ts": 50, "src/shared/workspace-disk-space/workspace-space-entry-traversal.test.ts": 349, "src/shared/workspace-disk-space/workspace-space-scan-budget.test.ts": 54, diff --git a/config/scripts/ci-unit-files.mjs b/config/scripts/ci-unit-files.mjs index 8d76b47de83..cc5c6c0be9d 100644 --- a/config/scripts/ci-unit-files.mjs +++ b/config/scripts/ci-unit-files.mjs @@ -41,7 +41,7 @@ export const UNIT_EXCLUDE = [ 'src/shared/fish-query-reply-child-stdin.node-pty.test.ts', 'src/shared/fish-wsl-cwd-report.node-pty.test.ts', 'src/main/wsl/filesystem/wsl-sh-cwd-report.node-pty.test.ts', - 'src/shared/pty-reply-echo-shapes.node-pty.test.ts', + 'src/shared/terminal/pty/ingress/pty-reply-echo-shapes.node-pty.test.ts', 'src/shared/startup-shell-portability.live-shell.test.ts', 'src/shared/posix-command-path-lookup.test.ts', 'tests/e2e/relay-region-compatibility.unit.test.ts', diff --git a/config/scripts/ci-unit-input-ownership.json b/config/scripts/ci-unit-input-ownership.json index 38f120b61e1..e563d31e890 100644 --- a/config/scripts/ci-unit-input-ownership.json +++ b/config/scripts/ci-unit-input-ownership.json @@ -98,7 +98,7 @@ "sourceClosureSha256": "08558478f5a5a6c0aa2e4e4d92d609ff55c11564d04a957f999f2302c478ae80" }, { - "file": "src/shared/workspace-session-browser-history.ts", + "file": "src/shared/workspace-session/workspace-session-browser-history.ts", "inputs": [], "emptyEnv": [], "reason": "Reviewed URL/data projection only; no indirect repository reads. The entire local source closure and dependency/runtime context are fingerprinted.", diff --git a/config/scripts/node-server-test-paths.mjs b/config/scripts/node-server-test-paths.mjs index 7dc21a1e530..04d7dea48b6 100644 --- a/config/scripts/node-server-test-paths.mjs +++ b/config/scripts/node-server-test-paths.mjs @@ -37,7 +37,7 @@ export function nodeServerTestPaths({ ...(artifact ? [ 'tests/e2e/daemon-running-work-probe.unit.test.ts', - 'src/shared/pty-running-work-probe.test.ts', + 'src/shared/terminal/pty/lifecycle/pty-running-work-probe.test.ts', 'src/main/orcad/orcad-packaged-node-pty.integration.test.ts', 'src/main/providers/agent-foreground-process-git-bash.win32.test.ts', 'src/main/orcad/orcad-node-launcher.integration.test.ts', diff --git a/config/scripts/pr-code-change-scope.mjs b/config/scripts/pr-code-change-scope.mjs index 63e90471fea..a923aa5e34e 100644 --- a/config/scripts/pr-code-change-scope.mjs +++ b/config/scripts/pr-code-change-scope.mjs @@ -265,7 +265,7 @@ const CROSS_VERSION_WIRE_PREFIXES = [ 'src/shared/agent-session/view/structured-agent-session-agent-status', 'src/shared/agent-session/view/structured-agent-session-projection', 'src/shared/agent-session/requests/structured-agent-session-projection-sender.spec.ts', - 'src/shared/workspace-session-sleeping-agents', + 'src/shared/workspace-session/workspace-session-sleeping-agents', // A current desktop's launch route against a released server's capabilities (cross-version-paired-structured-launch). 'src/shared/structured-native-chat-launch-route.ts', 'src/renderer/src/lib/agent-launch-routing.ts', diff --git a/config/scripts/pr-layout-oracle-route.mjs b/config/scripts/pr-layout-oracle-route.mjs index c407fafb8ff..96cd9da77c7 100644 --- a/config/scripts/pr-layout-oracle-route.mjs +++ b/config/scripts/pr-layout-oracle-route.mjs @@ -10,7 +10,7 @@ const LAYOUT_ORACLE_PREFIXES = [ // Layout model, persistence and compatibility folders. 'src/shared/workspace-layout/', 'src/shared/remote-layout-snapshot.ts', - 'src/shared/terminal-leaf-move.ts', + 'src/shared/workspace-layout/terminal-leaf-move.ts', 'src/main/persistence/terminal-topology/', 'src/main/persistence/restoring-sessions/', 'src/main/persistence/loading-store/pty-binding-', diff --git a/config/scripts/pr-shell-contract-prefixes.mjs b/config/scripts/pr-shell-contract-prefixes.mjs index eecf573d6e7..76bb3cefed9 100644 --- a/config/scripts/pr-shell-contract-prefixes.mjs +++ b/config/scripts/pr-shell-contract-prefixes.mjs @@ -12,7 +12,7 @@ export const SHELL_PREFIXES = [ 'src/main/runtime/structured-session-child-env', 'src/renderer/src/components/terminal-pane/fish-color-scheme', 'src/shared/fish-', - 'src/shared/pty-reply-echo-shapes', + 'src/shared/terminal/pty/ingress/pty-reply-echo-shapes', 'src/shared/startup-shell-portability', 'src/shared/posix-command-path-lookup', 'src/main/wsl/filesystem/wsl-shell-cwd-report', diff --git a/config/scripts/pr-wsl-e2e-source-routes.mjs b/config/scripts/pr-wsl-e2e-source-routes.mjs index 3fcf0172b42..eeb466ab357 100644 --- a/config/scripts/pr-wsl-e2e-source-routes.mjs +++ b/config/scripts/pr-wsl-e2e-source-routes.mjs @@ -25,7 +25,7 @@ export const PR_WSL_E2E_SOURCE_ROUTES = [ ], matches: (file) => isProductSource(file) && - /^(?:config\/scripts\/(?:verify-wsl-e2e-participation|verify-wsl-no-background-boot-participation|verify-playwright-participation)\.mjs$|src\/main\/(?:wsl[/-]|pty\/.*wsl|providers\/wsl)|src\/shared\/(?:wsl-|windows-terminal-shell|shell-argument-quoting)|src\/renderer\/src\/.*(?:terminal-paste|pty-paste)|tests\/e2e\/(?:golden-tab-bar-agent-launch\.spec|terminal-windows-shell-paste-ownership\.spec|terminal-inline-images-windows\.spec|wsl-bridge-no-background-boot\.spec|helpers\/(?:wsl-golden-stub-agent|golden-stub-agent))|\.github\/(?:actions\/setup-wsl-test-runtime\/|workflows\/windows-wsl-e2e\.yml))/.test( + /^(?:config\/scripts\/(?:verify-wsl-e2e-participation|verify-wsl-no-background-boot-participation|verify-playwright-participation)\.mjs$|src\/main\/(?:wsl[/-]|pty\/.*wsl|providers\/wsl)|src\/shared\/(?:wsl-|windows-terminal-shell|shell\/launch\/shell-argument-quoting)|src\/renderer\/src\/.*(?:terminal-paste|pty-paste)|tests\/e2e\/(?:golden-tab-bar-agent-launch\.spec|terminal-windows-shell-paste-ownership\.spec|terminal-inline-images-windows\.spec|wsl-bridge-no-background-boot\.spec|helpers\/(?:wsl-golden-stub-agent|golden-stub-agent))|\.github\/(?:actions\/setup-wsl-test-runtime\/|workflows\/windows-wsl-e2e\.yml))/.test( file ) } diff --git a/config/scripts/session-write-hot-path-benchmark.mjs b/config/scripts/session-write-hot-path-benchmark.mjs index a51b1f876fb..9c2f05df0b3 100644 --- a/config/scripts/session-write-hot-path-benchmark.mjs +++ b/config/scripts/session-write-hot-path-benchmark.mjs @@ -47,7 +47,9 @@ for (const [name, value] of [ } const { capTerminalScrollbackSessionBuffer } = await import( - pathToFileURL(path.join(ROOT, 'src/shared/workspace-session-terminal-buffers.ts')).href + pathToFileURL( + path.join(ROOT, 'src/shared/workspace-session/workspace-session-terminal-buffers.ts') + ).href ) const { TERMINAL_SCROLLBACK_SESSION_BUFFER_BYTE_LIMIT } = await import( pathToFileURL(path.join(ROOT, 'src/shared/terminal/replay/terminal-scrollback-limits.ts')).href @@ -60,7 +62,7 @@ const { clampUtf8TextTail, measureUtf8ByteLength } = await import( pathToFileURL(path.join(ROOT, 'src/shared/utf8-byte-limits.ts')).href ) const { isTerminalLeafId, makePaneKey, parsePaneKey } = await import( - pathToFileURL(path.join(ROOT, 'src/shared/stable-pane-id.ts')).href + pathToFileURL(path.join(ROOT, 'src/shared/workspace-layout/stable-pane-id.ts')).href ) function median(samples) { diff --git a/config/scripts/terminal-shutdown-byte-limit-benchmark.mjs b/config/scripts/terminal-shutdown-byte-limit-benchmark.mjs index 1ccdc4766cf..630270b689a 100644 --- a/config/scripts/terminal-shutdown-byte-limit-benchmark.mjs +++ b/config/scripts/terminal-shutdown-byte-limit-benchmark.mjs @@ -18,7 +18,7 @@ const layoutFunctions = layoutAst.statements.filter( (node) => ts.isFunctionDeclaration(node) && layoutNames.includes(node.name?.text) ) assert.equal(layoutFunctions.length, layoutNames.length) -const layoutSubset = `import { isTerminalLeafId } from '../../../../shared/stable-pane-id'; +const layoutSubset = `import { isTerminalLeafId } from '../../../../shared/workspace-layout/stable-pane-id'; import { readSplitRatio, SPLIT_RATIO_TOLERANCE } from '@/lib/pane-manager/pane-split-ratio'; ${layoutFunctions.map((node) => node.getText(layoutAst)).join('\n')}` diff --git a/config/scripts/vitest-node-runtime-files.mjs b/config/scripts/vitest-node-runtime-files.mjs index 20e0ee65a65..bd54f3a1309 100644 --- a/config/scripts/vitest-node-runtime-files.mjs +++ b/config/scripts/vitest-node-runtime-files.mjs @@ -156,7 +156,7 @@ const NODE_RUNTIME_INCLUDE = [ 'src/main/browser/guest-lifecycle/popups/browser-popup-native-compatibility.electron.test.ts', 'src/main/browser/guest-lifecycle/popups/browser-popup-background-compatibility.electron.test.ts', 'src/main/ai-vault/scanners/devin/session-scanner-devin-db.test.ts', - 'src/shared/workspace-session-salvage.test.ts', + 'src/shared/workspace-session/workspace-session-salvage.test.ts', 'src/main/git/repo-detection.test.ts', 'src/renderer/src/components/browser-pane/annotate/browser-grab-toast-owner-cleanup.test.tsx', 'src/main/window/native-chat-paste-files.test.ts', diff --git a/config/scripts/wsl-e2e-lane-contract.test.mjs b/config/scripts/wsl-e2e-lane-contract.test.mjs index 65454fd2e8b..42040c44fdb 100644 --- a/config/scripts/wsl-e2e-lane-contract.test.mjs +++ b/config/scripts/wsl-e2e-lane-contract.test.mjs @@ -9,7 +9,7 @@ describe('real WSL terminal lane', () => { 'src/main/wsl/execution/wsl-runner.ts', 'src/main/pty/shell-startup/wsl-orca-env.ts', 'src/shared/wsl-login-shell-command.ts', - 'src/shared/shell-argument-quoting.ts', + 'src/shared/shell/launch/shell-argument-quoting.ts', 'src/shared/windows-terminal-shell.ts', 'tests/e2e/helpers/wsl-golden-stub-agent.ts', 'tests/e2e/golden-tab-bar-agent-launch.spec.ts', diff --git a/config/scripts/wsl-git-shell-benchmark.mjs b/config/scripts/wsl-git-shell-benchmark.mjs index 857229d4441..90c4de3f113 100644 --- a/config/scripts/wsl-git-shell-benchmark.mjs +++ b/config/scripts/wsl-git-shell-benchmark.mjs @@ -131,7 +131,9 @@ async function main() { const { buildWslLoginShellCommand } = await jiti.import( '../../src/shared/wsl-login-shell-command.ts' ) - const { quotePosixShell } = await jiti.import('../../src/shared/shell-argument-quoting.ts') + const { quotePosixShell } = await jiti.import( + '../../src/shared/shell/launch/shell-argument-quoting.ts' + ) const loginProbe = buildWslLoginShellCommand( `printf '\\n__ORCA_PATH__%s\\n__ORCA_GIT__%s\\n__ORCA_HOME__%s\\n' "$PATH" "$(command -v git)" "$HOME"` diff --git a/mobile/src/automations/automation-run-agent.ts b/mobile/src/automations/automation-run-agent.ts index 5dda7b91198..d69cbd44457 100644 --- a/mobile/src/automations/automation-run-agent.ts +++ b/mobile/src/automations/automation-run-agent.ts @@ -4,7 +4,7 @@ import { parseExecutionHostId, type ExecutionHostId } from '../../../src/shared/execution-host' -import { parsePaneKey } from '../../../src/shared/stable-pane-id' +import { parsePaneKey } from '../../../src/shared/workspace-layout/stable-pane-id' import { hostScopeCensusIsComplete } from '../../../src/shared/runtime-listing-host-scope' import { salvagingArray } from '../../../src/shared/zod-salvage' import { bindDeferredRpcOperation, defineRpcOperation } from '../transport/rpc-operation' diff --git a/mobile/src/platform/native-pdf-focus.test.tsx b/mobile/src/platform/native-pdf-focus.test.tsx index 262369dcd4a..8e85c8bc20a 100644 --- a/mobile/src/platform/native-pdf-focus.test.tsx +++ b/mobile/src/platform/native-pdf-focus.test.tsx @@ -97,7 +97,7 @@ vi.mock('expo-file-system', () => { vi.mock('expo-clipboard', () => ({})) vi.mock('expo-document-picker', () => ({})) vi.mock('expo-image-picker', () => ({})) -vi.mock('../../modules/orca-mobile-web-shell/src', () => ({ +vi.mock('../../modules/orca-mobile-web-shell/src/index', () => ({ presentPdf: async (uri: string) => { device.presentations.push(uri) } diff --git a/mobile/src/session/mobile-existing-agent-launch.test.ts b/mobile/src/session/mobile-existing-agent-launch.test.ts index 0b058046afe..46761f6f5bc 100644 --- a/mobile/src/session/mobile-existing-agent-launch.test.ts +++ b/mobile/src/session/mobile-existing-agent-launch.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from 'vitest' -import { isTerminalLeafId } from '../../../src/shared/stable-pane-id' -import { isValidHostTerminalTabId } from '../../../src/shared/terminal-tab-id' +import { isTerminalLeafId } from '../../../src/shared/workspace-layout/stable-pane-id' +import { isValidHostTerminalTabId } from '../../../src/shared/workspace-layout/terminal-tab-id' import { structuredSessionOperationId } from './structured-session-operation-id' import type { RpcClient } from '../transport/rpc-client' import { markRpcDeliveryUnknown } from '../transport/rpc-delivery-ambiguity' diff --git a/mobile/src/session/mobile-existing-agent-launch.ts b/mobile/src/session/mobile-existing-agent-launch.ts index d798ebbe465..2ea68e1e628 100644 --- a/mobile/src/session/mobile-existing-agent-launch.ts +++ b/mobile/src/session/mobile-existing-agent-launch.ts @@ -11,7 +11,7 @@ import type { } from '../../../src/shared/agent-launch/contracts/agent-launch-intent' import { isStructuredAgentId } from '../../../src/shared/agent-session/lifecycle/agent-session-provider-handle-encoding' import { AGENT_LAUNCH_TAB_CLOSED_CODE } from '../../../src/shared/agent-launch/contracts/agent-launch-tab-closed' -import { makePaneKey } from '../../../src/shared/stable-pane-id' +import { makePaneKey } from '../../../src/shared/workspace-layout/stable-pane-id' import { createStructuredAgentSessionId } from '../../../src/shared/agent-session/structured-agent-session-create' import type { TuiAgent } from '../../../src/shared/agent-launch/catalog/tui-agent' import type { RpcClient } from '../transport/rpc-client' diff --git a/mobile/src/session/mobile-terminal-tab-agent.ts b/mobile/src/session/mobile-terminal-tab-agent.ts index a0da79c0f62..d2f8287378a 100644 --- a/mobile/src/session/mobile-terminal-tab-agent.ts +++ b/mobile/src/session/mobile-terminal-tab-agent.ts @@ -1,6 +1,6 @@ import { stripLeadingAgentTitleDecorationOrEmpty } from '../../../src/shared/agent-status/title/agent-title-decoration' import { isClaudeManagementTitle } from '../../../src/shared/agent-status/title/agent-title-core' -import { isShellProcess } from '../../../src/shared/shell-process-detection' +import { isShellProcess } from '../../../src/shared/agent-status/process/shell-process-detection' import { agentTypeToIconAgent } from '../../../src/shared/agent-status/presentation/agent-type-icon-agent' import { resolveTabAgentFromSignalSnapshot } from '../../../src/shared/tab-agent-from-signals' import type { AgentStatusEntry } from '../../../src/shared/agent-status/contracts/agent-status-types' diff --git a/mobile/src/session/native-chat/mobile-native-chat-send.ts b/mobile/src/session/native-chat/mobile-native-chat-send.ts index ec5a52b2969..d512da2247c 100644 --- a/mobile/src/session/native-chat/mobile-native-chat-send.ts +++ b/mobile/src/session/native-chat/mobile-native-chat-send.ts @@ -3,7 +3,7 @@ import { isRpcDeliveryUnknown } from '../../transport/rpc-delivery-ambiguity' import { isLogicalClientCutoverError } from '../../transport/stable-logical-rpc-client' import { nativeChatTerminalWrite } from '../mobile-session-write-operations' import { typeAgentTuiCommand } from '../../../../src/shared/agent-launch/startup/agent-tui-command-typing' -import { readTerminalSendAcknowledgment } from '../../../../src/shared/terminal-send-acknowledgment' +import { readTerminalSendAcknowledgment } from '../../../../src/shared/terminal/pty/lifecycle/terminal-send-acknowledgment' import { AGENT_TUI_CLEAR_MAX_LINES, countAgentTuiInputLines, diff --git a/mobile/src/session/notification-pane-tab.ts b/mobile/src/session/notification-pane-tab.ts index d1a862928b6..68d70328c05 100644 --- a/mobile/src/session/notification-pane-tab.ts +++ b/mobile/src/session/notification-pane-tab.ts @@ -1,4 +1,4 @@ -import { parsePaneKey } from '../../../src/shared/stable-pane-id' +import { parsePaneKey } from '../../../src/shared/workspace-layout/stable-pane-id' import { structuredAgentSessionPaneKey, structuredAgentSessionTabId diff --git a/mobile/src/session/use-mobile-session-terminal-create-agent-launch.test.ts b/mobile/src/session/use-mobile-session-terminal-create-agent-launch.test.ts index 16f05ad2f3b..e60e4468dca 100644 --- a/mobile/src/session/use-mobile-session-terminal-create-agent-launch.test.ts +++ b/mobile/src/session/use-mobile-session-terminal-create-agent-launch.test.ts @@ -6,7 +6,7 @@ import type { AgentLaunchOutcome, AgentLaunchPromptReceipt } from '../../../src/shared/agent-launch/contracts/agent-launch-intent' -import { parsePaneKey } from '../../../src/shared/stable-pane-id' +import { parsePaneKey } from '../../../src/shared/workspace-layout/stable-pane-id' import type { RpcClient } from '../transport/rpc-client' import { markRpcDeliveryUnknown } from '../transport/rpc-delivery-ambiguity' import type { RpcResponse } from '../transport/types' diff --git a/src/cli/handlers/account.ts b/src/cli/handlers/account.ts index 6aa4f9d9662..4989c34cc4c 100644 --- a/src/cli/handlers/account.ts +++ b/src/cli/handlers/account.ts @@ -8,7 +8,7 @@ import { RuntimeClientError } from '../runtime-client' import { stripElectronRunAsNode } from '../runtime/orca-app-executable' import { rejectRemoteSelectionFlags } from '../remote-selection-flag-rejection' import { buildWslExecArgs, buildWslLoginShellCommand } from '../../shared/wsl-login-shell-command' -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' import { isWindowsFnmDefaultAliasDir } from '../../shared/fnm-default-alias-dirs' import { getVersionManagerBinPaths, diff --git a/src/cli/handlers/terminal-close.ts b/src/cli/handlers/terminal-close.ts index 2b2e5e7895a..d11b4e17da8 100644 --- a/src/cli/handlers/terminal-close.ts +++ b/src/cli/handlers/terminal-close.ts @@ -6,7 +6,7 @@ import type { CommandHandler } from '../dispatch' import { formatTerminalClose, reportCliError, printResult } from '../format' import { RuntimeClientError } from '../runtime-client' import { getRequiredWorktreeSelector, getTerminalHandle } from '../selectors' -import { describeUnconfirmedCloseStop } from '../../shared/pty-liveness-verdict' +import { describeUnconfirmedCloseStop } from '../../shared/terminal/pty/lifecycle/pty-liveness-verdict' /** A false stop receipt is an error only when the host supplied a liveness verdict. */ function terminalCloseFailure(close: RuntimeTerminalClose): RuntimeClientError | null { diff --git a/src/cli/handlers/terminal-daemon.ts b/src/cli/handlers/terminal-daemon.ts index 12cfa55aacb..58bb5824fdc 100644 --- a/src/cli/handlers/terminal-daemon.ts +++ b/src/cli/handlers/terminal-daemon.ts @@ -2,7 +2,7 @@ import type { CommandHandler } from '../dispatch' import { describePtyProcessCeiling, type PtyProcessCeilingState -} from '../../shared/pty-process-ceiling-state' +} from '../../shared/terminal/pty/native-process/pty-process-ceiling-state' import { printResult } from '../format' import { RuntimeClientError } from '../runtime-client' diff --git a/src/cli/orchestration-mutation-recovery.ts b/src/cli/orchestration-mutation-recovery.ts index 4de9cfa22e4..bb4a2eddf5a 100644 --- a/src/cli/orchestration-mutation-recovery.ts +++ b/src/cli/orchestration-mutation-recovery.ts @@ -1,4 +1,4 @@ -import { quotePosixShellDoubleQuotedApostrophe } from '../shared/shell-argument-quoting' +import { quotePosixShellDoubleQuotedApostrophe } from '../shared/shell/launch/shell-argument-quoting' import { RuntimeClientError, RuntimeRpcFailureError } from './runtime-client' import { recoverableOrchestrationArgs, diff --git a/src/cli/paired-terminal-desktop-reveal.test.ts b/src/cli/paired-terminal-desktop-reveal.test.ts index 4b470c4244a..d968decb2cd 100644 --- a/src/cli/paired-terminal-desktop-reveal.test.ts +++ b/src/cli/paired-terminal-desktop-reveal.test.ts @@ -16,7 +16,7 @@ vi.mock('./runtime-client', () => ({ })) vi.mock('./runtime/environments', () => ({ resolveEnvironment: mocks.resolveEnvironment })) -import type { TerminalPaneRevealTarget } from '../shared/terminal-pane-reveal' +import type { TerminalPaneRevealTarget } from '../shared/workspace-layout/terminal-pane-reveal' import type { RuntimeClient } from './runtime-client' import { revealPairedTerminalOnLocalDesktop } from './paired-terminal-desktop-reveal' diff --git a/src/cli/paired-terminal-desktop-reveal.ts b/src/cli/paired-terminal-desktop-reveal.ts index 2eb159b9f05..7b05da725a1 100644 --- a/src/cli/paired-terminal-desktop-reveal.ts +++ b/src/cli/paired-terminal-desktop-reveal.ts @@ -1,6 +1,6 @@ import { toRuntimeExecutionHostId } from '../shared/execution-host' import type { RuntimeTerminalShow } from '../shared/runtime-types' -import type { RuntimeTerminalReveal } from '../shared/terminal-pane-reveal' +import type { RuntimeTerminalReveal } from '../shared/workspace-layout/terminal-pane-reveal' import { RuntimeClient } from './runtime-client' import { resolveEnvironment } from './runtime/environments' diff --git a/src/cli/shell-command-quote.ts b/src/cli/shell-command-quote.ts index 6ad5e3d73f2..d1c31632069 100644 --- a/src/cli/shell-command-quote.ts +++ b/src/cli/shell-command-quote.ts @@ -1,4 +1,4 @@ -import { quotePosixShell } from '../shared/shell-argument-quoting' +import { quotePosixShell } from '../shared/shell/launch/shell-argument-quoting' export function quoteCliCommandArgument(value: string): string { if (/^[a-zA-Z0-9._:/@-]+$/.test(value)) { diff --git a/src/cli/terminal-format.ts b/src/cli/terminal-format.ts index c06196e0d9a..4154d109629 100644 --- a/src/cli/terminal-format.ts +++ b/src/cli/terminal-format.ts @@ -1,4 +1,7 @@ -import { PTY_LIVE_NOTE, describeUnconfirmedCloseStop } from '../shared/pty-liveness-verdict' +import { + PTY_LIVE_NOTE, + describeUnconfirmedCloseStop +} from '../shared/terminal/pty/lifecycle/pty-liveness-verdict' import { describeTerminalWaitBlockedReason } from '../shared/terminal/runtime-policy/terminal-wait-blocked-reason-legacy-alias' import { formatListingHostScope, type WithAnnotatedHostScope } from './omitted-host-scope-selectors' import type { diff --git a/src/main/agent-hooks/ended-process-reconciliation.test.ts b/src/main/agent-hooks/ended-process-reconciliation.test.ts index 9ca8a907181..257d8c67b30 100644 --- a/src/main/agent-hooks/ended-process-reconciliation.test.ts +++ b/src/main/agent-hooks/ended-process-reconciliation.test.ts @@ -2,7 +2,7 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, beforeEach, describe, expect, it } from 'vitest' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { AgentHookServer } from './server' import { buildBody, postHookEvent } from './server.test-fixtures' diff --git a/src/main/agent-hooks/first-work-branch-rename-test-harness.ts b/src/main/agent-hooks/first-work-branch-rename-test-harness.ts index 86276a038f5..2627651dec2 100644 --- a/src/main/agent-hooks/first-work-branch-rename-test-harness.ts +++ b/src/main/agent-hooks/first-work-branch-rename-test-harness.ts @@ -1,7 +1,8 @@ import type { vi } from 'vitest' import type { GlobalSettings } from '../../shared/global-settings-types' import type { Repo } from '../../shared/repo-types' -import { WORKTREE_ID_SEPARATOR } from '../../shared/worktree/id' +import '../../shared/worktree/id' +import { WORKTREE_ID_SEPARATOR } from '../../shared/terminal/pty/lifecycle/pty-session-id-format' import type { FirstWorkBranchRenameDeps, FirstWorkBranchRenameEvent diff --git a/src/main/agent-hooks/first-work-branch-rename.test.ts b/src/main/agent-hooks/first-work-branch-rename.test.ts index 315781bec4c..1cb5a281b2e 100644 --- a/src/main/agent-hooks/first-work-branch-rename.test.ts +++ b/src/main/agent-hooks/first-work-branch-rename.test.ts @@ -7,7 +7,8 @@ import type { AgentJournalRenderItem } from '../../shared/agent-session/journal/ import type { AgentSessionJournal } from '../native-chat/agent-session-journal/journal-store' import { StructuredAgentSessionStatusFeed } from '../native-chat/agent-session-wire/structured-agent-session-status-feed' import { maybeAutoRenameWorkspaceOnFirstStructuredTurn } from './first-work-structured-session-rename' -import { WORKTREE_ID_SEPARATOR } from '../../shared/worktree/id' +import '../../shared/worktree/id' +import { WORKTREE_ID_SEPARATOR } from '../../shared/terminal/pty/lifecycle/pty-session-id-format' const { gitExecFileAsyncMock, diff --git a/src/main/agent-hooks/first-work-branch-rename.ts b/src/main/agent-hooks/first-work-branch-rename.ts index d3f41ef72c7..f85a3df55e7 100644 --- a/src/main/agent-hooks/first-work-branch-rename.ts +++ b/src/main/agent-hooks/first-work-branch-rename.ts @@ -3,7 +3,7 @@ import type { Repo } from '../../shared/repo-types' import { isFolderRepo } from '../../shared/repo-kind' import { getRepoIdFromWorktreeId, splitWorktreeIdForFilesystem } from '../../shared/worktree/id' import { parseWorkspaceKey } from '../../shared/workspace-scope' -import { parsePaneKey } from '../../shared/stable-pane-id' +import { parsePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { humanizeBranchSlug, isAutoGeneratedCreatureBranchName, diff --git a/src/main/agent-hooks/manual-compact-hook-stream.test.ts b/src/main/agent-hooks/manual-compact-hook-stream.test.ts index 746fc47852d..ca59a4a1cee 100644 --- a/src/main/agent-hooks/manual-compact-hook-stream.test.ts +++ b/src/main/agent-hooks/manual-compact-hook-stream.test.ts @@ -9,7 +9,7 @@ import { seedClaudeSubagentRosterFromSnapshots } from '../../shared/agent-hook-l import type { AgentHookEventPayload } from '../../shared/agent-hook-listener/listener-event' import type { AgentHookRelayEnvelope } from '../../shared/agent-hook-listener/transport/agent-hook-relay' import type { AgentSubagentSnapshot } from '../../shared/agent-status/contracts/agent-status-subagent-snapshot' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { AgentHookServer } from './server' vi.mock('../telemetry/client', () => ({ track: vi.fn() })) diff --git a/src/main/agent-hooks/manual-compact-status-cleanup.test.ts b/src/main/agent-hooks/manual-compact-status-cleanup.test.ts index 2c9f9df43a8..c254216aca1 100644 --- a/src/main/agent-hooks/manual-compact-status-cleanup.test.ts +++ b/src/main/agent-hooks/manual-compact-status-cleanup.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { AgentHookServer } from './server' vi.mock('../telemetry/client', () => ({ track: vi.fn() })) diff --git a/src/main/agent-hooks/posix-hook-command.ts b/src/main/agent-hooks/posix-hook-command.ts index d1f681be79d..4b5b6a27651 100644 --- a/src/main/agent-hooks/posix-hook-command.ts +++ b/src/main/agent-hooks/posix-hook-command.ts @@ -1,4 +1,4 @@ -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' import { POSIX_HOOK_STDIN_DRAIN_COMMAND } from './hook-stdin-contract' // Missing scripts must become silent no-ops rather than fail every tool call. diff --git a/src/main/agent-hooks/restored-status-dead-terminal-sweep.test.ts b/src/main/agent-hooks/restored-status-dead-terminal-sweep.test.ts index f77cab65f0c..14196592ce9 100644 --- a/src/main/agent-hooks/restored-status-dead-terminal-sweep.test.ts +++ b/src/main/agent-hooks/restored-status-dead-terminal-sweep.test.ts @@ -4,7 +4,7 @@ import { join } from 'node:path' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { AgentSubagentSnapshot } from '../../shared/agent-status/contracts/agent-status-subagent-snapshot' import { isLocalExecutionHost } from '../../shared/execution-host' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { toAppSshPtyId } from '../../shared/ssh-pty-id' import { AgentHookServer } from './server' import { buildBody, postHookEvent } from './server.test-fixtures' diff --git a/src/main/agent-hooks/server-agent-presence.test.ts b/src/main/agent-hooks/server-agent-presence.test.ts index cb9de57a138..898e2bcd998 100644 --- a/src/main/agent-hooks/server-agent-presence.test.ts +++ b/src/main/agent-hooks/server-agent-presence.test.ts @@ -3,7 +3,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, describe, expect, it, vi } from 'vitest' import { AgentHookServer } from './server' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { buildBody, LEAF_1, PANE, postHookEvent } from './server.test-fixtures' vi.mock('../telemetry/client', () => ({ track: vi.fn() })) diff --git a/src/main/agent-hooks/server-ai-vault-liveness.test.ts b/src/main/agent-hooks/server-ai-vault-liveness.test.ts index 5afb167927c..e873ef27eb3 100644 --- a/src/main/agent-hooks/server-ai-vault-liveness.test.ts +++ b/src/main/agent-hooks/server-ai-vault-liveness.test.ts @@ -2,7 +2,7 @@ import { mkdtemp, rm } from 'node:fs/promises' import { tmpdir } from 'node:os' import { join } from 'node:path' import { describe, expect, it } from 'vitest' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { AgentHookServer } from './server' const PANE = makePaneKey('external-live', '11111111-1111-4111-8111-111111111111') diff --git a/src/main/agent-hooks/server-authority-evidence.test.ts b/src/main/agent-hooks/server-authority-evidence.test.ts index afe21398fda..cde14906cc3 100644 --- a/src/main/agent-hooks/server-authority-evidence.test.ts +++ b/src/main/agent-hooks/server-authority-evidence.test.ts @@ -2,7 +2,7 @@ import { createHash } from 'node:crypto' import { afterEach, describe, expect, it } from 'vitest' import type { AgentHookEventPayload } from '../../shared/agent-hook-listener/listener-event' import { seedLegacyAgentStatusForTests } from '../../shared/agent-hook-listener/listener-state' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { AgentHookServer } from './server' const PANE_KEY = makePaneKey('tab-authority', '11111111-1111-4111-8111-111111111111') diff --git a/src/main/agent-hooks/server-closed-tab-suppression.test.ts b/src/main/agent-hooks/server-closed-tab-suppression.test.ts index 2fded3f94bf..bc5b9496a1a 100644 --- a/src/main/agent-hooks/server-closed-tab-suppression.test.ts +++ b/src/main/agent-hooks/server-closed-tab-suppression.test.ts @@ -2,7 +2,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { createHash } from 'node:crypto' import { AgentHookServer, _internals } from './server' import { CLOSED_AGENT_STATUS_TAB_IDS_MAX } from './server/server-constants' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { buildBody, PANE, diff --git a/src/main/agent-hooks/server-codex-subagent-transcript.test.ts b/src/main/agent-hooks/server-codex-subagent-transcript.test.ts index 274e8994749..df296618b7e 100644 --- a/src/main/agent-hooks/server-codex-subagent-transcript.test.ts +++ b/src/main/agent-hooks/server-codex-subagent-transcript.test.ts @@ -4,7 +4,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { AgentHookServer } from './server' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' const PANE_KEY = makePaneKey('tab-1', '11111111-1111-4111-8111-111111111111') const CHILD_ID = '019fa65f-3144-7151-9c02-cff7a28f316f' diff --git a/src/main/agent-hooks/server-grok-discovery.test.ts b/src/main/agent-hooks/server-grok-discovery.test.ts index 15a52036765..5570ab9d8cf 100644 --- a/src/main/agent-hooks/server-grok-discovery.test.ts +++ b/src/main/agent-hooks/server-grok-discovery.test.ts @@ -3,7 +3,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import * as agentHookListener from '../../shared/agent-hook-listener/grok-result-discovery' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { AgentHookServer } from './server' const PANE_KEY = makePaneKey('tab-1', '11111111-1111-4111-8111-111111111111') diff --git a/src/main/agent-hooks/server-hook-http-ingest.test.ts b/src/main/agent-hooks/server-hook-http-ingest.test.ts index d5d8ec0bda5..8c91abf8298 100644 --- a/src/main/agent-hooks/server-hook-http-ingest.test.ts +++ b/src/main/agent-hooks/server-hook-http-ingest.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { AgentHookServer, _internals } from './server' import { AGENT_STATUS_MAX_FIELD_LENGTH } from '../../shared/agent-status/contracts/agent-status-field-normalization' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { buildBody, PANE, LEAF_2, LEAF_3 } from './server.test-fixtures' const { getCohortAtEmitMock, trackMock } = vi.hoisted(() => ({ diff --git a/src/main/agent-hooks/server-hook-root-acquisition.test.ts b/src/main/agent-hooks/server-hook-root-acquisition.test.ts index 75ce5218028..08ef8a93e59 100644 --- a/src/main/agent-hooks/server-hook-root-acquisition.test.ts +++ b/src/main/agent-hooks/server-hook-root-acquisition.test.ts @@ -4,7 +4,7 @@ import { join } from 'node:path' import { describe, expect, it, vi } from 'vitest' import type { AgentHookServer } from './server' import { PANE } from './server.test-fixtures' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { NOW, CLAUDE, diff --git a/src/main/agent-hooks/server-hook-root-replay.test.ts b/src/main/agent-hooks/server-hook-root-replay.test.ts index a4ebd18eb5f..7fb1e4ffdd0 100644 --- a/src/main/agent-hooks/server-hook-root-replay.test.ts +++ b/src/main/agent-hooks/server-hook-root-replay.test.ts @@ -3,7 +3,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { beforeEach, describe, expect, it, vi } from 'vitest' import { PANE } from './server.test-fixtures' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { readHookRootEvidence, type HookPaneRoot diff --git a/src/main/agent-hooks/server-last-status-hydrate-validation.test.ts b/src/main/agent-hooks/server-last-status-hydrate-validation.test.ts index 22f73bf44a1..e705548c242 100644 --- a/src/main/agent-hooks/server-last-status-hydrate-validation.test.ts +++ b/src/main/agent-hooks/server-last-status-hydrate-validation.test.ts @@ -12,7 +12,7 @@ import { import { tmpdir } from 'node:os' import { join } from 'node:path' import { AgentHookServer, _internals } from './server' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { buildBody, postHookEvent, diff --git a/src/main/agent-hooks/server-muse-session-log-poll.test.ts b/src/main/agent-hooks/server-muse-session-log-poll.test.ts index cc9458c58c2..f0f60cc36f5 100644 --- a/src/main/agent-hooks/server-muse-session-log-poll.test.ts +++ b/src/main/agent-hooks/server-muse-session-log-poll.test.ts @@ -5,7 +5,7 @@ import { join } from 'node:path' import { AgentHookServer } from './server' import type { EnrichedAgentHookEventPayload } from './server/server-types' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' const PANE_KEY = makePaneKey('tab-1', '11111111-1111-4111-8111-111111111111') const SESSION_ID = '01a0caa3-0e77-7d41-bad7-46283a45633d' diff --git a/src/main/agent-hooks/server-observation-provenance.test.ts b/src/main/agent-hooks/server-observation-provenance.test.ts index b2461a5f3cc..4b38fcdb078 100644 --- a/src/main/agent-hooks/server-observation-provenance.test.ts +++ b/src/main/agent-hooks/server-observation-provenance.test.ts @@ -3,7 +3,7 @@ import { existsSync, mkdtempSync, readFileSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' import { AgentHookServer, _internals } from './server' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import type { AgentStatusObservation } from '../../shared/agent-status/contracts/agent-status-observation' const { getCohortAtEmitMock, trackMock } = vi.hoisted(() => ({ diff --git a/src/main/agent-hooks/server-opencode-binder.test.ts b/src/main/agent-hooks/server-opencode-binder.test.ts index 917be1807a5..a26cf558e86 100644 --- a/src/main/agent-hooks/server-opencode-binder.test.ts +++ b/src/main/agent-hooks/server-opencode-binder.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { AgentHookSource } from '../../shared/agent-hook-listener/transport/agent-hook-relay' import { lookupOpenCodeSessionPane } from '../../shared/agent-hook-listener/opencode-session-registry' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import type { BinderSessionRow, OpenCodeSessionCursor diff --git a/src/main/agent-hooks/server-opencode-lifecycle.test.ts b/src/main/agent-hooks/server-opencode-lifecycle.test.ts index c546ae52bcc..b3901285f09 100644 --- a/src/main/agent-hooks/server-opencode-lifecycle.test.ts +++ b/src/main/agent-hooks/server-opencode-lifecycle.test.ts @@ -1,5 +1,5 @@ import { afterEach, describe, expect, it } from 'vitest' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { AgentHookServer } from './server' const PANE = makePaneKey('tab-opencode', '11111111-1111-4111-8111-111111111111') diff --git a/src/main/agent-hooks/server-opencode-tui-identity.test.ts b/src/main/agent-hooks/server-opencode-tui-identity.test.ts index 46699cb119d..19009c102e0 100644 --- a/src/main/agent-hooks/server-opencode-tui-identity.test.ts +++ b/src/main/agent-hooks/server-opencode-tui-identity.test.ts @@ -8,7 +8,7 @@ import { lookupOpenCodePaneLaunchToken, lookupOpenCodeSessionPane } from '../../shared/agent-hook-listener/opencode-session-registry' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' const PANE_A = makePaneKey('tab-a', 'aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa') const PANE_B = makePaneKey('tab-b', 'bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb') diff --git a/src/main/agent-hooks/server-pane-authority.test.ts b/src/main/agent-hooks/server-pane-authority.test.ts index b74df7e60f9..4a74f7a5f82 100644 --- a/src/main/agent-hooks/server-pane-authority.test.ts +++ b/src/main/agent-hooks/server-pane-authority.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { AgentHookServer } from './server' import { PANE_KEY_ALIASES_MAX } from './server/server-constants' diff --git a/src/main/agent-hooks/server-removed-worktree-foreign-authority.test.ts b/src/main/agent-hooks/server-removed-worktree-foreign-authority.test.ts index daa99b603c1..eeda56001a8 100644 --- a/src/main/agent-hooks/server-removed-worktree-foreign-authority.test.ts +++ b/src/main/agent-hooks/server-removed-worktree-foreign-authority.test.ts @@ -4,7 +4,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, beforeEach, describe, expect, it } from 'vitest' import { AgentHookServer, _internals } from './server' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { LEAF_1 } from './server.test-fixtures' const REMOVED = 'repo::/removed' diff --git a/src/main/agent-hooks/server-removed-worktree-status.test.ts b/src/main/agent-hooks/server-removed-worktree-status.test.ts index 773e2e54f70..e05dbe504e3 100644 --- a/src/main/agent-hooks/server-removed-worktree-status.test.ts +++ b/src/main/agent-hooks/server-removed-worktree-status.test.ts @@ -3,7 +3,7 @@ import { mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'nod import { tmpdir } from 'node:os' import { join } from 'node:path' import { AgentHookServer, _internals } from './server' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { LEAF_1, LEAF_2, LEAF_3, LEAF_4, LEAF_5, recentTs } from './server.test-fixtures' const REMOVED = 'repo-1::/workspace/removed' diff --git a/src/main/agent-hooks/server-start-failure-lifecycle.test.ts b/src/main/agent-hooks/server-start-failure-lifecycle.test.ts index badd6289ce7..b318d4fda9d 100644 --- a/src/main/agent-hooks/server-start-failure-lifecycle.test.ts +++ b/src/main/agent-hooks/server-start-failure-lifecycle.test.ts @@ -21,7 +21,7 @@ vi.mock('../telemetry/cohort-classifier', () => ({ getCohortAtEmit: getCohortAtE import { AgentHookServer, _internals } from './server' import { RelayAgentHookServer } from '../../wsl-guest/agent-hook-server' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' const PANE = makePaneKey('tab-lifecycle', '11111111-1111-4111-8111-111111111111') diff --git a/src/main/agent-hooks/server-status-listener-fanout.test.ts b/src/main/agent-hooks/server-status-listener-fanout.test.ts index 8f78a1163ca..0085b3899b6 100644 --- a/src/main/agent-hooks/server-status-listener-fanout.test.ts +++ b/src/main/agent-hooks/server-status-listener-fanout.test.ts @@ -3,7 +3,7 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' import { AgentHookServer, _internals } from './server' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { buildBody, PANE, diff --git a/src/main/agent-hooks/server-structured-canonical-status.test.ts b/src/main/agent-hooks/server-structured-canonical-status.test.ts index 4a5d431d421..384264a5d06 100644 --- a/src/main/agent-hooks/server-structured-canonical-status.test.ts +++ b/src/main/agent-hooks/server-structured-canonical-status.test.ts @@ -5,7 +5,7 @@ import { type AgentStatusStructuredSessionSubject } from '../../shared/agent-status/contracts/agent-status-subject' import type { AgentSessionStatusSummary } from '../../shared/agent-session/agent-session-wire' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { structuredAgentSessionPaneKey, structuredAgentSessionTabId diff --git a/src/main/agent-hooks/server.claude-interactive-question.test.ts b/src/main/agent-hooks/server.claude-interactive-question.test.ts index 8ebbe9c2503..18e8756f548 100644 --- a/src/main/agent-hooks/server.claude-interactive-question.test.ts +++ b/src/main/agent-hooks/server.claude-interactive-question.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { AgentHookServer } from './server' const PANE_KEY = makePaneKey('tab-question', '11111111-1111-4111-8111-111111111111') diff --git a/src/main/agent-hooks/server.test-fixtures.ts b/src/main/agent-hooks/server.test-fixtures.ts index 96d3d1dffdc..1479f9330ab 100644 --- a/src/main/agent-hooks/server.test-fixtures.ts +++ b/src/main/agent-hooks/server.test-fixtures.ts @@ -1,4 +1,4 @@ -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import type { AgentHookServer } from './server' export const LEAF_1 = '11111111-1111-4111-8111-111111111111' diff --git a/src/main/agent-hooks/server/launch-resume-identity-event.ts b/src/main/agent-hooks/server/launch-resume-identity-event.ts new file mode 100644 index 00000000000..26581316f17 --- /dev/null +++ b/src/main/agent-hooks/server/launch-resume-identity-event.ts @@ -0,0 +1,10 @@ +import type { AgentProviderSessionMetadata } from '../../../shared/agent-session/lifecycle/agent-session-resume' + +export type LaunchResumeIdentityEvent = { + paneKey: string + worktreeId?: string + agentType: string + providerSession: AgentProviderSessionMetadata + /** When the pane's process launched; a row reported since then is the agent's own. */ + launchedAt: number +} diff --git a/src/main/agent-hooks/server/server-authority-aliases.ts b/src/main/agent-hooks/server/server-authority-aliases.ts index 835e1987c74..a6b348207b2 100644 --- a/src/main/agent-hooks/server/server-authority-aliases.ts +++ b/src/main/agent-hooks/server/server-authority-aliases.ts @@ -5,7 +5,7 @@ import { } from '../../../shared/agent-hook-listener/listener-state' import { AGENT_STATUS_2A_CURRENT_PRODUCER_MODE } from '../../../shared/agent-status/transport/agent-status-legacy-adapter' import { canRegisterPaneKeyAlias, isOpaqueRemintedPaneKey } from '../../../shared/pane-key-alias' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { PANE_KEY_ALIASES_MAX } from './server-constants' import type { EnrichedAgentHookEventPayload, PaneKeyAliasPersistenceListener } from './server-types' import type { LegacyPaneKeyAliasEntry } from '../../../shared/persisted-state-types' diff --git a/src/main/agent-hooks/server/server-authority-fences.ts b/src/main/agent-hooks/server/server-authority-fences.ts index 0f06d3102f2..17b0e3a1cc4 100644 --- a/src/main/agent-hooks/server/server-authority-fences.ts +++ b/src/main/agent-hooks/server/server-authority-fences.ts @@ -1,5 +1,5 @@ import { clearPaneCacheState } from '../../../shared/agent-hook-listener/listener-state' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { AgentHookServerAuthorityAliases } from './server-authority-aliases' import type { EnrichedAgentHookEventPayload, diff --git a/src/main/agent-hooks/server/server-ingest-remote.ts b/src/main/agent-hooks/server/server-ingest-remote.ts index db92016c0e5..675a68e5aa1 100644 --- a/src/main/agent-hooks/server/server-ingest-remote.ts +++ b/src/main/agent-hooks/server/server-ingest-remote.ts @@ -18,7 +18,7 @@ import { resolveLegacyCompactTrigger } from '../../../shared/agent-hook-listener/providers/claude-compact-completion' import { launchTokenHash } from '../../../shared/agent-hook-listener/transport/agent-hook-spool' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import type { IncomingAgentHookEvent } from './server-types' import { AGENT_STATUS_LEGACY_UNADVERTISED_PEER_CAPABILITIES, diff --git a/src/main/agent-hooks/server/server-ingest-terminal.ts b/src/main/agent-hooks/server/server-ingest-terminal.ts index 281e798a4d7..184f4761918 100644 --- a/src/main/agent-hooks/server/server-ingest-terminal.ts +++ b/src/main/agent-hooks/server/server-ingest-terminal.ts @@ -1,12 +1,13 @@ +import type { LaunchResumeIdentityEvent } from './launch-resume-identity-event' import { trackEmptyPaneKeyHook } from './server-transport-rules' import { MAX_PANE_KEY_LEN } from '../../../shared/agent-hook-listener/listener-limits' -import { parseLegacyNumericPaneKey, parsePaneKey } from '../../../shared/stable-pane-id' +import { + parseLegacyNumericPaneKey, + parsePaneKey +} from '../../../shared/workspace-layout/stable-pane-id' import { terminalStatusPayloadMatchesHook } from '../../../shared/agent-status/lifecycle/agent-terminal-status-equivalence' import type { ParsedAgentStatusPayload } from '../../../shared/agent-status/contracts/agent-status-types' -import { - agentProviderSessionsEqual, - type AgentProviderSessionMetadata -} from '../../../shared/agent-session/lifecycle/agent-session-resume' +import { agentProviderSessionsEqual } from '../../../shared/agent-session/lifecycle/agent-session-resume' import type { EnrichedAgentHookEventPayload } from './server-types' import type { AgentHookEventPayload } from '../../../shared/agent-hook-listener/listener-event' import { agentSubagentsEqual } from '../../../shared/agent-status/contracts/agent-status-subagent-snapshot' @@ -19,14 +20,7 @@ const PROGRAM_STATUS_FACET_REPUBLISH_MS = 250 export abstract class AgentHookServerIngestTerminal extends AgentHookServerIngestNormalization { /** Seed resume identity before the first hook; Codex SessionStart waits for the first turn (#10923). */ - recordLaunchResumeIdentity(event: { - paneKey: string - worktreeId?: string - agentType: string - providerSession: AgentProviderSessionMetadata - /** When the pane's process launched; a row reported since then is the agent's own. */ - launchedAt: number - }): void { + recordLaunchResumeIdentity(event: LaunchResumeIdentityEvent): void { const paneKey = this.resolvePaneKeyAlias(event.paneKey.trim()) const parsedPaneKey = parsePaneKey(paneKey) if (!parsedPaneKey || paneKey.length > MAX_PANE_KEY_LEN) { diff --git a/src/main/agent-hooks/server/server-lifecycle.ts b/src/main/agent-hooks/server/server-lifecycle.ts index 07b43f3c0af..0b1fe9b0da6 100644 --- a/src/main/agent-hooks/server/server-lifecycle.ts +++ b/src/main/agent-hooks/server/server-lifecycle.ts @@ -2,7 +2,7 @@ import { AgentHookStartup, listenForAgentHooks } from '../../../shared/agent-hook-listener/transport/agent-hook-startup' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { createServer, type IncomingMessage, type ServerResponse } from 'node:http' import { randomUUID } from 'node:crypto' diff --git a/src/main/agent-hooks/server/server-listeners.ts b/src/main/agent-hooks/server/server-listeners.ts index 76f0562f5fd..a7ede15e0c0 100644 --- a/src/main/agent-hooks/server/server-listeners.ts +++ b/src/main/agent-hooks/server/server-listeners.ts @@ -24,7 +24,7 @@ import { serializeAgentStatusSubject } from '../../../shared/agent-status/contra import { structuredStatusLegacyEvent } from './server-structured-status-row' import { PaneTimers } from './program-status/pane-timers' import { ProgramStatusFacetStore } from './program-status/facet-store' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' // Unassigned rows sort after the listing counter, which starts at 1. const UNORDERED_STATUS_ROW = Number.MAX_SAFE_INTEGER diff --git a/src/main/agent-hooks/server/server-persistence-validation.ts b/src/main/agent-hooks/server/server-persistence-validation.ts index 094f8480de3..d967ec227bc 100644 --- a/src/main/agent-hooks/server/server-persistence-validation.ts +++ b/src/main/agent-hooks/server/server-persistence-validation.ts @@ -16,7 +16,7 @@ import { normalizeClaudePromptId, normalizeGrokPromptId } from '../../../shared/agent-hook-listener/listener-limits' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import type { AgentHookAuthorityEvidence, EnrichedAgentHookEventPayload } from './server-types' import { isValidPaneKey, isValidPiProviderSessionOnly } from './server-status-identity' diff --git a/src/main/agent-hooks/server/server-status-disposition.ts b/src/main/agent-hooks/server/server-status-disposition.ts index f9599aeb405..33a1750d1b7 100644 --- a/src/main/agent-hooks/server/server-status-disposition.ts +++ b/src/main/agent-hooks/server/server-status-disposition.ts @@ -1,7 +1,10 @@ import { createHash } from 'node:crypto' import { isNewTurnEvent } from '../../../shared/agent-hook-listener/provider-event-routing' -import { parseLegacyNumericPaneKey, parsePaneKey } from '../../../shared/stable-pane-id' +import { + parseLegacyNumericPaneKey, + parsePaneKey +} from '../../../shared/workspace-layout/stable-pane-id' import type { AgentHookSource } from '../../../shared/agent-hook-listener/transport/agent-hook-relay' import { CLOSED_AGENT_STATUS_PANE_KEYS_MAX, diff --git a/src/main/agent-hooks/server/server-status-identity.ts b/src/main/agent-hooks/server/server-status-identity.ts index 4491fbe0043..39085b6f7f5 100644 --- a/src/main/agent-hooks/server/server-status-identity.ts +++ b/src/main/agent-hooks/server/server-status-identity.ts @@ -1,7 +1,10 @@ import type { AgentKind } from '../../../shared/telemetry-events' import { getAgentResumeArgv } from '../../../shared/agent-launch/startup/agent-resume-argv' import type { AgentProviderSessionMetadata } from '../../../shared/agent-session/lifecycle/agent-session-resume' -import { parseLegacyNumericPaneKey, parsePaneKey } from '../../../shared/stable-pane-id' +import { + parseLegacyNumericPaneKey, + parsePaneKey +} from '../../../shared/workspace-layout/stable-pane-id' import { pickHostTurnEnd, type AgentType diff --git a/src/main/agent-hooks/spool.test.ts b/src/main/agent-hooks/spool.test.ts index 3cec35d764a..ed70df4b6c9 100644 --- a/src/main/agent-hooks/spool.test.ts +++ b/src/main/agent-hooks/spool.test.ts @@ -22,7 +22,7 @@ import { AgentHookServer, _internals } from './server' import { buildBody } from './server.test-fixtures' import { _internals as codexInternals } from '../codex/hooks/installation/hook-service' import { getManagedScript as getClaudeManagedScript } from '../claude/hook-script' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { buildPosixHookSpoolLines } from './hook-stdin-contract' describe('agent hook spool', () => { diff --git a/src/main/agent-launch/agent-launch-executor.ts b/src/main/agent-launch/agent-launch-executor.ts index 771a28ea813..767e943a0f0 100644 --- a/src/main/agent-launch/agent-launch-executor.ts +++ b/src/main/agent-launch/agent-launch-executor.ts @@ -4,7 +4,7 @@ import { decideAgentLaunchIntentMode } from './agent-launch-intent-mode' * The host needs the created workspace to answer; a definitive refusal starts a terminal agent. */ import { assertAgentPromptRequestActive } from '../runtime/orca-runtime-core' -import { parsePaneKey } from '../../shared/stable-pane-id' +import { parsePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { type AgentLaunchResult, withoutReservedAgentCreateFields, diff --git a/src/main/agent-launch/agent-launch-mode.ts b/src/main/agent-launch/agent-launch-mode.ts index 698fb297562..adcd172c5ad 100644 --- a/src/main/agent-launch/agent-launch-mode.ts +++ b/src/main/agent-launch/agent-launch-mode.ts @@ -1,6 +1,6 @@ /** Chat defaults may fall back; explicit chat is refused only conclusively before launch effects. */ -import { requestsCwdOutsideWorkspaceRoot } from '../../shared/terminal-startup-cwd' +import { requestsCwdOutsideWorkspaceRoot } from '../../shared/shell/launch/terminal-startup-cwd' import type { AgentLaunchModeReason, AgentLaunchModeReceipt diff --git a/src/main/agent-launch/agent-launch-pane-attachment.ts b/src/main/agent-launch/agent-launch-pane-attachment.ts index 1261dc32c4c..8fc74afe186 100644 --- a/src/main/agent-launch/agent-launch-pane-attachment.ts +++ b/src/main/agent-launch/agent-launch-pane-attachment.ts @@ -1,8 +1,8 @@ /** Use process-local launch state; after restart, ordinary pane attachment handles recovery. */ import type { AgentLaunchPaneVerdict } from '../../shared/agent-launch/contracts/agent-launch-pane-verdict' -import { parsePaneKey } from '../../shared/stable-pane-id' -import type { TerminalSurfaceCloseTarget } from '../../shared/terminal-surface-close-target' +import { parsePaneKey } from '../../shared/workspace-layout/stable-pane-id' +import type { TerminalSurfaceCloseTarget } from '../../shared/workspace-layout/terminal-surface-close-target' const PROCEED: AgentLaunchPaneVerdict = { kind: 'proceed' } diff --git a/src/main/agent-launch/trust/agent-workspace-trust-spawn.ts b/src/main/agent-launch/trust/agent-workspace-trust-spawn.ts index 947792d965a..e5c22c9f227 100644 --- a/src/main/agent-launch/trust/agent-workspace-trust-spawn.ts +++ b/src/main/agent-launch/trust/agent-workspace-trust-spawn.ts @@ -1,6 +1,6 @@ import { TUI_AGENT_CONFIG, isTuiAgent } from '../../../shared/agent-launch/catalog/tui-agent-config' import type { GlobalSettings } from '../../../shared/global-settings-types' -import { resolveTerminalWorkspacePath } from '../../../shared/terminal-startup-cwd' +import { resolveTerminalWorkspacePath } from '../../../shared/shell/launch/terminal-startup-cwd' import { applyAgentWorkspaceTrust, type AgentTrustLaunchContext, diff --git a/src/main/antigravity/antigravity-browser-helper.ts b/src/main/antigravity/antigravity-browser-helper.ts index c3925409b45..7418011bfcb 100644 --- a/src/main/antigravity/antigravity-browser-helper.ts +++ b/src/main/antigravity/antigravity-browser-helper.ts @@ -1,6 +1,6 @@ // Capture sign-in URLs on stderr so remote hosts never open a browser. -import { quotePosixShellDoubleQuotedApostrophe } from '../../shared/shell-argument-quoting' +import { quotePosixShellDoubleQuotedApostrophe } from '../../shared/shell/launch/shell-argument-quoting' import { runProcess } from '@orca/process-host' export const ANTIGRAVITY_BROWSER_MARKER = '__ORCA_ANTIGRAVITY_AUTH_URL__' diff --git a/src/main/antigravity/hook-service.ts b/src/main/antigravity/hook-service.ts index 174d2b50e0e..9f18556a05e 100644 --- a/src/main/antigravity/hook-service.ts +++ b/src/main/antigravity/hook-service.ts @@ -30,7 +30,7 @@ import { ANTIGRAVITY_PRE_TOOL_USE_DECISION, type AntigravityEvent } from './hook-events' -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' import { HOOK_PARENT_CAPTURE } from '../agent-hooks/hook-process-capture' import { getManagedScript, getWindowsWrapperScript } from './hook-script' import { diff --git a/src/main/antigravity/posix-hook-invocation.test.ts b/src/main/antigravity/posix-hook-invocation.test.ts index b0e6daa9543..1b9b2472b7a 100644 --- a/src/main/antigravity/posix-hook-invocation.test.ts +++ b/src/main/antigravity/posix-hook-invocation.test.ts @@ -10,7 +10,7 @@ import { spawnProcess } from '@orca/process-host' import { AntigravityHookService } from './hook-service' import { ANTIGRAVITY_PRE_TOOL_USE_DECISION } from './hook-events' import { wrapPosixHookCommand } from '../agent-hooks/posix-hook-command' -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' import { readAgentProcess } from '../../shared/agent-status/process/agent-process-presence-probe' import { buildSpoolHookBody, diff --git a/src/main/automations/automation-agent-run-result.ts b/src/main/automations/automation-agent-run-result.ts index 4d08d3c9fbf..8b1c8f6905b 100644 --- a/src/main/automations/automation-agent-run-result.ts +++ b/src/main/automations/automation-agent-run-result.ts @@ -3,7 +3,7 @@ import type { OrcaRuntimeService } from '../runtime/orca-runtime' import type { AutomationRun } from '../../shared/automations-types' import type { AutomationChatAgentLaunch } from './automation-chat-agent-launch' import { tuiAgentDisplayName } from '../../shared/agent-launch/catalog/tui-agent-display-names' -import { parsePaneKey } from '../../shared/stable-pane-id' +import { parsePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { readAutomationRunReceipt } from './automation-run-receipt' import { AutomationRunLaunchError } from './headless-dispatch' diff --git a/src/main/automations/precheck-runner.ts b/src/main/automations/precheck-runner.ts index a85e179ec61..d24e5f22ef5 100644 --- a/src/main/automations/precheck-runner.ts +++ b/src/main/automations/precheck-runner.ts @@ -3,7 +3,7 @@ import type { ClientChannel } from 'ssh2' import type { AutomationPrecheck, AutomationPrecheckResult } from '../../shared/automations-types' import { MAX_AUTOMATION_PRECHECK_OUTPUT_CHARS } from '../../shared/automation-precheck' import { getSshConnectionManager } from '../ssh/targets/ssh-target-registry' -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' import { admitSelfInitiatedTreeKill } from '../pty/process-retirement/own-chromium-tree-kill-guard' import { errorMessage } from '../../shared/error-message' diff --git a/src/main/browser/extensions/tabs-and-windows/browser-extension-discarded-tabs.test.ts b/src/main/browser/extensions/tabs-and-windows/browser-extension-discarded-tabs.test.ts index 3b798324dfb..96160883627 100644 --- a/src/main/browser/extensions/tabs-and-windows/browser-extension-discarded-tabs.test.ts +++ b/src/main/browser/extensions/tabs-and-windows/browser-extension-discarded-tabs.test.ts @@ -3,7 +3,7 @@ import { EventEmitter } from 'node:events' import { beforeEach, describe, expect, it, vi } from 'vitest' import type { BrowserPage, BrowserWorkspace } from '../../../../shared/browser-workspace-types' import type { ExecutionHostId } from '../../../../shared/execution-host' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import type { BrowserExtensionCaller } from '../api-runtime/browser-extension-namespace-registry' type FakeSession = { name: string } diff --git a/src/main/browser/extensions/tabs-and-windows/browser-extension-discarded-tabs.ts b/src/main/browser/extensions/tabs-and-windows/browser-extension-discarded-tabs.ts index 6772406b4e6..e4ca181f621 100644 --- a/src/main/browser/extensions/tabs-and-windows/browser-extension-discarded-tabs.ts +++ b/src/main/browser/extensions/tabs-and-windows/browser-extension-discarded-tabs.ts @@ -1,7 +1,7 @@ import { webContents } from 'electron' import type { Store } from '../../../persistence/loading-store/store' import type { BrowserWorkspace } from '../../../../shared/browser-workspace-types' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import { browserManager } from '../../browser-manager' import { emitBrowserExtensionEvent } from '../api-runtime/browser-extension-api-host' import { diff --git a/src/main/claude-accounts/claude-command-process.ts b/src/main/claude-accounts/claude-command-process.ts index bd8aade68ce..951f17ca1a3 100644 --- a/src/main/claude-accounts/claude-command-process.ts +++ b/src/main/claude-accounts/claude-command-process.ts @@ -5,7 +5,7 @@ import { type WindowsHostInteractiveLoginSpawn } from '../../shared/windows-interactive-login-spawn' import { buildWslExecArgs, buildWslLoginShellCommand } from '../../shared/wsl-login-shell-command' -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' import { resolveClaudeCommand } from '../codex-cli/command' import { isSpawnEnoent, diff --git a/src/main/claude/agent-view/agent-view-bridge.ts b/src/main/claude/agent-view/agent-view-bridge.ts index 2e5d312f481..98fc46ffb26 100644 --- a/src/main/claude/agent-view/agent-view-bridge.ts +++ b/src/main/claude/agent-view/agent-view-bridge.ts @@ -1,6 +1,6 @@ import { randomUUID } from 'node:crypto' import { z } from 'zod' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { claudeAgentViewChord } from './agent-view-keybindings' import { CLAUDE_AGENT_VIEW_SHORTCUTS, diff --git a/src/main/claude/compact-status-registration.test.ts b/src/main/claude/compact-status-registration.test.ts index 8f348b93fa4..c06354cabea 100644 --- a/src/main/claude/compact-status-registration.test.ts +++ b/src/main/claude/compact-status-registration.test.ts @@ -8,7 +8,7 @@ import { } from '../../shared/agent-hook-listener/listener-state' import { seedClaudeSubagentRosterFromSnapshots } from '../../shared/agent-hook-listener/providers/claude-roster-state' import type { AgentHookEventPayload } from '../../shared/agent-hook-listener/listener-event' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { CLAUDE_HOOK_EVENT_FIRST_VERSIONS } from './claude-hook-event-versions' import { CLAUDE_EVENTS, getClaudeManagedHookPlan } from './claude-managed-hook-events' import { applyManagedHooks } from './hook-settings' diff --git a/src/main/cli/appimage-stable-launcher.ts b/src/main/cli/appimage-stable-launcher.ts index 8c58ab130bd..ffe90fc2bba 100644 --- a/src/main/cli/appimage-stable-launcher.ts +++ b/src/main/cli/appimage-stable-launcher.ts @@ -16,7 +16,7 @@ import { } from 'node:fs' import { dirname, join, resolve } from 'node:path' import { LINUX_CLI_COMMAND_NAME } from './bundled-cli-launcher-path' -import { quotePosixShellDoubleQuotedApostrophe } from '../../shared/shell-argument-quoting' +import { quotePosixShellDoubleQuotedApostrophe } from '../../shared/shell/launch/shell-argument-quoting' const LAUNCHER_DIRECTORY_NAME = 'launcher' const LIVE_ENDPOINT_NAME = 'live' diff --git a/src/main/cli/cli-command-filesystem-transaction.ts b/src/main/cli/cli-command-filesystem-transaction.ts index bdf1683fc90..6009fe3dad1 100644 --- a/src/main/cli/cli-command-filesystem-transaction.ts +++ b/src/main/cli/cli-command-filesystem-transaction.ts @@ -4,7 +4,7 @@ import { basename, dirname, join } from 'node:path' import type { CliInstallStatus } from '../../shared/cli-install-types' import { isPermissionError } from '../filesystem/permission-errors' import { isMissingError } from './cli-install-errors' -import { quotePosixShellDoubleQuotedApostrophe } from '../../shared/shell-argument-quoting' +import { quotePosixShellDoubleQuotedApostrophe } from '../../shared/shell/launch/shell-argument-quoting' export type EntryIdentity = { dev: bigint diff --git a/src/main/cli/cli-dev-launcher.ts b/src/main/cli/cli-dev-launcher.ts index 839cc8f2eb4..f385e74a961 100644 --- a/src/main/cli/cli-dev-launcher.ts +++ b/src/main/cli/cli-dev-launcher.ts @@ -3,7 +3,7 @@ import { mkdir, writeFile } from 'node:fs/promises' import { dirname, isAbsolute, join } from 'node:path' import { DEV_COMMAND_NAME, DEV_LAUNCHER_DIR } from './cli-install-constants' import { escapeWindowsBatchValue, isAbsoluteForPlatform } from './cli-install-path-format' -import { quotePosixShellDoubleQuotedApostrophe } from '../../shared/shell-argument-quoting' +import { quotePosixShellDoubleQuotedApostrophe } from '../../shared/shell/launch/shell-argument-quoting' export async function ensureDevLauncher(args: { platform: NodeJS.Platform diff --git a/src/main/cli/legacy-appimage-cli-wrapper.ts b/src/main/cli/legacy-appimage-cli-wrapper.ts index 8af84bc1588..92cfd8da2ab 100644 --- a/src/main/cli/legacy-appimage-cli-wrapper.ts +++ b/src/main/cli/legacy-appimage-cli-wrapper.ts @@ -1,4 +1,4 @@ -import { quotePosixShellDoubleQuotedApostrophe } from '../../shared/shell-argument-quoting' +import { quotePosixShellDoubleQuotedApostrophe } from '../../shared/shell/launch/shell-argument-quoting' const APPIMAGE_CLI_SCRIPT = [ '(async()=>{', diff --git a/src/main/cli/linux-bare-orca-dispatcher.ts b/src/main/cli/linux-bare-orca-dispatcher.ts index e8705191f3f..154f7b3d8ac 100644 --- a/src/main/cli/linux-bare-orca-dispatcher.ts +++ b/src/main/cli/linux-bare-orca-dispatcher.ts @@ -16,7 +16,7 @@ import { pruneAppImageExtractedRoots } from './appimage-extraction-pruning' import { resolveGenerationStableLauncherPath } from './appimage-generation-stable-launcher' import { withAppImageRegistrationLock } from './appimage-registration-lock' import { getBundledLauncherPath } from './bundled-cli-launcher-path' -import { quotePosixShellDoubleQuotedApostrophe } from '../../shared/shell-argument-quoting' +import { quotePosixShellDoubleQuotedApostrophe } from '../../shared/shell/launch/shell-argument-quoting' // Only marked dispatchers may be replaced; user-owned commands must survive repeat starts. const DISPATCHER_MARKER = '# orca-serve-bare-orca-dispatcher' diff --git a/src/main/cli/linux-terminal-orca-cli-shim.ts b/src/main/cli/linux-terminal-orca-cli-shim.ts index ea9b93a91d4..1cd21bd63bc 100644 --- a/src/main/cli/linux-terminal-orca-cli-shim.ts +++ b/src/main/cli/linux-terminal-orca-cli-shim.ts @@ -22,7 +22,7 @@ import { } from './appimage-stable-launcher' import { getBundledLauncherPath } from './bundled-cli-launcher-path' import { buildBareOrcaCliScript } from './linux-bare-orca-dispatcher' -import { quotePosixShellDoubleQuotedApostrophe } from '../../shared/shell-argument-quoting' +import { quotePosixShellDoubleQuotedApostrophe } from '../../shared/shell/launch/shell-argument-quoting' const SHIM_DIR_NAME = 'linux-orca-cli-shim' diff --git a/src/main/cli/wsl-cli-installer.ts b/src/main/cli/wsl-cli-installer.ts index 6db7fe9db9c..cfb1410ee9b 100644 --- a/src/main/cli/wsl-cli-installer.ts +++ b/src/main/cli/wsl-cli-installer.ts @@ -14,7 +14,7 @@ import { getWslLauncherMarker, parseManagedLauncherTarget } from './wsl-cli-scripts' -import { quotePosixShellDoubleQuotedApostrophe } from '../../shared/shell-argument-quoting' +import { quotePosixShellDoubleQuotedApostrophe } from '../../shared/shell/launch/shell-argument-quoting' import { buildWslCliInstallCommand } from './wsl-cli-registration-command' import { buildWslCliStatus, diff --git a/src/main/cli/wsl-cli-registration-command.ts b/src/main/cli/wsl-cli-registration-command.ts index 9c73e964213..575a4f2e441 100644 --- a/src/main/cli/wsl-cli-registration-command.ts +++ b/src/main/cli/wsl-cli-registration-command.ts @@ -10,7 +10,7 @@ import { getWslBridgeMarker, getWslLauncherMarker } from './wsl-cli-scripts' -import { quotePosixShellDoubleQuotedApostrophe } from '../../shared/shell-argument-quoting' +import { quotePosixShellDoubleQuotedApostrophe } from '../../shared/shell/launch/shell-argument-quoting' const MANAGED_MARKER = getWslLauncherMarker() const BRIDGE_MANAGED_MARKER = getWslBridgeMarker() diff --git a/src/main/cli/wsl-cli-scripts.ts b/src/main/cli/wsl-cli-scripts.ts index 81c6dcaf933..85796f1f42c 100644 --- a/src/main/cli/wsl-cli-scripts.ts +++ b/src/main/cli/wsl-cli-scripts.ts @@ -1,4 +1,4 @@ -import { quotePosixShellDoubleQuotedApostrophe } from '../../shared/shell-argument-quoting' +import { quotePosixShellDoubleQuotedApostrophe } from '../../shared/shell/launch/shell-argument-quoting' import { quotePowerShellLiteral } from '../../shared/powershell-native-argument' const MANAGED_MARKER = '# Orca managed WSL CLI launcher' diff --git a/src/main/cli/wsl-cli-status.ts b/src/main/cli/wsl-cli-status.ts index fe38c2d2349..e046adbe248 100644 --- a/src/main/cli/wsl-cli-status.ts +++ b/src/main/cli/wsl-cli-status.ts @@ -1,6 +1,6 @@ import type { CliInstallStatus } from '../../shared/cli-install-types' import { getBridgePathFromCommandPath, getPosixDirname } from './wsl-cli-scripts' -import { quotePosixShellDoubleQuotedApostrophe } from '../../shared/shell-argument-quoting' +import { quotePosixShellDoubleQuotedApostrophe } from '../../shared/shell/launch/shell-argument-quoting' const WSL_COMMAND_NAME = 'orca-ide' diff --git a/src/main/codex-accounts/codex-managed-home-lifecycle.ts b/src/main/codex-accounts/codex-managed-home-lifecycle.ts index 5f7312b297e..9a660cf6f76 100644 --- a/src/main/codex-accounts/codex-managed-home-lifecycle.ts +++ b/src/main/codex-accounts/codex-managed-home-lifecycle.ts @@ -5,7 +5,7 @@ import { WINDOWS_RM_MAX_RETRIES, WINDOWS_RM_RETRY_DELAY_MS } from '../../shared/windows-transient-lock-removal' -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' import { parseWslUncPath, toWindowsWslPath } from '../../shared/wsl-paths' import { runWslProcess } from '../wsl/execution/wsl-runner' import type { CodexAccountAddTarget, ManagedCodexHomeLocation } from './codex-account-service-types' diff --git a/src/main/codex-accounts/codex-managed-home-path.ts b/src/main/codex-accounts/codex-managed-home-path.ts index 489d1bf52d8..4091f611933 100644 --- a/src/main/codex-accounts/codex-managed-home-path.ts +++ b/src/main/codex-accounts/codex-managed-home-path.ts @@ -2,7 +2,7 @@ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs' import { join, resolve } from 'node:path' import { getAppEnvironment } from '../../shared/app-environment' import { buildPosixStdoutFence } from '../../shared/posix-stdout-fence' -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' import { parseWslUncPath, toWindowsWslPath } from '../../shared/wsl-paths' import type { CodexManagedAccount } from '../../shared/managed-account-types' import { getSystemCodexHomePath } from '../codex/configuration/homes/codex-home-paths' diff --git a/src/main/codex-accounts/legacy-wsl-runtime-auth-drain-shell-commands.ts b/src/main/codex-accounts/legacy-wsl-runtime-auth-drain-shell-commands.ts index 77d885c2410..259eb017464 100644 --- a/src/main/codex-accounts/legacy-wsl-runtime-auth-drain-shell-commands.ts +++ b/src/main/codex-accounts/legacy-wsl-runtime-auth-drain-shell-commands.ts @@ -1,4 +1,4 @@ -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' import { WSL_CODEX_SESSION_BRIDGE_SCRIPT } from '../codex/history/bridges/wsl-codex-session-bridge-script' export const RETIRED_SESSION_BRIDGE_COMMAND = `bash -c ${quotePosixShell(WSL_CODEX_SESSION_BRIDGE_SCRIPT)} bash "$legacy_home/sessions" "$target_home/sessions" "$session_link_manifest" "$session_stage_root"` diff --git a/src/main/codex-accounts/wsl-codex-command.ts b/src/main/codex-accounts/wsl-codex-command.ts index e3208af684e..9b43ff1a2e7 100644 --- a/src/main/codex-accounts/wsl-codex-command.ts +++ b/src/main/codex-accounts/wsl-codex-command.ts @@ -4,7 +4,7 @@ import { buildWslExecArgs, buildWslLoginShellCommand } from '../../shared/wsl-login-shell-command' -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' export const WSL_CODEX_AVAILABILITY_TIMEOUT_MS = 5_000 export const WSL_CODEX_NOT_FOUND_MESSAGE = 'Codex CLI not found in the WSL login-shell PATH.' diff --git a/src/main/codex/history/bridges/wsl-codex-session-bridge-script.ts b/src/main/codex/history/bridges/wsl-codex-session-bridge-script.ts index 4543c7d0f30..df8141fe8bc 100644 --- a/src/main/codex/history/bridges/wsl-codex-session-bridge-script.ts +++ b/src/main/codex/history/bridges/wsl-codex-session-bridge-script.ts @@ -1,4 +1,4 @@ -import { quotePosixShell } from '../../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../../shared/shell/launch/shell-argument-quoting' export const WSL_SESSION_BRIDGE_TIMEOUT_MS = 30_000 diff --git a/src/main/codex/hooks/definitions/codex-hook-definition.ts b/src/main/codex/hooks/definitions/codex-hook-definition.ts index a3dec9038a1..52055bbebe5 100644 --- a/src/main/codex/hooks/definitions/codex-hook-definition.ts +++ b/src/main/codex/hooks/definitions/codex-hook-definition.ts @@ -1,4 +1,4 @@ -import { quotePosixShell } from '../../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../../shared/shell/launch/shell-argument-quoting' import { join } from 'node:path' import { buildManagedCommandHook, diff --git a/src/main/daemon/client.ts b/src/main/daemon/client.ts index 22495a18e3e..c07f058105f 100644 --- a/src/main/daemon/client.ts +++ b/src/main/daemon/client.ts @@ -9,7 +9,10 @@ import { DaemonProtocolError, type DaemonEndpointIdentity } from './types' -import { writeRefused, type WriteSettlement } from '../../shared/pty-write-settlement' +import { + writeRefused, + type WriteSettlement +} from '../../shared/terminal/pty/lifecycle/pty-write-settlement' import { armDaemonSocketCloseHandlers, connectDaemonSocket, diff --git a/src/main/daemon/daemon-checkpoint-file.ts b/src/main/daemon/daemon-checkpoint-file.ts index 2b6403ac0a0..455784acf5c 100644 --- a/src/main/daemon/daemon-checkpoint-file.ts +++ b/src/main/daemon/daemon-checkpoint-file.ts @@ -1,6 +1,6 @@ import type { TerminalOscLinkRange } from '../../shared/terminal/links/terminal-osc-link-ranges' import type { TerminalModes } from './types' -import type { TerminalOwner } from '../../shared/terminal-owner' +import type { TerminalOwner } from '../../shared/terminal/pty/lifecycle/terminal-owner' /** Shared checkpoint.json shape; generation pairs it with the matching output.log header. */ export type TerminalCheckpointFile = { diff --git a/src/main/daemon/daemon-client-notify-settlement.ts b/src/main/daemon/daemon-client-notify-settlement.ts index c38426b9122..a1c4440d1de 100644 --- a/src/main/daemon/daemon-client-notify-settlement.ts +++ b/src/main/daemon/daemon-client-notify-settlement.ts @@ -5,7 +5,7 @@ import { writeRefused, writeUnverifiable, type WriteSettlement -} from '../../shared/pty-write-settlement' +} from '../../shared/terminal/pty/lifecycle/pty-write-settlement' export type NotifySettlementRequest = { socket: Socket diff --git a/src/main/daemon/daemon-client-pending-requests.ts b/src/main/daemon/daemon-client-pending-requests.ts index 5d7072258ab..0192974ad63 100644 --- a/src/main/daemon/daemon-client-pending-requests.ts +++ b/src/main/daemon/daemon-client-pending-requests.ts @@ -1,6 +1,9 @@ -import { parseTerminalStartFailure, terminalStartError } from '../../shared/terminal-start-failure' -import { DaemonConnectionLostError, DaemonProtocolError } from './types' -import type { RpcResponse } from './types' +import { + parseTerminalStartFailure, + terminalStartError +} from '../../shared/terminal/pty/lifecycle/terminal-start-failure' +import { DaemonConnectionLostError, DaemonProtocolError, type RpcResponse } from './types' + import { addNodePtyRecoveryHint } from './node-pty-error-hints' import { decodeDaemonResponseError } from './daemon-errors' diff --git a/src/main/daemon/daemon-color-query-reply-colors.test.ts b/src/main/daemon/daemon-color-query-reply-colors.test.ts index e81006c9aa1..c53f6217cec 100644 --- a/src/main/daemon/daemon-color-query-reply-colors.test.ts +++ b/src/main/daemon/daemon-color-query-reply-colors.test.ts @@ -2,7 +2,7 @@ import './mock-descendant-sweep' import { afterEach, beforeEach, describe, expect, it } from 'vitest' import { rmSync } from 'node:fs' import { DaemonPtyAdapter } from './daemon-pty-adapter' -import { _resetPtyOwnerHostColorsForTest } from '../../shared/pty-owner-color-query-colors' +import { _resetPtyOwnerHostColorsForTest } from '../../shared/terminal/pty/ingress/pty-owner-color-query-colors' import { createMockSubprocess, startDaemonAdapterHarness, diff --git a/src/main/daemon/daemon-control-request.ts b/src/main/daemon/daemon-control-request.ts index a5b9f08084c..e5771e878bb 100644 --- a/src/main/daemon/daemon-control-request.ts +++ b/src/main/daemon/daemon-control-request.ts @@ -1,4 +1,4 @@ -import { readTerminalStartFailure } from '../../shared/terminal-start-failure' +import { readTerminalStartFailure } from '../../shared/terminal/pty/lifecycle/terminal-start-failure' import type { Socket } from 'node:net' import { NOTIFY_PREFIX, type DaemonRequest } from './types' import { encodeNdjson } from './ndjson' diff --git a/src/main/daemon/daemon-create-or-attach-result.ts b/src/main/daemon/daemon-create-or-attach-result.ts index 3d47f529a0c..3098b9b6b68 100644 --- a/src/main/daemon/daemon-create-or-attach-result.ts +++ b/src/main/daemon/daemon-create-or-attach-result.ts @@ -1,7 +1,7 @@ import type { TuiAgent } from '../../shared/agent-launch/catalog/tui-agent' import type { ShellReadyState, TerminalSnapshot } from './types' import type { AgentSessionClaimedSpawnResult } from '../../shared/agent-session/agent-session-host-authority' -import type { PtyIncarnationId } from '../../shared/pty-incarnation' +import type { PtyIncarnationId } from '../../shared/terminal/pty/lifecycle/pty-incarnation' export type DaemonCreateOrAttachResult = { isNew: boolean diff --git a/src/main/daemon/daemon-fenced-termination.ts b/src/main/daemon/daemon-fenced-termination.ts index 47d4c4073b7..1b000b122c8 100644 --- a/src/main/daemon/daemon-fenced-termination.ts +++ b/src/main/daemon/daemon-fenced-termination.ts @@ -3,7 +3,7 @@ import type { DaemonSessionOwnerResolution } from './daemon-session-owner-resolu import type { PtyFencedTerminationRequest, PtyFencedTerminationOutcome -} from '../../shared/pty-fenced-termination' +} from '../../shared/terminal/pty/lifecycle/pty-fenced-termination' import type { TerminalHost } from './terminal-host' import type { DaemonPtySpawnPreparations } from './daemon-pty-spawn-preparations' import type { DaemonSessionAttachments } from './daemon-session-attachments' diff --git a/src/main/daemon/daemon-history-replay-pty.ts b/src/main/daemon/daemon-history-replay-pty.ts index ec58b3f8245..fbc4d372c88 100644 --- a/src/main/daemon/daemon-history-replay-pty.ts +++ b/src/main/daemon/daemon-history-replay-pty.ts @@ -1,5 +1,5 @@ import { release } from 'node:os' -import { resolvePtyOwnerBackend } from '../../shared/pty-owner-backend' +import { resolvePtyOwnerBackend } from '../../shared/terminal/pty/lifecycle/pty-owner-backend' import { windowsPtyForOwnerBackend } from '../../shared/xterm-conpty-options' /** diff --git a/src/main/daemon/daemon-liveness-report.ts b/src/main/daemon/daemon-liveness-report.ts index b9e2f11532d..a5925c460cb 100644 --- a/src/main/daemon/daemon-liveness-report.ts +++ b/src/main/daemon/daemon-liveness-report.ts @@ -7,7 +7,7 @@ import { getDaemonEndpointFacts, readDaemonPidRecord } from './daemon-provider-s import { confirmPtyProcessCeiling, type PtyProcessCeilingState -} from '../../shared/pty-process-ceiling-state' +} from '../../shared/terminal/pty/native-process/pty-process-ceiling-state' export type TerminalDaemonLivenessReport = { verdict: 'live' | 'unverifiable' | 'exited' diff --git a/src/main/daemon/daemon-pid-file-parse.ts b/src/main/daemon/daemon-pid-file-parse.ts index aa5366bb104..3d01bbe0b68 100644 --- a/src/main/daemon/daemon-pid-file-parse.ts +++ b/src/main/daemon/daemon-pid-file-parse.ts @@ -1,7 +1,7 @@ import { parsePtyProcessCeilingState, type PtyProcessCeilingState -} from '../../shared/pty-process-ceiling-state' +} from '../../shared/terminal/pty/native-process/pty-process-ceiling-state' export type ParsedDaemonPid = { pid: number startedAtMs: number | null diff --git a/src/main/daemon/daemon-pty-adapter-replacement-exit-race.test.ts b/src/main/daemon/daemon-pty-adapter-replacement-exit-race.test.ts index 3a2986e50c1..b2a4ccf0386 100644 --- a/src/main/daemon/daemon-pty-adapter-replacement-exit-race.test.ts +++ b/src/main/daemon/daemon-pty-adapter-replacement-exit-race.test.ts @@ -5,7 +5,7 @@ import { setLocalPtyProvider } from '../ipc/pty/provider/registry' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { rmSync } from 'node:fs' import type { DaemonPtyAdapter } from './daemon-pty-adapter' -import { formatTerminalStartFailure } from '../../shared/terminal-start-failure' +import { formatTerminalStartFailure } from '../../shared/terminal/pty/lifecycle/terminal-start-failure' import { createMockSubprocess, startDaemonAdapterHarness, diff --git a/src/main/daemon/daemon-pty-adapter-test-harness.ts b/src/main/daemon/daemon-pty-adapter-test-harness.ts index 3390d035cdf..7428c270852 100644 --- a/src/main/daemon/daemon-pty-adapter-test-harness.ts +++ b/src/main/daemon/daemon-pty-adapter-test-harness.ts @@ -8,7 +8,7 @@ import { DaemonServer } from './daemon-server' import { getDaemonSocketPath } from './daemon-spawner' import type { SubprocessHandle } from './session-subprocess-handle' import type { DaemonFileLog } from './daemon-file-log' -import type { TerminalExitCause } from '../../shared/terminal-exit-cause' +import type { TerminalExitCause } from '../../shared/terminal/pty/lifecycle/terminal-exit-cause' export type SpawnSubprocess = ConstructorParameters[0]['spawnSubprocess'] diff --git a/src/main/daemon/daemon-pty-adapter-wake-relaunch-history.test.ts b/src/main/daemon/daemon-pty-adapter-wake-relaunch-history.test.ts index 86caaeb20c0..68c275cf885 100644 --- a/src/main/daemon/daemon-pty-adapter-wake-relaunch-history.test.ts +++ b/src/main/daemon/daemon-pty-adapter-wake-relaunch-history.test.ts @@ -3,7 +3,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { join } from 'node:path' import { readFileSync, rmSync } from 'node:fs' import { Terminal } from '@xterm/headless' -import { parsePtySessionId } from '../../shared/pty-session-id-format' +import { parsePtySessionId } from '../../shared/terminal/pty/lifecycle/pty-session-id-format' import { DaemonPtyAdapter } from './daemon-pty-adapter' import type { DaemonServer } from './daemon-server' import { getHistorySessionDirName } from './history-paths' diff --git a/src/main/daemon/daemon-pty-adapter.ts b/src/main/daemon/daemon-pty-adapter.ts index 49f53d08e46..3c6d00fb8e0 100644 --- a/src/main/daemon/daemon-pty-adapter.ts +++ b/src/main/daemon/daemon-pty-adapter.ts @@ -2,13 +2,13 @@ import { isPtyFencedTerminationOutcome, type PtyFencedTerminationRequest, type PtyFencedTerminationOutcome -} from '../../shared/pty-fenced-termination' +} from '../../shared/terminal/pty/lifecycle/pty-fenced-termination' import { FENCED_TERMINATION_PROTOCOL_VERSION } from './daemon-protocol-version' import { emitPtyListeners, createPtyExitPayload } from './daemon-pty-listener-emission' import type { DaemonPtyRouterExitEvent } from './daemon-pty-router-events' import { logWslPaneDiagnostic } from './daemon-wsl-diagnostic-log' import { classifyWslBridgeExit, WSL_DISTRO_LOSS_EXIT_CODE } from './daemon-wsl-bridge-exit' -import { isProvenProcessExit } from '../../shared/terminal-exit-cause' +import { isProvenProcessExit } from '../../shared/terminal/pty/lifecycle/terminal-exit-cause' import { DaemonPtyDaemonRecovery } from './daemon-pty-daemon-recovery' import type { DaemonPtyAdapterOptions } from './daemon-pty-runtime-state' import { supportsMode2031UnsubscribeFact, type DaemonEvent } from './types' diff --git a/src/main/daemon/daemon-pty-event-subscriptions.ts b/src/main/daemon/daemon-pty-event-subscriptions.ts index 27563bacddf..2360e05a56b 100644 --- a/src/main/daemon/daemon-pty-event-subscriptions.ts +++ b/src/main/daemon/daemon-pty-event-subscriptions.ts @@ -1,7 +1,7 @@ import type { DaemonPtyRouterDataEvent } from './daemon-pty-router-events' import { removeDaemonListener } from './daemon-listener-registry' import { emitPtyListeners } from './daemon-pty-listener-emission' -import type { PtyIncarnationId } from '../../shared/pty-incarnation' +import type { PtyIncarnationId } from '../../shared/terminal/pty/lifecycle/pty-incarnation' import { DaemonPtySessionInventory } from './daemon-pty-session-inventory' import { CLEAN_DISCONNECT_PROTOCOL_VERSION, diff --git a/src/main/daemon/daemon-pty-process-inspection.ts b/src/main/daemon/daemon-pty-process-inspection.ts index bbec104a03a..4167da0f2a5 100644 --- a/src/main/daemon/daemon-pty-process-inspection.ts +++ b/src/main/daemon/daemon-pty-process-inspection.ts @@ -1,18 +1,19 @@ import { PTY_FOREGROUND_OBSERVATION_PROTOCOL_VERSION } from './daemon-protocol-version' -import { isShellProcess } from '../../shared/shell-process-detection' +import { isShellProcess } from '../../shared/agent-status/process/shell-process-detection' import { DaemonPtyBufferSnapshots } from './daemon-pty-buffer-snapshots' -import { parsePtySessionId } from '../../shared/pty-session-id-format' +import { parsePtySessionId } from '../../shared/terminal/pty/lifecycle/pty-session-id-format' import { COMPLETION_PROCESS_INSPECTION_PROTOCOL_VERSION, GET_FOREGROUND_PROCESS_PROTOCOL_VERSION, type ListSessionsResult, type SessionInfo } from './types' -import type { - PtyProcessInspection, - PtyProcessInspectionOptions -} from '../providers/pty-process-inspection' -import { clientOnlyUnverifiableInspection } from '../../shared/terminal-process-inspection' +import type { PtyProcessInspectionOptions } from '../providers/pty-process-inspection' + +import { + type TerminalProcessInspection as PtyProcessInspection, + clientOnlyUnverifiableInspection +} from '../../shared/terminal/pty/lifecycle/terminal-process-inspection' import { remainingDaemonRequestTimeoutMs } from './daemon-request-deadline' export abstract class DaemonPtyProcessInspection extends DaemonPtyBufferSnapshots { diff --git a/src/main/daemon/daemon-pty-router-events.ts b/src/main/daemon/daemon-pty-router-events.ts index e454f22fc3a..01973f648f0 100644 --- a/src/main/daemon/daemon-pty-router-events.ts +++ b/src/main/daemon/daemon-pty-router-events.ts @@ -1,5 +1,5 @@ -import type { PtyIncarnationId } from '../../shared/pty-incarnation' -import type { TerminalExitCause } from '../../shared/terminal-exit-cause' +import type { PtyIncarnationId } from '../../shared/terminal/pty/lifecycle/pty-incarnation' +import type { TerminalExitCause } from '../../shared/terminal/pty/lifecycle/terminal-exit-cause' export type DaemonPtyRouterDataEvent = { id: string diff --git a/src/main/daemon/daemon-pty-router.ts b/src/main/daemon/daemon-pty-router.ts index 0689926d716..8a5a4756dac 100644 --- a/src/main/daemon/daemon-pty-router.ts +++ b/src/main/daemon/daemon-pty-router.ts @@ -1,6 +1,6 @@ import { DaemonPtyTargetInspection } from './daemon-pty-target-inspection' import { terminateResolvedDaemonSession } from './daemon-fenced-termination' -import type { PtyFencedTerminationRequest } from '../../shared/pty-fenced-termination' +import type { PtyFencedTerminationRequest } from '../../shared/terminal/pty/lifecycle/pty-fenced-termination' import { reconcileDaemonRouterSessions } from './daemon-router-session-reconciliation' import type { DaemonPtyAdapter } from './daemon-pty-adapter' import { DaemonPtyAdapterSubscriptionFanout } from './daemon-pty-adapter-subscription-fanout' @@ -11,7 +11,7 @@ import type { PtySpawnOptions, PtySpawnResult } from '../providers/pty-provider-contract' -import type { PtyProcessInspection } from '../providers/pty-process-inspection' +import type { TerminalProcessInspection as PtyProcessInspection } from '../../shared/terminal/pty/lifecycle/terminal-process-inspection' import { LegacyDaemonExitProof } from './daemon-legacy-exit-proof' import { shutdownRoutedDaemonSession } from './daemon-routed-session-shutdown' import type { DaemonPtyRouterDataEvent, DaemonPtyRouterExitEvent } from './daemon-pty-router-events' @@ -21,7 +21,7 @@ import { DaemonRouterRetirement } from './daemon-router-retirement' import { routeSpawnOrHold } from './daemon-router-newer-daemon-hold' import { findLegacySessionOwner } from './daemon-router-legacy-owner' import { retireExitedLegacyAdapter, type ExitedLegacyVerdict } from './daemon-router-exited-legacy' -import type { WriteSettlement } from '../../shared/pty-write-settlement' +import type { WriteSettlement } from '../../shared/terminal/pty/lifecycle/pty-write-settlement' import type { TerminalOscColorQueryReplyColors } from '../../shared/terminal/protocol/queries/terminal-osc-color-reply' export class DaemonPtyRouter implements IPtyProvider { diff --git a/src/main/daemon/daemon-pty-session-input.ts b/src/main/daemon/daemon-pty-session-input.ts index 44123e92f27..71d2c33d39c 100644 --- a/src/main/daemon/daemon-pty-session-input.ts +++ b/src/main/daemon/daemon-pty-session-input.ts @@ -1,6 +1,9 @@ import { DaemonPtySessionSpawn } from './daemon-pty-session-spawn' import { PtyWriteUnavailableError } from '../providers/pty-write-unavailable-error' -import { writeRefused, type WriteSettlement } from '../../shared/pty-write-settlement' +import { + writeRefused, + type WriteSettlement +} from '../../shared/terminal/pty/lifecycle/pty-write-settlement' export abstract class DaemonPtySessionInput extends DaemonPtySessionSpawn { getPtyAvailability(id: string): boolean | null { diff --git a/src/main/daemon/daemon-pty-session-inventory.ts b/src/main/daemon/daemon-pty-session-inventory.ts index 4f0ba2c8e17..f0c3bc80bd8 100644 --- a/src/main/daemon/daemon-pty-session-inventory.ts +++ b/src/main/daemon/daemon-pty-session-inventory.ts @@ -11,7 +11,7 @@ import { recordAuthenticatedInventory } from './daemon-audit-classifier' import { isMissingWindowsNamedPipeError } from './daemon-endpoint-errors' import { DaemonPtyProcessInspection } from './daemon-pty-process-inspection' import { remainingDaemonRequestTimeoutMs } from './daemon-request-deadline' -import { parsePtySessionId } from '../../shared/pty-session-id-format' +import { parsePtySessionId } from '../../shared/terminal/pty/lifecycle/pty-session-id-format' import type { ListSessionsResult, SessionInfo } from './types' import { PtyProcessListAdmission } from '../providers/pty-process-list-admission' import type { PtyProcessInfo } from '../providers/pty-provider-contract' diff --git a/src/main/daemon/daemon-pty-write-settlement-recovery.test.ts b/src/main/daemon/daemon-pty-write-settlement-recovery.test.ts index 1392a1ab24f..a23f90c2657 100644 --- a/src/main/daemon/daemon-pty-write-settlement-recovery.test.ts +++ b/src/main/daemon/daemon-pty-write-settlement-recovery.test.ts @@ -2,7 +2,7 @@ import type { Socket } from 'node:net' import { expect, it, vi } from 'vitest' import { DaemonPtyAdapter } from './daemon-pty-adapter' import { writeNotifyWithSettlement } from './daemon-client-notify-settlement' -import type { WriteSettlement } from '../../shared/pty-write-settlement' +import type { WriteSettlement } from '../../shared/terminal/pty/lifecycle/pty-write-settlement' it('preserves ambiguity when arming daemon recovery triggers a throwing listener', async () => { const adapter = new DaemonPtyAdapter({ diff --git a/src/main/daemon/daemon-relaunch-unattached-inspection.test.ts b/src/main/daemon/daemon-relaunch-unattached-inspection.test.ts index 71ac9af57dc..0c611af563c 100644 --- a/src/main/daemon/daemon-relaunch-unattached-inspection.test.ts +++ b/src/main/daemon/daemon-relaunch-unattached-inspection.test.ts @@ -5,8 +5,8 @@ import { DaemonPtyAdapter } from './daemon-pty-adapter' import type { DaemonServer } from './daemon-server' import { createMockSubprocess, startDaemonAdapterHarness } from './daemon-pty-adapter-test-harness' import { inspectPtyProviderProcessForRenderer } from '../providers/pty-process-inspection' -import { isClientOnlyUnverifiableInspection } from '../../shared/terminal-process-inspection' -import { probePtyRunningWorkWithInspection } from '../../shared/pty-running-work-probe' +import { isClientOnlyUnverifiableInspection } from '../../shared/terminal/pty/lifecycle/terminal-process-inspection' +import { probePtyRunningWorkWithInspection } from '../../shared/terminal/pty/lifecycle/pty-running-work-probe' // After a relaunch every WSL bridge pane the window had not reopened read // `unverifiable`, so no move could pass its terminal gate. diff --git a/src/main/daemon/daemon-request-router.ts b/src/main/daemon/daemon-request-router.ts index a683e2cb1f4..c260dd76c5f 100644 --- a/src/main/daemon/daemon-request-router.ts +++ b/src/main/daemon/daemon-request-router.ts @@ -1,7 +1,7 @@ import { handleDaemonTerminalKill } from './daemon-terminal-kill' import { handleDaemonFencedTermination } from './daemon-fenced-termination' import { performance } from 'node:perf_hooks' -import { setPtyOwnerHostColors } from '../../shared/pty-owner-color-query-colors' +import { setPtyOwnerHostColors } from '../../shared/terminal/pty/ingress/pty-owner-color-query-colors' import type { ConnectedDaemonClient, DaemonClientConnections } from './daemon-client-connections' import type { DaemonFileLog } from './daemon-file-log' import type { DaemonPtySpawnPreparations } from './daemon-pty-spawn-preparations' diff --git a/src/main/daemon/daemon-spawner.ts b/src/main/daemon/daemon-spawner.ts index 4ef2c4bfe10..11e6351de8a 100644 --- a/src/main/daemon/daemon-spawner.ts +++ b/src/main/daemon/daemon-spawner.ts @@ -1,5 +1,5 @@ import { createHash, randomUUID } from 'node:crypto' -import type { PtyProcessCeilingState } from '../../shared/pty-process-ceiling-state' +import type { PtyProcessCeilingState } from '../../shared/terminal/pty/native-process/pty-process-ceiling-state' import { constants, copyFileSync, diff --git a/src/main/daemon/daemon-stream-events.ts b/src/main/daemon/daemon-stream-events.ts index f12e92cfcf1..09f47b63797 100644 --- a/src/main/daemon/daemon-stream-events.ts +++ b/src/main/daemon/daemon-stream-events.ts @@ -1,6 +1,6 @@ import type { TerminalGitHubPRLink } from '../../shared/terminal/links/terminal-github-pr-link-detector' -import type { PtyIncarnationId } from '../../shared/pty-incarnation' -import type { TerminalExitCause } from '../../shared/terminal-exit-cause' +import type { PtyIncarnationId } from '../../shared/terminal/pty/lifecycle/pty-incarnation' +import type { TerminalExitCause } from '../../shared/terminal/pty/lifecycle/terminal-exit-cause' export type DataEvent = { type: 'event' diff --git a/src/main/daemon/daemon-terminal-admission.ts b/src/main/daemon/daemon-terminal-admission.ts index 386ffd759b0..992b7215110 100644 --- a/src/main/daemon/daemon-terminal-admission.ts +++ b/src/main/daemon/daemon-terminal-admission.ts @@ -15,7 +15,8 @@ import type { TerminalHistorySeedTransferRegistry } from './terminal-history-see import type { CreateOrAttachOptions, CreateOrAttachResult, TerminalHost } from './terminal-host' import { isTuiAgent } from '../../shared/agent-launch/catalog/tui-agent-config' import { isSpawnIntent } from '../../shared/host-spawn-admission' -import { parsePtyStartupIngressIntent } from '../../shared/pty-startup-ingress' +import '../../shared/terminal/pty/ingress/pty-startup-ingress' +import { parsePtyStartupIngressIntent } from '../../shared/terminal/pty/ingress/pty-startup-ingress-intent' import { isAgentSessionExecutionClaim, isAgentSessionSurfaceBinding diff --git a/src/main/daemon/daemon-wsl-sleep-cwd.ts b/src/main/daemon/daemon-wsl-sleep-cwd.ts index 6f153cde8ea..e6154eca637 100644 --- a/src/main/daemon/daemon-wsl-sleep-cwd.ts +++ b/src/main/daemon/daemon-wsl-sleep-cwd.ts @@ -1,6 +1,6 @@ /** Bridge WSL bash lacks OSC 7; read its shell folder before Sleep so wake avoids the spawn folder. Failures retain the old fallback. */ import { toWindowsWslUncPath } from '../../shared/wsl-paths' -import { redactPtyIdForDiagnostics } from '../../shared/pty-delivery-diagnostics' +import { redactPtyIdForDiagnostics } from '../../shared/terminal/pty/diagnostics/pty-delivery-diagnostics' import { paneShells, readWslGuestPaneProcesses } from '../wsl/execution/wsl-guest-pane-processes' import { teardownReadBudgetMs } from './daemon-request-deadline' import { logWslPaneDiagnostic } from './daemon-wsl-diagnostic-log' diff --git a/src/main/daemon/degraded-daemon-pty-provider.test.ts b/src/main/daemon/degraded-daemon-pty-provider.test.ts index 34fcd113fb1..489ccfacd79 100644 --- a/src/main/daemon/degraded-daemon-pty-provider.test.ts +++ b/src/main/daemon/degraded-daemon-pty-provider.test.ts @@ -8,10 +8,8 @@ import type { PtySpawnOptions, PtySpawnResult } from '../providers/pty-provider-contract' -import type { - PtyProcessInspection, - PtyProcessInspectionOptions -} from '../providers/pty-process-inspection' +import type { PtyProcessInspectionOptions } from '../providers/pty-process-inspection' +import type { TerminalProcessInspection as PtyProcessInspection } from '../../shared/terminal/pty/lifecycle/terminal-process-inspection' import { readLaunchedAgentForeground } from '../runtime/launched-agent-foreground' import { SessionNotFoundError, TerminalSessionOwnerUnverifiedError } from './daemon-errors' diff --git a/src/main/daemon/degraded-daemon-pty-provider.ts b/src/main/daemon/degraded-daemon-pty-provider.ts index fd3590ed377..b74eb638199 100644 --- a/src/main/daemon/degraded-daemon-pty-provider.ts +++ b/src/main/daemon/degraded-daemon-pty-provider.ts @@ -1,6 +1,6 @@ import { shutdownRoutedDegradedSession } from './daemon-routed-session-shutdown' import { terminateResolvedDaemonSession } from './daemon-fenced-termination' -import type { PtyFencedTerminationRequest } from '../../shared/pty-fenced-termination' +import type { PtyFencedTerminationRequest } from '../../shared/terminal/pty/lifecycle/pty-fenced-termination' import type { DaemonPtyAdapter } from './daemon-pty-adapter' import { combineUnsubscribes } from './combine-unsubscribes' import { shutdownDegradedFallbackSessions } from './degraded-daemon-fallback-shutdown' @@ -22,7 +22,7 @@ import { } from './degraded-daemon-session-routing' import { DegradedDaemonFreshSpawnRouter } from './degraded-daemon-fresh-spawn-routing' import { DegradedDaemonOwnerRecovery } from './degraded-daemon-owner-recovery' -import type { WriteSettlement } from '../../shared/pty-write-settlement' +import type { WriteSettlement } from '../../shared/terminal/pty/lifecycle/pty-write-settlement' export class DegradedDaemonPtyProvider implements IPtyProvider { readonly isDegraded = true diff --git a/src/main/daemon/legacy-restore-admission.ts b/src/main/daemon/legacy-restore-admission.ts index ec9254a81df..2756ca0a0a1 100644 --- a/src/main/daemon/legacy-restore-admission.ts +++ b/src/main/daemon/legacy-restore-admission.ts @@ -1,6 +1,8 @@ -import type { SpawnRequestFacts } from '../../shared/host-spawn-admission' -import { TERMINAL_SPAWN_REFUSED_MESSAGE } from '../../shared/host-spawn-admission' -import { TERMINAL_HOST_CAP_HINT } from '../../shared/terminal-spawn-error-copy' +import { + type SpawnRequestFacts, + TERMINAL_SPAWN_REFUSED_MESSAGE +} from '../../shared/host-spawn-admission' +import { TERMINAL_HOST_CAP_HINT } from '../../shared/terminal/pty/lifecycle/terminal-spawn-error-copy' import type { LegacyRestoreDetails, LegacyRestoreRecords } from './legacy-restore-records' import type { TerminalSpawnLease } from './terminal-spawn-gate' diff --git a/src/main/daemon/node-pty-error-hints.ts b/src/main/daemon/node-pty-error-hints.ts index 182beb41a79..39586c3002b 100644 --- a/src/main/daemon/node-pty-error-hints.ts +++ b/src/main/daemon/node-pty-error-hints.ts @@ -3,7 +3,7 @@ import { LEGACY_TERMINAL_PROCESS_LIMIT_HINT, PTY_ALLOCATION_HINT, TERMINAL_PROCESS_LIMIT_HINT -} from '../../shared/terminal-spawn-error-copy' +} from '../../shared/terminal/pty/lifecycle/terminal-spawn-error-copy' export type NodePtyDiagnostic = { step: string diff --git a/src/main/daemon/pty-session-id.test.ts b/src/main/daemon/pty-session-id.test.ts index 4da47e9f455..579b455536f 100644 --- a/src/main/daemon/pty-session-id.test.ts +++ b/src/main/daemon/pty-session-id.test.ts @@ -4,7 +4,7 @@ import { mintPtySessionId, ptySessionIdForAgentCreateOperation } from './pty-session-id' -import { parsePtySessionId } from '../../shared/pty-session-id-format' +import { parsePtySessionId } from '../../shared/terminal/pty/lifecycle/pty-session-id-format' const USER_DATA = '/tmp/orca-userdata' diff --git a/src/main/daemon/pty-session-id.ts b/src/main/daemon/pty-session-id.ts index 21649537a23..33c46d0d0dd 100644 --- a/src/main/daemon/pty-session-id.ts +++ b/src/main/daemon/pty-session-id.ts @@ -1,6 +1,6 @@ import { randomUUID } from 'node:crypto' import { isAbsolute, join, relative, resolve, sep } from 'node:path' -import { PTY_SESSION_ID_SEPARATOR } from '../../shared/pty-session-id-format' +import { PTY_SESSION_ID_SEPARATOR } from '../../shared/terminal/pty/lifecycle/pty-session-id-format' /** Keep session-ID format aligned so cold restore and legacy cleanup recover the owning workspace. */ export function mintPtySessionId(worktreeId?: string): string { diff --git a/src/main/daemon/pty-subprocess-git-credential-guard.test.ts b/src/main/daemon/pty-subprocess-git-credential-guard.test.ts index de321cc2f83..320c752d106 100644 --- a/src/main/daemon/pty-subprocess-git-credential-guard.test.ts +++ b/src/main/daemon/pty-subprocess-git-credential-guard.test.ts @@ -76,7 +76,7 @@ vi.mock('../providers/windows-pty-job-membership', () => ({ })) import { createPtySubprocess } from './pty-subprocess' -import { TERMINAL_GIT_CREDENTIAL_GUARD_POLICY_ENV } from '../../shared/terminal-git-credential-guard' +import { TERMINAL_GIT_CREDENTIAL_GUARD_POLICY_ENV } from '../../shared/shell/launch/terminal-git-credential-guard' import { mockPtyProcess, useDaemonPtySubprocessEnv } from './pty-subprocess-test-harness' describe('createPtySubprocess', () => { diff --git a/src/main/daemon/pty-subprocess.ts b/src/main/daemon/pty-subprocess.ts index 7cf5cd12a62..9c086145ca0 100644 --- a/src/main/daemon/pty-subprocess.ts +++ b/src/main/daemon/pty-subprocess.ts @@ -1,4 +1,4 @@ -import type { PtyCreationDisposition } from '../../shared/claimed-agent-pty-owner' +import type { PtyCreationDisposition } from '../../shared/terminal/pty/lifecycle/pty-creation-disposition' import { TerminalCreationWork } from './terminal-creation-work' import type { SubprocessHandle } from './session-subprocess-handle' import { normalizePtySize } from './daemon-pty-size' diff --git a/src/main/daemon/pty-subprocess/daemon-pty-physical-owner.ts b/src/main/daemon/pty-subprocess/daemon-pty-physical-owner.ts index 5f28d6d89b9..b788c4f5010 100644 --- a/src/main/daemon/pty-subprocess/daemon-pty-physical-owner.ts +++ b/src/main/daemon/pty-subprocess/daemon-pty-physical-owner.ts @@ -6,9 +6,9 @@ import { killConptyNow, terminatePtyJob } from '../../windows/windows-pty-job' import { SessionTerminationController } from '../session-termination-controller' import { shutdownOwnedTerminalProcess } from '../terminal-host-session-shutdown' import { createGitBashConsoleCapacityDetector } from '../../../shared/git-bash-console-capacity' -import { resolvePtyOwnerBackend } from '../../../shared/pty-owner-backend' -import { resolveProcessExitCause } from '../../../shared/terminal-exit-cause' -import { withInitialOutputDiagnostic } from '../../../shared/terminal-start-failure' +import { resolvePtyOwnerBackend } from '../../../shared/terminal/pty/lifecycle/pty-owner-backend' +import { resolveProcessExitCause } from '../../../shared/terminal/pty/lifecycle/terminal-exit-cause' +import { withInitialOutputDiagnostic } from '../../../shared/terminal/pty/lifecycle/terminal-start-failure' export function createDaemonPtyPhysicalOwner(proc: pty.IPty, shellPath: string) { const nativeProc: DisposableNativePty = proc diff --git a/src/main/daemon/pty-subprocess/foreground-process-tracker.ts b/src/main/daemon/pty-subprocess/foreground-process-tracker.ts index 57cf4f30b9a..c8de71ee548 100644 --- a/src/main/daemon/pty-subprocess/foreground-process-tracker.ts +++ b/src/main/daemon/pty-subprocess/foreground-process-tracker.ts @@ -21,9 +21,9 @@ import { shouldInspectOuterWrapperForegroundName, shouldInspectOuterWrapperForegroundProcess } from '../../../shared/foreground-wrapper-agent' -import { isShellProcess } from '../../../shared/shell-process-detection' +import { isShellProcess } from '../../../shared/agent-status/process/shell-process-detection' import { resolveFallbackForegroundProcess } from './foreground-fallback-process' -import { parsePtySessionId } from '../../../shared/pty-session-id-format' +import { parsePtySessionId } from '../../../shared/terminal/pty/lifecycle/pty-session-id-format' import { ptyProcessNameIsSpawnFile, createPtyForegroundResolver, diff --git a/src/main/daemon/pty-subprocess/native-pty-spawn-windows.test.ts b/src/main/daemon/pty-subprocess/native-pty-spawn-windows.test.ts index 8816cae17fe..4ce9ebb70f7 100644 --- a/src/main/daemon/pty-subprocess/native-pty-spawn-windows.test.ts +++ b/src/main/daemon/pty-subprocess/native-pty-spawn-windows.test.ts @@ -19,7 +19,7 @@ import { IMMEDIATE_KILL_PHYSICAL_EXIT_TIMEOUT_MS } from '../immediate-kill-reply import { createDaemonPtySubprocessHandle } from './subprocess-handle' import { spawnNativeDaemonPty } from './native-pty-spawn' import { Session } from '../session' -import { readTerminalStartFailure } from '../../../shared/terminal-start-failure' +import { readTerminalStartFailure } from '../../../shared/terminal/pty/lifecycle/terminal-start-failure' import { mapRuntimeError } from '../../runtime/rpc/errors' import { _resetConptyStartupTrustForTest, diff --git a/src/main/daemon/pty-subprocess/native-pty-spawn.ts b/src/main/daemon/pty-subprocess/native-pty-spawn.ts index ba4ccc52bb8..b8cb259ffd1 100644 --- a/src/main/daemon/pty-subprocess/native-pty-spawn.ts +++ b/src/main/daemon/pty-subprocess/native-pty-spawn.ts @@ -1,4 +1,4 @@ -import type { PtyCreationDisposition } from '../../../shared/claimed-agent-pty-owner' +import type { PtyCreationDisposition } from '../../../shared/terminal/pty/lifecycle/pty-creation-disposition' import type { TerminalCreationWork } from '../terminal-creation-work' import { createDaemonPtyPhysicalOwner, type DaemonPtyPhysicalOwner } from './subprocess-handle' import { assertWslDistroAllowed } from '@orca/process-host/wsl-distro-allowlist' diff --git a/src/main/daemon/pty-subprocess/pre-listener-events.ts b/src/main/daemon/pty-subprocess/pre-listener-events.ts index 4f5a2be5092..32d6a83b481 100644 --- a/src/main/daemon/pty-subprocess/pre-listener-events.ts +++ b/src/main/daemon/pty-subprocess/pre-listener-events.ts @@ -1,7 +1,7 @@ import { resolveProcessExitCause, type TerminalExitCause -} from '../../../shared/terminal-exit-cause' +} from '../../../shared/terminal/pty/lifecycle/terminal-exit-cause' const PENDING_PRE_LISTENER_DATA_MAX_CHARS = 512 * 1024 diff --git a/src/main/daemon/pty-subprocess/spawn-environment.ts b/src/main/daemon/pty-subprocess/spawn-environment.ts index d0d8dff2ca5..f59404a718a 100644 --- a/src/main/daemon/pty-subprocess/spawn-environment.ts +++ b/src/main/daemon/pty-subprocess/spawn-environment.ts @@ -16,7 +16,7 @@ import { gitCredentialPromptGuardEnv, mergeGitConfigEnvProtocol } from '../../../shared/git/commands/git-credential-prompt-env' -import { TERMINAL_GIT_CREDENTIAL_GUARD_POLICY_ENV } from '../../../shared/terminal-git-credential-guard' +import { TERMINAL_GIT_CREDENTIAL_GUARD_POLICY_ENV } from '../../../shared/shell/launch/terminal-git-credential-guard' import { ORCA_IMAGE_PROTOCOL_ENV, ORCA_IMAGE_PROTOCOL_VALUE diff --git a/src/main/daemon/pty-subprocess/spawn-file-child-processes.ts b/src/main/daemon/pty-subprocess/spawn-file-child-processes.ts index 76d7767b56b..4f78da63e1d 100644 --- a/src/main/daemon/pty-subprocess/spawn-file-child-processes.ts +++ b/src/main/daemon/pty-subprocess/spawn-file-child-processes.ts @@ -9,7 +9,7 @@ import { } from '../../../shared/process-table-index' import { hasControllingTty } from '../../../shared/posix-controlling-terminal' import type { ProcessTableRow } from '../../../shared/process-table-snapshot' -import type { PtyChildProcessVerdict } from '../../../shared/terminal-process-inspection' +import type { PtyChildProcessVerdict } from '../../../shared/terminal/pty/lifecycle/terminal-process-inspection' import { readWindowsPtyJobProcessIds } from '../../providers/windows-pty-job-membership' import { readWindowsConsoleAttachedProcessIds } from '../../providers/windows-console-attached-processes' import { isWindowsShellAloneInJob } from '../../providers/windows-shell-alone-in-job' diff --git a/src/main/daemon/pty-subprocess/spawn-file-foreground-process.ts b/src/main/daemon/pty-subprocess/spawn-file-foreground-process.ts index ae9d5d79ac9..5a2a6a8c14c 100644 --- a/src/main/daemon/pty-subprocess/spawn-file-foreground-process.ts +++ b/src/main/daemon/pty-subprocess/spawn-file-foreground-process.ts @@ -8,7 +8,7 @@ import { normalizePtyTty } from '../../pty/process-retirement/terminal-process-rows' import type { IPty } from 'node-pty' -import { isShellProcess } from '../../../shared/shell-process-detection' +import { isShellProcess } from '../../../shared/agent-status/process/shell-process-detection' import { getCommandTokenPathBasename, getFirstCommandToken diff --git a/src/main/daemon/pty-subprocess/subprocess-handle.ts b/src/main/daemon/pty-subprocess/subprocess-handle.ts index 8a23ef562de..19f4aff2310 100644 --- a/src/main/daemon/pty-subprocess/subprocess-handle.ts +++ b/src/main/daemon/pty-subprocess/subprocess-handle.ts @@ -2,7 +2,7 @@ import { createDaemonPtyPhysicalOwner } from './daemon-pty-physical-owner' import type { DisposableNativePty } from './native-pty-spawn' import type * as pty from 'node-pty' import type { RecognizedAgentProcess } from '../../../shared/agent-status/process/agent-process-recognition' -import { readPtySlavePath } from '../../../shared/pty-slave-line-discipline-echo' +import { readPtySlavePath } from '../../../shared/terminal/pty/native-process/pty-slave-line-discipline-echo' import { signalPosixPtyForegroundGroup } from '../../pty/process-retirement/posix-pty-foreground-group' import { observePtyForeground, diff --git a/src/main/daemon/session-conpty-resize-history.test.ts b/src/main/daemon/session-conpty-resize-history.test.ts index 8537299ec81..a400df00952 100644 --- a/src/main/daemon/session-conpty-resize-history.test.ts +++ b/src/main/daemon/session-conpty-resize-history.test.ts @@ -1,6 +1,6 @@ import { afterEach, describe, expect, it } from 'vitest' import { Terminal } from '@xterm/headless' -import type { PtyOwnerBackend } from '../../shared/pty-owner-backend' +import type { PtyOwnerBackend } from '../../shared/terminal/pty/lifecycle/pty-owner-backend' import { buildFreshShellViewportBlankingSequence } from '../../shared/terminal/viewport/terminal-fresh-shell-viewport' import { PROCESS_BOUNDARY_GROUND } from '../../shared/terminal/protocol/input-modes/terminal-mode-reset-profiles' import { Session } from './session' diff --git a/src/main/daemon/session-conpty-resize-transcript.test.ts b/src/main/daemon/session-conpty-resize-transcript.test.ts index 012168c6938..075cf4d6164 100644 --- a/src/main/daemon/session-conpty-resize-transcript.test.ts +++ b/src/main/daemon/session-conpty-resize-transcript.test.ts @@ -2,7 +2,7 @@ import { readFileSync } from 'node:fs' import { join } from 'node:path' import { afterEach, describe, expect, it } from 'vitest' import { Terminal } from '@xterm/headless' -import type { PtyOwnerBackend } from '../../shared/pty-owner-backend' +import type { PtyOwnerBackend } from '../../shared/terminal/pty/lifecycle/pty-owner-backend' import { Session } from './session' const FIXTURES = join(__dirname, '../runtime/__fixtures__') diff --git a/src/main/daemon/session-initial-output.ts b/src/main/daemon/session-initial-output.ts index f8442de471b..51148b09ae2 100644 --- a/src/main/daemon/session-initial-output.ts +++ b/src/main/daemon/session-initial-output.ts @@ -1,7 +1,7 @@ import { resolveUnreportedExitCause, type TerminalExitCause -} from '../../shared/terminal-exit-cause' +} from '../../shared/terminal/pty/lifecycle/terminal-exit-cause' import type { SessionOptions } from './session-options' export function createSessionInitialOutput({ diff --git a/src/main/daemon/session-options.ts b/src/main/daemon/session-options.ts index cbd92dc3710..a5681f704fd 100644 --- a/src/main/daemon/session-options.ts +++ b/src/main/daemon/session-options.ts @@ -1,7 +1,7 @@ import type { SubprocessHandle } from './session-subprocess-handle' import type { TuiAgent } from '../../shared/agent-launch/catalog/tui-agent' -import type { PtyStartupIngressIntent } from '../../shared/pty-startup-ingress' -import type { PtyOwnerBackend } from '../../shared/pty-owner-backend' +import type { PtyStartupIngressIntent } from '../../shared/terminal/pty/ingress/pty-startup-ingress-intent' +import type { PtyOwnerBackend } from '../../shared/terminal/pty/lifecycle/pty-owner-backend' import type { WslGuestRoot } from '../../shared/wsl-guest-root-marker' export type SessionOptions = { diff --git a/src/main/daemon/session-output-plane.ts b/src/main/daemon/session-output-plane.ts index 71941b27594..572eb04a47d 100644 --- a/src/main/daemon/session-output-plane.ts +++ b/src/main/daemon/session-output-plane.ts @@ -1,11 +1,14 @@ -import { resolveProcessExitCause, type TerminalExitCause } from '../../shared/terminal-exit-cause' +import { + resolveProcessExitCause, + type TerminalExitCause +} from '../../shared/terminal/pty/lifecycle/terminal-exit-cause' import type { XtermConptyOptions } from '../../shared/xterm-conpty-options' import { HeadlessEmulator } from './headless-emulator' import { StartupDeviceAttributesQueryFilter } from './startup-device-attributes-responder' import { normalizePtySize } from './daemon-pty-size' -import type { PtyIngressEmission } from '../../shared/pty-startup-ingress' +import type { PtyIngressEmission } from '../../shared/terminal/pty/ingress/pty-startup-ingress-contract' import type { PendingOutputRecord, TakePendingOutputResult, TerminalSnapshot } from './types' -import type { TerminalOwner } from '../../shared/terminal-owner' +import type { TerminalOwner } from '../../shared/terminal/pty/lifecycle/terminal-owner' import type { SubprocessHandle } from './session-subprocess-handle' import { nudgePowerShellPromptRepaint } from './session-powershell-prompt-repaint' diff --git a/src/main/daemon/session-powershell-prompt-repaint.ts b/src/main/daemon/session-powershell-prompt-repaint.ts index c095fd3eefe..9b592d11de7 100644 --- a/src/main/daemon/session-powershell-prompt-repaint.ts +++ b/src/main/daemon/session-powershell-prompt-repaint.ts @@ -1,4 +1,4 @@ -import { isPowerShellProcess } from '../../shared/shell-process-detection' +import { isPowerShellProcess } from '../../shared/agent-status/process/shell-process-detection' import type { SubprocessHandle } from './session-subprocess-handle' export type PowerShellPromptRepaintDeps = { diff --git a/src/main/daemon/session-process-inspection.ts b/src/main/daemon/session-process-inspection.ts index c9bae514527..553185cb751 100644 --- a/src/main/daemon/session-process-inspection.ts +++ b/src/main/daemon/session-process-inspection.ts @@ -1,5 +1,5 @@ import type { ChildProcessVerdictRead, SubprocessHandle } from './session-subprocess-handle' -import type { TerminalForegroundSample } from '../../shared/terminal-foreground-observation' +import type { TerminalForegroundSample } from '../../shared/terminal/pty/lifecycle/terminal-foreground-observation' export class SessionProcessInspection { constructor(protected readonly subprocess: SubprocessHandle) {} diff --git a/src/main/daemon/session-subprocess-handle.ts b/src/main/daemon/session-subprocess-handle.ts index a3e47994c17..573d673198a 100644 --- a/src/main/daemon/session-subprocess-handle.ts +++ b/src/main/daemon/session-subprocess-handle.ts @@ -1,6 +1,6 @@ -import type { TerminalForegroundSample } from '../../shared/terminal-foreground-observation' -import type { PtyChildProcessVerdict } from '../../shared/terminal-process-inspection' -import type { TerminalExitCause } from '../../shared/terminal-exit-cause' +import type { TerminalForegroundSample } from '../../shared/terminal/pty/lifecycle/terminal-foreground-observation' +import type { PtyChildProcessVerdict } from '../../shared/terminal/pty/lifecycle/terminal-process-inspection' +import type { TerminalExitCause } from '../../shared/terminal/pty/lifecycle/terminal-exit-cause' import type { JobTerminationOutcome } from '../windows/windows-pty-job' diff --git a/src/main/daemon/session.test.ts b/src/main/daemon/session.test.ts index 3ae29c06ac8..a33fceffb61 100644 --- a/src/main/daemon/session.test.ts +++ b/src/main/daemon/session.test.ts @@ -10,7 +10,7 @@ import type { TuiAgent } from '../../shared/agent-launch/catalog/tui-agent' import { _resetPtyOwnerHostColorsForTest, setPtyOwnerHostColors -} from '../../shared/pty-owner-color-query-colors' +} from '../../shared/terminal/pty/ingress/pty-owner-color-query-colors' const killWithDescendantSweepMock = vi.hoisted(() => vi.fn()) vi.mock('../pty/process-retirement/pty-descendant-termination', () => ({ diff --git a/src/main/daemon/session.ts b/src/main/daemon/session.ts index 7345957291e..a7bdb24fc62 100644 --- a/src/main/daemon/session.ts +++ b/src/main/daemon/session.ts @@ -11,7 +11,7 @@ import type { JobTerminationOutcome } from '../windows/windows-pty-job' import type { SessionOptions } from './session-options' import type { TuiAgent } from '../../shared/agent-launch/catalog/tui-agent' import { randomUUID } from 'node:crypto' -import { PtyStartupIngress } from '../../shared/pty-startup-ingress' +import { PtyStartupIngress } from '../../shared/terminal/pty/ingress/pty-startup-ingress' import type { SessionState, @@ -19,7 +19,7 @@ import type { TakePendingOutputResult, TerminalSnapshot } from './types' -import type { TerminalExitCause } from '../../shared/terminal-exit-cause' +import type { TerminalExitCause } from '../../shared/terminal/pty/lifecycle/terminal-exit-cause' export class Session extends SessionProcessInspection { readonly sessionId: string diff --git a/src/main/daemon/terminal-creation-work.ts b/src/main/daemon/terminal-creation-work.ts index 8129e8ca1e7..3850b75ca7d 100644 --- a/src/main/daemon/terminal-creation-work.ts +++ b/src/main/daemon/terminal-creation-work.ts @@ -1,6 +1,6 @@ import type { InternalCreateOrAttachOptions } from './terminal-host-agent-session-claim' import { waitForTerminalAttachOperation } from './terminal-attach-cancellation' -import type { PtyCreationDisposition } from '../../shared/claimed-agent-pty-owner' +import type { PtyCreationDisposition } from '../../shared/terminal/pty/lifecycle/pty-creation-disposition' import type { TerminalSpawnGate, TerminalSpawnLease } from './terminal-spawn-gate' export type PendingTerminalCreation = { diff --git a/src/main/daemon/terminal-history-checkpoint-reader.ts b/src/main/daemon/terminal-history-checkpoint-reader.ts index 82e3e5b5473..ad1eebb8188 100644 --- a/src/main/daemon/terminal-history-checkpoint-reader.ts +++ b/src/main/daemon/terminal-history-checkpoint-reader.ts @@ -4,7 +4,7 @@ import { readTerminalHistoryJsonAsync } from './terminal-history-file-reader' import { TERMINAL_HISTORY_CHECKPOINT_MAX_BYTES } from './terminal-history-file-limits' import { isValidTerminalHistorySize } from './terminal-history-dimensions' import type { TerminalCheckpointFile, TerminalModes } from './types' -import { parseTerminalOwner } from '../../shared/terminal-owner' +import { parseTerminalOwner } from '../../shared/terminal/pty/lifecycle/terminal-owner' export type TerminalHistoryCheckpointRead = | { status: 'missing' } diff --git a/src/main/daemon/terminal-history-cold-restore-info.ts b/src/main/daemon/terminal-history-cold-restore-info.ts index 594b3d87cb1..27d1e3978f3 100644 --- a/src/main/daemon/terminal-history-cold-restore-info.ts +++ b/src/main/daemon/terminal-history-cold-restore-info.ts @@ -1,7 +1,7 @@ import type { TerminalOscLinkRange } from '../../shared/terminal/links/terminal-osc-link-ranges' import type { SessionMeta } from './terminal-history-metadata' import type { TerminalModes } from './types' -import type { TerminalOwner } from '../../shared/terminal-owner' +import type { TerminalOwner } from '../../shared/terminal/pty/lifecycle/terminal-owner' export type ColdRestoreInfo = { snapshotAnsi: string diff --git a/src/main/daemon/terminal-host-agent-session-claim.ts b/src/main/daemon/terminal-host-agent-session-claim.ts index 4be2cad1bf0..c0f20e3cb87 100644 --- a/src/main/daemon/terminal-host-agent-session-claim.ts +++ b/src/main/daemon/terminal-host-agent-session-claim.ts @@ -1,10 +1,8 @@ -import { terminalStartError } from '../../shared/terminal-start-failure' -import type { TerminalExitCause } from '../../shared/terminal-exit-cause' +import { terminalStartError } from '../../shared/terminal/pty/lifecycle/terminal-start-failure' +import type { TerminalExitCause } from '../../shared/terminal/pty/lifecycle/terminal-exit-cause' import type { TerminalCreationWork } from './terminal-creation-work' -import type { - ClaimedAgentPtyOwnerRegistry, - PtyCreationDisposition -} from '../../shared/claimed-agent-pty-owner' +import type { ClaimedAgentPtyOwnerRegistry } from '../../shared/claimed-agent-pty-owner' +import type { PtyCreationDisposition } from '../../shared/terminal/pty/lifecycle/pty-creation-disposition' import type { AgentSessionOwnerBinding } from '../../shared/agent-session/agent-session-host-authority' import type { SpawnIntent } from '../../shared/host-spawn-admission' import type { CreateOrAttachOptions, CreateOrAttachResult } from './terminal-host-create-contract' diff --git a/src/main/daemon/terminal-host-agent-session.test.ts b/src/main/daemon/terminal-host-agent-session.test.ts index 2d6c512b25d..f5558593201 100644 --- a/src/main/daemon/terminal-host-agent-session.test.ts +++ b/src/main/daemon/terminal-host-agent-session.test.ts @@ -3,7 +3,7 @@ import { type InternalCreateOrAttachOptions } from './terminal-host-agent-session-claim' import { ClaimedAgentPtyOwnerRegistry } from '../../shared/claimed-agent-pty-owner' -import { readTerminalStartFailure } from '../../shared/terminal-start-failure' +import { readTerminalStartFailure } from '../../shared/terminal/pty/lifecycle/terminal-start-failure' import type { CreateOrAttachResult } from './terminal-host-create-contract' import './mock-descendant-sweep' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' diff --git a/src/main/daemon/terminal-host-create-contract.ts b/src/main/daemon/terminal-host-create-contract.ts index f26bae7acf5..41b37036ab5 100644 --- a/src/main/daemon/terminal-host-create-contract.ts +++ b/src/main/daemon/terminal-host-create-contract.ts @@ -1,14 +1,14 @@ import type { StartupCommandDelivery } from '../../shared/agent-launch/startup/codex-startup-delivery' import type { TuiAgent } from '../../shared/agent-launch/catalog/tui-agent' import type { ShellReadyState, TerminalSnapshot } from './types' -import type { PtyStartupIngressIntent } from '../../shared/pty-startup-ingress' +import type { PtyStartupIngressIntent } from '../../shared/terminal/pty/ingress/pty-startup-ingress-intent' import type { AgentSessionClaimedSpawnResult, AgentSessionExecutionClaim, AgentSessionSurfaceBinding } from '../../shared/agent-session/agent-session-host-authority' -import type { PtyIncarnationId } from '../../shared/pty-incarnation' -import type { TerminalExitCause } from '../../shared/terminal-exit-cause' +import type { PtyIncarnationId } from '../../shared/terminal/pty/lifecycle/pty-incarnation' +import type { TerminalExitCause } from '../../shared/terminal/pty/lifecycle/terminal-exit-cause' export type CreateOrAttachOptions = { sessionId: string diff --git a/src/main/daemon/terminal-host-fenced-termination.test.ts b/src/main/daemon/terminal-host-fenced-termination.test.ts index fd897051368..69f40ebdc13 100644 --- a/src/main/daemon/terminal-host-fenced-termination.test.ts +++ b/src/main/daemon/terminal-host-fenced-termination.test.ts @@ -2,7 +2,7 @@ import './mock-descendant-sweep' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { TerminalHost } from './terminal-host' import { createMockSubprocess } from './daemon-pty-adapter-test-harness' -import type { PtyFencedTerminationRequest } from '../../shared/pty-fenced-termination' +import type { PtyFencedTerminationRequest } from '../../shared/terminal/pty/lifecycle/pty-fenced-termination' const streamClient = () => ({ onData: vi.fn(), onExit: vi.fn() }) const claim = { diff --git a/src/main/daemon/terminal-host-fenced-termination.ts b/src/main/daemon/terminal-host-fenced-termination.ts index 97f93c7ee25..245a2b8480c 100644 --- a/src/main/daemon/terminal-host-fenced-termination.ts +++ b/src/main/daemon/terminal-host-fenced-termination.ts @@ -1,7 +1,7 @@ import type { PtyFencedTerminationRequest, PtyFencedTerminationOutcome -} from '../../shared/pty-fenced-termination' +} from '../../shared/terminal/pty/lifecycle/pty-fenced-termination' import type { Session } from './session' import type { ClaimedAgentPtyOwnerRegistry } from '../../shared/claimed-agent-pty-owner' diff --git a/src/main/daemon/terminal-host-options.ts b/src/main/daemon/terminal-host-options.ts index 2106186d85d..80311041aa8 100644 --- a/src/main/daemon/terminal-host-options.ts +++ b/src/main/daemon/terminal-host-options.ts @@ -1,4 +1,4 @@ -import type { PtyCreationDisposition } from '../../shared/claimed-agent-pty-owner' +import type { PtyCreationDisposition } from '../../shared/terminal/pty/lifecycle/pty-creation-disposition' import type { StartupCommandDelivery } from '../../shared/agent-launch/startup/codex-startup-delivery' import type { TuiAgent } from '../../shared/agent-launch/catalog/tui-agent' import type { SubprocessHandle } from './session-subprocess-handle' diff --git a/src/main/daemon/terminal-host-process-inspection.test.ts b/src/main/daemon/terminal-host-process-inspection.test.ts index 6c83d377182..463db6cbdaf 100644 --- a/src/main/daemon/terminal-host-process-inspection.test.ts +++ b/src/main/daemon/terminal-host-process-inspection.test.ts @@ -1,4 +1,4 @@ -import type { TerminalForegroundSample } from '../../shared/terminal-foreground-observation' +import type { TerminalForegroundSample } from '../../shared/terminal/pty/lifecycle/terminal-foreground-observation' import './mock-descendant-sweep' import { describe, expect, it, vi } from 'vitest' import type { SubprocessHandle } from './session-subprocess-handle' diff --git a/src/main/daemon/terminal-host-process-inspection.ts b/src/main/daemon/terminal-host-process-inspection.ts index 8be87491573..b697b9d8ef3 100644 --- a/src/main/daemon/terminal-host-process-inspection.ts +++ b/src/main/daemon/terminal-host-process-inspection.ts @@ -1,9 +1,9 @@ -import type { TerminalForegroundObservation } from '../../shared/terminal-foreground-observation' +import type { TerminalForegroundObservation } from '../../shared/terminal/pty/lifecycle/terminal-foreground-observation' import { pruneRetiredPtyIncarnations } from '../../shared/retired-pty-incarnations' import { getInspectableTerminalHostSession } from './terminal-host-session-access' -import { isShellProcess } from '../../shared/shell-process-detection' +import { isShellProcess } from '../../shared/agent-status/process/shell-process-detection' import { recognizeAgentProcess } from '../../shared/agent-status/process/agent-process-recognition' -import type { PtyChildProcessVerdict } from '../../shared/terminal-process-inspection' +import type { PtyChildProcessVerdict } from '../../shared/terminal/pty/lifecycle/terminal-process-inspection' import type { RemoteForegroundEvidence } from '../../shared/foreground-process-evidence' import { getCheapProcessTableSnapshot } from '../../shared/cheap-process-table-snapshot-reader' import { getStrictProcessTableSnapshotWithAge } from '../../shared/process-table-snapshot-reader' diff --git a/src/main/daemon/terminal-host-returned-process.ts b/src/main/daemon/terminal-host-returned-process.ts index d2c246b2ee3..5aea26ced5d 100644 --- a/src/main/daemon/terminal-host-returned-process.ts +++ b/src/main/daemon/terminal-host-returned-process.ts @@ -1,6 +1,6 @@ import type { Session } from './session' import type { SubprocessHandle } from './session-subprocess-handle' -import type { TerminalExitCause } from '../../shared/terminal-exit-cause' +import type { TerminalExitCause } from '../../shared/terminal/pty/lifecycle/terminal-exit-cause' import type { TerminalSpawnGate } from './terminal-spawn-gate' import { SessionTerminationController } from './session-termination-controller' import { shutdownOwnedTerminalProcess } from './terminal-host-session-shutdown' diff --git a/src/main/daemon/terminal-host-session-publish.ts b/src/main/daemon/terminal-host-session-publish.ts index da1a49bb1ff..1c52f9be0c9 100644 --- a/src/main/daemon/terminal-host-session-publish.ts +++ b/src/main/daemon/terminal-host-session-publish.ts @@ -1,5 +1,5 @@ -import { terminalStartError } from '../../shared/terminal-start-failure' -import type { PtyCreationDisposition } from '../../shared/claimed-agent-pty-owner' +import { terminalStartError } from '../../shared/terminal/pty/lifecycle/terminal-start-failure' +import type { PtyCreationDisposition } from '../../shared/terminal/pty/lifecycle/pty-creation-disposition' import type { SubprocessHandle } from './session-subprocess-handle' import type { WslGuestRoot } from '../../shared/wsl-guest-root-marker' import { buildStartupCommandSubmission } from '../../shared/startup-command-submission' @@ -8,7 +8,7 @@ import { startupStagingFailureNotice, type StartupCommandStaging } from '../../shared/startup-command-staging' -import { resolvePtyOwnerBackend } from '../../shared/pty-owner-backend' +import { resolvePtyOwnerBackend } from '../../shared/terminal/pty/lifecycle/pty-owner-backend' import { getDaemonSessionResultMetadata } from './daemon-create-or-attach-result' import { Session } from './session' import { diff --git a/src/main/daemon/terminal-host.ts b/src/main/daemon/terminal-host.ts index 85c57ddd0bf..cf1981084e5 100644 --- a/src/main/daemon/terminal-host.ts +++ b/src/main/daemon/terminal-host.ts @@ -1,7 +1,7 @@ import { terminalSessionExitCode } from './terminal-host-returned-process' import { runTerminalCreation, type PendingTerminalCreation } from './terminal-creation-work' import { beginTerminalHostFencedTermination } from './terminal-host-fenced-termination' -import type { PtyFencedTerminationRequest } from '../../shared/pty-fenced-termination' +import type { PtyFencedTerminationRequest } from '../../shared/terminal/pty/lifecycle/pty-fenced-termination' import type { Session } from './session' import type { PtyProcessInspectionOptions } from '../providers/pty-process-inspection' import type { SessionInfo, TakePendingOutputResult, TerminalSnapshot } from './types' @@ -13,8 +13,11 @@ import { getAliveTerminalHostSession } from './terminal-host-session-access' import { writeSessionInput } from './session-input-path' import { TerminalSessionTeardown } from './terminal-session-teardown' import { ClaimedAgentPtyOwnerRegistry } from '../../shared/claimed-agent-pty-owner' -import { createOrAttachClaimedAgentSession } from './terminal-host-agent-session-claim' -import type { InternalCreateOrAttachOptions } from './terminal-host-agent-session-claim' +import { + createOrAttachClaimedAgentSession, + type InternalCreateOrAttachOptions +} from './terminal-host-agent-session-claim' + import { TerminalHostAgentSessionGenerations } from './terminal-host-agent-session-generations' import { resolveTerminalHostSessionCwd } from './terminal-host-session-cwd' import { TerminalHostTombstones } from './terminal-host-tombstones' @@ -25,8 +28,11 @@ import { import { createOrAttachTerminalSession } from './terminal-host-session-create' import { TerminalAttachCanceledError } from './daemon-errors' import { randomUUID } from 'node:crypto' -import { inspectTerminalHostSession } from './terminal-host-process-inspection' -import type { TerminalHostProcessInspection } from './terminal-host-process-inspection' +import { + inspectTerminalHostSession, + type TerminalHostProcessInspection +} from './terminal-host-process-inspection' + import { confirmTerminalHostForegroundProcess, confirmTerminalHostShellForeground, diff --git a/src/main/daemon/terminal-scopes-runtime.ts b/src/main/daemon/terminal-scopes-runtime.ts index 70e65b16a2a..3949b4dace4 100644 --- a/src/main/daemon/terminal-scopes-runtime.ts +++ b/src/main/daemon/terminal-scopes-runtime.ts @@ -3,7 +3,7 @@ import { userManagerEnv } from './daemon-cgroup-scope' import { warnWhenRealtimeTimeoutIsZero } from './daemon-rttime-limit' import { setPtyActiveProcessLimit } from '../windows/windows-pty-job' import { resolveTerminalScopes, type TerminalScopeRuntime } from './terminal-scopes' -import type { PtyProcessCeilingState } from '../../shared/pty-process-ceiling-state' +import type { PtyProcessCeilingState } from '../../shared/terminal/pty/native-process/pty-process-ceiling-state' type DaemonLog = (event: string, details?: Record) => void diff --git a/src/main/daemon/terminal-scopes.test.ts b/src/main/daemon/terminal-scopes.test.ts index 9059ed52648..71c8674c983 100644 --- a/src/main/daemon/terminal-scopes.test.ts +++ b/src/main/daemon/terminal-scopes.test.ts @@ -14,7 +14,7 @@ import { confirmPtyProcessCeiling, describePtyProcessCeiling, parsePtyProcessCeilingState -} from '../../shared/pty-process-ceiling-state' +} from '../../shared/terminal/pty/native-process/pty-process-ceiling-state' import { parseDaemonPidFile } from './daemon-pid-file-parse' import { parseMemorySize, diff --git a/src/main/daemon/terminal-scopes.ts b/src/main/daemon/terminal-scopes.ts index cf2895ca872..55edd3f819e 100644 --- a/src/main/daemon/terminal-scopes.ts +++ b/src/main/daemon/terminal-scopes.ts @@ -13,9 +13,7 @@ import { import type { PtyProcessCeilingOffReason, PtyProcessCeilingState -} from '../../shared/pty-process-ceiling-state' - -export type { PtyProcessCeilingState } from '../../shared/pty-process-ceiling-state' +} from '../../shared/terminal/pty/native-process/pty-process-ceiling-state' export const PTY_PROCESS_CEILING_ENV = 'ORCA_TERMINAL_PROCESS_CEILING' /** Reserve tasks for shell hooks and a build step before accepting an opt-in ceiling. */ diff --git a/src/main/daemon/terminal-shell-lifecycle-scanner.ts b/src/main/daemon/terminal-shell-lifecycle-scanner.ts index d9a273890ad..55039db992d 100644 --- a/src/main/daemon/terminal-shell-lifecycle-scanner.ts +++ b/src/main/daemon/terminal-shell-lifecycle-scanner.ts @@ -1,6 +1,6 @@ import { buildProcessBoundaryGround } from '../../shared/terminal/protocol/input-modes/terminal-mode-reset-profiles' import { closesAppOsc133Zone } from '../../shared/terminal/output/terminal-osc133-command-finished' -import type { TerminalOwner } from '../../shared/terminal-owner' +import type { TerminalOwner } from '../../shared/terminal/pty/lifecycle/terminal-owner' import { TerminalArmedInputModes } from './terminal-armed-input-modes' import { TerminalShellPromptPhase } from './terminal-shell-prompt-phase' diff --git a/src/main/daemon/terminal-shell-recovery-barrier.test.ts b/src/main/daemon/terminal-shell-recovery-barrier.test.ts index 3da8dd2ed39..be90be2b0c6 100644 --- a/src/main/daemon/terminal-shell-recovery-barrier.test.ts +++ b/src/main/daemon/terminal-shell-recovery-barrier.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it, vi } from 'vitest' import { PROCESS_BOUNDARY_GROUND } from '../../shared/terminal/protocol/input-modes/terminal-mode-reset-profiles' import { TerminalShellRecoveryBarrier } from './terminal-shell-recovery-barrier' -import type { PtyIngressEmission } from '../../shared/pty-startup-ingress' +import type { PtyIngressEmission } from '../../shared/terminal/pty/ingress/pty-startup-ingress-contract' const TRIGGER = '\x1b[?1049hTUI\x1b]133;D;137\x07' const MARK = '\x1b]133;D;137\x07' diff --git a/src/main/daemon/terminal-shell-recovery-barrier.ts b/src/main/daemon/terminal-shell-recovery-barrier.ts index 14f7486ffd2..3999d93e47f 100644 --- a/src/main/daemon/terminal-shell-recovery-barrier.ts +++ b/src/main/daemon/terminal-shell-recovery-barrier.ts @@ -1,7 +1,7 @@ import { TerminalShellCleanExitConfirmation } from './terminal-shell-clean-exit-confirmation' import { TerminalShellLifecycleScanner } from './terminal-shell-lifecycle-scanner' -import type { PtyIngressEmission } from '../../shared/pty-startup-ingress' -import type { TerminalOwner } from '../../shared/terminal-owner' +import type { PtyIngressEmission } from '../../shared/terminal/pty/ingress/pty-startup-ingress-contract' +import type { TerminalOwner } from '../../shared/terminal/pty/lifecycle/terminal-owner' // Bound proof latency and queued output; timeout or overflow releases the original stream. const MAX_QUEUED_BYTES = 262_144 diff --git a/src/main/daemon/terminal-shell-recovery-clean-exit-retirement.test.ts b/src/main/daemon/terminal-shell-recovery-clean-exit-retirement.test.ts index 7ac1046f831..6c07105d476 100644 --- a/src/main/daemon/terminal-shell-recovery-clean-exit-retirement.test.ts +++ b/src/main/daemon/terminal-shell-recovery-clean-exit-retirement.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from 'vitest' import { TerminalShellRecoveryBarrier } from './terminal-shell-recovery-barrier' -import type { PtyIngressEmission } from '../../shared/pty-startup-ingress' +import type { PtyIngressEmission } from '../../shared/terminal/pty/ingress/pty-startup-ingress-contract' const CLEAN_EXIT = '\x1b[?1049hTUI\x1b[?1049l\x1b]133;D;0\x07' diff --git a/src/main/daemon/terminal-snapshot.ts b/src/main/daemon/terminal-snapshot.ts index 0a439c0c4c7..e7d12f72638 100644 --- a/src/main/daemon/terminal-snapshot.ts +++ b/src/main/daemon/terminal-snapshot.ts @@ -1,6 +1,6 @@ import type { TerminalOscLinkRange } from '../../shared/terminal/links/terminal-osc-link-ranges' import type { TerminalModes } from './terminal-modes' -import type { TerminalOwner } from '../../shared/terminal-owner' +import type { TerminalOwner } from '../../shared/terminal/pty/lifecycle/terminal-owner' export type TerminalSnapshot = { snapshotAnsi: string diff --git a/src/main/daemon/terminal-spawn-gate.test.ts b/src/main/daemon/terminal-spawn-gate.test.ts index f77c331746b..7d8574f5296 100644 --- a/src/main/daemon/terminal-spawn-gate.test.ts +++ b/src/main/daemon/terminal-spawn-gate.test.ts @@ -4,7 +4,7 @@ import type { SubprocessHandle } from './session-subprocess-handle' import { TerminalHost, type TerminalHostOptions } from './terminal-host' import { TerminalSpawnGate, type TerminalSpawnAdmissionMode } from './terminal-spawn-gate' import type { HostPressureLevel, SpawnIntent } from '../../shared/host-spawn-admission' -import { TERMINAL_HOST_CAP_HINT } from '../../shared/terminal-spawn-error-copy' +import { TERMINAL_HOST_CAP_HINT } from '../../shared/terminal/pty/lifecycle/terminal-spawn-error-copy' import { HostTerminalLedger } from './host-terminal-ledger' type SpawnSubprocess = TerminalHostOptions['spawnSubprocess'] diff --git a/src/main/daemon/terminal-spawn-host-share.ts b/src/main/daemon/terminal-spawn-host-share.ts index d6668e6ca5e..5904699150b 100644 --- a/src/main/daemon/terminal-spawn-host-share.ts +++ b/src/main/daemon/terminal-spawn-host-share.ts @@ -4,7 +4,7 @@ import type { SpawnRequestFacts } from '../../shared/host-spawn-admission' import { recentAutomaticAdmits } from '../../shared/host-automatic-work-budget' -import { TERMINAL_HOST_CAP_HINT } from '../../shared/terminal-spawn-error-copy' +import { TERMINAL_HOST_CAP_HINT } from '../../shared/terminal/pty/lifecycle/terminal-spawn-error-copy' import type { HostTerminalLedger, OtherDaemonsShare } from './host-terminal-ledger' import type { HostTerminalShare } from './host-terminal-ledger-entry' import { TerminalSpawnDeferredError } from './terminal-spawn-deferred-error' diff --git a/src/main/daemon/terminal-start-failure.test.ts b/src/main/daemon/terminal-start-failure.test.ts index 48e1481f751..168838a2d5e 100644 --- a/src/main/daemon/terminal-start-failure.test.ts +++ b/src/main/daemon/terminal-start-failure.test.ts @@ -16,12 +16,12 @@ import { BackgroundTransientFactRelay } from './daemon-background-transient-fact import { TerminalHistorySeedTransferRegistry } from './terminal-history-seed-transfer-registry' import { createNoopDaemonFileLog } from './daemon-file-log' import type { SubprocessHandle } from './session-subprocess-handle' -import type { TerminalExitCause } from '../../shared/terminal-exit-cause' +import type { TerminalExitCause } from '../../shared/terminal/pty/lifecycle/terminal-exit-cause' import { formatTerminalStartFailure, readTerminalStartFailure, terminalStartError -} from '../../shared/terminal-start-failure' +} from '../../shared/terminal/pty/lifecycle/terminal-start-failure' import { mapRuntimeError } from '../runtime/rpc/errors' const MARKER = 'too many consoles in use, max consoles is 128' diff --git a/src/main/daemon/types.ts b/src/main/daemon/types.ts index 9026cdb7ff3..ef339938fae 100644 --- a/src/main/daemon/types.ts +++ b/src/main/daemon/types.ts @@ -1,4 +1,4 @@ -import type { TerminalStartFailure } from '../../shared/terminal-start-failure' +import type { TerminalStartFailure } from '../../shared/terminal/pty/lifecycle/terminal-start-failure' import type { AsyncIoHealthRequest, FullDiskAccessStatusRequest, @@ -24,7 +24,7 @@ export type { import type { StartupCommandDelivery } from '../../shared/agent-launch/startup/codex-startup-delivery' import type { TuiAgent } from '../../shared/agent-launch/catalog/tui-agent' -import type { PtyStartupIngressIntent } from '../../shared/pty-startup-ingress' +import type { PtyStartupIngressIntent } from '../../shared/terminal/pty/ingress/pty-startup-ingress-intent' import type { AgentSessionExecutionClaim, AgentSessionSurfaceBinding diff --git a/src/main/daemon/wsl-session-context.ts b/src/main/daemon/wsl-session-context.ts index 3aaf6134f72..257a24c134f 100644 --- a/src/main/daemon/wsl-session-context.ts +++ b/src/main/daemon/wsl-session-context.ts @@ -2,7 +2,7 @@ import { splitWorktreeIdForFilesystem } from '../../shared/worktree/id' import { isWslShellName } from '../../shared/local-windows-terminal-runtime' import { getDefaultWslDistro } from '../wsl/discovery/distro-catalog' import { parseWslPath } from '../wsl/filesystem/unc-path-access' -import { parsePtySessionId } from '../../shared/pty-session-id-format' +import { parsePtySessionId } from '../../shared/terminal/pty/lifecycle/pty-session-id-format' import { parseWslUncPath } from '../../shared/wsl-paths' export type WslSessionContext = { diff --git a/src/main/emulator/android/android-input-commands.ts b/src/main/emulator/android/android-input-commands.ts index e0160a502df..9c831a65093 100644 --- a/src/main/emulator/android/android-input-commands.ts +++ b/src/main/emulator/android/android-input-commands.ts @@ -7,7 +7,7 @@ import { type DeviceScreenSize } from './android-input-mapping' import type { EmulatorGesturePoint } from '../emulator-gesture-sender' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' export function androidShellArgs(serial: string, command: readonly string[]): string[] { return ['-s', serial, 'shell', ...command] diff --git a/src/main/external-conversations/external-conversation.test-fixture.ts b/src/main/external-conversations/external-conversation.test-fixture.ts index c2db10893c7..39598cd071d 100644 --- a/src/main/external-conversations/external-conversation.test-fixture.ts +++ b/src/main/external-conversations/external-conversation.test-fixture.ts @@ -5,7 +5,7 @@ import type { } from '../../shared/agent-launch/contracts/agent-launch-intent' import type { ExecutionHostId } from '../../shared/execution-host' import type { Repo } from '../../shared/repo-types' -import type { PtyLivenessVerdict } from '../../shared/pty-liveness-verdict' +import type { PtyLivenessVerdict } from '../../shared/terminal/pty/lifecycle/pty-liveness-verdict' import type { RuntimeTerminalSend } from '../../shared/runtime-terminal-send-contract' import type { HostWorktreeTarget } from '../../shared/worktree/host-qualified-identity' import type { AgentPaneWorkspace } from '../agent-hooks/agent-transition-detector' diff --git a/src/main/external-editors/external-editor-launch.ts b/src/main/external-editors/external-editor-launch.ts index 6f6b18d6730..b25a2351f21 100644 --- a/src/main/external-editors/external-editor-launch.ts +++ b/src/main/external-editors/external-editor-launch.ts @@ -1,4 +1,4 @@ -import { quotePosixShellUnlessPlain } from '../../shared/shell-argument-quoting' +import { quotePosixShellUnlessPlain } from '../../shared/shell/launch/shell-argument-quoting' import { spawn, type ChildProcess } from 'node:child_process' import { spawnProcess } from '@orca/process-host' import { existsSync } from 'node:fs' diff --git a/src/main/external-editors/remote-ssh-editor-launch.ts b/src/main/external-editors/remote-ssh-editor-launch.ts index 3a5fb6f3756..66df4713450 100644 --- a/src/main/external-editors/remote-ssh-editor-launch.ts +++ b/src/main/external-editors/remote-ssh-editor-launch.ts @@ -1,5 +1,5 @@ import { getRemoteSshEditorKind } from '../../shared/remote-ssh-editor-launcher' -import type { ShellOpenExternalEditorResult } from '../../shared/shell-open-types' +import type { ShellOpenExternalEditorResult } from '../../shared/shell/opening/shell-open-types' import type { SshTarget } from '../../shared/ssh-types' import { getLauncherBaseName } from './editor-launcher-name' import { diff --git a/src/main/git/command-runner/wsl-command-resolution.ts b/src/main/git/command-runner/wsl-command-resolution.ts index d7a1e8a5b3b..0550dd2463d 100644 --- a/src/main/git/command-runner/wsl-command-resolution.ts +++ b/src/main/git/command-runner/wsl-command-resolution.ts @@ -8,7 +8,7 @@ import { buildWslLoginShellCommand, type WslCapturedLoginShellCommand } from '../../../shared/wsl-login-shell-command' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { UNTRANSLATED_GIT_OUTPUT_ENV } from '../../../shared/git/commands/git-output-locale' import type { WslGitReadEnvironment } from '../wsl-git-read-environment' import { diff --git a/src/main/git/git-network-safety-real-git.test.ts b/src/main/git/git-network-safety-real-git.test.ts index baf7ad9bae6..f902b0cb73e 100644 --- a/src/main/git/git-network-safety-real-git.test.ts +++ b/src/main/git/git-network-safety-real-git.test.ts @@ -3,7 +3,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { runProcess } from '@orca/process-host' -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' import { gitExecFileAsync, gitSpawnAfterWindowsEnvironmentReady } from './runner' let root = '' diff --git a/src/main/git/remotes/worktree-push-target-reconciliation.ts b/src/main/git/remotes/worktree-push-target-reconciliation.ts index 7767c0b113b..9287735e6da 100644 --- a/src/main/git/remotes/worktree-push-target-reconciliation.ts +++ b/src/main/git/remotes/worktree-push-target-reconciliation.ts @@ -4,7 +4,7 @@ import { gitExecFileAsync } from '../command-runner/git-exec-file' import { listWorktrees } from '../worktrees/catalog/worktree-scan-cache' import type { GitPushTarget } from '../../../shared/worktree/types' -import { WORKTREE_ID_SEPARATOR } from '../../../shared/pty-session-id-format' +import { WORKTREE_ID_SEPARATOR } from '../../../shared/terminal/pty/lifecycle/pty-session-id-format' import { worktreeIdentityKey } from '../../../shared/worktree/id' import { parseGitRemoteFetchUrls } from '../../../shared/git/remotes/git-remote-url-index' import { diff --git a/src/main/git/wsl-process-group-termination.ts b/src/main/git/wsl-process-group-termination.ts index 2a45e7439b2..0fcbe821834 100644 --- a/src/main/git/wsl-process-group-termination.ts +++ b/src/main/git/wsl-process-group-termination.ts @@ -1,7 +1,7 @@ import { randomUUID } from 'node:crypto' import type { ProcessTerminationBarrier } from '@orca/process-host/process-spec' -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' import { runWslProcess } from '../wsl/execution/wsl-runner' import { WSL_UNC_RUNNING_LEASE_MS, wslDistroForPath } from '../wsl/filesystem/wsl-unc-access-gate' import { isWslUserActFor } from '../wsl/discovery/wsl-user-act-scope' diff --git a/src/main/hermes/hook-service.test.ts b/src/main/hermes/hook-service.test.ts index e4c1b80a9d2..116eefa6d95 100644 --- a/src/main/hermes/hook-service.test.ts +++ b/src/main/hermes/hook-service.test.ts @@ -6,7 +6,7 @@ import { join } from 'node:path' import { afterEach, beforeEach, describe, expect, it } from 'vitest' import { parse } from 'yaml' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { HERMES_CLIENT_ENV_PASSTHROUGH } from './hermes-managed-plugin-source' import { HermesHookService, _internals } from './hook-service' diff --git a/src/main/ipc/agent-hooks.test.ts b/src/main/ipc/agent-hooks.test.ts index dc1aacfc23d..c0e6cbb9813 100644 --- a/src/main/ipc/agent-hooks.test.ts +++ b/src/main/ipc/agent-hooks.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type * as AgentHookServerModule from '../agent-hooks/server' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' // Renderer dismissals must evict persisted status as well as the live row. diff --git a/src/main/ipc/agent-pane-authority-ipc.ts b/src/main/ipc/agent-pane-authority-ipc.ts index 2e934457b37..7c967178b23 100644 --- a/src/main/ipc/agent-pane-authority-ipc.ts +++ b/src/main/ipc/agent-pane-authority-ipc.ts @@ -1,5 +1,5 @@ import { ipcMain } from 'electron' -import { isStablePaneId } from '../../shared/stable-pane-id' +import { isStablePaneId } from '../../shared/workspace-layout/stable-pane-id' import { agentHookServer } from '../agent-hooks/server' import { isValidPaneKey } from '../agent-hooks/server/server-status-identity' import { clearMigrationUnsupportedPtysForPaneKey } from '../agent-hooks/migration-unsupported-pty-state' diff --git a/src/main/ipc/agent-pane-retirement-ipc.test.ts b/src/main/ipc/agent-pane-retirement-ipc.test.ts index a8b883a5ff7..ab46d02fef4 100644 --- a/src/main/ipc/agent-pane-retirement-ipc.test.ts +++ b/src/main/ipc/agent-pane-retirement-ipc.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' const mocks = vi.hoisted(() => ({ handlers: new Map void>(), diff --git a/src/main/ipc/agent-status-ipc-boundary.ts b/src/main/ipc/agent-status-ipc-boundary.ts index 5a76e1725c0..4bf6107ae1a 100644 --- a/src/main/ipc/agent-status-ipc-boundary.ts +++ b/src/main/ipc/agent-status-ipc-boundary.ts @@ -4,7 +4,7 @@ import { type FleetAgentStatusEvidence, type FleetEvidenceBinding } from '../../shared/orchestration-fleet-agent-status-evidence' -import { isValidTerminalTabId } from '../../shared/terminal-tab-id' +import { isValidTerminalTabId } from '../../shared/workspace-layout/terminal-tab-id' import type { OrcaRuntimeService } from '../runtime/orca-runtime' export type AgentStatusRuntimeEnrichment = Pick< diff --git a/src/main/ipc/agent-status-row-teardown-ipc.ts b/src/main/ipc/agent-status-row-teardown-ipc.ts index 0e65dcd70c2..ab2338b0300 100644 --- a/src/main/ipc/agent-status-row-teardown-ipc.ts +++ b/src/main/ipc/agent-status-row-teardown-ipc.ts @@ -2,7 +2,7 @@ import { ipcMain } from 'electron' import { agentHookServer } from '../agent-hooks/server' import { isValidPaneKey } from '../agent-hooks/server/server-status-identity' import type { AgentStatusCacheIdentity } from '../../shared/agent-status/contracts/agent-status-ipc-payload' -import { parseLegacyNumericPaneKey } from '../../shared/stable-pane-id' +import { parseLegacyNumericPaneKey } from '../../shared/workspace-layout/stable-pane-id' import { clearMigrationUnsupportedPtysByTabPrefix, clearMigrationUnsupportedPtysForPaneKey diff --git a/src/main/ipc/local-worktree-runtime-options.test.ts b/src/main/ipc/local-worktree-runtime-options.test.ts index 47e1fcb71d2..1b3c7969603 100644 --- a/src/main/ipc/local-worktree-runtime-options.test.ts +++ b/src/main/ipc/local-worktree-runtime-options.test.ts @@ -1,5 +1,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import { WORKTREE_ID_SEPARATOR, type ParsedWorktreeId } from '../../shared/worktree/id' +import '../../shared/worktree/id' +import type { ParsedWorktreeId } from '../../shared/worktree/id' +import { WORKTREE_ID_SEPARATOR } from '../../shared/terminal/pty/lifecycle/pty-session-id-format' import type * as WorktreeIdModule from '../../shared/worktree/id' const counter = vi.hoisted(() => ({ splitCalls: 0 })) diff --git a/src/main/ipc/native-notification-delivery.ts b/src/main/ipc/native-notification-delivery.ts index 633532a1bb1..99d86e4a4d9 100644 --- a/src/main/ipc/native-notification-delivery.ts +++ b/src/main/ipc/native-notification-delivery.ts @@ -7,7 +7,7 @@ import type { import { safelyRevealWindow } from '../window/focus-existing-window' import { isBackgroundLaunch } from '../window/foreground-activation-policy' import { getRepoIdFromWorktreeId } from '../../shared/worktree/id' -import { parsePaneKey } from '../../shared/stable-pane-id' +import { parsePaneKey } from '../../shared/workspace-layout/stable-pane-id' import type { buildNotificationOptions } from './notification-options' import { getEffectiveNotificationSoundId } from './notification-sound-selection' import { macosNotificationIdentity } from './macos-notification-center' diff --git a/src/main/ipc/preflight-command-exec.ts b/src/main/ipc/preflight-command-exec.ts index b4f647a52d5..799c4f7585f 100644 --- a/src/main/ipc/preflight-command-exec.ts +++ b/src/main/ipc/preflight-command-exec.ts @@ -1,4 +1,4 @@ -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' import { execFile } from 'node:child_process' import path from 'node:path' import { homedir } from 'node:os' diff --git a/src/main/ipc/preflight-provider-command-selection.test.ts b/src/main/ipc/preflight-provider-command-selection.test.ts index 9a5ad15ddb4..cbc3dff89bb 100644 --- a/src/main/ipc/preflight-provider-command-selection.test.ts +++ b/src/main/ipc/preflight-provider-command-selection.test.ts @@ -14,7 +14,7 @@ import { execLocalPreflightCommandOrThrow, findRunnableLocalCommand } from './preflight-command-exec' -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' vi.mock('../../shared/system-cli-install-dirs', () => ({ getSystemCliInstallDirectories: (_platform: NodeJS.Platform, home: string) => [ diff --git a/src/main/ipc/preflight-runnable-local-cli.test.ts b/src/main/ipc/preflight-runnable-local-cli.test.ts index 64ea0d31398..341019332b5 100644 --- a/src/main/ipc/preflight-runnable-local-cli.test.ts +++ b/src/main/ipc/preflight-runnable-local-cli.test.ts @@ -9,7 +9,7 @@ import { isCommandAvailable, isCommandOnPath } from './preflight-command-exec' -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' const COMMAND = 'orca-22975-gh' const BROKEN_SHIM = 'echo broken-shim >&2\nexit 126\n' diff --git a/src/main/ipc/preflight-wsl-agent-detection.ts b/src/main/ipc/preflight-wsl-agent-detection.ts index 0cbb01eb89e..4f063efd042 100644 --- a/src/main/ipc/preflight-wsl-agent-detection.ts +++ b/src/main/ipc/preflight-wsl-agent-detection.ts @@ -1,4 +1,4 @@ -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' import path from 'node:path' import { buildPosixFallbackPathPrelude } from '../../shared/posix-version-manager-bin-dirs' import { buildPosixCommandPathLookupScript } from '../../shared/posix-command-path-lookup' diff --git a/src/main/ipc/pty-attach-view-joins-main-start.test.ts b/src/main/ipc/pty-attach-view-joins-main-start.test.ts index ad61c22ab47..df4f11485ba 100644 --- a/src/main/ipc/pty-attach-view-joins-main-start.test.ts +++ b/src/main/ipc/pty-attach-view-joins-main-start.test.ts @@ -10,7 +10,7 @@ import { pendingRuntimePaneCreatesByOwnerKey, makePaneSpawnReservationKey } from './pty/pane/spawn-reservation' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { agentSessionConversationView } from '../../shared/agent-session/lifecycle/agent-session-conversation-view' import { AgentSessionRecordStore } from '../runtime/agent-session/records/agent-session-record-store' diff --git a/src/main/ipc/pty/delivery/accounting.ts b/src/main/ipc/pty/delivery/accounting.ts index 31fcd6e22f9..52102e9bbd5 100644 --- a/src/main/ipc/pty/delivery/accounting.ts +++ b/src/main/ipc/pty/delivery/accounting.ts @@ -1,7 +1,7 @@ import type { PtyDeliveryWriteOff, PtyRendererDeliveryStateReport -} from '../../../../shared/pty-renderer-delivery-health' +} from '../../../../shared/terminal/pty/diagnostics/pty-renderer-delivery-health' import { tryGetProviderForPty } from '../provider/registry' import { mainDeliveryBreadcrumbs } from './debug' import { diff --git a/src/main/ipc/pty/delivery/debug-snapshot.ts b/src/main/ipc/pty/delivery/debug-snapshot.ts index 687cf6c1a5a..84fbdbb7795 100644 --- a/src/main/ipc/pty/delivery/debug-snapshot.ts +++ b/src/main/ipc/pty/delivery/debug-snapshot.ts @@ -3,7 +3,7 @@ import { type PtyMainDeliveryDiagnostics, type PtyPerPtyDeliveryDiagnostics, redactPtyIdForDiagnostics -} from '../../../../shared/pty-delivery-diagnostics' +} from '../../../../shared/terminal/pty/diagnostics/pty-delivery-diagnostics' import { getHiddenRendererPtyDeliveryDebug, getHiddenRendererPtyIds, diff --git a/src/main/ipc/pty/delivery/debug.ts b/src/main/ipc/pty/delivery/debug.ts index f3ada8efc61..264ae4d77b5 100644 --- a/src/main/ipc/pty/delivery/debug.ts +++ b/src/main/ipc/pty/delivery/debug.ts @@ -3,7 +3,7 @@ import { type PtyMainDeliveryDiagnostics, EMPTY_PTY_MAIN_DELIVERY_DIAGNOSTICS, createPtyDeliveryBreadcrumbRing -} from '../../../../shared/pty-delivery-diagnostics' +} from '../../../../shared/terminal/pty/diagnostics/pty-delivery-diagnostics' export type PtyRendererDeliveryDebugSnapshot = { pendingPtyCount: number diff --git a/src/main/ipc/pty/delivery/payload.ts b/src/main/ipc/pty/delivery/payload.ts index 4d09f53ac3f..23c3338e070 100644 --- a/src/main/ipc/pty/delivery/payload.ts +++ b/src/main/ipc/pty/delivery/payload.ts @@ -1,4 +1,4 @@ -import { redactPtyIdForDiagnostics } from '../../../../shared/pty-delivery-diagnostics' +import { redactPtyIdForDiagnostics } from '../../../../shared/terminal/pty/diagnostics/pty-delivery-diagnostics' import type { PtyModelRestoreReason } from '../../../../shared/terminal/replay/pty-model-restore-marker' import { mainDeliveryBreadcrumbs } from './debug' import { recordPtyRendererDeliveryPressure } from './accounting' diff --git a/src/main/ipc/pty/delivery/pending.ts b/src/main/ipc/pty/delivery/pending.ts index 405f66b6870..8d5efd5ea74 100644 --- a/src/main/ipc/pty/delivery/pending.ts +++ b/src/main/ipc/pty/delivery/pending.ts @@ -8,7 +8,7 @@ import { INITIAL_SYNCHRONIZED_OUTPUT_LATCH_STATE, advanceDroppedSynchronizedOutputLatch } from '../../../../shared/terminal/protocol/escape/terminal-synchronized-output-scan' -import { redactPtyIdForDiagnostics } from '../../../../shared/pty-delivery-diagnostics' +import { redactPtyIdForDiagnostics } from '../../../../shared/terminal/pty/diagnostics/pty-delivery-diagnostics' import { recordCrashBreadcrumb } from '../../../crash-reporting/crash-breadcrumb-store' import { terminalOutputBacklogCapChars } from '../../../../shared/terminal/replay/terminal-scrollback-policy' import { isHiddenPtyDeliveryGateEnabled } from './pty-hidden-delivery-gate' diff --git a/src/main/ipc/pty/delivery/pty-ipc-hidden-delivery-gate.test.ts b/src/main/ipc/pty/delivery/pty-ipc-hidden-delivery-gate.test.ts index 930545c2910..25397d47f68 100644 --- a/src/main/ipc/pty/delivery/pty-ipc-hidden-delivery-gate.test.ts +++ b/src/main/ipc/pty/delivery/pty-ipc-hidden-delivery-gate.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it, vi } from 'vitest' import { spawnMock } from '../pty-ipc-mock-registry' import { setupPtyIpcSuite } from '../pty-ipc-test-harness' -import { redactPtyIdForDiagnostics } from '../../../../shared/pty-delivery-diagnostics' +import { redactPtyIdForDiagnostics } from '../../../../shared/terminal/pty/diagnostics/pty-delivery-diagnostics' import { registerPtyHandlers } from '../register-handlers' import { getPtyRendererDeliveryDebugSnapshot } from './debug' diff --git a/src/main/ipc/pty/host-env/assembly.ts b/src/main/ipc/pty/host-env/assembly.ts index e642c2abc20..7c9e2af8a00 100644 --- a/src/main/ipc/pty/host-env/assembly.ts +++ b/src/main/ipc/pty/host-env/assembly.ts @@ -5,7 +5,7 @@ import { detectExplicitPiAgentKindFromCommand, isPiCompatibleAgentType } from '../../../../shared/pi-agent-kind' -import { applyTerminalGitCredentialPromptGuard } from '../../../../shared/terminal-git-credential-guard' +import { applyTerminalGitCredentialPromptGuard } from '../../../../shared/shell/launch/terminal-git-credential-guard' import { ensureOpenCodeStartupPromptForLaunch } from '../../../opencode/opencode-startup-prompt-installer' import { mimoCodeHookService } from '../../../mimo/hook-service' import { agentHookServer } from '../../../agent-hooks/server' diff --git a/src/main/ipc/pty/host-env/saved-resume-admission.ts b/src/main/ipc/pty/host-env/saved-resume-admission.ts index 1df8f5d6fc0..e69fa858695 100644 --- a/src/main/ipc/pty/host-env/saved-resume-admission.ts +++ b/src/main/ipc/pty/host-env/saved-resume-admission.ts @@ -17,7 +17,7 @@ import { } from '../../../native-chat/agent-session-wire/structured-provider-session-ownership' import { agentHookServer } from '../../../agent-hooks/server' import { LOCAL_EXECUTION_HOST_ID, type ExecutionHostId } from '../../../../shared/execution-host' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import { keysMayMatch, terminalConversationKey diff --git a/src/main/ipc/pty/host-env/spawn-cwd.ts b/src/main/ipc/pty/host-env/spawn-cwd.ts index 03c47afdaa3..bd167c57cb7 100644 --- a/src/main/ipc/pty/host-env/spawn-cwd.ts +++ b/src/main/ipc/pty/host-env/spawn-cwd.ts @@ -11,7 +11,7 @@ import { isWslUncPath } from '../../../../shared/wsl-paths' import { resolveTerminalStartupCwdForWorkspace, type TerminalStartupCwdMissingDirFallback -} from '../../../../shared/terminal-startup-cwd' +} from '../../../../shared/shell/launch/terminal-startup-cwd' import { assertFolderWorkspacePathUsable, getFolderWorkspacePathStatus, diff --git a/src/main/ipc/pty/ipc/closed-pane-spawn-refusal.test.ts b/src/main/ipc/pty/ipc/closed-pane-spawn-refusal.test.ts index 674654887d0..8194dfe6e3b 100644 --- a/src/main/ipc/pty/ipc/closed-pane-spawn-refusal.test.ts +++ b/src/main/ipc/pty/ipc/closed-pane-spawn-refusal.test.ts @@ -1,6 +1,6 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import { getDefaultWorkspaceSession } from '../../../../shared/constants' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import type { Store } from '../../../persistence/loading-store/store' import { _resetClosedPaneFencesForTests, diff --git a/src/main/ipc/pty/ipc/inspect.ts b/src/main/ipc/pty/ipc/inspect.ts index 5ab91157d1a..674ed0176d2 100644 --- a/src/main/ipc/pty/ipc/inspect.ts +++ b/src/main/ipc/pty/ipc/inspect.ts @@ -1,7 +1,7 @@ import { isRemoteRuntimePtyId } from '../../../../shared/remote-runtime/remote-runtime-pty-id' import { getPtyIpc } from '../pty-host-bindings' import { inspectPtyProviderProcessForRenderer } from '../../../providers/pty-process-inspection' -import { clientOnlyUnverifiableInspection } from '../../../../shared/terminal-process-inspection' +import { clientOnlyUnverifiableInspection } from '../../../../shared/terminal/pty/lifecycle/terminal-process-inspection' import { getProviderForPty, hasPtyProviderForInspection, diff --git a/src/main/ipc/pty/ipc/leaf-move.ts b/src/main/ipc/pty/ipc/leaf-move.ts index 03bf63ee829..e386b873120 100644 --- a/src/main/ipc/pty/ipc/leaf-move.ts +++ b/src/main/ipc/pty/ipc/leaf-move.ts @@ -6,7 +6,7 @@ import { isTerminalLeafMoveRequest, type TerminalLeafMoveRequest, type TerminalLeafMoveResult -} from '../../../../shared/terminal-leaf-move' +} from '../../../../shared/workspace-layout/terminal-leaf-move' /** Durable move first; agent-status and orchestration keys follow only a committed move. */ export async function commitLeafMoveAndRekey( diff --git a/src/main/ipc/pty/ipc/renderer-kill.ts b/src/main/ipc/pty/ipc/renderer-kill.ts index eeb81fa69c2..275e3123c4b 100644 --- a/src/main/ipc/pty/ipc/renderer-kill.ts +++ b/src/main/ipc/pty/ipc/renderer-kill.ts @@ -1,7 +1,7 @@ import type { PtyFencedTerminationRequest, PtyFencedTerminationOutcome -} from '../../../../shared/pty-fenced-termination' +} from '../../../../shared/terminal/pty/lifecycle/pty-fenced-termination' import { LOCAL_EXECUTION_HOST_ID } from '../../../../shared/execution-host' import { isRemoteRuntimePtyId } from '../../../../shared/remote-runtime/remote-runtime-pty-id' import { getPtyIpc } from '../pty-host-bindings' @@ -9,7 +9,7 @@ import type { Store } from '../../../persistence/loading-store/store' import type { OrcaRuntimeService } from '../../../runtime/orca-runtime' import type { TerminalIntentionalStopKind } from '../../../runtime/terminal-intentional-stops' import type { IPtyProvider } from '../../../providers/pty-provider-contract' -import { SSH_PROVIDER_UNREGISTERED_REASON } from '../../../../shared/pty-liveness-verdict' +import { SSH_PROVIDER_UNREGISTERED_REASON } from '../../../../shared/terminal/pty/lifecycle/pty-liveness-verdict' import { ptyIncarnationById } from '../provider/ownership-state' import { getProviderForPty, diff --git a/src/main/ipc/pty/ipc/resize-visibility.ts b/src/main/ipc/pty/ipc/resize-visibility.ts index 0203c5d3688..13808808d33 100644 --- a/src/main/ipc/pty/ipc/resize-visibility.ts +++ b/src/main/ipc/pty/ipc/resize-visibility.ts @@ -3,8 +3,8 @@ import type { PtyDeliveryWriteOff, PtyRendererDeliveryHealthReply, PtyRendererDeliveryStateReport -} from '../../../../shared/pty-renderer-delivery-health' -import { redactPtyIdForDiagnostics } from '../../../../shared/pty-delivery-diagnostics' +} from '../../../../shared/terminal/pty/diagnostics/pty-renderer-delivery-health' +import { redactPtyIdForDiagnostics } from '../../../../shared/terminal/pty/diagnostics/pty-delivery-diagnostics' import { installTerminalViewAttributesIpc } from './terminal-view-attributes-ipc' import { consumeHiddenRendererPtyDropMemory, diff --git a/src/main/ipc/pty/ipc/session-listing.ts b/src/main/ipc/pty/ipc/session-listing.ts index c83cbf93a7d..83a099fa3d9 100644 --- a/src/main/ipc/pty/ipc/session-listing.ts +++ b/src/main/ipc/pty/ipc/session-listing.ts @@ -9,7 +9,7 @@ import { ptySessionIdentity, type PtyListedSession, type PtySessionListScope -} from '../../../../shared/pty-listed-session' +} from '../../../../shared/terminal/pty/lifecycle/pty-listed-session' import { ptyOwnership } from '../provider/ownership-state' import { getProvider, registeredPtyProviders, type ResolvedPtyHost } from '../provider/registry' import { diff --git a/src/main/ipc/pty/ipc/spawn-agent-launch-end.ts b/src/main/ipc/pty/ipc/spawn-agent-launch-end.ts index 9ee747cefeb..a577000ddc0 100644 --- a/src/main/ipc/pty/ipc/spawn-agent-launch-end.ts +++ b/src/main/ipc/pty/ipc/spawn-agent-launch-end.ts @@ -1,7 +1,7 @@ import { readTerminalStartFailure, type TerminalStartFailure -} from '../../../../shared/terminal-start-failure' +} from '../../../../shared/terminal/pty/lifecycle/terminal-start-failure' import { AGENT_LAUNCH_PANE_REFUSED_CODE, type AgentLaunchPaneAddress, diff --git a/src/main/ipc/pty/ipc/spawn-agent-launch.ts b/src/main/ipc/pty/ipc/spawn-agent-launch.ts index 836c3642f0d..b138db1b9f9 100644 --- a/src/main/ipc/pty/ipc/spawn-agent-launch.ts +++ b/src/main/ipc/pty/ipc/spawn-agent-launch.ts @@ -1,8 +1,8 @@ import { randomUUID } from 'node:crypto' import { AgentLaunch } from '../../../../shared/rpc-contract/agent-launch-params' import { toAgentLaunchPreferences } from '../../../../shared/agent-launch/choices/agent-launch-preferences' -import { hasClosedTerminalTabRecord } from '../../../../shared/closed-terminal-tab-tombstones' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { hasClosedTerminalTabRecord } from '../../../../shared/workspace-layout/closed-terminal-tab-tombstones' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { AgentLaunchTabClosedError } from '../../../../shared/agent-launch/contracts/agent-launch-tab-closed' import { trackRunningAgentLaunchPane } from '../../../agent-launch/agent-launch-pane-attachment' import { agentLaunchTokenFor } from '../../../agent-launch/agent-launch-token' diff --git a/src/main/ipc/pty/ipc/spawn-commit.ts b/src/main/ipc/pty/ipc/spawn-commit.ts index 948d5e5a7c5..fbf80bc89e9 100644 --- a/src/main/ipc/pty/ipc/spawn-commit.ts +++ b/src/main/ipc/pty/ipc/spawn-commit.ts @@ -1,4 +1,6 @@ -import { provenSpawnResponse, type PtySpawnOutcome } from '../spawn-outcome' +import '../spawn-outcome' +import type { PtySpawnOutcome } from '../spawn-outcome' +import { provenSpawnResponse } from '../../../../shared/terminal/pty/lifecycle/terminal-spawn-response' import { admitRendererAgentLaunchAuthority } from '../pane/launch-authority' import { resolveLaunchedAgent } from '../../../runtime/runtime-agent-launch-resolution' import type { PtyIpcSpawnState } from './spawn-state' @@ -6,7 +8,7 @@ import { startupCwdFallbackOutcome } from '../spawn-startup-target' import { commitPtySpawn } from '../spawn-commit-assembly' import type { PtySpawnPaneBinding } from '../spawn-commit-binding' import { spawnCommitBindingOrigin } from '../../../persistence/loading-store/pty-binding-span' -import { parseTerminalPanePlacement } from '../../../../shared/terminal-pane-placement' +import { parseTerminalPanePlacement } from '../../../../shared/workspace-layout/terminal-pane-placement' import { commitPtyWithOpenCodePromptIntent } from '../../../opencode/opencode-startup-prompt-owner' import { resumeSpawnRefusal, savedResumeResult } from '../host-env/saved-resume-admission' diff --git a/src/main/ipc/pty/ipc/spawn-env.ts b/src/main/ipc/pty/ipc/spawn-env.ts index 338ae971fe6..034bc8359e6 100644 --- a/src/main/ipc/pty/ipc/spawn-env.ts +++ b/src/main/ipc/pty/ipc/spawn-env.ts @@ -2,9 +2,9 @@ import { isTerminalLeafId, makePaneKey, parseLegacyNumericPaneKey -} from '../../../../shared/stable-pane-id' +} from '../../../../shared/workspace-layout/stable-pane-id' import { isOpaqueRemintedPaneKey } from '../../../../shared/pane-key-alias' -import { isValidTerminalTabId } from '../../../../shared/terminal-tab-id' +import { isValidTerminalTabId } from '../../../../shared/workspace-layout/terminal-tab-id' import { LocalPtyProvider } from '../../../providers/local-pty/local-pty-provider' import { resolvePathEnvKey } from '../../../pty/environment/windows-path-segment-merge' import { routesFreshSpawnsToLocalProvider } from '../host-env/fresh-spawn-routing' diff --git a/src/main/ipc/pty/ipc/spawn-types.ts b/src/main/ipc/pty/ipc/spawn-types.ts index 9fac7a18f55..a61dafc9073 100644 --- a/src/main/ipc/pty/ipc/spawn-types.ts +++ b/src/main/ipc/pty/ipc/spawn-types.ts @@ -9,7 +9,7 @@ import type { import type { ProjectExecutionRuntimeResolution } from '../../../../shared/project-execution-runtime' import type { StartupCommandDelivery } from '../../../../shared/agent-launch/startup/codex-startup-delivery' import type { GlobalSettings } from '../../../../shared/global-settings-types' -import type { TerminalStartupCwdMissingDirFallback } from '../../../../shared/terminal-startup-cwd' +import type { TerminalStartupCwdMissingDirFallback } from '../../../../shared/shell/launch/terminal-startup-cwd' import type { OrcaRuntimeService } from '../../../runtime/orca-runtime' import type { Store } from '../../../persistence/loading-store/store' import type { PtySpawnResult } from '../../../providers/pty-provider-contract' diff --git a/src/main/ipc/pty/ipc/spawn.ts b/src/main/ipc/pty/ipc/spawn.ts index 3a1da1100a5..733fca75e9d 100644 --- a/src/main/ipc/pty/ipc/spawn.ts +++ b/src/main/ipc/pty/ipc/spawn.ts @@ -1,4 +1,4 @@ -import { formatTerminalStartFailure } from '../../../../shared/terminal-start-failure' +import { formatTerminalStartFailure } from '../../../../shared/terminal/pty/lifecycle/terminal-start-failure' import { getPtyIpc } from '../pty-host-bindings' import { runPtyIpcSpawn } from './spawn-run' import type { PtySpawnIpcArgs, PtySpawnIpcDeps } from './spawn-types' diff --git a/src/main/ipc/pty/ipc/write-input-user-input.test.ts b/src/main/ipc/pty/ipc/write-input-user-input.test.ts index 4e80eb17ea7..ddceb0b20de 100644 --- a/src/main/ipc/pty/ipc/write-input-user-input.test.ts +++ b/src/main/ipc/pty/ipc/write-input-user-input.test.ts @@ -8,7 +8,7 @@ import { writeRefused, writeUnverifiable, type WriteSettlement -} from '../../../../shared/pty-write-settlement' +} from '../../../../shared/terminal/pty/lifecycle/pty-write-settlement' const PTY_ID = 'pty-user-input' diff --git a/src/main/ipc/pty/ipc/write-input.ts b/src/main/ipc/pty/ipc/write-input.ts index 65dc993c703..c8b94f091c6 100644 --- a/src/main/ipc/pty/ipc/write-input.ts +++ b/src/main/ipc/pty/ipc/write-input.ts @@ -13,7 +13,10 @@ import { tryGetProviderForPty } from '../provider/registry' import { LOCAL_EXECUTION_HOST_ID } from '../../../../shared/execution-host' import type { TerminalInputKind } from '../../../../shared/terminal/input/terminal-input-kind' import { interactiveOutputCharsByPty, lastInputAtByPty } from '../delivery/visibility-state' -import { isSettledWrite, type WriteSettlement } from '../../../../shared/pty-write-settlement' +import { + isSettledWrite, + type WriteSettlement +} from '../../../../shared/terminal/pty/lifecycle/pty-write-settlement' export function isMainWindowPtyIpcEvent( event: IpcMainEvent | IpcMainInvokeEvent, diff --git a/src/main/ipc/pty/pane/absent-pane-owner.ts b/src/main/ipc/pty/pane/absent-pane-owner.ts index 2698dc6a4cc..ed117c2430b 100644 --- a/src/main/ipc/pty/pane/absent-pane-owner.ts +++ b/src/main/ipc/pty/pane/absent-pane-owner.ts @@ -1,5 +1,5 @@ import { toSshExecutionHostId } from '../../../../shared/execution-host' -import { UNVERIFIED_PROCESS_EXIT_CODE } from '../../../../shared/terminal-exit-cause' +import { UNVERIFIED_PROCESS_EXIT_CODE } from '../../../../shared/terminal/pty/lifecycle/terminal-exit-cause' import type { Store } from '../../../persistence/loading-store/store' import type { OrcaRuntimeService } from '../../../runtime/orca-runtime' import { ptyIncarnationById, ptyOwnership } from '../provider/ownership-state' diff --git a/src/main/ipc/pty/pane/adopt-stable.ts b/src/main/ipc/pty/pane/adopt-stable.ts index 3c8f76631ff..cc4a57b15a2 100644 --- a/src/main/ipc/pty/pane/adopt-stable.ts +++ b/src/main/ipc/pty/pane/adopt-stable.ts @@ -1,6 +1,6 @@ import type { PtySpawnOutcome } from '../spawn-outcome' import { isClosedPaneFenced } from '../../../persistence/terminal-topology/closed-pane-binding-fence' -import { hasClosedTerminalTabRecord } from '../../../../shared/closed-terminal-tab-tombstones' +import { hasClosedTerminalTabRecord } from '../../../../shared/workspace-layout/closed-terminal-tab-tombstones' import { toSshExecutionHostId, getConnectionExecutionHostId @@ -9,7 +9,7 @@ import { ptyIncarnationById } from '../provider/ownership-state' import { reconcilePaneOwner } from './stable-pane-attach' import type { OrcaRuntimeService } from '../../../runtime/orca-runtime' import type { Store } from '../../../persistence/loading-store/store' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { getProvider } from '../provider/registry' import { joinPaneSpawn, diff --git a/src/main/ipc/pty/pane/agent-launch-pane-evidence.ts b/src/main/ipc/pty/pane/agent-launch-pane-evidence.ts index 557c2bff82f..b0a79e87f36 100644 --- a/src/main/ipc/pty/pane/agent-launch-pane-evidence.ts +++ b/src/main/ipc/pty/pane/agent-launch-pane-evidence.ts @@ -1,4 +1,4 @@ -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import type { IsAgentLaunchPaneLive } from '../../../agent-launch/agent-launch-pane-attachment' import type { Store } from '../../../persistence/loading-store/store' import type { OrcaRuntimeService } from '../../../runtime/orca-runtime' diff --git a/src/main/ipc/pty/pane/agent-session-owners.ts b/src/main/ipc/pty/pane/agent-session-owners.ts index ce178662bed..9e50410df8e 100644 --- a/src/main/ipc/pty/pane/agent-session-owners.ts +++ b/src/main/ipc/pty/pane/agent-session-owners.ts @@ -1,10 +1,10 @@ import { classifyTerminalCreationFailure, terminalExitError -} from '../../../../shared/terminal-start-failure' +} from '../../../../shared/terminal/pty/lifecycle/terminal-start-failure' import type { AgentSessionOwnerBinding } from '../../../../shared/agent-session/agent-session-host-authority' import { ClaimedAgentPtyOwnerRegistry } from '../../../../shared/claimed-agent-pty-owner' -import { isPtyIncarnationId } from '../../../../shared/pty-incarnation' +import { isPtyIncarnationId } from '../../../../shared/terminal/pty/lifecycle/pty-incarnation' import type { OrcaRuntimeService } from '../../../runtime/orca-runtime' import type { PtySpawnResult } from '../../../providers/pty-provider-contract' import { ptyIncarnationById, ptyOwnership } from '../provider/ownership-state' diff --git a/src/main/ipc/pty/pane/complete-pane-adoption.ts b/src/main/ipc/pty/pane/complete-pane-adoption.ts index 7650e68776e..e3734403dd9 100644 --- a/src/main/ipc/pty/pane/complete-pane-adoption.ts +++ b/src/main/ipc/pty/pane/complete-pane-adoption.ts @@ -1,13 +1,17 @@ -import { readTerminalStartFailure } from '../../../../shared/terminal-start-failure' +import { readTerminalStartFailure } from '../../../../shared/terminal/pty/lifecycle/terminal-start-failure' import { isNativeWindowsLocalPtySpawn, markNativeWindowsConptyPty } from '../../../runtime/terminal-model-query-authority' import { registerPty } from '../../../memory/pty-registry' -import { createTerminalSessionStateSaveFailureMessage } from '../../../../shared/terminal-session-state-save-failure' -import { makePaneKey } from '../../../../shared/stable-pane-id' -import type { StablePaneSpawnContext, StablePaneOwner } from './stable-owner' -import { persistAdmittedStablePaneBinding } from './stable-owner' +import { createTerminalSessionStateSaveFailureMessage } from '../../../../shared/workspace-session/terminal-session-state-save-failure' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' + +import { + type StablePaneSpawnContext, + type StablePaneOwner, + persistAdmittedStablePaneBinding +} from './stable-owner' import { attemptStablePaneAttach } from './stable-pane-attach' import { PaneOwnerContentionError } from './pane-spawn-operation' import { admitPtySpawnOwnership, registerPersistedPtySpawn } from './spawn-registration' @@ -19,7 +23,8 @@ import { seedHeadlessTerminalFromSpawnResult } from './terminal-spawn-restore' import { admitProviderReattachLaunchIdentity } from './launch-authority' import { ensureWslHookRelayForReattach } from '../../../agent-hooks/wsl-hook-relay-reattach' import { wslBridgePtyPresence } from '../../../agent-hooks/wsl-bridge-pty-presence' -import { provenSpawnResponse } from '../spawn-outcome' +import '../spawn-outcome' +import { provenSpawnResponse } from '../../../../shared/terminal/pty/lifecycle/terminal-spawn-response' import { ptySizes } from '../delivery/visibility-state' import { resolveCommittedPtySize, diff --git a/src/main/ipc/pty/pane/join-pane-spawn.test.ts b/src/main/ipc/pty/pane/join-pane-spawn.test.ts index ad162519a94..4c2bc8008dc 100644 --- a/src/main/ipc/pty/pane/join-pane-spawn.test.ts +++ b/src/main/ipc/pty/pane/join-pane-spawn.test.ts @@ -1,5 +1,5 @@ import { afterEach, expect, it } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { WORKTREE_TERMINALS_SLEEPING_ERROR } from '../../../runtime/worktree-terminals-sleeping-error' import { adoptStablePane } from './adopt-stable' import { diff --git a/src/main/ipc/pty/pane/key-state.ts b/src/main/ipc/pty/pane/key-state.ts index 129105ac04a..17c441dddb3 100644 --- a/src/main/ipc/pty/pane/key-state.ts +++ b/src/main/ipc/pty/pane/key-state.ts @@ -1,4 +1,4 @@ -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' // Retain spawn-time pane keys so teardown can release agent-hook caches. export const ptyPaneKey = new Map() diff --git a/src/main/ipc/pty/pane/launch-authority.ts b/src/main/ipc/pty/pane/launch-authority.ts index f3cd89bf0d0..676c7319d0a 100644 --- a/src/main/ipc/pty/pane/launch-authority.ts +++ b/src/main/ipc/pty/pane/launch-authority.ts @@ -1,7 +1,7 @@ import type { TuiAgent } from '../../../../shared/agent-launch/catalog/tui-agent' import { isTuiAgent } from '../../../../shared/agent-launch/catalog/tui-agent-config' import type { SleepingAgentLaunchConfig } from '../../../../shared/agent-session/lifecycle/agent-session-resume' -import { isPtyIncarnationId } from '../../../../shared/pty-incarnation' +import { isPtyIncarnationId } from '../../../../shared/terminal/pty/lifecycle/pty-incarnation' const AGENT_LAUNCH_TOKEN_MAX_LENGTH = 128 diff --git a/src/main/ipc/pty/pane/pane-owner-replacement.ts b/src/main/ipc/pty/pane/pane-owner-replacement.ts index 2c20aeac7c8..9316baa3471 100644 --- a/src/main/ipc/pty/pane/pane-owner-replacement.ts +++ b/src/main/ipc/pty/pane/pane-owner-replacement.ts @@ -1,5 +1,5 @@ import { toSshExecutionHostId } from '../../../../shared/execution-host' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import type { Store } from '../../../persistence/loading-store/store' import type { PersistPtyBindingArgs } from '../../../persistence/loading-store/pty-binding-persistence' import type { OrcaRuntimeService } from '../../../runtime/orca-runtime' diff --git a/src/main/ipc/pty/pane/pane-spawn-operation.ts b/src/main/ipc/pty/pane/pane-spawn-operation.ts index 5a15a3fa848..886211e7ed5 100644 --- a/src/main/ipc/pty/pane/pane-spawn-operation.ts +++ b/src/main/ipc/pty/pane/pane-spawn-operation.ts @@ -1,4 +1,4 @@ -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { toSshExecutionHostId } from '../../../../shared/execution-host' import type { Store } from '../../../persistence/loading-store/store' import { ptyBindingIsRefused } from '../../../persistence/loading-store/pty-binding-refusals' diff --git a/src/main/ipc/pty/pane/serializer-document-lifetime.test.ts b/src/main/ipc/pty/pane/serializer-document-lifetime.test.ts index a1b7bd40dae..238155e44c5 100644 --- a/src/main/ipc/pty/pane/serializer-document-lifetime.test.ts +++ b/src/main/ipc/pty/pane/serializer-document-lifetime.test.ts @@ -3,7 +3,7 @@ import type { WebContents } from 'electron' import { Terminal } from '@xterm/headless' import { afterEach, describe, expect, it } from 'vitest' import type { OrcaRuntimeService } from '../../../runtime/orca-runtime' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { declarePendingPaneSerializer, hasPendingRendererSerializerForPaneKey, diff --git a/src/main/ipc/pty/pane/spawn-registration.ts b/src/main/ipc/pty/pane/spawn-registration.ts index 76d88fd4091..39cc3f9dcae 100644 --- a/src/main/ipc/pty/pane/spawn-registration.ts +++ b/src/main/ipc/pty/pane/spawn-registration.ts @@ -1,4 +1,4 @@ -import { classifyTerminalCreationFailure } from '../../../../shared/terminal-start-failure' +import { classifyTerminalCreationFailure } from '../../../../shared/terminal/pty/lifecycle/terminal-start-failure' import type { PtyRegistrationClaim } from '../../../runtime/runtime-terminal-state-records' import { PaneOwnerContentionError } from './pane-spawn-operation' import type { Store } from '../../../persistence/loading-store/store' diff --git a/src/main/ipc/pty/pane/stable-owner.ts b/src/main/ipc/pty/pane/stable-owner.ts index 7e770451101..26bdca96c1d 100644 --- a/src/main/ipc/pty/pane/stable-owner.ts +++ b/src/main/ipc/pty/pane/stable-owner.ts @@ -2,7 +2,7 @@ import { persistFreshPaneBinding } from '../spawn-commit-binding' import { rollbackWorkspaceSessionAfterFailedAsyncWrite } from '../../../persistence/restoring-sessions/workspace-session-write-rollback' import { cloneWorkspaceSessionState } from '../../../persistence/restoring-sessions/session-owner-fields' import { toSshExecutionHostId } from '../../../../shared/execution-host' -import { makePaneKey, parsePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey, parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import type { Store } from '../../../persistence/loading-store/store' import { retireTerminalSurfaceFromPersistence } from '../../../runtime/mobile-session-terminal-persistence-retirement' import type { OrcaRuntimeService } from '../../../runtime/orca-runtime' diff --git a/src/main/ipc/pty/pane/stable-pane-absence-death-certificate.test.ts b/src/main/ipc/pty/pane/stable-pane-absence-death-certificate.test.ts index 6df9128fdcb..6acb4f634c8 100644 --- a/src/main/ipc/pty/pane/stable-pane-absence-death-certificate.test.ts +++ b/src/main/ipc/pty/pane/stable-pane-absence-death-certificate.test.ts @@ -2,7 +2,7 @@ import { describe, expect, it, vi } from 'vitest' import { withDurableRuntimeStore } from '../../../runtime/runtime-durable-store-fixture' import { getDefaultWorkspaceSession } from '../../../../shared/constants' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import { SessionNotFoundError } from '../../../daemon/daemon-errors' import type { Store } from '../../../persistence/loading-store/store' import type { IPtyProvider } from '../../../providers/pty-provider-contract' diff --git a/src/main/ipc/pty/pane/stable-pane-absence-respawn.test.ts b/src/main/ipc/pty/pane/stable-pane-absence-respawn.test.ts index 08656dba49d..32b630f3187 100644 --- a/src/main/ipc/pty/pane/stable-pane-absence-respawn.test.ts +++ b/src/main/ipc/pty/pane/stable-pane-absence-respawn.test.ts @@ -1,6 +1,6 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { createPaneBindingStore } from '../pty-launch-race-test-fixture' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import { SessionNotFoundError, TerminalSessionOwnerUnverifiedError diff --git a/src/main/ipc/pty/provider/ownership-state.ts b/src/main/ipc/pty/provider/ownership-state.ts index 3697e9cbabd..19fa40c8c9c 100644 --- a/src/main/ipc/pty/provider/ownership-state.ts +++ b/src/main/ipc/pty/provider/ownership-state.ts @@ -1,4 +1,4 @@ -import { isPtyIncarnationId } from '../../../../shared/pty-incarnation' +import { isPtyIncarnationId } from '../../../../shared/terminal/pty/lifecycle/pty-incarnation' import { LOCAL_EXECUTION_HOST_ID, toSshExecutionHostId, diff --git a/src/main/ipc/pty/provider/registry.ts b/src/main/ipc/pty/provider/registry.ts index 5e0f6e840e3..23bdde3af13 100644 --- a/src/main/ipc/pty/provider/registry.ts +++ b/src/main/ipc/pty/provider/registry.ts @@ -3,14 +3,14 @@ import type { IPtyProvider } from '../../../providers/pty-provider-contract' import { parseAppSshPtyId, toAppSshPtyId, toRelaySshPtyId } from '../../../providers/ssh-pty-id' import { ptyOwnership } from './ownership-state' import type { TerminalOscColorQueryReplyColors } from '../../../../shared/terminal/protocol/queries/terminal-osc-color-reply' -import { colorQueryReplyColorsEqual } from '../../../../shared/pty-owner-color-query-colors' +import { colorQueryReplyColorsEqual } from '../../../../shared/terminal/pty/ingress/pty-owner-color-query-colors' import { getSshTargetIdForExecutionHost, LOCAL_EXECUTION_HOST_ID, toSshExecutionHostId, type ExecutionHostId } from '../../../../shared/execution-host' -import { getPtyExecutionHost } from '../../../../shared/terminal-execution-host' +import { getPtyExecutionHost } from '../../../../shared/terminal/pty/lifecycle/terminal-execution-host' export let localProvider: IPtyProvider = new LocalPtyProvider() let colorQueryReplyColors: TerminalOscColorQueryReplyColors | null = null diff --git a/src/main/ipc/pty/pty-agent-launch-pane-attach.test.ts b/src/main/ipc/pty/pty-agent-launch-pane-attach.test.ts index 185c4e36370..262cb6f3d48 100644 --- a/src/main/ipc/pty/pty-agent-launch-pane-attach.test.ts +++ b/src/main/ipc/pty/pty-agent-launch-pane-attach.test.ts @@ -2,7 +2,7 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import { setupPtyIpcSuite } from './pty-ipc-test-harness' import { withDurableRuntimeStore } from '../../runtime/runtime-durable-store-fixture' import { SessionNotFoundError } from '../../daemon/daemon-errors' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { registerPtyHandlers } from './register-handlers' import { setLocalPtyProvider } from './provider/registry' import { @@ -16,7 +16,7 @@ import { OrcaRuntimeService } from '../../runtime/orca-runtime' import { formatTerminalStartFailure, terminalStartError -} from '../../../shared/terminal-start-failure' +} from '../../../shared/terminal/pty/lifecycle/terminal-start-failure' vi.mock('electron', () => import('./pty-ipc-mock-registry').then((m) => m.electronModuleMock())) vi.mock('fs', () => import('./pty-ipc-mock-registry').then((m) => m.fsModuleMock())) diff --git a/src/main/ipc/pty/pty-closed-pane-spawn-refusal.test.ts b/src/main/ipc/pty/pty-closed-pane-spawn-refusal.test.ts index 580acfe0d07..7022d13def6 100644 --- a/src/main/ipc/pty/pty-closed-pane-spawn-refusal.test.ts +++ b/src/main/ipc/pty/pty-closed-pane-spawn-refusal.test.ts @@ -1,7 +1,7 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import { getDefaultWorkspaceSession } from '../../../shared/constants' import { LOCAL_EXECUTION_HOST_ID } from '../../../shared/execution-host' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { _resetClosedPaneFencesForTests, fencedIfLayoutOwner, diff --git a/src/main/ipc/pty/pty-controller-spawn-admission.test.ts b/src/main/ipc/pty/pty-controller-spawn-admission.test.ts index e7938628f22..4d74473e73e 100644 --- a/src/main/ipc/pty/pty-controller-spawn-admission.test.ts +++ b/src/main/ipc/pty/pty-controller-spawn-admission.test.ts @@ -11,7 +11,7 @@ import { registerPtyHandlers } from './register-handlers' import { clearProviderPtyState } from './provider/state-cleanup' import { setLocalPtyProvider } from './provider/registry' import { isCurrentPtyExit, restorePtyIncarnation } from './provider/ownership-state' -import { formatTerminalStartFailure } from '../../../shared/terminal-start-failure' +import { formatTerminalStartFailure } from '../../../shared/terminal/pty/lifecycle/terminal-start-failure' import { agentSessionOwners } from './pane/agent-session-owners' vi.mock('electron', () => import('./pty-ipc-mock-registry').then((m) => m.electronModuleMock())) diff --git a/src/main/ipc/pty/pty-daemon-controller-teardown.test.ts b/src/main/ipc/pty/pty-daemon-controller-teardown.test.ts index f007df57502..aed6db312bf 100644 --- a/src/main/ipc/pty/pty-daemon-controller-teardown.test.ts +++ b/src/main/ipc/pty/pty-daemon-controller-teardown.test.ts @@ -6,7 +6,7 @@ import { setLocalPtyProvider } from './provider/registry' import type { IPtyProvider } from '../../providers/pty-provider-contract' import type { RuntimePtyController } from '../../runtime/runtime-pty-controller-contract' import { TerminalIntentionalStops } from '../../runtime/terminal-intentional-stops' -import { SSH_PROVIDER_UNREGISTERED_REASON } from '../../../shared/pty-liveness-verdict' +import { SSH_PROVIDER_UNREGISTERED_REASON } from '../../../shared/terminal/pty/lifecycle/pty-liveness-verdict' vi.mock('electron', () => import('./pty-ipc-mock-registry').then((m) => m.electronModuleMock())) vi.mock('fs', () => import('./pty-ipc-mock-registry').then((m) => m.fsModuleMock())) diff --git a/src/main/ipc/pty/pty-daemon-spawn-session-identity.test.ts b/src/main/ipc/pty/pty-daemon-spawn-session-identity.test.ts index 2fa480c5405..3470f266a8a 100644 --- a/src/main/ipc/pty/pty-daemon-spawn-session-identity.test.ts +++ b/src/main/ipc/pty/pty-daemon-spawn-session-identity.test.ts @@ -1,6 +1,6 @@ import { OrcaRuntimeService } from '../../runtime/orca-runtime' import type { TerminalCreateOptions } from '../../runtime/runtime-terminal-contracts' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { createPaneBindingStore, launchRacePane } from './pty-launch-race-test-fixture' import { clearProviderPtyState } from './provider/state-cleanup' import { describe, expect, it, vi } from 'vitest' diff --git a/src/main/ipc/pty/pty-dead-owner-respawn.test.ts b/src/main/ipc/pty/pty-dead-owner-respawn.test.ts index cdf7cdbe220..9625d6478b8 100644 --- a/src/main/ipc/pty/pty-dead-owner-respawn.test.ts +++ b/src/main/ipc/pty/pty-dead-owner-respawn.test.ts @@ -2,7 +2,7 @@ import { describe, expect, it, vi } from 'vitest' import { withDurableRuntimeStore } from '../../runtime/runtime-durable-store-fixture' import { setupPtyIpcSuite } from './pty-ipc-test-harness' import { SessionNotFoundError } from '../../daemon/daemon-errors' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../shared/layout-owner-switch' import { registerPtyHandlers } from './register-handlers' import { setLocalPtyProvider } from './provider/registry' diff --git a/src/main/ipc/pty/pty-dispatcher-handshake-osc-answers.test.ts b/src/main/ipc/pty/pty-dispatcher-handshake-osc-answers.test.ts index 1c62195ad43..45751a0ad50 100644 --- a/src/main/ipc/pty/pty-dispatcher-handshake-osc-answers.test.ts +++ b/src/main/ipc/pty/pty-dispatcher-handshake-osc-answers.test.ts @@ -4,7 +4,7 @@ import { setupPtyIpcSuite } from './pty-ipc-test-harness' import { registerPtyHandlers } from './register-handlers' import { getPtyRendererDeliveryDebugSnapshot } from './delivery/debug' import { _resetColorQueryReplyColorsForTest } from './provider/registry' -import { _resetPtyOwnerHostColorsForTest } from '../../../shared/pty-owner-color-query-colors' +import { _resetPtyOwnerHostColorsForTest } from '../../../shared/terminal/pty/ingress/pty-owner-color-query-colors' import { _resetTerminalViewAttributesForTest } from '../../runtime/terminal-view-attribute-store' vi.mock('electron', () => import('./pty-ipc-mock-registry').then((m) => m.electronModuleMock())) diff --git a/src/main/ipc/pty/pty-first-size.ts b/src/main/ipc/pty/pty-first-size.ts index f45a80af8ca..3e1dca17d81 100644 --- a/src/main/ipc/pty/pty-first-size.ts +++ b/src/main/ipc/pty/pty-first-size.ts @@ -1,5 +1,5 @@ import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../shared/layout-owner-switch' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' export type PtyGridSize = { cols: number; rows: number } diff --git a/src/main/ipc/pty/pty-launch-parity.test.ts b/src/main/ipc/pty/pty-launch-parity.test.ts index 4900466805e..bb2d49561c4 100644 --- a/src/main/ipc/pty/pty-launch-parity.test.ts +++ b/src/main/ipc/pty/pty-launch-parity.test.ts @@ -42,7 +42,7 @@ import { makePaneSpawnReservationKey, paneSpawnReservationsByOwnerKey } from './pane/spawn-reservation' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { CALLER_LAUNCH_CASES } from './pty-launch-parity-caller.test-cases' import { RpcDispatcher } from '../../runtime/rpc/dispatcher' import { DESKTOP_RPC_CALLER } from '../../runtime/rpc/rpc-caller-identity' diff --git a/src/main/ipc/pty/pty-launch-race-parity.test.ts b/src/main/ipc/pty/pty-launch-race-parity.test.ts index 9ca2be3844d..324b05dc91f 100644 --- a/src/main/ipc/pty/pty-launch-race-parity.test.ts +++ b/src/main/ipc/pty/pty-launch-race-parity.test.ts @@ -1,7 +1,7 @@ import { OrcaRuntimeService } from '../../runtime/orca-runtime' import type { TerminalCreateOptions } from '../../runtime/runtime-terminal-contracts' import { registerPtyHandlers } from './register-handlers' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { launchWorkspaceId } from '../../../shared/launch-parity-window-request.test-fixture' import { POSIX_PATH } from '../../../shared/launch-parity-window-cases.test-fixture' import { statSyncMock, forgetRefusedPaneResumeMock } from './pty-ipc-mock-registry' diff --git a/src/main/ipc/pty/pty-launch-race-test-fixture.ts b/src/main/ipc/pty/pty-launch-race-test-fixture.ts index 8ca2259eeef..c284e2ec3fd 100644 --- a/src/main/ipc/pty/pty-launch-race-test-fixture.ts +++ b/src/main/ipc/pty/pty-launch-race-test-fixture.ts @@ -7,7 +7,7 @@ import { withDurableRuntimeStore } from '../../runtime/runtime-durable-store-fixture' import { vi, type Mock } from 'vitest' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { WORKTREE_TERMINALS_SLEEPING_ERROR } from '../../../shared/workspace-sleep' import { registerPtyHandlers } from './register-handlers' diff --git a/src/main/ipc/pty/pty-pane-claim-arbitration.test.ts b/src/main/ipc/pty/pty-pane-claim-arbitration.test.ts index d7741548942..068d25e5642 100644 --- a/src/main/ipc/pty/pty-pane-claim-arbitration.test.ts +++ b/src/main/ipc/pty/pty-pane-claim-arbitration.test.ts @@ -2,7 +2,7 @@ import { createPaneBindingStore } from './pty-launch-race-test-fixture' import { describe, expect, it, vi } from 'vitest' import { spawnMock } from './pty-ipc-mock-registry' import { setupPtyIpcSuite } from './pty-ipc-test-harness' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { OrcaRuntimeService } from '../../runtime/orca-runtime' import { registerPtyHandlers } from './register-handlers' import { clearProviderPtyState } from './provider/state-cleanup' diff --git a/src/main/ipc/pty/pty-pane-materialization-race.test.ts b/src/main/ipc/pty/pty-pane-materialization-race.test.ts index fb48ee83780..6af67c172a9 100644 --- a/src/main/ipc/pty/pty-pane-materialization-race.test.ts +++ b/src/main/ipc/pty/pty-pane-materialization-race.test.ts @@ -5,7 +5,7 @@ import { getCodexPaneAccountMock } from './pty-ipc-mock-registry' import { setupPtyIpcSuite } from './pty-ipc-test-harness' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { registerPtyHandlers } from './register-handlers' import { getPtyIdForPaneKey } from './pane/key-state' import { setLocalPtyProvider } from './provider/registry' diff --git a/src/main/ipc/pty/pty-pane-owner-swap.test-fixture.ts b/src/main/ipc/pty/pty-pane-owner-swap.test-fixture.ts index 683bb12c66c..de708ba18a1 100644 --- a/src/main/ipc/pty/pty-pane-owner-swap.test-fixture.ts +++ b/src/main/ipc/pty/pty-pane-owner-swap.test-fixture.ts @@ -6,7 +6,7 @@ import type { ExecutionHostId } from '../../../shared/execution-host' import type { PtyIpcSuiteFixtures } from './pty-ipc-test-harness' import { TerminalKilledError } from '../../daemon/daemon-pty-lifecycle-errors' import { SessionNotFoundError } from '../../daemon/daemon-errors' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { registerPtyHandlers } from './register-handlers' import { setLocalPtyProvider } from './provider/registry' import { TerminalIntentionalStops } from '../../runtime/terminal-intentional-stops' diff --git a/src/main/ipc/pty/pty-pane-reservation-settlement.test.ts b/src/main/ipc/pty/pty-pane-reservation-settlement.test.ts index 370ac679283..775d0e7ef11 100644 --- a/src/main/ipc/pty/pty-pane-reservation-settlement.test.ts +++ b/src/main/ipc/pty/pty-pane-reservation-settlement.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it, vi } from 'vitest' import { spawnMock, registerPtyMock } from './pty-ipc-mock-registry' import { setupPtyIpcSuite } from './pty-ipc-test-harness' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { registerPtyHandlers } from './register-handlers' import { setLocalPtyProvider } from './provider/registry' diff --git a/src/main/ipc/pty/pty-persisted-incarnation-repair.test.ts b/src/main/ipc/pty/pty-persisted-incarnation-repair.test.ts index 6feb42ec27c..26c905500e9 100644 --- a/src/main/ipc/pty/pty-persisted-incarnation-repair.test.ts +++ b/src/main/ipc/pty/pty-persisted-incarnation-repair.test.ts @@ -7,7 +7,7 @@ import { SessionNotFoundError, TerminalSessionOwnerUnverifiedError } from '../../daemon/daemon-errors' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../shared/layout-owner-switch' import { registerPtyHandlers } from './register-handlers' import { clearProviderPtyState } from './provider/state-cleanup' diff --git a/src/main/ipc/pty/pty-restore-record-seeding.test.ts b/src/main/ipc/pty/pty-restore-record-seeding.test.ts index e16d85ef1c3..7e8a211618d 100644 --- a/src/main/ipc/pty/pty-restore-record-seeding.test.ts +++ b/src/main/ipc/pty/pty-restore-record-seeding.test.ts @@ -10,7 +10,7 @@ import { } from './pty-ipc-mock-registry' import { setupPtyIpcSuite } from './pty-ipc-test-harness' import { getDefaultWorkspaceSession } from '../../../shared/constants' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../shared/layout-owner-switch' import { OrcaRuntimeService } from '../../runtime/orca-runtime' import type { RuntimeResolvedWorktreeCache } from '../../runtime/runtime-resolved-worktree-cache' diff --git a/src/main/ipc/pty/pty-serializer-settlement-mapping.test.ts b/src/main/ipc/pty/pty-serializer-settlement-mapping.test.ts index 5c189d1861d..631e891413f 100644 --- a/src/main/ipc/pty/pty-serializer-settlement-mapping.test.ts +++ b/src/main/ipc/pty/pty-serializer-settlement-mapping.test.ts @@ -2,7 +2,7 @@ import { describe, expect, it, vi } from 'vitest' import { EventEmitter } from 'node:events' import { spawnMock } from './pty-ipc-mock-registry' import { setupPtyIpcSuite } from './pty-ipc-test-harness' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import type * as WslManagedCliModule from '../../cli/wsl-managed-cli' import { registerPtyHandlers } from './register-handlers' import { clearProviderPtyState } from './provider/state-cleanup' diff --git a/src/main/ipc/pty/pty-session-liveness-and-ownership.test.ts b/src/main/ipc/pty/pty-session-liveness-and-ownership.test.ts index 7b57c2fa157..24ed7d31245 100644 --- a/src/main/ipc/pty/pty-session-liveness-and-ownership.test.ts +++ b/src/main/ipc/pty/pty-session-liveness-and-ownership.test.ts @@ -5,7 +5,7 @@ import { AGENT_SESSION_CLAIM_DIGEST_VERSION } from '../../../shared/agent-sessio import { deletePtyOwnership, setPtyOwnership } from './provider/ownership-state' import { registerPtyHandlers } from './register-handlers' import { setLocalPtyProvider } from './provider/registry' -import { SSH_PROVIDER_UNREGISTERED_REASON } from '../../../shared/pty-liveness-verdict' +import { SSH_PROVIDER_UNREGISTERED_REASON } from '../../../shared/terminal/pty/lifecycle/pty-liveness-verdict' vi.mock('electron', () => import('./pty-ipc-mock-registry').then((m) => m.electronModuleMock())) vi.mock('fs', () => import('./pty-ipc-mock-registry').then((m) => m.fsModuleMock())) diff --git a/src/main/ipc/pty/pty-spawn-env-terminal-basics.test.ts b/src/main/ipc/pty/pty-spawn-env-terminal-basics.test.ts index 40adfa97091..1cac45330e0 100644 --- a/src/main/ipc/pty/pty-spawn-env-terminal-basics.test.ts +++ b/src/main/ipc/pty/pty-spawn-env-terminal-basics.test.ts @@ -17,7 +17,7 @@ import { buildJcodeRuntimeDir, shouldInjectJcodeRuntimeDir } from '../../../shared/jcode-runtime-dir' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { selectShellStartupFeatures } from '../../pty/shell-startup/shell-startup-features' import { REMOTE_VIEWER_CLIPBOARD_ENV, diff --git a/src/main/ipc/pty/pty-spawn-runtime-handle-binding.test.ts b/src/main/ipc/pty/pty-spawn-runtime-handle-binding.test.ts index fdcd39582d4..e6b91d76e41 100644 --- a/src/main/ipc/pty/pty-spawn-runtime-handle-binding.test.ts +++ b/src/main/ipc/pty/pty-spawn-runtime-handle-binding.test.ts @@ -3,7 +3,7 @@ import { spawnMock } from './pty-ipc-mock-registry' import { setupPtyIpcSuite } from './pty-ipc-test-harness' import { createHash } from 'node:crypto' import { delimiter } from 'node:path' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { OrcaRuntimeService } from '../../runtime/orca-runtime' import { ClaudeAgentTeamsService } from '../../runtime/claude-agent-teams-service' import { diff --git a/src/main/ipc/pty/pty-ssh-stop-verdict.test.ts b/src/main/ipc/pty/pty-ssh-stop-verdict.test.ts index 6924d721b7a..8643faf44d4 100644 --- a/src/main/ipc/pty/pty-ssh-stop-verdict.test.ts +++ b/src/main/ipc/pty/pty-ssh-stop-verdict.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from 'vitest' -import { SSH_PROVIDER_UNREGISTERED_REASON } from '../../../shared/pty-liveness-verdict' +import { SSH_PROVIDER_UNREGISTERED_REASON } from '../../../shared/terminal/pty/lifecycle/pty-liveness-verdict' import { setupPtyIpcSuite } from './pty-ipc-test-harness' import { registerPtyHandlers } from './register-handlers' import { diff --git a/src/main/ipc/pty/register-handlers.ts b/src/main/ipc/pty/register-handlers.ts index 0cea686dce0..80f85177b17 100644 --- a/src/main/ipc/pty/register-handlers.ts +++ b/src/main/ipc/pty/register-handlers.ts @@ -4,7 +4,7 @@ import type { OrcaRuntimeService } from '../../runtime/orca-runtime' import type { Store } from '../../persistence/loading-store/store' import type { GlobalSettings } from '../../../shared/global-settings-types' import { LocalPtyProvider } from '../../providers/local-pty/local-pty-provider' -import type { TerminalStartupCwdMissingDirFallback } from '../../../shared/terminal-startup-cwd' +import type { TerminalStartupCwdMissingDirFallback } from '../../../shared/shell/launch/terminal-startup-cwd' import { getHiddenRendererPtyDeliveryDebug, resetRendererScopedHiddenPtyDeliveryState diff --git a/src/main/ipc/pty/runtime/controller-deps.ts b/src/main/ipc/pty/runtime/controller-deps.ts index bd9d086859d..f8b0421a3b0 100644 --- a/src/main/ipc/pty/runtime/controller-deps.ts +++ b/src/main/ipc/pty/runtime/controller-deps.ts @@ -3,7 +3,7 @@ import type { OrcaRuntimeService } from '../../../runtime/orca-runtime' import type { Store } from '../../../persistence/loading-store/store' import type { IPtyProvider } from '../../../providers/pty-provider-contract' import type { GlobalSettings } from '../../../../shared/global-settings-types' -import type { TerminalStartupCwdMissingDirFallback } from '../../../../shared/terminal-startup-cwd' +import type { TerminalStartupCwdMissingDirFallback } from '../../../../shared/shell/launch/terminal-startup-cwd' import type { CodexHomePtySpawnedLifecycleArgs, GetSelectedCodexHomePath, diff --git a/src/main/ipc/pty/runtime/controller.ts b/src/main/ipc/pty/runtime/controller.ts index 99332b83b81..8da628f820c 100644 --- a/src/main/ipc/pty/runtime/controller.ts +++ b/src/main/ipc/pty/runtime/controller.ts @@ -6,7 +6,7 @@ import { localTerminalLimit, resumeLocalAutomaticWork } from '../../../daemon/daemon-automatic-work-resume' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { claimRuntimePaneCreate, makePaneSpawnReservationKey } from '../pane/spawn-reservation' import type { PtyRuntimeControllerDeps } from './controller-deps' import { spawnPtyFromRuntimeController } from './spawn' diff --git a/src/main/ipc/pty/runtime/kill.ts b/src/main/ipc/pty/runtime/kill.ts index 41ad645cd84..e0d023a6cda 100644 --- a/src/main/ipc/pty/runtime/kill.ts +++ b/src/main/ipc/pty/runtime/kill.ts @@ -1,5 +1,5 @@ import type { IPtyProvider } from '../../../providers/pty-provider-contract' -import { SSH_PROVIDER_UNREGISTERED_REASON } from '../../../../shared/pty-liveness-verdict' +import { SSH_PROVIDER_UNREGISTERED_REASON } from '../../../../shared/terminal/pty/lifecycle/pty-liveness-verdict' import { isCurrentPtyExit, ptyOwnership, ptyIncarnationById } from '../provider/ownership-state' import { getProviderForPty, diff --git a/src/main/ipc/pty/runtime/operations.ts b/src/main/ipc/pty/runtime/operations.ts index ed160ff433f..3c8907d9218 100644 --- a/src/main/ipc/pty/runtime/operations.ts +++ b/src/main/ipc/pty/runtime/operations.ts @@ -17,7 +17,7 @@ import { writeUnverifiable, isSettledWrite, type WriteSettlement -} from '../../../../shared/pty-write-settlement' +} from '../../../../shared/terminal/pty/lifecycle/pty-write-settlement' import { isDrivingInputKind, type TerminalInputKind diff --git a/src/main/ipc/pty/runtime/spawn-commit-run-facts.test.ts b/src/main/ipc/pty/runtime/spawn-commit-run-facts.test.ts index 280e11db97f..62ef88b8ffc 100644 --- a/src/main/ipc/pty/runtime/spawn-commit-run-facts.test.ts +++ b/src/main/ipc/pty/runtime/spawn-commit-run-facts.test.ts @@ -11,7 +11,7 @@ import type { PtyRuntimeControllerDeps } from './controller-deps' import { formatTerminalStartFailure, terminalExitError -} from '../../../../shared/terminal-start-failure' +} from '../../../../shared/terminal/pty/lifecycle/terminal-start-failure' import { requireAcceptedSpawn } from '../spawn-outcome' import type { AgentSessionClaimedSpawnResult } from '../../../../shared/agent-session/agent-session-host-authority' diff --git a/src/main/ipc/pty/runtime/spawn-commit.ts b/src/main/ipc/pty/runtime/spawn-commit.ts index 8b4a743fb6e..671139ee73b 100644 --- a/src/main/ipc/pty/runtime/spawn-commit.ts +++ b/src/main/ipc/pty/runtime/spawn-commit.ts @@ -1,4 +1,5 @@ -import { provenSpawnResponse } from '../spawn-outcome' +import '../spawn-outcome' +import { provenSpawnResponse } from '../../../../shared/terminal/pty/lifecycle/terminal-spawn-response' import { isNativeWindowsLocalPtySpawn } from '../../../runtime/terminal-model-query-authority' import { normalizeValidPaneKey } from '../pane/key-state' import type { RuntimePtySpawnState } from './spawn-state' diff --git a/src/main/ipc/pty/runtime/spawn-options.ts b/src/main/ipc/pty/runtime/spawn-options.ts index ee5bbe23c95..8deecb90019 100644 --- a/src/main/ipc/pty/runtime/spawn-options.ts +++ b/src/main/ipc/pty/runtime/spawn-options.ts @@ -1,7 +1,7 @@ import type { IPtyProvider, PtySpawnResult } from '../../../providers/pty-provider-contract' import { LocalPtyProvider } from '../../../providers/local-pty/local-pty-provider' -import { makePaneKey, isTerminalLeafId } from '../../../../shared/stable-pane-id' -import { isValidTerminalTabId } from '../../../../shared/terminal-tab-id' +import { makePaneKey, isTerminalLeafId } from '../../../../shared/workspace-layout/stable-pane-id' +import { isValidTerminalTabId } from '../../../../shared/workspace-layout/terminal-tab-id' import { routesFreshSpawnsToLocalProvider, beginPtySpawnForWorktree diff --git a/src/main/ipc/pty/runtime/spawn-preflight.ts b/src/main/ipc/pty/runtime/spawn-preflight.ts index 3107ecb1322..28220c21be0 100644 --- a/src/main/ipc/pty/runtime/spawn-preflight.ts +++ b/src/main/ipc/pty/runtime/spawn-preflight.ts @@ -1,8 +1,8 @@ import { withClaudeProfileTerminalEnv } from '../../../claude-accounts/claude-profile-installed-router' import type { PtySpawnResult } from '../../../providers/pty-provider-contract' import { LocalPtyProvider } from '../../../providers/local-pty/local-pty-provider' -import { isValidTerminalTabId } from '../../../../shared/terminal-tab-id' -import { isTerminalLeafId } from '../../../../shared/stable-pane-id' +import { isValidTerminalTabId } from '../../../../shared/workspace-layout/terminal-tab-id' +import { isTerminalLeafId } from '../../../../shared/workspace-layout/stable-pane-id' import { getProvider } from '../provider/registry' import { isClaudeLaunchCommand, diff --git a/src/main/ipc/pty/runtime/spawn-state.ts b/src/main/ipc/pty/runtime/spawn-state.ts index 071d3da74ba..b3b705c01f8 100644 --- a/src/main/ipc/pty/runtime/spawn-state.ts +++ b/src/main/ipc/pty/runtime/spawn-state.ts @@ -17,7 +17,7 @@ import type { StablePaneOwner } from '../pane/stable-owner' import type { PaneSpawnReservation } from '../pane/spawn-reservation' import type { AdoptStablePaneResult } from '../ipc/spawn-types' import type { PtyBindingSourceExpectation } from '../../../persistence/loading-store/store' -import type { TerminalPanePlacement } from '../../../../shared/terminal-pane-placement' +import type { TerminalPanePlacement } from '../../../../shared/workspace-layout/terminal-pane-placement' import type { ResumeSpawnAdmission } from '../host-env/saved-resume-admission' import type { PtyRuntimeControllerDeps } from './controller-deps' import type { TuiAgent } from '../../../../shared/agent-launch/catalog/tui-agent' diff --git a/src/main/ipc/pty/session.ts b/src/main/ipc/pty/session.ts index 2fb211048eb..4a9326f4b2e 100644 --- a/src/main/ipc/pty/session.ts +++ b/src/main/ipc/pty/session.ts @@ -7,7 +7,7 @@ import type { PtyModelRestoreReason } from '../../../shared/terminal/replay/pty- import type { PtyDeliveryWriteOff, PtyRendererDeliveryStateReport -} from '../../../shared/pty-renderer-delivery-health' +} from '../../../shared/terminal/pty/diagnostics/pty-renderer-delivery-health' import type { PtyRendererDeliveryDebugSnapshot } from './delivery/debug' import { PtyProducerFlowController } from './delivery/pty-producer-flow-control' import { PtyPendingDataDrainQueue } from './delivery/pty-pending-data-drain-queue' diff --git a/src/main/ipc/pty/spawn-commit-assembly.ts b/src/main/ipc/pty/spawn-commit-assembly.ts index 07203fc97cf..1b59d64a4d0 100644 --- a/src/main/ipc/pty/spawn-commit-assembly.ts +++ b/src/main/ipc/pty/spawn-commit-assembly.ts @@ -1,6 +1,6 @@ -import { readTerminalStartFailure } from '../../../shared/terminal-start-failure' +import { readTerminalStartFailure } from '../../../shared/terminal/pty/lifecycle/terminal-start-failure' import type { PtySpawnSizeSeed } from './spawn-options-assembly' -import { isValidTerminalTabId } from '../../../shared/terminal-tab-id' +import { isValidTerminalTabId } from '../../../shared/workspace-layout/terminal-tab-id' import type { AgentSessionClaimedSpawnResult } from '../../../shared/agent-session/agent-session-host-authority' import type { GlobalSettings } from '../../../shared/global-settings-types' import type { TuiAgent } from '../../../shared/agent-launch/catalog/tui-agent' diff --git a/src/main/ipc/pty/spawn-commit-binding.ts b/src/main/ipc/pty/spawn-commit-binding.ts index ea23d13e469..c5dc4e7afe1 100644 --- a/src/main/ipc/pty/spawn-commit-binding.ts +++ b/src/main/ipc/pty/spawn-commit-binding.ts @@ -1,9 +1,9 @@ import type { Store } from '../../persistence/loading-store/store' import type { PersistPtyBindingArgs } from '../../persistence/loading-store/pty-binding-persistence' import { ptyBindingIsRefused } from '../../persistence/loading-store/pty-binding-refusals' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { toSshExecutionHostId } from '../../../shared/execution-host' -import { createTerminalSessionStateSaveFailureMessage } from '../../../shared/terminal-session-state-save-failure' +import { createTerminalSessionStateSaveFailureMessage } from '../../../shared/workspace-session/terminal-session-state-save-failure' import type { OrcaRuntimeService } from '../../runtime/orca-runtime' import type { IPtyProvider, PtySpawnResult } from '../../providers/pty-provider-contract' import { diff --git a/src/main/ipc/pty/spawn-operation.ts b/src/main/ipc/pty/spawn-operation.ts index 1b6ec2dc4e1..225b7cad583 100644 --- a/src/main/ipc/pty/spawn-operation.ts +++ b/src/main/ipc/pty/spawn-operation.ts @@ -15,7 +15,7 @@ import { } from './pane/spawn-reservation' import { restoreProvisionalPtySize } from './spawn-options-assembly' import { spawnWorktreeTarget } from '../../../shared/worktree/host-qualified-identity' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { releaseStoppedPaneBinding } from './pane/pane-owner-replacement' import { admitColdRestoreReattach, diff --git a/src/main/ipc/pty/spawn-outcome.ts b/src/main/ipc/pty/spawn-outcome.ts index 39096c3bce8..f9f04bd30bf 100644 --- a/src/main/ipc/pty/spawn-outcome.ts +++ b/src/main/ipc/pty/spawn-outcome.ts @@ -2,8 +2,8 @@ import { terminalExitError, terminalStartError, type TerminalStartFailure -} from '../../../shared/terminal-start-failure' -import { terminalAttachResult } from '../../../shared/terminal-attach-result' +} from '../../../shared/terminal/pty/lifecycle/terminal-start-failure' +import { terminalAttachResult } from '../../../shared/terminal/pty/lifecycle/terminal-attach-result' import type { AdoptStablePaneResult } from './ipc/spawn-types' import type { StartupCwdFallback } from '../../../shared/startup-cwd-fallback' import type { SleepingAgentLaunchConfig } from '../../../shared/agent-session/lifecycle/agent-session-resume' @@ -24,7 +24,7 @@ export type PtySpawnOutcome = { } } -export { provenSpawnResponse } from '../../../shared/terminal-spawn-response' +import '../../../shared/terminal/pty/lifecycle/terminal-spawn-response' export function requireAcceptedSpawn( outcome: PtySpawnOutcome, diff --git a/src/main/ipc/pty/spawn-pane-coordinates.ts b/src/main/ipc/pty/spawn-pane-coordinates.ts index c5c07c623b8..8c7fb062bc1 100644 --- a/src/main/ipc/pty/spawn-pane-coordinates.ts +++ b/src/main/ipc/pty/spawn-pane-coordinates.ts @@ -1,5 +1,5 @@ -import { isTerminalLeafId, makePaneKey } from '../../../shared/stable-pane-id' -import { isValidTerminalTabId } from '../../../shared/terminal-tab-id' +import { isTerminalLeafId, makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' +import { isValidTerminalTabId } from '../../../shared/workspace-layout/terminal-tab-id' import { makePaneSpawnReservationKey } from './pane/spawn-reservation' type PtySpawnPaneCoordinates = { diff --git a/src/main/ipc/pty/spawn-pane-env.ts b/src/main/ipc/pty/spawn-pane-env.ts index b3d0d2f23c8..60fb748d041 100644 --- a/src/main/ipc/pty/spawn-pane-env.ts +++ b/src/main/ipc/pty/spawn-pane-env.ts @@ -4,8 +4,8 @@ import { JCODE_RUNTIME_DIR_ENV_KEY } from '../../../shared/jcode-runtime-dir' import { applyScrubSafeAgentEnvAliases } from '../../../shared/agent-hook-listener/transport/agent-hook-scrub-safe-env' -import { isTerminalLeafId, makePaneKey } from '../../../shared/stable-pane-id' -import { isValidTerminalTabId } from '../../../shared/terminal-tab-id' +import { isTerminalLeafId, makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' +import { isValidTerminalTabId } from '../../../shared/workspace-layout/terminal-tab-id' export type PtySpawnPane = { paneKey: string diff --git a/src/main/ipc/pty/spawn-startup-target.ts b/src/main/ipc/pty/spawn-startup-target.ts index 6fc66876d6c..02004123ca5 100644 --- a/src/main/ipc/pty/spawn-startup-target.ts +++ b/src/main/ipc/pty/spawn-startup-target.ts @@ -7,7 +7,7 @@ import type { StartupCwdFallback } from '../../../shared/startup-cwd-fallback' import { resolveTerminalStartupCwd, type TerminalStartupCwdMissingDirFallback -} from '../../../shared/terminal-startup-cwd' +} from '../../../shared/shell/launch/terminal-startup-cwd' import type { TerminalWorkspaceLaunchScope } from '../../runtime/runtime-legacy-worker-terminal-recovery-types' import { isWslUncPath, toWindowsWslPath } from '../../../shared/wsl-paths' import type { CodexAccountSelectionTarget } from '../../codex-accounts/runtime-selection' diff --git a/src/main/ipc/renderer-shutdown-checkpoint-sleep-records.test.ts b/src/main/ipc/renderer-shutdown-checkpoint-sleep-records.test.ts index 2d7a0eed708..86d22fac5dd 100644 --- a/src/main/ipc/renderer-shutdown-checkpoint-sleep-records.test.ts +++ b/src/main/ipc/renderer-shutdown-checkpoint-sleep-records.test.ts @@ -10,7 +10,7 @@ import { leaf } from '../../shared/workspace-layout/workspace-layout-session.test-fixture' import type { SleepingAgentSessionRecord } from '../../shared/agent-session/lifecycle/agent-session-resume' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' const { handlers } = vi.hoisted(() => ({ handlers: new Map unknown>() diff --git a/src/main/ipc/renderer-shutdown-checkpoint.test.ts b/src/main/ipc/renderer-shutdown-checkpoint.test.ts index ad6527a464d..df27fb5ee55 100644 --- a/src/main/ipc/renderer-shutdown-checkpoint.test.ts +++ b/src/main/ipc/renderer-shutdown-checkpoint.test.ts @@ -25,7 +25,7 @@ vi.mock('electron', () => ({ })) import { getDefaultWorkspaceSession } from '../../shared/constants' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../shared/layout-owner-switch' import { registerRendererShutdownCheckpointHandler, diff --git a/src/main/ipc/renderer-shutdown-checkpoint.ts b/src/main/ipc/renderer-shutdown-checkpoint.ts index 166bf038b2b..08f708fa933 100644 --- a/src/main/ipc/renderer-shutdown-checkpoint.ts +++ b/src/main/ipc/renderer-shutdown-checkpoint.ts @@ -7,7 +7,7 @@ import { import type { SleepingAgentSessionRecord } from '../../shared/agent-session/lifecycle/agent-session-resume' import { applyCommandToSession } from '../persistence/terminal-topology/terminal-pane-admission' import type { PersistedUIState } from '../../shared/persisted-ui-state-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import type { Store } from '../persistence/loading-store/store' import { isFrozenOrcadSourceSessionPartition } from '../ssh/orcad-retained-source' import { isWslMoveWindowWriteHeld } from '../persistence/moving-wsl-projects/wsl-move-window-write-hold' diff --git a/src/main/ipc/session-close-terminal-surface.test.ts b/src/main/ipc/session-close-terminal-surface.test.ts index 909c9c43c65..4298c804a3f 100644 --- a/src/main/ipc/session-close-terminal-surface.test.ts +++ b/src/main/ipc/session-close-terminal-surface.test.ts @@ -1,5 +1,5 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { resetAgentLaunchPanesForTests, trackRunningAgentLaunchPane diff --git a/src/main/ipc/session-window-view-save.test.ts b/src/main/ipc/session-window-view-save.test.ts index b8d384a3724..ab98d6d76a0 100644 --- a/src/main/ipc/session-window-view-save.test.ts +++ b/src/main/ipc/session-window-view-save.test.ts @@ -9,7 +9,7 @@ import { GIT_KEY, leaf } from '../../shared/workspace-layout/workspace-layout-session.test-fixture' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' const { handlers } = vi.hoisted(() => ({ handlers: new Map unknown>() diff --git a/src/main/ipc/session.ts b/src/main/ipc/session.ts index f555c60982b..79e16ff22cc 100644 --- a/src/main/ipc/session.ts +++ b/src/main/ipc/session.ts @@ -1,7 +1,7 @@ import { ipcMain } from 'electron' import type { Store } from '../persistence/loading-store/store' import type { OrcaRuntimeService } from '../runtime/orca-runtime' -import { parseTerminalSurfaceCloseTarget } from '../../shared/terminal-surface-close-target' +import { parseTerminalSurfaceCloseTarget } from '../../shared/workspace-layout/terminal-surface-close-target' import { isFrozenOrcadSourceSessionPartition } from '../ssh/orcad-retained-source' import { isWslMoveWindowWriteHeld } from '../persistence/moving-wsl-projects/wsl-move-window-write-hold' import { visibleSessionHostIds } from '../ssh/orcad-retained-source-session' @@ -13,7 +13,7 @@ import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../shared/layout-owner-switch' import type { WorkspaceSessionPatch, WorkspaceSessionState -} from '../../shared/workspace-session-state-types' +} from '../../shared/workspace-session/workspace-session-state-types' export function registerSessionHandlers(store: Store, runtime: OrcaRuntimeService): void { // Why: renderer saves would change a fenced host's frozen source partition, or write back what a diff --git a/src/main/ipc/shell-owned-path-target.ts b/src/main/ipc/shell-owned-path-target.ts index 4223ffa5006..177ca17f303 100644 --- a/src/main/ipc/shell-owned-path-target.ts +++ b/src/main/ipc/shell-owned-path-target.ts @@ -1,7 +1,7 @@ import { stat } from 'node:fs/promises' import { isAbsolute, normalize, win32 } from 'node:path' import { parseRoutableExecutionHostId } from '../../shared/execution-host' -import type { ShellOpenLocalPathFailureReason } from '../../shared/shell-open-types' +import type { ShellOpenLocalPathFailureReason } from '../../shared/shell/opening/shell-open-types' import { resolveWindowsPathAccess } from '../windows/windows-path-access-host' export async function pathExists(pathValue: string): Promise { diff --git a/src/main/ipc/shell.ts b/src/main/ipc/shell.ts index ce55a292711..a12919e8275 100644 --- a/src/main/ipc/shell.ts +++ b/src/main/ipc/shell.ts @@ -7,7 +7,7 @@ import type { ShellOpenExternalEditorRequest, ShellOpenExternalEditorResult, ShellOpenLocalPathResult -} from '../../shared/shell-open-types' +} from '../../shared/shell/opening/shell-open-types' import { MAX_REPO_ICON_UPLOAD_BYTES } from '../../shared/repo-icon' import { repoIconPickFailure, diff --git a/src/main/ipc/terminal-git-credential-guard.test.ts b/src/main/ipc/terminal-git-credential-guard.test.ts index fc5af9a9db0..a5b700d0bdf 100644 --- a/src/main/ipc/terminal-git-credential-guard.test.ts +++ b/src/main/ipc/terminal-git-credential-guard.test.ts @@ -2,7 +2,7 @@ import { describe, expect, it } from 'vitest' import { applyTerminalGitCredentialPromptGuard, TERMINAL_GIT_CREDENTIAL_GUARD_POLICY_ENV -} from '../../shared/terminal-git-credential-guard' +} from '../../shared/shell/launch/terminal-git-credential-guard' function expectGuarded(env: Record): void { expect(env.GIT_TERMINAL_PROMPT).toBe('0') diff --git a/src/main/ipc/terminal-startup-color-query-replies.test.ts b/src/main/ipc/terminal-startup-color-query-replies.test.ts index d4117fd3d4a..b9757c978c3 100644 --- a/src/main/ipc/terminal-startup-color-query-replies.test.ts +++ b/src/main/ipc/terminal-startup-color-query-replies.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest' import { getStartupTerminalIngressIntent } from './terminal-startup-color-query-replies' -import { PtyStartupIngress } from '../../shared/pty-startup-ingress' -import { parsePtyStartupIngressIntent } from '../../shared/pty-startup-ingress-intent' +import { PtyStartupIngress } from '../../shared/terminal/pty/ingress/pty-startup-ingress' +import { parsePtyStartupIngressIntent } from '../../shared/terminal/pty/ingress/pty-startup-ingress-intent' it.each([{ launchAgent: 'omp' }, { command: 'omp' }, { telemetry: { agent_kind: 'omp' } }])( 'keeps keyboard startup support without theme colors: %j', diff --git a/src/main/ipc/terminal-startup-color-query-replies.ts b/src/main/ipc/terminal-startup-color-query-replies.ts index fef2b2d58f2..fb58a895b05 100644 --- a/src/main/ipc/terminal-startup-color-query-replies.ts +++ b/src/main/ipc/terminal-startup-color-query-replies.ts @@ -1,5 +1,5 @@ -import { parsePtyStartupIngressIntent } from '../../shared/pty-startup-ingress-intent' -import { normalizeColorQueryReplyColors } from '../../shared/pty-owner-color-query-colors' +import { parsePtyStartupIngressIntent } from '../../shared/terminal/pty/ingress/pty-startup-ingress-intent' +import { normalizeColorQueryReplyColors } from '../../shared/terminal/pty/ingress/pty-owner-color-query-colors' import { recognizeAgentLaunchCommand } from '../../shared/agent-launch/startup/agent-command-line-intent' import { isTuiAgent } from '../../shared/agent-launch/catalog/tui-agent-config' import { agentKindSchema } from '../../shared/telemetry-events' diff --git a/src/main/ipc/worktree-folder-rename-target.ts b/src/main/ipc/worktree-folder-rename-target.ts index d94d53a2d6c..e7f26660712 100644 --- a/src/main/ipc/worktree-folder-rename-target.ts +++ b/src/main/ipc/worktree-folder-rename-target.ts @@ -1,6 +1,7 @@ import { posix } from 'node:path' import type { GlobalSettings } from '../../shared/global-settings-types' -import { WORKTREE_ID_SEPARATOR } from '../../shared/worktree/id' +import '../../shared/worktree/id' +import { WORKTREE_ID_SEPARATOR } from '../../shared/terminal/pty/lifecycle/pty-session-id-format' import { computeWorktreePath } from './worktree-logic' type WorktreePathSettings = Pick diff --git a/src/main/ipc/worktrees-authoritative-local-metadata-pruning.test.ts b/src/main/ipc/worktrees-authoritative-local-metadata-pruning.test.ts index 69771cee777..e9b3ee82323 100644 --- a/src/main/ipc/worktrees-authoritative-local-metadata-pruning.test.ts +++ b/src/main/ipc/worktrees-authoritative-local-metadata-pruning.test.ts @@ -15,7 +15,7 @@ import { pruneMetadataMissingFromAuthoritativeLocalScan } from './worktrees/list import { listDetectedWorktreesForCapturedRepo } from './worktrees/listing/detected-provider-listing' import { getLocalWorktreeScanGeneration } from '../workspaces/catalog/local-worktree-scan-generation' import { agentHookServer } from '../agent-hooks/server' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { isRegisteredWorktreePath, registerWorktreeRootsForRepo diff --git a/src/main/ipc/worktrees-removal-recovery.test.ts b/src/main/ipc/worktrees-removal-recovery.test.ts index bb9382738cd..d360fb4b9c3 100644 --- a/src/main/ipc/worktrees-removal-recovery.test.ts +++ b/src/main/ipc/worktrees-removal-recovery.test.ts @@ -21,7 +21,7 @@ import { join } from 'node:path' import type { GitWorktreeInfo } from '../../shared/worktree/types' import type { Store } from '../persistence/loading-store/store' import { agentHookServer } from '../agent-hooks/server' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { ORIGINAL_PLATFORM, setPlatform, diff --git a/src/main/ipc/wsl/wsl-move-undo-wiring.test.ts b/src/main/ipc/wsl/wsl-move-undo-wiring.test.ts index 5d3a30ac66d..39cbeb6623a 100644 --- a/src/main/ipc/wsl/wsl-move-undo-wiring.test.ts +++ b/src/main/ipc/wsl/wsl-move-undo-wiring.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it, vi } from 'vitest' import { getDefaultWorkspaceSession } from '../../../shared/constants' import { LOCAL_EXECUTION_HOST_ID, toRuntimeExecutionHostId } from '../../../shared/execution-host' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { wslMoveCutoverFixture } from '../../persistence/__fixtures__/wsl-mover/wsl-move-cutover-fixture' import { wslMoverProfile } from '../../persistence/__fixtures__/wsl-mover/wsl-mover-profiles' import { createWslMoveUndoPorts } from './wsl-move-undo-wiring' 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 424b8fda4c1..da5c2615137 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 @@ -15,7 +15,7 @@ vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => ( ...(await importOriginal()), execCommand: vi.fn() })) -vi.mock('../../../shared/shell-argument-quoting', () => ({ +vi.mock('../../../shared/shell/launch/shell-argument-quoting', () => ({ quotePosixShell: (s: string) => `'${s}'` })) vi.mock('../install/remote-install-lock', async (importOriginal) => ({ diff --git a/src/main/managed-server/activation/orcad-activation-fence-scope.ts b/src/main/managed-server/activation/orcad-activation-fence-scope.ts index a1d9b530b06..122025613df 100644 --- a/src/main/managed-server/activation/orcad-activation-fence-scope.ts +++ b/src/main/managed-server/activation/orcad-activation-fence-scope.ts @@ -1,6 +1,6 @@ // Resumed stale holders must prove their generation on-host before every step, preventing writes or release under a successor's fence. import { AsyncLocalStorage } from 'node:async_hooks' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { isSshCommandExitError } from '../../ssh/remote-exec/remote-exec-command' export const ORCAD_FENCE_OWNER_FILENAME = '.orca-fence-owner' diff --git a/src/main/managed-server/activation/orcad-activation-lock.ts b/src/main/managed-server/activation/orcad-activation-lock.ts index ecdd0099356..88197048cfa 100644 --- a/src/main/managed-server/activation/orcad-activation-lock.ts +++ b/src/main/managed-server/activation/orcad-activation-lock.ts @@ -11,7 +11,7 @@ import { orphanInstallLockCommand, probeInstallLockExistsCommand } from '../install/remote-install-lock-commands' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { ORCAD_FENCE_OWNER_FILENAME, posixOrcadFenceOwnedTest, diff --git a/src/main/managed-server/host-state/orcad-machine-claim-command.ts b/src/main/managed-server/host-state/orcad-machine-claim-command.ts index 9e2ad7a8079..ea8b6f40b87 100644 --- a/src/main/managed-server/host-state/orcad-machine-claim-command.ts +++ b/src/main/managed-server/host-state/orcad-machine-claim-command.ts @@ -1,5 +1,5 @@ import { randomUUID } from 'node:crypto' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { RELAY_REMOTE_DIR } from '../../ssh/remote-exec/remote-frame-protocol' import { ORCAD_MACHINE_CLAIM_FILENAME, diff --git a/src/main/managed-server/host-state/orcad-machine-home.ts b/src/main/managed-server/host-state/orcad-machine-home.ts index b53abb7d112..5967ccdc5a5 100644 --- a/src/main/managed-server/host-state/orcad-machine-home.ts +++ b/src/main/managed-server/host-state/orcad-machine-home.ts @@ -1,5 +1,5 @@ // Shared-home hosts need per-machine state and runtime GC: a PID can prove ownership only on the machine that issued it (#29059). -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { RELAY_REMOTE_DIR } from '../../ssh/remote-exec/remote-frame-protocol' import { machineKeyOf, diff --git a/src/main/managed-server/host-state/orcad-state-mutation-timeout.test.ts b/src/main/managed-server/host-state/orcad-state-mutation-timeout.test.ts index b2715332c41..c9603a50e52 100644 --- a/src/main/managed-server/host-state/orcad-state-mutation-timeout.test.ts +++ b/src/main/managed-server/host-state/orcad-state-mutation-timeout.test.ts @@ -9,7 +9,7 @@ vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => ( ...(await importOriginal()), execCommand: vi.fn() })) -vi.mock('../../../shared/shell-argument-quoting', () => ({ +vi.mock('../../../shared/shell/launch/shell-argument-quoting', () => ({ quotePosixShell: (s: string) => `'${s}'` })) vi.mock('../install/remote-install-lock', async (importOriginal) => ({ diff --git a/src/main/managed-server/host-state/orcad-state-newest-mtime.ts b/src/main/managed-server/host-state/orcad-state-newest-mtime.ts index 4baacd5dd07..352169e6d7e 100644 --- a/src/main/managed-server/host-state/orcad-state-newest-mtime.ts +++ b/src/main/managed-server/host-state/orcad-state-newest-mtime.ts @@ -1,4 +1,4 @@ -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { isWindowsRemoteHost, type RemoteHostPlatform } from '../../ssh/ssh-remote-platform' import { orcadWindowsHostOpCommand } from '../install/orcad-remote-windows-node' import { ORCAD_SNAPSHOT_MEMBERS } from './orcad-state-snapshot-members' diff --git a/src/main/managed-server/host-state/orcad-state-snapshot-shell.test.ts b/src/main/managed-server/host-state/orcad-state-snapshot-shell.test.ts index 77a05edab66..a4f97835515 100644 --- a/src/main/managed-server/host-state/orcad-state-snapshot-shell.test.ts +++ b/src/main/managed-server/host-state/orcad-state-snapshot-shell.test.ts @@ -22,7 +22,7 @@ import { } from './orcad-state-snapshot' import { posixProcessGroupCommand } from './orcad-state-mutation-owner-record' import { getRemoteHostPlatform } from '../../ssh/ssh-remote-platform' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { wrapRemoteCommandForPosixShell } from '../../ssh/ssh-posix-command-wrapper' import { ORCAD_FENCE_OWNER_FILENAME, diff --git a/src/main/managed-server/host-state/orcad-state-snapshot-space.ts b/src/main/managed-server/host-state/orcad-state-snapshot-space.ts index 77d725a1cd7..9de5c62f850 100644 --- a/src/main/managed-server/host-state/orcad-state-snapshot-space.ts +++ b/src/main/managed-server/host-state/orcad-state-snapshot-space.ts @@ -1,5 +1,5 @@ // Prune unreferenced captures and check disk space before stopping the incumbent, preserving service when no snapshot fits (#30491). -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { isWindowsRemoteHost, type RemoteHostPlatform } from '../../ssh/ssh-remote-platform' import { ORCAD_SNAPSHOT_FAILURE, ORCAD_SNAPSHOT_MEMBERS } from './orcad-state-snapshot-members' import { dfAvailableKb, formatKb } from './remote-filesystem-space' diff --git a/src/main/managed-server/host-state/orcad-state-snapshot.ts b/src/main/managed-server/host-state/orcad-state-snapshot.ts index e3a0dea2547..f1abb1753b7 100644 --- a/src/main/managed-server/host-state/orcad-state-snapshot.ts +++ b/src/main/managed-server/host-state/orcad-state-snapshot.ts @@ -7,7 +7,7 @@ import { posixOrcadFenceOwnedTest, type OrcadFence } from '../activation/orcad-activation-fence-scope' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { isWindowsRemoteHost, joinRemotePath, diff --git a/src/main/managed-server/install/orcad-node-runtime-globs.ts b/src/main/managed-server/install/orcad-node-runtime-globs.ts index 62619f6233f..2ef95bca5b3 100644 --- a/src/main/managed-server/install/orcad-node-runtime-globs.ts +++ b/src/main/managed-server/install/orcad-node-runtime-globs.ts @@ -3,7 +3,7 @@ import { ORCAD_NODE_RUNTIME_POSIX_EXECUTABLE, ORCAD_RUNTIMES_DIRNAME } from '../../../shared/orcad-artifacts' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { RELAY_REMOTE_DIR } from '../../ssh/remote-exec/remote-frame-protocol' import { ORCAD_MACHINE_HOMES_DIRNAME } from '../host-state/orcad-machine-home' diff --git a/src/main/managed-server/install/orcad-remote-build-hash.ts b/src/main/managed-server/install/orcad-remote-build-hash.ts index f4f9ca59326..69298daf332 100644 --- a/src/main/managed-server/install/orcad-remote-build-hash.ts +++ b/src/main/managed-server/install/orcad-remote-build-hash.ts @@ -1,5 +1,5 @@ import { ORCAD_LAUNCHER_FILENAME } from '../../../shared/orcad-artifacts' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { execOrcadRemote, type OrcadRemoteExecTarget } from './orcad-remote-runtime-control' import { orcadWindowsSlotOpCommand } from './orcad-remote-windows-node' import { ORCAD_BUILD_HASH_MARKER as BUILD_HASH_MARKER } from '../host-state/orcad-windows-host-script' diff --git a/src/main/managed-server/install/orcad-remote-context.ts b/src/main/managed-server/install/orcad-remote-context.ts index a05d4296d4c..9f1b9e45b6c 100644 --- a/src/main/managed-server/install/orcad-remote-context.ts +++ b/src/main/managed-server/install/orcad-remote-context.ts @@ -25,7 +25,7 @@ import { } from '../host-state/orcad-machine-claim-command' import { execOrcadRemote, type OrcadRemoteExecTarget } from './orcad-remote-runtime-control' import { readRemoteHomeCommand } from '../../ssh/ssh-remote-commands' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { isWindowsRemoteHost, joinRemotePath, diff --git a/src/main/managed-server/install/orcad-remote-decommission.test.ts b/src/main/managed-server/install/orcad-remote-decommission.test.ts index cd56ab53294..ea32f5ae6f1 100644 --- a/src/main/managed-server/install/orcad-remote-decommission.test.ts +++ b/src/main/managed-server/install/orcad-remote-decommission.test.ts @@ -7,7 +7,7 @@ vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => ( ...(await importOriginal()), execCommand: vi.fn() })) -vi.mock('../../../shared/shell-argument-quoting', () => ({ +vi.mock('../../../shared/shell/launch/shell-argument-quoting', () => ({ quotePosixShell: (s: string) => `'${s}'` })) vi.mock('./remote-install-lock', async (importOriginal) => ({ diff --git a/src/main/managed-server/install/orcad-remote-gc.test.ts b/src/main/managed-server/install/orcad-remote-gc.test.ts index 932a43be0ce..919952f29b3 100644 --- a/src/main/managed-server/install/orcad-remote-gc.test.ts +++ b/src/main/managed-server/install/orcad-remote-gc.test.ts @@ -5,7 +5,7 @@ vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => ( ...(await importOriginal()), execCommand: vi.fn() })) -vi.mock('../../../shared/shell-argument-quoting', () => ({ +vi.mock('../../../shared/shell/launch/shell-argument-quoting', () => ({ quotePosixShell: (s: string) => `'${s}'` })) vi.mock('./remote-install-gc-claim', () => ({ diff --git a/src/main/managed-server/install/orcad-remote-gc.ts b/src/main/managed-server/install/orcad-remote-gc.ts index 0ec3b1bf36c..0cd1c2d5d71 100644 --- a/src/main/managed-server/install/orcad-remote-gc.ts +++ b/src/main/managed-server/install/orcad-remote-gc.ts @@ -24,7 +24,7 @@ import { } from '../../ssh/ssh-remote-platform' import { RELAY_REMOTE_DIR } from '../../ssh/remote-exec/remote-frame-protocol' import { orcadWindowsHomeOpCommand } from './orcad-remote-windows-node' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { ORCAD_INSTALL_COMPLETE_FILENAME } from '../../../shared/orcad-artifacts' import { ORCAD_WINDOWS_LIVENESS_MANY_MARKER } from '../host-state/orcad-windows-host-script' diff --git a/src/main/managed-server/install/orcad-remote-install.ts b/src/main/managed-server/install/orcad-remote-install.ts index 25d3b091e19..feefecb2f93 100644 --- a/src/main/managed-server/install/orcad-remote-install.ts +++ b/src/main/managed-server/install/orcad-remote-install.ts @@ -9,7 +9,7 @@ import { execCommand, isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec/remote-exec-command' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import type { OrcadHostTransport } from '../../ssh/orcad-host-transport' import { joinRemotePath, type RemoteHostPlatform } from '../../ssh/ssh-remote-platform' import { ORCAD_INSTALL_MODEL } from './remote-install-model' diff --git a/src/main/managed-server/install/orcad-remote-launch.ts b/src/main/managed-server/install/orcad-remote-launch.ts index 6fa6c37eaff..7d0cfaa1162 100644 --- a/src/main/managed-server/install/orcad-remote-launch.ts +++ b/src/main/managed-server/install/orcad-remote-launch.ts @@ -4,7 +4,7 @@ import { ORCAD_LAUNCHER_FILENAME, ORCAD_SERVER_ENTRY_FILENAME } from '../../../shared/orcad-artifacts' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { isWindowsRemoteHost, joinRemotePath, diff --git a/src/main/managed-server/install/orcad-remote-log-tail.ts b/src/main/managed-server/install/orcad-remote-log-tail.ts index febe7c75d2e..5e72c5e6555 100644 --- a/src/main/managed-server/install/orcad-remote-log-tail.ts +++ b/src/main/managed-server/install/orcad-remote-log-tail.ts @@ -1,6 +1,6 @@ // Decorate logged errors with a bounded redacted host tail, never telemetry; missing host evidence preserves the original failure. import { redactString } from '../../observability/redactor' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { ORCAD_LOG_FILENAME } from './orcad-remote-host-support' import { execCommand } from '../../ssh/remote-exec/remote-exec-command' import { diff --git a/src/main/managed-server/install/orcad-remote-node-runtime-recorded-probe.ts b/src/main/managed-server/install/orcad-remote-node-runtime-recorded-probe.ts index 0d86c952951..b73e29b1fc3 100644 --- a/src/main/managed-server/install/orcad-remote-node-runtime-recorded-probe.ts +++ b/src/main/managed-server/install/orcad-remote-node-runtime-recorded-probe.ts @@ -1,6 +1,6 @@ // WSL opt-in reuses verified runtime stat signatures; inode replacement or in-place ctime change forces a full hash. import { pinnedNodeRuntimeAsset, type NodeRuntimeTarget } from '../../../shared/node-runtime-pin' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { joinRemotePath, type RemoteHostPlatform } from '../../ssh/ssh-remote-platform' import { assertPosixOrcadHost } from './orcad-remote-host-support' import { diff --git a/src/main/managed-server/install/orcad-remote-node-runtime.ts b/src/main/managed-server/install/orcad-remote-node-runtime.ts index f9e27cab503..f03cdbddc5f 100644 --- a/src/main/managed-server/install/orcad-remote-node-runtime.ts +++ b/src/main/managed-server/install/orcad-remote-node-runtime.ts @@ -15,7 +15,7 @@ import { orcadNodeRuntimeExecutable } from '../../../shared/orcad-artifacts' import type { OrcadHostTransport } from '../../ssh/orcad-host-transport' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { execCommand, isUnconfirmedSshCommandTermination diff --git a/src/main/managed-server/install/orcad-remote-preflight.ts b/src/main/managed-server/install/orcad-remote-preflight.ts index b09ff08138b..977ec9c460b 100644 --- a/src/main/managed-server/install/orcad-remote-preflight.ts +++ b/src/main/managed-server/install/orcad-remote-preflight.ts @@ -17,7 +17,7 @@ import { readWindowsOrcadSlotEntry } from './orcad-remote-launch-windows' import { ORCAD_WINDOWS_RUNTIME_MARKER } from '../host-state/orcad-windows-host-script' import { orcadNodeSlotRuntimeCommand, selectOrcadSlotEntryCommand } from './orcad-remote-runtime' import { execCommand } from '../../ssh/remote-exec/remote-exec-command' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { isWindowsRemoteHost, joinRemotePath, diff --git a/src/main/managed-server/install/orcad-remote-process-control.ts b/src/main/managed-server/install/orcad-remote-process-control.ts index 445a812f11b..544ca65f611 100644 --- a/src/main/managed-server/install/orcad-remote-process-control.ts +++ b/src/main/managed-server/install/orcad-remote-process-control.ts @@ -1,5 +1,5 @@ // SIGKILL skips durable shutdown and instance-lock release; preserve owners that outlast the stop wait. -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { isWindowsRemoteHost, joinRemotePath, diff --git a/src/main/managed-server/install/orcad-remote-readiness-wait.test.ts b/src/main/managed-server/install/orcad-remote-readiness-wait.test.ts index 0fd6f8ed810..008c358ae06 100644 --- a/src/main/managed-server/install/orcad-remote-readiness-wait.test.ts +++ b/src/main/managed-server/install/orcad-remote-readiness-wait.test.ts @@ -5,7 +5,7 @@ import { afterEach, describe, expect, it } from 'vitest' import { runProcess } from '@orca/process-host' import { orcadReadinessWaitCommand } from './orcad-remote-readiness-wait' import { getRemoteHostPlatform } from '../../ssh/ssh-remote-platform' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { ORCAD_LAUNCH_MACHINE_COMMAND } from './orcad-remote-host-support' const roots: string[] = [] diff --git a/src/main/managed-server/install/orcad-remote-readiness-wait.ts b/src/main/managed-server/install/orcad-remote-readiness-wait.ts index 975d66929c5..4f3067267e8 100644 --- a/src/main/managed-server/install/orcad-remote-readiness-wait.ts +++ b/src/main/managed-server/install/orcad-remote-readiness-wait.ts @@ -1,5 +1,5 @@ // Wait on-host in one bounded exec; repeated SSH polling spawned process bursts and triggered Windows EDR. -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { isWindowsRemoteHost, joinRemotePath, diff --git a/src/main/managed-server/install/orcad-remote-record-file.ts b/src/main/managed-server/install/orcad-remote-record-file.ts index 4fd4f22d0a9..537d05247a1 100644 --- a/src/main/managed-server/install/orcad-remote-record-file.ts +++ b/src/main/managed-server/install/orcad-remote-record-file.ts @@ -1,6 +1,6 @@ // Unreadable host records must not look absent: deploying over an unknown live install is unsafe. import { randomUUID } from 'node:crypto' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { removeRemoteFileCommand } from '../../ssh/ssh-remote-commands' import { execOrcadRemote, type OrcadRemoteExecTarget } from './orcad-remote-runtime-control' import { isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec/remote-exec-command' 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 e4ad5deeccf..14b19dc1655 100644 --- a/src/main/managed-server/install/orcad-remote-rollback.test.ts +++ b/src/main/managed-server/install/orcad-remote-rollback.test.ts @@ -9,7 +9,7 @@ vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => ( ...(await importOriginal()), execCommand: vi.fn() })) -vi.mock('../../../shared/shell-argument-quoting', () => ({ +vi.mock('../../../shared/shell/launch/shell-argument-quoting', () => ({ quotePosixShell: (s: string) => `'${s}'` })) vi.mock('./remote-install-transfers', () => ({ diff --git a/src/main/managed-server/install/orcad-remote-runtime.test.ts b/src/main/managed-server/install/orcad-remote-runtime.test.ts index e1e4ec6ee0e..eb9108b1e48 100644 --- a/src/main/managed-server/install/orcad-remote-runtime.test.ts +++ b/src/main/managed-server/install/orcad-remote-runtime.test.ts @@ -6,7 +6,7 @@ import { runProcessSync } from '@orca/process-host' import { getRemoteHostPlatform } from '../../ssh/ssh-remote-platform' import { selectOrcadSlotRuntimeCommand } from './orcad-remote-runtime' import { stopOrcadCommand } from './orcad-remote-process-control' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' const directories: string[] = [] const host = getRemoteHostPlatform('linux-x64') diff --git a/src/main/managed-server/install/orcad-remote-runtime.ts b/src/main/managed-server/install/orcad-remote-runtime.ts index 7562b34d721..df22d7c318c 100644 --- a/src/main/managed-server/install/orcad-remote-runtime.ts +++ b/src/main/managed-server/install/orcad-remote-runtime.ts @@ -9,7 +9,7 @@ import { orcadBunRuntimeFilename } from '../../../shared/orcad-artifacts' import { assertPosixOrcadHost } from './orcad-remote-host-support' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { joinRemotePath, type RemoteHostPlatform } from '../../ssh/ssh-remote-platform' // Assign the long slot path once to reduce command size on the wire. diff --git a/src/main/managed-server/install/orcad-remote-shell-commands.integration.test.ts b/src/main/managed-server/install/orcad-remote-shell-commands.integration.test.ts index b3553216f82..962824d012f 100644 --- a/src/main/managed-server/install/orcad-remote-shell-commands.integration.test.ts +++ b/src/main/managed-server/install/orcad-remote-shell-commands.integration.test.ts @@ -31,7 +31,7 @@ import { parseOrcadStopOutcome, stopOrcadCommand } from './orcad-remote-process-control' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { orcadReadinessWaitCommand, parseOrcadReadinessWaitOutput diff --git a/src/main/managed-server/install/remote-install-gc-claim.ts b/src/main/managed-server/install/remote-install-gc-claim.ts index b54dd02fa88..ff1300f1f95 100644 --- a/src/main/managed-server/install/remote-install-gc-claim.ts +++ b/src/main/managed-server/install/remote-install-gc-claim.ts @@ -1,6 +1,6 @@ import { randomUUID } from 'node:crypto' import type { RemoteInstallTransport } from './remote-install-transport' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { execHostCommand } from '../../ssh/remote-exec/remote-host-exec' import { isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec/remote-exec-command' import { diff --git a/src/main/managed-server/install/remote-install-gc-listing.test-fixture.ts b/src/main/managed-server/install/remote-install-gc-listing.test-fixture.ts index 815aec8eb76..d307373e147 100644 --- a/src/main/managed-server/install/remote-install-gc-listing.test-fixture.ts +++ b/src/main/managed-server/install/remote-install-gc-listing.test-fixture.ts @@ -6,7 +6,7 @@ import { PassThrough } from 'node:stream' import type { ClientChannel } from 'ssh2' import { runProcess, spawnProcess } from '@orca/process-host' import type { SshConnection } from '../../ssh/connection/ssh-connection' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { execCommand } from '../../ssh/remote-exec/remote-exec-command' export const SSH_EXEC_OUTPUT_CAP_CHARS = 1024 * 1024 diff --git a/src/main/managed-server/install/remote-install-lock-commands.ts b/src/main/managed-server/install/remote-install-lock-commands.ts index 80a2f9ac9cb..e8236256725 100644 --- a/src/main/managed-server/install/remote-install-lock-commands.ts +++ b/src/main/managed-server/install/remote-install-lock-commands.ts @@ -1,4 +1,4 @@ -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { powerShellCommand } from '../../ssh/ssh-remote-powershell' import { quotePowerShellLiteral as powerShellLiteral } from '../../../shared/powershell-native-argument' import { isWindowsRemoteHost, type RemoteHostPlatform } from '../../ssh/ssh-remote-platform' diff --git a/src/main/managed-server/install/remote-install-lock-exited-owner.ts b/src/main/managed-server/install/remote-install-lock-exited-owner.ts index 1f0e1fde9be..e17e84aaa5d 100644 --- a/src/main/managed-server/install/remote-install-lock-exited-owner.ts +++ b/src/main/managed-server/install/remote-install-lock-exited-owner.ts @@ -1,4 +1,4 @@ -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import type { InstallLockOwnerFile } from './remote-install-lock-commands' import { quotePowerShellLiteral as powerShellLiteral } from '../../../shared/powershell-native-argument' import { diff --git a/src/main/managed-server/install/remote-install-out-of-space.ts b/src/main/managed-server/install/remote-install-out-of-space.ts index 928b66bcebd..7c9a73b2026 100644 --- a/src/main/managed-server/install/remote-install-out-of-space.ts +++ b/src/main/managed-server/install/remote-install-out-of-space.ts @@ -7,7 +7,7 @@ import { dfAvailableKb, formatKb } from '../host-state/remote-filesystem-space' import { execHostCommand } from '../../ssh/remote-exec/remote-host-exec' import { isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec/remote-exec-command' import { isWindowsRemoteHost, type RemoteHostPlatform } from '../../ssh/ssh-remote-platform' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' const DIAGNOSIS_TIMEOUT_MS = 15_000 const SSH_FX_FAILURE = 4 diff --git a/src/main/managed-server/install/remote-node-runtime-host-download.ts b/src/main/managed-server/install/remote-node-runtime-host-download.ts index 7997414d2f6..5c92ce084c6 100644 --- a/src/main/managed-server/install/remote-node-runtime-host-download.ts +++ b/src/main/managed-server/install/remote-node-runtime-host-download.ts @@ -8,7 +8,7 @@ import { pinnedNodeRuntimeAsset, type NodeRuntimeTarget } from '../../../shared/node-runtime-pin' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { isWindowsRemoteHost, joinRemotePath, diff --git a/src/main/managed-server/install/remote-node-runtime-store-gc.ts b/src/main/managed-server/install/remote-node-runtime-store-gc.ts index d98b66478ad..ab1a7a37a6b 100644 --- a/src/main/managed-server/install/remote-node-runtime-store-gc.ts +++ b/src/main/managed-server/install/remote-node-runtime-store-gc.ts @@ -15,7 +15,7 @@ import { remoteNodeRuntimeStoreDir, tryWithRuntimeStoreLock } from './remote-node-runtime-store-lock' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { execCommand, isUnconfirmedSshCommandTermination diff --git a/src/main/managed-server/install/remote-node-runtime-store-inventory.ts b/src/main/managed-server/install/remote-node-runtime-store-inventory.ts index a5fd623af62..74c5fff3ed8 100644 --- a/src/main/managed-server/install/remote-node-runtime-store-inventory.ts +++ b/src/main/managed-server/install/remote-node-runtime-store-inventory.ts @@ -3,7 +3,7 @@ import { ORCAD_NODE_RUNTIME_MARKER_FILENAME, ORCAD_RUNTIMES_DIRNAME } from '../../../shared/orcad-artifacts' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { RELAY_REMOTE_DIR } from '../../ssh/remote-exec/remote-frame-protocol' import { joinRemotePath, type RemoteHostPlatform } from '../../ssh/ssh-remote-platform' diff --git a/src/main/managed-server/install/remote-node-runtime-store-lock.ts b/src/main/managed-server/install/remote-node-runtime-store-lock.ts index fba59850f4b..e5ba1bd9032 100644 --- a/src/main/managed-server/install/remote-node-runtime-store-lock.ts +++ b/src/main/managed-server/install/remote-node-runtime-store-lock.ts @@ -2,7 +2,7 @@ import { randomUUID } from 'node:crypto' import { ORCAD_RUNTIMES_DIRNAME } from '../../../shared/orcad-artifacts' import type { RemoteInstallTransport } from './remote-install-transport' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { execHostCommand } from '../../ssh/remote-exec/remote-host-exec' import { isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec/remote-exec-command' import { acquireInstallLock, INSTALL_LOCK_STALE_SECONDS } from './remote-install-lock' diff --git a/src/main/managed-server/install/remote-versioned-install.test.ts b/src/main/managed-server/install/remote-versioned-install.test.ts index 2c85651bf1b..b22d53cc220 100644 --- a/src/main/managed-server/install/remote-versioned-install.test.ts +++ b/src/main/managed-server/install/remote-versioned-install.test.ts @@ -6,7 +6,7 @@ vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => ( execCommand: vi.fn() })) -vi.mock('../../../shared/shell-argument-quoting', () => ({ +vi.mock('../../../shared/shell/launch/shell-argument-quoting', () => ({ quotePosixShell: (s: string) => `'${s}'` })) diff --git a/src/main/managed-server/lifecycle/orcad-managed-remote-stop.ts b/src/main/managed-server/lifecycle/orcad-managed-remote-stop.ts index a09c2b9efe2..e9bbdd7d767 100644 --- a/src/main/managed-server/lifecycle/orcad-managed-remote-stop.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-remote-stop.ts @@ -1,6 +1,6 @@ // Readiness and instance-lock records must agree before the slot's own build requests a stop. import { randomUUID } from 'node:crypto' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { selectOrcadSlotRuntimeCommand } from '../install/orcad-remote-runtime' import { parseOrcadReadinessWaitOutput, diff --git a/src/main/managed-server/lifecycle/orcad-managed-stale-lock-reclaim.test.ts b/src/main/managed-server/lifecycle/orcad-managed-stale-lock-reclaim.test.ts index 70f05472041..c143ce1611d 100644 --- a/src/main/managed-server/lifecycle/orcad-managed-stale-lock-reclaim.test.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-stale-lock-reclaim.test.ts @@ -6,7 +6,7 @@ import { chmodSync, existsSync, mkdirSync, mkdtempSync, rmSync, writeFileSync } import { tmpdir } from 'node:os' import { join } from 'node:path' import { runProcess } from '@orca/process-host' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { ORCAD_INSTALL_MODEL } from '../install/remote-install-model' import { computeRemoteInstallDir } from '../install/remote-versioned-install' diff --git a/src/main/managed-server/lifecycle/orcad-managed-stale-lock-reclaim.ts b/src/main/managed-server/lifecycle/orcad-managed-stale-lock-reclaim.ts index c5c88faa750..8d367c5ebdb 100644 --- a/src/main/managed-server/lifecycle/orcad-managed-stale-lock-reclaim.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-stale-lock-reclaim.ts @@ -1,6 +1,6 @@ // Let the active slot gather lock evidence and apply nonce-pinned confirmation; clients only relay it. import { z } from 'zod' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { ORCAD_RECLAIM_STALE_LOCK_FLAG, ORCAD_STALE_LOCK_DATA_ROOT_FLAG, diff --git a/src/main/managed-server/lifecycle/orcad-managed-wake-one-fence.test.ts b/src/main/managed-server/lifecycle/orcad-managed-wake-one-fence.test.ts index b582f0155a2..91ae8855f25 100644 --- a/src/main/managed-server/lifecycle/orcad-managed-wake-one-fence.test.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-wake-one-fence.test.ts @@ -7,7 +7,7 @@ vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => ( ...(await importOriginal()), execCommand: vi.fn() })) -vi.mock('../../../shared/shell-argument-quoting', () => ({ +vi.mock('../../../shared/shell/launch/shell-argument-quoting', () => ({ quotePosixShell: (s: string) => `'${s}'` })) vi.mock('../install/remote-install-lock', async (importOriginal) => ({ diff --git a/src/main/managed-server/lifecycle/orcad-managed-wake.test.ts b/src/main/managed-server/lifecycle/orcad-managed-wake.test.ts index 6e1120db95e..7d7c31448dd 100644 --- a/src/main/managed-server/lifecycle/orcad-managed-wake.test.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-wake.test.ts @@ -6,7 +6,7 @@ vi.mock('../../ssh/remote-exec/remote-exec-command', async (importOriginal) => ( ...(await importOriginal()), execCommand: vi.fn() })) -vi.mock('../../../shared/shell-argument-quoting', () => ({ +vi.mock('../../../shared/shell/launch/shell-argument-quoting', () => ({ quotePosixShell: (s: string) => `'${s}'` })) vi.mock('../install/remote-install-lock', async (importOriginal) => ({ diff --git a/src/main/managed-server/lifecycle/orcad-stdio-bridge-script.ts b/src/main/managed-server/lifecycle/orcad-stdio-bridge-script.ts index 9a00c91e88f..b4dc0fd264f 100644 --- a/src/main/managed-server/lifecycle/orcad-stdio-bridge-script.ts +++ b/src/main/managed-server/lifecycle/orcad-stdio-bridge-script.ts @@ -1,5 +1,5 @@ // Sentinels skip noisy login profiles; base64 framing prevents PowerShell text decoding from corrupting bytes. -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { orcadPosixNodeRuntimeGlobs } from '../install/orcad-node-runtime-globs' export type OrcadStdioBridgeMode = 'raw' | 'base64' diff --git a/src/main/memory/hydrate-local-pty-registry.ts b/src/main/memory/hydrate-local-pty-registry.ts index d60e40310d8..7e6a31c0c6d 100644 --- a/src/main/memory/hydrate-local-pty-registry.ts +++ b/src/main/memory/hydrate-local-pty-registry.ts @@ -1,7 +1,7 @@ import { getRepoExecutionHostId, LOCAL_EXECUTION_HOST_ID } from '../../shared/execution-host' import { throwIfSignalAborted, waitForPromiseWithSignal } from '../../shared/abort-signal-reason' import { mapSettledWithConcurrency } from '../../shared/map-with-concurrency' -import { parsePtySessionId } from '../../shared/pty-session-id-format' +import { parsePtySessionId } from '../../shared/terminal/pty/lifecycle/pty-session-id-format' import { isFolderRepo } from '../../shared/repo-kind' import type { Repo } from '../../shared/repo-types' import { splitWorktreeId, worktreeIdentityKey } from '../../shared/worktree/id' diff --git a/src/main/native-chat/native-chat-media-path.test.ts b/src/main/native-chat/native-chat-media-path.test.ts index c9abffef6d5..c630a4703d4 100644 --- a/src/main/native-chat/native-chat-media-path.test.ts +++ b/src/main/native-chat/native-chat-media-path.test.ts @@ -9,7 +9,7 @@ import { grokEncodedCwdDirName } from '../../shared/grok-session-paths' import type { AgentStatusIpcPayload } from '../../shared/agent-status/contracts/agent-status-ipc-payload' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { AgentHookServer } from '../agent-hooks/server' import { agentHookRuntimeDeps } from '../agent-hooks/agent-hook-runtime-deps' import * as statusIdentity from '../agent-hooks/server/server-status-identity' diff --git a/src/main/native-chat/native-chat-media-path.ts b/src/main/native-chat/native-chat-media-path.ts index eaabe5e79d1..b3b3f479933 100644 --- a/src/main/native-chat/native-chat-media-path.ts +++ b/src/main/native-chat/native-chat-media-path.ts @@ -7,7 +7,7 @@ import { MAX_AGENT_SESSION_PROVIDER_HANDLE_LINKS } from '../../shared/agent-sess import { structuredAgentSessionTabId } from '../../shared/agent-session/view/structured-agent-session-projection' import type { RuntimeNativeChatFileContext } from '../../shared/runtime-types' import type { ExecutionHostId } from '../../shared/execution-host' -import { parsePaneKey } from '../../shared/stable-pane-id' +import { parsePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { findGrokChatHistoryByCwd, findGrokChatHistoryBySessionId, diff --git a/src/main/notifications/notification-delivery-service.test.ts b/src/main/notifications/notification-delivery-service.test.ts index 3cdd90ad78f..bf85bad3210 100644 --- a/src/main/notifications/notification-delivery-service.test.ts +++ b/src/main/notifications/notification-delivery-service.test.ts @@ -5,9 +5,12 @@ import { } from '../runtime/push/push-dispatcher.test-fixture' import { beforeEach, describe, expect, it, vi } from 'vitest' import type { BrowserWindow } from 'electron' -import { createNotificationDeliveryService } from './notification-delivery-service' -import { toWebTerminalSurfaceTabId } from '../../shared/terminal-surface-id' -import type { NotificationDeliveryDependencies } from './notification-delivery-service' +import { + createNotificationDeliveryService, + type NotificationDeliveryDependencies +} from './notification-delivery-service' +import { toWebTerminalSurfaceTabId } from '../../shared/workspace-layout/terminal-surface-id' + import type { NotificationDispatchRequest, NotificationSettings diff --git a/src/main/notifications/notification-delivery-service.ts b/src/main/notifications/notification-delivery-service.ts index e934789b82e..ebfdb8362d2 100644 --- a/src/main/notifications/notification-delivery-service.ts +++ b/src/main/notifications/notification-delivery-service.ts @@ -9,7 +9,7 @@ import type { OrcaRuntimeService } from '../runtime/orca-runtime' import { buildNotificationOptions } from '../ipc/notification-options' import { translateMain } from '../i18n/main-i18n' import { reserveNotificationCooldown } from '../../shared/notification-burst-cooldown' -import { toHostSessionPaneKey } from '../../shared/terminal-surface-id' +import { toHostSessionPaneKey } from '../../shared/workspace-layout/terminal-surface-id' import { isNotificationSourceEnabled } from '../../shared/notification-source-gate' import { notificationDeliveryId } from '../../shared/notification-delivery-id' diff --git a/src/main/opencode/opencode-session-binder.test.ts b/src/main/opencode/opencode-session-binder.test.ts index 404d97acffe..7bbe0bc0068 100644 --- a/src/main/opencode/opencode-session-binder.test.ts +++ b/src/main/opencode/opencode-session-binder.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest' import { createHookListenerState } from '../../shared/agent-hook-listener/listener-state' import { lookupOpenCodeSessionPane } from '../../shared/agent-hook-listener/opencode-session-registry' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import type { ProcessIdentityRow } from './opencode-client-sweep' import { advanceBinderCursor, diff --git a/src/main/opencode/opencode-startup-prompt-owner.ts b/src/main/opencode/opencode-startup-prompt-owner.ts index 12c4d98ea6b..e7b3ed5ab40 100644 --- a/src/main/opencode/opencode-startup-prompt-owner.ts +++ b/src/main/opencode/opencode-startup-prompt-owner.ts @@ -4,7 +4,7 @@ import type { OrcaRuntimeService } from '../runtime/orca-runtime' import type { IPtyProvider, PtySpawnResult } from '../providers/pty-provider-contract' import { ptyIncarnationById, ptyOwnership } from '../ipc/pty/provider/ownership-state' import { LOCAL_EXECUTION_HOST_ID } from '../../shared/execution-host' -import { isPtyIncarnationId } from '../../shared/pty-incarnation' +import { isPtyIncarnationId } from '../../shared/terminal/pty/lifecycle/pty-incarnation' import { OPENCODE_STARTUP_PROMPT_NONCE_ENV, OPENCODE_STARTUP_PROMPT_SHA256_ENV diff --git a/src/main/orca-profiles/profile-project-session-field-disposition.test.ts b/src/main/orca-profiles/profile-project-session-field-disposition.test.ts index 0fd063fc169..6faa318d1b7 100644 --- a/src/main/orca-profiles/profile-project-session-field-disposition.test.ts +++ b/src/main/orca-profiles/profile-project-session-field-disposition.test.ts @@ -1,8 +1,11 @@ import { describe, expect, it } from 'vitest' import { getDefaultWorkspaceSession } from '../../shared/constants' -import { CLIENT_HOSTED_BROWSER_PAGE_RECORD_VERSION } from '../../shared/client-hosted-browser-page-record' -import type { PersistedClientHostedBrowserPage } from '../../shared/client-hosted-browser-page-record' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import { + CLIENT_HOSTED_BROWSER_PAGE_RECORD_VERSION, + type PersistedClientHostedBrowserPage +} from '../../shared/workspace-session/client-hosted-browser-page-record' + +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { SESSION_FIELDS_COPIED_BY_OWNER_KEY, SESSION_FIELDS_PRUNED_BY_OWNER_KEY, diff --git a/src/main/orca-profiles/profile-project-session-field-disposition.ts b/src/main/orca-profiles/profile-project-session-field-disposition.ts index af8b557736e..392c4eda37c 100644 --- a/src/main/orca-profiles/profile-project-session-field-disposition.ts +++ b/src/main/orca-profiles/profile-project-session-field-disposition.ts @@ -1,4 +1,4 @@ -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' export type SessionFieldRepoRemovalDisposition = /** Delete map keys belonging to the repo. */ diff --git a/src/main/orca-profiles/profile-project-session-state.test.ts b/src/main/orca-profiles/profile-project-session-state.test.ts index 1d9a64870c3..0a54730233d 100644 --- a/src/main/orca-profiles/profile-project-session-state.test.ts +++ b/src/main/orca-profiles/profile-project-session-state.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import { getDefaultWorkspaceSession } from '../../shared/constants' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { mergeWorkspaceSessions, removeRepoFromWorkspaceSession diff --git a/src/main/orca-profiles/profile-project-session-state.ts b/src/main/orca-profiles/profile-project-session-state.ts index a967a867dd0..699b3281b43 100644 --- a/src/main/orca-profiles/profile-project-session-state.ts +++ b/src/main/orca-profiles/profile-project-session-state.ts @@ -1,6 +1,6 @@ import { getDefaultWorkspaceSession } from '../../shared/constants' import type { ExecutionHostId } from '../../shared/execution-host' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { parseWorkspaceKey } from '../../shared/workspace-scope' import { SESSION_FIELDS_PRUNED_BY_OWNER_KEY } from './profile-project-session-field-disposition' import { markdownFileIdCandidates } from './profile-session-markdown-transfer' diff --git a/src/main/orca-profiles/profile-project-session-transfer.ts b/src/main/orca-profiles/profile-project-session-transfer.ts index 39c3b3b6189..97f6f501e8a 100644 --- a/src/main/orca-profiles/profile-project-session-transfer.ts +++ b/src/main/orca-profiles/profile-project-session-transfer.ts @@ -1,5 +1,5 @@ import type { ExecutionHostId } from '../../shared/execution-host' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { rekeyOwnerKey, rekeyWorktreeId } from './profile-project-worktree-identity' import { extractSessionOwnersForTransfer, diff --git a/src/main/orca-profiles/profile-project-source-removal.ts b/src/main/orca-profiles/profile-project-source-removal.ts index 12ed61d3d24..36a8db52d21 100644 --- a/src/main/orca-profiles/profile-project-source-removal.ts +++ b/src/main/orca-profiles/profile-project-source-removal.ts @@ -1,5 +1,4 @@ -import type { WorkspaceKey } from '../../shared/folder-workspaces/folder-workspace-types' -import { parseWorkspaceKey } from '../../shared/workspace-scope' +import { type WorkspaceKey, parseWorkspaceKey } from '../../shared/workspace-scope' import { rebuildRepoBackedProjectState, type TransferProfileState diff --git a/src/main/orca-profiles/profile-project-state-file.ts b/src/main/orca-profiles/profile-project-state-file.ts index 57977e33c4e..480cdc7d1ee 100644 --- a/src/main/orca-profiles/profile-project-state-file.ts +++ b/src/main/orca-profiles/profile-project-state-file.ts @@ -10,7 +10,7 @@ import { carryProjectStateThroughIdentityChange } from '../../shared/project-ide import type { PersistedState } from '../../shared/persisted-state-types' import type { Project, ProjectHostSetup } from '../../shared/project-types' import type { Repo } from '../../shared/repo-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import type { SparsePreset } from '../../shared/worktree/create-types' import type { RetiredNameRegistry } from '../../shared/worktree/retired-name-registry' import { getOrcaProfileDataFile, getOrcaProfileStateDatabaseFile } from './profile-index-store' diff --git a/src/main/orca-profiles/profile-project-transfer-payload.ts b/src/main/orca-profiles/profile-project-transfer-payload.ts index 17784cb5c3a..81d683bd822 100644 --- a/src/main/orca-profiles/profile-project-transfer-payload.ts +++ b/src/main/orca-profiles/profile-project-transfer-payload.ts @@ -2,7 +2,7 @@ import { randomUUID } from 'node:crypto' import { getRepoExecutionHostId, type ExecutionHostId } from '../../shared/execution-host' import { projectHostSetupProjectionFromRepos } from '../../shared/project-host-setup-projection' import type { SshTarget } from '../../shared/ssh-types' -import type { WorkspaceKey } from '../../shared/folder-workspaces/folder-workspace-types' +import type { WorkspaceKey } from '../../shared/workspace-scope' import type { PersistedState } from '../../shared/persisted-state-types' import type { Repo } from '../../shared/repo-types' import type { SparsePreset } from '../../shared/worktree/create-types' diff --git a/src/main/orca-profiles/profile-project-worktree-identity.ts b/src/main/orca-profiles/profile-project-worktree-identity.ts index 176284aa828..4ae58b136a8 100644 --- a/src/main/orca-profiles/profile-project-worktree-identity.ts +++ b/src/main/orca-profiles/profile-project-worktree-identity.ts @@ -1,9 +1,14 @@ import { normalizeRuntimePathForComparison } from '../../shared/cross-platform-path' import { getRepoExecutionHostId } from '../../shared/execution-host' -import type { WorkspaceKey } from '../../shared/folder-workspaces/folder-workspace-types' + import type { Repo } from '../../shared/repo-types' -import { parseWorkspaceKey, worktreeWorkspaceKey } from '../../shared/workspace-scope' -import { WORKTREE_ID_SEPARATOR } from '../../shared/worktree/id' +import { + type WorkspaceKey, + parseWorkspaceKey, + worktreeWorkspaceKey +} from '../../shared/workspace-scope' +import '../../shared/worktree/id' +import { WORKTREE_ID_SEPARATOR } from '../../shared/terminal/pty/lifecycle/pty-session-id-format' import { getWorktreeIdFromHostIdentity, isWorktreeHostIdentity diff --git a/src/main/orca-profiles/profile-session-markdown-transfer.ts b/src/main/orca-profiles/profile-session-markdown-transfer.ts index e6f810ee745..eeb38e98725 100644 --- a/src/main/orca-profiles/profile-session-markdown-transfer.ts +++ b/src/main/orca-profiles/profile-session-markdown-transfer.ts @@ -1,5 +1,5 @@ -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' -import { ownedEditorFileId } from '../../shared/workspace-session-pane-ownership' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' +import { ownedEditorFileId } from '../../shared/workspace-session/workspace-session-pane-ownership' type OwnerProjection = { mapOwnerKey: (ownerKey: string) => string | null diff --git a/src/main/orca-profiles/profile-session-owner-transfer.test.ts b/src/main/orca-profiles/profile-session-owner-transfer.test.ts index e681157d794..49604a40180 100644 --- a/src/main/orca-profiles/profile-session-owner-transfer.test.ts +++ b/src/main/orca-profiles/profile-session-owner-transfer.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import { getDefaultWorkspaceSession } from '../../shared/constants' -import type { PersistedOpenFile } from '../../shared/workspace-session-state-types' +import type { PersistedOpenFile } from '../../shared/workspace-session/workspace-session-state-types' import { buildMarkdownFrontmatterIdMap } from './profile-session-markdown-transfer' import { extractSessionOwnersForTransfer } from './profile-session-owner-transfer' diff --git a/src/main/orca-profiles/profile-session-owner-transfer.ts b/src/main/orca-profiles/profile-session-owner-transfer.ts index 217afc181ef..90c285f6d53 100644 --- a/src/main/orca-profiles/profile-session-owner-transfer.ts +++ b/src/main/orca-profiles/profile-session-owner-transfer.ts @@ -3,11 +3,11 @@ import type { SleepingAgentSessionRecord } from '../../shared/agent-session/life import type { BrowserPage, BrowserWorkspace } from '../../shared/browser-workspace-types' import { remapBrowserPageDocLocation } from '../../shared/browser-page-doc-location' import type { Tab, TabGroup } from '../../shared/tab-types' -import type { TerminalTab } from '../../shared/terminal-tab-types' +import type { TerminalTab } from '../../shared/workspace-layout/terminal-tab-types' import type { PersistedOpenFile, WorkspaceSessionState -} from '../../shared/workspace-session-state-types' +} from '../../shared/workspace-session/workspace-session-state-types' import { isWorkspaceKey } from '../../shared/workspace-scope' import { SESSION_FIELDS_COPIED_BY_OWNER_KEY } from './profile-project-session-field-disposition' import { mapMarkdownFrontmatterVisible } from './profile-session-markdown-transfer' @@ -16,7 +16,7 @@ export { buildMarkdownFrontmatterIdMap, markdownFileIdCandidates } from './profile-session-markdown-transfer' -import { paneBelongsToTabs } from '../../shared/workspace-session-pane-ownership' +import { paneBelongsToTabs } from '../../shared/workspace-session/workspace-session-pane-ownership' export type SessionOwnerProjection = { mapOwnerKey: (ownerKey: string) => string | null diff --git a/src/main/orcad/orcad-bundled-runtime.integration.test.ts b/src/main/orcad/orcad-bundled-runtime.integration.test.ts index e1c5ede0838..4f991512d1d 100644 --- a/src/main/orcad/orcad-bundled-runtime.integration.test.ts +++ b/src/main/orcad/orcad-bundled-runtime.integration.test.ts @@ -6,7 +6,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { runProcess, spawnProcess } from '@orca/process-host' import { NODE_RUNTIME_ASSETS } from '../../shared/node-runtime-pin' import { orcadNodeRuntimeRelativePath } from '../../shared/orcad-artifacts' -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' const TARGET = 'darwin-arm64' const SHA = NODE_RUNTIME_ASSETS[TARGET].executableSha256 diff --git a/src/main/orcad/orcad-health.ts b/src/main/orcad/orcad-health.ts index 7e1263b5aac..308b8d67885 100644 --- a/src/main/orcad/orcad-health.ts +++ b/src/main/orcad/orcad-health.ts @@ -3,7 +3,7 @@ import { hashOrcadLauncher } from '../../shared/orcad-build-identity' import { confirmPtyProcessCeiling, type PtyProcessCeilingState -} from '../../shared/pty-process-ceiling-state' +} from '../../shared/terminal/pty/native-process/pty-process-ceiling-state' import process from 'node:process' import { checkDaemonHealthWithCoverage, type DaemonHealth } from '../daemon/daemon-health' import { ptySpawnHealthPlatformCoverage } from '../daemon/daemon-health-identity' diff --git a/src/main/orcad/orcad-packaged-structured-chat.integration.test.ts b/src/main/orcad/orcad-packaged-structured-chat.integration.test.ts index 0462d363b06..65ad62692d8 100644 --- a/src/main/orcad/orcad-packaged-structured-chat.integration.test.ts +++ b/src/main/orcad/orcad-packaged-structured-chat.integration.test.ts @@ -35,7 +35,7 @@ import { type RemoteRuntimeSubscription } from '../../shared/remote-runtime/remote-runtime-client' import { claudeSessionIdForOrcaSession } from '../claude/structured/claude-structured-session-id' -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' import { materializeOrcadArtifact } from './orcad-artifact-materializer' import { hostServerTarget, diff --git a/src/main/persistence/__fixtures__/wsl-mover/wsl-mover-heavy-profile.ts b/src/main/persistence/__fixtures__/wsl-mover/wsl-mover-heavy-profile.ts index fa298499129..9fb28f16796 100644 --- a/src/main/persistence/__fixtures__/wsl-mover/wsl-mover-heavy-profile.ts +++ b/src/main/persistence/__fixtures__/wsl-mover/wsl-mover-heavy-profile.ts @@ -1,4 +1,4 @@ -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import type { WslMoveProjectionInput } from '../../moving-wsl-projects/wsl-move-state-projection' import { project, diff --git a/src/main/persistence/__fixtures__/wsl-mover/wsl-mover-profile-rows.ts b/src/main/persistence/__fixtures__/wsl-mover/wsl-mover-profile-rows.ts index 184b1bd94e2..d9c7ec8aab3 100644 --- a/src/main/persistence/__fixtures__/wsl-mover/wsl-mover-profile-rows.ts +++ b/src/main/persistence/__fixtures__/wsl-mover/wsl-mover-profile-rows.ts @@ -1,6 +1,6 @@ import type { Project } from '../../../../shared/project-types' import type { Repo } from '../../../../shared/repo-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { Tab, TabGroup } from '../../../../shared/tab-types' import type { WorktreeMeta } from '../../../../shared/worktree/meta-types' diff --git a/src/main/persistence/applying-settings/settings-update.ts b/src/main/persistence/applying-settings/settings-update.ts index e770663a193..5ca90e6fb75 100644 --- a/src/main/persistence/applying-settings/settings-update.ts +++ b/src/main/persistence/applying-settings/settings-update.ts @@ -15,7 +15,7 @@ import { assertTerminalQuickCommandsStorable } from '../../../shared/terminal/qu import { normalizeTerminalCustomThemes } from '../../../shared/terminal-themes/terminal-custom-themes' import { normalizePluginOwnedSettings } from '../../../shared/plugins/capabilities/plugin-owned-settings' import { legacyMatchTerminalSidebarWrite } from '../../../shared/plugin-theme-settings' -import { normalizeTerminalDefaultShell } from '../../../shared/terminal-default-shell' +import { normalizeTerminalDefaultShell } from '../../../shared/shell/launch/terminal-default-shell' import { normalizeTerminalCursorStyleDefault } from '../../../shared/terminal/appearance/terminal-cursor-style-settings' import { normalizeDesktopTerminalScrollbackRows } from '../../../shared/terminal/replay/terminal-scrollback-policy' import { normalizeTerminalMinimumContrastRatio } from '../../../shared/terminal-themes/terminal-minimum-contrast-settings' diff --git a/src/main/persistence/applying-settings/ui-interaction-merge.ts b/src/main/persistence/applying-settings/ui-interaction-merge.ts index 175c144befe..8c1eca8e8c7 100644 --- a/src/main/persistence/applying-settings/ui-interaction-merge.ts +++ b/src/main/persistence/applying-settings/ui-interaction-merge.ts @@ -1,10 +1,9 @@ -import type { WorkspaceKey } from '../../../shared/folder-workspaces/folder-workspace-types' import type { PersistedState } from '../../../shared/persisted-state-types' import type { WorkspaceLineage } from '../../../shared/worktree/lineage-types' import { normalizeFeatureInteractions } from '../../../shared/feature-interactions' import { normalizeContextualTourIds } from '../../../shared/contextual-tours' import { normalizeFeatureTipIds } from '../../../shared/feature-tips' -import { isWorkspaceKey } from '../../../shared/workspace-scope' +import { type WorkspaceKey, isWorkspaceKey } from '../../../shared/workspace-scope' export function mergeFeatureInteractions( current: PersistedState['ui']['featureInteractions'], diff --git a/src/main/persistence/closed-terminal-panes-registration.test.ts b/src/main/persistence/closed-terminal-panes-registration.test.ts index ca38720c5dc..e468acc02e6 100644 --- a/src/main/persistence/closed-terminal-panes-registration.test.ts +++ b/src/main/persistence/closed-terminal-panes-registration.test.ts @@ -1,8 +1,8 @@ import { describe, expect, it, vi } from 'vitest' import { windowViewSaveForMain } from './window-save-view' import { getDefaultWorkspaceSession } from '../../shared/constants' -import { parseWorkspaceSession } from '../../shared/workspace-session-schema' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import { parseWorkspaceSession } from '../../shared/workspace-session/workspace-session-schema' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' vi.mock('../../shared/layout-owner-switch', () => ({ ORCA_LAYOUT_OWNER_IS_MAIN: true })) diff --git a/src/main/persistence/closed-terminal-tab-write-fence.test.ts b/src/main/persistence/closed-terminal-tab-write-fence.test.ts index e2dedf54c52..236205d15e8 100644 --- a/src/main/persistence/closed-terminal-tab-write-fence.test.ts +++ b/src/main/persistence/closed-terminal-tab-write-fence.test.ts @@ -3,7 +3,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, describe, expect, it } from 'vitest' import { getDefaultWorkspaceSession } from '../../shared/constants' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { Store } from './loading-store/store' import { closeTestStores, createSqliteTestStore } from './persistence-test-harness' import { OrcaRuntimeService } from '../runtime/orca-runtime' diff --git a/src/main/persistence/closed-terminal-tab-write-fence.ts b/src/main/persistence/closed-terminal-tab-write-fence.ts index c4cffbecb39..71e129ded6c 100644 --- a/src/main/persistence/closed-terminal-tab-write-fence.ts +++ b/src/main/persistence/closed-terminal-tab-write-fence.ts @@ -1,9 +1,9 @@ -import { hasClosedTerminalTabRecord } from '../../shared/closed-terminal-tab-tombstones' +import { hasClosedTerminalTabRecord } from '../../shared/workspace-layout/closed-terminal-tab-tombstones' import { closeTerminalTabInWorkspaceSession, workspaceSessionListsTerminalTab -} from '../../shared/workspace-session-terminal-tab-close' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +} from '../../shared/workspace-session/workspace-session-terminal-tab-close' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' /** Suppress recorded closes across all writers until TTL expiry; failed-close rollback bypasses the fence. */ export function dropClosedTerminalTabs( diff --git a/src/main/persistence/leasing-ssh-ptys/ssh-pty-binding-cleanup.ts b/src/main/persistence/leasing-ssh-ptys/ssh-pty-binding-cleanup.ts index e0f1a0de487..c82301ffce0 100644 --- a/src/main/persistence/leasing-ssh-ptys/ssh-pty-binding-cleanup.ts +++ b/src/main/persistence/leasing-ssh-ptys/ssh-pty-binding-cleanup.ts @@ -1,4 +1,4 @@ -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { SshRemotePtyLease } from '../../../shared/ssh-types' import { toSshExecutionHostId } from '../../../shared/execution-host' import type { PersistedState } from '../../../shared/persisted-state-types' diff --git a/src/main/persistence/loading-store/layout-editor-views.ts b/src/main/persistence/loading-store/layout-editor-views.ts index 1f0f72a1a6b..ef6e006c742 100644 --- a/src/main/persistence/loading-store/layout-editor-views.ts +++ b/src/main/persistence/loading-store/layout-editor-views.ts @@ -8,7 +8,7 @@ import { import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../shared/layout-owner-switch' import type { LayoutEditorView } from '../../../shared/workspace-layout/layout-editor-view' import type { WorkspaceLayoutModel } from '../../../shared/workspace-layout/workspace-layout-model' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { StoreRuntimeState } from './store-runtime-state' export type PartitionEditorViews = Readonly< diff --git a/src/main/persistence/loading-store/loaded-state-parsing.ts b/src/main/persistence/loading-store/loaded-state-parsing.ts index 1f8433fe1a5..1aab9a7c8bf 100644 --- a/src/main/persistence/loading-store/loaded-state-parsing.ts +++ b/src/main/persistence/loading-store/loaded-state-parsing.ts @@ -5,8 +5,8 @@ import type { PersistedState } from '../../../shared/persisted-state-types' import type { ChatUiLaunchTipAudience } from '../../../shared/native-chat/chat-ui-launch-tip-audience' import type { SshPtyConsumerRecovery } from '../../../shared/ssh-types' import { getDefaultPersistedState } from '../../../shared/constants' -import { pruneLocalTerminalScrollbackBuffers } from '../../../shared/workspace-session-terminal-buffers' -import { pruneWorkspaceSessionBrowserHistory } from '../../../shared/workspace-session-browser-history' +import { pruneLocalTerminalScrollbackBuffers } from '../../../shared/workspace-session/workspace-session-terminal-buffers' +import { pruneWorkspaceSessionBrowserHistory } from '../../../shared/workspace-session/workspace-session-browser-history' import { clearMissingProjectGroupMemberships } from '../../../shared/project-groups' import { migrateWorkspaceSessionTerminalScrollbackSnapshots } from '../../pty/scrollback/terminal-scrollback-snapshots' import { logStartupMilestone } from '../../startup/startup-diagnostics' diff --git a/src/main/persistence/loading-store/metadata-lineage-operations.ts b/src/main/persistence/loading-store/metadata-lineage-operations.ts index 69b5a3176b9..80a6ef45868 100644 --- a/src/main/persistence/loading-store/metadata-lineage-operations.ts +++ b/src/main/persistence/loading-store/metadata-lineage-operations.ts @@ -1,6 +1,6 @@ import type { WorkspaceAttachmentMutation } from '../../../shared/workspace-attachments/workspace-attachment-mutation' import type { DiffCommentBaseMutation } from '../../../shared/diff-comment-mutation' -import type { WorkspaceKey } from '../../../shared/folder-workspaces/folder-workspace-types' + import type { WorkspaceLineage, WorktreeLineage } from '../../../shared/worktree/lineage-types' import type { WorktreeMeta } from '../../../shared/worktree/meta-types' import type { Repo } from '../../../shared/repo-types' @@ -8,11 +8,13 @@ import type { ExecutionHostId } from '../../../shared/execution-host' import type { HostWorktreeTarget } from '../../../shared/worktree/host-qualified-identity' import { getRepoIdFromWorktreeId } from '../../../shared/worktree/id' import { hasWorktreeRemovalRepoOwnerOnOtherHost } from '../../workspaces/removal/worktree-removal-repo-owner' -import { folderWorkspaceKey, worktreeWorkspaceKey } from '../../../shared/workspace-scope' import { - workspaceSessionOwnerPartitionForHost, - workspaceSessionPartitionIdsForHost -} from '../restoring-sessions/session-owner-removal' + type WorkspaceKey, + folderWorkspaceKey, + worktreeWorkspaceKey +} from '../../../shared/workspace-scope' +import { workspaceSessionPartitionIdsForHost } from '../restoring-sessions/session-owner-removal' +import { workspaceSessionPartitionHostId as workspaceSessionOwnerPartitionForHost } from '../../../shared/workspace-session/workspace-session-partition-owner' import type { StoreRuntimeState } from './store-runtime-state' import { invalidateLocalWorktreeMetadataPruneInputs } from '../../workspaces/catalog/local-worktree-metadata-prune-gate' diff --git a/src/main/persistence/loading-store/normalize-loaded-global-settings.ts b/src/main/persistence/loading-store/normalize-loaded-global-settings.ts index e7673345557..1ef53f95352 100644 --- a/src/main/persistence/loading-store/normalize-loaded-global-settings.ts +++ b/src/main/persistence/loading-store/normalize-loaded-global-settings.ts @@ -12,7 +12,7 @@ import { hasLegacyMatchTerminalSidebar, syncLegacyMatchTerminalSidebar } from '../../../shared/plugin-theme-settings' -import { normalizeTerminalDefaultShell } from '../../../shared/terminal-default-shell' +import { normalizeTerminalDefaultShell } from '../../../shared/shell/launch/terminal-default-shell' import { projectSourceControlAiToLegacyCommitMessageAi } from '../../../shared/source-control/ai/settings/source-control-ai-legacy-projection' import { normalizeNativeChatShellEnvironmentVariables } from '../../../shared/native-chat/native-chat-shell-environment' import { publishedLegacyChatPermissionMode } from '../../../shared/agent-launch/permissions/agent-chat-permission-mode' diff --git a/src/main/persistence/loading-store/normalize-loaded-state-collections.ts b/src/main/persistence/loading-store/normalize-loaded-state-collections.ts index 7d18715c79b..89e1c0d088a 100644 --- a/src/main/persistence/loading-store/normalize-loaded-state-collections.ts +++ b/src/main/persistence/loading-store/normalize-loaded-state-collections.ts @@ -3,8 +3,8 @@ import { normalizeProjectHostSetupRows, normalizeProjectRows } from '../../../shared/project-catalog-row-normalization' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' -import { parseWorkspaceSessionSalvaging } from '../../../shared/workspace-session-salvage' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' +import { parseWorkspaceSessionSalvaging } from '../../../shared/workspace-session/workspace-session-salvage' import { backfillAutomationRunNumbers, pruneAutomationRuns diff --git a/src/main/persistence/loading-store/persisted-state-redundancy.test.ts b/src/main/persistence/loading-store/persisted-state-redundancy.test.ts index f79c5c69641..f2d992658fe 100644 --- a/src/main/persistence/loading-store/persisted-state-redundancy.test.ts +++ b/src/main/persistence/loading-store/persisted-state-redundancy.test.ts @@ -9,11 +9,11 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, describe, expect, it, vi } from 'vitest' import type { PersistedState } from '../../../shared/persisted-state-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { WorktreeMeta } from '../../../shared/worktree/meta-types' import type { BrowserHistoryEntry } from '../../../shared/browser-workspace-types' import { WORKTREE_META_PERSISTED_DEFAULTS } from '../../../shared/worktree/meta-persisted-defaults' -import { HOST_PARTITION_REDUNDANT_GLOBAL_FIELDS } from '../../../shared/workspace-session-host-field-ownership' +import { HOST_PARTITION_REDUNDANT_GLOBAL_FIELDS } from '../../../shared/workspace-session/workspace-session-host-field-ownership' vi.mock('electron', () => ({ app: { diff --git a/src/main/persistence/loading-store/profile-state-caller-cancellation.spec.ts b/src/main/persistence/loading-store/profile-state-caller-cancellation.spec.ts index d2043efc45a..8aa27db9f42 100644 --- a/src/main/persistence/loading-store/profile-state-caller-cancellation.spec.ts +++ b/src/main/persistence/loading-store/profile-state-caller-cancellation.spec.ts @@ -5,7 +5,7 @@ import { setMigrationUnsupportedPty } from '../../agent-hooks/migration-unsupported-pty-state' import { getDefaultWorkspaceSession } from '../../../shared/constants' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { openProfileStateDatabase } from '../profile-state/profile-state-database' import { readProfileStateRevision } from '../profile-state/profile-state-revision' import { ProfileStateWriterError } from '../profile-state/profile-state-writer-errors' diff --git a/src/main/persistence/loading-store/pty-binding-fast-lane.test.ts b/src/main/persistence/loading-store/pty-binding-fast-lane.test.ts index dc118e57a1d..75577ef0921 100644 --- a/src/main/persistence/loading-store/pty-binding-fast-lane.test.ts +++ b/src/main/persistence/loading-store/pty-binding-fast-lane.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { getDefaultWorkspaceSession } from '../../../shared/constants' import { evaluatePtyBindingFastLane } from './pty-binding-fast-lane' diff --git a/src/main/persistence/loading-store/pty-binding-fast-lane.ts b/src/main/persistence/loading-store/pty-binding-fast-lane.ts index f7ef68df31e..a4266029a5c 100644 --- a/src/main/persistence/loading-store/pty-binding-fast-lane.ts +++ b/src/main/persistence/loading-store/pty-binding-fast-lane.ts @@ -1,5 +1,5 @@ -import { isTerminalLeafId } from '../../../shared/stable-pane-id' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import { isTerminalLeafId } from '../../../shared/workspace-layout/stable-pane-id' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { layoutContainsLeafId } from '../restoring-sessions/terminal-layout-normalization' import { tabRowPtyIdAfterLeafBinding } from './terminal-tab-pty-ownership' diff --git a/src/main/persistence/loading-store/pty-binding-persistence.ts b/src/main/persistence/loading-store/pty-binding-persistence.ts index 37b54e3b02c..6b3256f6fd5 100644 --- a/src/main/persistence/loading-store/pty-binding-persistence.ts +++ b/src/main/persistence/loading-store/pty-binding-persistence.ts @@ -1,6 +1,6 @@ import { LOCAL_EXECUTION_HOST_ID, parseExecutionHostId } from '../../../shared/execution-host' -import { makePaneKey } from '../../../shared/stable-pane-id' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { rollbackFailedPtyBinding } from './pty-binding-write-rollback' import { cloneWorkspaceSessionState } from '../restoring-sessions/session-owner-fields' import { rollbackWorkspaceSessionAfterFailedAsyncWrite } from '../restoring-sessions/workspace-session-write-rollback' @@ -25,11 +25,11 @@ import { type PtyBindingOrigin, type PtyBindingSpan } from './pty-binding-span' -import type { TerminalPanePlacement } from '../../../shared/terminal-pane-placement' +import type { TerminalPanePlacement } from '../../../shared/workspace-layout/terminal-pane-placement' import type { TerminalLeafMoveRequest, TerminalLeafMoveResult -} from '../../../shared/terminal-leaf-move' +} from '../../../shared/workspace-layout/terminal-leaf-move' import { admitPane, moveLeaf, diff --git a/src/main/persistence/loading-store/pty-binding-placement-inertness.test.ts b/src/main/persistence/loading-store/pty-binding-placement-inertness.test.ts index 21757f99ad8..3706ef9efd3 100644 --- a/src/main/persistence/loading-store/pty-binding-placement-inertness.test.ts +++ b/src/main/persistence/loading-store/pty-binding-placement-inertness.test.ts @@ -2,10 +2,10 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import * as fs from 'node:fs/promises' import { tmpdir } from 'node:os' import { resolvePtySpawnStartupTarget } from '../../ipc/pty/spawn-startup-target' -import { resolveTerminalStartupCwd } from '../../../shared/terminal-startup-cwd' +import { resolveTerminalStartupCwd } from '../../../shared/shell/launch/terminal-startup-cwd' import { TEST_LEAF_1, TEST_LEAF_2 } from '../persistence-session-fixtures' import { _resetTracerForTests, setActiveSink } from '../../observability/tracer' -import type { TerminalPanePlacement } from '../../../shared/terminal-pane-placement' +import type { TerminalPanePlacement } from '../../../shared/workspace-layout/terminal-pane-placement' import { FOLDER_WORKSPACE_INSTANCE_SEPARATOR } from '../../../shared/worktree/id' import { firstLayoutLeafId } from '../restoring-sessions/terminal-layout-normalization' import { fixture } from './profile-state-delayed-authority-fixture' diff --git a/src/main/persistence/loading-store/pty-binding-refusals.ts b/src/main/persistence/loading-store/pty-binding-refusals.ts index f8673a8f2c9..d6903728251 100644 --- a/src/main/persistence/loading-store/pty-binding-refusals.ts +++ b/src/main/persistence/loading-store/pty-binding-refusals.ts @@ -1,6 +1,6 @@ -import { hasClosedTerminalTabRecord } from '../../../shared/closed-terminal-tab-tombstones' -import { isTerminalLeafId } from '../../../shared/stable-pane-id' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import { hasClosedTerminalTabRecord } from '../../../shared/workspace-layout/closed-terminal-tab-tombstones' +import { isTerminalLeafId } from '../../../shared/workspace-layout/stable-pane-id' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { TerminalSessionPartition } from '../../../shared/workspace-layout/terminal-owner-invariants' import { layoutContainsLeafId } from '../restoring-sessions/terminal-layout-normalization' import type { PtyBindingSourceExpectation } from './store' diff --git a/src/main/persistence/loading-store/pty-binding-session-update.ts b/src/main/persistence/loading-store/pty-binding-session-update.ts index dae0ecc89e5..d9ce7da1172 100644 --- a/src/main/persistence/loading-store/pty-binding-session-update.ts +++ b/src/main/persistence/loading-store/pty-binding-session-update.ts @@ -1,5 +1,5 @@ -import { isTerminalLeafId } from '../../../shared/stable-pane-id' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import { isTerminalLeafId } from '../../../shared/workspace-layout/stable-pane-id' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { getRepoIdFromWorktreeId } from '../../../shared/worktree/id' import { cloneLayoutNode, diff --git a/src/main/persistence/loading-store/pty-binding-span.ts b/src/main/persistence/loading-store/pty-binding-span.ts index 58ea3fc44f3..bbef6aeeaa2 100644 --- a/src/main/persistence/loading-store/pty-binding-span.ts +++ b/src/main/persistence/loading-store/pty-binding-span.ts @@ -9,8 +9,8 @@ import { type TerminalOwnerConflictReason } from '../../../shared/workspace-layout/terminal-owner-invariants' import type { ExecutionHostId } from '../../../shared/execution-host' -import type { TerminalPanePlacement } from '../../../shared/terminal-pane-placement' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { TerminalPanePlacement } from '../../../shared/workspace-layout/terminal-pane-placement' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' export type PtyBindingPath = 'durable_match' | 'durability_only' | 'mutation' diff --git a/src/main/persistence/loading-store/pty-binding-write-rollback.ts b/src/main/persistence/loading-store/pty-binding-write-rollback.ts index c4e490bbab8..72cce813d24 100644 --- a/src/main/persistence/loading-store/pty-binding-write-rollback.ts +++ b/src/main/persistence/loading-store/pty-binding-write-rollback.ts @@ -1,6 +1,6 @@ import { isDeepStrictEqual } from 'node:util' -import { isTerminalLeafId } from '../../../shared/stable-pane-id' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import { isTerminalLeafId } from '../../../shared/workspace-layout/stable-pane-id' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { rollbackWorkspaceSessionAfterFailedAsyncWrite } from '../restoring-sessions/workspace-session-write-rollback' function restoreBindingSlot( diff --git a/src/main/persistence/loading-store/pty-incarnation-renderer-save.test.ts b/src/main/persistence/loading-store/pty-incarnation-renderer-save.test.ts index d67b4c4e6db..3887df9a968 100644 --- a/src/main/persistence/loading-store/pty-incarnation-renderer-save.test.ts +++ b/src/main/persistence/loading-store/pty-incarnation-renderer-save.test.ts @@ -1,7 +1,7 @@ import { expect, it, vi } from 'vitest' import { fixture } from './profile-state-delayed-authority-fixture' import { resolvePersistedStablePaneOwner } from '../../ipc/pty/pane/stable-owner' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' vi.mock('../../telemetry/client', () => ({ track: vi.fn() })) vi.mock('../../telemetry/cohort-classifier', () => ({ diff --git a/src/main/persistence/loading-store/pty-spawn-exit-durability.test.ts b/src/main/persistence/loading-store/pty-spawn-exit-durability.test.ts index a09ae574336..d8d7788b7f0 100644 --- a/src/main/persistence/loading-store/pty-spawn-exit-durability.test.ts +++ b/src/main/persistence/loading-store/pty-spawn-exit-durability.test.ts @@ -1,4 +1,4 @@ -import { formatTerminalStartFailure } from '../../../shared/terminal-start-failure' +import { formatTerminalStartFailure } from '../../../shared/terminal/pty/lifecycle/terminal-start-failure' import { requireAcceptedSpawn } from '../../ipc/pty/spawn-outcome' import { SessionNotFoundError } from '../../daemon/daemon-errors' import { completePaneAdoption } from '../../ipc/pty/pane/complete-pane-adoption' diff --git a/src/main/persistence/loading-store/pty-spawn-replacement-durability.test.ts b/src/main/persistence/loading-store/pty-spawn-replacement-durability.test.ts index 2b81e3a147f..c9f2b7f2003 100644 --- a/src/main/persistence/loading-store/pty-spawn-replacement-durability.test.ts +++ b/src/main/persistence/loading-store/pty-spawn-replacement-durability.test.ts @@ -1,4 +1,4 @@ -import { isTerminalSessionStorageCapacityFailure } from '../../../shared/terminal-session-state-save-failure' +import { isTerminalSessionStorageCapacityFailure } from '../../../shared/workspace-session/terminal-session-state-save-failure' import { afterEach, expect, it, vi } from 'vitest' import { LOCAL_EXECUTION_HOST_ID } from '../../../shared/execution-host' import { deferred, fixture, admitRuntimeSpawnPane } from './profile-state-delayed-authority-fixture' diff --git a/src/main/persistence/loading-store/replaced-pane-binding.ts b/src/main/persistence/loading-store/replaced-pane-binding.ts index 5ac56180b11..96da1a53375 100644 --- a/src/main/persistence/loading-store/replaced-pane-binding.ts +++ b/src/main/persistence/loading-store/replaced-pane-binding.ts @@ -1,4 +1,4 @@ -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { RetiredTerminalSurface } from '../../runtime/mobile-session-terminal-retirement' /** Caller proves old ownership; restart removes the binding while retaining the pane. */ diff --git a/src/main/persistence/loading-store/repo-lifecycle-operations.ts b/src/main/persistence/loading-store/repo-lifecycle-operations.ts index 5a16c013c1e..7b01c8f9c30 100644 --- a/src/main/persistence/loading-store/repo-lifecycle-operations.ts +++ b/src/main/persistence/loading-store/repo-lifecycle-operations.ts @@ -1,4 +1,4 @@ -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { ProjectHostSetup, ProjectHostSetupUpdateArgs } from '../../../shared/project-types' import type { Repo } from '../../../shared/repo-types' import type { RepoHostTarget } from '../../../shared/repo-host-identity' @@ -27,8 +27,8 @@ import { } from '../../workspaces/catalog/local-worktree-scan-generation' import type { StoreRuntimeState } from './store-runtime-state' -import type { WriteSchedulingOperations } from './write-scheduling' -import { scheduleSave } from './write-scheduling' + +import { type WriteSchedulingOperations, scheduleSave } from './write-scheduling' import { pruneDeregisteredRepoUiResidue } from './repo-lifecycle-ui-residue' import { isWslMoveProjectSessionFrozen } from '../moving-wsl-projects/wsl-move-scope-guard' import { dropOrcadTerminalRestoreHintsForWorktrees } from '../migrating-orcad-catalog/orcad-terminal-restore-hint-store' diff --git a/src/main/persistence/loading-store/reused-terminal-id-unbind.test.ts b/src/main/persistence/loading-store/reused-terminal-id-unbind.test.ts index 3a1b50a7029..08a448a37a8 100644 --- a/src/main/persistence/loading-store/reused-terminal-id-unbind.test.ts +++ b/src/main/persistence/loading-store/reused-terminal-id-unbind.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from 'vitest' import { getDefaultWorkspaceSession } from '../../../shared/constants' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' const switchState = vi.hoisted(() => ({ on: true })) vi.mock('../../../shared/layout-owner-switch', () => ({ diff --git a/src/main/persistence/loading-store/reused-terminal-id-unbind.ts b/src/main/persistence/loading-store/reused-terminal-id-unbind.ts index d7b14b1ea7a..e259132ce90 100644 --- a/src/main/persistence/loading-store/reused-terminal-id-unbind.ts +++ b/src/main/persistence/loading-store/reused-terminal-id-unbind.ts @@ -1,5 +1,5 @@ // Local terminal counters reset on restart; unbind older stamped incarnations when a new process reuses an ID. -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' export type ReusedTerminalBinding = { ptyId: string diff --git a/src/main/persistence/loading-store/runtime-partition-topology-fence.ts b/src/main/persistence/loading-store/runtime-partition-topology-fence.ts index 6b68f4cacc7..5f01703a4d1 100644 --- a/src/main/persistence/loading-store/runtime-partition-topology-fence.ts +++ b/src/main/persistence/loading-store/runtime-partition-topology-fence.ts @@ -1,7 +1,7 @@ // Runtime partitions mirror a paired server, so main's per-repo topology fence must not outlive the // race it guards: the window never echoes revisions, and a permanent fence froze its membership. import { parseExecutionHostId, type ExecutionHostId } from '../../../shared/execution-host' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { getRepoIdFromWorktreeId } from '../../../shared/worktree/id' import type { StoreRuntimeState } from './store-runtime-state' diff --git a/src/main/persistence/loading-store/session-host-partitions.ts b/src/main/persistence/loading-store/session-host-partitions.ts index 8de76e30ad7..81c10f7f8d1 100644 --- a/src/main/persistence/loading-store/session-host-partitions.ts +++ b/src/main/persistence/loading-store/session-host-partitions.ts @@ -1,6 +1,6 @@ import { orderTerminalRowsByTabGroups } from '../../../shared/workspace-layout/terminal-row-order' import type { PersistedState } from '../../../shared/persisted-state-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { sanitizeWorkspaceSessionTerminalRetirements } from '../../runtime/mobile-session-terminal-persistence-retirement' import { LOCAL_EXECUTION_HOST_ID, @@ -9,9 +9,9 @@ import { } from '../../../shared/execution-host' import type { HostWorktreeTarget } from '../../../shared/worktree/host-qualified-identity' import { getDefaultWorkspaceSession } from '../../../shared/constants' -import { pruneLocalTerminalScrollbackBuffers } from '../../../shared/workspace-session-terminal-buffers' -import { pruneWorkspaceSessionBrowserHistory } from '../../../shared/workspace-session-browser-history' -import { withoutRedundantGlobalFields } from '../../../shared/workspace-session-host-field-ownership' +import { pruneLocalTerminalScrollbackBuffers } from '../../../shared/workspace-session/workspace-session-terminal-buffers' +import { pruneWorkspaceSessionBrowserHistory } from '../../../shared/workspace-session/workspace-session-browser-history' +import { withoutRedundantGlobalFields } from '../../../shared/workspace-session/workspace-session-host-field-ownership' import { getRepoIdFromWorktreeId } from '../../../shared/worktree/id' import { readTerminalScrollbackSnapshotSync } from '../../pty/scrollback/terminal-scrollback-snapshots' import { @@ -30,8 +30,8 @@ import { } from '../restoring-sessions/session-owner-removal' import type { StoreRuntimeState } from './store-runtime-state' -import type { WriteSchedulingOperations } from './write-scheduling' -import { scheduleSave } from './write-scheduling' + +import { type WriteSchedulingOperations, scheduleSave } from './write-scheduling' import { preserveMissingWorkspaceSessionTerminalBindings, sshTargetIdForWorkspaceSessionHost diff --git a/src/main/persistence/loading-store/session-snapshot-operations.ts b/src/main/persistence/loading-store/session-snapshot-operations.ts index c50cc180474..1cb794a8d63 100644 --- a/src/main/persistence/loading-store/session-snapshot-operations.ts +++ b/src/main/persistence/loading-store/session-snapshot-operations.ts @@ -2,25 +2,26 @@ import type { PersistedState } from '../../../shared/persisted-state-types' import type { WorkspaceSessionPatch, WorkspaceSessionState -} from '../../../shared/workspace-session-state-types' +} from '../../../shared/workspace-session/workspace-session-state-types' import { LOCAL_EXECUTION_HOST_ID, type ExecutionHostId } from '../../../shared/execution-host' -import { pruneWorkspaceSessionBrowserHistory } from '../../../shared/workspace-session-browser-history' +import { pruneWorkspaceSessionBrowserHistory } from '../../../shared/workspace-session/workspace-session-browser-history' import { workspaceSessionPatchNeedsFullNormalization } from './terminal-session-cleanup' import { setLocalWorkspaceSession } from './workspace-session-snapshot-publication' import type { StoreRuntimeState } from './store-runtime-state' -import type { SessionHostPartitionOperations } from './session-host-partitions' + import type { TerminalBindingRecoveryOperations } from './terminal-binding-recovery' -import type { WriteSchedulingOperations } from './write-scheduling' + import { + type SessionHostPartitionOperations, resolveHostId, setHostWorkspaceSession, withRequiredWorkspaceSessionMaps } from './session-host-partitions' import { dropClosedTerminalTabs } from '../closed-terminal-tab-write-fence' import { keepWslMoveFrozenSessionsForStore } from '../moving-wsl-projects/wsl-move-session-freeze' -import { scheduleSave } from './write-scheduling' +import { type WriteSchedulingOperations, scheduleSave } from './write-scheduling' import { orderTerminalRowsByTabGroups } from '../../../shared/workspace-layout/terminal-row-order' type SessionSnapshotOperationsRuntime = Pick< diff --git a/src/main/persistence/loading-store/state-serialization-secret-handling.ts b/src/main/persistence/loading-store/state-serialization-secret-handling.ts index 4f47563c13c..05d859c8cae 100644 --- a/src/main/persistence/loading-store/state-serialization-secret-handling.ts +++ b/src/main/persistence/loading-store/state-serialization-secret-handling.ts @@ -15,7 +15,7 @@ import { stripRetiredGlobalSettings } from '../applying-settings/terminal-settin import { LEGACY_OPENCODE_GO_API_KEY_SLOT } from './legacy-opencode-go-api-key-migration' import { omitDefaultWorktreeMetaFieldsInMap } from '../../../shared/worktree/meta-persisted-defaults' import { projectWorktreeMetaByIdentityOntoLocators } from './worktree-meta-alias-projection' -import { withoutRedundantPartitionGlobals } from '../../../shared/workspace-session-host-field-ownership' +import { withoutRedundantPartitionGlobals } from '../../../shared/workspace-session/workspace-session-host-field-ownership' import { applySecretSentinelSubstitutions, diff --git a/src/main/persistence/loading-store/state-write-round-trip.test.ts b/src/main/persistence/loading-store/state-write-round-trip.test.ts index 206753066d1..2bede7db9dc 100644 --- a/src/main/persistence/loading-store/state-write-round-trip.test.ts +++ b/src/main/persistence/loading-store/state-write-round-trip.test.ts @@ -10,7 +10,7 @@ import { mkdtempSync, realpathSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, describe, expect, it, vi } from 'vitest' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' vi.mock('electron', () => ({ app: { diff --git a/src/main/persistence/loading-store/store-host-partition-before-unload.test.ts b/src/main/persistence/loading-store/store-host-partition-before-unload.test.ts index 7c2d0d00dce..01e3e06d8cd 100644 --- a/src/main/persistence/loading-store/store-host-partition-before-unload.test.ts +++ b/src/main/persistence/loading-store/store-host-partition-before-unload.test.ts @@ -3,7 +3,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, describe, expect, it } from 'vitest' import { getDefaultWorkspaceSession } from '../../../shared/constants' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { closeTestStores, createSqliteTestStore } from '../persistence-test-harness' import { makeTerminalTab } from '../persistence-session-fixtures' import { Store } from './store' diff --git a/src/main/persistence/loading-store/store-prune-gate-signals.test.ts b/src/main/persistence/loading-store/store-prune-gate-signals.test.ts index c4ae8d6b2c3..6f9a5bc69ed 100644 --- a/src/main/persistence/loading-store/store-prune-gate-signals.test.ts +++ b/src/main/persistence/loading-store/store-prune-gate-signals.test.ts @@ -5,7 +5,7 @@ import { mkdtempSync, realpathSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { removeWorktreeMetaRow } from '../host-qualified-worktree-meta' vi.mock('electron', () => ({ diff --git a/src/main/persistence/loading-store/store-runtime-authored-session-writes.test.ts b/src/main/persistence/loading-store/store-runtime-authored-session-writes.test.ts index c3868cbae67..6199100acd1 100644 --- a/src/main/persistence/loading-store/store-runtime-authored-session-writes.test.ts +++ b/src/main/persistence/loading-store/store-runtime-authored-session-writes.test.ts @@ -5,8 +5,8 @@ import { mkdtempSync, realpathSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, describe, expect, it, vi } from 'vitest' -import type { PersistedClientHostedBrowserPage } from '../../../shared/client-hosted-browser-page-record' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { PersistedClientHostedBrowserPage } from '../../../shared/workspace-session/client-hosted-browser-page-record' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' vi.mock('electron', () => ({ app: { diff --git a/src/main/persistence/loading-store/store-workspace-session-host-removal.test.ts b/src/main/persistence/loading-store/store-workspace-session-host-removal.test.ts index 2bb56ddac81..a36decde40a 100644 --- a/src/main/persistence/loading-store/store-workspace-session-host-removal.test.ts +++ b/src/main/persistence/loading-store/store-workspace-session-host-removal.test.ts @@ -3,7 +3,7 @@ import { mkdtempSync, realpathSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, describe, expect, it, vi } from 'vitest' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' vi.mock('electron', () => ({ app: { diff --git a/src/main/persistence/loading-store/terminal-binding-recovery.ts b/src/main/persistence/loading-store/terminal-binding-recovery.ts index ab2cf116180..2c5b3fbd186 100644 --- a/src/main/persistence/loading-store/terminal-binding-recovery.ts +++ b/src/main/persistence/loading-store/terminal-binding-recovery.ts @@ -1,7 +1,7 @@ -import type { TerminalPaneLayoutNode } from '../../../shared/terminal-tab-types' +import type { TerminalPaneLayoutNode } from '../../../shared/workspace-layout/terminal-tab-types' import type { SshRemotePtyLease } from '../../../shared/ssh-types' import { toComparableRelaySshPtyId, toRelaySshPtyId } from '../../providers/ssh-pty-id' -import { isTerminalLeafId } from '../../../shared/stable-pane-id' +import { isTerminalLeafId } from '../../../shared/workspace-layout/stable-pane-id' import { getRepoIdFromWorktreeId } from '../../../shared/worktree/id' import type { StoreRuntimeState } from './store-runtime-state' diff --git a/src/main/persistence/loading-store/terminal-session-cleanup.ts b/src/main/persistence/loading-store/terminal-session-cleanup.ts index bf15c8927dc..6c543699b82 100644 --- a/src/main/persistence/loading-store/terminal-session-cleanup.ts +++ b/src/main/persistence/loading-store/terminal-session-cleanup.ts @@ -1,7 +1,7 @@ import type { WorkspaceSessionPatch, WorkspaceSessionState -} from '../../../shared/workspace-session-state-types' +} from '../../../shared/workspace-session/workspace-session-state-types' import { collectTerminalScrollbackSnapshotRefs, deleteTerminalScrollbackSnapshotSync, diff --git a/src/main/persistence/loading-store/terminal-tab-pty-ownership.ts b/src/main/persistence/loading-store/terminal-tab-pty-ownership.ts index 75e46fd67a4..897e6e04783 100644 --- a/src/main/persistence/loading-store/terminal-tab-pty-ownership.ts +++ b/src/main/persistence/loading-store/terminal-tab-pty-ownership.ts @@ -1,4 +1,4 @@ -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' type LeafPtyIds = Readonly> | undefined diff --git a/src/main/persistence/loading-store/workspace-session-partitions.test.ts b/src/main/persistence/loading-store/workspace-session-partitions.test.ts index ebac11db01e..faa0170e0bc 100644 --- a/src/main/persistence/loading-store/workspace-session-partitions.test.ts +++ b/src/main/persistence/loading-store/workspace-session-partitions.test.ts @@ -1,8 +1,8 @@ import { describe, expect, it } from 'vitest' import { getDefaultWorkspaceSession } from '../../../shared/constants' import type { BrowserHistoryEntry } from '../../../shared/browser-workspace-types' -import type { WorkspaceDocHistoryEntry } from '../../../shared/workspace-doc-history' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceDocHistoryEntry } from '../../../shared/workspace-session/workspace-doc-history' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { parseWorkspaceSessionsByHostId } from './workspace-session-partitions' const HOST = 'ssh:target-1' diff --git a/src/main/persistence/loading-store/workspace-session-partitions.ts b/src/main/persistence/loading-store/workspace-session-partitions.ts index 2a7655f3c94..f093a7ccf7a 100644 --- a/src/main/persistence/loading-store/workspace-session-partitions.ts +++ b/src/main/persistence/loading-store/workspace-session-partitions.ts @@ -1,11 +1,11 @@ -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { LOCAL_EXECUTION_HOST_ID, normalizeExecutionHostId, type ExecutionHostId } from '../../../shared/execution-host' -import { parseWorkspaceSessionSalvaging } from '../../../shared/workspace-session-salvage' -import { withoutRedundantGlobalFields } from '../../../shared/workspace-session-host-field-ownership' +import { parseWorkspaceSessionSalvaging } from '../../../shared/workspace-session/workspace-session-salvage' +import { withoutRedundantGlobalFields } from '../../../shared/workspace-session/workspace-session-host-field-ownership' export function workspaceSessionSalvageLogDetails(result: { droppedCount: number diff --git a/src/main/persistence/loading-store/workspace-session-snapshot-publication.ts b/src/main/persistence/loading-store/workspace-session-snapshot-publication.ts index 09626946abb..17c05463874 100644 --- a/src/main/persistence/loading-store/workspace-session-snapshot-publication.ts +++ b/src/main/persistence/loading-store/workspace-session-snapshot-publication.ts @@ -1,10 +1,10 @@ import type { PersistedState } from '../../../shared/persisted-state-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { sanitizeWorkspaceSessionTerminalRetirements } from '../../runtime/mobile-session-terminal-persistence-retirement' import { LOCAL_EXECUTION_HOST_ID, type ExecutionHostId } from '../../../shared/execution-host' import { setMigrationUnsupportedPty } from '../../agent-hooks/migration-unsupported-pty-state' -import { pruneLocalTerminalScrollbackBuffers } from '../../../shared/workspace-session-terminal-buffers' -import { pruneWorkspaceSessionBrowserHistory } from '../../../shared/workspace-session-browser-history' +import { pruneLocalTerminalScrollbackBuffers } from '../../../shared/workspace-session/workspace-session-terminal-buffers' +import { pruneWorkspaceSessionBrowserHistory } from '../../../shared/workspace-session/workspace-session-browser-history' import { migrateWorkspaceSessionTerminalScrollbackSnapshots } from '../../pty/scrollback/terminal-scrollback-snapshots' import { deleteRemovedTerminalScrollbackSnapshotsAsync, diff --git a/src/main/persistence/loading-store/workspace-session-terminal-binding-replay.test.ts b/src/main/persistence/loading-store/workspace-session-terminal-binding-replay.test.ts index 21f08685fe4..67d031ee8a0 100644 --- a/src/main/persistence/loading-store/workspace-session-terminal-binding-replay.test.ts +++ b/src/main/persistence/loading-store/workspace-session-terminal-binding-replay.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { preserveMissingWorkspaceSessionTerminalBindings } from './workspace-session-terminal-binding-replay' const LEAF_ONE = '11111111-1111-4111-8111-111111111111' diff --git a/src/main/persistence/loading-store/workspace-session-terminal-binding-replay.ts b/src/main/persistence/loading-store/workspace-session-terminal-binding-replay.ts index b3d42c3f86d..1bbbda74ac8 100644 --- a/src/main/persistence/loading-store/workspace-session-terminal-binding-replay.ts +++ b/src/main/persistence/loading-store/workspace-session-terminal-binding-replay.ts @@ -3,8 +3,8 @@ import { parseExecutionHostId, type ExecutionHostId } from '../../../shared/execution-host' -import { getPtyExecutionHost } from '../../../shared/terminal-execution-host' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import { getPtyExecutionHost } from '../../../shared/terminal/pty/lifecycle/terminal-execution-host' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { preserveMissingLeafRecordEntries } from '../restoring-sessions/terminal-layout-normalization' import type { TerminalBindingRecoveryOperations } from './terminal-binding-recovery' diff --git a/src/main/persistence/loading-store/workspace-session-write-listeners.spec.ts b/src/main/persistence/loading-store/workspace-session-write-listeners.spec.ts index ff0b7137788..a56d96723fc 100644 --- a/src/main/persistence/loading-store/workspace-session-write-listeners.spec.ts +++ b/src/main/persistence/loading-store/workspace-session-write-listeners.spec.ts @@ -1,7 +1,7 @@ import { hostWorktreeTarget } from '../../../shared/worktree/host-qualified-identity' import { describe, expect, it, vi } from 'vitest' import type { ExecutionHostId } from '../../../shared/execution-host' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { TEST_LEAF_1, TEST_LEAF_2 } from '../persistence-session-fixtures' import { WorkspaceLayoutStream } from '../../runtime/workspace-layout-stream' import { collectLayoutEvents } from '../../runtime/workspace-layout-stream-events.test-fixture' diff --git a/src/main/persistence/migrating-orcad-catalog/orcad-destination-workspace-session.test.ts b/src/main/persistence/migrating-orcad-catalog/orcad-destination-workspace-session.test.ts index 882eca77c8f..54284c7051b 100644 --- a/src/main/persistence/migrating-orcad-catalog/orcad-destination-workspace-session.test.ts +++ b/src/main/persistence/migrating-orcad-catalog/orcad-destination-workspace-session.test.ts @@ -3,10 +3,10 @@ import { getDefaultPersistedState, getDefaultWorkspaceSession } from '../../../s import { CLIENT_HOSTED_BROWSER_PAGE_RECORD_VERSION, type PersistedClientHostedBrowserPage -} from '../../../shared/client-hosted-browser-page-record' +} from '../../../shared/workspace-session/client-hosted-browser-page-record' import type { PersistedState } from '../../../shared/persisted-state-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' -import type { TerminalLayoutSnapshot } from '../../../shared/terminal-tab-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' +import type { TerminalLayoutSnapshot } from '../../../shared/workspace-layout/terminal-tab-types' import { prepareOrcadMigrationWorkspaceSession } from './orcad-destination-workspace-session' const OWNER = 'repo-1::/srv/worktree' diff --git a/src/main/persistence/migrating-orcad-catalog/orcad-destination-workspace-session.ts b/src/main/persistence/migrating-orcad-catalog/orcad-destination-workspace-session.ts index e11784bc2a8..c6dc57019d4 100644 --- a/src/main/persistence/migrating-orcad-catalog/orcad-destination-workspace-session.ts +++ b/src/main/persistence/migrating-orcad-catalog/orcad-destination-workspace-session.ts @@ -1,8 +1,8 @@ import { serializeOrcadMigrationValue } from '../../../shared/orcad-migration/orcad-migration-manifest' import { isRecord } from '../../../shared/orcad-migration/orcad-migration-manifest-fields' import type { PersistedState } from '../../../shared/persisted-state-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' -import { SESSION_FOCUS_FIELDS } from '../../../shared/workspace-session-host-field-ownership' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' +import { SESSION_FOCUS_FIELDS } from '../../../shared/workspace-session/workspace-session-host-field-ownership' import { mergeWorkspaceSessions } from '../../orca-profiles/profile-project-session-state' import { collectLayoutLeafIdsInOrder } from '../restoring-sessions/terminal-layout-normalization' diff --git a/src/main/persistence/migrating-orcad-catalog/orcad-migration-blob-install-persistence.ts b/src/main/persistence/migrating-orcad-catalog/orcad-migration-blob-install-persistence.ts index 325f8e35806..e7dead3148c 100644 --- a/src/main/persistence/migrating-orcad-catalog/orcad-migration-blob-install-persistence.ts +++ b/src/main/persistence/migrating-orcad-catalog/orcad-migration-blob-install-persistence.ts @@ -1,7 +1,7 @@ import { ORCAD_MIGRATION_BLOB_KIND_CONTRACTS } from '../../../shared/orcad-migration/orcad-migration-blob-transfer' import type { OrcadMigrationManifest } from '../../../shared/orcad-migration/orcad-migration-manifest' import type { PersistedState } from '../../../shared/persisted-state-types' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { getDaemonHistoryDir } from '../../daemon/daemon-launch-paths' import { getHistoryRoot } from '../../pty/history/terminal-history-paths' import type { StoreRuntimeState } from '../loading-store/store-runtime-state' diff --git a/src/main/persistence/migrating-orcad-catalog/orcad-migration-export-holds.test.ts b/src/main/persistence/migrating-orcad-catalog/orcad-migration-export-holds.test.ts index 6dff4a4cac5..538dffbc7a8 100644 --- a/src/main/persistence/migrating-orcad-catalog/orcad-migration-export-holds.test.ts +++ b/src/main/persistence/migrating-orcad-catalog/orcad-migration-export-holds.test.ts @@ -3,7 +3,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, describe, expect, it, vi } from 'vitest' import { getDefaultWorkspaceSession } from '../../../shared/constants' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { writeFileDurableSync } from '../../filesystem/durable-file-write' import { getTerminalScrollbackSnapshotPath, diff --git a/src/main/persistence/migrating-orcad-catalog/orcad-source-client-browser-intents.ts b/src/main/persistence/migrating-orcad-catalog/orcad-source-client-browser-intents.ts index 6ccd68bf5c3..43fd7e5aa32 100644 --- a/src/main/persistence/migrating-orcad-catalog/orcad-source-client-browser-intents.ts +++ b/src/main/persistence/migrating-orcad-catalog/orcad-source-client-browser-intents.ts @@ -1,6 +1,6 @@ import type { OrcadMigrationClientHostedBrowserCloseIntent } from '../../../shared/orcad-migration/orcad-migration-client-state' import type { PersistedState } from '../../../shared/persisted-state-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { orcadMigrationOwnerMatchesScope, unqualifyOrcadMigrationOwnerKey, diff --git a/src/main/persistence/migrating-orcad-catalog/orcad-source-client-state.test.ts b/src/main/persistence/migrating-orcad-catalog/orcad-source-client-state.test.ts index 562a5bd2706..7d8dbfe26d5 100644 --- a/src/main/persistence/migrating-orcad-catalog/orcad-source-client-state.test.ts +++ b/src/main/persistence/migrating-orcad-catalog/orcad-source-client-state.test.ts @@ -2,13 +2,13 @@ import { describe, expect, it } from 'vitest' import type { OrcadMigrationCatalogPayload } from '../../../shared/orcad-migration/orcad-migration-manifest' import type { PersistedState } from '../../../shared/persisted-state-types' import { getDefaultPersistedState, getDefaultWorkspaceSession } from '../../../shared/constants' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import type { BrowserWorkspace } from '../../../shared/browser-workspace-types' import { CLIENT_HOSTED_BROWSER_PAGE_RECORD_VERSION, type PersistedClientHostedBrowserPage -} from '../../../shared/client-hosted-browser-page-record' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +} from '../../../shared/workspace-session/client-hosted-browser-page-record' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { collectOrcadMigrationSourceClientState } from './orcad-source-client-state' import { ORCAD_MIGRATION_UI_ROUTING_MERGE } from './orcad-destination-client-state' import { parseMobileSelections } from '../../../shared/orcad-migration/orcad-migration-client-state-parsing' diff --git a/src/main/persistence/migrating-orcad-catalog/orcad-source-client-state.ts b/src/main/persistence/migrating-orcad-catalog/orcad-source-client-state.ts index 851b9eb9ee1..5ef8f4cd485 100644 --- a/src/main/persistence/migrating-orcad-catalog/orcad-source-client-state.ts +++ b/src/main/persistence/migrating-orcad-catalog/orcad-source-client-state.ts @@ -10,7 +10,7 @@ import type { PersistedMobileClientTabSelection, PersistedState } from '../../../shared/persisted-state-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { sessionPartitions } from './orcad-source-workspace-session-fragments' import { collectCloseIntents } from './orcad-source-client-browser-intents' import { @@ -20,7 +20,7 @@ import { orcadMigrationOwnsRepoId, unqualifyOrcadMigrationOwnerKey } from './orcad-source-scope' -import { paneBelongsToTabs } from '../../../shared/workspace-session-pane-ownership' +import { paneBelongsToTabs } from '../../../shared/workspace-session/workspace-session-pane-ownership' export type OrcadMigrationSourceClientStateInspection = { payload: OrcadMigrationClientStatePayload | undefined diff --git a/src/main/persistence/migrating-orcad-catalog/orcad-source-client-subtraction.ts b/src/main/persistence/migrating-orcad-catalog/orcad-source-client-subtraction.ts index 1e6554c70d0..0294d79ea3f 100644 --- a/src/main/persistence/migrating-orcad-catalog/orcad-source-client-subtraction.ts +++ b/src/main/persistence/migrating-orcad-catalog/orcad-source-client-subtraction.ts @@ -1,5 +1,7 @@ -import type { OrcadMigrationManifest } from '../../../shared/orcad-migration/orcad-migration-manifest' -import { serializeOrcadMigrationValue } from '../../../shared/orcad-migration/orcad-migration-manifest' +import { + type OrcadMigrationManifest, + serializeOrcadMigrationValue +} from '../../../shared/orcad-migration/orcad-migration-manifest' import { requireOrcadMigrationSshSource } from '../../../shared/orcad-migration/orcad-migration-source-kind' import { parsePersistedAutomationHostFilter } from '../../../shared/automation-host-filter' import { hostStableKey } from '../../../shared/automation-owner-key' @@ -10,7 +12,7 @@ import type { PersistedState } from '../../../shared/persisted-state-types' import { MAX_CLIENT_HOSTED_BROWSER_CLOSE_INTENTS, type ClientHostedBrowserCloseIntent -} from '../../../shared/client-hosted-browser-close-intent' +} from '../../../shared/workspace-session/client-hosted-browser-close-intent' import { createOrcadMigrationSourceScope, orcadMigrationOwnerMatchesScope, diff --git a/src/main/persistence/migrating-orcad-catalog/orcad-source-dependency-census.ts b/src/main/persistence/migrating-orcad-catalog/orcad-source-dependency-census.ts index 8b0215198fe..65b9e4ff4db 100644 --- a/src/main/persistence/migrating-orcad-catalog/orcad-source-dependency-census.ts +++ b/src/main/persistence/migrating-orcad-catalog/orcad-source-dependency-census.ts @@ -19,7 +19,7 @@ import { orcadMigrationPartitionScope, type OrcadMigrationSourceScope } from './orcad-source-scope' -import { paneBelongsToTabs } from '../../../shared/workspace-session-pane-ownership' +import { paneBelongsToTabs } from '../../../shared/workspace-session/workspace-session-pane-ownership' export type OrcadMigrationSourceDependencyCensus = { totalCount: number diff --git a/src/main/persistence/migrating-orcad-catalog/orcad-source-draft-rename.ts b/src/main/persistence/migrating-orcad-catalog/orcad-source-draft-rename.ts index 7e7ec06030b..b927195c499 100644 --- a/src/main/persistence/migrating-orcad-catalog/orcad-source-draft-rename.ts +++ b/src/main/persistence/migrating-orcad-catalog/orcad-source-draft-rename.ts @@ -4,7 +4,7 @@ import type { PersistedState } from '../../../shared/persisted-state-types' import type { PersistedOpenFile, WorkspaceSessionState -} from '../../../shared/workspace-session-state-types' +} from '../../../shared/workspace-session/workspace-session-state-types' import { createOrcadMigrationSourceScope, orcadMigrationOwnerMatchesScope, diff --git a/src/main/persistence/migrating-orcad-catalog/orcad-source-duplicate-session-identities.test.ts b/src/main/persistence/migrating-orcad-catalog/orcad-source-duplicate-session-identities.test.ts index 6ae8b7e4d3d..f0fe5876030 100644 --- a/src/main/persistence/migrating-orcad-catalog/orcad-source-duplicate-session-identities.test.ts +++ b/src/main/persistence/migrating-orcad-catalog/orcad-source-duplicate-session-identities.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest' import { getDefaultWorkspaceSession } from '../../../shared/constants' -import type { TerminalTab } from '../../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { collectDuplicateOrcadMigrationSessionIdentities } from './orcad-source-duplicate-session-identities' const WORKTREE = 'repo-1::/srv/repo' diff --git a/src/main/persistence/migrating-orcad-catalog/orcad-source-duplicate-session-identities.ts b/src/main/persistence/migrating-orcad-catalog/orcad-source-duplicate-session-identities.ts index dbf26aa2074..b5035981277 100644 --- a/src/main/persistence/migrating-orcad-catalog/orcad-source-duplicate-session-identities.ts +++ b/src/main/persistence/migrating-orcad-catalog/orcad-source-duplicate-session-identities.ts @@ -1,4 +1,4 @@ -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { visitOrcadMigrationSessionEntities } from './orcad-destination-workspace-session' import { worktreeLabel } from './orcad-source-workspace-session-eligibility' diff --git a/src/main/persistence/migrating-orcad-catalog/orcad-source-export.test.ts b/src/main/persistence/migrating-orcad-catalog/orcad-source-export.test.ts index b7564216386..76c4236b321 100644 --- a/src/main/persistence/migrating-orcad-catalog/orcad-source-export.test.ts +++ b/src/main/persistence/migrating-orcad-catalog/orcad-source-export.test.ts @@ -5,7 +5,7 @@ import { afterEach, describe, expect, it } from 'vitest' import { getDefaultWorkspaceSession } from '../../../shared/constants' import { toSshExecutionHostId } from '../../../shared/execution-host' import type { SshTarget } from '../../../shared/ssh-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { closeTestStores, createSqliteTestStore } from '../persistence-test-harness' import { Store } from '../loading-store/store' import { createOrcadMigrationManifest } from '../../ssh/orcad-migration-manifest-export' diff --git a/src/main/persistence/migrating-orcad-catalog/orcad-source-left-behind-session-rows.ts b/src/main/persistence/migrating-orcad-catalog/orcad-source-left-behind-session-rows.ts index 908c7144c15..c56864fe0e7 100644 --- a/src/main/persistence/migrating-orcad-catalog/orcad-source-left-behind-session-rows.ts +++ b/src/main/persistence/migrating-orcad-catalog/orcad-source-left-behind-session-rows.ts @@ -1,8 +1,8 @@ import type { BrowserWorkspace } from '../../../shared/browser-workspace-types' import type { TabGroup } from '../../../shared/tab-types' import { ORCA_BROWSER_PARTITION } from '../../../shared/constants' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' -import { ownedEditorFileId } from '../../../shared/workspace-session-pane-ownership' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' +import { ownedEditorFileId } from '../../../shared/workspace-session/workspace-session-pane-ownership' import { isOrcadSourceTabHost } from './orcad-source-workspace-session-eligibility' import { orcadMigrationOwnerMatchesScope, diff --git a/src/main/persistence/migrating-orcad-catalog/orcad-source-partial-partition.test.ts b/src/main/persistence/migrating-orcad-catalog/orcad-source-partial-partition.test.ts index 163d8259abc..0404ffa7b41 100644 --- a/src/main/persistence/migrating-orcad-catalog/orcad-source-partial-partition.test.ts +++ b/src/main/persistence/migrating-orcad-catalog/orcad-source-partial-partition.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import { getDefaultPersistedState } from '../../../shared/constants' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { Repo } from '../../../shared/repo-types' import { collectOrcadMigrationSourceDormantState } from './orcad-source-dormant-state' diff --git a/src/main/persistence/migrating-orcad-catalog/orcad-source-release-upgrade.test.ts b/src/main/persistence/migrating-orcad-catalog/orcad-source-release-upgrade.test.ts index 3088c0e132c..4419ebb5894 100644 --- a/src/main/persistence/migrating-orcad-catalog/orcad-source-release-upgrade.test.ts +++ b/src/main/persistence/migrating-orcad-catalog/orcad-source-release-upgrade.test.ts @@ -2,8 +2,8 @@ import { describe, expect, it } from 'vitest' import { getDefaultPersistedState, getDefaultWorkspaceSession } from '../../../shared/constants' import type { SleepingAgentSessionRecord } from '../../../shared/agent-session/lifecycle/agent-session-resume' import type { PersistedState } from '../../../shared/persisted-state-types' -import type { TerminalTab } from '../../../shared/terminal-tab-types' -import type { PersistedOpenFile } from '../../../shared/workspace-session-state-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' +import type { PersistedOpenFile } from '../../../shared/workspace-session/workspace-session-state-types' import type { WorktreeLineage } from '../../../shared/worktree/lineage-types' import { worktreeWorkspaceKey } from '../../../shared/workspace-scope' import { createOrcadMigrationManifest } from '../../ssh/orcad-migration-manifest-export' diff --git a/src/main/persistence/migrating-orcad-catalog/orcad-source-scrollback-state.test.ts b/src/main/persistence/migrating-orcad-catalog/orcad-source-scrollback-state.test.ts index 972af14c991..04397ebaf67 100644 --- a/src/main/persistence/migrating-orcad-catalog/orcad-source-scrollback-state.test.ts +++ b/src/main/persistence/migrating-orcad-catalog/orcad-source-scrollback-state.test.ts @@ -5,7 +5,7 @@ import { afterEach, beforeEach, describe, expect, it } from 'vitest' import { getDefaultWorkspaceSession } from '../../../shared/constants' import type { OrcadMigrationTerminalScrollbackSnapshot } from '../../../shared/orcad-migration/orcad-migration-scrollback' import { TERMINAL_SCROLLBACK_STORE_BYTE_LIMIT } from '../../../shared/terminal/replay/terminal-scrollback-limits' -import type { TerminalLayoutSnapshot } from '../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../shared/workspace-layout/terminal-tab-types' import { makeTerminalScrollbackSnapshotRef, type TerminalScrollbackSnapshotStorage diff --git a/src/main/persistence/migrating-orcad-catalog/orcad-source-scrollback-state.ts b/src/main/persistence/migrating-orcad-catalog/orcad-source-scrollback-state.ts index 5821adff0be..d2debf4d09f 100644 --- a/src/main/persistence/migrating-orcad-catalog/orcad-source-scrollback-state.ts +++ b/src/main/persistence/migrating-orcad-catalog/orcad-source-scrollback-state.ts @@ -7,7 +7,7 @@ import { } from '../../../shared/orcad-migration/orcad-migration-scrollback' import type { PersistedState } from '../../../shared/persisted-state-types' import { TERMINAL_SCROLLBACK_STORE_BYTE_LIMIT } from '../../../shared/terminal/replay/terminal-scrollback-limits' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { makeTerminalScrollbackSnapshotRef, readTerminalScrollbackStoredBytesSync, diff --git a/src/main/persistence/migrating-orcad-catalog/orcad-source-session-copy-resolution.ts b/src/main/persistence/migrating-orcad-catalog/orcad-source-session-copy-resolution.ts index e5af443086f..7ba902a8a83 100644 --- a/src/main/persistence/migrating-orcad-catalog/orcad-source-session-copy-resolution.ts +++ b/src/main/persistence/migrating-orcad-catalog/orcad-source-session-copy-resolution.ts @@ -5,12 +5,12 @@ import type { import type { OrcadMigrationTerminalScrollbackSnapshot } from '../../../shared/orcad-migration/orcad-migration-scrollback' import type { PersistedState } from '../../../shared/persisted-state-types' import { LOCAL_EXECUTION_HOST_ID } from '../../../shared/execution-host' -import { keepUnsavedDrafts } from '../../../shared/workspace-session-draft-retention' +import { keepUnsavedDrafts } from '../../../shared/workspace-session/workspace-session-draft-retention' import { filterWorkspaceRows, withoutWorkspaces -} from '../../../shared/workspace-session-stranded-partition-adoption' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +} from '../../../shared/workspace-session/workspace-session-stranded-partition-adoption' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { createOrcadMigrationExportScope, orcadMigrationOwnerMatchesScope, diff --git a/src/main/persistence/migrating-orcad-catalog/orcad-source-session-dependencies.ts b/src/main/persistence/migrating-orcad-catalog/orcad-source-session-dependencies.ts index 33ad93fa486..06ce2a9de6d 100644 --- a/src/main/persistence/migrating-orcad-catalog/orcad-source-session-dependencies.ts +++ b/src/main/persistence/migrating-orcad-catalog/orcad-source-session-dependencies.ts @@ -1,6 +1,6 @@ import type { ExecutionHostId } from '../../../shared/execution-host' import type { PersistedState } from '../../../shared/persisted-state-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { sessionPartitions } from './orcad-source-workspace-session-fragments' export type OrcadMigrationSourceSessionInspection = { diff --git a/src/main/persistence/migrating-orcad-catalog/orcad-source-session-partitions.ts b/src/main/persistence/migrating-orcad-catalog/orcad-source-session-partitions.ts index 77b3f93b2e5..24fdd668641 100644 --- a/src/main/persistence/migrating-orcad-catalog/orcad-source-session-partitions.ts +++ b/src/main/persistence/migrating-orcad-catalog/orcad-source-session-partitions.ts @@ -1,14 +1,14 @@ -import { hasClosedTerminalTabRecord } from '../../../shared/closed-terminal-tab-tombstones' +import { hasClosedTerminalTabRecord } from '../../../shared/workspace-layout/closed-terminal-tab-tombstones' import { LOCAL_EXECUTION_HOST_ID } from '../../../shared/execution-host' import type { PersistedState } from '../../../shared/persisted-state-types' import { normalizeWorkspaceSessionKeyToWorkspaceId } from '../../../shared/workspace-scope' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' -import { keepUnsavedDrafts } from '../../../shared/workspace-session-draft-retention' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' +import { keepUnsavedDrafts } from '../../../shared/workspace-session/workspace-session-draft-retention' import { withoutWorkspaces, workspaceIdsNamedByPartition, workspacesTheHostSupersedes -} from '../../../shared/workspace-session-stranded-partition-adoption' +} from '../../../shared/workspace-session/workspace-session-stranded-partition-adoption' import { sessionPartitions } from './orcad-source-workspace-session-fragments' import { orcadMigrationOwnerMatchesScope, diff --git a/src/main/persistence/migrating-orcad-catalog/orcad-source-stale-state-move.test.ts b/src/main/persistence/migrating-orcad-catalog/orcad-source-stale-state-move.test.ts index 64d539fa3ee..2e1aaa9e9dd 100644 --- a/src/main/persistence/migrating-orcad-catalog/orcad-source-stale-state-move.test.ts +++ b/src/main/persistence/migrating-orcad-catalog/orcad-source-stale-state-move.test.ts @@ -4,11 +4,11 @@ import type { BrowserPage, BrowserWorkspace } from '../../../shared/browser-work import { CLIENT_HOSTED_BROWSER_PAGE_RECORD_VERSION, type PersistedClientHostedBrowserPage -} from '../../../shared/client-hosted-browser-page-record' +} from '../../../shared/workspace-session/client-hosted-browser-page-record' import type { PersistedState } from '../../../shared/persisted-state-types' import type { Tab, TabGroup } from '../../../shared/tab-types' -import type { TerminalTab } from '../../../shared/terminal-tab-types' -import type { PersistedOpenFile } from '../../../shared/workspace-session-state-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' +import type { PersistedOpenFile } from '../../../shared/workspace-session/workspace-session-state-types' import { createOrcadMigrationManifest } from '../../ssh/orcad-migration-manifest-export' import { orcadMigrationRefusalReason } from '../../ssh/orcad-migration-refusal-reason' import { collectUntransferredDependentBlockers } from '../../ssh/targets/ssh-target-orcad-dependents' diff --git a/src/main/persistence/migrating-orcad-catalog/orcad-source-workspace-session-ambiguity.test.ts b/src/main/persistence/migrating-orcad-catalog/orcad-source-workspace-session-ambiguity.test.ts index 69878d8aa05..99938fae9ec 100644 --- a/src/main/persistence/migrating-orcad-catalog/orcad-source-workspace-session-ambiguity.test.ts +++ b/src/main/persistence/migrating-orcad-catalog/orcad-source-workspace-session-ambiguity.test.ts @@ -4,7 +4,7 @@ import { LOCAL_EXECUTION_HOST_ID, toSshExecutionHostId } from '../../../shared/e import { collectUnsupportedSessionItems } from './orcad-source-workspace-session-eligibility' import type { OrcadMigrationSourceScope } from './orcad-source-scope' import type { SleepingAgentSessionRecord } from '../../../shared/agent-session/lifecycle/agent-session-resume' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' // `repo-1` is selected but another host registers it too, so its unqualified keys are ambiguous. const ROWS = { diff --git a/src/main/persistence/migrating-orcad-catalog/orcad-source-workspace-session-eligibility.ts b/src/main/persistence/migrating-orcad-catalog/orcad-source-workspace-session-eligibility.ts index fe803bbdcb6..5cda605794f 100644 --- a/src/main/persistence/migrating-orcad-catalog/orcad-source-workspace-session-eligibility.ts +++ b/src/main/persistence/migrating-orcad-catalog/orcad-source-workspace-session-eligibility.ts @@ -4,7 +4,7 @@ import type { SleepingAgentSessionRecord } from '../../../shared/agent-session/l import type { PersistedOpenFile, WorkspaceSessionState -} from '../../../shared/workspace-session-state-types' +} from '../../../shared/workspace-session/workspace-session-state-types' import { orcadMigrationOwnerKeyIsAmbiguous, orcadMigrationOwnerMatchesScope, @@ -16,7 +16,7 @@ import { import { paneBelongsToTabs, paneBelongsToTerminalLayout -} from '../../../shared/workspace-session-pane-ownership' +} from '../../../shared/workspace-session/workspace-session-pane-ownership' /** Name unsupported live work and remedies; stale/unowned rows stay in the retained profile. */ export function collectUnsupportedSessionItems( diff --git a/src/main/persistence/migrating-orcad-catalog/orcad-source-workspace-session-fragments.ts b/src/main/persistence/migrating-orcad-catalog/orcad-source-workspace-session-fragments.ts index b5960508864..8ed1d2eaeb0 100644 --- a/src/main/persistence/migrating-orcad-catalog/orcad-source-workspace-session-fragments.ts +++ b/src/main/persistence/migrating-orcad-catalog/orcad-source-workspace-session-fragments.ts @@ -1,5 +1,5 @@ import { serializeOrcadMigrationValue } from '../../../shared/orcad-migration/orcad-migration-manifest' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { mergeWorkspaceSessions } from '../../orca-profiles/profile-project-session-state' import { SESSION_FIELDS_PRUNED_BY_OWNER_KEY } from '../../orca-profiles/profile-project-session-field-disposition' import { withRequiredWorkspaceSessionMaps } from '../loading-store/session-host-partitions' diff --git a/src/main/persistence/migrating-orcad-catalog/orcad-source-workspace-session-layout.ts b/src/main/persistence/migrating-orcad-catalog/orcad-source-workspace-session-layout.ts index 333f06b5e94..ca9c53a343c 100644 --- a/src/main/persistence/migrating-orcad-catalog/orcad-source-workspace-session-layout.ts +++ b/src/main/persistence/migrating-orcad-catalog/orcad-source-workspace-session-layout.ts @@ -1,4 +1,4 @@ -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { parseWorkspaceKey } from '../../../shared/workspace-scope' import { orcadMigrationOwnerMatchesScope, diff --git a/src/main/persistence/migrating-orcad-catalog/orcad-source-workspace-session-subtraction.ts b/src/main/persistence/migrating-orcad-catalog/orcad-source-workspace-session-subtraction.ts index d4f494e3c61..a3a6c4f6e38 100644 --- a/src/main/persistence/migrating-orcad-catalog/orcad-source-workspace-session-subtraction.ts +++ b/src/main/persistence/migrating-orcad-catalog/orcad-source-workspace-session-subtraction.ts @@ -1,4 +1,4 @@ -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { markdownFileIdCandidates } from '../../orca-profiles/profile-session-markdown-transfer' import { removeWorkspaceSessionOwners } from '../restoring-sessions/session-owner-removal' import { diff --git a/src/main/persistence/migrating-orcad-catalog/orcad-source-workspace-session.ts b/src/main/persistence/migrating-orcad-catalog/orcad-source-workspace-session.ts index d9d701d9caf..e282f8e4d08 100644 --- a/src/main/persistence/migrating-orcad-catalog/orcad-source-workspace-session.ts +++ b/src/main/persistence/migrating-orcad-catalog/orcad-source-workspace-session.ts @@ -3,7 +3,7 @@ import type { OrcadMigrationManifestSource } from '../../../shared/orcad-migration/orcad-migration-manifest' import type { PersistedState } from '../../../shared/persisted-state-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { OrcadMigrationTerminalScrollbackSnapshot } from '../../../shared/orcad-migration/orcad-migration-scrollback' import { extractSessionOwnersForTransfer, @@ -36,7 +36,7 @@ import { type SessionFragment } from './orcad-source-session-copy-resolution' import { withoutOrcadMigrationDrafts } from './orcad-source-draft-rename' -import { hasClosedTerminalTabRecord } from '../../../shared/closed-terminal-tab-tombstones' +import { hasClosedTerminalTabRecord } from '../../../shared/workspace-layout/closed-terminal-tab-tombstones' import { LOCAL_EXECUTION_HOST_ID } from '../../../shared/execution-host' import { normalizeWorkspaceSessionKeyToWorkspaceId } from '../../../shared/workspace-scope' import { orcadMigrationSessionPartitions } from './orcad-source-session-partitions' diff --git a/src/main/persistence/migrating-orcad-catalog/orcad-terminal-history-installer.ts b/src/main/persistence/migrating-orcad-catalog/orcad-terminal-history-installer.ts index ca9e1b2e9a2..cf2a8591436 100644 --- a/src/main/persistence/migrating-orcad-catalog/orcad-terminal-history-installer.ts +++ b/src/main/persistence/migrating-orcad-catalog/orcad-terminal-history-installer.ts @@ -12,8 +12,8 @@ import { parseOrcadMigrationTerminalHistoryText, type OrcadMigrationTerminalHistoryDocument } from '../../../shared/orcad-migration/orcad-migration-terminal-history' -import { PTY_SESSION_ID_SEPARATOR } from '../../../shared/pty-session-id-format' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { PTY_SESSION_ID_SEPARATOR } from '../../../shared/terminal/pty/lifecycle/pty-session-id-format' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { getHistorySessionDirName } from '../../daemon/history-paths' import { isTerminalCheckpointFile } from '../../daemon/terminal-history-checkpoint-reader' import type { SessionMeta } from '../../daemon/terminal-history-metadata' diff --git a/src/main/persistence/moving-wsl-projects/wsl-move-exit-proof.ts b/src/main/persistence/moving-wsl-projects/wsl-move-exit-proof.ts index 0475a50a207..9df842bc55d 100644 --- a/src/main/persistence/moving-wsl-projects/wsl-move-exit-proof.ts +++ b/src/main/persistence/moving-wsl-projects/wsl-move-exit-proof.ts @@ -1,5 +1,8 @@ // Require a complete daemon census under the move fence; unavailable evidence cannot prove exit. -import { parsePtySessionId, WORKTREE_ID_SEPARATOR } from '../../../shared/pty-session-id-format' +import { + parsePtySessionId, + WORKTREE_ID_SEPARATOR +} from '../../../shared/terminal/pty/lifecycle/pty-session-id-format' import { comparableWslPath, isAtOrUnder, isLinuxSpelled } from './wsl-move-comparable-path' import type { SessionInfo } from '../../daemon/types' diff --git a/src/main/persistence/moving-wsl-projects/wsl-move-gate-facts.ts b/src/main/persistence/moving-wsl-projects/wsl-move-gate-facts.ts index 24430d36d89..7b2da2b5e3b 100644 --- a/src/main/persistence/moving-wsl-projects/wsl-move-gate-facts.ts +++ b/src/main/persistence/moving-wsl-projects/wsl-move-gate-facts.ts @@ -8,9 +8,9 @@ import type { AgentStatusIpcPayload } from '../../../shared/agent-status/contrac import { getAgentResumeArgv } from '../../../shared/agent-launch/startup/agent-resume-argv' import { isResumableTuiAgent } from '../../../shared/agent-session/lifecycle/agent-session-resume' import { isFinalAutomationRunStatus, type AutomationRun } from '../../../shared/automations-types' -import { probePtyRunningWorkWithInspection } from '../../../shared/pty-running-work-probe' -import { parsePaneKey } from '../../../shared/stable-pane-id' -import type { TerminalProcessInspection } from '../../../shared/terminal-process-inspection' +import { probePtyRunningWorkWithInspection } from '../../../shared/terminal/pty/lifecycle/pty-running-work-probe' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' +import type { TerminalProcessInspection } from '../../../shared/terminal/pty/lifecycle/terminal-process-inspection' import type { WslMoveTerminalScope } from './wsl-move-driver-ports' import type { WslGuestPaneForeground } from './wsl-move-guest-foreground' import { WSL_MOVE_LIVE_WORKER_STATES } from './wsl-move-orchestration-history-rewrite' diff --git a/src/main/persistence/moving-wsl-projects/wsl-move-gate-stub-agent-hooks.test.ts b/src/main/persistence/moving-wsl-projects/wsl-move-gate-stub-agent-hooks.test.ts index 0d0279cc59f..7fe3e1e1dbd 100644 --- a/src/main/persistence/moving-wsl-projects/wsl-move-gate-stub-agent-hooks.test.ts +++ b/src/main/persistence/moving-wsl-projects/wsl-move-gate-stub-agent-hooks.test.ts @@ -3,7 +3,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, beforeEach, describe, expect, it } from 'vitest' import { AgentHookServer } from '../../agent-hooks/server' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { collectWslMoveGateInputs, type WslMoveGateFactSources } from './wsl-move-gate-facts' import { assessWslMoveTerminals } from './wsl-move-terminal-gate' diff --git a/src/main/persistence/moving-wsl-projects/wsl-move-guest-foreground.test.ts b/src/main/persistence/moving-wsl-projects/wsl-move-guest-foreground.test.ts index 85f2dc6b734..082eb359107 100644 --- a/src/main/persistence/moving-wsl-projects/wsl-move-guest-foreground.test.ts +++ b/src/main/persistence/moving-wsl-projects/wsl-move-guest-foreground.test.ts @@ -1,6 +1,6 @@ import { execFileSync } from 'node:child_process' import type { AgentStatusIpcPayload } from '../../../shared/agent-status/contracts/agent-status-ipc-payload' -import type { TerminalProcessInspection } from '../../../shared/terminal-process-inspection' +import type { TerminalProcessInspection } from '../../../shared/terminal/pty/lifecycle/terminal-process-inspection' import { describe, expect, it, vi } from 'vitest' import { collectWslMoveGateInputs, type WslMoveGateFactSources } from './wsl-move-gate-facts' import { diff --git a/src/main/persistence/moving-wsl-projects/wsl-move-guest-foreground.ts b/src/main/persistence/moving-wsl-projects/wsl-move-guest-foreground.ts index 10376bccf3c..112fa7fd43d 100644 --- a/src/main/persistence/moving-wsl-projects/wsl-move-guest-foreground.ts +++ b/src/main/persistence/moving-wsl-projects/wsl-move-guest-foreground.ts @@ -8,7 +8,7 @@ * `read` is still a script). The move's Sleep ends all of those, so any of them blocks. */ import { recognizeAgentProcess } from '../../../shared/agent-status/process/agent-process-recognition' -import { isShellProcess } from '../../../shared/shell-process-detection' +import { isShellProcess } from '../../../shared/agent-status/process/shell-process-detection' /** * `agent`: the shell's one foreground job is an agent CLI and everything else running is its own diff --git a/src/main/persistence/moving-wsl-projects/wsl-move-host-owned-chat-tabs.ts b/src/main/persistence/moving-wsl-projects/wsl-move-host-owned-chat-tabs.ts index a598045d821..9a10906ab4b 100644 --- a/src/main/persistence/moving-wsl-projects/wsl-move-host-owned-chat-tabs.ts +++ b/src/main/persistence/moving-wsl-projects/wsl-move-host-owned-chat-tabs.ts @@ -5,7 +5,7 @@ * restores, and its terminals and editors now live on the host. */ import type { Tab, TabGroup } from '../../../shared/tab-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' function isChatTab(tab: Pick): boolean { return tab.contentType === 'agent-session' diff --git a/src/main/persistence/moving-wsl-projects/wsl-move-main-rewrite-stores.test.ts b/src/main/persistence/moving-wsl-projects/wsl-move-main-rewrite-stores.test.ts index 6af92769c17..07e5eb9feb2 100644 --- a/src/main/persistence/moving-wsl-projects/wsl-move-main-rewrite-stores.test.ts +++ b/src/main/persistence/moving-wsl-projects/wsl-move-main-rewrite-stores.test.ts @@ -7,7 +7,7 @@ import { toRuntimeExecutionHostId } from '../../../shared/execution-host' import type { PersistedState } from '../../../shared/persisted-state-types' import type { Tab } from '../../../shared/tab-types' import { WSL_HOSTS_INTERNAL_GATE_ENV } from '../../../shared/wsl-host-internal-gate' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { Store } from '../loading-store/store' import { closeTestStores, diff --git a/src/main/persistence/moving-wsl-projects/wsl-move-main-rewrite-stores.ts b/src/main/persistence/moving-wsl-projects/wsl-move-main-rewrite-stores.ts index 72d04eccf3a..4fabcc42814 100644 --- a/src/main/persistence/moving-wsl-projects/wsl-move-main-rewrite-stores.ts +++ b/src/main/persistence/moving-wsl-projects/wsl-move-main-rewrite-stores.ts @@ -8,7 +8,7 @@ import type { WslMoveCutover } from '../../../shared/wsl-move/wsl-move-cutover' import type { WorkspaceSessionPatch, WorkspaceSessionState -} from '../../../shared/workspace-session-state-types' +} from '../../../shared/workspace-session/workspace-session-state-types' import type { Store } from '../loading-store/store' import { wslMoveAutomationHostFilterUpdate } from './wsl-move-automation-filter-rewrite' import { registerWslMoveDesktopRewriteStore } from './wsl-move-desktop-rewrite-stores' diff --git a/src/main/persistence/moving-wsl-projects/wsl-move-manifest-export.test.ts b/src/main/persistence/moving-wsl-projects/wsl-move-manifest-export.test.ts index 3a72fda10a9..28059eae8a0 100644 --- a/src/main/persistence/moving-wsl-projects/wsl-move-manifest-export.test.ts +++ b/src/main/persistence/moving-wsl-projects/wsl-move-manifest-export.test.ts @@ -3,7 +3,7 @@ import { getDefaultPersistedState, getDefaultWorkspaceSession } from '../../../s import type { SleepingAgentSessionRecord } from '../../../shared/agent-session/lifecycle/agent-session-resume' import type { PersistedState } from '../../../shared/persisted-state-types' import type { Repo } from '../../../shared/repo-types' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import { assertOrcadMigrationManifestDigest } from '../../orcad/orcad-migration-manifest-digest' import { DORMANT_AUTOMATION, diff --git a/src/main/persistence/moving-wsl-projects/wsl-move-registry-complete.test.ts b/src/main/persistence/moving-wsl-projects/wsl-move-registry-complete.test.ts index 034ec739bcc..0950c56c442 100644 --- a/src/main/persistence/moving-wsl-projects/wsl-move-registry-complete.test.ts +++ b/src/main/persistence/moving-wsl-projects/wsl-move-registry-complete.test.ts @@ -12,7 +12,7 @@ import { closeTestStores, createStore, testState, writeDataFile } from '../persi import { wslMoveCutoverFixture } from '../__fixtures__/wsl-mover/wsl-move-cutover-fixture' import { wslMoverProfile } from '../__fixtures__/wsl-mover/wsl-mover-profiles' import { tabGroup, terminalTab, unifiedTab } from '../__fixtures__/wsl-mover/wsl-mover-profile-rows' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { listWslMoveCutovers, wslMoveJournalDirectory, diff --git a/src/main/persistence/moving-wsl-projects/wsl-move-round-trip.test.ts b/src/main/persistence/moving-wsl-projects/wsl-move-round-trip.test.ts index 4452b638c85..e5aa67b16af 100644 --- a/src/main/persistence/moving-wsl-projects/wsl-move-round-trip.test.ts +++ b/src/main/persistence/moving-wsl-projects/wsl-move-round-trip.test.ts @@ -11,9 +11,9 @@ import { join } from 'node:path' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { getDefaultPersistedState } from '../../../shared/constants' import { toRuntimeExecutionHostId } from '../../../shared/execution-host' -import { SESSION_FOCUS_FIELDS } from '../../../shared/workspace-session-host-field-ownership' +import { SESSION_FOCUS_FIELDS } from '../../../shared/workspace-session/workspace-session-host-field-ownership' import type { PersistedState } from '../../../shared/persisted-state-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { WSL_HOSTS_INTERNAL_GATE_ENV } from '../../../shared/wsl-host-internal-gate' import { closeTestStores, testState } from '../persistence-test-harness' import type { Store } from '../loading-store/store' diff --git a/src/main/persistence/moving-wsl-projects/wsl-move-seeded-view-state.test.ts b/src/main/persistence/moving-wsl-projects/wsl-move-seeded-view-state.test.ts index 013117e24fe..88038f4bcaa 100644 --- a/src/main/persistence/moving-wsl-projects/wsl-move-seeded-view-state.test.ts +++ b/src/main/persistence/moving-wsl-projects/wsl-move-seeded-view-state.test.ts @@ -3,7 +3,7 @@ import { getDefaultWorkspaceSession } from '../../../shared/constants' import type { PersistedOpenFile, WorkspaceSessionState -} from '../../../shared/workspace-session-state-types' +} from '../../../shared/workspace-session/workspace-session-state-types' import { withWslMoveSeededViewState } from './wsl-move-seeded-view-state' const UNC_ROOT = '\\\\wsl.localhost\\Ubuntu\\home\\dev\\app' diff --git a/src/main/persistence/moving-wsl-projects/wsl-move-seeded-view-state.ts b/src/main/persistence/moving-wsl-projects/wsl-move-seeded-view-state.ts index e06fa2e59fa..0b016ae2ed3 100644 --- a/src/main/persistence/moving-wsl-projects/wsl-move-seeded-view-state.ts +++ b/src/main/persistence/moving-wsl-projects/wsl-move-seeded-view-state.ts @@ -5,9 +5,9 @@ * cannot rewrite) and closed-terminal-tab tombstones. Only for workspaces seeded in this run, so * anything the user since changed on the host stays as it is. */ -import type { ClosedTerminalTabTombstone } from '../../../shared/closed-terminal-tab-tombstones' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' -import { ownedEditorFileId } from '../../../shared/workspace-session-pane-ownership' +import type { ClosedTerminalTabTombstone } from '../../../shared/workspace-layout/closed-terminal-tab-tombstones' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' +import { ownedEditorFileId } from '../../../shared/workspace-session/workspace-session-pane-ownership' import { isHostBoundOpenFile } from '../migrating-orcad-catalog/orcad-source-draft-rename' import type { WslMoveRewriteScope } from './wsl-move-rewrite-scope' diff --git a/src/main/persistence/moving-wsl-projects/wsl-move-session-freeze.test.ts b/src/main/persistence/moving-wsl-projects/wsl-move-session-freeze.test.ts index dc892462672..5765395b47c 100644 --- a/src/main/persistence/moving-wsl-projects/wsl-move-session-freeze.test.ts +++ b/src/main/persistence/moving-wsl-projects/wsl-move-session-freeze.test.ts @@ -4,7 +4,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { getDefaultPersistedState, getDefaultWorkspaceSession } from '../../../shared/constants' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { Tab, TabGroup } from '../../../shared/tab-types' import type { Store } from '../loading-store/store' import { closeTestStores, createStore, testState } from '../persistence-test-harness' diff --git a/src/main/persistence/moving-wsl-projects/wsl-move-session-freeze.ts b/src/main/persistence/moving-wsl-projects/wsl-move-session-freeze.ts index d605a3866bc..ca5d90f9c4d 100644 --- a/src/main/persistence/moving-wsl-projects/wsl-move-session-freeze.ts +++ b/src/main/persistence/moving-wsl-projects/wsl-move-session-freeze.ts @@ -4,17 +4,17 @@ * change nor drop it. Every other workspace's rows, and the global fields, are taken as written. * Once the host owns the project, its native chat tabs are taken as written too. */ -import { WORKSPACE_SESSION_FIELD_OWNERSHIP } from '../../../shared/workspace-session-host-field-ownership' +import { WORKSPACE_SESSION_FIELD_OWNERSHIP } from '../../../shared/workspace-session/workspace-session-host-field-ownership' import { mergeWorkspaceSessionArrayField, mergeWorkspaceSessionRecordField -} from '../../../shared/workspace-session-host-records' +} from '../../../shared/workspace-session/workspace-session-host-records' import { filterWorkspaceRows, withoutWorkspaces, workspaceIdsNamedByPartition -} from '../../../shared/workspace-session-stranded-partition-adoption' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +} from '../../../shared/workspace-session/workspace-session-stranded-partition-adoption' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { hasWslMoveFrozenSessions, isWslMoveWorkspaceHostOwned, diff --git a/src/main/persistence/moving-wsl-projects/wsl-move-session-projection.ts b/src/main/persistence/moving-wsl-projects/wsl-move-session-projection.ts index 169157827db..603631d7658 100644 --- a/src/main/persistence/moving-wsl-projects/wsl-move-session-projection.ts +++ b/src/main/persistence/moving-wsl-projects/wsl-move-session-projection.ts @@ -1,11 +1,11 @@ import type { PersistedUIState } from '../../../shared/persisted-ui-state-types' -import { WORKSPACE_SESSION_FIELD_OWNERSHIP } from '../../../shared/workspace-session-host-field-ownership' +import { WORKSPACE_SESSION_FIELD_OWNERSHIP } from '../../../shared/workspace-session/workspace-session-host-field-ownership' import { buildWorktreeIdByFileId, buildWorktreeIdByTabId, worktreeIdForPaneKey -} from '../../../shared/workspace-session-host-records' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +} from '../../../shared/workspace-session/workspace-session-host-records' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { isRecord, parseEditorFileId } from './wsl-move-canonical-form' import { WORKSPACE_SESSION_DISPOSITIONS } from '../../../shared/wsl-move/wsl-move-dispositions' import { UI_STATE_DISPOSITIONS } from '../../../shared/wsl-move/wsl-move-ui-dispositions' diff --git a/src/main/persistence/moving-wsl-projects/wsl-move-session-rewrite.test.ts b/src/main/persistence/moving-wsl-projects/wsl-move-session-rewrite.test.ts index c5a04153170..edefe2aed82 100644 --- a/src/main/persistence/moving-wsl-projects/wsl-move-session-rewrite.test.ts +++ b/src/main/persistence/moving-wsl-projects/wsl-move-session-rewrite.test.ts @@ -3,7 +3,7 @@ import { getDefaultPersistedState, getDefaultWorkspaceSession } from '../../../s import { toRuntimeExecutionHostId } from '../../../shared/execution-host' import { worktreeWorkspaceKey } from '../../../shared/workspace-scope' import type { Tab } from '../../../shared/tab-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { wslMoveCutoverFixture } from '../__fixtures__/wsl-mover/wsl-move-cutover-fixture' import { wslMoverProfile } from '../__fixtures__/wsl-mover/wsl-mover-profiles' import { tabGroup, terminalTab } from '../__fixtures__/wsl-mover/wsl-mover-profile-rows' diff --git a/src/main/persistence/moving-wsl-projects/wsl-move-session-rewrite.ts b/src/main/persistence/moving-wsl-projects/wsl-move-session-rewrite.ts index 8aa701fc189..43ab96e6828 100644 --- a/src/main/persistence/moving-wsl-projects/wsl-move-session-rewrite.ts +++ b/src/main/persistence/moving-wsl-projects/wsl-move-session-rewrite.ts @@ -6,20 +6,20 @@ */ import { LOCAL_EXECUTION_HOST_ID } from '../../../shared/execution-host' import type { Tab } from '../../../shared/tab-types' -import { filterWorkspaceSessionTabs } from '../../../shared/workspace-session-tab-filter' -import { WORKSPACE_SESSION_FIELD_OWNERSHIP } from '../../../shared/workspace-session-host-field-ownership' +import { filterWorkspaceSessionTabs } from '../../../shared/workspace-session/workspace-session-tab-filter' +import { WORKSPACE_SESSION_FIELD_OWNERSHIP } from '../../../shared/workspace-session/workspace-session-host-field-ownership' import { mergeWorkspaceSessionArrayField, mergeWorkspaceSessionRecordField -} from '../../../shared/workspace-session-host-records' +} from '../../../shared/workspace-session/workspace-session-host-records' import type { WorkspaceSessionPatch, WorkspaceSessionState -} from '../../../shared/workspace-session-state-types' +} from '../../../shared/workspace-session/workspace-session-state-types' import { filterWorkspaceRows, workspaceIdsNamedByPartition -} from '../../../shared/workspace-session-stranded-partition-adoption' +} from '../../../shared/workspace-session/workspace-session-stranded-partition-adoption' import { parseWorkspaceKey, worktreeWorkspaceKey } from '../../../shared/workspace-scope' import type { WslMoveRewriteScope } from './wsl-move-rewrite-scope' diff --git a/src/main/persistence/moving-wsl-projects/wsl-move-slept-scrollback.test.ts b/src/main/persistence/moving-wsl-projects/wsl-move-slept-scrollback.test.ts index 80059c48386..eb9fe41ece0 100644 --- a/src/main/persistence/moving-wsl-projects/wsl-move-slept-scrollback.test.ts +++ b/src/main/persistence/moving-wsl-projects/wsl-move-slept-scrollback.test.ts @@ -3,7 +3,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, describe, expect, it, vi } from 'vitest' import { getDefaultWorkspaceSession } from '../../../shared/constants' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { getHistorySessionDirName } from '../../daemon/history-paths' import { HistoryReader } from '../../daemon/history-reader' import type { TerminalModes } from '../../daemon/terminal-modes' diff --git a/src/main/persistence/moving-wsl-projects/wsl-move-slept-scrollback.ts b/src/main/persistence/moving-wsl-projects/wsl-move-slept-scrollback.ts index 246ae52996e..695f0989c89 100644 --- a/src/main/persistence/moving-wsl-projects/wsl-move-slept-scrollback.ts +++ b/src/main/persistence/moving-wsl-projects/wsl-move-slept-scrollback.ts @@ -6,17 +6,24 @@ import { createHash } from 'node:crypto' import { closeSync, mkdirSync, openSync, readSync, rmSync, writeFileSync } from 'node:fs' import { join } from 'node:path' -import type { OrcadMigrationBlobDescriptor } from '../../../shared/orcad-migration/orcad-migration-blob-transfer' -import { ORCAD_MIGRATION_BLOB_KIND_CONTRACTS } from '../../../shared/orcad-migration/orcad-migration-blob-transfer' + +import { + type OrcadMigrationBlobDescriptor, + ORCAD_MIGRATION_BLOB_KIND_CONTRACTS +} from '../../../shared/orcad-migration/orcad-migration-blob-transfer' import { ORCAD_MIGRATION_TERMINAL_HISTORY_VERSION, type OrcadMigrationTerminalHistoryDocument } from '../../../shared/orcad-migration/orcad-migration-terminal-history' -import { isTerminalLeafId, makePaneKey, parsePaneKey } from '../../../shared/stable-pane-id' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import { + isTerminalLeafId, + makePaneKey, + parsePaneKey +} from '../../../shared/workspace-layout/stable-pane-id' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { WslMoveRequest } from '../../../shared/wsl-move/wsl-move-driver-types' -import { parsePtySessionId } from '../../../shared/pty-session-id-format' -import { collectLeafIds } from '../../../shared/terminal-pane-layout-tree' +import { parsePtySessionId } from '../../../shared/terminal/pty/lifecycle/pty-session-id-format' +import { collectLeafIds } from '../../../shared/workspace-layout/terminal-pane-layout-tree' import type { ColdRestoreInfo } from '../../daemon/history-reader' import type { TerminalCheckpointFile } from '../../daemon/types' import type { OrcadMigrationBlobSource } from '../../ssh/orcad-migration-blob-coordinator' diff --git a/src/main/persistence/moving-wsl-projects/wsl-move-state-projection.ts b/src/main/persistence/moving-wsl-projects/wsl-move-state-projection.ts index fffaa11e25d..1e05d34a03f 100644 --- a/src/main/persistence/moving-wsl-projects/wsl-move-state-projection.ts +++ b/src/main/persistence/moving-wsl-projects/wsl-move-state-projection.ts @@ -3,7 +3,7 @@ import { getAutomationRunRepoId } from '../../../shared/automation-run-identity' import { getRepoExecutionHostId, type ExecutionHostId } from '../../../shared/execution-host' import type { PersistedState } from '../../../shared/persisted-state-types' import type { PersistedUIState } from '../../../shared/persisted-ui-state-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { normalizeWorkspaceSessionKeyToWorkspaceId, parseWorkspaceKey diff --git a/src/main/persistence/moving-wsl-projects/wsl-move-windows-shell-choices.ts b/src/main/persistence/moving-wsl-projects/wsl-move-windows-shell-choices.ts index cf49b71f7a4..1a1f6f1c375 100644 --- a/src/main/persistence/moving-wsl-projects/wsl-move-windows-shell-choices.ts +++ b/src/main/persistence/moving-wsl-projects/wsl-move-windows-shell-choices.ts @@ -1,4 +1,4 @@ -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' /** * A tab's Windows launch choices, dropped on purpose: `shellOverride` names a Windows shell diff --git a/src/main/persistence/persistence-cohort-and-identity-migration.test.ts b/src/main/persistence/persistence-cohort-and-identity-migration.test.ts index 481b6f6728b..6a7dbacc4ce 100644 --- a/src/main/persistence/persistence-cohort-and-identity-migration.test.ts +++ b/src/main/persistence/persistence-cohort-and-identity-migration.test.ts @@ -13,7 +13,7 @@ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest' import { writeFileSync, rmSync, mkdtempSync, readFileSync } from 'node:fs' import { join } from 'node:path' import { tmpdir } from 'node:os' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { getDefaultWorkspaceSession } from '../../shared/constants' import { folderWorkspaceKey, worktreeWorkspaceKey } from '../../shared/workspace-scope' import { createProfileStateStore } from './profile-state/profile-state-store-factory' diff --git a/src/main/persistence/persistence-flush-and-save-scheduling.test.ts b/src/main/persistence/persistence-flush-and-save-scheduling.test.ts index ce573c65d18..73b01453d35 100644 --- a/src/main/persistence/persistence-flush-and-save-scheduling.test.ts +++ b/src/main/persistence/persistence-flush-and-save-scheduling.test.ts @@ -21,7 +21,7 @@ import { makeTerminalTab, TEST_LEAF_1, TEST_LEAF_2 } from './persistence-session import { ProfileStateSqliteAuthority } from './profile-state/profile-state-sqlite-authority' import { getDefaultPersistedState, getDefaultWorkspaceSession } from '../../shared/constants' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { _resetTracerForTests, setActiveSink } from '../observability/tracer' import { _resetPtyBindingSpanSamplingForTests } from './loading-store/pty-binding-span' diff --git a/src/main/persistence/persistence-host-partitioned-sessions.test.ts b/src/main/persistence/persistence-host-partitioned-sessions.test.ts index 2813d66aaab..31f29856aab 100644 --- a/src/main/persistence/persistence-host-partitioned-sessions.test.ts +++ b/src/main/persistence/persistence-host-partitioned-sessions.test.ts @@ -18,9 +18,9 @@ import { rmSync, mkdtempSync } from 'node:fs' import { ProfileStateSqliteAuthority } from './profile-state/profile-state-sqlite-authority' import { join } from 'node:path' import { tmpdir } from 'node:os' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { getDefaultWorkspaceSession } from '../../shared/constants' -import { isTerminalLeafId } from '../../shared/stable-pane-id' +import { isTerminalLeafId } from '../../shared/workspace-layout/stable-pane-id' import { worktreeWorkspaceKey } from '../../shared/workspace-scope' import { removeWorktreeMetaRow } from './host-qualified-worktree-meta' diff --git a/src/main/persistence/persistence-initial-load.test.ts b/src/main/persistence/persistence-initial-load.test.ts index 7c87ea1b807..3f1c712a123 100644 --- a/src/main/persistence/persistence-initial-load.test.ts +++ b/src/main/persistence/persistence-initial-load.test.ts @@ -14,9 +14,9 @@ import { writeFileSync, rmSync, mkdtempSync, mkdirSync } from 'node:fs' import { join } from 'node:path' import { tmpdir } from 'node:os' import type { PersistedState } from '../../shared/persisted-state-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { getDefaultPersistedState, getDefaultWorkspaceSession } from '../../shared/constants' -import { closeTerminalTabInWorkspaceSession } from '../../shared/workspace-session-terminal-tab-close' +import { closeTerminalTabInWorkspaceSession } from '../../shared/workspace-session/workspace-session-terminal-tab-close' import { TEST_LEAF_1 } from './persistence-session-fixtures' import { ProfileStateSqliteAuthority } from './profile-state/profile-state-sqlite-authority' diff --git a/src/main/persistence/persistence-session-fixtures.ts b/src/main/persistence/persistence-session-fixtures.ts index 29389518973..9b66741a45c 100644 --- a/src/main/persistence/persistence-session-fixtures.ts +++ b/src/main/persistence/persistence-session-fixtures.ts @@ -1,5 +1,8 @@ -import type { TerminalPaneLayoutNode, TerminalTab } from '../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { + TerminalPaneLayoutNode, + TerminalTab +} from '../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' export const makeTerminalTab = (overrides: Partial = {}): TerminalTab => ({ id: 'tab1', diff --git a/src/main/persistence/profile-state-cutover-fixture.ts b/src/main/persistence/profile-state-cutover-fixture.ts index 59a37425da6..6a3a1180da2 100644 --- a/src/main/persistence/profile-state-cutover-fixture.ts +++ b/src/main/persistence/profile-state-cutover-fixture.ts @@ -3,8 +3,11 @@ import type { Automation, AutomationRun } from '../../shared/automations-types' import type { PersistedState } from '../../shared/persisted-state-types' import type { Project, ProjectHostSetup } from '../../shared/project-types' import type { Repo } from '../../shared/repo-types' -import type { TerminalTab, TerminalLayoutSnapshot } from '../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { + TerminalTab, + TerminalLayoutSnapshot +} from '../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import type { WorktreeMeta } from '../../shared/worktree/meta-types' const LOCAL_WORKTREE_ID = 'repo-local::/fixture/local' diff --git a/src/main/persistence/profile-state/profile-state-writer-capacity-errors.test.ts b/src/main/persistence/profile-state/profile-state-writer-capacity-errors.test.ts index f537af8833c..e855d44d9c9 100644 --- a/src/main/persistence/profile-state/profile-state-writer-capacity-errors.test.ts +++ b/src/main/persistence/profile-state/profile-state-writer-capacity-errors.test.ts @@ -7,7 +7,7 @@ import { import { createTerminalSessionStateSaveFailureMessage, isTerminalSessionStorageCapacityFailure -} from '../../../shared/terminal-session-state-save-failure' +} from '../../../shared/workspace-session/terminal-session-state-save-failure' it.each(['ENOSPC', 'EDQUOT', 'SQLITE_FULL', 'EACCES', 'SQLITE_BUSY'])( 'preserves capacity evidence across the writer boundary for %s', diff --git a/src/main/persistence/record-patch-versus-full-save.test.ts b/src/main/persistence/record-patch-versus-full-save.test.ts index 40d7dbfb55c..51f9a9e9d7a 100644 --- a/src/main/persistence/record-patch-versus-full-save.test.ts +++ b/src/main/persistence/record-patch-versus-full-save.test.ts @@ -24,7 +24,7 @@ import { import type * as RecordPatch from '../../shared/workspace-layout/workspace-layout-record-patch' import { saveWorkspaceLayout } from '../../shared/workspace-layout/workspace-layout-save' import { SSH_KEY } from '../../shared/workspace-layout/workspace-layout-session.test-fixture' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { moveTabAcrossPartitions } from './terminal-topology/cross-partition-tab-move' import { admitPaneToSession, diff --git a/src/main/persistence/restoring-sessions/cross-host-pane-tab-ids.ts b/src/main/persistence/restoring-sessions/cross-host-pane-tab-ids.ts index d99087a6086..7842bd42b87 100644 --- a/src/main/persistence/restoring-sessions/cross-host-pane-tab-ids.ts +++ b/src/main/persistence/restoring-sessions/cross-host-pane-tab-ids.ts @@ -1,5 +1,5 @@ import type { PersistedState } from '../../../shared/persisted-state-types' -import { buildWorktreeIdByTabId } from '../../../shared/workspace-session-host-records' +import { buildWorktreeIdByTabId } from '../../../shared/workspace-session/workspace-session-host-records' import { isWslMoveWorkspaceHostOwned } from '../moving-wsl-projects/wsl-move-scope-guard' /** diff --git a/src/main/persistence/restoring-sessions/empty-terminal-layout-root-repair.ts b/src/main/persistence/restoring-sessions/empty-terminal-layout-root-repair.ts index 0ffa26d6d4f..1b5d3a0a241 100644 --- a/src/main/persistence/restoring-sessions/empty-terminal-layout-root-repair.ts +++ b/src/main/persistence/restoring-sessions/empty-terminal-layout-root-repair.ts @@ -1,6 +1,6 @@ import type { PersistedState } from '../../../shared/persisted-state-types' -import type { TerminalLayoutSnapshot } from '../../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { TerminalLayoutSnapshot } from '../../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { resolveRootlessTerminalLayoutLeafId } from '../../../shared/workspace-layout/terminal-pane-tree' import { deriveHeadlessLegacyTerminalLeafId } from '../../runtime/mobile-session-layout-projection' diff --git a/src/main/persistence/restoring-sessions/invalid-workspace-layout-purge.ts b/src/main/persistence/restoring-sessions/invalid-workspace-layout-purge.ts index d6b441fa4e4..be9e3a5018b 100644 --- a/src/main/persistence/restoring-sessions/invalid-workspace-layout-purge.ts +++ b/src/main/persistence/restoring-sessions/invalid-workspace-layout-purge.ts @@ -3,7 +3,7 @@ import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../shared/constants' import { parseExecutionHostId, type ExecutionHostId } from '../../../shared/execution-host' import type { PersistedState } from '../../../shared/persisted-state-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { parseWorkspaceKey } from '../../../shared/workspace-scope' import { isWorktreeCatalogVersionBefore } from '../../../shared/worktree/catalog-version' import { diff --git a/src/main/persistence/restoring-sessions/pane-alias-normalization.test.ts b/src/main/persistence/restoring-sessions/pane-alias-normalization.test.ts index dd416132962..8f125217137 100644 --- a/src/main/persistence/restoring-sessions/pane-alias-normalization.test.ts +++ b/src/main/persistence/restoring-sessions/pane-alias-normalization.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { mergeLegacyPaneKeyAliasEntries, normalizeLegacyPaneKeyAliasEntries diff --git a/src/main/persistence/restoring-sessions/pane-alias-normalization.ts b/src/main/persistence/restoring-sessions/pane-alias-normalization.ts index 5fdc1573dcc..b3648d34b41 100644 --- a/src/main/persistence/restoring-sessions/pane-alias-normalization.ts +++ b/src/main/persistence/restoring-sessions/pane-alias-normalization.ts @@ -5,7 +5,7 @@ import { isTerminalLeafId, parseLegacyNumericPaneKey, parsePaneKey -} from '../../../shared/stable-pane-id' +} from '../../../shared/workspace-layout/stable-pane-id' import { agentHookServer } from '../../agent-hooks/server' export function legacyMigrationUnsupportedRowsToAliasEntries( diff --git a/src/main/persistence/restoring-sessions/pane-identity-migration.ts b/src/main/persistence/restoring-sessions/pane-identity-migration.ts index ec8b5f513a7..4aeca05374c 100644 --- a/src/main/persistence/restoring-sessions/pane-identity-migration.ts +++ b/src/main/persistence/restoring-sessions/pane-identity-migration.ts @@ -1,8 +1,11 @@ import type { ProfileStateStartupPaneAlias } from '../loading-store/profile-state-authority' import type { LegacyPaneKeyAliasEntry } from '../../../shared/persisted-state-types' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' -import { isTerminalLeafId, makePaneKey } from '../../../shared/stable-pane-id' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' +import { isTerminalLeafId, makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { collectLayoutLeafIdsInOrder, firstLayoutLeafId } from './terminal-layout-normalization' export function findWorktreeIdForTab( diff --git a/src/main/persistence/restoring-sessions/pane-key-remapping.test.ts b/src/main/persistence/restoring-sessions/pane-key-remapping.test.ts index 269d0db0c7a..a41c785bf1e 100644 --- a/src/main/persistence/restoring-sessions/pane-key-remapping.test.ts +++ b/src/main/persistence/restoring-sessions/pane-key-remapping.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { remapAcknowledgedAgentPaneKeys, remapActivityClearedAtPaneKeys, diff --git a/src/main/persistence/restoring-sessions/pane-key-remapping.ts b/src/main/persistence/restoring-sessions/pane-key-remapping.ts index ca1d5ef1474..90fe97a7197 100644 --- a/src/main/persistence/restoring-sessions/pane-key-remapping.ts +++ b/src/main/persistence/restoring-sessions/pane-key-remapping.ts @@ -1,5 +1,9 @@ import type { PersistedState } from '../../../shared/persisted-state-types' -import { isTerminalLeafId, makePaneKey, parsePaneKey } from '../../../shared/stable-pane-id' +import { + isTerminalLeafId, + makePaneKey, + parsePaneKey +} from '../../../shared/workspace-layout/stable-pane-id' type PaneLeafRemap = Map> diff --git a/src/main/persistence/restoring-sessions/session-owner-fields.test.ts b/src/main/persistence/restoring-sessions/session-owner-fields.test.ts index a517006d2fb..f8fefd83572 100644 --- a/src/main/persistence/restoring-sessions/session-owner-fields.test.ts +++ b/src/main/persistence/restoring-sessions/session-owner-fields.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import { getDefaultWorkspaceSession } from '../../../shared/constants' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { deleteOwnerKeyedSessionFields } from './session-owner-fields' const REMOVED_OWNER_KEY = 'repo-1::/tmp/worktree-a' diff --git a/src/main/persistence/restoring-sessions/session-owner-fields.ts b/src/main/persistence/restoring-sessions/session-owner-fields.ts index b7af9e2ec60..49d0bc1de9d 100644 --- a/src/main/persistence/restoring-sessions/session-owner-fields.ts +++ b/src/main/persistence/restoring-sessions/session-owner-fields.ts @@ -1,5 +1,5 @@ -import type { TerminalTab } from '../../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { getRepoIdFromWorktreeId } from '../../../shared/worktree/id' import { getWorktreeIdFromHostIdentity, diff --git a/src/main/persistence/restoring-sessions/session-owner-removal.ts b/src/main/persistence/restoring-sessions/session-owner-removal.ts index 356e94e11d7..59864fe4399 100644 --- a/src/main/persistence/restoring-sessions/session-owner-removal.ts +++ b/src/main/persistence/restoring-sessions/session-owner-removal.ts @@ -1,11 +1,11 @@ import type { PersistedState } from '../../../shared/persisted-state-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { LOCAL_EXECUTION_HOST_ID, parseExecutionHostId, type ExecutionHostId } from '../../../shared/execution-host' -import { workspaceSessionPartitionHostId } from '../../../shared/workspace-session-partition-owner' +import '../../../shared/workspace-session/workspace-session-partition-owner' import { isWslMoveWorkspaceSessionFrozen } from '../moving-wsl-projects/wsl-move-scope-guard' import { cloneWorkspaceSessionState, deleteOwnerKeyedSessionFields } from './session-owner-fields' @@ -73,8 +73,6 @@ export function workspaceSessionPartitionIdsForHost( : [LOCAL_EXECUTION_HOST_ID] } -export const workspaceSessionOwnerPartitionForHost = workspaceSessionPartitionHostId - /** Delete every partition copy or load may resurrect the workspace; folder host ownership can be inferred. */ export function removeWorkspaceSessionOwnerEverywhere( state: Pick, diff --git a/src/main/persistence/restoring-sessions/session-worktree-ownership.test.ts b/src/main/persistence/restoring-sessions/session-worktree-ownership.test.ts index 8fc897706a6..102d5d8b223 100644 --- a/src/main/persistence/restoring-sessions/session-worktree-ownership.test.ts +++ b/src/main/persistence/restoring-sessions/session-worktree-ownership.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import { getDefaultPersistedState, getDefaultWorkspaceSession } from '../../../shared/constants' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { worktreeWorkspaceKey } from '../../../shared/workspace-scope' import { collectPersistedSessionWorktreeOwners, diff --git a/src/main/persistence/restoring-sessions/session-worktree-ownership.ts b/src/main/persistence/restoring-sessions/session-worktree-ownership.ts index 3f2537205e7..38b3238a473 100644 --- a/src/main/persistence/restoring-sessions/session-worktree-ownership.ts +++ b/src/main/persistence/restoring-sessions/session-worktree-ownership.ts @@ -1,5 +1,5 @@ import type { PersistedState } from '../../../shared/persisted-state-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { parseWorkspaceKey } from '../../../shared/workspace-scope' import { getWorktreeIdFromHostIdentity, diff --git a/src/main/persistence/restoring-sessions/tab-terminal-pane-binding-repair.test.ts b/src/main/persistence/restoring-sessions/tab-terminal-pane-binding-repair.test.ts index c6b23e35499..f4e4812539a 100644 --- a/src/main/persistence/restoring-sessions/tab-terminal-pane-binding-repair.test.ts +++ b/src/main/persistence/restoring-sessions/tab-terminal-pane-binding-repair.test.ts @@ -8,7 +8,7 @@ import { toSshExecutionHostId, type ExecutionHostId } from '../../../shared/execution-host' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { loadWorkspaceLayout } from '../../../shared/workspace-layout/workspace-layout-load' import { saveWorkspaceLayout } from '../../../shared/workspace-layout/workspace-layout-save' import { diff --git a/src/main/persistence/restoring-sessions/tab-terminal-pane-binding-repair.ts b/src/main/persistence/restoring-sessions/tab-terminal-pane-binding-repair.ts index 5acbab27523..e5b117c12cd 100644 --- a/src/main/persistence/restoring-sessions/tab-terminal-pane-binding-repair.ts +++ b/src/main/persistence/restoring-sessions/tab-terminal-pane-binding-repair.ts @@ -1,7 +1,7 @@ import { parseExecutionHostId } from '../../../shared/execution-host' import type { PersistedState } from '../../../shared/persisted-state-types' -import type { TerminalLayoutSnapshot } from '../../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { TerminalLayoutSnapshot } from '../../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { getRepoIdFromWorktreeId } from '../../../shared/worktree/id' import { collectLayoutLeafIdsInOrder } from '../../../shared/workspace-layout/terminal-pane-tree' import { diff --git a/src/main/persistence/restoring-sessions/terminal-layout-normalization.test.ts b/src/main/persistence/restoring-sessions/terminal-layout-normalization.test.ts index 9b177ad8eba..b43bbdbeee6 100644 --- a/src/main/persistence/restoring-sessions/terminal-layout-normalization.test.ts +++ b/src/main/persistence/restoring-sessions/terminal-layout-normalization.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { TerminalLayoutSnapshot } from '../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../shared/workspace-layout/terminal-tab-types' import { collectLayoutLeafIdsInOrder, normalizeTerminalLayoutSnapshotForPersistence diff --git a/src/main/persistence/restoring-sessions/terminal-layout-normalization.ts b/src/main/persistence/restoring-sessions/terminal-layout-normalization.ts index d7ab118ca4e..971d09450ec 100644 --- a/src/main/persistence/restoring-sessions/terminal-layout-normalization.ts +++ b/src/main/persistence/restoring-sessions/terminal-layout-normalization.ts @@ -2,8 +2,8 @@ import { randomUUID } from 'node:crypto' import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode -} from '../../../shared/terminal-tab-types' -import { isTerminalLeafId } from '../../../shared/stable-pane-id' +} from '../../../shared/workspace-layout/terminal-tab-types' +import { isTerminalLeafId } from '../../../shared/workspace-layout/stable-pane-id' import { collectLayoutLeafIdsInOrder, firstLayoutLeafId diff --git a/src/main/persistence/restoring-sessions/unattached-terminal-row-sweep.test.ts b/src/main/persistence/restoring-sessions/unattached-terminal-row-sweep.test.ts index ae653631905..fe15342cc41 100644 --- a/src/main/persistence/restoring-sessions/unattached-terminal-row-sweep.test.ts +++ b/src/main/persistence/restoring-sessions/unattached-terminal-row-sweep.test.ts @@ -3,7 +3,7 @@ import { describe, expect, it } from 'vitest' import { getDefaultPersistedState } from '../../../shared/constants' import { toRuntimeExecutionHostId, toSshExecutionHostId } from '../../../shared/execution-host' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { sleepingRecord } from '../../../shared/workspace-layout/workspace-layout-profile.test-fixture' import { addWorkspace, diff --git a/src/main/persistence/restoring-sessions/workspace-pane-normalization-index.test.ts b/src/main/persistence/restoring-sessions/workspace-pane-normalization-index.test.ts index d7a2e132dd7..b741fc20571 100644 --- a/src/main/persistence/restoring-sessions/workspace-pane-normalization-index.test.ts +++ b/src/main/persistence/restoring-sessions/workspace-pane-normalization-index.test.ts @@ -1,6 +1,9 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { createLazyTerminalTabLookup } from './pane-identity-migration' import { normalizeWorkspaceSessionPaneIdentities } from './workspace-pane-normalization' diff --git a/src/main/persistence/restoring-sessions/workspace-pane-normalization.ts b/src/main/persistence/restoring-sessions/workspace-pane-normalization.ts index 42893d14fb9..74dee65d128 100644 --- a/src/main/persistence/restoring-sessions/workspace-pane-normalization.ts +++ b/src/main/persistence/restoring-sessions/workspace-pane-normalization.ts @@ -1,6 +1,6 @@ import type { LegacyPaneKeyAliasEntry, PersistedState } from '../../../shared/persisted-state-types' -import type { TerminalLayoutSnapshot } from '../../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { TerminalLayoutSnapshot } from '../../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { MigrationUnsupportedPtyEntry } from '../../../shared/agent-status/contracts/agent-status-ipc-payload' import { agentHookServer } from '../../agent-hooks/server' import { @@ -9,7 +9,7 @@ import { type ExecutionHostId } from '../../../shared/execution-host' import type { SshRemotePtyLease } from '../../../shared/ssh-types' -import { isTerminalLeafId, parsePaneKey } from '../../../shared/stable-pane-id' +import { isTerminalLeafId, parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { findCrossHostPaneTabIds, withoutPaneTabIds } from './cross-host-pane-tab-ids' import { createLazyTerminalTabLookup, diff --git a/src/main/persistence/restoring-sessions/workspace-session-write-rollback.ts b/src/main/persistence/restoring-sessions/workspace-session-write-rollback.ts index bfc530712c3..72f01e3a25f 100644 --- a/src/main/persistence/restoring-sessions/workspace-session-write-rollback.ts +++ b/src/main/persistence/restoring-sessions/workspace-session-write-rollback.ts @@ -1,5 +1,5 @@ import { isDeepStrictEqual } from 'node:util' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' const MISSING = Symbol('missing') diff --git a/src/main/persistence/runtime-authored-workspace-session-fields.test.ts b/src/main/persistence/runtime-authored-workspace-session-fields.test.ts index 3b117d9710b..184f7680c86 100644 --- a/src/main/persistence/runtime-authored-workspace-session-fields.test.ts +++ b/src/main/persistence/runtime-authored-workspace-session-fields.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { preserveRuntimeAuthoredWorkspaceSessionFields } from './runtime-authored-workspace-session-fields' const row = { diff --git a/src/main/persistence/runtime-authored-workspace-session-fields.ts b/src/main/persistence/runtime-authored-workspace-session-fields.ts index 2cb017d3987..bd42f425593 100644 --- a/src/main/persistence/runtime-authored-workspace-session-fields.ts +++ b/src/main/persistence/runtime-authored-workspace-session-fields.ts @@ -1,5 +1,5 @@ -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' -import { parsePaneKey } from '../../shared/stable-pane-id' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' +import { parsePaneKey } from '../../shared/workspace-layout/stable-pane-id' // Renderer snapshots omit runtime-owned fields; Store must preserve them, including before-unload writes. function unionWriteOnceDefaultTerminalTabsApplied( diff --git a/src/main/persistence/scheduling-automations/automation-context-migration.ts b/src/main/persistence/scheduling-automations/automation-context-migration.ts index 51b46fbc95a..1768890f111 100644 --- a/src/main/persistence/scheduling-automations/automation-context-migration.ts +++ b/src/main/persistence/scheduling-automations/automation-context-migration.ts @@ -1,5 +1,5 @@ import type { AutomationDefinitionOperations } from './automation-definition-operations' -import type { WorkspaceRunContext } from '../../../shared/task-source-context' + import type { Automation, AutomationPrecheckResult, @@ -15,11 +15,12 @@ import { hasExtraAgentArgs } from '../../../shared/agent-launch/startup/automati import { getAutomationLegacyRepoId } from '../../../shared/automation-run-identity' import { projectHostSetupProjectionFromRepos } from '../../../shared/project-host-setup-projection' import { + type WorkspaceRunContext, buildTaskSourceContextFromRepo, buildWorkspaceRunContext } from '../../../shared/task-source-context' import { getRepoExecutionHostId, parseExecutionHostId } from '../../../shared/execution-host' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' export function normalizeAutomationRunWorkspaceDisplayName(value: string | null): string | null { const trimmed = value?.trim() diff --git a/src/main/persistence/terminal-topology/closed-pane-binding-fence.test.ts b/src/main/persistence/terminal-topology/closed-pane-binding-fence.test.ts index 188b8db9f22..21feeef541f 100644 --- a/src/main/persistence/terminal-topology/closed-pane-binding-fence.test.ts +++ b/src/main/persistence/terminal-topology/closed-pane-binding-fence.test.ts @@ -1,6 +1,6 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import type { ExecutionHostId } from '../../../shared/execution-host' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { getDefaultWorkspaceSession } from '../../../shared/constants' import { _resetClosedPaneFencesForTests, diff --git a/src/main/persistence/terminal-topology/closed-pane-binding-fence.ts b/src/main/persistence/terminal-topology/closed-pane-binding-fence.ts index a5e1560f603..9134c3c0681 100644 --- a/src/main/persistence/terminal-topology/closed-pane-binding-fence.ts +++ b/src/main/persistence/terminal-topology/closed-pane-binding-fence.ts @@ -2,7 +2,7 @@ import type { ExecutionHostId } from '../../../shared/execution-host' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../shared/layout-owner-switch' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { collectLayoutLeafIdsInOrder } from '../../../shared/workspace-layout/terminal-pane-tree' import type { LayoutCommand } from '../../../shared/workspace-layout/workspace-layout-command-types' import type { DurableProfileStateMutation } from '../loading-store/store-runtime-state' diff --git a/src/main/persistence/terminal-topology/cross-partition-tab-move.ts b/src/main/persistence/terminal-topology/cross-partition-tab-move.ts index 93d34d5d648..beaa5b136e6 100644 --- a/src/main/persistence/terminal-topology/cross-partition-tab-move.ts +++ b/src/main/persistence/terminal-topology/cross-partition-tab-move.ts @@ -2,7 +2,7 @@ import { randomUUID } from 'node:crypto' import type { ExecutionHostId } from '../../../shared/execution-host' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { CommandOf, LayoutApplyOutcome diff --git a/src/main/persistence/terminal-topology/duplicate-pty-pane-repair.test.ts b/src/main/persistence/terminal-topology/duplicate-pty-pane-repair.test.ts index 227871ec564..3f750c08c33 100644 --- a/src/main/persistence/terminal-topology/duplicate-pty-pane-repair.test.ts +++ b/src/main/persistence/terminal-topology/duplicate-pty-pane-repair.test.ts @@ -7,7 +7,7 @@ import type { OrcaRuntimeService } from '../../runtime/orca-runtime' import { repairDuplicatePtyPanesOnStart } from '../../runtime/moved-pane-owner-rekey' import { getDefaultWorkspaceSession } from '../../../shared/constants' import type { PersistedState } from '../../../shared/persisted-state-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { DelayedAuthority } from '../loading-store/profile-state-delayed-authority-fixture' import { Store } from '../loading-store/store' import { ProfileStateSqliteAuthority } from '../profile-state/profile-state-sqlite-authority' diff --git a/src/main/persistence/terminal-topology/duplicate-pty-pane-repair.ts b/src/main/persistence/terminal-topology/duplicate-pty-pane-repair.ts index 178090dab15..b6d3b2326d5 100644 --- a/src/main/persistence/terminal-topology/duplicate-pty-pane-repair.ts +++ b/src/main/persistence/terminal-topology/duplicate-pty-pane-repair.ts @@ -1,11 +1,11 @@ import { LOCAL_EXECUTION_HOST_ID, type ExecutionHostId } from '../../../shared/execution-host' -import { isTerminalLeafId, makePaneKey } from '../../../shared/stable-pane-id' +import { isTerminalLeafId, makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { normalizeTerminalLayoutPtyOwnership, resolveTerminalLayoutPtyOwnershipTransfers -} from '../../../shared/terminal-layout-pty-ownership' -import type { TerminalLayoutSnapshot } from '../../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +} from '../../../shared/workspace-layout/terminal-layout-pty-ownership' +import type { TerminalLayoutSnapshot } from '../../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { DurableProfileStateMutation } from '../loading-store/store-runtime-state' import { isWslMoveWorkspaceSessionFrozen } from '../moving-wsl-projects/wsl-move-scope-guard' import { findWorktreeIdForTab } from '../restoring-sessions/pane-identity-migration' diff --git a/src/main/persistence/terminal-topology/layout-command-binding-generations.ts b/src/main/persistence/terminal-topology/layout-command-binding-generations.ts index 71750e7f2ed..89363f7b6c7 100644 --- a/src/main/persistence/terminal-topology/layout-command-binding-generations.ts +++ b/src/main/persistence/terminal-topology/layout-command-binding-generations.ts @@ -3,7 +3,7 @@ import type { ExecutionHostId } from '../../../shared/execution-host' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../shared/layout-owner-switch' import { collectLayoutLeafIdsInOrder } from '../../../shared/workspace-layout/terminal-pane-tree' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { bumpPtyBindingGeneration } from '../loading-store/pty-binding-generations' import type { DurableProfileStateMutation, diff --git a/src/main/persistence/terminal-topology/layout-command-commit.ts b/src/main/persistence/terminal-topology/layout-command-commit.ts index 660c631e784..6ec13912780 100644 --- a/src/main/persistence/terminal-topology/layout-command-commit.ts +++ b/src/main/persistence/terminal-topology/layout-command-commit.ts @@ -1,7 +1,7 @@ // Apply routed-partition commands first while carrying in-memory editor views through saved-session loads. import { LOCAL_EXECUTION_HOST_ID, type ExecutionHostId } from '../../../shared/execution-host' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { LayoutApplyOutcome, LayoutCommand, diff --git a/src/main/persistence/terminal-topology/layout-command-persistence.ts b/src/main/persistence/terminal-topology/layout-command-persistence.ts index 7cf6f68a323..22a6b716cfe 100644 --- a/src/main/persistence/terminal-topology/layout-command-persistence.ts +++ b/src/main/persistence/terminal-topology/layout-command-persistence.ts @@ -1,4 +1,4 @@ -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { CommandOf, LayoutApplyOutcome, diff --git a/src/main/persistence/terminal-topology/layout-owner-written-session-golden.test.ts b/src/main/persistence/terminal-topology/layout-owner-written-session-golden.test.ts index 8f24027e055..1579279b204 100644 --- a/src/main/persistence/terminal-topology/layout-owner-written-session-golden.test.ts +++ b/src/main/persistence/terminal-topology/layout-owner-written-session-golden.test.ts @@ -8,7 +8,7 @@ import { LAYOUT_OWNER_WRITTEN_SESSION_WORKTREE_ID as WORKTREE } from '../../../shared/__fixtures__/layout-owner-written-session-golden-paths' import type { LayoutCommand } from '../../../shared/workspace-layout/workspace-layout-command-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { Store } from '../loading-store/store' import { ProfileStateSqliteAuthority } from '../profile-state/profile-state-sqlite-authority' import { windowViewSaveForMain } from '../window-save-view' diff --git a/src/main/persistence/terminal-topology/layout-owner-written-session-switch-off-load.test.ts b/src/main/persistence/terminal-topology/layout-owner-written-session-switch-off-load.test.ts index 956a965320f..d05437171cb 100644 --- a/src/main/persistence/terminal-topology/layout-owner-written-session-switch-off-load.test.ts +++ b/src/main/persistence/terminal-topology/layout-owner-written-session-switch-off-load.test.ts @@ -5,7 +5,7 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import { LAYOUT_OWNER_WRITTEN_SESSION_GOLDEN_PATH } from '../../../shared/__fixtures__/layout-owner-written-session-golden-paths' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../shared/layout-owner-switch' import { stableJson } from '../../../shared/workspace-layout/workspace-layout-load-report' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { emptyTerminalSessionProfile, openTopologyStore } from './terminal-topology-profile-fixture' vi.mock('../../telemetry/client', () => ({ track: vi.fn() })) diff --git a/src/main/persistence/terminal-topology/pane-remote-session-follow.ts b/src/main/persistence/terminal-topology/pane-remote-session-follow.ts index 811776d0981..7c1c876cf2c 100644 --- a/src/main/persistence/terminal-topology/pane-remote-session-follow.ts +++ b/src/main/persistence/terminal-topology/pane-remote-session-follow.ts @@ -1,4 +1,4 @@ -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { LayoutCommand } from '../../../shared/workspace-layout/workspace-layout-command-types' /** Remote session IDs live outside the layout model and must follow the remaining pane after close. */ diff --git a/src/main/persistence/terminal-topology/persistence-binding-graft-placement.test.ts b/src/main/persistence/terminal-topology/persistence-binding-graft-placement.test.ts index 9dbf74c2ee8..85775ad7b6d 100644 --- a/src/main/persistence/terminal-topology/persistence-binding-graft-placement.test.ts +++ b/src/main/persistence/terminal-topology/persistence-binding-graft-placement.test.ts @@ -3,8 +3,8 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { TerminalPaneLayoutNode } from '../../../shared/terminal-tab-types' -import type { TerminalPanePlacement } from '../../../shared/terminal-pane-placement' +import type { TerminalPaneLayoutNode } from '../../../shared/workspace-layout/terminal-tab-types' +import type { TerminalPanePlacement } from '../../../shared/workspace-layout/terminal-pane-placement' import { makeTerminalTab, TEST_LEAF_1, TEST_LEAF_2 } from '../persistence-session-fixtures' vi.mock('electron', () => ({ diff --git a/src/main/persistence/terminal-topology/persistence-closed-pane-binding-fence.test.ts b/src/main/persistence/terminal-topology/persistence-closed-pane-binding-fence.test.ts index 1b77288c6a0..39b23b9aa76 100644 --- a/src/main/persistence/terminal-topology/persistence-closed-pane-binding-fence.test.ts +++ b/src/main/persistence/terminal-topology/persistence-closed-pane-binding-fence.test.ts @@ -8,7 +8,7 @@ import { TEST_LEAF_1, TEST_LEAF_2 } from '../persistence-session-fixtures' import { _resetClosedPaneFencesForTests } from './closed-pane-binding-fence' import { closeLeafOrTab } from './terminal-topology-commit' import { captureTerminalCloseRequest } from '../../runtime/terminal-surface-close' -import type { TerminalSurfaceCloseTarget } from '../../../shared/terminal-surface-close-target' +import type { TerminalSurfaceCloseTarget } from '../../../shared/workspace-layout/terminal-surface-close-target' import { LOCAL_EXECUTION_HOST_ID, type ExecutionHostId } from '../../../shared/execution-host' vi.mock('electron', () => ({ diff --git a/src/main/persistence/terminal-topology/persistence-cross-host-pane-identity.test.ts b/src/main/persistence/terminal-topology/persistence-cross-host-pane-identity.test.ts index c93f6df6b9d..9a44fe2433c 100644 --- a/src/main/persistence/terminal-topology/persistence-cross-host-pane-identity.test.ts +++ b/src/main/persistence/terminal-topology/persistence-cross-host-pane-identity.test.ts @@ -11,9 +11,9 @@ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest' import { rmSync, mkdtempSync } from 'node:fs' import { join } from 'node:path' import { tmpdir } from 'node:os' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { getDefaultWorkspaceSession } from '../../../shared/constants' -import { isTerminalLeafId } from '../../../shared/stable-pane-id' +import { isTerminalLeafId } from '../../../shared/workspace-layout/stable-pane-id' vi.mock('electron', () => ({ app: { getPath: () => testState.dir }, diff --git a/src/main/persistence/terminal-topology/persistence-empty-root-layout-load.test.ts b/src/main/persistence/terminal-topology/persistence-empty-root-layout-load.test.ts index b830985c497..8ecdcb4efbd 100644 --- a/src/main/persistence/terminal-topology/persistence-empty-root-layout-load.test.ts +++ b/src/main/persistence/terminal-topology/persistence-empty-root-layout-load.test.ts @@ -9,10 +9,10 @@ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest' import { rmSync, mkdtempSync } from 'node:fs' import { join } from 'node:path' import { tmpdir } from 'node:os' -import type { TerminalLayoutSnapshot } from '../../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { TerminalLayoutSnapshot } from '../../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { getDefaultWorkspaceSession } from '../../../shared/constants' -import { isTerminalLeafId } from '../../../shared/stable-pane-id' +import { isTerminalLeafId } from '../../../shared/workspace-layout/stable-pane-id' import { makeTerminalTab, TEST_LEAF_1 } from '../persistence-session-fixtures' vi.mock('electron', () => ({ diff --git a/src/main/persistence/terminal-topology/persistence-host-partitioned-ssh-pty-bindings.test.ts b/src/main/persistence/terminal-topology/persistence-host-partitioned-ssh-pty-bindings.test.ts index 87ee60569ac..4623241375c 100644 --- a/src/main/persistence/terminal-topology/persistence-host-partitioned-ssh-pty-bindings.test.ts +++ b/src/main/persistence/terminal-topology/persistence-host-partitioned-ssh-pty-bindings.test.ts @@ -10,7 +10,7 @@ import { rmSync, mkdtempSync } from 'node:fs' import { join } from 'node:path' import { tmpdir } from 'node:os' import { ProfileStateSqliteAuthority } from '../profile-state/profile-state-sqlite-authority' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { getDefaultWorkspaceSession } from '../../../shared/constants' import { TEST_LEAF_1 } from '../persistence-session-fixtures' diff --git a/src/main/persistence/terminal-topology/persistence-layout-binding-recovery.test.ts b/src/main/persistence/terminal-topology/persistence-layout-binding-recovery.test.ts index 46b339e5677..699a9bf60f0 100644 --- a/src/main/persistence/terminal-topology/persistence-layout-binding-recovery.test.ts +++ b/src/main/persistence/terminal-topology/persistence-layout-binding-recovery.test.ts @@ -9,7 +9,7 @@ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest' import { rmSync, mkdtempSync } from 'node:fs' import { join } from 'node:path' import { tmpdir } from 'node:os' -import { isTerminalLeafId } from '../../../shared/stable-pane-id' +import { isTerminalLeafId } from '../../../shared/workspace-layout/stable-pane-id' import { TEST_LEAF_1, diff --git a/src/main/persistence/terminal-topology/persistence-pane-alias-selective-saves.test.ts b/src/main/persistence/terminal-topology/persistence-pane-alias-selective-saves.test.ts index dffe2ce42f6..b9cec76f470 100644 --- a/src/main/persistence/terminal-topology/persistence-pane-alias-selective-saves.test.ts +++ b/src/main/persistence/terminal-topology/persistence-pane-alias-selective-saves.test.ts @@ -14,7 +14,7 @@ import { openProfileStateDatabaseReadOnly } from '../profile-state/profile-state import { profileStateDatabaseFile } from '../../../shared/profile-state-storage-paths' import { ProfileStateSqliteAuthority } from '../profile-state/profile-state-sqlite-authority' import { getDefaultWorkspaceSession } from '../../../shared/constants' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' vi.mock('electron', () => ({ app: { getPath: () => testState.dir }, diff --git a/src/main/persistence/terminal-topology/persistence-pane-identity-migration.test.ts b/src/main/persistence/terminal-topology/persistence-pane-identity-migration.test.ts index c1926c533e7..b1d234a3a3e 100644 --- a/src/main/persistence/terminal-topology/persistence-pane-identity-migration.test.ts +++ b/src/main/persistence/terminal-topology/persistence-pane-identity-migration.test.ts @@ -11,7 +11,7 @@ import { writeFileSync, rmSync, mkdtempSync, mkdirSync } from 'node:fs' import { join } from 'node:path' import { tmpdir } from 'node:os' import type { PersistedState } from '../../../shared/persisted-state-types' -import { isTerminalLeafId, makePaneKey } from '../../../shared/stable-pane-id' +import { isTerminalLeafId, makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { agentHookServer } from '../../agent-hooks/server' import { diff --git a/src/main/persistence/terminal-topology/persistence-runtime-admitted-terminal-membership.test.ts b/src/main/persistence/terminal-topology/persistence-runtime-admitted-terminal-membership.test.ts index c15e03cf2dc..1556c77afcc 100644 --- a/src/main/persistence/terminal-topology/persistence-runtime-admitted-terminal-membership.test.ts +++ b/src/main/persistence/terminal-topology/persistence-runtime-admitted-terminal-membership.test.ts @@ -4,7 +4,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { getDefaultWorkspaceSession } from '../../../shared/constants' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { retireTerminalSurfaceFromPersistence } from '../../runtime/mobile-session-terminal-persistence-retirement' import { makeTerminalTab, TEST_LEAF_1, TEST_LEAF_2 } from '../persistence-session-fixtures' diff --git a/src/main/persistence/terminal-topology/persistence-split-pane-incarnation.test.ts b/src/main/persistence/terminal-topology/persistence-split-pane-incarnation.test.ts index 37115235cbb..52ab6b8e2cf 100644 --- a/src/main/persistence/terminal-topology/persistence-split-pane-incarnation.test.ts +++ b/src/main/persistence/terminal-topology/persistence-split-pane-incarnation.test.ts @@ -10,7 +10,7 @@ import { rmSync, mkdtempSync } from 'node:fs' import { join } from 'node:path' import { tmpdir } from 'node:os' import { ProfileStateSqliteAuthority } from '../profile-state/profile-state-sqlite-authority' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { getDefaultWorkspaceSession } from '../../../shared/constants' import { makeTerminalTab, TEST_LEAF_1, TEST_LEAF_2 } from '../persistence-session-fixtures' diff --git a/src/main/persistence/terminal-topology/persistence-ssh-remote-pty-binding-replay.test.ts b/src/main/persistence/terminal-topology/persistence-ssh-remote-pty-binding-replay.test.ts index ddacbcf9ffc..c24694e9c17 100644 --- a/src/main/persistence/terminal-topology/persistence-ssh-remote-pty-binding-replay.test.ts +++ b/src/main/persistence/terminal-topology/persistence-ssh-remote-pty-binding-replay.test.ts @@ -10,7 +10,7 @@ import { join } from 'node:path' import { tmpdir } from 'node:os' import { TEST_LEAF_1, TEST_LEAF_2 } from '../persistence-session-fixtures' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' const { loadUserSshConfigMock, sshConfigHostsToTargetsMock } = vi.hoisted(() => ({ loadUserSshConfigMock: vi.fn(), diff --git a/src/main/persistence/terminal-topology/persistence-ssh-targets-and-pane-keys.test.ts b/src/main/persistence/terminal-topology/persistence-ssh-targets-and-pane-keys.test.ts index 405def99562..13f279154f7 100644 --- a/src/main/persistence/terminal-topology/persistence-ssh-targets-and-pane-keys.test.ts +++ b/src/main/persistence/terminal-topology/persistence-ssh-targets-and-pane-keys.test.ts @@ -10,7 +10,7 @@ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest' import { rmSync, mkdtempSync } from 'node:fs' import { join } from 'node:path' import { tmpdir } from 'node:os' -import { isTerminalLeafId, makePaneKey } from '../../../shared/stable-pane-id' +import { isTerminalLeafId, makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { SshConnectionStore } from '../../ssh/connection/ssh-connection-store' import { LEGACY_DEFAULT_SSH_RELAY_GRACE_PERIOD_SECONDS } from '../../../shared/ssh-types' diff --git a/src/main/persistence/terminal-topology/persistence-tab-terminal-pane-binding-load.test.ts b/src/main/persistence/terminal-topology/persistence-tab-terminal-pane-binding-load.test.ts index 46c14809c6f..d46d4910442 100644 --- a/src/main/persistence/terminal-topology/persistence-tab-terminal-pane-binding-load.test.ts +++ b/src/main/persistence/terminal-topology/persistence-tab-terminal-pane-binding-load.test.ts @@ -11,7 +11,7 @@ import { rmSync, mkdtempSync } from 'node:fs' import { join } from 'node:path' import { tmpdir } from 'node:os' import { getDefaultWorkspaceSession } from '../../../shared/constants' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' const layoutOwner = vi.hoisted(() => ({ isMain: true })) vi.mock('../../../shared/layout-owner-switch', () => ({ diff --git a/src/main/persistence/terminal-topology/terminal-layout-create-resend.test.ts b/src/main/persistence/terminal-topology/terminal-layout-create-resend.test.ts index 74e5d8627ac..62fa62d5fde 100644 --- a/src/main/persistence/terminal-topology/terminal-layout-create-resend.test.ts +++ b/src/main/persistence/terminal-topology/terminal-layout-create-resend.test.ts @@ -4,7 +4,7 @@ import { join } from 'node:path' import { afterEach, describe, expect, it, vi } from 'vitest' import { getDefaultWorkspaceSession } from '../../../shared/constants' import type { CommandOf } from '../../../shared/workspace-layout/workspace-layout-command-types' -import { collectLeafIds } from '../../../shared/terminal-pane-layout-tree' +import { collectLeafIds } from '../../../shared/workspace-layout/terminal-pane-layout-tree' import type { Store } from '../loading-store/store' import { _resetClosedPaneFencesForTests } from './closed-pane-binding-fence' import { WindowSession } from './terminal-topology-window-session-fixture' diff --git a/src/main/persistence/terminal-topology/terminal-leaf-move-concurrent-close.test.ts b/src/main/persistence/terminal-topology/terminal-leaf-move-concurrent-close.test.ts index f743489ad1e..ef58c777496 100644 --- a/src/main/persistence/terminal-topology/terminal-leaf-move-concurrent-close.test.ts +++ b/src/main/persistence/terminal-topology/terminal-leaf-move-concurrent-close.test.ts @@ -1,6 +1,6 @@ import { tmpdir } from 'node:os' import { afterEach, describe, expect, it, vi } from 'vitest' -import type { TerminalSurfaceCloseTarget } from '../../../shared/terminal-surface-close-target' +import type { TerminalSurfaceCloseTarget } from '../../../shared/workspace-layout/terminal-surface-close-target' import { makeRepo } from '../persistence-test-harness' import { closeMoveTestStores, diff --git a/src/main/persistence/terminal-topology/terminal-leaf-move-fixture.ts b/src/main/persistence/terminal-topology/terminal-leaf-move-fixture.ts index 666909bb20b..26918caf720 100644 --- a/src/main/persistence/terminal-topology/terminal-leaf-move-fixture.ts +++ b/src/main/persistence/terminal-topology/terminal-leaf-move-fixture.ts @@ -3,7 +3,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { vi } from 'vitest' import type { SleepingAgentSessionRecord } from '../../../shared/agent-session/lifecycle/agent-session-resume' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { closeTestStores, createSqliteTestStore } from '../persistence-test-harness' import { Store } from '../loading-store/store' import { collectLayoutLeafIdsInOrder } from '../restoring-sessions/terminal-layout-normalization' diff --git a/src/main/persistence/terminal-topology/terminal-leaf-move.ts b/src/main/persistence/terminal-topology/terminal-leaf-move.ts index f390f204e57..6907df901bd 100644 --- a/src/main/persistence/terminal-topology/terminal-leaf-move.ts +++ b/src/main/persistence/terminal-topology/terminal-leaf-move.ts @@ -1,15 +1,18 @@ import type { PersistedState } from '../../../shared/persisted-state-types' import type { SshRemotePtyLease } from '../../../shared/ssh-types' -import { makePaneKey } from '../../../shared/stable-pane-id' -import { collectLeafIds } from '../../../shared/terminal-pane-layout-tree' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' +import { collectLeafIds } from '../../../shared/workspace-layout/terminal-pane-layout-tree' import { terminalLeafMovePaneKeys, type TerminalLeafMoveRequest, type TerminalLeafMoveResult -} from '../../../shared/terminal-leaf-move' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' -import { retireLeavesFromTerminalLayout } from '../../../shared/terminal-layout-leaf-retirement' +} from '../../../shared/workspace-layout/terminal-leaf-move' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' +import { retireLeavesFromTerminalLayout } from '../../../shared/workspace-layout/terminal-layout-leaf-retirement' import { createMinimalPersistedTerminalTab } from '../restoring-sessions/session-owner-fields' import { layoutContainsLeafId } from '../restoring-sessions/terminal-layout-normalization' import { writeRestorable } from './restorable-write' diff --git a/src/main/persistence/terminal-topology/terminal-owner-invariants.test.ts b/src/main/persistence/terminal-topology/terminal-owner-invariants.test.ts index 781abef64ac..2dc24ffe18d 100644 --- a/src/main/persistence/terminal-topology/terminal-owner-invariants.test.ts +++ b/src/main/persistence/terminal-topology/terminal-owner-invariants.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest' import { getDefaultWorkspaceSession } from '../../../shared/constants' import type { ExecutionHostId } from '../../../shared/execution-host' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { TEST_LEAF_1, TEST_LEAF_2, TEST_LEAF_LIVE } from '../persistence-session-fixtures' import { findTerminalBindingConflict } from '../../../shared/workspace-layout/terminal-owner-invariants' diff --git a/src/main/persistence/terminal-topology/terminal-owner-report-only.test.ts b/src/main/persistence/terminal-topology/terminal-owner-report-only.test.ts index 9e23fc2346d..ffd6a82686d 100644 --- a/src/main/persistence/terminal-topology/terminal-owner-report-only.test.ts +++ b/src/main/persistence/terminal-topology/terminal-owner-report-only.test.ts @@ -3,8 +3,11 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, describe, expect, it, vi } from 'vitest' import { getDefaultWorkspaceSession } from '../../../shared/constants' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { _resetTracerForTests, setActiveSink } from '../../observability/tracer' import { TEST_LEAF_1, TEST_LEAF_2, TEST_LEAF_LIVE } from '../persistence-session-fixtures' import { DelayedAuthority } from '../loading-store/profile-state-delayed-authority-fixture' diff --git a/src/main/persistence/terminal-topology/terminal-pane-admission-taken-ids.test.ts b/src/main/persistence/terminal-topology/terminal-pane-admission-taken-ids.test.ts index 5c0ce678e25..f5489e2af69 100644 --- a/src/main/persistence/terminal-topology/terminal-pane-admission-taken-ids.test.ts +++ b/src/main/persistence/terminal-topology/terminal-pane-admission-taken-ids.test.ts @@ -1,7 +1,7 @@ // Both runtime and client admission must preserve closed tabs and refuse cross-tab ID collisions. import { describe, expect, it, vi } from 'vitest' import { getDefaultWorkspaceSession } from '../../../shared/constants' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { admitPaneToSession, applyCommandToSession } from './terminal-pane-admission' vi.mock('../../../shared/layout-owner-switch', () => ({ ORCA_LAYOUT_OWNER_IS_MAIN: true })) diff --git a/src/main/persistence/terminal-topology/terminal-pane-admission.ts b/src/main/persistence/terminal-topology/terminal-pane-admission.ts index 618a48b38e6..08f4c4aed35 100644 --- a/src/main/persistence/terminal-topology/terminal-pane-admission.ts +++ b/src/main/persistence/terminal-topology/terminal-pane-admission.ts @@ -2,7 +2,7 @@ import { randomUUID } from 'node:crypto' import type { ExecutionHostId } from '../../../shared/execution-host' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { leafIdsOf, locatePane @@ -29,7 +29,7 @@ import { followRemoteSessionAfterPaneClose, followRemoteSessionAfterPaneDetach } from './pane-remote-session-follow' -import { pruneClosedTerminalTabTombstones } from '../../../shared/closed-terminal-tab-tombstones' +import { pruneClosedTerminalTabTombstones } from '../../../shared/workspace-layout/closed-terminal-tab-tombstones' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../shared/layout-owner-switch' import { editorViewsOfModel, type PartitionEditorViews } from '../loading-store/layout-editor-views' diff --git a/src/main/persistence/terminal-topology/terminal-pane-placement-agreement.ts b/src/main/persistence/terminal-topology/terminal-pane-placement-agreement.ts index 20c219e0883..7229bf93e6e 100644 --- a/src/main/persistence/terminal-topology/terminal-pane-placement-agreement.ts +++ b/src/main/persistence/terminal-topology/terminal-pane-placement-agreement.ts @@ -1,5 +1,5 @@ -import type { TerminalPanePlacement } from '../../../shared/terminal-pane-placement' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { TerminalPanePlacement } from '../../../shared/workspace-layout/terminal-pane-placement' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { layoutContainsLeafId } from '../restoring-sessions/terminal-layout-normalization' /** Low-cardinality span attribute; absent tracks new leaves relying on legacy mint/graft placement. */ diff --git a/src/main/persistence/terminal-topology/terminal-pane-placement-graft.ts b/src/main/persistence/terminal-topology/terminal-pane-placement-graft.ts index b4003f28e31..063e99f02fa 100644 --- a/src/main/persistence/terminal-topology/terminal-pane-placement-graft.ts +++ b/src/main/persistence/terminal-topology/terminal-pane-placement-graft.ts @@ -1,5 +1,5 @@ -import type { TerminalPanePlacement } from '../../../shared/terminal-pane-placement' -import type { TerminalPaneLayoutNode } from '../../../shared/terminal-tab-types' +import type { TerminalPanePlacement } from '../../../shared/workspace-layout/terminal-pane-placement' +import type { TerminalPaneLayoutNode } from '../../../shared/workspace-layout/terminal-tab-types' import { collectLayoutLeafIdsInOrder, insertLeafBeside, diff --git a/src/main/persistence/terminal-topology/terminal-sleep-quit-resume.test.ts b/src/main/persistence/terminal-topology/terminal-sleep-quit-resume.test.ts index a09c5bd928b..a9966ddc005 100644 --- a/src/main/persistence/terminal-topology/terminal-sleep-quit-resume.test.ts +++ b/src/main/persistence/terminal-topology/terminal-sleep-quit-resume.test.ts @@ -4,7 +4,7 @@ import { join } from 'node:path' import { afterEach, describe, expect, it, vi } from 'vitest' import type { SleepingAgentSessionRecord } from '../../../shared/agent-session/lifecycle/agent-session-resume' import { buildAgentResumeStartupPlan } from '../../../shared/agent-launch/startup/tui-agent-resume-startup' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { Store } from '../loading-store/store' import { emptyTerminalSessionProfile, diff --git a/src/main/persistence/terminal-topology/terminal-stale-pane-tree-client.test.ts b/src/main/persistence/terminal-topology/terminal-stale-pane-tree-client.test.ts index 35b0cc7f2d9..117979820b1 100644 --- a/src/main/persistence/terminal-topology/terminal-stale-pane-tree-client.test.ts +++ b/src/main/persistence/terminal-topology/terminal-stale-pane-tree-client.test.ts @@ -3,8 +3,8 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, describe, expect, it, vi } from 'vitest' import { LOCAL_EXECUTION_HOST_ID } from '../../../shared/execution-host' -import type { TerminalPaneLayoutNode } from '../../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { TerminalPaneLayoutNode } from '../../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { TEST_LEAF_1, TEST_LEAF_2 } from '../persistence-session-fixtures' import type { OrcaRuntimeWithCloseHeadlessMobileTerminalTab } from '../../runtime/session-tabs/headless-terminal-tab-close' import { OrcaRuntimeService } from '../../runtime/orca-runtime' diff --git a/src/main/persistence/terminal-topology/terminal-topology-commit.test.ts b/src/main/persistence/terminal-topology/terminal-topology-commit.test.ts index 2c0370f91e9..0b94f0c6719 100644 --- a/src/main/persistence/terminal-topology/terminal-topology-commit.test.ts +++ b/src/main/persistence/terminal-topology/terminal-topology-commit.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { ExecutionHostId } from '../../../shared/execution-host' -import type { TerminalSurfaceCloseTarget } from '../../../shared/terminal-surface-close-target' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { TerminalSurfaceCloseTarget } from '../../../shared/workspace-layout/terminal-surface-close-target' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { _resetTracerForTests, setActiveSink } from '../../observability/tracer' import type { TerminalSurfaceCloseCommit } from '../../runtime/terminal-surface-close' import { closeLeafOrTab } from './terminal-topology-commit' diff --git a/src/main/persistence/terminal-topology/terminal-topology-commit.ts b/src/main/persistence/terminal-topology/terminal-topology-commit.ts index 327b789ffc2..76b81a573b9 100644 --- a/src/main/persistence/terminal-topology/terminal-topology-commit.ts +++ b/src/main/persistence/terminal-topology/terminal-topology-commit.ts @@ -1,11 +1,11 @@ import type { ExecutionHostId } from '../../../shared/execution-host' -import { hasClosedTerminalTabRecord } from '../../../shared/closed-terminal-tab-tombstones' +import { hasClosedTerminalTabRecord } from '../../../shared/workspace-layout/closed-terminal-tab-tombstones' import type { PersistedState } from '../../../shared/persisted-state-types' import type { TerminalLeafMoveRequest, TerminalLeafMoveResult -} from '../../../shared/terminal-leaf-move' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +} from '../../../shared/workspace-layout/terminal-leaf-move' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { CommandOf, LayoutApplyOutcome, diff --git a/src/main/persistence/terminal-topology/terminal-topology-membership.ts b/src/main/persistence/terminal-topology/terminal-topology-membership.ts index 3b66c132059..fcf14a4f777 100644 --- a/src/main/persistence/terminal-topology/terminal-topology-membership.ts +++ b/src/main/persistence/terminal-topology/terminal-topology-membership.ts @@ -4,7 +4,7 @@ import { type ExecutionHostId } from '../../../shared/execution-host' import type { PersistedState } from '../../../shared/persisted-state-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { getRepoIdFromWorktreeId } from '../../../shared/worktree/id' import { layoutContainsLeafId } from '../restoring-sessions/terminal-layout-normalization' diff --git a/src/main/persistence/terminal-topology/terminal-topology-model.test.ts b/src/main/persistence/terminal-topology/terminal-topology-model.test.ts index fb903944b0e..5ea9cb2d2da 100644 --- a/src/main/persistence/terminal-topology/terminal-topology-model.test.ts +++ b/src/main/persistence/terminal-topology/terminal-topology-model.test.ts @@ -6,11 +6,11 @@ import { mulberry32 } from '../../../shared/agent-tui-ansi-fuzz-stream' import type { SleepingAgentSessionRecord } from '../../../shared/agent-session/lifecycle/agent-session-resume' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../shared/constants' import { LOCAL_EXECUTION_HOST_ID } from '../../../shared/execution-host' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { retireTerminalSurfaceFromPersistence } from '../../runtime/mobile-session-terminal-persistence-retirement' import type { Store } from '../loading-store/store' import type { DurableProfileStateMutation } from '../loading-store/store-runtime-state' -import type { TerminalSurfaceCloseTarget } from '../../../shared/terminal-surface-close-target' +import type { TerminalSurfaceCloseTarget } from '../../../shared/workspace-layout/terminal-surface-close-target' import type { TerminalSurfaceCloseOptions } from '../../runtime/terminal-surface-close' import { leafIds, WindowSession, withoutLeaf } from './terminal-topology-window-session-fixture' import { diff --git a/src/main/persistence/terminal-topology/terminal-topology-window-session-fixture.ts b/src/main/persistence/terminal-topology/terminal-topology-window-session-fixture.ts index ecf58114506..0caf345bf7a 100644 --- a/src/main/persistence/terminal-topology/terminal-topology-window-session-fixture.ts +++ b/src/main/persistence/terminal-topology/terminal-topology-window-session-fixture.ts @@ -1,7 +1,10 @@ import type { SleepingAgentSessionRecord } from '../../../shared/agent-session/lifecycle/agent-session-resume' import type { Tab } from '../../../shared/tab-types' -import type { TerminalPaneLayoutNode, TerminalTab } from '../../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { + TerminalPaneLayoutNode, + TerminalTab +} from '../../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' export function leafIds(node: TerminalPaneLayoutNode | null | undefined): string[] { if (!node) { diff --git a/src/main/persistence/terminal-topology/windowless-host-reload-keeps-terminals.test.ts b/src/main/persistence/terminal-topology/windowless-host-reload-keeps-terminals.test.ts index d9578ffa669..312ba9c8826 100644 --- a/src/main/persistence/terminal-topology/windowless-host-reload-keeps-terminals.test.ts +++ b/src/main/persistence/terminal-topology/windowless-host-reload-keeps-terminals.test.ts @@ -2,8 +2,8 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../../shared/stable-pane-id' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { LayoutCommand } from '../../../shared/workspace-layout/workspace-layout-command-types' import type { Store } from '../loading-store/store' import { leafIds } from './terminal-topology-window-session-fixture' diff --git a/src/main/persistence/terminal-topology/windowless-restart-lost-binding.test.ts b/src/main/persistence/terminal-topology/windowless-restart-lost-binding.test.ts index 08d0a52fadb..262a7b960cc 100644 --- a/src/main/persistence/terminal-topology/windowless-restart-lost-binding.test.ts +++ b/src/main/persistence/terminal-topology/windowless-restart-lost-binding.test.ts @@ -2,7 +2,7 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, describe, expect, it, vi } from 'vitest' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { Store } from '../loading-store/store' import { leafIds } from './terminal-topology-window-session-fixture' import { diff --git a/src/main/persistence/terminal-topology/workspace-layout-rules.test.ts b/src/main/persistence/terminal-topology/workspace-layout-rules.test.ts index 8b7929f460d..2252e0f5475 100644 --- a/src/main/persistence/terminal-topology/workspace-layout-rules.test.ts +++ b/src/main/persistence/terminal-topology/workspace-layout-rules.test.ts @@ -1,8 +1,8 @@ import { describe, expect, it } from 'vitest' import { getDefaultWorkspaceSession } from '../../../shared/constants' import type { Tab, TabGroup } from '../../../shared/tab-types' -import type { TerminalPaneLayoutNode } from '../../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { TerminalPaneLayoutNode } from '../../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { TEST_LEAF_1, TEST_LEAF_2, TEST_LEAF_LIVE } from '../persistence-session-fixtures' import { checkWorkspaceLayoutRules, diff --git a/src/main/persistence/tracking-repos/deregistered-repo-residue.ts b/src/main/persistence/tracking-repos/deregistered-repo-residue.ts index 8a0c7bd8239..4e5c14c105a 100644 --- a/src/main/persistence/tracking-repos/deregistered-repo-residue.ts +++ b/src/main/persistence/tracking-repos/deregistered-repo-residue.ts @@ -6,7 +6,7 @@ import { import { parseExecutionHostId } from '../../../shared/execution-host' import { addWorkspaceSessionWorktreeOwners } from '../restoring-sessions/session-worktree-ownership' import { splitWorktreeId } from '../../../shared/worktree/id' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { SESSION_FIELDS_PRUNED_BY_OWNER_KEY } from '../../orca-profiles/profile-project-session-field-disposition' import { ownerKeyWorktreeIds } from '../../orca-profiles/profile-project-worktree-identity' diff --git a/src/main/persistence/tracking-repos/persistence-invalid-workspace-layout-purge.test.ts b/src/main/persistence/tracking-repos/persistence-invalid-workspace-layout-purge.test.ts index 165b21b4d10..349569dbef8 100644 --- a/src/main/persistence/tracking-repos/persistence-invalid-workspace-layout-purge.test.ts +++ b/src/main/persistence/tracking-repos/persistence-invalid-workspace-layout-purge.test.ts @@ -15,7 +15,7 @@ import { getDefaultWorkspaceSession } from '../../../shared/constants' import { folderWorkspaceKey } from '../../../shared/workspace-scope' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { DetectedWorktreeListResult } from '../../../shared/worktree/types' import { collectLayoutEvents } from '../../runtime/workspace-layout-stream-events.test-fixture' import { diff --git a/src/main/persistence/tracking-repos/persistence-workspace-session-scrollback.test.ts b/src/main/persistence/tracking-repos/persistence-workspace-session-scrollback.test.ts index 0c1a7bb36bc..feb3454b1c3 100644 --- a/src/main/persistence/tracking-repos/persistence-workspace-session-scrollback.test.ts +++ b/src/main/persistence/tracking-repos/persistence-workspace-session-scrollback.test.ts @@ -3,9 +3,9 @@ import { writeFileSync, rmSync, mkdtempSync, mkdirSync, existsSync } from 'node: import { ProfileStateSqliteAuthority } from '../profile-state/profile-state-sqlite-authority' import { join } from 'node:path' import { tmpdir } from 'node:os' -import { isTerminalLeafId, makePaneKey } from '../../../shared/stable-pane-id' +import { isTerminalLeafId, makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { TERMINAL_SCROLLBACK_REPLAY_BYTE_LIMIT } from '../../../shared/terminal/replay/terminal-scrollback-limits' -import { MAX_BROWSER_HISTORY_ENTRIES } from '../../../shared/workspace-session-browser-history' +import { MAX_BROWSER_HISTORY_ENTRIES } from '../../../shared/workspace-session/workspace-session-browser-history' import { closeTestStores, createSqliteTestStore, diff --git a/src/main/persistence/tracking-repos/project-group-session-batch.test.ts b/src/main/persistence/tracking-repos/project-group-session-batch.test.ts index 03b9ec32cf6..c170b03fbc4 100644 --- a/src/main/persistence/tracking-repos/project-group-session-batch.test.ts +++ b/src/main/persistence/tracking-repos/project-group-session-batch.test.ts @@ -2,7 +2,7 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import { getDefaultPersistedState, getDefaultWorkspaceSession } from '../../../shared/constants' import { createProjectGroup } from '../../../shared/project-groups' import type { FolderWorkspace } from '../../../shared/folder-workspaces/folder-workspace-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { folderWorkspaceKey } from '../../../shared/workspace-scope' import { createMinimalPersistedTerminalTab } from '../restoring-sessions/session-owner-fields' import { ProjectGroupPersistenceOperations } from './project-group-operations' diff --git a/src/main/persistence/tracking-repos/repo-worktree-pruning.ts b/src/main/persistence/tracking-repos/repo-worktree-pruning.ts index 310393e1749..ce48884bb9d 100644 --- a/src/main/persistence/tracking-repos/repo-worktree-pruning.ts +++ b/src/main/persistence/tracking-repos/repo-worktree-pruning.ts @@ -1,8 +1,7 @@ -import type { WorkspaceKey } from '../../../shared/folder-workspaces/folder-workspace-types' import { LOCAL_EXECUTION_HOST_ID, type ExecutionHostId } from '../../../shared/execution-host' -import { parseWorkspaceKey } from '../../../shared/workspace-scope' +import { type WorkspaceKey, parseWorkspaceKey } from '../../../shared/workspace-scope' import type { PersistedState } from '../../../shared/persisted-state-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { removeWorkspaceSessionOwners, withoutWslMoveFrozenOwners diff --git a/src/main/persistence/tracking-repos/worktree-identity-migration-field-coverage.test.ts b/src/main/persistence/tracking-repos/worktree-identity-migration-field-coverage.test.ts index f63b90ff94a..13a3ab2992f 100644 --- a/src/main/persistence/tracking-repos/worktree-identity-migration-field-coverage.test.ts +++ b/src/main/persistence/tracking-repos/worktree-identity-migration-field-coverage.test.ts @@ -2,7 +2,7 @@ import { describe, expect, it } from 'vitest' import { getDefaultPersistedState, getDefaultWorkspaceSession } from '../../../shared/constants' import type { PersistedState } from '../../../shared/persisted-state-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { worktreeWorkspaceKey } from '../../../shared/workspace-scope' import { collectWorkspaceSessionWorktreeOwners, diff --git a/src/main/persistence/tracking-repos/worktree-identity-migration.ts b/src/main/persistence/tracking-repos/worktree-identity-migration.ts index 2e6d2b8f4f1..045c0061f72 100644 --- a/src/main/persistence/tracking-repos/worktree-identity-migration.ts +++ b/src/main/persistence/tracking-repos/worktree-identity-migration.ts @@ -1,8 +1,7 @@ -import type { WorkspaceKey } from '../../../shared/folder-workspaces/folder-workspace-types' import type { BrowserPage, BrowserWorkspace } from '../../../shared/browser-workspace-types' import { remapBrowserPageDocLocation } from '../../../shared/browser-page-doc-location' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' -import { worktreeWorkspaceKey } from '../../../shared/workspace-scope' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' +import { type WorkspaceKey, worktreeWorkspaceKey } from '../../../shared/workspace-scope' import type { PersistedState } from '../../../shared/persisted-state-types' import { getWorktreeIdFromHostIdentity, diff --git a/src/main/persistence/window-save-divergence-first-group.test.ts b/src/main/persistence/window-save-divergence-first-group.test.ts index 388ff6cba4a..1f95cc28f2f 100644 --- a/src/main/persistence/window-save-divergence-first-group.test.ts +++ b/src/main/persistence/window-save-divergence-first-group.test.ts @@ -8,7 +8,7 @@ import { WS } from '../../shared/workspace-layout/workspace-layout-command.test-fixture' import { saveWorkspaceLayout } from '../../shared/workspace-layout/workspace-layout-save' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { LOCAL_EXECUTION_HOST_ID } from '../../shared/execution-host' import { layoutModelOf, windowSaveDivergences } from './window-save-divergence' diff --git a/src/main/persistence/window-save-divergence.test.ts b/src/main/persistence/window-save-divergence.test.ts index 95eb7ceb2a9..9b2a8030fb4 100644 --- a/src/main/persistence/window-save-divergence.test.ts +++ b/src/main/persistence/window-save-divergence.test.ts @@ -3,7 +3,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { SleepingAgentSessionRecord } from '../../shared/agent-session/lifecycle/agent-session-resume' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { addWorkspace, emptySession, diff --git a/src/main/persistence/window-save-divergence.ts b/src/main/persistence/window-save-divergence.ts index 9452ddb62f5..bbdf8d2a566 100644 --- a/src/main/persistence/window-save-divergence.ts +++ b/src/main/persistence/window-save-divergence.ts @@ -15,8 +15,8 @@ import type { WorkspaceLayoutModel } from '../../shared/workspace-layout/workspace-layout-model' import type { TabGroupLayoutNode } from '../../shared/tab-types' -import type { TerminalPaneLayoutNode } from '../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { TerminalPaneLayoutNode } from '../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { droppedTabBarEntries, terminalTabBarEntries } from './window-save-raw-session-divergence' import { compactFieldChanges, type FieldChange } from './window-save-divergence-values' diff --git a/src/main/persistence/window-save-raw-session-divergence.ts b/src/main/persistence/window-save-raw-session-divergence.ts index e61a189954e..41c749abc22 100644 --- a/src/main/persistence/window-save-raw-session-divergence.ts +++ b/src/main/persistence/window-save-raw-session-divergence.ts @@ -1,6 +1,6 @@ // Inspect raw sessions for dropped tab-bar entries that layout reconstruction hides. -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' export function terminalTabBarEntries(session: WorkspaceSessionState): Map> { return new Map( diff --git a/src/main/persistence/window-save-reconnect-facts.test.ts b/src/main/persistence/window-save-reconnect-facts.test.ts index 019fc39bb24..7e388dba0b7 100644 --- a/src/main/persistence/window-save-reconnect-facts.test.ts +++ b/src/main/persistence/window-save-reconnect-facts.test.ts @@ -8,7 +8,7 @@ import { leaf, SSH_KEY } from '../../shared/workspace-layout/workspace-layout-session.test-fixture' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { deriveShutdownReconnectFacts } from '../runtime/terminal/recovery/shutdown-reconnect-facts' import { windowViewPatchForMain, windowViewSaveForMain } from './window-save-view' diff --git a/src/main/persistence/window-save-sleep-records.test.ts b/src/main/persistence/window-save-sleep-records.test.ts index 34b7262fdbf..5bcfd863f50 100644 --- a/src/main/persistence/window-save-sleep-records.test.ts +++ b/src/main/persistence/window-save-sleep-records.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import type { SleepingAgentSessionRecord } from '../../shared/agent-session/lifecycle/agent-session-resume' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { windowSaveKeepingMainSleepRecords } from './window-save-sleep-records' function record( diff --git a/src/main/persistence/window-save-sleep-records.ts b/src/main/persistence/window-save-sleep-records.ts index 3bbcbeedb4d..5ebf43baa6d 100644 --- a/src/main/persistence/window-save-sleep-records.ts +++ b/src/main/persistence/window-save-sleep-records.ts @@ -5,7 +5,7 @@ import { isWorkspaceSleepRecord } from '../../shared/workspace-sleep' import type { WorkspaceSessionPatch, WorkspaceSessionState -} from '../../shared/workspace-session-state-types' +} from '../../shared/workspace-session/workspace-session-state-types' type Records = Record diff --git a/src/main/persistence/window-save-view.ts b/src/main/persistence/window-save-view.ts index 61df9e40663..f59d90e3db6 100644 --- a/src/main/persistence/window-save-view.ts +++ b/src/main/persistence/window-save-view.ts @@ -9,7 +9,7 @@ import { import type { WorkspaceSessionPatch, WorkspaceSessionState -} from '../../shared/workspace-session-state-types' +} from '../../shared/workspace-session/workspace-session-state-types' import { SESSION_FIELD_OWNERS } from '../../shared/workspace-layout/workspace-layout-beside' import { loadWorkspaceLayoutWithoutReport } from '../../shared/workspace-layout/workspace-layout-load' import type { LoadedWorkspaceLayout } from '../../shared/workspace-layout/workspace-layout-load-types' diff --git a/src/main/preflight/agent-detection.ts b/src/main/preflight/agent-detection.ts index cd1c5b33c4f..27853b57a40 100644 --- a/src/main/preflight/agent-detection.ts +++ b/src/main/preflight/agent-detection.ts @@ -2,7 +2,7 @@ import type { PathSource, ShellHydrationFailureReason -} from '../../shared/shell-path-hydration-types' +} from '../../shared/shell/launch/shell-path-hydration-types' import { hydrateShellPath, mergePathSegments } from '../startup/hydrate-shell-path' import { getAzureDevOpsAuthStatus } from '../azure-devops/client' import { getBitbucketAuthStatus } from '../bitbucket/client' @@ -23,7 +23,7 @@ import { findRunnableLocalCommand, isCommandAvailable } from '../ipc/preflight-command-exec' -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' import { detectRemoteWindowsTerminalCapabilities, type RemoteWindowsTerminalCapabilities diff --git a/src/main/providers/agent-foreground-process.ts b/src/main/providers/agent-foreground-process.ts index 78641bcd6a3..6c297662ae7 100644 --- a/src/main/providers/agent-foreground-process.ts +++ b/src/main/providers/agent-foreground-process.ts @@ -12,7 +12,7 @@ import { shouldInspectWindowsAgentForeground, type AgentForegroundResolutionOptions } from './windows-agent-foreground-process' -import { isShellProcess } from '../../shared/shell-process-detection' +import { isShellProcess } from '../../shared/agent-status/process/shell-process-detection' import { selectForegroundProcessCandidate, type SelectedForegroundProcess diff --git a/src/main/providers/local-pty/local-pty-child-process-verdict.test.ts b/src/main/providers/local-pty/local-pty-child-process-verdict.test.ts index 2b45e652cc5..6883978d1c6 100644 --- a/src/main/providers/local-pty/local-pty-child-process-verdict.test.ts +++ b/src/main/providers/local-pty/local-pty-child-process-verdict.test.ts @@ -32,7 +32,7 @@ import { LocalPtyProvider } from './local-pty-provider' import { ptyIncarnations, ptyProcesses, ptyShellPath } from './local-pty-provider-state' import { inspectPtyProviderProcess } from '../pty-process-inspection' import { readLaunchedAgentForeground } from '../../runtime/launched-agent-foreground' -import type { TerminalForegroundSample } from '../../../shared/terminal-foreground-observation' +import type { TerminalForegroundSample } from '../../../shared/terminal/pty/lifecycle/terminal-foreground-observation' // Match the recorded basename so only the retired descriptor distinguishes the pane from idle. const POSIX_SHELL = 'sh' diff --git a/src/main/providers/local-pty/local-pty-executable-spawn.ts b/src/main/providers/local-pty/local-pty-executable-spawn.ts index 698a789dfea..4645f40668c 100644 --- a/src/main/providers/local-pty/local-pty-executable-spawn.ts +++ b/src/main/providers/local-pty/local-pty-executable-spawn.ts @@ -5,7 +5,7 @@ import { nodePtyNativeBuildEntryDir, usesNodePtySpawnHelper } from '../../../shared/node-pty-spawn-helper' -import { TERMINAL_SPAWN_ISSUE_REQUEST } from '../../../shared/terminal-spawn-error-copy' +import { TERMINAL_SPAWN_ISSUE_REQUEST } from '../../../shared/terminal/pty/lifecycle/terminal-spawn-error-copy' import { hostReportsChildExitStatus, wrapShellSpawnForMacosTccAttribution diff --git a/src/main/providers/local-pty/local-pty-foreground-inspection.ts b/src/main/providers/local-pty/local-pty-foreground-inspection.ts index 0e516ee206a..becbfe5b4d1 100644 --- a/src/main/providers/local-pty/local-pty-foreground-inspection.ts +++ b/src/main/providers/local-pty/local-pty-foreground-inspection.ts @@ -1,4 +1,4 @@ -import type { PtyChildProcessVerdict } from '../../../shared/terminal-process-inspection' +import type { PtyChildProcessVerdict } from '../../../shared/terminal/pty/lifecycle/terminal-process-inspection' import { recognizeAgentProcessFromCommandLine } from '../../../shared/agent-status/process/agent-process-recognition' import { getCheapProcessTableSnapshot } from '../../../shared/cheap-process-table-snapshot-reader' import { diff --git a/src/main/providers/local-pty/local-pty-provider-state.ts b/src/main/providers/local-pty/local-pty-provider-state.ts index 09a8c7771de..30d004f06eb 100644 --- a/src/main/providers/local-pty/local-pty-provider-state.ts +++ b/src/main/providers/local-pty/local-pty-provider-state.ts @@ -1,7 +1,7 @@ import type { WslGuestRoot } from '../../../shared/wsl-guest-root-marker' import type * as pty from 'node-pty' import type { PhysicalExitTracker } from '../../../shared/physical-exit-tracker' -import type { PtyStartupIngress } from '../../../shared/pty-startup-ingress' +import type { PtyStartupIngress } from '../../../shared/terminal/pty/ingress/pty-startup-ingress' import type { IPtyProvider } from '../pty-provider-contract' import type { PtyDataEvent } from '../pty-provider-events' import { getSpawnedShellName, normalizeLocalCallerSessionId } from './local-pty-launch-context' diff --git a/src/main/providers/local-pty/local-pty-provider-types.ts b/src/main/providers/local-pty/local-pty-provider-types.ts index 79d984df554..2144c64a106 100644 --- a/src/main/providers/local-pty/local-pty-provider-types.ts +++ b/src/main/providers/local-pty/local-pty-provider-types.ts @@ -1,4 +1,4 @@ -import type { TerminalExitCause } from '../../../shared/terminal-exit-cause' +import type { TerminalExitCause } from '../../../shared/terminal/pty/lifecycle/terminal-exit-cause' import type { PtySpawnOptions } from '../pty-provider-contract' export type LocalPtyProviderOptions = { diff --git a/src/main/providers/local-pty/local-pty-provider.ts b/src/main/providers/local-pty/local-pty-provider.ts index fb144c3b2b3..55196a9bdd0 100644 --- a/src/main/providers/local-pty/local-pty-provider.ts +++ b/src/main/providers/local-pty/local-pty-provider.ts @@ -8,7 +8,7 @@ import { WRITE_ACCEPTED, writeRefused, type WriteSettlement -} from '../../../shared/pty-write-settlement' +} from '../../../shared/terminal/pty/lifecycle/pty-write-settlement' import { confirmLocalPtyForegroundProcess, confirmLocalPtyShellForeground, @@ -17,12 +17,13 @@ import { inspectLocalPtyChildProcesses } from './local-pty-foreground-inspection' import type { LocalPtyProviderOptions } from './local-pty-provider-types' -import type { PtyProcessInspection, PtyProcessInspectionOptions } from '../pty-process-inspection' +import type { PtyProcessInspectionOptions } from '../pty-process-inspection' +import type { TerminalProcessInspection as PtyProcessInspection } from '../../../shared/terminal/pty/lifecycle/terminal-process-inspection' import type { TerminalOscColorQueryReplyColors } from '../../../shared/terminal/protocol/queries/terminal-osc-color-reply' import { _resetPtyOwnerHostColorsForTest, setPtyOwnerHostColors -} from '../../../shared/pty-owner-color-query-colors' +} from '../../../shared/terminal/pty/ingress/pty-owner-color-query-colors' import { advanceLoadGeneration, clearPtyState, diff --git a/src/main/providers/local-pty/local-pty-session-activation.ts b/src/main/providers/local-pty/local-pty-session-activation.ts index d9b6ad07987..3d1ef865a20 100644 --- a/src/main/providers/local-pty/local-pty-session-activation.ts +++ b/src/main/providers/local-pty/local-pty-session-activation.ts @@ -1,6 +1,6 @@ import { createGitBashConsoleCapacityDetector } from '../../../shared/git-bash-console-capacity' -import { withInitialOutputDiagnostic } from '../../../shared/terminal-start-failure' -import type { TerminalExitCause } from '../../../shared/terminal-exit-cause' +import { withInitialOutputDiagnostic } from '../../../shared/terminal/pty/lifecycle/terminal-start-failure' + import type * as pty from 'node-pty' import { isBracketedPasteSafeShell } from '../../../shared/startup-command-submission' import { @@ -9,10 +9,13 @@ import { startupStagingFailureNotice, type StartupCommandStaging } from '../../../shared/startup-command-staging' -import { PtyStartupIngress } from '../../../shared/pty-startup-ingress' -import type { PtyIngressEmission } from '../../../shared/pty-startup-ingress-contract' -import { resolvePtyOwnerBackend } from '../../../shared/pty-owner-backend' -import { resolveProcessExitCause } from '../../../shared/terminal-exit-cause' +import { PtyStartupIngress } from '../../../shared/terminal/pty/ingress/pty-startup-ingress' +import type { PtyIngressEmission } from '../../../shared/terminal/pty/ingress/pty-startup-ingress-contract' +import { resolvePtyOwnerBackend } from '../../../shared/terminal/pty/lifecycle/pty-owner-backend' +import { + type TerminalExitCause, + resolveProcessExitCause +} from '../../../shared/terminal/pty/lifecycle/terminal-exit-cause' import { POSIX_SHELL_STARTUP_COMMAND_ENV } from '../../pty/shell-startup/posix-shell-startup-command' import { getAgentForegroundContextPaths } from '../agent-foreground-context-paths' import { getSpawnedShellName } from './local-pty-launch-context' diff --git a/src/main/providers/local-pty/local-pty-shell-readiness-session.ts b/src/main/providers/local-pty/local-pty-shell-readiness-session.ts index 54a333508a8..59906961830 100644 --- a/src/main/providers/local-pty/local-pty-shell-readiness-session.ts +++ b/src/main/providers/local-pty/local-pty-shell-readiness-session.ts @@ -1,6 +1,6 @@ import type * as pty from 'node-pty' -import type { PtyStartupIngress } from '../../../shared/pty-startup-ingress' -import { readPtySlavePath } from '../../../shared/pty-slave-line-discipline-echo' +import type { PtyStartupIngress } from '../../../shared/terminal/pty/ingress/pty-startup-ingress' +import { readPtySlavePath } from '../../../shared/terminal/pty/native-process/pty-slave-line-discipline-echo' import { createShellPromptReadinessProbe, type ShellPromptReadinessProbe diff --git a/src/main/providers/local-pty/local-pty-shell-startup-command.node-pty.test.ts b/src/main/providers/local-pty/local-pty-shell-startup-command.node-pty.test.ts index 57736b77a9e..e9575a96439 100644 --- a/src/main/providers/local-pty/local-pty-shell-startup-command.node-pty.test.ts +++ b/src/main/providers/local-pty/local-pty-shell-startup-command.node-pty.test.ts @@ -4,7 +4,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import * as pty from 'node-pty' import { afterEach, describe, expect, it } from 'vitest' -import { PtyStartupIngress } from '../../../shared/pty-startup-ingress' +import { PtyStartupIngress } from '../../../shared/terminal/pty/ingress/pty-startup-ingress' import type { TerminalViewRgb } from '../../../shared/terminal/protocol/queries/terminal-view-attributes' import { HeadlessEmulator } from '../../daemon/headless-emulator' import { POSIX_SHELL_STARTUP_COMMAND_ENV } from '../../pty/shell-startup/posix-shell-startup-command' diff --git a/src/main/providers/pty-process-info.ts b/src/main/providers/pty-process-info.ts index 5ac92c4214e..2c72c0ff8ca 100644 --- a/src/main/providers/pty-process-info.ts +++ b/src/main/providers/pty-process-info.ts @@ -1,5 +1,5 @@ import type { AgentSessionOwnerBinding } from '../../shared/agent-session/agent-session-host-authority' -import type { PtyIncarnationId } from '../../shared/pty-incarnation' +import type { PtyIncarnationId } from '../../shared/terminal/pty/lifecycle/pty-incarnation' import type { ForegroundProcessEvidence } from '../../shared/foreground-process-evidence' import type { WslGuestRoot } from '../../shared/wsl-guest-root-marker' diff --git a/src/main/providers/pty-process-inspection.ts b/src/main/providers/pty-process-inspection.ts index 19279edb641..30fd15186dd 100644 --- a/src/main/providers/pty-process-inspection.ts +++ b/src/main/providers/pty-process-inspection.ts @@ -1,12 +1,10 @@ import type { IPtyProvider } from './pty-provider-contract' -import type { PtyIncarnationId } from '../../shared/pty-incarnation' +import type { PtyIncarnationId } from '../../shared/terminal/pty/lifecycle/pty-incarnation' import { classifyTerminalProcessInspectionFailure, clientOnlyUnverifiableInspection, - type TerminalProcessInspection -} from '../../shared/terminal-process-inspection' - -export type PtyProcessInspection = TerminalProcessInspection + type TerminalProcessInspection as PtyProcessInspection +} from '../../shared/terminal/pty/lifecycle/terminal-process-inspection' type CompletionSensitivePtyProvider = IPtyProvider & { inspectProcess?: ( diff --git a/src/main/providers/pty-process-list-admission.ts b/src/main/providers/pty-process-list-admission.ts index cd0ac0f52fc..0c277ff9dee 100644 --- a/src/main/providers/pty-process-list-admission.ts +++ b/src/main/providers/pty-process-list-admission.ts @@ -1,7 +1,7 @@ import { isAgentSessionOwnerBinding } from '../../shared/agent-session/agent-session-host-authority' import { MAX_CLAIMED_AGENT_PTY_OWNER_ENTRIES } from '../../shared/claimed-agent-pty-owner' import { cloneAgentSessionOwnerBinding } from '../../shared/claimed-agent-pty-owner-snapshot' -import { isPtyIncarnationId } from '../../shared/pty-incarnation' +import { isPtyIncarnationId } from '../../shared/terminal/pty/lifecycle/pty-incarnation' import { cloneForegroundProcessEvidence, isForegroundProcessEvidence diff --git a/src/main/providers/pty-provider-contract.ts b/src/main/providers/pty-provider-contract.ts index 8b3092b7970..641f6ed10b8 100644 --- a/src/main/providers/pty-provider-contract.ts +++ b/src/main/providers/pty-provider-contract.ts @@ -1,25 +1,25 @@ import type { PtyFencedTerminationRequest, PtyFencedTerminationOutcome -} from '../../shared/pty-fenced-termination' +} from '../../shared/terminal/pty/lifecycle/pty-fenced-termination' import type { SpawnIntent } from '../../shared/host-spawn-admission' import type { TuiAgent } from '../../shared/agent-launch/catalog/tui-agent' import type { AgentWorkspaceTrustSpawnRequest } from '../../shared/agent-workspace-trust-spawn-request' -import type { PtyStartupIngressIntent } from '../../shared/pty-startup-ingress' +import type { PtyStartupIngressIntent } from '../../shared/terminal/pty/ingress/pty-startup-ingress-intent' import type { TerminalOscColorQueryReplyColors } from '../../shared/terminal/protocol/queries/terminal-osc-color-reply' import type { StartupCommandDelivery } from '../../shared/agent-launch/startup/codex-startup-delivery' import type { TerminalOscLinkRange } from '../../shared/terminal/links/terminal-osc-link-ranges' import type { PtyBackgroundStreamEvent, PtyDataEvent } from './pty-provider-events' import type { PtySpawnResult } from './pty-spawn-result' -import type { PtyIncarnationId } from '../../shared/pty-incarnation' +import type { PtyIncarnationId } from '../../shared/terminal/pty/lifecycle/pty-incarnation' import type { AgentSessionExecutionClaim, AgentSessionSurfaceBinding } from '../../shared/agent-session/agent-session-host-authority' import type { PtyProcessInfo } from './pty-process-info' -import type { TerminalExitCause } from '../../shared/terminal-exit-cause' -import type { TerminalOwner } from '../../shared/terminal-owner' -import type { WriteSettlement } from '../../shared/pty-write-settlement' +import type { TerminalExitCause } from '../../shared/terminal/pty/lifecycle/terminal-exit-cause' +import type { TerminalOwner } from '../../shared/terminal/pty/lifecycle/terminal-owner' +import type { WriteSettlement } from '../../shared/terminal/pty/lifecycle/pty-write-settlement' export type { PtyBackgroundStreamEvent, diff --git a/src/main/providers/pty-spawn-result.ts b/src/main/providers/pty-spawn-result.ts index 4ac9140ae5a..9a949cd87f6 100644 --- a/src/main/providers/pty-spawn-result.ts +++ b/src/main/providers/pty-spawn-result.ts @@ -1,10 +1,10 @@ -import type { TerminalExitCause } from '../../shared/terminal-exit-cause' +import type { TerminalExitCause } from '../../shared/terminal/pty/lifecycle/terminal-exit-cause' import type { TerminalLaunchResult } from '../../shared/agent-session/lifecycle/agent-session-resume' import type { TerminalOscLinkRange } from '../../shared/terminal/links/terminal-osc-link-ranges' import type { TuiAgent } from '../../shared/agent-launch/catalog/tui-agent' import type { AgentSessionClaimedSpawnResult } from '../../shared/agent-session/agent-session-host-authority' -import type { PtyIncarnationId } from '../../shared/pty-incarnation' -import type { TerminalOwner } from '../../shared/terminal-owner' +import type { PtyIncarnationId } from '../../shared/terminal/pty/lifecycle/pty-incarnation' +import type { TerminalOwner } from '../../shared/terminal/pty/lifecycle/terminal-owner' import type { OpenCodeCliCapabilities } from '../../shared/opencode-cli-version' export type PtySpawnResult = TerminalLaunchResult & { diff --git a/src/main/providers/settled-pty-write-stub.ts b/src/main/providers/settled-pty-write-stub.ts index e2f95f4bed7..3c8fd03bb19 100644 --- a/src/main/providers/settled-pty-write-stub.ts +++ b/src/main/providers/settled-pty-write-stub.ts @@ -2,7 +2,7 @@ import { WRITE_ACCEPTED, writeRefused, type WriteSettlement -} from '../../shared/pty-write-settlement' +} from '../../shared/terminal/pty/lifecycle/pty-write-settlement' /** Adapt test doubles without weakening the production requirement for explicit settled writes. */ export function stubWriteSettlement(accepted: boolean): WriteSettlement { diff --git a/src/main/providers/windows-agent-foreground-process.ts b/src/main/providers/windows-agent-foreground-process.ts index 27937251713..8ba0fb1aa33 100644 --- a/src/main/providers/windows-agent-foreground-process.ts +++ b/src/main/providers/windows-agent-foreground-process.ts @@ -9,7 +9,7 @@ import { resolveOuterWrapperForegroundIdentity, shouldInspectOuterWrapperForegroundProcess } from '../../shared/foreground-wrapper-agent' -import { isShellProcess } from '../../shared/shell-process-detection' +import { isShellProcess } from '../../shared/agent-status/process/shell-process-detection' import { queryWindowsPaneProcessInventory, type WindowsProcessCandidate, diff --git a/src/main/providers/windows-cached-agent-revalidation.ts b/src/main/providers/windows-cached-agent-revalidation.ts index 550873512f3..21210de5b7f 100644 --- a/src/main/providers/windows-cached-agent-revalidation.ts +++ b/src/main/providers/windows-cached-agent-revalidation.ts @@ -1,4 +1,4 @@ -import { isShellProcess } from '../../shared/shell-process-detection' +import { isShellProcess } from '../../shared/agent-status/process/shell-process-detection' import { recognizeAgentProcessFromCommandLine } from '../../shared/agent-status/process/agent-process-recognition' import type { AgentForegroundProcessResolution } from './agent-foreground-process' diff --git a/src/main/providers/windows-shell-args.ts b/src/main/providers/windows-shell-args.ts index 00125e125ba..1ac7777a5e6 100644 --- a/src/main/providers/windows-shell-args.ts +++ b/src/main/providers/windows-shell-args.ts @@ -6,7 +6,7 @@ import { buildWslExecArgs, buildWslInteractiveLoginShellCommand } from '../../shared/wsl-login-shell-command' -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' import { getBashWrapperLaunchArgs } from './local-pty/local-pty-shell-ready' import { ensureShellReadyWrappersAt } from './local-pty/local-pty-shell-ready-wrapper-generation' import { encodePowerShellCommand } from '../../shared/powershell-command-encoding' diff --git a/src/main/pty/process-retirement/pty-master-foreground-observation.test.ts b/src/main/pty/process-retirement/pty-master-foreground-observation.test.ts index d67c01d8306..ade1560cb34 100644 --- a/src/main/pty/process-retirement/pty-master-foreground-observation.test.ts +++ b/src/main/pty/process-retirement/pty-master-foreground-observation.test.ts @@ -5,7 +5,7 @@ import { readPtyForegroundGroup, resolvePtyForegroundMembers } from './pty-master-foreground-observation' -import { isTerminalForegroundObservation } from '../../../shared/terminal-foreground-observation' +import { isTerminalForegroundObservation } from '../../../shared/terminal/pty/lifecycle/terminal-foreground-observation' import { judgeTerminalForeground } from '../../runtime/terminal-foreground-group' import type { ProcessTableRow } from '../../../shared/process-table-snapshot' import type { TuiAgent } from '../../../shared/agent-launch/catalog/tui-agent' diff --git a/src/main/pty/process-retirement/pty-master-foreground-observation.ts b/src/main/pty/process-retirement/pty-master-foreground-observation.ts index b0db9cc5065..232032f41a6 100644 --- a/src/main/pty/process-retirement/pty-master-foreground-observation.ts +++ b/src/main/pty/process-retirement/pty-master-foreground-observation.ts @@ -6,8 +6,8 @@ import { recognizeAgentProcessFromCommandLine } from '../../../shared/agent-stat import { selectForegroundProcessCandidate } from '../../../shared/foreground-process-selection' import { resolveOuterWrapperForegroundProcess } from '../../../shared/foreground-wrapper-agent' import { unreadableArgvName, type ProcessTableRow } from '../../../shared/process-table-snapshot' -import { isShellProcess } from '../../../shared/shell-process-detection' -import type { TerminalForegroundSample } from '../../../shared/terminal-foreground-observation' +import { isShellProcess } from '../../../shared/agent-status/process/shell-process-detection' +import type { TerminalForegroundSample } from '../../../shared/terminal/pty/lifecycle/terminal-foreground-observation' import { isRetiredPtyMaster } from './node-pty-master-fd-retirement' import { readPtsName } from './node-pty-pts-name' import { diff --git a/src/main/pty/scrollback/terminal-scrollback-snapshot-async-migration.ts b/src/main/pty/scrollback/terminal-scrollback-snapshot-async-migration.ts index 02e344d4f95..de954c3216a 100644 --- a/src/main/pty/scrollback/terminal-scrollback-snapshot-async-migration.ts +++ b/src/main/pty/scrollback/terminal-scrollback-snapshot-async-migration.ts @@ -1,4 +1,4 @@ -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { collectTerminalScrollbackSnapshotRefs, deleteTerminalScrollbackSnapshot, diff --git a/src/main/pty/scrollback/terminal-scrollback-snapshots.ts b/src/main/pty/scrollback/terminal-scrollback-snapshots.ts index 9351ced74ac..8ed8dd1349d 100644 --- a/src/main/pty/scrollback/terminal-scrollback-snapshots.ts +++ b/src/main/pty/scrollback/terminal-scrollback-snapshots.ts @@ -13,7 +13,7 @@ import { import { mkdir, rename, rm, writeFile } from 'node:fs/promises' import { dirname, join } from 'node:path' import { getAppEnvironment } from '../../../shared/app-environment' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { TERMINAL_SCROLLBACK_REPLAY_BYTE_LIMIT, TERMINAL_SCROLLBACK_STORE_BYTE_LIMIT diff --git a/src/main/pty/shell-startup/shell-prompt-readiness-probe.test.ts b/src/main/pty/shell-startup/shell-prompt-readiness-probe.test.ts index dc1860951e4..66eddbac042 100644 --- a/src/main/pty/shell-startup/shell-prompt-readiness-probe.test.ts +++ b/src/main/pty/shell-startup/shell-prompt-readiness-probe.test.ts @@ -8,11 +8,11 @@ const resolveExecutablePath = vi.hoisted(() => vi.fn((value: string) => Promise. const resolveInstalledExecutablePaths = vi.hoisted(() => vi.fn((): Promise => Promise.resolve([])) ) -vi.mock('../../../shared/pty-slave-line-discipline-echo', () => ({ +vi.mock('../../../shared/terminal/pty/native-process/pty-slave-line-discipline-echo', () => ({ createPtySlaveLineEditorProbe: (ttyPath: string) => ttyPath === '/dev/ttys099' ? relayedLineEditorProbe : lineEditorProbe })) -vi.mock('../../../shared/shell-process-readiness', () => ({ +vi.mock('../../../shared/terminal/pty/native-process/shell-process-readiness', () => ({ readShellProcessReadiness: processReadinessProbe, listChildProcessIds: listChildPids, resolveShellExecutablePath: resolveExecutablePath, diff --git a/src/main/pty/shell-startup/shell-prompt-readiness-probe.ts b/src/main/pty/shell-startup/shell-prompt-readiness-probe.ts index a4e42cb5388..2a3444a7d73 100644 --- a/src/main/pty/shell-startup/shell-prompt-readiness-probe.ts +++ b/src/main/pty/shell-startup/shell-prompt-readiness-probe.ts @@ -1,10 +1,10 @@ -import { createPtySlaveLineEditorProbe } from '../../../shared/pty-slave-line-discipline-echo' +import { createPtySlaveLineEditorProbe } from '../../../shared/terminal/pty/native-process/pty-slave-line-discipline-echo' import { listChildProcessIds, readShellProcessReadiness, resolveInstalledShellExecutablePaths, resolveShellExecutablePath -} from '../../../shared/shell-process-readiness' +} from '../../../shared/terminal/pty/native-process/shell-process-readiness' import { createLineEditorReadyOutputScanState, scanForLineEditorReadyOutput diff --git a/src/main/qoder/real-cli.test.ts b/src/main/qoder/real-cli.test.ts index b6c07218ff0..f605e5e1ac4 100644 --- a/src/main/qoder/real-cli.test.ts +++ b/src/main/qoder/real-cli.test.ts @@ -15,7 +15,7 @@ import type * as Os from 'node:os' import { join } from 'node:path' import { expect, it, vi } from 'vitest' import { runProcess } from '@orca/process-host' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { parseQoderSessionFile } from '../ai-vault/scanners/qoder/session-scanner-qoder-parser' const sandbox = vi.hoisted(() => ({ home: '' })) diff --git a/src/main/rate-limits/codex-fetcher.ts b/src/main/rate-limits/codex-fetcher.ts index d063d89a141..cb443faa25e 100644 --- a/src/main/rate-limits/codex-fetcher.ts +++ b/src/main/rate-limits/codex-fetcher.ts @@ -32,7 +32,7 @@ import { } from './codex-reset-credit-client' import { readCodexRateLimitsViaRpc } from './codex-rpc-rate-limit-probe' import { getHiddenProbeWslCwdSetupCommands, resolveHiddenProbeCwd } from './hidden-probe-cwd' -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' import { resolveWslInteropSpawnCwd } from '../wsl/execution/wsl-interop-spawn-directory' const RPC_TIMEOUT_MS = 10_000 diff --git a/src/main/ripgrep/bundled-ripgrep-path.ts b/src/main/ripgrep/bundled-ripgrep-path.ts index 4b0c59c54f8..17ece377aab 100644 --- a/src/main/ripgrep/bundled-ripgrep-path.ts +++ b/src/main/ripgrep/bundled-ripgrep-path.ts @@ -2,7 +2,7 @@ import { createHash } from 'node:crypto' import { existsSync, readFileSync, realpathSync } from 'node:fs' import { join } from 'node:path' import { getAppEnvironment, hasAppEnvironment } from '../../shared/app-environment' -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' import { BUNDLED_RIPGREP_PACKAGE_BIN_DIR, BUNDLED_RIPGREP_RESOURCE_DIR, diff --git a/src/main/runtime/__fixtures__/main-layout-close-fixture.ts b/src/main/runtime/__fixtures__/main-layout-close-fixture.ts index b67e64a1132..53d8e5e1cfd 100644 --- a/src/main/runtime/__fixtures__/main-layout-close-fixture.ts +++ b/src/main/runtime/__fixtures__/main-layout-close-fixture.ts @@ -1,11 +1,11 @@ import { expect, type Mock } from 'vitest' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../shared/layout-owner-switch' -import { collectLeafIds } from '../../../shared/terminal-pane-layout-tree' +import { collectLeafIds } from '../../../shared/workspace-layout/terminal-pane-layout-tree' import type { LayoutApplyOutcome, LayoutCommand } from '../../../shared/workspace-layout/workspace-layout-command-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { DurableProfileStateMutation } from '../../persistence/loading-store/store-runtime-state' import { resolveHostId } from '../../persistence/loading-store/session-host-partitions' import { applyCommandToSession } from '../../persistence/terminal-topology/terminal-pane-admission' diff --git a/src/main/runtime/__fixtures__/orca-runtime-terminal-close-continuity-fixtures.ts b/src/main/runtime/__fixtures__/orca-runtime-terminal-close-continuity-fixtures.ts index 1bddf3c2e72..cb3e9bd7c59 100644 --- a/src/main/runtime/__fixtures__/orca-runtime-terminal-close-continuity-fixtures.ts +++ b/src/main/runtime/__fixtures__/orca-runtime-terminal-close-continuity-fixtures.ts @@ -1,7 +1,7 @@ import { withDurableRuntimeStore } from '../runtime-durable-store-fixture' import { vi, type Mock } from 'vitest' -import { makePaneKey } from '../../../shared/stable-pane-id' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { RuntimeTerminalListResult } from '../../../shared/runtime-types' import { OrcaRuntimeService } from '../orca-runtime' import { withMainLayout } from './main-layout-close-fixture' diff --git a/src/main/runtime/__fixtures__/orca-runtime-terminal-close-continuity-graph-fixture.ts b/src/main/runtime/__fixtures__/orca-runtime-terminal-close-continuity-graph-fixture.ts index 28ee94cb16b..7435f920a42 100644 --- a/src/main/runtime/__fixtures__/orca-runtime-terminal-close-continuity-graph-fixture.ts +++ b/src/main/runtime/__fixtures__/orca-runtime-terminal-close-continuity-graph-fixture.ts @@ -1,4 +1,4 @@ -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { OrcaRuntimeService } from '../orca-runtime' import { CANARY_LEAF_ID, @@ -13,7 +13,7 @@ import { canarySyncedLeaf, canarySyncedTab } from './orca-runtime-terminal-close-continuity-state-fixture' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' export type CloseContinuityGraphOptions = { ptyId: string diff --git a/src/main/runtime/__fixtures__/orca-runtime-terminal-close-continuity-state-fixture.ts b/src/main/runtime/__fixtures__/orca-runtime-terminal-close-continuity-state-fixture.ts index 21013296daf..93b24879d08 100644 --- a/src/main/runtime/__fixtures__/orca-runtime-terminal-close-continuity-state-fixture.ts +++ b/src/main/runtime/__fixtures__/orca-runtime-terminal-close-continuity-state-fixture.ts @@ -1,6 +1,6 @@ import { getDefaultWorkspaceSession } from '../../../shared/constants' -import { makePaneKey } from '../../../shared/stable-pane-id' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' export const REPO_ID = 'repo-close-continuity' export const WORKTREE_PATH = '/tmp/terminal-close-continuity' diff --git a/src/main/runtime/acknowledged-terminal-tab-retirement-fixture.ts b/src/main/runtime/acknowledged-terminal-tab-retirement-fixture.ts index c6f6293516b..634fe4604d8 100644 --- a/src/main/runtime/acknowledged-terminal-tab-retirement-fixture.ts +++ b/src/main/runtime/acknowledged-terminal-tab-retirement-fixture.ts @@ -5,7 +5,7 @@ import { vi } from 'vitest' import { getDefaultWorkspaceSession } from '../../shared/constants' import type { PersistedState } from '../../shared/persisted-state-types' import type { RuntimeSyncWindowGraph } from '../../shared/runtime-types' -import { closeTerminalTabInWorkspaceSession } from '../../shared/workspace-session-terminal-tab-close' +import { closeTerminalTabInWorkspaceSession } from '../../shared/workspace-session/workspace-session-terminal-tab-close' import { ProfileStateSqliteAuthority } from '../persistence/profile-state/profile-state-sqlite-authority' import { DelayedAuthority } from '../persistence/loading-store/profile-state-delayed-authority-fixture' import { Store } from '../persistence/loading-store/store' diff --git a/src/main/runtime/agent-prompt-submission-verification.ts b/src/main/runtime/agent-prompt-submission-verification.ts index e8386280cf9..0377045b22d 100644 --- a/src/main/runtime/agent-prompt-submission-verification.ts +++ b/src/main/runtime/agent-prompt-submission-verification.ts @@ -1,5 +1,5 @@ import { AGENT_PROMPT_EFFECT_TIMEOUT_MS } from '../../shared/orchestration-timing-budgets' -import type { TerminalAgent } from '../../shared/terminal-agent' +import type { TerminalAgent } from '../../shared/agent-status/identity/terminal-agent' export const AGENT_PROMPT_HOOK_EFFECT_TIMEOUT_MS = AGENT_PROMPT_EFFECT_TIMEOUT_MS const AGENT_PROMPT_EFFECT_POLL_MS = 50 diff --git a/src/main/runtime/agent-session-tab-layout-command.test.ts b/src/main/runtime/agent-session-tab-layout-command.test.ts index 02acf9f4cfa..f926ca1e410 100644 --- a/src/main/runtime/agent-session-tab-layout-command.test.ts +++ b/src/main/runtime/agent-session-tab-layout-command.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import type { Tab } from '../../shared/tab-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { chatTabLayoutCommand, loadChatTabLayout } from './agent-session/agent-session-tab-layout' const WT = 'repo-1::/tmp/worktree-a' diff --git a/src/main/runtime/agent-session-tab-layout-queue.ts b/src/main/runtime/agent-session-tab-layout-queue.ts index da504eae64d..730d4a91f0e 100644 --- a/src/main/runtime/agent-session-tab-layout-queue.ts +++ b/src/main/runtime/agent-session-tab-layout-queue.ts @@ -1,7 +1,7 @@ import { savedSessionId } from './saved-structured-agent-session-restoration' import type { ExecutionHostId } from '../../shared/execution-host' import type { LayoutApplyReply } from '../../shared/workspace-layout/workspace-layout-command-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { chatTabLayoutCommand, loadChatTabLayout, diff --git a/src/main/runtime/agent-session/agent-session-tab-layout.test.ts b/src/main/runtime/agent-session/agent-session-tab-layout.test.ts index e00c8b0d8d1..c30085cabef 100644 --- a/src/main/runtime/agent-session/agent-session-tab-layout.test.ts +++ b/src/main/runtime/agent-session/agent-session-tab-layout.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from 'vitest' import type { Tab } from '../../../shared/tab-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { withChatTabChanges, type ChatTabChange } from './agent-session-tab-layout' // rollback build (switch-off) — delete with the switch-off code post-flip diff --git a/src/main/runtime/agent-session/agent-session-tab-layout.ts b/src/main/runtime/agent-session/agent-session-tab-layout.ts index 6c9c3f1f74f..b61e8672907 100644 --- a/src/main/runtime/agent-session/agent-session-tab-layout.ts +++ b/src/main/runtime/agent-session/agent-session-tab-layout.ts @@ -8,7 +8,7 @@ import { nameBasedLoadContext } from '../../../shared/workspace-layout/workspace import type { CommandOf } from '../../../shared/workspace-layout/workspace-layout-command-types' import type { WorkspaceLayout } from '../../../shared/workspace-layout/workspace-layout-model' import { saveWorkspaceLayout } from '../../../shared/workspace-layout/workspace-layout-save' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { randomUUID } from 'node:crypto' import { getStructuredAgentSessionHost } from '../../native-chat/agent-session-wire/structured-agent-session-registry' import { structuredAgentSessionTabId } from '../../../shared/agent-session/view/structured-agent-session-projection' diff --git a/src/main/runtime/agent-session/records/structured-agent-session-startup-tab-restore.test.ts b/src/main/runtime/agent-session/records/structured-agent-session-startup-tab-restore.test.ts index 864574307f4..60438dc1615 100644 --- a/src/main/runtime/agent-session/records/structured-agent-session-startup-tab-restore.test.ts +++ b/src/main/runtime/agent-session/records/structured-agent-session-startup-tab-restore.test.ts @@ -1,5 +1,5 @@ import { partialRuntimeStore } from '../../runtime-store-partial-fixture' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' // Startup chat-tab restore must write nothing with an existing index and bound failed writes per step rather than per chat. import { mkdtemp, readFile, rm } from 'node:fs/promises' diff --git a/src/main/runtime/agent-session/structured-agent-session-windowless-layout-host.test.ts b/src/main/runtime/agent-session/structured-agent-session-windowless-layout-host.test.ts index 501c83def25..5684857aba8 100644 --- a/src/main/runtime/agent-session/structured-agent-session-windowless-layout-host.test.ts +++ b/src/main/runtime/agent-session/structured-agent-session-windowless-layout-host.test.ts @@ -7,7 +7,7 @@ import { agentSessionRecordFixture } from '../../../shared/agent-session/lifecycle/agent-session-record.test-fixture' import { structuredAgentSessionTabId } from '../../../shared/agent-session/view/structured-agent-session-projection' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { getDefaultWorkspaceSession } from '../../../shared/constants' import { normalizeExecutionHostId } from '../../../shared/execution-host' import { closeTestJournalHostDatabases } from '../../native-chat/agent-session-journal/journal-host-database-test-support' diff --git a/src/main/runtime/agent-session/structured-agent-session-windowless-layout.test.ts b/src/main/runtime/agent-session/structured-agent-session-windowless-layout.test.ts index 77c66d4df6f..0f585bb5ed6 100644 --- a/src/main/runtime/agent-session/structured-agent-session-windowless-layout.test.ts +++ b/src/main/runtime/agent-session/structured-agent-session-windowless-layout.test.ts @@ -1,5 +1,5 @@ import { afterEach, describe, expect, it, vi } from 'vitest' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { getDefaultWorkspaceSession } from '../../../shared/constants' import { normalizeExecutionHostId } from '../../../shared/execution-host' import type { StructuredAgentSessionHost } from '../../native-chat/agent-session-wire/structured-agent-session-host' diff --git a/src/main/runtime/agent-transcript-pane-test-harness.ts b/src/main/runtime/agent-transcript-pane-test-harness.ts index a5b7d305249..bca0d8a9c48 100644 --- a/src/main/runtime/agent-transcript-pane-test-harness.ts +++ b/src/main/runtime/agent-transcript-pane-test-harness.ts @@ -2,7 +2,7 @@ import type { RuntimeTerminalCreate } from '../../shared/runtime-terminal-create import { vi } from 'vitest' import { OrcaRuntimeService } from './orca-runtime' import type { TuiAgent } from '../../shared/agent-launch/catalog/tui-agent' -import type { PtyProcessInspection } from '../providers/pty-process-inspection' +import type { TerminalProcessInspection as PtyProcessInspection } from '../../shared/terminal/pty/lifecycle/terminal-process-inspection' import type { RuntimeStore } from './runtime-store-contract' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../shared/layout-owner-switch' import { committingSpawn, registerBoundPty } from './bind-first-pane.test-fixture' diff --git a/src/main/runtime/bind-first-pane.test-fixture.ts b/src/main/runtime/bind-first-pane.test-fixture.ts index 3ae7ed5e415..d45b1140cc9 100644 --- a/src/main/runtime/bind-first-pane.test-fixture.ts +++ b/src/main/runtime/bind-first-pane.test-fixture.ts @@ -1,9 +1,9 @@ // L80: emulate the PTY host's binding commit before registration in layout-owner builds; switch-off writes nothing. import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../shared/layout-owner-switch' import type { RuntimePtyController } from './runtime-pty-controller-contract' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { getConnectionExecutionHostId } from '../../shared/execution-host' -import { getPtyExecutionHost } from '../../shared/terminal-execution-host' +import { getPtyExecutionHost } from '../../shared/terminal/pty/lifecycle/terminal-execution-host' import { asProfileSessionStore, storeOf } from './profile-session-store.test-fixture' import { reusedTerminalIdUnbinding } from '../persistence/loading-store/reused-terminal-id-unbind' import { layoutContainsLeafId } from '../persistence/restoring-sessions/terminal-layout-normalization' diff --git a/src/main/runtime/browser-tab-create-caller-navigation.test.ts b/src/main/runtime/browser-tab-create-caller-navigation.test.ts index d60397c9a2f..b3f1b23099e 100644 --- a/src/main/runtime/browser-tab-create-caller-navigation.test.ts +++ b/src/main/runtime/browser-tab-create-caller-navigation.test.ts @@ -5,7 +5,7 @@ import { type RuntimeNavigationTarget } from '../../shared/runtime-navigation' import type { RuntimeMobileSessionTabsResult } from '../../shared/runtime-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { OrcaRuntimeService } from './orca-runtime' import { setRuntimeBrowserCommandsFactory } from './runtime-browser-commands-factory' diff --git a/src/main/runtime/claude-agent-teams-tmux-dispatcher.ts b/src/main/runtime/claude-agent-teams-tmux-dispatcher.ts index 08c4891650e..c342a54eaaa 100644 --- a/src/main/runtime/claude-agent-teams-tmux-dispatcher.ts +++ b/src/main/runtime/claude-agent-teams-tmux-dispatcher.ts @@ -4,7 +4,7 @@ import { tmuxSendKeysText, tmuxValue } from '../../shared/claude-agent-teams-tmux-compat' -import { describeUnconfirmedAgentStop } from '../../shared/pty-liveness-verdict' +import { describeUnconfirmedAgentStop } from '../../shared/terminal/pty/lifecycle/pty-liveness-verdict' import { formatContext, paneEnv, diff --git a/src/main/runtime/client-hosted-browser-page-persistence.integration.test.ts b/src/main/runtime/client-hosted-browser-page-persistence.integration.test.ts index 25089b9ce4c..96371f85498 100644 --- a/src/main/runtime/client-hosted-browser-page-persistence.integration.test.ts +++ b/src/main/runtime/client-hosted-browser-page-persistence.integration.test.ts @@ -2,7 +2,7 @@ * Real Store writes are covered by store-runtime-authored-session-writes.test.ts. */ import { describe, expect, it } from 'vitest' import type { RuntimeBrowserClientPlacement } from '../../shared/runtime-browser-placement' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { getBrowserHostLeaseRegistry } from './browser-host/browser-host-lease-registry-instance' import { isRestoredClientHostedBrowserPlacement } from './client-hosted-browser-page-persistence' import { OrcaRuntimeService } from './orca-runtime' diff --git a/src/main/runtime/client-hosted-browser-page-persistence.test.ts b/src/main/runtime/client-hosted-browser-page-persistence.test.ts index c4e4ce50749..d1bea217b37 100644 --- a/src/main/runtime/client-hosted-browser-page-persistence.test.ts +++ b/src/main/runtime/client-hosted-browser-page-persistence.test.ts @@ -3,9 +3,9 @@ import { CLIENT_HOSTED_BROWSER_PAGE_MAX_AGE_MS, CLIENT_HOSTED_BROWSER_PAGE_REFRESH_MS, persistedClientHostedBrowserPageSchema -} from '../../shared/client-hosted-browser-page-record' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' -import { parseWorkspaceSessionSalvaging } from '../../shared/workspace-session-salvage' +} from '../../shared/workspace-session/client-hosted-browser-page-record' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' +import { parseWorkspaceSessionSalvaging } from '../../shared/workspace-session/workspace-session-salvage' import { isRestoredClientHostedBrowserPlacement, persistClientHostedBrowserPages, diff --git a/src/main/runtime/client-hosted-browser-page-persistence.ts b/src/main/runtime/client-hosted-browser-page-persistence.ts index 1634c5e2061..8625f866c73 100644 --- a/src/main/runtime/client-hosted-browser-page-persistence.ts +++ b/src/main/runtime/client-hosted-browser-page-persistence.ts @@ -3,9 +3,9 @@ import { CLIENT_HOSTED_BROWSER_PAGE_REFRESH_MS, CLIENT_HOSTED_BROWSER_PAGE_RECORD_VERSION, type PersistedClientHostedBrowserPage -} from '../../shared/client-hosted-browser-page-record' +} from '../../shared/workspace-session/client-hosted-browser-page-record' import type { RuntimeBrowserClientPlacement } from '../../shared/runtime-browser-placement' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import type { RuntimeBrowserClientPage, RuntimeBrowserPageRegistry diff --git a/src/main/runtime/client-hosted-browser-row-push.integration.test.ts b/src/main/runtime/client-hosted-browser-row-push.integration.test.ts index 7cd29b53dc2..b093071c9e9 100644 --- a/src/main/runtime/client-hosted-browser-row-push.integration.test.ts +++ b/src/main/runtime/client-hosted-browser-row-push.integration.test.ts @@ -6,7 +6,7 @@ import { describe, expect, it } from 'vitest' import type { ClientHostedBrowserRowsEvent } from '../../shared/client-hosted-browser-rows' import type { RuntimeBrowserClientPlacement } from '../../shared/runtime-browser-placement' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { getBrowserHostLeaseRegistry } from './browser-host/browser-host-lease-registry-instance' import { OrcaRuntimeService } from './orca-runtime' import { getRuntimeBrowserPageRegistry } from './runtime-browser-page-registry' diff --git a/src/main/runtime/client-hosted-page-reconciliation-hold.integration.test.ts b/src/main/runtime/client-hosted-page-reconciliation-hold.integration.test.ts index 25ee88195c4..3600f79cede 100644 --- a/src/main/runtime/client-hosted-page-reconciliation-hold.integration.test.ts +++ b/src/main/runtime/client-hosted-page-reconciliation-hold.integration.test.ts @@ -1,6 +1,6 @@ /** Exercise runtime publication per client; window-unit coverage alone cannot prove callers apply the hold. */ import { describe, expect, it } from 'vitest' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { OrcaRuntimeService } from './orca-runtime' const WT = 'repo-1::/tmp/worktree-a' diff --git a/src/main/runtime/client-session-tab-selection-projection.ts b/src/main/runtime/client-session-tab-selection-projection.ts index f4069d0ffc4..779175dd77a 100644 --- a/src/main/runtime/client-session-tab-selection-projection.ts +++ b/src/main/runtime/client-session-tab-selection-projection.ts @@ -2,7 +2,7 @@ import type { RuntimeMobileSessionClientTab, RuntimeMobileSessionTabsResult } from '../../shared/runtime-types' -import { pickNextActiveTabAfterClose } from '../../shared/workspace-session-terminal-tab-close' +import { pickNextActiveTabAfterClose } from '../../shared/workspace-session/workspace-session-terminal-tab-close' import { findSiblingGroupId } from '../../shared/workspace-layout/tab-group-layout-tree' export type ClientSessionTabSelection = { diff --git a/src/main/runtime/client/runtime-client-state.ts b/src/main/runtime/client/runtime-client-state.ts index fb55c6ec7da..b27fac31eae 100644 --- a/src/main/runtime/client/runtime-client-state.ts +++ b/src/main/runtime/client/runtime-client-state.ts @@ -5,7 +5,7 @@ import { } from '../client-hosted-browser-page-persistence' import { getRuntimeBrowserPageRegistry } from '../runtime-browser-page-registry' import { splitWorktreeIdForFilesystem } from '../../../shared/worktree/id' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { type ExecutionHostId, @@ -24,7 +24,7 @@ import type { TerminalQuickCommand } from '../../../shared/terminal/quick-comman import type { TerminalQuickCommandMutation } from '../../../shared/terminal/quick-commands/terminal-quick-commands' import type { NativeChatSessionOptionSettingsMutation } from '../../../shared/native-chat/input/native-chat-session-options' import type { WorktreeTerminalStopOptions } from '../terminal/stop/worktree-terminal-stop-options' -import type { PtyLivenessVerdict } from '../../../shared/pty-liveness-verdict' +import type { PtyLivenessVerdict } from '../../../shared/terminal/pty/lifecycle/pty-liveness-verdict' import type { Automation } from '../../../shared/automations-types' export abstract class OrcaRuntimeWithPtyForegroundProcessReads extends OrcaRuntimeWithStateFields { diff --git a/src/main/runtime/construction/runtime-construction-services.ts b/src/main/runtime/construction/runtime-construction-services.ts index ebb1b96b54b..77dacdb83cf 100644 --- a/src/main/runtime/construction/runtime-construction-services.ts +++ b/src/main/runtime/construction/runtime-construction-services.ts @@ -8,7 +8,7 @@ import type { RuntimeVisibleTerminalState, RuntimeLeafRecord } from '../runtime-terminal-state-records' -import type { TerminalAgent } from '../../../shared/terminal-agent' +import type { TerminalAgent } from '../../../shared/agent-status/identity/terminal-agent' import type { AgentStatus } from '../../../shared/agent-status/title/agent-title-core' import type { TuiAgent } from '../../../shared/agent-launch/catalog/tui-agent' import type { TuiIdleHookTurn } from '../tui-idle-hook-lane' @@ -38,9 +38,9 @@ import type { RuntimeTerminalAgentPresenceOptions } from '../runtime-terminal-ag import type { resolveTerminalOrchestrationCliCommand } from '../orchestration/cli-command' import type { OrchestrationMailboxTerminal } from '../orchestration/mailbox-owner' import type { OrchestrationMailboxPointerSubmitTarget } from '../orchestration/mailbox-pointer-submit' -import type { WriteSettlement } from '../../../shared/pty-write-settlement' +import type { WriteSettlement } from '../../../shared/terminal/pty/lifecycle/pty-write-settlement' import type { StructuredPointerTarget } from '../orchestration/structured-mailbox-pointer-delivery' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { AgentStatusIpcPayload } from '../../../shared/agent-status/contracts/agent-status-ipc-payload' import type * as PtyControllerContract from '../runtime-pty-controller-contract' import type { RuntimeClientEventBus } from '../runtime-client-event-bus' diff --git a/src/main/runtime/construction/runtime-identity-state.ts b/src/main/runtime/construction/runtime-identity-state.ts index e56cb3c18f1..07529b88787 100644 --- a/src/main/runtime/construction/runtime-identity-state.ts +++ b/src/main/runtime/construction/runtime-identity-state.ts @@ -11,7 +11,7 @@ import { mobileSnapshotIdentityUnchanged } from '../mobile-session-snapshot-equality' import type { TuiAgent } from '../../../shared/agent-launch/catalog/tui-agent' -import type { TerminalAgent } from '../../../shared/terminal-agent' +import type { TerminalAgent } from '../../../shared/agent-status/identity/terminal-agent' import { isTuiAgent } from '../../../shared/agent-launch/catalog/tui-agent-config' import type { RuntimeStore } from '../runtime-store-contract' import type { RuntimeClientSettingsController } from '../runtime-client-settings' @@ -36,9 +36,11 @@ import { ClientHostedPageReconciliationWindow } from '../client-hosted-page-reco import { ClientSessionTabSelectionStore } from '../client-session-tab-selection' import { WorktreeTerminalMutationLock } from '../worktree-terminal-mutation-lock' import { RemoteRuntimeTerminalCreateIdempotency } from '../remote-runtime-terminal-create-idempotency' -import type { PtyIncarnationId } from '../../../shared/pty-incarnation' +import type { PtyIncarnationId } from '../../../shared/terminal/pty/lifecycle/pty-incarnation' + import type { MobileSessionTabsNotifyCoalescer } from '../mobile-session-tabs-notify-coalescer' import { createMobileSessionTabsNotifyCoalescer } from '../mobile-session-tabs-notify-coalescer' + import type { MobileSessionTabsAgentStatusHeartbeat } from '../mobile-session-tabs-agent-status-heartbeat' import { createMobileSessionTabsAgentStatusHeartbeat } from '../mobile-session-tabs-agent-status-heartbeat' import { TerminalFocusNavigationCoalescer } from '../terminal-focus-navigation-coalescer' @@ -54,7 +56,7 @@ import type { import { MailPointerRepointScheduler } from '../orchestration/mail-pointer-repoint-scheduler' import { RuntimeTerminalWaiterRegistry } from '../terminal/wait/terminal-waiter-registry' import { RuntimeTerminalWriter } from '../runtime-terminal-writer' -import { writeRefused } from '../../../shared/pty-write-settlement' +import { writeRefused } from '../../../shared/terminal/pty/lifecycle/pty-write-settlement' import { RuntimeTerminalIdlePolls } from '../terminal/wait/terminal-idle-polls' import { TerminalIntentionalStops } from '../terminal-intentional-stops' import { TerminalRunFactsRegister, type TerminalSpawnCommit } from '../terminal-run-facts' @@ -66,7 +68,7 @@ import { TUI_IDLE_QUIESCENCE_MS } from '../orca-runtime-postlude' import { RuntimeTerminalWait as RuntimeTerminalWaitController } from '../terminal/wait/terminal-wait' -import type { PtyLivenessVerdict } from '../../../shared/pty-liveness-verdict' +import type { PtyLivenessVerdict } from '../../../shared/terminal/pty/lifecycle/pty-liveness-verdict' import type { HostScopedWorktreeKey } from '../../../shared/worktree/host-qualified-identity' import type { TerminalHandleAccess } from '../runtime-agent-sender-associations' diff --git a/src/main/runtime/created-mobile-session-tab-caller-selection.test.ts b/src/main/runtime/created-mobile-session-tab-caller-selection.test.ts index ad5a7b41b55..6b12bab0d60 100644 --- a/src/main/runtime/created-mobile-session-tab-caller-selection.test.ts +++ b/src/main/runtime/created-mobile-session-tab-caller-selection.test.ts @@ -1,6 +1,6 @@ /** Create selects only its caller; shared selection stays put and no tap-style PTY respawn runs. */ import { expect, it, vi } from 'vitest' -import { parsePaneKey } from '../../shared/stable-pane-id' +import { parsePaneKey } from '../../shared/workspace-layout/stable-pane-id' import type { RuntimeMobileSessionTabsResult } from '../../shared/runtime-types' // Preserve side-effect order: mocks, lifecycle, fixtures. diff --git a/src/main/runtime/dsb-terminal-runtime.test.ts b/src/main/runtime/dsb-terminal-runtime.test.ts index 2b9326072ea..3ce8e3127f0 100644 --- a/src/main/runtime/dsb-terminal-runtime.test.ts +++ b/src/main/runtime/dsb-terminal-runtime.test.ts @@ -5,7 +5,7 @@ import { join } from 'node:path' import { afterEach, describe, expect, expectTypeOf, it, vi } from 'vitest' import { buildAgentPromptPasteBytes } from '../../shared/agent-launch/startup/agent-prompt-injection' import type { RuntimeTerminalSummary } from '../../shared/runtime-terminal-contracts' -import type { TerminalAgent } from '../../shared/terminal-agent' +import type { TerminalAgent } from '../../shared/agent-status/identity/terminal-agent' import { OrcaRuntimeService } from './orca-runtime' import { makeStore } from './runtime-rpc-worktree-store-fixtures' import { partialRuntimeStore } from './runtime-store-partial-fixture' diff --git a/src/main/runtime/dsh-readiness-transcript.test.ts b/src/main/runtime/dsh-readiness-transcript.test.ts index f0302d5cc28..49dc3088fe7 100644 --- a/src/main/runtime/dsh-readiness-transcript.test.ts +++ b/src/main/runtime/dsh-readiness-transcript.test.ts @@ -6,7 +6,7 @@ import { getAgentLabel, isGeminiTerminalTitle, resolveExplicitTerminalTitleAgentType -} from '../../shared/terminal-title-agent-type' +} from '../../shared/agent-status/title/terminal-title-agent-type' // Raw dsh-tui 0.10.2 / @deepseek-ai/dsh 0.1.5-rc.1 capture; agent-pty-transcript-capture.md. const TRANSCRIPT = readFileSync(join(__dirname, '__fixtures__', 'dsh-tui-ready-no-key.txt'), 'utf8') diff --git a/src/main/runtime/editor-open-active-group.test.ts b/src/main/runtime/editor-open-active-group.test.ts index 1783ec02c72..6216bcf254a 100644 --- a/src/main/runtime/editor-open-active-group.test.ts +++ b/src/main/runtime/editor-open-active-group.test.ts @@ -6,7 +6,7 @@ import { makeRuntimeStoreWithWorkspaceSession } from './orca-runtime-test-fixtures.spec' import { openEditorFileThroughLayoutOwner } from './files/editor-open-through-layout-owner' -import { ownedEditorFileId } from '../../shared/workspace-session-pane-ownership' +import { ownedEditorFileId } from '../../shared/workspace-session/workspace-session-pane-ownership' import { addWorkspace, emptySession, diff --git a/src/main/runtime/exited-split-pane-layout-close.test.ts b/src/main/runtime/exited-split-pane-layout-close.test.ts index 8348166fd8c..d88d02463ef 100644 --- a/src/main/runtime/exited-split-pane-layout-close.test.ts +++ b/src/main/runtime/exited-split-pane-layout-close.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import { getDefaultWorkspaceSession } from '../../shared/constants' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { keepsExitedPane } from './exited-split-pane-layout-close' const WORKTREE = 'repo-1::/w' diff --git a/src/main/runtime/exited-split-pane-layout-close.ts b/src/main/runtime/exited-split-pane-layout-close.ts index faaac8fe816..c89e72d0d9c 100644 --- a/src/main/runtime/exited-split-pane-layout-close.ts +++ b/src/main/runtime/exited-split-pane-layout-close.ts @@ -1,5 +1,5 @@ -import { collectLeafIds } from '../../shared/terminal-pane-layout-tree' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import { collectLeafIds } from '../../shared/workspace-layout/terminal-pane-layout-tree' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import type { RetiredTerminalSurface } from './mobile-session-terminal-retirement' import { exitedSplitPaneOutcome, diff --git a/src/main/runtime/floating-snapshot-pty-bindings.ts b/src/main/runtime/floating-snapshot-pty-bindings.ts index 3e04a46c45b..e838a8cb887 100644 --- a/src/main/runtime/floating-snapshot-pty-bindings.ts +++ b/src/main/runtime/floating-snapshot-pty-bindings.ts @@ -1,4 +1,4 @@ -import { isTerminalLeafId, makePaneKey } from '../../shared/stable-pane-id' +import { isTerminalLeafId, makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import type { RuntimeMobileSessionTabsSnapshot, RuntimeMobileSessionTerminalTab diff --git a/src/main/runtime/folder-workspace-mixed-host-routing.test.ts b/src/main/runtime/folder-workspace-mixed-host-routing.test.ts index 857ccf50a66..7cd037af939 100644 --- a/src/main/runtime/folder-workspace-mixed-host-routing.test.ts +++ b/src/main/runtime/folder-workspace-mixed-host-routing.test.ts @@ -8,7 +8,7 @@ import { ROUTING_REPOS } from '../../shared/folder-workspaces/folder-workspace-host-routing.test-fixture' import type { ProjectGroup } from '../../shared/project-group-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import type { LayoutApplyOutcome } from '../../shared/workspace-layout/workspace-layout-command-types' import { localDesktopSession } from '../../shared/workspace-layout/workspace-layout-profile.test-fixture' import { diff --git a/src/main/runtime/folder-workspace-pty-identity.test.ts b/src/main/runtime/folder-workspace-pty-identity.test.ts index d3ff5b15591..e5bdf5903c7 100644 --- a/src/main/runtime/folder-workspace-pty-identity.test.ts +++ b/src/main/runtime/folder-workspace-pty-identity.test.ts @@ -6,8 +6,8 @@ import { } from '../../shared/worktree/host-qualified-identity' import { getDefaultWorkspaceSession } from '../../shared/constants' import type { RuntimeClientEvent } from '../../shared/runtime-client-events' -import { makePaneKey } from '../../shared/stable-pane-id' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { FOLDER_WORKSPACE_INSTANCE_SEPARATOR } from '../../shared/worktree/id' import { OrcaRuntimeService } from './orca-runtime' diff --git a/src/main/runtime/graph-sync-live-daemon-pty-tab-preservation.test.ts b/src/main/runtime/graph-sync-live-daemon-pty-tab-preservation.test.ts index fae23c4e966..fb8d5a97884 100644 --- a/src/main/runtime/graph-sync-live-daemon-pty-tab-preservation.test.ts +++ b/src/main/runtime/graph-sync-live-daemon-pty-tab-preservation.test.ts @@ -3,7 +3,7 @@ import { withDurableRuntimeStore } from './runtime-durable-store-fixture' * User close must release those bindings; these cases cover connected/exited, never unverifiable PTYs. */ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { getDefaultWorkspaceSession } from '../../shared/constants' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import type { RuntimeMobileSessionTabsRemovedResult, RuntimeMobileSessionTabsResult diff --git a/src/main/runtime/graph-sync-mobile-snapshot-gating.test.ts b/src/main/runtime/graph-sync-mobile-snapshot-gating.test.ts index 0276f945611..ca01e42015f 100644 --- a/src/main/runtime/graph-sync-mobile-snapshot-gating.test.ts +++ b/src/main/runtime/graph-sync-mobile-snapshot-gating.test.ts @@ -4,7 +4,7 @@ import type { RuntimeMobileSessionTabsResult, RuntimeMobileSessionTabsSnapshot } from '../../shared/runtime-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { OrcaRuntimeService } from './orca-runtime' import * as mobileSessionTerminalProjection from './mobile-session-terminal-projection' diff --git a/src/main/runtime/graph-sync-payload-partition.test.ts b/src/main/runtime/graph-sync-payload-partition.test.ts index 03fd6530bc7..0fe7c3fe79f 100644 --- a/src/main/runtime/graph-sync-payload-partition.test.ts +++ b/src/main/runtime/graph-sync-payload-partition.test.ts @@ -5,7 +5,7 @@ import type { RuntimeMobileSessionTabsSnapshot, RuntimeSyncWindowGraphResult } from '../../shared/runtime-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { OrcaRuntimeService } from './orca-runtime' const WT_A = 'repo-1::/tmp/worktree-a' diff --git a/src/main/runtime/headless-move-leaf-to-new-tab.test.ts b/src/main/runtime/headless-move-leaf-to-new-tab.test.ts index 30e2fc36fb3..9979c74cff1 100644 --- a/src/main/runtime/headless-move-leaf-to-new-tab.test.ts +++ b/src/main/runtime/headless-move-leaf-to-new-tab.test.ts @@ -8,10 +8,10 @@ import { } from './orca-runtime-test-fixtures.spec' import type { RuntimeStore } from './runtime-store-contract' import { planTerminalLeafMove } from '../persistence/terminal-topology/terminal-leaf-move' -import type { TerminalLeafMoveRequest } from '../../shared/terminal-leaf-move' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { TerminalLeafMoveRequest } from '../../shared/workspace-layout/terminal-leaf-move' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import type { Tab } from '../../shared/tab-types' -import { ownedEditorFileId } from '../../shared/workspace-session-pane-ownership' +import { ownedEditorFileId } from '../../shared/workspace-session/workspace-session-pane-ownership' const SIBLING_LEAF_ID = '33333333-3333-4333-8333-333333333333' const OTHER_LEAF_ID = '44444444-4444-4444-8444-444444444444' diff --git a/src/main/runtime/headless-pane-layout-noop-publication.test.ts b/src/main/runtime/headless-pane-layout-noop-publication.test.ts index 86165d44081..57e58201337 100644 --- a/src/main/runtime/headless-pane-layout-noop-publication.test.ts +++ b/src/main/runtime/headless-pane-layout-noop-publication.test.ts @@ -7,7 +7,7 @@ import { makeRuntimeStoreWithWorkspaceSession, makeWorkspaceSessionWithHeadlessTerminal } from './orca-runtime-test-fixtures.spec' -import type { TerminalPaneLayoutNode } from '../../shared/terminal-tab-types' +import type { TerminalPaneLayoutNode } from '../../shared/workspace-layout/terminal-tab-types' const REMOUNTS = 20 diff --git a/src/main/runtime/headless-placeholder-graph-surface-standing.spec.ts b/src/main/runtime/headless-placeholder-graph-surface-standing.spec.ts index 0e8114ead6c..713c0a283d4 100644 --- a/src/main/runtime/headless-placeholder-graph-surface-standing.spec.ts +++ b/src/main/runtime/headless-placeholder-graph-surface-standing.spec.ts @@ -2,10 +2,10 @@ import { describe, expect, it, vi } from 'vitest' import { OrcaRuntimeService } from './orca-runtime' import { getDefaultWorkspaceSession } from '../../shared/constants' import { HEADLESS_RUNTIME_WINDOW_ID } from '../../shared/runtime-types' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { SURFACE_CLAIM_WITHOUT_STANDING } from './pty-recorded-surface-topology' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../shared/layout-owner-switch' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { bindPaneFirst } from './bind-first-pane.test-fixture' import { partialRuntimeStore } from './runtime-store-partial-fixture' diff --git a/src/main/runtime/headless-terminal-split-layout.test.ts b/src/main/runtime/headless-terminal-split-layout.test.ts index de45a9ce372..9dff179123b 100644 --- a/src/main/runtime/headless-terminal-split-layout.test.ts +++ b/src/main/runtime/headless-terminal-split-layout.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' -import type { TerminalLayoutSnapshot } from '../../shared/terminal-tab-types' -import { terminalLayoutContainsLeaf } from '../../shared/workspace-session-pane-ownership' +import type { TerminalLayoutSnapshot } from '../../shared/workspace-layout/terminal-tab-types' +import { terminalLayoutContainsLeaf } from '../../shared/workspace-session/workspace-session-pane-ownership' import { buildHeadlessTerminalSplitLayout, countTerminalLayoutLeaves diff --git a/src/main/runtime/headless-terminal-split-layout.ts b/src/main/runtime/headless-terminal-split-layout.ts index e4d78d1a3fe..fa3622f9355 100644 --- a/src/main/runtime/headless-terminal-split-layout.ts +++ b/src/main/runtime/headless-terminal-split-layout.ts @@ -1,7 +1,7 @@ import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode -} from '../../shared/terminal-tab-types' +} from '../../shared/workspace-layout/terminal-tab-types' import { insertLeafBeside, removeLayoutLeaf diff --git a/src/main/runtime/hook-status-resume-record.test.ts b/src/main/runtime/hook-status-resume-record.test.ts index 75843800bc3..4072be86a9b 100644 --- a/src/main/runtime/hook-status-resume-record.test.ts +++ b/src/main/runtime/hook-status-resume-record.test.ts @@ -3,7 +3,7 @@ import { describe, expect, it, vi } from 'vitest' import type { AgentStatusIpcPayload } from '../../shared/agent-status/contracts/agent-status-ipc-payload' import type { ExecutionHostId } from '../../shared/execution-host' import type { LayoutApplyOutcome } from '../../shared/workspace-layout/workspace-layout-command-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { applyCommandToSession } from '../persistence/terminal-topology/terminal-pane-admission' // Preserve side-effect order: mocks, lifecycle, fixtures. diff --git a/src/main/runtime/host-terminal-close-persistence-durability.test.ts b/src/main/runtime/host-terminal-close-persistence-durability.test.ts index b3d0a4c1e10..42cd2d079b1 100644 --- a/src/main/runtime/host-terminal-close-persistence-durability.test.ts +++ b/src/main/runtime/host-terminal-close-persistence-durability.test.ts @@ -4,7 +4,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { createStore, testState } from '../persistence/persistence-test-harness' vi.mock('electron', () => ({ diff --git a/src/main/runtime/host-terminal-scrollback-read.test.ts b/src/main/runtime/host-terminal-scrollback-read.test.ts index d4423e7d0e3..5378304e5eb 100644 --- a/src/main/runtime/host-terminal-scrollback-read.test.ts +++ b/src/main/runtime/host-terminal-scrollback-read.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from 'vitest' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' -import type { TerminalTab } from '../../shared/terminal-tab-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' +import type { TerminalTab } from '../../shared/workspace-layout/terminal-tab-types' import { TERMINAL_SCROLLBACK_STORE_BYTE_LIMIT } from '../../shared/terminal/replay/terminal-scrollback-limits' import { readHostTerminalScrollback, diff --git a/src/main/runtime/host-terminal-scrollback-read.ts b/src/main/runtime/host-terminal-scrollback-read.ts index 48298dbb080..0febef6224a 100644 --- a/src/main/runtime/host-terminal-scrollback-read.ts +++ b/src/main/runtime/host-terminal-scrollback-read.ts @@ -1,4 +1,4 @@ -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import type { SessionReadTerminalScrollbackResult } from '../../shared/rpc-contract/session-terminal-scrollback-params' import { TERMINAL_SCROLLBACK_STORE_BYTE_LIMIT } from '../../shared/terminal/replay/terminal-scrollback-limits' diff --git a/src/main/runtime/launched-agent-composer-readiness.ts b/src/main/runtime/launched-agent-composer-readiness.ts index 821a34852fb..faae86b070d 100644 --- a/src/main/runtime/launched-agent-composer-readiness.ts +++ b/src/main/runtime/launched-agent-composer-readiness.ts @@ -3,7 +3,7 @@ import { classifyTerminalCreationFailure, readTerminalStartFailure, terminalExitError -} from '../../shared/terminal-start-failure' +} from '../../shared/terminal/pty/lifecycle/terminal-start-failure' /** Fresh-launch signals require shell handoff plus dialog/provisional-header vetoes; shells also enable bracketed paste. * Captured-marker agents wait for their marker; others may fall back to tui-idle within the remaining budget. * Readiness alone never authorizes writing: the foreground guard must still admit the agent. */ diff --git a/src/main/runtime/launched-agent-foreground.ts b/src/main/runtime/launched-agent-foreground.ts index 69775f852e9..5c2e2024789 100644 --- a/src/main/runtime/launched-agent-foreground.ts +++ b/src/main/runtime/launched-agent-foreground.ts @@ -4,12 +4,12 @@ import { recognizeAgentProcess } from '../../shared/agent-status/process/agent-process-recognition' import { PROCESS_TABLE_SNAPSHOT_MAX_STALENESS_MS } from '../../shared/process-table-snapshot' -import { isShellProcess } from '../../shared/shell-process-detection' +import { isShellProcess } from '../../shared/agent-status/process/shell-process-detection' import type { TuiAgent } from '../../shared/agent-launch/catalog/tui-agent' import { TUI_AGENT_CONFIG } from '../../shared/agent-launch/catalog/tui-agent-config' import type { RuntimePtyController } from './runtime-pty-controller-contract' import { judgeTerminalForeground, readTerminalProcessRows } from './terminal-foreground-group' -import { isTerminalForegroundObservation } from '../../shared/terminal-foreground-observation' +import { isTerminalForegroundObservation } from '../../shared/terminal/pty/lifecycle/terminal-foreground-observation' import { LOCAL_EXECUTION_HOST_ID } from '../../shared/execution-host' /** agent permits writing; shell drops readiness; unknown proves neither. */ diff --git a/src/main/runtime/main-owned-workspace-runtime-fixture.ts b/src/main/runtime/main-owned-workspace-runtime-fixture.ts index e592e784573..ec90078b6b4 100644 --- a/src/main/runtime/main-owned-workspace-runtime-fixture.ts +++ b/src/main/runtime/main-owned-workspace-runtime-fixture.ts @@ -1,7 +1,7 @@ // Windowless main-owned layout fixture: apply in memory and notify writes so terminal listings refresh. import { getDefaultWorkspaceSession } from '../../shared/constants' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' -import type { TerminalPaneLayoutNode } from '../../shared/terminal-tab-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' +import type { TerminalPaneLayoutNode } from '../../shared/workspace-layout/terminal-tab-types' import type { LayoutCommand } from '../../shared/workspace-layout/workspace-layout-command-types' import { HEADLESS_RUNTIME_WINDOW_ID } from '../../shared/runtime-session-contracts' import { applyCommandToSession } from '../persistence/terminal-topology/terminal-pane-admission' diff --git a/src/main/runtime/markdown-tab-disk-documents.test.ts b/src/main/runtime/markdown-tab-disk-documents.test.ts index 3f7114584bf..d2045938291 100644 --- a/src/main/runtime/markdown-tab-disk-documents.test.ts +++ b/src/main/runtime/markdown-tab-disk-documents.test.ts @@ -10,7 +10,7 @@ import { compareDiskWritePrecondition } from '../../shared/file-write-disk-preco import type { PersistedOpenFile, WorkspaceSessionState -} from '../../shared/workspace-session-state-types' +} from '../../shared/workspace-session/workspace-session-state-types' import { readMarkdownTabFromDisk, saveMarkdownTabToDisk, diff --git a/src/main/runtime/markdown-tab-disk-documents.ts b/src/main/runtime/markdown-tab-disk-documents.ts index f3bdf4192e3..2006a9e1675 100644 --- a/src/main/runtime/markdown-tab-disk-documents.ts +++ b/src/main/runtime/markdown-tab-disk-documents.ts @@ -18,7 +18,7 @@ import { getDiskBaselineSignature } from '../../shared/disk-baseline-signature' import type { PersistedOpenFile, WorkspaceSessionState -} from '../../shared/workspace-session-state-types' +} from '../../shared/workspace-session/workspace-session-state-types' import { findListedEditorFile } from './mobile-session-editor-projection' export type MarkdownDiskFile = { content: string; byteLength: number } diff --git a/src/main/runtime/markdown-tab-disk-host.ts b/src/main/runtime/markdown-tab-disk-host.ts index 34863d01dfe..3448c9aa920 100644 --- a/src/main/runtime/markdown-tab-disk-host.ts +++ b/src/main/runtime/markdown-tab-disk-host.ts @@ -17,7 +17,7 @@ import { import { utf8ByteLength } from '../../shared/mobile-markdown-document' import { RemoteRuntimeClientError } from '../../shared/remote-runtime/remote-runtime-client-error' import { assertFileMutationOwnershipCapability } from '../../shared/file-mutation-ownership' -import type { PersistedOpenFile } from '../../shared/workspace-session-state-types' +import type { PersistedOpenFile } from '../../shared/workspace-session/workspace-session-state-types' import { readLocalRuntimeFilePrefix } from './files/file-reads' import { requireLocalRuntimeFileRoute, diff --git a/src/main/runtime/mobile-desktop-relay/mobile-relay-host-catalog.test.ts b/src/main/runtime/mobile-desktop-relay/mobile-relay-host-catalog.test.ts index 7df61de8c2a..4c5b942e32d 100644 --- a/src/main/runtime/mobile-desktop-relay/mobile-relay-host-catalog.test.ts +++ b/src/main/runtime/mobile-desktop-relay/mobile-relay-host-catalog.test.ts @@ -9,7 +9,7 @@ import type { RuntimeRpcResponse } from '../../../shared/runtime-rpc-envelope' import type { RuntimeStatus } from '../../../shared/runtime-types' import type { SshConnectionState } from '../../../shared/ssh-types' import { getDefaultWorkspaceSession } from '../../../shared/constants' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { BrowserWorkspace } from '../../../shared/browser-workspace-types' import type { Tab } from '../../../shared/tab-types' import type { MobileDesktopRelayHosts } from './mobile-desktop-relay-hosts' diff --git a/src/main/runtime/mobile-desktop-relay/mobile-relay-host-catalog.ts b/src/main/runtime/mobile-desktop-relay/mobile-relay-host-catalog.ts index ef0b6228686..55ff122c654 100644 --- a/src/main/runtime/mobile-desktop-relay/mobile-relay-host-catalog.ts +++ b/src/main/runtime/mobile-desktop-relay/mobile-relay-host-catalog.ts @@ -12,8 +12,8 @@ import { getPairedDeviceIdsByEnvironment, isWorkspaceOwnedBySomeoneElse } from '../../../shared/workspace-creator-visibility' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' -import { getWorkspaceSessionTabActivityIds } from '../../../shared/workspace-session-tab-activity' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' +import { getWorkspaceSessionTabActivityIds } from '../../../shared/workspace-session/workspace-session-tab-activity' import { worktreeIdentityKey } from '../../../shared/worktree/id' import { SERVER_FETCH_TIMEOUT_MS } from './server-worktree-fetch' import type { MobileDesktopRelayHosts } from './mobile-desktop-relay-hosts' diff --git a/src/main/runtime/mobile-desktop-relay/on-demand-server-worktree-rows.test.ts b/src/main/runtime/mobile-desktop-relay/on-demand-server-worktree-rows.test.ts index 585beb3d85e..049adb0f10a 100644 --- a/src/main/runtime/mobile-desktop-relay/on-demand-server-worktree-rows.test.ts +++ b/src/main/runtime/mobile-desktop-relay/on-demand-server-worktree-rows.test.ts @@ -10,7 +10,7 @@ import type { RuntimeRpcResponse } from '../../../shared/runtime-rpc-envelope' import type { RuntimeStatus } from '../../../shared/runtime-types' import type { SshConnectionState } from '../../../shared/ssh-types' import { getDefaultWorkspaceSession } from '../../../shared/constants' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { BrowserWorkspace } from '../../../shared/browser-workspace-types' import type { Tab } from '../../../shared/tab-types' import type { MobileDesktopRelayHosts } from './mobile-desktop-relay-hosts' diff --git a/src/main/runtime/mobile-session-editor-projection.test.ts b/src/main/runtime/mobile-session-editor-projection.test.ts index 72b743e3ce7..c8a3f382b28 100644 --- a/src/main/runtime/mobile-session-editor-projection.test.ts +++ b/src/main/runtime/mobile-session-editor-projection.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import { ownedEditorFileId } from '../../shared/workspace-session-pane-ownership' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import { ownedEditorFileId } from '../../shared/workspace-session/workspace-session-pane-ownership' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { buildHeadlessMobileSessionEditorTabs, retireHeadlessEditorTab diff --git a/src/main/runtime/mobile-session-editor-projection.ts b/src/main/runtime/mobile-session-editor-projection.ts index 5fef66f40d6..47fc84df79c 100644 --- a/src/main/runtime/mobile-session-editor-projection.ts +++ b/src/main/runtime/mobile-session-editor-projection.ts @@ -14,7 +14,7 @@ import { import type { PersistedOpenFile, WorkspaceSessionState -} from '../../shared/workspace-session-state-types' +} from '../../shared/workspace-session/workspace-session-state-types' export type HeadlessEditorTab = RuntimeMobileSessionMarkdownTab | RuntimeMobileSessionFileTab diff --git a/src/main/runtime/mobile-session-layout-projection.ts b/src/main/runtime/mobile-session-layout-projection.ts index d10cb89f79a..925523640c6 100644 --- a/src/main/runtime/mobile-session-layout-projection.ts +++ b/src/main/runtime/mobile-session-layout-projection.ts @@ -1,12 +1,12 @@ import { createHash, randomUUID } from 'node:crypto' -import { isTerminalLeafId } from '../../shared/stable-pane-id' +import { isTerminalLeafId } from '../../shared/workspace-layout/stable-pane-id' import type { RuntimeMobileSessionSnapshotTab, RuntimeMobileSessionTabGroup, RuntimeMobileSessionTerminalTab } from '../../shared/runtime-types' -import type { TerminalLayoutSnapshot } from '../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { TerminalLayoutSnapshot } from '../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { buildHeadlessTerminalSplitLayout } from './headless-terminal-split-layout' export function collectPersistedTerminalLeafIds( diff --git a/src/main/runtime/mobile-session-terminal-persistence-retirement.ts b/src/main/runtime/mobile-session-terminal-persistence-retirement.ts index 2f0df371af8..347d102937e 100644 --- a/src/main/runtime/mobile-session-terminal-persistence-retirement.ts +++ b/src/main/runtime/mobile-session-terminal-persistence-retirement.ts @@ -1,11 +1,11 @@ import type { WorkspaceVisibleTabType } from '../../shared/tab-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { pruneTabGroupLayoutAfterRetirement, repairMobileSessionTabGroupsAfterRetirement, type RetiredTerminalSurface } from './mobile-session-terminal-retirement' -import { retireLeavesFromTerminalLayout } from '../../shared/terminal-layout-leaf-retirement' +import { retireLeavesFromTerminalLayout } from '../../shared/workspace-layout/terminal-layout-leaf-retirement' import { rebaseWorkspaceSessionTerminalMembership } from './workspace-session-terminal-membership-authority' import { advanceTerminalTopologyRevision } from '../persistence/terminal-topology/terminal-topology-membership' diff --git a/src/main/runtime/mobile-session-terminal-projection.ts b/src/main/runtime/mobile-session-terminal-projection.ts index b02689c6d5e..c2c76b0423f 100644 --- a/src/main/runtime/mobile-session-terminal-projection.ts +++ b/src/main/runtime/mobile-session-terminal-projection.ts @@ -1,6 +1,6 @@ import type { RuntimeMobileSessionTerminalTab } from '../../shared/runtime-types' -import type { TerminalTab } from '../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { TerminalTab } from '../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { resolveTerminalTabTitle } from '../../shared/tab-title-resolution' import { readCanonicalPtyOwners, diff --git a/src/main/runtime/mobile-session-terminal-retirement-proof.test.ts b/src/main/runtime/mobile-session-terminal-retirement-proof.test.ts index c024a587131..462467ccffc 100644 --- a/src/main/runtime/mobile-session-terminal-retirement-proof.test.ts +++ b/src/main/runtime/mobile-session-terminal-retirement-proof.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import { appendRetiredTerminalSurfaceProofs } from '../../shared/terminal-retirement-proof-ledger' +import { appendRetiredTerminalSurfaceProofs } from '../../shared/workspace-layout/terminal-retirement-proof-ledger' import { attachRetirementProofsToSnapshot, preserveTerminalRetirementProofs diff --git a/src/main/runtime/mobile-session-terminal-retirement-proof.ts b/src/main/runtime/mobile-session-terminal-retirement-proof.ts index f28be428eb5..5a496b027e1 100644 --- a/src/main/runtime/mobile-session-terminal-retirement-proof.ts +++ b/src/main/runtime/mobile-session-terminal-retirement-proof.ts @@ -6,7 +6,7 @@ import { appendRetiredTerminalSurfaceProofs, dropRetirementProofsForLiveSurfaces, retirementProofKey -} from '../../shared/terminal-retirement-proof-ledger' +} from '../../shared/workspace-layout/terminal-retirement-proof-ledger' /** Carry durable host close proofs through renderer snapshots. Inherit worktreeInstanceId on identity-less host writes * so renderer(A) -> host -> renderer(B) cannot launder A's proofs into B. */ diff --git a/src/main/runtime/mobile-session-terminal-retirement.ts b/src/main/runtime/mobile-session-terminal-retirement.ts index f920506eec7..42a854a5362 100644 --- a/src/main/runtime/mobile-session-terminal-retirement.ts +++ b/src/main/runtime/mobile-session-terminal-retirement.ts @@ -6,8 +6,8 @@ import type { RuntimeMobileSessionTerminalTab } from '../../shared/runtime-types' import type { TabGroupLayoutNode } from '../../shared/tab-types' -import { appendRetiredTerminalSurfaceProofs } from '../../shared/terminal-retirement-proof-ledger' -import { retireLeavesFromTerminalLayout } from '../../shared/terminal-layout-leaf-retirement' +import { appendRetiredTerminalSurfaceProofs } from '../../shared/workspace-layout/terminal-retirement-proof-ledger' +import { retireLeavesFromTerminalLayout } from '../../shared/workspace-layout/terminal-layout-leaf-retirement' export type RetiredTerminalSurface = { worktreeId: string diff --git a/src/main/runtime/moved-pane-owner-rekey.ts b/src/main/runtime/moved-pane-owner-rekey.ts index 34315e19676..8a4504ee98d 100644 --- a/src/main/runtime/moved-pane-owner-rekey.ts +++ b/src/main/runtime/moved-pane-owner-rekey.ts @@ -1,8 +1,8 @@ import { agentHookServer } from '../agent-hooks/server' import { forgetFailedAgentLaunches } from '../agent-launch/agent-launch-pane-attachment' import type { Store } from '../persistence/loading-store/store' -import { makePaneKey, parsePaneKey } from '../../shared/stable-pane-id' -import type { TerminalLeafMoveRequest } from '../../shared/terminal-leaf-move' +import { makePaneKey, parsePaneKey } from '../../shared/workspace-layout/stable-pane-id' +import type { TerminalLeafMoveRequest } from '../../shared/workspace-layout/terminal-leaf-move' import type { OrcaRuntimeService } from './orca-runtime' type PaneOwnerRuntime = Pick | undefined diff --git a/src/main/runtime/opencode-run-lifetime-status.ts b/src/main/runtime/opencode-run-lifetime-status.ts index b593a2f084d..c39321820ec 100644 --- a/src/main/runtime/opencode-run-lifetime-status.ts +++ b/src/main/runtime/opencode-run-lifetime-status.ts @@ -6,7 +6,7 @@ import { } from '../../shared/agent-status/contracts/agent-status-types' import { FOREGROUND_COMMAND_READS } from '../../shared/foreground-command-settle' import { isOpenCodeRunCommand } from '../../shared/agent-status/process/opencode-headless-command' -import { isShellProcess } from '../../shared/shell-process-detection' +import { isShellProcess } from '../../shared/agent-status/process/shell-process-detection' const SIGINT_EXIT_CODE = 130 const OPENCODE_LAUNCHERS = new Set(['node', 'bun', 'bunx', 'npx', 'npm', 'pnpm', 'pnpx', 'yarn']) diff --git a/src/main/runtime/orca-runtime-agent-transitions.ts b/src/main/runtime/orca-runtime-agent-transitions.ts index 5ea7486c671..ec464879a6d 100644 --- a/src/main/runtime/orca-runtime-agent-transitions.ts +++ b/src/main/runtime/orca-runtime-agent-transitions.ts @@ -4,7 +4,7 @@ import type { ConnectorCloud } from '../connector-cloud/connector-cloud' import type { ExternalConversationSeam } from '../external-conversations/external-conversation-seam' import { installExternalConversations } from '../external-conversations/external-conversations-install' import { HEADLESS_RUNTIME_WINDOW_ID } from '../../shared/runtime-session-contracts' -import { parsePaneKey } from '../../shared/stable-pane-id' +import { parsePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { parseWorkspaceKey } from '../../shared/workspace-scope' import { getRepoIdFromWorktreeId } from '../../shared/worktree/id' import { OrcaRuntimeWithWindowlessTerminalActivity } from './orca-runtime-windowless-terminal-activity' diff --git a/src/main/runtime/orca-runtime-codex-idle-title-chat-address.test.ts b/src/main/runtime/orca-runtime-codex-idle-title-chat-address.test.ts index efbb75c705f..2a3fb6bb050 100644 --- a/src/main/runtime/orca-runtime-codex-idle-title-chat-address.test.ts +++ b/src/main/runtime/orca-runtime-codex-idle-title-chat-address.test.ts @@ -2,7 +2,7 @@ import { describe, expect, it, vi } from 'vitest' import { OrcaRuntimeService } from './orca-runtime' import type { AgentStatusIpcPayload } from '../../shared/agent-status/contracts/agent-status-ipc-payload' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../shared/layout-owner-switch' import { committingSpawn } from './bind-first-pane.test-fixture' import type { RuntimeStore } from './runtime-store-contract' diff --git a/src/main/runtime/orca-runtime-cold-restore-terminal-membership.test.ts b/src/main/runtime/orca-runtime-cold-restore-terminal-membership.test.ts index 6e7ec4406f5..1fc9dbf76d9 100644 --- a/src/main/runtime/orca-runtime-cold-restore-terminal-membership.test.ts +++ b/src/main/runtime/orca-runtime-cold-restore-terminal-membership.test.ts @@ -6,7 +6,7 @@ import type { RuntimeMobileSessionTabsResult, RuntimeMobileSessionTabsSnapshot } from '../../shared/runtime-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { OrcaRuntimeService } from './orca-runtime' import { setRuntimeDesktopSurface } from './runtime-desktop-surface' import { withDurableRuntimeStore } from './runtime-durable-store-fixture' diff --git a/src/main/runtime/orca-runtime-create-terminal-dependencies.ts b/src/main/runtime/orca-runtime-create-terminal-dependencies.ts index 93a4a48ee20..c49095dcf84 100644 --- a/src/main/runtime/orca-runtime-create-terminal-dependencies.ts +++ b/src/main/runtime/orca-runtime-create-terminal-dependencies.ts @@ -10,7 +10,7 @@ export { ownerSurfacing, resolveTerminalPresentation } from './orca-runtime-core' -export { makePaneKey } from '../../shared/stable-pane-id' +import '../../shared/workspace-layout/stable-pane-id' export { randomUUID } from 'node:crypto' export { admitStablePaneAdoption, diff --git a/src/main/runtime/orca-runtime-default-tab-agent-status.test.ts b/src/main/runtime/orca-runtime-default-tab-agent-status.test.ts index 195da96c40a..e3920b30395 100644 --- a/src/main/runtime/orca-runtime-default-tab-agent-status.test.ts +++ b/src/main/runtime/orca-runtime-default-tab-agent-status.test.ts @@ -2,7 +2,7 @@ import { describe, expect, it, vi } from 'vitest' import { OrcaRuntimeService } from './orca-runtime' import { getDefaultWorkspaceSession } from '../../shared/constants' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { createMinimalPersistedTerminalTab } from '../persistence/restoring-sessions/session-owner-fields' import { buildHeadlessMobileSessionTerminalTabs } from './mobile-session-terminal-projection' import type { RuntimeNotifier } from './runtime-notifier-contract' diff --git a/src/main/runtime/orca-runtime-desktop-tab-names.test.ts b/src/main/runtime/orca-runtime-desktop-tab-names.test.ts index 9f4a603f831..d84ac578c81 100644 --- a/src/main/runtime/orca-runtime-desktop-tab-names.test.ts +++ b/src/main/runtime/orca-runtime-desktop-tab-names.test.ts @@ -2,8 +2,8 @@ import { afterEach, expect, it, vi } from 'vitest' import { getDefaultWorkspaceSession } from '../../shared/constants' import type { ExecutionHostId } from '../../shared/execution-host' import type { Tab } from '../../shared/tab-types' -import type { TerminalTab } from '../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { TerminalTab } from '../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { setStructuredAgentSessionHost } from '../native-chat/agent-session-wire/structured-agent-session-registry' import { buildHeadlessMobileSessionTerminalTabs } from './mobile-session-terminal-projection' diff --git a/src/main/runtime/orca-runtime-exited-split-pane-close.test.ts b/src/main/runtime/orca-runtime-exited-split-pane-close.test.ts index 7ba35379bf2..79a65beff6f 100644 --- a/src/main/runtime/orca-runtime-exited-split-pane-close.test.ts +++ b/src/main/runtime/orca-runtime-exited-split-pane-close.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it, vi } from 'vitest' import { getDefaultWorkspaceSession } from '../../shared/constants' -import { collectLeafIds } from '../../shared/terminal-pane-layout-tree' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import { collectLeafIds } from '../../shared/workspace-layout/terminal-pane-layout-tree' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import type { RuntimeMobileSessionTabsSnapshot } from '../../shared/runtime-types' import { OrcaRuntimeService } from './orca-runtime' import { partialRuntimeStore } from './runtime-store-partial-fixture' diff --git a/src/main/runtime/orca-runtime-failed-start-pane-layout-owner.test.ts b/src/main/runtime/orca-runtime-failed-start-pane-layout-owner.test.ts index d51df169bb6..78a5423d653 100644 --- a/src/main/runtime/orca-runtime-failed-start-pane-layout-owner.test.ts +++ b/src/main/runtime/orca-runtime-failed-start-pane-layout-owner.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from 'vitest' -import { collectLeafIds } from '../../shared/terminal-pane-layout-tree' +import { collectLeafIds } from '../../shared/workspace-layout/terminal-pane-layout-tree' import { NEWER_DAEMON_HOLD_ERROR } from '../../shared/newer-daemon-hold' import { setupLayoutOwnerRuntime, WORKTREE_ID } from './orca-runtime-layout-owner-start-fixture' import { committingSpawn } from './bind-first-pane.test-fixture' diff --git a/src/main/runtime/orca-runtime-get-status.ts b/src/main/runtime/orca-runtime-get-status.ts index 77114dabec8..4e1cb4cccc0 100644 --- a/src/main/runtime/orca-runtime-get-status.ts +++ b/src/main/runtime/orca-runtime-get-status.ts @@ -49,7 +49,7 @@ import type { AutomationsChangedPayload, RuntimeClientEvent } from '../../shared/runtime-client-events' -import { parsePaneKey } from '../../shared/stable-pane-id' +import { parsePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { wakeFolderRepoGitUpgradeWatch } from '../ipc/folder-repo-git-upgrade-wake' import { runWorktreeChangeInvalidators } from '../ipc/worktrees/listing/worktree-change-invalidators' import { MACHINE_NAME_PUBLISH_WAIT_MS } from './runtime-machine-name' diff --git a/src/main/runtime/orca-runtime-headless-hydration-repo-gate.spec.ts b/src/main/runtime/orca-runtime-headless-hydration-repo-gate.spec.ts index bce6fdcf8c5..8f9de730f86 100644 --- a/src/main/runtime/orca-runtime-headless-hydration-repo-gate.spec.ts +++ b/src/main/runtime/orca-runtime-headless-hydration-repo-gate.spec.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import { getDefaultWorkspaceSession } from '../../shared/constants' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { OrcaRuntimeService } from './orca-runtime' export function registerOrcaRuntimeHeadlessHydrationRepoGateTests(): void { diff --git a/src/main/runtime/orca-runtime-hook-agent-status-projection.test.ts b/src/main/runtime/orca-runtime-hook-agent-status-projection.test.ts index 06725c6ec3f..f57ca48b1b5 100644 --- a/src/main/runtime/orca-runtime-hook-agent-status-projection.test.ts +++ b/src/main/runtime/orca-runtime-hook-agent-status-projection.test.ts @@ -5,7 +5,7 @@ import { OrcaRuntimeService } from './orca-runtime' import { AGENT_STATUS_STALE_AFTER_MS } from '../../shared/agent-status/contracts/agent-status-freshness' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../shared/layout-owner-switch' import type { AgentStatusIpcPayload } from '../../shared/agent-status/contracts/agent-status-ipc-payload' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { committingSpawn } from './bind-first-pane.test-fixture' import { partialRuntimeStore } from './runtime-store-partial-fixture' diff --git a/src/main/runtime/orca-runtime-layout-owner-start-fixture.ts b/src/main/runtime/orca-runtime-layout-owner-start-fixture.ts index bbb2aa736a6..64969f1a84b 100644 --- a/src/main/runtime/orca-runtime-layout-owner-start-fixture.ts +++ b/src/main/runtime/orca-runtime-layout-owner-start-fixture.ts @@ -1,7 +1,7 @@ // Windowless layout-owner fixture applies commands in memory and starts main-owned terminals immediately. import { vi } from 'vitest' import { getDefaultWorkspaceSession } from '../../shared/constants' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import type { LayoutCommand } from '../../shared/workspace-layout/workspace-layout-command-types' import { applyCommandToSession } from '../persistence/terminal-topology/terminal-pane-admission' import { resolveHostId } from '../persistence/loading-store/session-host-partitions' diff --git a/src/main/runtime/orca-runtime-mobile-agent-status-ordering.test.ts b/src/main/runtime/orca-runtime-mobile-agent-status-ordering.test.ts index 4c33a1110ac..35a7d2f4da1 100644 --- a/src/main/runtime/orca-runtime-mobile-agent-status-ordering.test.ts +++ b/src/main/runtime/orca-runtime-mobile-agent-status-ordering.test.ts @@ -3,7 +3,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { OrcaRuntimeService } from './orca-runtime' import type { AgentStatusEntry } from '../../shared/agent-status/contracts/agent-status-types' import type { AgentStatusIpcPayload } from '../../shared/agent-status/contracts/agent-status-ipc-payload' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { committingSpawn } from './bind-first-pane.test-fixture' import { makeRuntimeStoreWithWorkspaceSession } from './orca-runtime-test-fixtures.spec' import { getDefaultWorkspaceSession } from '../../shared/constants' diff --git a/src/main/runtime/orca-runtime-mobile-agent-status-title-truthfulness.test.ts b/src/main/runtime/orca-runtime-mobile-agent-status-title-truthfulness.test.ts index 8b524e4ec60..bf28bb1afd4 100644 --- a/src/main/runtime/orca-runtime-mobile-agent-status-title-truthfulness.test.ts +++ b/src/main/runtime/orca-runtime-mobile-agent-status-title-truthfulness.test.ts @@ -2,7 +2,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { OrcaRuntimeService } from './orca-runtime' import type { AgentStatusIpcPayload } from '../../shared/agent-status/contracts/agent-status-ipc-payload' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { projectSessionTabAgentStatus } from './rpc/methods/session-tab-agent-status-projection' vi.mock('electron', () => ({ diff --git a/src/main/runtime/orca-runtime-mobile-close-preserved-resurrection.test.ts b/src/main/runtime/orca-runtime-mobile-close-preserved-resurrection.test.ts index f4fab8830be..29eef6da608 100644 --- a/src/main/runtime/orca-runtime-mobile-close-preserved-resurrection.test.ts +++ b/src/main/runtime/orca-runtime-mobile-close-preserved-resurrection.test.ts @@ -6,8 +6,8 @@ import { describe, expect, it, vi } from 'vitest' import { getDefaultWorkspaceSession } from '../../shared/constants' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../shared/layout-owner-switch' import { sessionLayoutApply } from './__fixtures__/main-layout-close-fixture' -import { makePaneKey } from '../../shared/stable-pane-id' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { OrcaRuntimeService } from './orca-runtime' const REPO_ID = 'repo-preserved-resurrection' diff --git a/src/main/runtime/orca-runtime-mobile-markdown-tab-routes.test.ts b/src/main/runtime/orca-runtime-mobile-markdown-tab-routes.test.ts index 28832692a8f..d5f02e8aadd 100644 --- a/src/main/runtime/orca-runtime-mobile-markdown-tab-routes.test.ts +++ b/src/main/runtime/orca-runtime-mobile-markdown-tab-routes.test.ts @@ -4,7 +4,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { getDefaultWorkspaceSession } from '../../shared/constants' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import type { ExecutionHostId } from '../../shared/execution-host' import { hashMarkdownContent } from '../../shared/mobile-markdown-document' import type { RuntimeMobileSessionMarkdownTab } from '../../shared/runtime-types' diff --git a/src/main/runtime/orca-runtime-provider-reattach-launch-identity.test.ts b/src/main/runtime/orca-runtime-provider-reattach-launch-identity.test.ts index cc64114267b..37becd1d090 100644 --- a/src/main/runtime/orca-runtime-provider-reattach-launch-identity.test.ts +++ b/src/main/runtime/orca-runtime-provider-reattach-launch-identity.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { OrcaRuntimeService } from './orca-runtime' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../shared/layout-owner-switch' import { registerBoundPty } from './bind-first-pane.test-fixture' diff --git a/src/main/runtime/orca-runtime-serve-browser-restore.test.ts b/src/main/runtime/orca-runtime-serve-browser-restore.test.ts index 53e4c1cc935..b2faeae2824 100644 --- a/src/main/runtime/orca-runtime-serve-browser-restore.test.ts +++ b/src/main/runtime/orca-runtime-serve-browser-restore.test.ts @@ -7,7 +7,7 @@ import { makeWorkspaceSessionWithHeadlessTerminal } from './orca-runtime-test-fixtures.spec' import { withOpenedServeBrowserTab } from './serve-browser-tab-layout' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { BLANK_BROWSER_TAB_STATE } from '../../shared/workspace-layout/workspace-layout-beside' import { runInRemoteCliBrowserScope } from './desktop-browser-bridge/remote-cli-browser-scope' diff --git a/src/main/runtime/orca-runtime-session-tabs-path-alias.test.ts b/src/main/runtime/orca-runtime-session-tabs-path-alias.test.ts index fe5f46cda69..fcd378a1114 100644 --- a/src/main/runtime/orca-runtime-session-tabs-path-alias.test.ts +++ b/src/main/runtime/orca-runtime-session-tabs-path-alias.test.ts @@ -5,7 +5,7 @@ import { getDefaultWorkspaceSession } from '../../shared/constants' import { toAppSshPtyId } from '../../shared/ssh-pty-id' import { toRemoteRuntimePtyId } from '../../shared/remote-runtime/remote-runtime-pty-id' import type { RuntimeMobileSessionTabsSnapshot } from '../../shared/runtime-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { OrcaRuntimeService } from './orca-runtime' import { RpcDispatcher } from './rpc/dispatcher' import { SESSION_TAB_METHODS } from './rpc/methods/session-tabs' diff --git a/src/main/runtime/orca-runtime-structured-session-restore.test.ts b/src/main/runtime/orca-runtime-structured-session-restore.test.ts index 5b955ea8940..66f26c0f230 100644 --- a/src/main/runtime/orca-runtime-structured-session-restore.test.ts +++ b/src/main/runtime/orca-runtime-structured-session-restore.test.ts @@ -1,6 +1,6 @@ import { partialRuntimeStore } from './runtime-store-partial-fixture' import { getDefaultWorkspaceSession } from '../../shared/constants' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { agentSessionRecordFixture } from '../native-chat/agent-session-record-test-fixture' import { agentSessionConversationView } from '../../shared/agent-session/lifecycle/agent-session-conversation-view' import { afterEach, describe, expect, it, vi } from 'vitest' diff --git a/src/main/runtime/orca-runtime-terminal-close-continuity.test.ts b/src/main/runtime/orca-runtime-terminal-close-continuity.test.ts index b1922c98ec3..4b712505d94 100644 --- a/src/main/runtime/orca-runtime-terminal-close-continuity.test.ts +++ b/src/main/runtime/orca-runtime-terminal-close-continuity.test.ts @@ -1,6 +1,6 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../shared/layout-owner-switch' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { registerBoundPty } from './bind-first-pane.test-fixture' import { resetAgentLaunchPanesForTests, diff --git a/src/main/runtime/orca-runtime-terminal-close-records.test.ts b/src/main/runtime/orca-runtime-terminal-close-records.test.ts index 04310d1ddcf..211905f4efa 100644 --- a/src/main/runtime/orca-runtime-terminal-close-records.test.ts +++ b/src/main/runtime/orca-runtime-terminal-close-records.test.ts @@ -6,8 +6,8 @@ import { getDefaultWorkspaceSession } from '../../shared/constants' import { CLOSED_TERMINAL_TAB_TOMBSTONE_TTL_MS, MAX_CLOSED_TERMINAL_TAB_TOMBSTONES -} from '../../shared/closed-terminal-tab-tombstones' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +} from '../../shared/workspace-layout/closed-terminal-tab-tombstones' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { Store } from '../persistence/loading-store/store' import { closeTestStores, createSqliteTestStore } from '../persistence/persistence-test-harness' import { OrcaRuntimeService } from './orca-runtime' diff --git a/src/main/runtime/orca-runtime-terminal-close-spill-partition.spec.ts b/src/main/runtime/orca-runtime-terminal-close-spill-partition.spec.ts index 207e919dd47..7a12eede1db 100644 --- a/src/main/runtime/orca-runtime-terminal-close-spill-partition.spec.ts +++ b/src/main/runtime/orca-runtime-terminal-close-spill-partition.spec.ts @@ -2,9 +2,9 @@ import { withDurableRuntimeStore } from './runtime-durable-store-fixture' import { describe, expect, it, vi } from 'vitest' import { getDefaultWorkspaceSession } from '../../shared/constants' import { LOCAL_EXECUTION_HOST_ID, type ExecutionHostId } from '../../shared/execution-host' -import { hasClosedTerminalTabRecord } from '../../shared/closed-terminal-tab-tombstones' +import { hasClosedTerminalTabRecord } from '../../shared/workspace-layout/closed-terminal-tab-tombstones' import type { RuntimeMobileSessionTabsSnapshot } from '../../shared/runtime-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { buildHeadlessMobileSessionTerminalTabs } from './mobile-session-terminal-projection' import { OrcaRuntimeService } from './orca-runtime' import { terminalSurfaceCloseMutation } from './terminal-surface-close' diff --git a/src/main/runtime/orca-runtime-terminal-handle-incarnation.test.ts b/src/main/runtime/orca-runtime-terminal-handle-incarnation.test.ts index 71bfbe53394..28d1e6f4b50 100644 --- a/src/main/runtime/orca-runtime-terminal-handle-incarnation.test.ts +++ b/src/main/runtime/orca-runtime-terminal-handle-incarnation.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from 'vitest' import { OrcaRuntimeService } from './orca-runtime' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../shared/layout-owner-switch' import { registerBoundPty } from './bind-first-pane.test-fixture' import { partialRuntimeStore } from './runtime-store-partial-fixture' diff --git a/src/main/runtime/orca-runtime-terminal-handle-leaf-removal.test.ts b/src/main/runtime/orca-runtime-terminal-handle-leaf-removal.test.ts index e8fdfb00de7..86dfb450a15 100644 --- a/src/main/runtime/orca-runtime-terminal-handle-leaf-removal.test.ts +++ b/src/main/runtime/orca-runtime-terminal-handle-leaf-removal.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { DISCONNECTED_PTY_RECORD_MAX } from './orca-runtime-postlude' import { createHarness, diff --git a/src/main/runtime/orca-runtime-terminal-retirement-host-partition.spec.ts b/src/main/runtime/orca-runtime-terminal-retirement-host-partition.spec.ts index 4f8830fe58a..422a4bb43e6 100644 --- a/src/main/runtime/orca-runtime-terminal-retirement-host-partition.spec.ts +++ b/src/main/runtime/orca-runtime-terminal-retirement-host-partition.spec.ts @@ -3,7 +3,7 @@ import { describe, expect, it, vi } from 'vitest' import { getDefaultWorkspaceSession } from '../../shared/constants' import { LOCAL_EXECUTION_HOST_ID, type ExecutionHostId } from '../../shared/execution-host' import type { RuntimeMobileSessionTabsSnapshot } from '../../shared/runtime-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { OrcaRuntimeService } from './orca-runtime' import { RuntimeWorkspaceSessionController } from './runtime-workspace-session-controller' diff --git a/src/main/runtime/orca-runtime-terminal-retirement.test.ts b/src/main/runtime/orca-runtime-terminal-retirement.test.ts index 9b8f012cb32..5ff3c5f6119 100644 --- a/src/main/runtime/orca-runtime-terminal-retirement.test.ts +++ b/src/main/runtime/orca-runtime-terminal-retirement.test.ts @@ -6,7 +6,7 @@ import type { RuntimeMobileSessionTabsResult, RuntimeMobileSessionTabsSnapshot } from '../../shared/runtime-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { sanitizeWorkspaceSessionTerminalRetirements } from './mobile-session-terminal-persistence-retirement' import { OrcaRuntimeService } from './orca-runtime' diff --git a/src/main/runtime/orca-runtime-terminal-split-authority.test.ts b/src/main/runtime/orca-runtime-terminal-split-authority.test.ts index 39a75ee146d..c386e6e373d 100644 --- a/src/main/runtime/orca-runtime-terminal-split-authority.test.ts +++ b/src/main/runtime/orca-runtime-terminal-split-authority.test.ts @@ -2,10 +2,10 @@ import { withRuntimePaneAdmission } from './runtime-durable-store-fixture' import { describe, expect, it, vi } from 'vitest' import { getDefaultWorkspaceSession } from '../../shared/constants' import type { RuntimeMobileSessionTabsSnapshot } from '../../shared/runtime-types' -import type { TerminalLayoutSnapshot } from '../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' -import { makePaneKey } from '../../shared/stable-pane-id' -import { collectLeafIds } from '../../shared/terminal-pane-layout-tree' +import type { TerminalLayoutSnapshot } from '../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' +import { collectLeafIds } from '../../shared/workspace-layout/terminal-pane-layout-tree' import { OrcaRuntimeService } from './orca-runtime' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../shared/layout-owner-switch' import { bindPaneFirst, committingSpawn } from './bind-first-pane.test-fixture' diff --git a/src/main/runtime/orca-runtime-terminal-surface-close.test.ts b/src/main/runtime/orca-runtime-terminal-surface-close.test.ts index 836aab35cb9..63f9686164f 100644 --- a/src/main/runtime/orca-runtime-terminal-surface-close.test.ts +++ b/src/main/runtime/orca-runtime-terminal-surface-close.test.ts @@ -3,8 +3,8 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, describe, expect, it } from 'vitest' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../shared/layout-owner-switch' -import { makePaneKey } from '../../shared/stable-pane-id' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { Store } from '../persistence/loading-store/store' import { closeTestStores, createSqliteTestStore } from '../persistence/persistence-test-harness' import { OrcaRuntimeService } from './orca-runtime' diff --git a/src/main/runtime/orca-runtime-test-fixtures.spec.ts b/src/main/runtime/orca-runtime-test-fixtures.spec.ts index 8a8bb46a90d..42d062293fe 100644 --- a/src/main/runtime/orca-runtime-test-fixtures.spec.ts +++ b/src/main/runtime/orca-runtime-test-fixtures.spec.ts @@ -11,7 +11,7 @@ import { getTerminalPasteIngestMs } from '../../shared/agent-launch/startup/agent-prompt-injection' import { getDefaultWorkspaceSession } from '../../shared/constants' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import type { LayoutCommand } from '../../shared/workspace-layout/workspace-layout-command-types' import { applyCommandToSession } from '../persistence/terminal-topology/terminal-pane-admission' import { resolveHostId } from '../persistence/loading-store/session-host-partitions' @@ -22,15 +22,15 @@ import { ensurePathWithinWorkspaceMock, type ProjectGroup, type RpcRequest, - type TerminalLayoutSnapshot, - type WorkspaceSessionState, type WorktreeMeta } from './orca-runtime-test-mocks.spec' +import type { TerminalLayoutSnapshot } from '../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import type { FolderWorkspace } from '../../shared/folder-workspaces/folder-workspace-types' import { InMemoryOrchestrationMessages } from './orca-runtime-test-orchestration-messages.spec' import type { OrchestrationDb } from './orchestration/db' -import type { PtyProcessInspection } from '../providers/pty-process-inspection' +import type { TerminalProcessInspection as PtyProcessInspection } from '../../shared/terminal/pty/lifecycle/terminal-process-inspection' import type { Store } from '../persistence/loading-store/store' import type { HostWorktreeTarget } from '../../shared/worktree/host-qualified-identity' diff --git a/src/main/runtime/orca-runtime-test-mocks.spec.ts b/src/main/runtime/orca-runtime-test-mocks.spec.ts index 01e9030b2e9..9bd3bd6cb46 100644 --- a/src/main/runtime/orca-runtime-test-mocks.spec.ts +++ b/src/main/runtime/orca-runtime-test-mocks.spec.ts @@ -3,6 +3,7 @@ import * as setup from './orca-runtime-test-mocks/setup.spec' import * as importedValues from './orca-runtime-test-mocks/imported-values.spec' import type * as GitUsernameModule from '../git/git-username' +import * as importedValuesOwner1 from '../../shared/workspace-layout/stable-pane-id' export const AGENT_PROMPT_BRACKETED_PASTE_END = importedValues.exportedAGENT_PROMPT_BRACKETED_PASTE_END @@ -95,7 +96,7 @@ export const listWorktreesStrict = importedValues.exportedListWorktreesStrict export const loadHooks = importedValues.exportedLoadHooks export const localWorktreeFilesystem = importedValues.exportedLocalWorktreeFilesystem export const lstat = importedValues.exportedLstat -export const makePaneKey = importedValues.exportedMakePaneKey +export const makePaneKey = importedValuesOwner1.makePaneKey export const mkdir = importedValues.exportedMkdir export const mkdirSync = importedValues.exportedMkdirSync export const mkdtemp = importedValues.exportedMkdtemp @@ -249,10 +250,9 @@ export type { } from '../../shared/runtime-types' export type { RuntimeTerminalAgentStatusEvent } from './orca-runtime' export type { Tab } from '../../shared/tab-types' -export type { TerminalLayoutSnapshot } from '../../shared/terminal-tab-types' export type { WorkspaceLineage, WorktreeLineage } from '../../shared/worktree/lineage-types' -export type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' + export type { Worktree } from '../../shared/worktree/types' export type { WorktreeMeta } from '../../shared/worktree/meta-types' diff --git a/src/main/runtime/orca-runtime-test-mocks/imported-values.spec.ts b/src/main/runtime/orca-runtime-test-mocks/imported-values.spec.ts index c590ae1b5a7..69026898ba6 100644 --- a/src/main/runtime/orca-runtime-test-mocks/imported-values.spec.ts +++ b/src/main/runtime/orca-runtime-test-mocks/imported-values.spec.ts @@ -104,7 +104,7 @@ import { getDefaultWorkspaceSession } from '../../../shared/constants' import { advertisedUrlWatcher } from '../../ports/advertised-url-watcher' -import { makePaneKey } from '../../../shared/stable-pane-id' +import '../../../shared/workspace-layout/stable-pane-id' import { SETUP_AGENT_SEQUENCE_STARTUP_COMMAND_ENV, SETUP_AGENT_SEQUENCE_STARTUP_SCRIPT_ENV @@ -203,7 +203,7 @@ export const exportedListWorktreesStrict = listWorktreesStrict export const exportedLoadHooks = loadHooks export const exportedLocalWorktreeFilesystem = localWorktreeFilesystem export const exportedLstat = lstat -export const exportedMakePaneKey = makePaneKey + export const exportedMkdir = mkdir export const exportedMkdirSync = mkdirSync export const exportedMkdtemp = mkdtemp diff --git a/src/main/runtime/orca-runtime-test-scenario-builders.spec.ts b/src/main/runtime/orca-runtime-test-scenario-builders.spec.ts index a124288697a..a4d1bf8a63b 100644 --- a/src/main/runtime/orca-runtime-test-scenario-builders.spec.ts +++ b/src/main/runtime/orca-runtime-test-scenario-builders.spec.ts @@ -17,10 +17,8 @@ const { TEST_WORKTREE_PATH, makeHeadlessTerminalLayout, makeRuntimeStoreWithWork fixtures const { makeWorkspaceSessionWithHeadlessTerminal, store } = fixtures -import type { - RuntimeBrowserClientPlacement, - WorkspaceSessionState -} from './orca-runtime-test-mocks.spec' +import type { RuntimeBrowserClientPlacement } from './orca-runtime-test-mocks.spec' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import type { BrowserClientHostCommandEvent } from '../../shared/browser/client-hosting/browser-client-host-protocol' import type { TerminalSideEffectBatch } from '../../shared/terminal/output/terminal-side-effect-facts' import type { OrchestrationDb } from './orchestration/db' diff --git a/src/main/runtime/orca-runtime-tests/mobile-session-tabs-cold-serve-hydrate.spec.ts b/src/main/runtime/orca-runtime-tests/mobile-session-tabs-cold-serve-hydrate.spec.ts index 09aa17b938a..65772e02aad 100644 --- a/src/main/runtime/orca-runtime-tests/mobile-session-tabs-cold-serve-hydrate.spec.ts +++ b/src/main/runtime/orca-runtime-tests/mobile-session-tabs-cold-serve-hydrate.spec.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from 'vitest' import { OrcaRuntimeService } from '../orca-runtime-test-mocks.spec' -import type { WorkspaceSessionState } from '../orca-runtime-test-mocks.spec' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { HEADLESS_LEAF_ID, HEADLESS_SECOND_LEAF_ID, diff --git a/src/main/runtime/orca-runtime-tests/mobile-session-tabs-duplicate-pty-repair.spec.ts b/src/main/runtime/orca-runtime-tests/mobile-session-tabs-duplicate-pty-repair.spec.ts index 3f6d516afce..55d2f43925a 100644 --- a/src/main/runtime/orca-runtime-tests/mobile-session-tabs-duplicate-pty-repair.spec.ts +++ b/src/main/runtime/orca-runtime-tests/mobile-session-tabs-duplicate-pty-repair.spec.ts @@ -9,7 +9,7 @@ import { makeWorkspaceSessionWithHeadlessTerminal } from '../orca-runtime-test-fixtures.spec' import { planDuplicatePtyPaneRepair } from '../../persistence/terminal-topology/duplicate-pty-pane-repair' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' // Windowless listing reads stored layout; duplicate PTY bindings need durable repair to avoid duplicate tabs. const duplicate = makeWorkspaceSessionWithHeadlessTerminal({ diff --git a/src/main/runtime/orca-runtime-tests/mobile-session-tabs-headless-chat-rebuild.spec.ts b/src/main/runtime/orca-runtime-tests/mobile-session-tabs-headless-chat-rebuild.spec.ts index 91d2052f1c1..69e5c9dfd27 100644 --- a/src/main/runtime/orca-runtime-tests/mobile-session-tabs-headless-chat-rebuild.spec.ts +++ b/src/main/runtime/orca-runtime-tests/mobile-session-tabs-headless-chat-rebuild.spec.ts @@ -8,7 +8,7 @@ import { makeRuntimeStoreWithWorkspaceSession, makeWorkspaceSessionWithHeadlessTerminal } from '../orca-runtime-test-fixtures.spec' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../shared/layout-owner-switch' import { LOCAL_EXECUTION_HOST_ID, type ExecutionHostId } from '../../../shared/execution-host' import type { LayoutCommand } from '../../../shared/workspace-layout/workspace-layout-command-types' diff --git a/src/main/runtime/orca-runtime-tests/mobile-session-tabs-part-04.spec.ts b/src/main/runtime/orca-runtime-tests/mobile-session-tabs-part-04.spec.ts index bcc84db83e9..1eb22fae12b 100644 --- a/src/main/runtime/orca-runtime-tests/mobile-session-tabs-part-04.spec.ts +++ b/src/main/runtime/orca-runtime-tests/mobile-session-tabs-part-04.spec.ts @@ -8,12 +8,11 @@ import { join, mkdtemp, tmpdir, - waitForMobileSessionTabsEvents -} from '../orca-runtime-test-mocks.spec' -import type { - RuntimeMobileSessionTabsResult, - WorkspaceSessionState + waitForMobileSessionTabsEvents, + type RuntimeMobileSessionTabsResult } from '../orca-runtime-test-mocks.spec' + +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { HEADLESS_LEAF_ID, TEST_FOLDER_PROJECT_GROUP_ID, diff --git a/src/main/runtime/orca-runtime-tests/mobile-session-tabs-part-07.spec.ts b/src/main/runtime/orca-runtime-tests/mobile-session-tabs-part-07.spec.ts index ffa00c6ef8c..7293b529fe1 100644 --- a/src/main/runtime/orca-runtime-tests/mobile-session-tabs-part-07.spec.ts +++ b/src/main/runtime/orca-runtime-tests/mobile-session-tabs-part-07.spec.ts @@ -2,9 +2,10 @@ import { describe, expect, it, vi } from 'vitest' import { OrcaRuntimeService, electronMocks, - getDefaultWorkspaceSession + getDefaultWorkspaceSession, + type RuntimeMobileSessionTabsResult } from '../orca-runtime-test-mocks.spec' -import type { RuntimeMobileSessionTabsResult } from '../orca-runtime-test-mocks.spec' + import { HEADLESS_LEAF_ID, TEST_REPO_ID, @@ -17,7 +18,7 @@ import { } from '../orca-runtime-test-fixtures.spec' import { makePendingAgentTabActivationRuntime } from '../orca-runtime-test-scenario-builders.spec' import { trackRunningAgentLaunchPane } from '../../agent-launch/agent-launch-pane-attachment' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../shared/layout-owner-switch' describe('OrcaRuntimeService', () => { diff --git a/src/main/runtime/orca-runtime-tests/mobile-session-tabs-part-09.spec.ts b/src/main/runtime/orca-runtime-tests/mobile-session-tabs-part-09.spec.ts index 630be959571..7f41e34976a 100644 --- a/src/main/runtime/orca-runtime-tests/mobile-session-tabs-part-09.spec.ts +++ b/src/main/runtime/orca-runtime-tests/mobile-session-tabs-part-09.spec.ts @@ -4,9 +4,9 @@ import { OrcaRuntimeService, electronMocks, waitForMobileSessionTabsEvents, - type RuntimeMobileSessionTabsResult, - type WorkspaceSessionState + type RuntimeMobileSessionTabsResult } from '../orca-runtime-test-mocks.spec' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { SleepingAgentSessionRecord } from '../../../shared/agent-session/lifecycle/agent-session-resume' import { HEADLESS_LEAF_ID, diff --git a/src/main/runtime/orca-runtime-tests/mobile-session-tabs-part-11.spec.ts b/src/main/runtime/orca-runtime-tests/mobile-session-tabs-part-11.spec.ts index ab7f9780073..fcaa12828b0 100644 --- a/src/main/runtime/orca-runtime-tests/mobile-session-tabs-part-11.spec.ts +++ b/src/main/runtime/orca-runtime-tests/mobile-session-tabs-part-11.spec.ts @@ -2,7 +2,7 @@ import { describe, expect, it, vi } from 'vitest' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../shared/layout-owner-switch' import { committingSpawn, registerLivePty } from '../bind-first-pane.test-fixture' import { OrcaRuntimeService } from '../orca-runtime-test-mocks.spec' -import type { WorkspaceSessionState } from '../orca-runtime-test-mocks.spec' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { HEADLESS_LEAF_ID, HEADLESS_SECOND_LEAF_ID, diff --git a/src/main/runtime/orca-runtime-tests/mobile-session-tabs-part-14.spec.ts b/src/main/runtime/orca-runtime-tests/mobile-session-tabs-part-14.spec.ts index f02ddc86ca4..9f2cf2f77f3 100644 --- a/src/main/runtime/orca-runtime-tests/mobile-session-tabs-part-14.spec.ts +++ b/src/main/runtime/orca-runtime-tests/mobile-session-tabs-part-14.spec.ts @@ -8,7 +8,7 @@ import { makeRuntimeStoreWithWorkspaceSession } from '../orca-runtime-test-fixtures.spec' import { getDefaultWorkspaceSession } from '../../../shared/constants' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' const README = `${TEST_WORKTREE_PATH}/README.md` diff --git a/src/main/runtime/orca-runtime-tests/mobile-session-tabs-split-agent-tab.spec.ts b/src/main/runtime/orca-runtime-tests/mobile-session-tabs-split-agent-tab.spec.ts index da7d416ba71..011dfebb312 100644 --- a/src/main/runtime/orca-runtime-tests/mobile-session-tabs-split-agent-tab.spec.ts +++ b/src/main/runtime/orca-runtime-tests/mobile-session-tabs-split-agent-tab.spec.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from 'vitest' import { OrcaRuntimeService } from '../orca-runtime-test-mocks.spec' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { HEADLESS_LEAF_ID, HEADLESS_SECOND_LEAF_ID, diff --git a/src/main/runtime/orca-runtime-tests/terminal-creation-and-readiness-part-05.spec.ts b/src/main/runtime/orca-runtime-tests/terminal-creation-and-readiness-part-05.spec.ts index d6f0f89552c..a8d9bde8df0 100644 --- a/src/main/runtime/orca-runtime-tests/terminal-creation-and-readiness-part-05.spec.ts +++ b/src/main/runtime/orca-runtime-tests/terminal-creation-and-readiness-part-05.spec.ts @@ -26,7 +26,7 @@ import { store } from '../orca-runtime-test-fixtures.spec' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../shared/layout-owner-switch' -import { collectLeafIds } from '../../../shared/terminal-pane-layout-tree' +import { collectLeafIds } from '../../../shared/workspace-layout/terminal-pane-layout-tree' describe('OrcaRuntimeService', () => { it.runIf(ORCA_LAYOUT_OWNER_IS_MAIN)( diff --git a/src/main/runtime/orca-runtime-tests/terminal-handles-and-agent-status-part-03.spec.ts b/src/main/runtime/orca-runtime-tests/terminal-handles-and-agent-status-part-03.spec.ts index 4792c106623..1ea80d3f32c 100644 --- a/src/main/runtime/orca-runtime-tests/terminal-handles-and-agent-status-part-03.spec.ts +++ b/src/main/runtime/orca-runtime-tests/terminal-handles-and-agent-status-part-03.spec.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from 'vitest' import { OrcaRuntimeService, electronMocks } from '../orca-runtime-test-mocks.spec' -import type { TerminalLayoutSnapshot } from '../orca-runtime-test-mocks.spec' +import type { TerminalLayoutSnapshot } from '../../../shared/workspace-layout/terminal-tab-types' import { TEST_WORKTREE_ID, TEST_WORKTREE_PATH, diff --git a/src/main/runtime/orca-runtime-tests/terminal-output-and-worker-recovery-part-02.spec.ts b/src/main/runtime/orca-runtime-tests/terminal-output-and-worker-recovery-part-02.spec.ts index c69bf570dfb..70ed8cb272b 100644 --- a/src/main/runtime/orca-runtime-tests/terminal-output-and-worker-recovery-part-02.spec.ts +++ b/src/main/runtime/orca-runtime-tests/terminal-output-and-worker-recovery-part-02.spec.ts @@ -7,7 +7,7 @@ import { getDefaultWorkspaceSession, makePaneKey } from '../orca-runtime-test-mocks.spec' -import type { WorkspaceSessionState } from '../orca-runtime-test-mocks.spec' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { HEADLESS_LEAF_ID, HEADLESS_SECOND_LEAF_ID, diff --git a/src/main/runtime/orca-runtime-tests/terminal-output-and-worker-recovery-part-03.spec.ts b/src/main/runtime/orca-runtime-tests/terminal-output-and-worker-recovery-part-03.spec.ts index d3fd663a60f..bcacd63b06e 100644 --- a/src/main/runtime/orca-runtime-tests/terminal-output-and-worker-recovery-part-03.spec.ts +++ b/src/main/runtime/orca-runtime-tests/terminal-output-and-worker-recovery-part-03.spec.ts @@ -3,7 +3,7 @@ import { withDurableRuntimeStore } from '../runtime-durable-store-fixture' import { describe, expect, it, vi } from 'vitest' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../shared/layout-owner-switch' import { OrcaRuntimeService, getDefaultWorkspaceSession } from '../orca-runtime-test-mocks.spec' -import type { WorkspaceSessionState } from '../orca-runtime-test-mocks.spec' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { HEADLESS_LEAF_ID, HEADLESS_SECOND_LEAF_ID, diff --git a/src/main/runtime/orca-runtime-tests/terminal-output-and-worker-recovery-part-04.spec.ts b/src/main/runtime/orca-runtime-tests/terminal-output-and-worker-recovery-part-04.spec.ts index 83c1ffc7e9d..7565596a471 100644 --- a/src/main/runtime/orca-runtime-tests/terminal-output-and-worker-recovery-part-04.spec.ts +++ b/src/main/runtime/orca-runtime-tests/terminal-output-and-worker-recovery-part-04.spec.ts @@ -7,7 +7,7 @@ import { OrchestrationDb, getDefaultWorkspaceSession } from '../orca-runtime-test-mocks.spec' -import type { WorkspaceSessionState } from '../orca-runtime-test-mocks.spec' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { HEADLESS_LEAF_ID, HEADLESS_SECOND_LEAF_ID, diff --git a/src/main/runtime/orca-runtime-tests/terminal-output-and-worker-recovery-part-05.spec.ts b/src/main/runtime/orca-runtime-tests/terminal-output-and-worker-recovery-part-05.spec.ts index 7c8b92779f4..8453e2b2b7a 100644 --- a/src/main/runtime/orca-runtime-tests/terminal-output-and-worker-recovery-part-05.spec.ts +++ b/src/main/runtime/orca-runtime-tests/terminal-output-and-worker-recovery-part-05.spec.ts @@ -10,7 +10,7 @@ import { tmpdir } from '../orca-runtime-test-mocks.spec' import type { OrchestrationDb } from '../orchestration/db' -import type { WorkspaceSessionState } from '../orca-runtime-test-mocks.spec' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { HEADLESS_LEAF_ID, LIST_PROVIDER_DEADLINE, diff --git a/src/main/runtime/orca-runtime-tests/terminal-output-and-worker-recovery-part-06.spec.ts b/src/main/runtime/orca-runtime-tests/terminal-output-and-worker-recovery-part-06.spec.ts index 19859db558f..b68cdf88450 100644 --- a/src/main/runtime/orca-runtime-tests/terminal-output-and-worker-recovery-part-06.spec.ts +++ b/src/main/runtime/orca-runtime-tests/terminal-output-and-worker-recovery-part-06.spec.ts @@ -6,7 +6,7 @@ import { getDefaultWorkspaceSession, setPlatform } from '../orca-runtime-test-mocks.spec' -import type { WorkspaceSessionState } from '../orca-runtime-test-mocks.spec' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { HEADLESS_LEAF_ID, HEADLESS_SECOND_LEAF_ID, diff --git a/src/main/runtime/orca-runtime-tests/window-authority.spec.ts b/src/main/runtime/orca-runtime-tests/window-authority.spec.ts index 7288d7647c8..4209026ace0 100644 --- a/src/main/runtime/orca-runtime-tests/window-authority.spec.ts +++ b/src/main/runtime/orca-runtime-tests/window-authority.spec.ts @@ -6,7 +6,7 @@ import { RUNTIME_GRAPH_RELOAD_TIMEOUT_MS, electronMocks } from '../orca-runtime-test-mocks.spec' -import type { WorkspaceSessionState } from '../orca-runtime-test-mocks.spec' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { HEADLESS_LEAF_ID, TEST_WINDOW_ID, diff --git a/src/main/runtime/orca-runtime-tests/worktree-ps-agent-wait.spec.ts b/src/main/runtime/orca-runtime-tests/worktree-ps-agent-wait.spec.ts index 885df67a77d..39f9dc6c246 100644 --- a/src/main/runtime/orca-runtime-tests/worktree-ps-agent-wait.spec.ts +++ b/src/main/runtime/orca-runtime-tests/worktree-ps-agent-wait.spec.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { OrcaRuntimeService } from '../orca-runtime-test-mocks.spec' import { TEST_WORKTREE_ID, TEST_WORKTREE_PATH, store } from '../orca-runtime-test-fixtures.spec' import { AgentHookServer, _internals } from '../../agent-hooks/server' diff --git a/src/main/runtime/orca-runtime-tests/worktree-setup-and-startup-part-04.spec.ts b/src/main/runtime/orca-runtime-tests/worktree-setup-and-startup-part-04.spec.ts index c8466ce846c..97ce7a867fb 100644 --- a/src/main/runtime/orca-runtime-tests/worktree-setup-and-startup-part-04.spec.ts +++ b/src/main/runtime/orca-runtime-tests/worktree-setup-and-startup-part-04.spec.ts @@ -13,9 +13,10 @@ import { ensurePathWithinWorkspaceMock, getEffectiveHooks, listWorktrees, - shouldRunSetupForCreate + shouldRunSetupForCreate, + type WorktreeMeta } from '../orca-runtime-test-mocks.spec' -import type { WorktreeMeta } from '../orca-runtime-test-mocks.spec' + import { TEST_REPO_ID, makeWorktreeMeta, @@ -25,7 +26,7 @@ import { } from '../orca-runtime-test-fixtures.spec' import type { HostWorktreeTarget } from '../../../shared/worktree/host-qualified-identity' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../shared/layout-owner-switch' -import { collectLeafIds } from '../../../shared/terminal-pane-layout-tree' +import { collectLeafIds } from '../../../shared/workspace-layout/terminal-pane-layout-tree' import { ProvisioningRuntime } from '../orca-runtime-layout-owner-start-fixture' describe('OrcaRuntimeService', () => { diff --git a/src/main/runtime/orca-runtime-tests/worktree-setup-single-creator.spec.ts b/src/main/runtime/orca-runtime-tests/worktree-setup-single-creator.spec.ts index bf6926cbec8..580684a620c 100644 --- a/src/main/runtime/orca-runtime-tests/worktree-setup-single-creator.spec.ts +++ b/src/main/runtime/orca-runtime-tests/worktree-setup-single-creator.spec.ts @@ -12,9 +12,9 @@ import { } from '../orca-runtime-test-mocks.spec' import { makeRuntimeStoreWithWorkspaceSession, store } from '../orca-runtime-test-fixtures.spec' import { getDefaultWorkspaceSession } from '../../../shared/constants' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../shared/layout-owner-switch' -import { collectLeafIds } from '../../../shared/terminal-pane-layout-tree' +import { collectLeafIds } from '../../../shared/workspace-layout/terminal-pane-layout-tree' import { ProvisioningRuntime } from '../orca-runtime-layout-owner-start-fixture' const WORKTREE_PATH = '/tmp/workspaces/runtime-setup-all' diff --git a/src/main/runtime/orchestration-mailbox-cold-park-idle.spec.ts b/src/main/runtime/orchestration-mailbox-cold-park-idle.spec.ts index 2b8c8e758d6..e43f540f199 100644 --- a/src/main/runtime/orchestration-mailbox-cold-park-idle.spec.ts +++ b/src/main/runtime/orchestration-mailbox-cold-park-idle.spec.ts @@ -1,6 +1,6 @@ import { rmSync } from 'node:fs' import { stubWriteSettlement } from '../providers/settled-pty-write-stub' -import type { WriteSettlement } from '../../shared/pty-write-settlement' +import type { WriteSettlement } from '../../shared/terminal/pty/lifecycle/pty-write-settlement' import { afterEach, describe, expect, it, vi } from 'vitest' import { checkBoundMailbox, diff --git a/src/main/runtime/orchestration-mailbox-transport-settlement.spec.ts b/src/main/runtime/orchestration-mailbox-transport-settlement.spec.ts index c4ee165475f..56852898800 100644 --- a/src/main/runtime/orchestration-mailbox-transport-settlement.spec.ts +++ b/src/main/runtime/orchestration-mailbox-transport-settlement.spec.ts @@ -4,7 +4,7 @@ import { writeRefused, writeUnverifiable, type WriteSettlement -} from '../../shared/pty-write-settlement' +} from '../../shared/terminal/pty/lifecycle/pty-write-settlement' import { afterEach, describe, expect, it, vi } from 'vitest' import { createBoundRun, diff --git a/src/main/runtime/orchestration/codex-reconnect-failed-dispatch.test.ts b/src/main/runtime/orchestration/codex-reconnect-failed-dispatch.test.ts index 66714739887..f4c211ad0ee 100644 --- a/src/main/runtime/orchestration/codex-reconnect-failed-dispatch.test.ts +++ b/src/main/runtime/orchestration/codex-reconnect-failed-dispatch.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import type { TuiAgent } from '../../../shared/agent-launch/catalog/tui-agent' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { createTranscriptPane, TRANSCRIPT_PANE_PTY_ID } from '../agent-transcript-pane-test-harness' import { OrchestrationDb } from './db' diff --git a/src/main/runtime/orchestration/crew/crew-follow-up-authority-inputs.ts b/src/main/runtime/orchestration/crew/crew-follow-up-authority-inputs.ts index 027583b797f..3ee34bbf7ee 100644 --- a/src/main/runtime/orchestration/crew/crew-follow-up-authority-inputs.ts +++ b/src/main/runtime/orchestration/crew/crew-follow-up-authority-inputs.ts @@ -2,7 +2,7 @@ import { z } from 'zod' import type { OrchestrationDb } from '../db' import type { DispatchCreator } from '../db/dispatch-depth' import { createDispatchCreatorEvaluation } from '../db/dispatch-creator-evaluation' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { DISPATCH_PANE_KEY_MATCH_SUFFIX_SQL, REMOTE_ATTACHMENT_PANE_KEY_MATCH_SUFFIX_SQL, diff --git a/src/main/runtime/orchestration/crew/crew-parent-inputs.ts b/src/main/runtime/orchestration/crew/crew-parent-inputs.ts index 02c78dff1dc..ce82a89c9d8 100644 --- a/src/main/runtime/orchestration/crew/crew-parent-inputs.ts +++ b/src/main/runtime/orchestration/crew/crew-parent-inputs.ts @@ -2,7 +2,7 @@ import { z } from 'zod' import { readCrewAssignmentIds } from './crew-query' import type { OrchestrationDb } from '../db' import { currentRunCoordinatorOrcaSessionIdSql } from '../db/runs/run-coordinator-orca-session' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { potentiallyLiveRemoteAttachmentSql } from '../db/federation/remote-attachment-liveness' import { DISPATCH_PANE_KEY_MATCH_SUFFIX_SQL, diff --git a/src/main/runtime/orchestration/crew/crew-recipient-inputs.ts b/src/main/runtime/orchestration/crew/crew-recipient-inputs.ts index eeda7c39207..266f8d104d0 100644 --- a/src/main/runtime/orchestration/crew/crew-recipient-inputs.ts +++ b/src/main/runtime/orchestration/crew/crew-recipient-inputs.ts @@ -6,7 +6,7 @@ import { type DispatchInput } from './crew-recipient-owner-queries' import type { OrcaSessionId } from '../../../../shared/orca-session-address' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import type { OrchestrationDb } from '../db' import { createLineageRunningSessionResolver, diff --git a/src/main/runtime/orchestration/crew/crew-source-inputs.ts b/src/main/runtime/orchestration/crew/crew-source-inputs.ts index 36a37376176..8a52a140d3e 100644 --- a/src/main/runtime/orchestration/crew/crew-source-inputs.ts +++ b/src/main/runtime/orchestration/crew/crew-source-inputs.ts @@ -15,7 +15,7 @@ import { import type { OrchestrationCoordinatorKey } from '../orchestration-caller-identity' import { exposeUtcTimestamp } from '../db/utc-timestamp' import { AGENT_STATUS_STALE_AFTER_MS } from '../../../../shared/agent-status/contracts/agent-status-freshness' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { paneKeyMatchSuffix } from '../db/pane-key-match' type ProvenanceRow = Pick diff --git a/src/main/runtime/orchestration/crew/crew-workspace-names.ts b/src/main/runtime/orchestration/crew/crew-workspace-names.ts index 5fb78bdab12..531cf2612de 100644 --- a/src/main/runtime/orchestration/crew/crew-workspace-names.ts +++ b/src/main/runtime/orchestration/crew/crew-workspace-names.ts @@ -1,5 +1,5 @@ import { chatNameInputs, layoutNameInputs, terminalNameInputs } from '../orchestration-sender-name' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' /** Excludes scrollback, focus, bells and other session bookkeeping from name invalidation. */ export function crewWorkspaceNames(session: WorkspaceSessionState | null | undefined) { diff --git a/src/main/runtime/orchestration/db.ts b/src/main/runtime/orchestration/db.ts index 4af72ff07e5..5a7365ba837 100644 --- a/src/main/runtime/orchestration/db.ts +++ b/src/main/runtime/orchestration/db.ts @@ -13,7 +13,6 @@ export type { AttemptArtifactGitEvidence, AttemptCoordinatorAcknowledgment, AttemptFreshness, - AttemptLivenessObservation, AttemptObservationFact, AttemptObservationFactInput, AttemptOutcomeProjection, diff --git a/src/main/runtime/orchestration/db/attempt-observation-types.ts b/src/main/runtime/orchestration/db/attempt-observation-types.ts index e84fd697619..96a28f5fd42 100644 --- a/src/main/runtime/orchestration/db/attempt-observation-types.ts +++ b/src/main/runtime/orchestration/db/attempt-observation-types.ts @@ -36,8 +36,6 @@ export type AttemptCoordinatorAcknowledgment = { reportId?: string } -export type AttemptLivenessObservation = PtyLivenessVerdict - export type AttemptAdditiveOutcomeFact = { outcome: 'outcome_unknown' | 'finished_unverified' reason: string @@ -106,4 +104,5 @@ export type AttemptOutcomeProjection = { coordinatorAcknowledgment: AttemptCoordinatorAcknowledgment | null liveness: AttemptLivenessObservation & { freshness: AttemptFreshness } } -import type { PtyLivenessVerdict } from '../../../../shared/pty-liveness-verdict' + +import type { PtyLivenessVerdict as AttemptLivenessObservation } from '../../../../shared/terminal/pty/lifecycle/pty-liveness-verdict' diff --git a/src/main/runtime/orchestration/db/attempt-outcome-projection.ts b/src/main/runtime/orchestration/db/attempt-outcome-projection.ts index 787c616dd92..67281fe1408 100644 --- a/src/main/runtime/orchestration/db/attempt-outcome-projection.ts +++ b/src/main/runtime/orchestration/db/attempt-outcome-projection.ts @@ -1,12 +1,12 @@ import type { AttemptFreshness, - AttemptLivenessObservation, AttemptObservationFact, AttemptObservationFacet, AttemptOutcomeProjection, AttemptProjectedOutcome, AttemptWorkerReport } from './attempt-observation-types' +import type { PtyLivenessVerdict as AttemptLivenessObservation } from '../../../../shared/terminal/pty/lifecycle/pty-liveness-verdict' const DEFAULT_FRESH_AFTER_MS = 60_000 const FUTURE_TOLERANCE_MS = 5_000 diff --git a/src/main/runtime/orchestration/db/dispatch-context/dispatch-context-store.ts b/src/main/runtime/orchestration/db/dispatch-context/dispatch-context-store.ts index ef34cbf0c66..df2440e4d14 100644 --- a/src/main/runtime/orchestration/db/dispatch-context/dispatch-context-store.ts +++ b/src/main/runtime/orchestration/db/dispatch-context/dispatch-context-store.ts @@ -1,6 +1,6 @@ import type { DispatchContextRow } from '../../types' import { OrchestrationError } from '../../orchestration-error' -import { parsePaneKey } from '../../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../../shared/workspace-layout/stable-pane-id' import { CURRENT_CONTRACT_VERSION } from '../contract-constants' import { generateId } from '../generated-id' import { paneKeyMatchSuffix } from '../pane-key-match' diff --git a/src/main/runtime/orchestration/db/dispatch-context/dispatch-lookup.ts b/src/main/runtime/orchestration/db/dispatch-context/dispatch-lookup.ts index 30f6f42e6c6..75e55e731f3 100644 --- a/src/main/runtime/orchestration/db/dispatch-context/dispatch-lookup.ts +++ b/src/main/runtime/orchestration/db/dispatch-context/dispatch-lookup.ts @@ -1,5 +1,5 @@ import { AGENT_STATUS_STALE_AFTER_MS } from '../../../../../shared/agent-status/contracts/agent-status-freshness' -import { parsePaneKey } from '../../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../../shared/workspace-layout/stable-pane-id' import type { DispatchContextRow } from '../../types' import { DISPATCH_PANE_KEY_MATCH_SUFFIX_SQL, diff --git a/src/main/runtime/orchestration/db/dispatch-mailbox-selection.ts b/src/main/runtime/orchestration/db/dispatch-mailbox-selection.ts index d8a7d16d179..d76011a1ca6 100644 --- a/src/main/runtime/orchestration/db/dispatch-mailbox-selection.ts +++ b/src/main/runtime/orchestration/db/dispatch-mailbox-selection.ts @@ -1,4 +1,4 @@ -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { isEquivalentPaneKey } from './pane-key-match' export function activeDispatchMailboxBranch( diff --git a/src/main/runtime/orchestration/db/federation/remote-dispatch-attachment-stop.ts b/src/main/runtime/orchestration/db/federation/remote-dispatch-attachment-stop.ts index db7143b60e4..a39cc00febd 100644 --- a/src/main/runtime/orchestration/db/federation/remote-dispatch-attachment-stop.ts +++ b/src/main/runtime/orchestration/db/federation/remote-dispatch-attachment-stop.ts @@ -1,4 +1,4 @@ -import { parsePaneKey } from '../../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../../shared/workspace-layout/stable-pane-id' import type { RemoteDispatchAttachmentRow } from '../../types' import { OrchestrationError } from '../../orchestration-error' import { paneKeyMatchSuffix, REMOTE_ATTACHMENT_PANE_KEY_MATCH_SUFFIX_SQL } from '../pane-key-match' diff --git a/src/main/runtime/orchestration/db/messages/foreign-direct-mailbox-routing.ts b/src/main/runtime/orchestration/db/messages/foreign-direct-mailbox-routing.ts index 2414381a113..35a8395cc80 100644 --- a/src/main/runtime/orchestration/db/messages/foreign-direct-mailbox-routing.ts +++ b/src/main/runtime/orchestration/db/messages/foreign-direct-mailbox-routing.ts @@ -1,4 +1,4 @@ -import { parsePaneKey } from '../../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../../shared/workspace-layout/stable-pane-id' import type { DispatchContextRow, MessageType } from '../../types' import { DISPATCH_PANE_KEY_MATCH_SUFFIX_SQL, paneKeyMatchSuffix } from '../pane-key-match' import type { OrchestrationDb } from '../orchestration-db' diff --git a/src/main/runtime/orchestration/db/pane-key-match.ts b/src/main/runtime/orchestration/db/pane-key-match.ts index e6a05b57463..be45b6a3921 100644 --- a/src/main/runtime/orchestration/db/pane-key-match.ts +++ b/src/main/runtime/orchestration/db/pane-key-match.ts @@ -1,4 +1,4 @@ -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' // Leaf UUIDs survive pane break-out; exact match also supports legacy/unparseable keys. export function isEquivalentPaneKey(a: string, b: string): boolean { diff --git a/src/main/runtime/orchestration/db/worker-terminal/worker-terminal-attention-query.ts b/src/main/runtime/orchestration/db/worker-terminal/worker-terminal-attention-query.ts index 598db23d0d1..25953087068 100644 --- a/src/main/runtime/orchestration/db/worker-terminal/worker-terminal-attention-query.ts +++ b/src/main/runtime/orchestration/db/worker-terminal/worker-terminal-attention-query.ts @@ -6,7 +6,7 @@ import { } from '../attempt-observation-store' import type { AttemptProjectedOutcome } from '../attempt-observation-types' import type { DispatchStatus, WorkerDispatchState } from '../../types' -import type { TerminalExitCause } from '../../../../../shared/terminal-exit-cause' +import type { TerminalExitCause } from '../../../../../shared/terminal/pty/lifecycle/terminal-exit-cause' import type { OrchestrationDb } from '../orchestration-db' import { ATTEMPT_OBSERVATION_FACT_COLUMN_LIST } from '../row-column-lists' diff --git a/src/main/runtime/orchestration/db/worker-terminal/worker-terminal-listing.ts b/src/main/runtime/orchestration/db/worker-terminal/worker-terminal-listing.ts index ea484a9df58..ff1c6730df9 100644 --- a/src/main/runtime/orchestration/db/worker-terminal/worker-terminal-listing.ts +++ b/src/main/runtime/orchestration/db/worker-terminal/worker-terminal-listing.ts @@ -1,11 +1,12 @@ import type { DispatchStatus } from '../../types' -import type { TerminalExitCause } from '../../../../../shared/terminal-exit-cause' -import { deriveWorkerTerminalListState } from '../../worker-terminal-ownership' -import type { - WorkerDispatchListState, - WorkerTerminalResourceRow, - WorkerTerminalListState +import type { TerminalExitCause } from '../../../../../shared/terminal/pty/lifecycle/terminal-exit-cause' +import { + deriveWorkerTerminalListState, + type WorkerDispatchListState, + type WorkerTerminalResourceRow, + type WorkerTerminalListState } from '../../worker-terminal-ownership' + import { OrchestrationError } from '../../orchestration-error' import type { OrchestrationDb } from '../orchestration-db' import { diff --git a/src/main/runtime/orchestration/lifecycle-reconciliation.ts b/src/main/runtime/orchestration/lifecycle-reconciliation.ts index f8190c2884e..6da0facd47c 100644 --- a/src/main/runtime/orchestration/lifecycle-reconciliation.ts +++ b/src/main/runtime/orchestration/lifecycle-reconciliation.ts @@ -1,7 +1,7 @@ import type { OrchestrationDb } from './db' import type { MessageRow, WorkerReportOutcome } from './types' import { workerReportObservation } from './worker-report-observation' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' // Pane break-out changes tab ids; unparseable legacy keys support exact equality only. function isSamePane(assigneePaneKey: string, senderPaneKey: string): boolean { diff --git a/src/main/runtime/orchestration/lightweight-run-worker-exit-escalation.test.ts b/src/main/runtime/orchestration/lightweight-run-worker-exit-escalation.test.ts index d340ce4c6d7..bfa863a46f8 100644 --- a/src/main/runtime/orchestration/lightweight-run-worker-exit-escalation.test.ts +++ b/src/main/runtime/orchestration/lightweight-run-worker-exit-escalation.test.ts @@ -2,9 +2,9 @@ import { describe, expect, it, vi } from 'vitest' import { OrcaRuntimeService } from '../orca-runtime' import { LEGACY_RUN_ID, OrchestrationDb } from './db' import { DISPATCH_CIRCUIT_BREAK_FAILURES } from './db/dispatch-context/dispatch-circuit-breaker' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { getDefaultWorkspaceSession } from '../../../shared/constants' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { createRootDispatch } from './db/root-dispatch-test-fixture' import { MessageWake } from '../runtime-message-waiters' diff --git a/src/main/runtime/orchestration/mailbox-pointer-delivery-contract.ts b/src/main/runtime/orchestration/mailbox-pointer-delivery-contract.ts index e188f1b60b7..916be4c21e8 100644 --- a/src/main/runtime/orchestration/mailbox-pointer-delivery-contract.ts +++ b/src/main/runtime/orchestration/mailbox-pointer-delivery-contract.ts @@ -4,7 +4,7 @@ import type { OrchestrationMessageWaiter } from './mailbox-pointer-eligibility' import type { OrchestrationMailboxOwner, OrchestrationMailboxTerminal } from './mailbox-owner' import type { OrchestrationMailboxPointerSubmitTarget } from './mailbox-pointer-submit' import type { OrchestrationCliCommand } from './cli-command' -import type { WriteSettlement } from '../../../shared/pty-write-settlement' +import type { WriteSettlement } from '../../../shared/terminal/pty/lifecycle/pty-write-settlement' export type OrchestrationMailboxPointerMessage = { id: string diff --git a/src/main/runtime/orchestration/mailbox-pointer-pty-write.ts b/src/main/runtime/orchestration/mailbox-pointer-pty-write.ts index a4bd080b70a..55ae8170127 100644 --- a/src/main/runtime/orchestration/mailbox-pointer-pty-write.ts +++ b/src/main/runtime/orchestration/mailbox-pointer-pty-write.ts @@ -3,7 +3,7 @@ import { writeRefused, writeUnverifiable, type WriteSettlement -} from '../../../shared/pty-write-settlement' +} from '../../../shared/terminal/pty/lifecycle/pty-write-settlement' export type OrchestrationPointerWriteArgs = { ptyId: string diff --git a/src/main/runtime/orchestration/mailbox-pointer-stage.test.ts b/src/main/runtime/orchestration/mailbox-pointer-stage.test.ts index 23d4fe37951..3283c159138 100644 --- a/src/main/runtime/orchestration/mailbox-pointer-stage.test.ts +++ b/src/main/runtime/orchestration/mailbox-pointer-stage.test.ts @@ -7,7 +7,7 @@ import { WRITE_ACCEPTED, writeRefused, type WriteSettlement -} from '../../../shared/pty-write-settlement' +} from '../../../shared/terminal/pty/lifecycle/pty-write-settlement' const TERMINAL = { ptyId: 'pty-1', diff --git a/src/main/runtime/orchestration/mailbox-pointer-stage.ts b/src/main/runtime/orchestration/mailbox-pointer-stage.ts index ee1a7d18185..654c2fdf6d8 100644 --- a/src/main/runtime/orchestration/mailbox-pointer-stage.ts +++ b/src/main/runtime/orchestration/mailbox-pointer-stage.ts @@ -12,9 +12,15 @@ import type { OrchestrationMailboxDeliveryFlight, OrchestrationMailboxPointerState } from './mailbox-pointer-state' -import { submitOrchestrationMailboxPointer } from './mailbox-pointer-submit' -import type { OrchestrationMailboxPointerSubmitTarget } from './mailbox-pointer-submit' -import { isSettledWrite, type WriteSettlement } from '../../../shared/pty-write-settlement' +import { + submitOrchestrationMailboxPointer, + type OrchestrationMailboxPointerSubmitTarget +} from './mailbox-pointer-submit' + +import { + isSettledWrite, + type WriteSettlement +} from '../../../shared/terminal/pty/lifecycle/pty-write-settlement' type StagePointerArgs = { deps: PointerDeliveryDependencies diff --git a/src/main/runtime/orchestration/mailbox-pointer-submit.test.ts b/src/main/runtime/orchestration/mailbox-pointer-submit.test.ts index 73a40039784..587329cca7f 100644 --- a/src/main/runtime/orchestration/mailbox-pointer-submit.test.ts +++ b/src/main/runtime/orchestration/mailbox-pointer-submit.test.ts @@ -9,7 +9,7 @@ import { resumePendingOrchestrationMailboxPointer } from './mailbox-pointer-resu import { OrchestrationMailboxPointerState } from './mailbox-pointer-state' import { submitOrchestrationMailboxPointer } from './mailbox-pointer-submit' import { settledWriteStub, stubWriteSettlement } from '../../providers/settled-pty-write-stub' -import type { WriteSettlement } from '../../../shared/pty-write-settlement' +import type { WriteSettlement } from '../../../shared/terminal/pty/lifecycle/pty-write-settlement' describe('orchestration mailbox pointer submit', () => { it('does not settle a replacement reservation after an old Enter write resolves', async () => { diff --git a/src/main/runtime/orchestration/mailbox-pointer-submit.ts b/src/main/runtime/orchestration/mailbox-pointer-submit.ts index f11a28dd2f6..51b14e13e59 100644 --- a/src/main/runtime/orchestration/mailbox-pointer-submit.ts +++ b/src/main/runtime/orchestration/mailbox-pointer-submit.ts @@ -12,7 +12,7 @@ import type { OrchestrationMailboxDeliveryFlight, OrchestrationMailboxPointerState } from './mailbox-pointer-state' -import type { WriteSettlement } from '../../../shared/pty-write-settlement' +import type { WriteSettlement } from '../../../shared/terminal/pty/lifecycle/pty-write-settlement' type PointerSubmitDependencies = { mailboxOwner: OrchestrationMailboxOwner diff --git a/src/main/runtime/orchestration/mailbox-terminal-identity.ts b/src/main/runtime/orchestration/mailbox-terminal-identity.ts index 414df9238e5..f56443299bd 100644 --- a/src/main/runtime/orchestration/mailbox-terminal-identity.ts +++ b/src/main/runtime/orchestration/mailbox-terminal-identity.ts @@ -1,7 +1,7 @@ import { OrcaRuntimeWithGetPtyRecordForPaneKey } from './terminal-pane-mail-routing' import type { OrchestrationMailboxTerminal } from './mailbox-owner' import type { RuntimePtyWorktreeRecord } from '../runtime-terminal-state-records' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' /** Which live terminal orchestration types mail into, and the handle it is known by. */ export abstract class OrcaRuntimeWithMailboxTerminalIdentity extends OrcaRuntimeWithGetPtyRecordForPaneKey { diff --git a/src/main/runtime/orchestration/orchestration-legacy-worker-terminal-recovery.ts b/src/main/runtime/orchestration/orchestration-legacy-worker-terminal-recovery.ts index 2b7930e8459..7e916e64e33 100644 --- a/src/main/runtime/orchestration/orchestration-legacy-worker-terminal-recovery.ts +++ b/src/main/runtime/orchestration/orchestration-legacy-worker-terminal-recovery.ts @@ -1,6 +1,9 @@ import { sessionIdFromStructuredWorkerIncarnation } from '../structured-worker-identity' -import { isPtyIncarnationId, type PtyIncarnationId } from '../../../shared/pty-incarnation' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { + isPtyIncarnationId, + type PtyIncarnationId +} from '../../../shared/terminal/pty/lifecycle/pty-incarnation' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import type { LegacyWorkerTerminalRecoveryRow } from './types' import { WORKER_SETTLED_STATES } from './worker-terminal-ownership' diff --git a/src/main/runtime/orchestration/orchestration-sender-name.ts b/src/main/runtime/orchestration/orchestration-sender-name.ts index 969a7aeceee..7911e7cb563 100644 --- a/src/main/runtime/orchestration/orchestration-sender-name.ts +++ b/src/main/runtime/orchestration/orchestration-sender-name.ts @@ -10,7 +10,10 @@ import type { AgentType } from '../../../shared/agent-status/contracts/agent-sta import { formatAgentTypeLabel } from '../../../shared/agent-status/presentation/agent-type-label' import { structuredChatDisplayName } from '../../../shared/structured-chat-row-name' import type { Tab } from '../../../shared/tab-types' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../shared/terminal-tab-types' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../shared/workspace-layout/terminal-tab-types' import type { OrchestrationDb } from './db' import type { DispatchContextRow } from './types' import { lineageLiveSession, type AgentSessionRecordReader } from './structured-session-lineage' diff --git a/src/main/runtime/orchestration/setup-completion-signal.ts b/src/main/runtime/orchestration/setup-completion-signal.ts index 70c59b034a2..8a53a0afedd 100644 --- a/src/main/runtime/orchestration/setup-completion-signal.ts +++ b/src/main/runtime/orchestration/setup-completion-signal.ts @@ -1,4 +1,4 @@ -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { resolveSetupRunnerCommand, type SetupRunnerCommandPlatform, diff --git a/src/main/runtime/orchestration/structured-worker-group-addressing.ts b/src/main/runtime/orchestration/structured-worker-group-addressing.ts index 4b1437b2d95..4fc7c0a48ac 100644 --- a/src/main/runtime/orchestration/structured-worker-group-addressing.ts +++ b/src/main/runtime/orchestration/structured-worker-group-addressing.ts @@ -1,6 +1,6 @@ /** Enumerate structured group recipients separately: terminal.list is a paired-client wire shape with PTY/writability assumptions. */ -import type { TerminalAgent } from '../../../shared/terminal-agent' +import type { TerminalAgent } from '../../../shared/agent-status/identity/terminal-agent' import { holdStructuredWorker, resolveStructuredWorkerAuthority, diff --git a/src/main/runtime/orchestration/terminal-authority/verify-orchestration-compatibility-caller.ts b/src/main/runtime/orchestration/terminal-authority/verify-orchestration-compatibility-caller.ts index 5293a49910f..75b43d1e74d 100644 --- a/src/main/runtime/orchestration/terminal-authority/verify-orchestration-compatibility-caller.ts +++ b/src/main/runtime/orchestration/terminal-authority/verify-orchestration-compatibility-caller.ts @@ -10,7 +10,7 @@ import type { } from '../../runtime-terminal-contracts' import { createHash } from 'node:crypto' import type { RuntimePtyWorktreeRecord } from '../../runtime-terminal-state-records' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' export abstract class OrcaRuntimeWithVerifyOrchestrationCompatibilityCaller extends OrcaRuntimeWithSerializeHeadlessTerminalBuffer { abstract getOrchestrationDispatchAuthority( diff --git a/src/main/runtime/orchestration/terminal-authority/write-orchestration-pointer-pty.ts b/src/main/runtime/orchestration/terminal-authority/write-orchestration-pointer-pty.ts index 6766bcb6e69..a811319f2cf 100644 --- a/src/main/runtime/orchestration/terminal-authority/write-orchestration-pointer-pty.ts +++ b/src/main/runtime/orchestration/terminal-authority/write-orchestration-pointer-pty.ts @@ -2,12 +2,12 @@ import type { TerminalIdentityReadContext } from '../../terminal/query/terminal- import { isRemoteRuntimePtyId } from '../../../../shared/remote-runtime/remote-runtime-pty-id' import { OrcaRuntimeWithRefreshFloatingWorkspacePtyLiveness } from '../../terminal/lifecycle/floating-session-liveness' import { writeOrchestrationPointerWithSettlement } from '../mailbox-pointer-pty-write' -import type { WriteSettlement } from '../../../../shared/pty-write-settlement' +import type { WriteSettlement } from '../../../../shared/terminal/pty/lifecycle/pty-write-settlement' import type { RuntimeLeafRecord } from '../../runtime-terminal-state-records' import type { ExecutionHostId } from '../../../../shared/execution-host' -import { getPtyExecutionHost } from '../../../../shared/terminal-execution-host' +import { getPtyExecutionHost } from '../../../../shared/terminal/pty/lifecycle/terminal-execution-host' import type { TuiAgent } from '../../../../shared/agent-launch/catalog/tui-agent' -import type { TerminalAgent } from '../../../../shared/terminal-agent' +import type { TerminalAgent } from '../../../../shared/agent-status/identity/terminal-agent' import { selectRuntimeHookAgentRowForPane } from '../../runtime-mobile-agent-status-projection' import { isTuiAgent } from '../../../../shared/agent-launch/catalog/tui-agent-config' import { resolvePublishedPaneAgentIdentity } from '../../../../shared/published-pane-agent-identity' @@ -15,7 +15,7 @@ import type { RuntimeTerminalSummary } from '../../../../shared/runtime-types' import type { ResolvedWorktree } from '../../runtime-worktree-path-identity' import { getLatestLeafTitle } from '../../runtime-worktree-status-projection' import { parseAppSshPtyId } from '../../../../shared/ssh-pty-id' -import { isTerminalLeafId, makePaneKey } from '../../../../shared/stable-pane-id' +import { isTerminalLeafId, makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import type { OrchestrationMailboxPointerSubmitTarget } from '../mailbox-pointer-submit' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../../shared/layout-owner-switch' import { startedMainTerminalSurfaces } from '../../terminal/surface/main-terminal-surfaces' diff --git a/src/main/runtime/orchestration/terminal-pane-mail-routing.ts b/src/main/runtime/orchestration/terminal-pane-mail-routing.ts index cd09c8edec0..0355778cc13 100644 --- a/src/main/runtime/orchestration/terminal-pane-mail-routing.ts +++ b/src/main/runtime/orchestration/terminal-pane-mail-routing.ts @@ -5,7 +5,7 @@ import { import type { RuntimeTerminalAgentPresenceOptions } from '../runtime-terminal-agent-presence' import { OrcaRuntimeWithPruneMobileSessionTabGroupLayout } from '../session-lifecycle/projection/prune-mobile-session-tab-group-layout' import type { RuntimePtyWorktreeRecord } from '../runtime-terminal-state-records' -import { isTerminalLeafId, makePaneKey } from '../../../shared/stable-pane-id' +import { isTerminalLeafId, makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { detectAgentStatusFromTitle } from '../../../shared/agent-status/title/agent-title-status' import { isClaudeManagementTitle } from '../../../shared/agent-status/title/agent-title-core' import { @@ -26,7 +26,7 @@ import { type StructuredMailboxCustody } from './structured-session-mail-target' import { exitedChatDispatchesForSession } from './chat-assignee' -import { OPERATOR_CLOSE_EXIT_CAUSE } from '../../../shared/terminal-exit-cause' +import { OPERATOR_CLOSE_EXIT_CAUSE } from '../../../shared/terminal/pty/lifecycle/terminal-exit-cause' import { resolveTerminalIdentityFromProbes } from '../terminal-identity-probe' export abstract class OrcaRuntimeWithGetPtyRecordForPaneKey extends OrcaRuntimeWithPruneMobileSessionTabGroupLayout { diff --git a/src/main/runtime/orchestration/types.ts b/src/main/runtime/orchestration/types.ts index 321aa554091..398c7ab3988 100644 --- a/src/main/runtime/orchestration/types.ts +++ b/src/main/runtime/orchestration/types.ts @@ -1,4 +1,4 @@ -import type { TerminalExitCause } from '../../../shared/terminal-exit-cause' +import type { TerminalExitCause } from '../../../shared/terminal/pty/lifecycle/terminal-exit-cause' import type { OrcaSessionId } from '../../../shared/orca-session-address' export const MESSAGE_TYPES = [ 'status', diff --git a/src/main/runtime/orchestration/worker-turn-stops.test.ts b/src/main/runtime/orchestration/worker-turn-stops.test.ts index edf86793025..5f6957ee852 100644 --- a/src/main/runtime/orchestration/worker-turn-stops.test.ts +++ b/src/main/runtime/orchestration/worker-turn-stops.test.ts @@ -2,7 +2,7 @@ import { describe, expect, it, vi } from 'vitest' import type { AgentPaneChange } from '../../agent-hooks/agent-transition-detector' import type { AgentStatusIpcPayload } from '../../../shared/agent-status/contracts/agent-status-ipc-payload' import type { AgentSessionTurnCompletionEvent } from '../../../shared/agent-session/view/agent-session-turn-completion-wire' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { LOCAL_EXECUTION_HOST_ID } from '../../../shared/execution-host' import { formatOrcaSessionAddress } from '../../../shared/orca-session-address' import { testOrcaSessionId } from '../../../shared/orca-session-address-test-fixture' diff --git a/src/main/runtime/paired-close-retirement-proof-publication-order.spec.ts b/src/main/runtime/paired-close-retirement-proof-publication-order.spec.ts index 7c1558faff5..d671649b7c6 100644 --- a/src/main/runtime/paired-close-retirement-proof-publication-order.spec.ts +++ b/src/main/runtime/paired-close-retirement-proof-publication-order.spec.ts @@ -7,7 +7,7 @@ import type { RuntimeMobileSessionTabsResult, RuntimeMobileSessionTabsSnapshot } from '../../shared/runtime-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { OrcaRuntimeService } from './orca-runtime' export function registerPairedCloseRetirementProofPublicationOrderTests(): void { diff --git a/src/main/runtime/profile-session-store.test-fixture.ts b/src/main/runtime/profile-session-store.test-fixture.ts index c04ec50b265..caad30531da 100644 --- a/src/main/runtime/profile-session-store.test-fixture.ts +++ b/src/main/runtime/profile-session-store.test-fixture.ts @@ -1,5 +1,5 @@ // Model profile sessions by host, including routed layout commands and write notifications. -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { getDefaultWorkspaceSession } from '../../shared/constants' import type { LayoutCommand } from '../../shared/workspace-layout/workspace-layout-command-types' import { resolveHostId } from '../persistence/loading-store/session-host-partitions' diff --git a/src/main/runtime/pty-recorded-surface-topology.ts b/src/main/runtime/pty-recorded-surface-topology.ts index f424a497a03..4fc03d0f8c4 100644 --- a/src/main/runtime/pty-recorded-surface-topology.ts +++ b/src/main/runtime/pty-recorded-surface-topology.ts @@ -1,7 +1,7 @@ import type { TerminalIdentitySource } from './terminal/identity/terminal-identity-source' /** Use graph-sequenced evidence: self-consistency cannot prove attachment, while pending spawns and lost graphs cannot prove detachment (#18191, #7587). */ import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../shared/layout-owner-switch' -import { parsePaneKey } from '../../shared/stable-pane-id' +import { parsePaneKey } from '../../shared/workspace-layout/stable-pane-id' import type { RuntimePtyWorktreeRecord } from './runtime-terminal-state-records' import type { PtyPane } from './terminal/surface/pty-pane-query' diff --git a/src/main/runtime/pty-shell-ownership-mirror.ts b/src/main/runtime/pty-shell-ownership-mirror.ts index 6a78e5dd8a3..b52f5bb0702 100644 --- a/src/main/runtime/pty-shell-ownership-mirror.ts +++ b/src/main/runtime/pty-shell-ownership-mirror.ts @@ -1,5 +1,5 @@ import { TerminalShellLifecycleScanner } from '../daemon/terminal-shell-lifecycle-scanner' -import type { TerminalOwner } from '../../shared/terminal-owner' +import type { TerminalOwner } from '../../shared/terminal/pty/lifecycle/terminal-owner' // Bound serialization latency independently of slow RPC/process inspection; late proof remains generation-fenced. const SETTLE_DEADLINE_MS = 750 diff --git a/src/main/runtime/restored-editor-move-restart.test.ts b/src/main/runtime/restored-editor-move-restart.test.ts index d007c3d703a..53372a810f4 100644 --- a/src/main/runtime/restored-editor-move-restart.test.ts +++ b/src/main/runtime/restored-editor-move-restart.test.ts @@ -5,7 +5,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, describe, expect, it, vi } from 'vitest' import { getDefaultWorkspaceSession } from '../../shared/constants' -import { ownedEditorFileId } from '../../shared/workspace-session-pane-ownership' +import { ownedEditorFileId } from '../../shared/workspace-session/workspace-session-pane-ownership' import type { Store } from '../persistence/loading-store/store' import { WindowSession } from '../persistence/terminal-topology/terminal-topology-window-session-fixture' import { diff --git a/src/main/runtime/restored-pane-hook-store-resume.test.ts b/src/main/runtime/restored-pane-hook-store-resume.test.ts index 3c48a2c64c4..1261c6765ac 100644 --- a/src/main/runtime/restored-pane-hook-store-resume.test.ts +++ b/src/main/runtime/restored-pane-hook-store-resume.test.ts @@ -1,7 +1,7 @@ // verify-15a parity: a host whose daemon restarted resumed nothing and replayed the pane's launch. import { describe, expect, it, vi } from 'vitest' import type { AgentStatusIpcPayload } from '../../shared/agent-status/contracts/agent-status-ipc-payload' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { partialRuntimeStore } from './runtime-store-partial-fixture' // Preserve side-effect order: mocks, lifecycle, fixtures. diff --git a/src/main/runtime/rpc/errors.test.ts b/src/main/runtime/rpc/errors.test.ts index 84bc518ab85..5f225402c54 100644 --- a/src/main/runtime/rpc/errors.test.ts +++ b/src/main/runtime/rpc/errors.test.ts @@ -1,4 +1,4 @@ -import { terminalStartError } from '../../../shared/terminal-start-failure' +import { terminalStartError } from '../../../shared/terminal/pty/lifecycle/terminal-start-failure' import { describe, expect, it } from 'vitest' import { mapRuntimeError } from './errors' import { diff --git a/src/main/runtime/rpc/errors.ts b/src/main/runtime/rpc/errors.ts index 572656ee981..3b33b13fe9b 100644 --- a/src/main/runtime/rpc/errors.ts +++ b/src/main/runtime/rpc/errors.ts @@ -1,4 +1,4 @@ -import { formatTerminalStartFailure } from '../../../shared/terminal-start-failure' +import { formatTerminalStartFailure } from '../../../shared/terminal/pty/lifecycle/terminal-start-failure' // Centralize the runtimeId envelope and error-code contracts that clients use for decisions and display. import { AGENT_LAUNCH_SURFACE_UNAVAILABLE_CODE } from '../../../shared/agent-launch/contracts/agent-launch-surface' import { @@ -11,7 +11,7 @@ import { CONNECTOR_REPLY_ERROR_CODES } from '../../../shared/rpc-contract/connec import { ORCHESTRATION_SESSION_CALLER_ERROR_CODES } from '../../../shared/orchestration-session-caller-codes' import { computerUseErrorRecoveryData } from '../../../shared/computer-use-error-recovery' import { COMPUTER_ERROR_CODES } from '../../../shared/runtime-types' -import { TerminalSplitOutcomeError } from '../../../shared/terminal-split-outcome' +import { TerminalSplitOutcomeError } from '../../../shared/workspace-layout/terminal-split-outcome' import { WslHostWindowsDriveRefusalError } from '../../../shared/wsl-host-windows-drive-refusal' import { wslDistroHoldRpcFailure } from '../../../shared/wsl-distro-stopped-hold' import { LINEAR_ERROR_CODES } from '../../../shared/linear/agent-access' diff --git a/src/main/runtime/rpc/methods/agent-launch-caller-selection.ts b/src/main/runtime/rpc/methods/agent-launch-caller-selection.ts index 03dfccbb879..b071e9ea18f 100644 --- a/src/main/runtime/rpc/methods/agent-launch-caller-selection.ts +++ b/src/main/runtime/rpc/methods/agent-launch-caller-selection.ts @@ -7,7 +7,7 @@ import type { AgentLaunchResult as AgentLaunchPublishedSurface } from '../../../../shared/agent-launch/contracts/agent-launch-intent' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import type { OrcaRuntimeService } from '../../orca-runtime' import type { RpcContext } from '../core' import { clientRendersStructuredAgent } from './structured-agent-session-policy' diff --git a/src/main/runtime/rpc/methods/agent-launch-failure-code.ts b/src/main/runtime/rpc/methods/agent-launch-failure-code.ts index c4f88c6d392..cffa89f9602 100644 --- a/src/main/runtime/rpc/methods/agent-launch-failure-code.ts +++ b/src/main/runtime/rpc/methods/agent-launch-failure-code.ts @@ -1,4 +1,4 @@ -import { formatTerminalStartFailure } from '../../../../shared/terminal-start-failure' +import { formatTerminalStartFailure } from '../../../../shared/terminal/pty/lifecycle/terminal-start-failure' import { RuntimeLineageError, LINEAGE_PARENT_AMBIGUOUS diff --git a/src/main/runtime/rpc/methods/agent-launch-instant-tab.test.ts b/src/main/runtime/rpc/methods/agent-launch-instant-tab.test.ts index 00c2ae09672..7ca5131a30c 100644 --- a/src/main/runtime/rpc/methods/agent-launch-instant-tab.test.ts +++ b/src/main/runtime/rpc/methods/agent-launch-instant-tab.test.ts @@ -18,7 +18,7 @@ import type { AgentLaunchTabPublished, AgentLaunchTabPublishRequest } from '../../../../shared/agent-launch/contracts/agent-launch-tab-publication' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { markAgentLaunchesClosedByUser, resetAgentLaunchPanesForTests, diff --git a/src/main/runtime/rpc/methods/agent-launch-prompt-carry.test.ts b/src/main/runtime/rpc/methods/agent-launch-prompt-carry.test.ts index 5f1cf409e28..85245953679 100644 --- a/src/main/runtime/rpc/methods/agent-launch-prompt-carry.test.ts +++ b/src/main/runtime/rpc/methods/agent-launch-prompt-carry.test.ts @@ -1,7 +1,7 @@ /** The runtime's typed-line carry report decides whether to paste: never duplicate a carried prompt or drop an uncarried one. */ import { describe, expect, it, vi } from 'vitest' -import { formatTerminalStartFailure } from '../../../../shared/terminal-start-failure' +import { formatTerminalStartFailure } from '../../../../shared/terminal/pty/lifecycle/terminal-start-failure' import { CAPABLE_CLIENT, methodNamed, diff --git a/src/main/runtime/rpc/methods/agent-launch-replay.test.ts b/src/main/runtime/rpc/methods/agent-launch-replay.test.ts index 9b919cdbbcc..ed8ff23ddbc 100644 --- a/src/main/runtime/rpc/methods/agent-launch-replay.test.ts +++ b/src/main/runtime/rpc/methods/agent-launch-replay.test.ts @@ -26,7 +26,7 @@ import { readPersistedTestAgentSessionStore } from '../../agent-session/records/agent-session-record-store-test-harness' import type { RpcContext } from '../core' -import { terminalStartError } from '../../../../shared/terminal-start-failure' +import { terminalStartError } from '../../../../shared/terminal/pty/lifecycle/terminal-start-failure' import type { OrcaRuntimeService } from '../../orca-runtime' import { RpcDispatcher } from '../dispatcher' import { diff --git a/src/main/runtime/rpc/methods/agent-launch-tab-publication.ts b/src/main/runtime/rpc/methods/agent-launch-tab-publication.ts index c75de00f0b9..0ffb8c71ac4 100644 --- a/src/main/runtime/rpc/methods/agent-launch-tab-publication.ts +++ b/src/main/runtime/rpc/methods/agent-launch-tab-publication.ts @@ -16,7 +16,7 @@ import { navigationTargetsHost, resolveRuntimeNavigationTarget } from '../../../../shared/runtime-navigation' -import { makePaneKey, parsePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey, parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { workspaceKindForWorktreeId } from '../../../../shared/workspace-launch-kind' import { trackRunningAgentLaunchPane } from '../../../agent-launch/agent-launch-pane-attachment' import type { AgentLaunchPaneVerdict } from '../../../../shared/agent-launch/contracts/agent-launch-pane-verdict' diff --git a/src/main/runtime/rpc/methods/orchestration/federation/federated-worker-release-host.ts b/src/main/runtime/rpc/methods/orchestration/federation/federated-worker-release-host.ts index dd5e966019a..9cc5dac94b3 100644 --- a/src/main/runtime/rpc/methods/orchestration/federation/federated-worker-release-host.ts +++ b/src/main/runtime/rpc/methods/orchestration/federation/federated-worker-release-host.ts @@ -1,4 +1,4 @@ -import { describeUnconfirmedAgentStop } from '../../../../../../shared/pty-liveness-verdict' +import { describeUnconfirmedAgentStop } from '../../../../../../shared/terminal/pty/lifecycle/pty-liveness-verdict' import type { RemoteDispatchAttachmentRow } from '../../../../orchestration/types' import type { WorkerTerminalArchiveRow, diff --git a/src/main/runtime/rpc/methods/orchestration/federation/federation-control.ts b/src/main/runtime/rpc/methods/orchestration/federation/federation-control.ts index 3127b1f8797..332a151e7ca 100644 --- a/src/main/runtime/rpc/methods/orchestration/federation/federation-control.ts +++ b/src/main/runtime/rpc/methods/orchestration/federation/federation-control.ts @@ -6,7 +6,7 @@ import { mapWithConcurrency } from '../../../../../../shared/map-with-concurrenc import { readExactWorkerOutput } from '../worker/worker-output' import { exposeWorkerRetainReceipt } from '../worker/worker-terminal-resource-presentation' import { archiveWorkerOutputBeforeStop } from '../worker/worker-stop-archive' -import { describeUnconfirmedAgentStop } from '../../../../../../shared/pty-liveness-verdict' +import { describeUnconfirmedAgentStop } from '../../../../../../shared/terminal/pty/lifecycle/pty-liveness-verdict' import { inspectRemoteAttachment, observeRemoteAttachmentLiveness, diff --git a/src/main/runtime/rpc/methods/orchestration/federation/federation-launched-agent-readiness.test.ts b/src/main/runtime/rpc/methods/orchestration/federation/federation-launched-agent-readiness.test.ts index 33bf5f033f0..8b30df5011f 100644 --- a/src/main/runtime/rpc/methods/orchestration/federation/federation-launched-agent-readiness.test.ts +++ b/src/main/runtime/rpc/methods/orchestration/federation/federation-launched-agent-readiness.test.ts @@ -1,4 +1,4 @@ -import { terminalExitError } from '../../../../../../shared/terminal-start-failure' +import { terminalExitError } from '../../../../../../shared/terminal/pty/lifecycle/terminal-start-failure' import { afterEach, describe, expect, it, vi } from 'vitest' import { resolveWorkerStartReadinessTimeoutMs } from '../../../../../../shared/orchestration-timing-budgets' import { OrcaRuntimeService } from '../../../../orca-runtime' diff --git a/src/main/runtime/rpc/methods/orchestration/federation/federation-start-receipt.ts b/src/main/runtime/rpc/methods/orchestration/federation/federation-start-receipt.ts index 8e2febf7376..08dcd171da0 100644 --- a/src/main/runtime/rpc/methods/orchestration/federation/federation-start-receipt.ts +++ b/src/main/runtime/rpc/methods/orchestration/federation/federation-start-receipt.ts @@ -1,4 +1,4 @@ -import { formatTerminalStartFailure } from '../../../../../../shared/terminal-start-failure' +import { formatTerminalStartFailure } from '../../../../../../shared/terminal/pty/lifecycle/terminal-start-failure' import type { OrchestrationDb } from '../../../../orchestration/db' import { isFederationEffectUnknown } from './federation-effects' import type { WorkerSetupReceipt } from '../worker/worker-topology' diff --git a/src/main/runtime/rpc/methods/orchestration/worker/worker-archive-read.ts b/src/main/runtime/rpc/methods/orchestration/worker/worker-archive-read.ts index 5f49b5cdedc..bb88ceada65 100644 --- a/src/main/runtime/rpc/methods/orchestration/worker/worker-archive-read.ts +++ b/src/main/runtime/rpc/methods/orchestration/worker/worker-archive-read.ts @@ -2,7 +2,7 @@ import type { OrchestrationWorkerReadResult, OrchestrationWorkerReadSource } from '../../../../../../shared/orchestration-worker-output' -import type { PtyLivenessVerdict } from '../../../../../../shared/pty-liveness-verdict' +import type { PtyLivenessVerdict } from '../../../../../../shared/terminal/pty/lifecycle/pty-liveness-verdict' import type { OrchestrationDb } from '../../../../orchestration/db' import { OrchestrationError } from '../../../../orchestration/orchestration-error' import type { diff --git a/src/main/runtime/rpc/methods/orchestration/worker/worker-release-completion.ts b/src/main/runtime/rpc/methods/orchestration/worker/worker-release-completion.ts index ccd7bb3a58e..f75ec548b95 100644 --- a/src/main/runtime/rpc/methods/orchestration/worker/worker-release-completion.ts +++ b/src/main/runtime/rpc/methods/orchestration/worker/worker-release-completion.ts @@ -7,7 +7,7 @@ import type { } from '../../../../orchestration/worker-terminal-ownership' import { summarizeWorkerOutputArchive } from '../../../../orchestration/worker-output-archive' import type { WorkerTerminalReleaseRuntime } from '../../../../orchestration/worker-terminal-release-runtime' -import { describeUnconfirmedAgentStop } from '../../../../../../shared/pty-liveness-verdict' +import { describeUnconfirmedAgentStop } from '../../../../../../shared/terminal/pty/lifecycle/pty-liveness-verdict' import { inspectWorkerTerminal } from './worker-observation' import { orchestrationTimestampToMs } from './worker-output' import { archiveSummary } from './worker-terminal-resource-presentation' diff --git a/src/main/runtime/rpc/methods/orchestration/worker/worker-release-runtime-incarnation.spec.ts b/src/main/runtime/rpc/methods/orchestration/worker/worker-release-runtime-incarnation.spec.ts index cd6e7aa62db..b54bf70d5ee 100644 --- a/src/main/runtime/rpc/methods/orchestration/worker/worker-release-runtime-incarnation.spec.ts +++ b/src/main/runtime/rpc/methods/orchestration/worker/worker-release-runtime-incarnation.spec.ts @@ -1,7 +1,7 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import { inspectWorkerTerminal } from './worker-observation' import { createOrchestrationWorkerReleaseHarness } from './worker-release.test-support' -import { makePaneKey } from '../../../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../../../shared/workspace-layout/stable-pane-id' import { registerBoundPty } from '../../../../bind-first-pane.test-fixture' export function registerWorkerReleaseRuntimeIncarnationTests(): void { diff --git a/src/main/runtime/rpc/methods/orchestration/worker/worker-start-receipt.ts b/src/main/runtime/rpc/methods/orchestration/worker/worker-start-receipt.ts index 65b8ad66b44..b8e3f73c035 100644 --- a/src/main/runtime/rpc/methods/orchestration/worker/worker-start-receipt.ts +++ b/src/main/runtime/rpc/methods/orchestration/worker/worker-start-receipt.ts @@ -1,4 +1,4 @@ -import { formatTerminalStartFailure } from '../../../../../../shared/terminal-start-failure' +import { formatTerminalStartFailure } from '../../../../../../shared/terminal/pty/lifecycle/terminal-start-failure' import type { OrchestrationDb } from '../../../../orchestration/db' import type { WorkerDispatchRow } from '../../../../orchestration/types' import type { OrcaRuntimeService } from '../../../../orca-runtime' diff --git a/src/main/runtime/rpc/methods/orchestration/worker/worker-stop-exit-race.test.ts b/src/main/runtime/rpc/methods/orchestration/worker/worker-stop-exit-race.test.ts index 79986e5aa62..323820a650b 100644 --- a/src/main/runtime/rpc/methods/orchestration/worker/worker-stop-exit-race.test.ts +++ b/src/main/runtime/rpc/methods/orchestration/worker/worker-stop-exit-race.test.ts @@ -2,7 +2,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { OPERATOR_CLOSE_EXIT_CAUSE, type TerminalExitCause -} from '../../../../../../shared/terminal-exit-cause' +} from '../../../../../../shared/terminal/pty/lifecycle/terminal-exit-cause' import { createOrchestrationWorkerReleaseHarness } from './worker-release.test-support' const h = createOrchestrationWorkerReleaseHarness() diff --git a/src/main/runtime/rpc/methods/orchestration/worker/worker-stop.ts b/src/main/runtime/rpc/methods/orchestration/worker/worker-stop.ts index fd3bd25df8a..5c46c778707 100644 --- a/src/main/runtime/rpc/methods/orchestration/worker/worker-stop.ts +++ b/src/main/runtime/rpc/methods/orchestration/worker/worker-stop.ts @@ -1,6 +1,6 @@ import { OrchestrationError } from '../../../../orchestration/orchestration-error' import { defineMethod } from '../../../core' -import { describeUnconfirmedAgentStop } from '../../../../../../shared/pty-liveness-verdict' +import { describeUnconfirmedAgentStop } from '../../../../../../shared/terminal/pty/lifecycle/pty-liveness-verdict' import { ORCHESTRATION_WORKER_STOP_VERDICT_RUNTIME_CAPABILITY } from '../../../../../../shared/protocol-version' import type { RuntimeStatus } from '../../../../../../shared/runtime-types' import type { OrcaRuntimeService } from '../../../../orca-runtime' diff --git a/src/main/runtime/rpc/methods/session-tabs-retirement-proof-delta.ts b/src/main/runtime/rpc/methods/session-tabs-retirement-proof-delta.ts index e32bfa07609..dda921c4a69 100644 --- a/src/main/runtime/rpc/methods/session-tabs-retirement-proof-delta.ts +++ b/src/main/runtime/rpc/methods/session-tabs-retirement-proof-delta.ts @@ -3,7 +3,7 @@ import { type RuntimeCapability } from '../../../../shared/protocol-version' import type { RuntimeMobileSessionRetiredTerminalSurface } from '../../../../shared/runtime-types' -import { retirementProofKey as proofKey } from '../../../../shared/terminal-retirement-proof-ledger' +import { retirementProofKey as proofKey } from '../../../../shared/workspace-layout/terminal-retirement-proof-ledger' type ProofCarrier = { worktree: string diff --git a/src/main/runtime/rpc/methods/terminal-reveal.test.ts b/src/main/runtime/rpc/methods/terminal-reveal.test.ts index 276793c52d7..111e0834ce3 100644 --- a/src/main/runtime/rpc/methods/terminal-reveal.test.ts +++ b/src/main/runtime/rpc/methods/terminal-reveal.test.ts @@ -1,7 +1,7 @@ import '../unused-default-rpc-methods.test-fixture' import { describe, expect, it, vi } from 'vitest' import type { OrcaRuntimeService } from '../../orca-runtime' -import type { TerminalPaneRevealTarget } from '../../../../shared/terminal-pane-reveal' +import type { TerminalPaneRevealTarget } from '../../../../shared/workspace-layout/terminal-pane-reveal' import type { RpcRequest } from '../core' import { RpcDispatcher } from '../dispatcher' import { TERMINAL_METHODS } from './terminal' diff --git a/src/main/runtime/rpc/methods/terminal/terminal-viewer-colors-method.ts b/src/main/runtime/rpc/methods/terminal/terminal-viewer-colors-method.ts index 4a8b2e93be7..59ccbbfebd0 100644 --- a/src/main/runtime/rpc/methods/terminal/terminal-viewer-colors-method.ts +++ b/src/main/runtime/rpc/methods/terminal/terminal-viewer-colors-method.ts @@ -1,5 +1,5 @@ import { defineMethod } from '../../core' -import { normalizeColorQueryReplyColors } from '../../../../../shared/pty-owner-color-query-colors' +import { normalizeColorQueryReplyColors } from '../../../../../shared/terminal/pty/ingress/pty-owner-color-query-colors' import { setPairedViewAttributes, setPairedViewerColors diff --git a/src/main/runtime/rpc/methods/workspace-layout-apply.test.ts b/src/main/runtime/rpc/methods/workspace-layout-apply.test.ts index 4a2c5aa2445..783c8dd3304 100644 --- a/src/main/runtime/rpc/methods/workspace-layout-apply.test.ts +++ b/src/main/runtime/rpc/methods/workspace-layout-apply.test.ts @@ -1,5 +1,5 @@ import { afterEach, describe, expect, it, vi } from 'vitest' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import type { ExecutionHostId } from '../../../../shared/execution-host' import type { LayoutApplyOutcome } from '../../../../shared/workspace-layout/workspace-layout-command-types' import type { Tab } from '../../../../shared/tab-types' diff --git a/src/main/runtime/rpc/orchestration-legacy-process-identity.ts b/src/main/runtime/rpc/orchestration-legacy-process-identity.ts index 35054c61279..2ebb9f3ecb3 100644 --- a/src/main/runtime/rpc/orchestration-legacy-process-identity.ts +++ b/src/main/runtime/rpc/orchestration-legacy-process-identity.ts @@ -1,4 +1,4 @@ -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { OrchestrationError } from '../orchestration/orchestration-error' export function equivalentLegacyPaneKey( diff --git a/src/main/runtime/rpc/orchestration-mutation-receipt.ts b/src/main/runtime/rpc/orchestration-mutation-receipt.ts index 12dd317a600..2509d0560f8 100644 --- a/src/main/runtime/rpc/orchestration-mutation-receipt.ts +++ b/src/main/runtime/rpc/orchestration-mutation-receipt.ts @@ -1,6 +1,6 @@ import { createHash } from 'node:crypto' import { isTerminalPromptMutation } from '../../../shared/orchestration-rpc-contract' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import type { OrcaRuntimeService } from '../orca-runtime' import type { OrcaSessionId } from '../../../shared/orca-session-address' diff --git a/src/main/runtime/rpc/orchestration-runtime-update-settlement.test.ts b/src/main/runtime/rpc/orchestration-runtime-update-settlement.test.ts index 69acec1ec5b..db232ecc4a4 100644 --- a/src/main/runtime/rpc/orchestration-runtime-update-settlement.test.ts +++ b/src/main/runtime/rpc/orchestration-runtime-update-settlement.test.ts @@ -14,7 +14,7 @@ import { ORCHESTRATION_METHODS } from './methods/orchestration' import { createRootDispatch } from '../orchestration/db/root-dispatch-test-fixture' import type { RuntimeStore } from '../runtime-store-contract' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../shared/layout-owner-switch' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { bindPaneFirst } from '../bind-first-pane.test-fixture' const WORKER_HANDLE = 'term_pre_update_worker' diff --git a/src/main/runtime/rpc/terminal-send-question-answered.test.ts b/src/main/runtime/rpc/terminal-send-question-answered.test.ts index 9e2d66d7c32..3ab4229ff67 100644 --- a/src/main/runtime/rpc/terminal-send-question-answered.test.ts +++ b/src/main/runtime/rpc/terminal-send-question-answered.test.ts @@ -1,7 +1,7 @@ import './unused-default-rpc-methods.test-fixture' import { afterEach, expect, it, vi } from 'vitest' import { AgentHookServer, agentHookServer } from '../../agent-hooks/server' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { RpcDispatcher } from './dispatcher' import { TERMINAL_METHODS } from './methods/terminal' import { stubRuntime } from './terminal-multiplex-test-harness' diff --git a/src/main/runtime/run-terminal-shell-alone.ts b/src/main/runtime/run-terminal-shell-alone.ts index 8e458a4bbc1..e6b55abbcbd 100644 --- a/src/main/runtime/run-terminal-shell-alone.ts +++ b/src/main/runtime/run-terminal-shell-alone.ts @@ -2,8 +2,8 @@ import { confirmShellForegroundProcess } from '../providers/agent-foreground-process' import { getFreshProcessTableSnapshot } from '../../shared/process-table-snapshot-reader' import { getProcessTableIndex } from '../../shared/process-table-index' -import { isShellProcess } from '../../shared/shell-process-detection' -import type { TerminalProcessInspection } from '../../shared/terminal-process-inspection' +import { isShellProcess } from '../../shared/agent-status/process/shell-process-detection' +import type { TerminalProcessInspection } from '../../shared/terminal/pty/lifecycle/terminal-process-inspection' /** POSIX: the PTY's root shell owns the terminal's foreground group and nothing under it is stopped. */ export async function confirmRootShellAloneFromProcessTable(rootPid: number): Promise { diff --git a/src/main/runtime/runtime-agent-orchestration-projection.ts b/src/main/runtime/runtime-agent-orchestration-projection.ts index 9f54b472b7d..fe73be79c98 100644 --- a/src/main/runtime/runtime-agent-orchestration-projection.ts +++ b/src/main/runtime/runtime-agent-orchestration-projection.ts @@ -1,7 +1,7 @@ import type { AgentStatusOrchestrationContext } from '../../shared/agent-status/contracts/agent-status-types' import type { FleetAgentStatusEvidence } from '../../shared/orchestration-fleet-agent-status-evidence' import { creatorFirstParent, crewTaskDisplay } from './orchestration/crew/crew-rules' -import { parsePaneKey } from '../../shared/stable-pane-id' +import { parsePaneKey } from '../../shared/workspace-layout/stable-pane-id' import type { OrchestrationCompatibilityTerminalAuthority } from './runtime-terminal-contracts' import type { RuntimeLeafRecord, RuntimePtyWorktreeRecord } from './runtime-terminal-state-records' import type { OrchestrationDb } from './orchestration/db' diff --git a/src/main/runtime/runtime-agent-sender-associations.ts b/src/main/runtime/runtime-agent-sender-associations.ts index e4663528d18..4069650d4f1 100644 --- a/src/main/runtime/runtime-agent-sender-associations.ts +++ b/src/main/runtime/runtime-agent-sender-associations.ts @@ -4,7 +4,7 @@ import type { AgentSenderRevision } from '../../shared/agent-sender-associations' import { isStructuredWorkerHandle } from '../../shared/structured-worker-handle' -import { parsePaneKey } from '../../shared/stable-pane-id' +import { parsePaneKey } from '../../shared/workspace-layout/stable-pane-id' import type { RuntimeAgentOrchestrationDependencies } from './runtime-agent-orchestration-projection' import { readAgentSenderPrincipals, diff --git a/src/main/runtime/runtime-agent-terminal-startup.ts b/src/main/runtime/runtime-agent-terminal-startup.ts index f375111fb4e..bc7642fbc3a 100644 --- a/src/main/runtime/runtime-agent-terminal-startup.ts +++ b/src/main/runtime/runtime-agent-terminal-startup.ts @@ -21,7 +21,7 @@ import { launchHostProvesAgentInFront, nameLocalTypedLineShell } from './agent-launch-typed-line-shell' -import { resolveTerminalStartupCwd } from '../../shared/terminal-startup-cwd' +import { resolveTerminalStartupCwd } from '../../shared/shell/launch/terminal-startup-cwd' import { resolveAgentStartupPlanInputs } from '../../shared/agent-launch/startup/agent-startup-plan-inputs' import { agentStartedTelemetry } from '../agent-launch/agent-started-telemetry' import { terminalShellOverrideRefusal } from './terminal-shell-override-host-support' diff --git a/src/main/runtime/runtime-desktop-pane-title-forwarding.test.ts b/src/main/runtime/runtime-desktop-pane-title-forwarding.test.ts index 32e5731e76e..b82976ddac0 100644 --- a/src/main/runtime/runtime-desktop-pane-title-forwarding.test.ts +++ b/src/main/runtime/runtime-desktop-pane-title-forwarding.test.ts @@ -17,7 +17,7 @@ import { installStructuredHostStub } from './rpc/methods/structured-agent-session-rpc.test-fixture' import type { RuntimeMobileSessionTabsSnapshot } from '../../shared/runtime-session-contracts' -import type { TerminalPaneLayoutNode } from '../../shared/terminal-tab-types' +import type { TerminalPaneLayoutNode } from '../../shared/workspace-layout/terminal-tab-types' const SPLIT_ROOT: TerminalPaneLayoutNode = { type: 'split', diff --git a/src/main/runtime/runtime-durable-store-fixture.ts b/src/main/runtime/runtime-durable-store-fixture.ts index 26cd7bcdb4e..b925f36a442 100644 --- a/src/main/runtime/runtime-durable-store-fixture.ts +++ b/src/main/runtime/runtime-durable-store-fixture.ts @@ -11,7 +11,7 @@ import type { CommandOf, LayoutRefusalCode } from '../../shared/workspace-layout/workspace-layout-command-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { clearReplacedPaneBinding } from '../persistence/loading-store/replaced-pane-binding' /** Keep runtime fakes on the same reserved, durable-before-ack contract as Store. */ diff --git a/src/main/runtime/runtime-folder-worktree-create.ts b/src/main/runtime/runtime-folder-worktree-create.ts index b6b43d51b24..b0010b4099a 100644 --- a/src/main/runtime/runtime-folder-worktree-create.ts +++ b/src/main/runtime/runtime-folder-worktree-create.ts @@ -1,4 +1,4 @@ -import { formatTerminalStartFailure } from '../../shared/terminal-start-failure' +import { formatTerminalStartFailure } from '../../shared/terminal/pty/lifecycle/terminal-start-failure' import { readableWslDistroHoldText } from '../../shared/wsl-distro-stopped-hold' import { paneIdentity } from './runtime-terminal-pane-identity' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../shared/layout-owner-switch' diff --git a/src/main/runtime/runtime-graph-mirror-capture.test.ts b/src/main/runtime/runtime-graph-mirror-capture.test.ts index 3e740efad01..8fd0daf489c 100644 --- a/src/main/runtime/runtime-graph-mirror-capture.test.ts +++ b/src/main/runtime/runtime-graph-mirror-capture.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest' import { getDefaultWorkspaceSession } from '../../shared/constants' import { pickStoredFields } from '../../shared/workspace-layout/stored-record-fields' -import { titleAfterConfirmedShell } from '../../shared/terminal-pane-title-reset' +import { titleAfterConfirmedShell } from '../../shared/workspace-layout/terminal-pane-title-reset' import { OrcaRuntimeService } from './orca-runtime' import { RUNTIME_LEAF_PTY_FACT_FIELDS } from './runtime-leaf-record-projection' import { diff --git a/src/main/runtime/runtime-layout-apply.ts b/src/main/runtime/runtime-layout-apply.ts index 6a801a35fae..65cd74b719e 100644 --- a/src/main/runtime/runtime-layout-apply.ts +++ b/src/main/runtime/runtime-layout-apply.ts @@ -6,7 +6,7 @@ import type { RenameTabsCommand, UntitledTab } from '../../shared/workspace-layout/workspace-layout-command-types' -import type { TerminalLeafMoveRequest } from '../../shared/terminal-leaf-move' +import type { TerminalLeafMoveRequest } from '../../shared/workspace-layout/terminal-leaf-move' import { renameTabCommandsOf } from '../../shared/workspace-layout/workspace-layout-commands' import { markAgentLaunchesClosedByUser } from '../agent-launch/agent-launch-pane-attachment' import { isWslMoveWorkspaceSessionFrozen } from '../persistence/moving-wsl-projects/wsl-move-scope-guard' diff --git a/src/main/runtime/runtime-leaf-record-projection.test-fixture.ts b/src/main/runtime/runtime-leaf-record-projection.test-fixture.ts index 4de6d048a69..58b1420d488 100644 --- a/src/main/runtime/runtime-leaf-record-projection.test-fixture.ts +++ b/src/main/runtime/runtime-leaf-record-projection.test-fixture.ts @@ -1,7 +1,7 @@ // Capture live/output/title, exited and unbound leaves from syncWindowGraph; then restart an exited PTY, reset an agent title, lose a host and bind an unknown PTY. // runtime-graph-mirror-capture.test.ts replays each stage and pins these records. -import type { PtyLivenessVerdict } from '../../shared/pty-liveness-verdict' +import type { PtyLivenessVerdict } from '../../shared/terminal/pty/lifecycle/pty-liveness-verdict' import type { RuntimeSyncedLeaf, RuntimeSyncedTab } from '../../shared/runtime-types' import type { RuntimeLeafPtyFacts } from './runtime-leaf-record-projection' import type { RuntimeLeafRecord } from './runtime-terminal-state-records' diff --git a/src/main/runtime/runtime-leaf-record-projection.ts b/src/main/runtime/runtime-leaf-record-projection.ts index f743d540109..67f2591a7fe 100644 --- a/src/main/runtime/runtime-leaf-record-projection.ts +++ b/src/main/runtime/runtime-leaf-record-projection.ts @@ -1,7 +1,7 @@ // Join holder layout with PTY registry into mirror-shaped tab/leaf records (census U15). // Write mutations to fact owners—PTY connection/output/tail or title/status tracker—then reproject. -import type { PtyLivenessVerdict } from '../../shared/pty-liveness-verdict' +import type { PtyLivenessVerdict } from '../../shared/terminal/pty/lifecycle/pty-liveness-verdict' import type { RuntimeSyncedTab } from '../../shared/runtime-types' import { resolveTerminalTabTitle } from '../../shared/tab-title-resolution' import { collectLayoutLeafIdsInOrder } from '../../shared/workspace-layout/terminal-pane-tree' diff --git a/src/main/runtime/runtime-legacy-worker-terminal-recovery-controller.ts b/src/main/runtime/runtime-legacy-worker-terminal-recovery-controller.ts index 6fa019c40e6..1d929576eff 100644 --- a/src/main/runtime/runtime-legacy-worker-terminal-recovery-controller.ts +++ b/src/main/runtime/runtime-legacy-worker-terminal-recovery-controller.ts @@ -1,5 +1,5 @@ import { parseAppSshPtyId } from '../../shared/ssh-pty-id' -import { getPtyExecutionHost } from '../../shared/terminal-execution-host' +import { getPtyExecutionHost } from '../../shared/terminal/pty/lifecycle/terminal-execution-host' import type { LegacyWorkerTerminalRecoveryPlan } from './orchestration/orchestration-legacy-worker-terminal-recovery' import { runLegacyWorkerTerminalRecovery } from './runtime-legacy-worker-terminal-recovery-runner' import type { diff --git a/src/main/runtime/runtime-legacy-worker-terminal-recovery-persistence.test.ts b/src/main/runtime/runtime-legacy-worker-terminal-recovery-persistence.test.ts index eeeb35d2488..ebc0a511fc9 100644 --- a/src/main/runtime/runtime-legacy-worker-terminal-recovery-persistence.test.ts +++ b/src/main/runtime/runtime-legacy-worker-terminal-recovery-persistence.test.ts @@ -1,7 +1,7 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import { getDefaultWorkspaceSession } from '../../shared/constants' import type { ExecutionHostId } from '../../shared/execution-host' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { withDurableRuntimeStore } from './runtime-durable-store-fixture' import { RuntimeLegacyWorkerTerminalRecoveryPersistence } from './runtime-legacy-worker-terminal-recovery-persistence' import type { LegacyWorkerRecoveryResolution } from './runtime-legacy-worker-terminal-recovery-types' diff --git a/src/main/runtime/runtime-legacy-worker-terminal-recovery-persistence.ts b/src/main/runtime/runtime-legacy-worker-terminal-recovery-persistence.ts index 80ee36bd769..289d9849d9e 100644 --- a/src/main/runtime/runtime-legacy-worker-terminal-recovery-persistence.ts +++ b/src/main/runtime/runtime-legacy-worker-terminal-recovery-persistence.ts @@ -1,5 +1,5 @@ import type { ExecutionHostId } from '../../shared/execution-host' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { retireTerminalSurfaceFromPersistence } from './mobile-session-terminal-persistence-retirement' import type { OrchestrationDb } from './orchestration/db' import { diff --git a/src/main/runtime/runtime-legacy-worker-terminal-recovery-runner.ts b/src/main/runtime/runtime-legacy-worker-terminal-recovery-runner.ts index e5bbeda3fe2..f8af50f26e7 100644 --- a/src/main/runtime/runtime-legacy-worker-terminal-recovery-runner.ts +++ b/src/main/runtime/runtime-legacy-worker-terminal-recovery-runner.ts @@ -1,6 +1,6 @@ import { parseAppSshPtyId } from '../../shared/ssh-pty-id' import { getConnectionExecutionHostId } from '../../shared/execution-host' -import { getPtyExecutionHost } from '../../shared/terminal-execution-host' +import { getPtyExecutionHost } from '../../shared/terminal/pty/lifecycle/terminal-execution-host' import type { RuntimeLegacyWorkerTerminalRecoveryController } from './runtime-legacy-worker-terminal-recovery-controller' import { isAbsentLegacyWorkerTerminalProvenExited, diff --git a/src/main/runtime/runtime-local-worktree-terminal-startup.ts b/src/main/runtime/runtime-local-worktree-terminal-startup.ts index 591e3586afd..32df71be4d8 100644 --- a/src/main/runtime/runtime-local-worktree-terminal-startup.ts +++ b/src/main/runtime/runtime-local-worktree-terminal-startup.ts @@ -1,4 +1,4 @@ -import { formatTerminalStartFailure } from '../../shared/terminal-start-failure' +import { formatTerminalStartFailure } from '../../shared/terminal/pty/lifecycle/terminal-start-failure' import { readableWslDistroHoldText } from '../../shared/wsl-distro-stopped-hold' import { paneIdentity } from './runtime-terminal-pane-identity' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../shared/layout-owner-switch' diff --git a/src/main/runtime/runtime-mobile-session-projection.ts b/src/main/runtime/runtime-mobile-session-projection.ts index 6799a0abf4f..9a281c6c5a6 100644 --- a/src/main/runtime/runtime-mobile-session-projection.ts +++ b/src/main/runtime/runtime-mobile-session-projection.ts @@ -11,7 +11,7 @@ import type { RuntimeMobileSessionTabsResult, RuntimeMobileSessionTabsSnapshot } from '../../shared/runtime-types' -import { isTerminalLeafId, makePaneKey } from '../../shared/stable-pane-id' +import { isTerminalLeafId, makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { resolveTerminalTabTitle } from '../../shared/tab-title-resolution' import { indexAgentStatusRowsByPaneKey } from '../agent-hooks/agent-status-pane-index' import { diff --git a/src/main/runtime/runtime-mobile-session-result-finalization.ts b/src/main/runtime/runtime-mobile-session-result-finalization.ts index e3594978055..8b8b956dd4f 100644 --- a/src/main/runtime/runtime-mobile-session-result-finalization.ts +++ b/src/main/runtime/runtime-mobile-session-result-finalization.ts @@ -1,5 +1,5 @@ import type { RuntimeMobileSessionTabsResult } from '../../shared/runtime-types' -import { dropRetirementProofsForLiveSurfaces } from '../../shared/terminal-retirement-proof-ledger' +import { dropRetirementProofsForLiveSurfaces } from '../../shared/workspace-layout/terminal-retirement-proof-ledger' import { orderMobileSessionTabsByGroups } from './mobile-session-tab-merge' import type { RuntimeMobileSessionProjectionHost, diff --git a/src/main/runtime/runtime-notifier-contract.ts b/src/main/runtime/runtime-notifier-contract.ts index 7cad300f070..010f44c9426 100644 --- a/src/main/runtime/runtime-notifier-contract.ts +++ b/src/main/runtime/runtime-notifier-contract.ts @@ -5,15 +5,15 @@ import type { import type { ClaudeAccountSelectionChange } from '../../shared/managed-account-types' import type { AgentLaunchPaneVerdictEvent } from '../../shared/agent-launch/contracts/agent-launch-pane-verdict' import type { SleepingAgentLaunchConfig } from '../../shared/agent-session/lifecycle/agent-session-resume' -import type { PaneLaunchRecipe } from '../../shared/terminal-attachment-launch-result' +import type { PaneLaunchRecipe } from '../../shared/terminal/pty/lifecycle/terminal-attachment-launch-result' import type { AgentLaunchTabPublished, AgentLaunchTabViewerRule, AgentLaunchTabPublishRequest } from '../../shared/agent-launch/contracts/agent-launch-tab-publication' import type { TerminalPaneSplitSource } from '../../shared/feature-education-telemetry' -import type { TerminalRevealIdentity } from '../../shared/terminal-reveal-identity' -import type { TerminalPaneRevealTarget } from '../../shared/terminal-pane-reveal' +import type { TerminalRevealIdentity } from '../../shared/workspace-layout/terminal-reveal-identity' +import type { TerminalPaneRevealTarget } from '../../shared/workspace-layout/terminal-pane-reveal' import type { TuiAgent } from '../../shared/agent-launch/catalog/tui-agent' import type { WorkspaceSleepNotice } from '../../shared/workspace-sleep' import type { RuntimeNavigationTarget } from '../../shared/runtime-navigation' diff --git a/src/main/runtime/runtime-orchestration-sender-names.ts b/src/main/runtime/runtime-orchestration-sender-names.ts index f48d9d5dc74..833155cd81d 100644 --- a/src/main/runtime/runtime-orchestration-sender-names.ts +++ b/src/main/runtime/runtime-orchestration-sender-names.ts @@ -6,9 +6,9 @@ import { type ConversationNameTab } from '../../shared/agent-status/presentation/agent-row-conversation-name' import type { AgentType } from '../../shared/agent-status/contracts/agent-status-types' -import { parsePaneKey } from '../../shared/stable-pane-id' +import { parsePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { structuredAgentSessionIdFromTabId } from '../../shared/agent-session/view/structured-agent-session-tab-id' -import type { TerminalTab } from '../../shared/terminal-tab-types' +import type { TerminalTab } from '../../shared/workspace-layout/terminal-tab-types' import type { OrchestrationDb } from './orchestration/db' import { observeOrchestrationSender, diff --git a/src/main/runtime/runtime-pane-admission.ts b/src/main/runtime/runtime-pane-admission.ts index e0633ad9e41..1209b8e9989 100644 --- a/src/main/runtime/runtime-pane-admission.ts +++ b/src/main/runtime/runtime-pane-admission.ts @@ -4,7 +4,7 @@ import { normalizeExecutionHostId, toSshExecutionHostId } from '../../shared/execution-host' -import { collectLeafIds } from '../../shared/terminal-pane-layout-tree' +import { collectLeafIds } from '../../shared/workspace-layout/terminal-pane-layout-tree' import type { TerminalPaneAdmission, TerminalPaneAdmissionOutcome diff --git a/src/main/runtime/runtime-pty-controller-contract.ts b/src/main/runtime/runtime-pty-controller-contract.ts index ed95c2a7023..7e4d0b49c85 100644 --- a/src/main/runtime/runtime-pty-controller-contract.ts +++ b/src/main/runtime/runtime-pty-controller-contract.ts @@ -20,17 +20,17 @@ import type { import type { AgentProviderSessionMetadata } from '../../shared/agent-session/lifecycle/agent-session-resume' import type { TuiAgent } from '../../shared/agent-launch/catalog/tui-agent' import type { WorktreeStartupLaunch } from '../../shared/worktree/launch-types' -import type { PtyIncarnationId } from '../../shared/pty-incarnation' +import type { PtyIncarnationId } from '../../shared/terminal/pty/lifecycle/pty-incarnation' import type { PtyBindingSourceExpectation } from '../persistence/loading-store/store' -import type { TerminalPanePlacement } from '../../shared/terminal-pane-placement' +import type { TerminalPanePlacement } from '../../shared/workspace-layout/terminal-pane-placement' import type { ExecutionHostId } from '../../shared/execution-host' import type { PtyProviderBufferSnapshot, PtyProcessInfo, PtySpawnResult } from '../providers/pty-provider-contract' -import type { PtyProcessInspection } from '../providers/pty-process-inspection' -import type { WriteSettlement } from '../../shared/pty-write-settlement' +import type { TerminalProcessInspection as PtyProcessInspection } from '../../shared/terminal/pty/lifecycle/terminal-process-inspection' +import type { WriteSettlement } from '../../shared/terminal/pty/lifecycle/pty-write-settlement' import type { StartupCwdFallback } from '../../shared/startup-cwd-fallback' import type { TerminalInputKind } from '../../shared/terminal/input/terminal-input-kind' import type { PaneResumeOutcome } from '../../shared/workspace-layout/workspace-layout-published' diff --git a/src/main/runtime/runtime-pty-foreground-agent.ts b/src/main/runtime/runtime-pty-foreground-agent.ts index e2a2405fd2c..94c52c2fccb 100644 --- a/src/main/runtime/runtime-pty-foreground-agent.ts +++ b/src/main/runtime/runtime-pty-foreground-agent.ts @@ -1,5 +1,5 @@ import { recognizeAgentProcess } from '../../shared/agent-status/process/agent-process-recognition' -import type { TerminalAgent } from '../../shared/terminal-agent' +import type { TerminalAgent } from '../../shared/agent-status/identity/terminal-agent' import { withTimeoutResult } from './runtime-async-boundaries' import { TERMINAL_INTERACTIVE_WAIT_PROBE_TIMEOUT_MS } from './orca-runtime-core' import type { RuntimePtyController } from './runtime-pty-controller-contract' diff --git a/src/main/runtime/runtime-reference-agents.ts b/src/main/runtime/runtime-reference-agents.ts index a31202a6b5a..9a345577837 100644 --- a/src/main/runtime/runtime-reference-agents.ts +++ b/src/main/runtime/runtime-reference-agents.ts @@ -7,7 +7,7 @@ import { } from '../../shared/execution-host' import type { Repo } from '../../shared/repo-types' import type { FleetAgentStatusEvidence } from '../../shared/orchestration-fleet-agent-status-evidence' -import type { PtyLivenessVerdict } from '../../shared/pty-liveness-verdict' +import type { PtyLivenessVerdict } from '../../shared/terminal/pty/lifecycle/pty-liveness-verdict' import { composeWorktreeHostIdentity } from '../../shared/worktree/host-qualified-identity' import { structuredAgentSessionPaneKey, diff --git a/src/main/runtime/runtime-terminal-agent-presence.ts b/src/main/runtime/runtime-terminal-agent-presence.ts index 042b83cbff3..1baf0e70221 100644 --- a/src/main/runtime/runtime-terminal-agent-presence.ts +++ b/src/main/runtime/runtime-terminal-agent-presence.ts @@ -4,7 +4,7 @@ import { recognizeAgentProcess } from '../../shared/agent-status/process/agent-process-recognition' import { isOpenCodeNativeTitle } from '../../shared/agent-status/title/providers/opencode-terminal-title' -import { isShellProcess } from '../../shared/shell-process-detection' +import { isShellProcess } from '../../shared/agent-status/process/shell-process-detection' import { isKnownReadyPromptPreview } from './terminal-wait-detection' import { buildTerminalWaitText } from './terminal-wait-tail-state' import type { RuntimeLeafRecord, RuntimePtyWorktreeRecord } from './runtime-terminal-state-records' diff --git a/src/main/runtime/runtime-terminal-agent-status-query.ts b/src/main/runtime/runtime-terminal-agent-status-query.ts index cf8e7a84533..cf61f4e7a84 100644 --- a/src/main/runtime/runtime-terminal-agent-status-query.ts +++ b/src/main/runtime/runtime-terminal-agent-status-query.ts @@ -3,7 +3,7 @@ import { isQuarterCircleSpinnerOnlyAgentTitle } from '../../shared/agent-status/title/agent-title-status' import { isOpenCodeNativeTitle } from '../../shared/agent-status/title/providers/opencode-terminal-title' -import { isShellProcess } from '../../shared/shell-process-detection' +import { isShellProcess } from '../../shared/agent-status/process/shell-process-detection' import type { AgentStatus } from '../../shared/agent-status/title/agent-title-core' import { recognizeAgentProcess } from '../../shared/agent-status/process/agent-process-recognition' import type { RuntimeTerminalAgentStatus } from '../../shared/runtime-types' diff --git a/src/main/runtime/runtime-terminal-orphan-adoption-duplicate-pty.test.ts b/src/main/runtime/runtime-terminal-orphan-adoption-duplicate-pty.test.ts index ae70a903b1c..6f72b5ed7d6 100644 --- a/src/main/runtime/runtime-terminal-orphan-adoption-duplicate-pty.test.ts +++ b/src/main/runtime/runtime-terminal-orphan-adoption-duplicate-pty.test.ts @@ -4,7 +4,7 @@ import type { RuntimeMobileSessionTabsResult, RuntimeTerminalOrphanAdoptionRequest } from '../../shared/runtime-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { GIT_KEY, addWorkspace, diff --git a/src/main/runtime/runtime-terminal-orphan-adoption-plan.ts b/src/main/runtime/runtime-terminal-orphan-adoption-plan.ts index 86f19c09d27..0d98bf00fc4 100644 --- a/src/main/runtime/runtime-terminal-orphan-adoption-plan.ts +++ b/src/main/runtime/runtime-terminal-orphan-adoption-plan.ts @@ -3,9 +3,9 @@ import type { RuntimeTerminalOrphanAdoptionRequest } from '../../shared/runtime-types' import type { ExecutionHostId } from '../../shared/execution-host' -import { makePaneKey } from '../../shared/stable-pane-id' -import { hasClosedTerminalTabRecord } from '../../shared/closed-terminal-tab-tombstones' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' +import { hasClosedTerminalTabRecord } from '../../shared/workspace-layout/closed-terminal-tab-tombstones' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { terminalOrphanExecutionOwnersEqual } from './terminal-orphan-owner' import type { TerminalWorkspaceLaunchScope } from './runtime-legacy-worker-terminal-recovery-types' import type { PtyControllerInventory } from './runtime-pty-controller-contract' diff --git a/src/main/runtime/runtime-terminal-orphan-adoption-rollback.test.ts b/src/main/runtime/runtime-terminal-orphan-adoption-rollback.test.ts index fcf97f2c421..f5c29cf75cf 100644 --- a/src/main/runtime/runtime-terminal-orphan-adoption-rollback.test.ts +++ b/src/main/runtime/runtime-terminal-orphan-adoption-rollback.test.ts @@ -11,7 +11,7 @@ import type { RuntimeMobileSessionTabsResult, RuntimeTerminalOrphanAdoptionRequest } from '../../shared/runtime-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { GIT_KEY, addWorkspace, diff --git a/src/main/runtime/runtime-terminal-orphan-adoption.ts b/src/main/runtime/runtime-terminal-orphan-adoption.ts index 95333c32b8c..5d218ef4da9 100644 --- a/src/main/runtime/runtime-terminal-orphan-adoption.ts +++ b/src/main/runtime/runtime-terminal-orphan-adoption.ts @@ -2,7 +2,7 @@ import type { RuntimeMobileSessionTabsResult, RuntimeTerminalOrphanAdoptionResult } from '../../shared/runtime-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import type { RuntimePtyWorktreeRecord } from './runtime-terminal-state-records' import { rollbackWorkspaceSessionAfterFailedAsyncWrite } from '../persistence/restoring-sessions/workspace-session-write-rollback' import type { DurableProfileStateMutation } from '../persistence/loading-store/store-runtime-state' diff --git a/src/main/runtime/runtime-terminal-orphan-session-adoption.test.ts b/src/main/runtime/runtime-terminal-orphan-session-adoption.test.ts index 71071b91193..8553e98b68b 100644 --- a/src/main/runtime/runtime-terminal-orphan-session-adoption.test.ts +++ b/src/main/runtime/runtime-terminal-orphan-session-adoption.test.ts @@ -1,6 +1,6 @@ import { expect, it } from 'vitest' import { LOCAL_EXECUTION_HOST_ID } from '../../shared/execution-host' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import type { RuntimeTerminalOrphanAdoptionRequest } from '../../shared/runtime-types' import { collectLayoutLeafIdsInOrder } from '../../shared/workspace-layout/terminal-pane-tree' import { diff --git a/src/main/runtime/runtime-terminal-orphan-session-adoption.ts b/src/main/runtime/runtime-terminal-orphan-session-adoption.ts index 93b2702cd05..5338a2d1796 100644 --- a/src/main/runtime/runtime-terminal-orphan-session-adoption.ts +++ b/src/main/runtime/runtime-terminal-orphan-session-adoption.ts @@ -4,13 +4,13 @@ import type { RuntimeTerminalOrphanAdoptionRequest } from '../../shared/runtime- import { loadWorkspaceLayoutWithoutReport } from '../../shared/workspace-layout/workspace-layout-load' import { nameBasedLoadContext } from '../../shared/workspace-layout/workspace-layout-minted-ids' import { saveWorkspaceLayout } from '../../shared/workspace-layout/workspace-layout-save' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { collectPersistedTerminalLeafIds } from './mobile-session-layout-projection' import { collectLayoutLeafIdsInOrder, removeLayoutLeaf } from '../../shared/workspace-layout/terminal-pane-tree' -import type { TerminalPaneLayoutNode } from '../../shared/terminal-tab-types' +import type { TerminalPaneLayoutNode } from '../../shared/workspace-layout/terminal-tab-types' import type { RuntimePtyWorktreeRecord } from './runtime-terminal-state-records' import { mergeTerminalOrphanGroupLayout } from './terminal-orphan-topology' import { canonicalizeTerminalSessionWorktreeId } from './workspace-session-worktree-id' diff --git a/src/main/runtime/runtime-terminal-pane-identity.ts b/src/main/runtime/runtime-terminal-pane-identity.ts index 645c8ba7c96..f9012c04786 100644 --- a/src/main/runtime/runtime-terminal-pane-identity.ts +++ b/src/main/runtime/runtime-terminal-pane-identity.ts @@ -1,7 +1,11 @@ import type { RuntimePtyController } from './runtime-pty-controller-contract' import { AgentLaunchPaneAlreadyLiveError } from '../../shared/agent-launch/contracts/agent-launch-pane-already-live' -import { isTerminalLeafId, makePaneKey, parsePaneKey } from '../../shared/stable-pane-id' -import { isValidHostTerminalTabId } from '../../shared/terminal-tab-id' +import { + isTerminalLeafId, + makePaneKey, + parsePaneKey +} from '../../shared/workspace-layout/stable-pane-id' +import { isValidHostTerminalTabId } from '../../shared/workspace-layout/terminal-tab-id' import { randomUUID } from 'node:crypto' export function allocateTerminalPaneIdentity(opts: { tabId?: string; leafId?: string }): { diff --git a/src/main/runtime/runtime-terminal-spawn-placement.ts b/src/main/runtime/runtime-terminal-spawn-placement.ts index bb267c11b9d..88fa163fd47 100644 --- a/src/main/runtime/runtime-terminal-spawn-placement.ts +++ b/src/main/runtime/runtime-terminal-spawn-placement.ts @@ -1,5 +1,5 @@ -import type { TerminalPanePlacement } from '../../shared/terminal-pane-placement' -import type { TerminalPaneSplitDirection } from '../../shared/terminal-tab-types' +import type { TerminalPanePlacement } from '../../shared/workspace-layout/terminal-pane-placement' +import type { TerminalPaneSplitDirection } from '../../shared/workspace-layout/terminal-tab-types' import type { RuntimeTerminalPresentation } from '../../shared/runtime-terminal-contracts' /** Use requested/first group; revealed tabs honor user names, background worker tabs keep live titles. */ diff --git a/src/main/runtime/runtime-terminal-state-records.ts b/src/main/runtime/runtime-terminal-state-records.ts index 5eea954aa8d..ded96bdbe31 100644 --- a/src/main/runtime/runtime-terminal-state-records.ts +++ b/src/main/runtime/runtime-terminal-state-records.ts @@ -4,21 +4,21 @@ import type { TerminalLaunchResult, SleepingAgentLaunchConfig } from '../../shared/agent-session/lifecycle/agent-session-resume' -import type { PtyIncarnationId } from '../../shared/pty-incarnation' +import type { PtyIncarnationId } from '../../shared/terminal/pty/lifecycle/pty-incarnation' import type { RuntimeSyncedLeaf } from '../../shared/runtime-types' import type { RuntimeTerminalRowMetadata } from '../../shared/runtime-terminal-contracts' import type { TerminalOscLinkRange } from '../../shared/terminal/links/terminal-osc-link-ranges' import type { TerminalSideEffectFact } from '../../shared/terminal/output/terminal-side-effect-facts' import type { TerminalTitleTracker } from '../../shared/terminal/output/terminal-output-side-effects' import type { TuiAgent } from '../../shared/agent-launch/catalog/tui-agent' -import type { TerminalAgent } from '../../shared/terminal-agent' +import type { TerminalAgent } from '../../shared/agent-status/identity/terminal-agent' import type { HeadlessEmulator } from '../daemon/headless-emulator' import type { PtyProviderBufferSnapshot } from '../providers/pty-provider-contract' import type { RetainedTailRedrawCursor } from './terminal-tail-redraw-buffer' import type { TerminalTailWaitState } from './terminal-wait-tail-state' import type { TerminalCommandPaint } from './terminal-command-paint' import type { PtyShellOwnershipMirror } from './pty-shell-ownership-mirror' -import type { TerminalExitCause } from '../../shared/terminal-exit-cause' +import type { TerminalExitCause } from '../../shared/terminal/pty/lifecycle/terminal-exit-cause' import type { AgentSessionOwnerBinding } from '../../shared/agent-session/agent-session-host-authority' type RuntimeTerminalTailState = { diff --git a/src/main/runtime/runtime-terminal-visual-layout.ts b/src/main/runtime/runtime-terminal-visual-layout.ts index ca6d9738161..c13fe9aafd0 100644 --- a/src/main/runtime/runtime-terminal-visual-layout.ts +++ b/src/main/runtime/runtime-terminal-visual-layout.ts @@ -9,7 +9,7 @@ import type { RuntimeTerminalVisualTab } from '../../shared/runtime-types' import type { TabGroupLayoutNode } from '../../shared/tab-types' -import type { TerminalPaneLayoutNode } from '../../shared/terminal-tab-types' +import type { TerminalPaneLayoutNode } from '../../shared/workspace-layout/terminal-tab-types' type RuntimeTerminalVisualLayoutArgs = { terminals: RuntimeTerminalSummary[] diff --git a/src/main/runtime/runtime-terminal-writer.test.ts b/src/main/runtime/runtime-terminal-writer.test.ts index 17c97d0f7e1..8bd0ef57f95 100644 --- a/src/main/runtime/runtime-terminal-writer.test.ts +++ b/src/main/runtime/runtime-terminal-writer.test.ts @@ -7,7 +7,7 @@ import { writeRefused, writeUnverifiable, type WriteSettlement -} from '../../shared/pty-write-settlement' +} from '../../shared/terminal/pty/lifecycle/pty-write-settlement' import { TERMINAL_INPUT_CHUNK_MAX_BYTES } from '../../shared/terminal/input/terminal-input' afterEach(() => vi.useRealTimers()) diff --git a/src/main/runtime/runtime-terminal-writer.ts b/src/main/runtime/runtime-terminal-writer.ts index ff3172f881d..7e30ddfc38b 100644 --- a/src/main/runtime/runtime-terminal-writer.ts +++ b/src/main/runtime/runtime-terminal-writer.ts @@ -2,7 +2,7 @@ import { getWindowsInputRecordPasteBurstMs, resolveAgentPromptSubmitDelayForAgent } from '../../shared/agent-launch/startup/agent-prompt-injection' -import type { TerminalAgent } from '../../shared/terminal-agent' +import type { TerminalAgent } from '../../shared/agent-status/identity/terminal-agent' import { iterateTerminalInputChunks } from '../../shared/terminal/input/terminal-input' import type { TerminalInputSource } from './terminal-input-admission' import type { TerminalInputKind } from '../../shared/terminal/input/terminal-input-kind' @@ -11,7 +11,7 @@ import { writeRefused, writeUnverifiable, type WriteSettlement -} from '../../shared/pty-write-settlement' +} from '../../shared/terminal/pty/lifecycle/pty-write-settlement' export type RuntimeTerminalWriteOptions = { inputSource?: TerminalInputSource diff --git a/src/main/runtime/runtime-workspace-session-controller.ts b/src/main/runtime/runtime-workspace-session-controller.ts index 91c045eb275..9a28abf8dd8 100644 --- a/src/main/runtime/runtime-workspace-session-controller.ts +++ b/src/main/runtime/runtime-workspace-session-controller.ts @@ -10,11 +10,11 @@ import type { Repo } from '../../shared/repo-types' import '../../shared/folder-workspaces/folder-workspace-execution-host' import { getFolderWorkspaceHostId } from '../../shared/folder-workspaces/folder-workspace-host-id' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../shared/layout-owner-switch' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { getRepoIdFromWorktreeId, splitWorktreeId } from '../../shared/worktree/id' -import { workspaceSessionPartitionHostId } from '../../shared/workspace-session-partition-owner' +import { workspaceSessionPartitionHostId } from '../../shared/workspace-session/workspace-session-partition-owner' import { parseWorkspaceKey } from '../../shared/workspace-scope' -import { workspaceSessionListsTerminalTab } from '../../shared/workspace-session-terminal-tab-close' +import { workspaceSessionListsTerminalTab } from '../../shared/workspace-session/workspace-session-terminal-tab-close' import type { RuntimeStore } from './runtime-store-contract' import { resolveTwinRepoSessionHostId, type CachedWorktreeHost } from './twin-repo-session-host' diff --git a/src/main/runtime/runtime-worktree-binding-index.ts b/src/main/runtime/runtime-worktree-binding-index.ts index 99defe54cf3..1218cf97d3f 100644 --- a/src/main/runtime/runtime-worktree-binding-index.ts +++ b/src/main/runtime/runtime-worktree-binding-index.ts @@ -1,5 +1,5 @@ -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' -import { makePaneKey } from '../../shared/stable-pane-id' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' export function indexPersistedPtyWorktreeBindings( session: WorkspaceSessionState | null | undefined diff --git a/src/main/runtime/runtime-worktree-lineage-controller.ts b/src/main/runtime/runtime-worktree-lineage-controller.ts index 47462a42610..5974dab4e02 100644 --- a/src/main/runtime/runtime-worktree-lineage-controller.ts +++ b/src/main/runtime/runtime-worktree-lineage-controller.ts @@ -1,8 +1,9 @@ import type { WorktreeLineage, WorkspaceLineage } from '../../shared/worktree/lineage-types' import { getRepoExecutionHostId, type ExecutionHostId } from '../../shared/execution-host' import { getRepoIdFromWorktreeId } from '../../shared/worktree/id' -import type { WorkspaceKey } from '../../shared/folder-workspaces/folder-workspace-types' + import { + type WorkspaceKey, folderWorkspaceKey, parseWorkspaceKey, worktreeWorkspaceKey diff --git a/src/main/runtime/runtime-worktree-lineage-recording.ts b/src/main/runtime/runtime-worktree-lineage-recording.ts index 3cc4b9a09df..f611bbaadd8 100644 --- a/src/main/runtime/runtime-worktree-lineage-recording.ts +++ b/src/main/runtime/runtime-worktree-lineage-recording.ts @@ -1,14 +1,12 @@ -import type { - FolderWorkspace, - WorkspaceKey -} from '../../shared/folder-workspaces/folder-workspace-types' +import type { FolderWorkspace } from '../../shared/folder-workspaces/folder-workspace-types' + import type { Worktree } from '../../shared/worktree/types' import type { WorktreeLineage, WorktreeLineageWarning, WorkspaceLineage } from '../../shared/worktree/lineage-types' -import { worktreeWorkspaceKey } from '../../shared/workspace-scope' +import { type WorkspaceKey, worktreeWorkspaceKey } from '../../shared/workspace-scope' import type { RuntimeStore } from './runtime-store-contract' import { worktreeRowTarget } from '../persistence/host-qualified-worktree-meta' diff --git a/src/main/runtime/runtime-worktree-lineage-resolution.ts b/src/main/runtime/runtime-worktree-lineage-resolution.ts index a86acd9d750..81d136f5b74 100644 --- a/src/main/runtime/runtime-worktree-lineage-resolution.ts +++ b/src/main/runtime/runtime-worktree-lineage-resolution.ts @@ -1,9 +1,7 @@ import type { TuiAgent } from '../../shared/agent-launch/catalog/tui-agent' import type { ExecutionHostId } from '../../shared/execution-host' -import type { - FolderWorkspace, - WorkspaceKey -} from '../../shared/folder-workspaces/folder-workspace-types' +import type { FolderWorkspace } from '../../shared/folder-workspaces/folder-workspace-types' +import type { WorkspaceKey } from '../../shared/workspace-scope' import type { WorktreeLineage, WorktreeLineageWarning } from '../../shared/worktree/lineage-types' import type { ResolvedWorktree } from './runtime-worktree-path-identity' import type { RuntimeManagedWorktreeCreateArgs } from './runtime-managed-worktree-create-types' diff --git a/src/main/runtime/runtime-worktree-path-identity.ts b/src/main/runtime/runtime-worktree-path-identity.ts index 4108b372f31..7e65e4db42f 100644 --- a/src/main/runtime/runtime-worktree-path-identity.ts +++ b/src/main/runtime/runtime-worktree-path-identity.ts @@ -1,11 +1,11 @@ -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import type { WorktreeLineage } from '../../shared/worktree/lineage-types' import type { GitWorktreeInfo, Worktree } from '../../shared/worktree/types' import { isPathInsideOrEqual, normalizeRuntimePathForComparison } from '../../shared/cross-platform-path' -import { parsePtySessionId } from '../../shared/pty-session-id-format' +import { parsePtySessionId } from '../../shared/terminal/pty/lifecycle/pty-session-id-format' import { splitWorktreeId, worktreeIdentityKey, worktreeIdsEqual } from '../../shared/worktree/id' import { normalizeLocalBranchName } from './runtime-worktree-selection' diff --git a/src/main/runtime/runtime-worktree-ps-activity.ts b/src/main/runtime/runtime-worktree-ps-activity.ts index 3c5cc848d63..e93fd592723 100644 --- a/src/main/runtime/runtime-worktree-ps-activity.ts +++ b/src/main/runtime/runtime-worktree-ps-activity.ts @@ -1,9 +1,9 @@ import type { RuntimeSyncedTab, RuntimeWorktreePsSummary } from '../../shared/runtime-types' import type { Repo } from '../../shared/repo-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { getRepoExecutionHostId, type ExecutionHostId } from '../../shared/execution-host' -import { parsePaneKey } from '../../shared/stable-pane-id' -import { getWorkspaceSessionTabActivityIds } from '../../shared/workspace-session-tab-activity' +import { parsePaneKey } from '../../shared/workspace-layout/stable-pane-id' +import { getWorkspaceSessionTabActivityIds } from '../../shared/workspace-session/workspace-session-tab-activity' import type { RuntimeStore } from './runtime-store-contract' import type { RuntimeLeafRecord, RuntimePtyWorktreeRecord } from './runtime-terminal-state-records' import type { RuntimeWorktreePsSummaryLookup } from './runtime-worktree-summary-paths' diff --git a/src/main/runtime/runtime-worktree-ps-unverifiable-terminals.ts b/src/main/runtime/runtime-worktree-ps-unverifiable-terminals.ts index 7f9af55f85b..6fcc2305ef3 100644 --- a/src/main/runtime/runtime-worktree-ps-unverifiable-terminals.ts +++ b/src/main/runtime/runtime-worktree-ps-unverifiable-terminals.ts @@ -1,4 +1,4 @@ -import type { PtyLivenessVerdict } from '../../shared/pty-liveness-verdict' +import type { PtyLivenessVerdict } from '../../shared/terminal/pty/lifecycle/pty-liveness-verdict' import type { RuntimeLeafRecord, RuntimePtyWorktreeRecord } from './runtime-terminal-state-records' import type { RuntimeWorktreePsSummaryLookup } from './runtime-worktree-summary-paths' diff --git a/src/main/runtime/runtime-worktree-pty-agent-sources.ts b/src/main/runtime/runtime-worktree-pty-agent-sources.ts index 65b1304c2d7..0d0ca07890a 100644 --- a/src/main/runtime/runtime-worktree-pty-agent-sources.ts +++ b/src/main/runtime/runtime-worktree-pty-agent-sources.ts @@ -3,7 +3,10 @@ import { type ParsedAgentStatusPayload } from '../../shared/agent-status/contracts/agent-status-types' import type { AgentStatusIpcPayload } from '../../shared/agent-status/contracts/agent-status-ipc-payload' -import { parseLegacyNumericPaneKey, parsePaneKey } from '../../shared/stable-pane-id' +import { + parseLegacyNumericPaneKey, + parsePaneKey +} from '../../shared/workspace-layout/stable-pane-id' import { agentVerdictFields } from '../../shared/agent-status/lifecycle/agent-main-agent-verdict' import { isLocalHookConnectionId } from '../../shared/wsl-hook-relay-contract' import type { AgentSessionStatusSummary } from '../../shared/agent-session/agent-session-wire' diff --git a/src/main/runtime/runtime-worktree-startup-failure.test.ts b/src/main/runtime/runtime-worktree-startup-failure.test.ts index 27570e66ecf..fbb08ddda20 100644 --- a/src/main/runtime/runtime-worktree-startup-failure.test.ts +++ b/src/main/runtime/runtime-worktree-startup-failure.test.ts @@ -3,7 +3,10 @@ import { startRuntimeLocalWorktreeTerminals } from './runtime-local-worktree-ter import { createRuntimeFolderWorktree } from './runtime-folder-worktree-create' import { createWorkerWorktree } from './rpc/methods/orchestration/worker/worker-worktree-creation' import { failFederatedAttachmentWithReceipt } from './rpc/methods/orchestration/federation/federation-start-receipt' -import { terminalExitError, terminalStartError } from '../../shared/terminal-start-failure' +import { + terminalExitError, + terminalStartError +} from '../../shared/terminal/pty/lifecycle/terminal-start-failure' import type { Repo } from '../../shared/repo-types' import type { Worktree } from '../../shared/worktree/types' diff --git a/src/main/runtime/runtime-worktree-startup-readiness.ts b/src/main/runtime/runtime-worktree-startup-readiness.ts index 43012865b91..4040d2512f4 100644 --- a/src/main/runtime/runtime-worktree-startup-readiness.ts +++ b/src/main/runtime/runtime-worktree-startup-readiness.ts @@ -1,5 +1,5 @@ import type { TerminalReadinessCreation } from './launched-agent-composer-readiness' -import { isShellProcess } from '../../shared/shell-process-detection' +import { isShellProcess } from '../../shared/agent-status/process/shell-process-detection' import { isExpectedAgentProcess } from '../../shared/agent-status/process/agent-process-recognition' import { createDraftPasteReadyScanner, diff --git a/src/main/runtime/runtime-worktree-status-projection.ts b/src/main/runtime/runtime-worktree-status-projection.ts index 7956a6fc748..8551834e79b 100644 --- a/src/main/runtime/runtime-worktree-status-projection.ts +++ b/src/main/runtime/runtime-worktree-status-projection.ts @@ -7,9 +7,9 @@ import { type AgentStatus } from '../../shared/agent-status/title/agent-title-core' import { isOpenCodeNativeTitle } from '../../shared/agent-status/title/providers/opencode-terminal-title' -import { isShellProcess } from '../../shared/shell-process-detection' +import { isShellProcess } from '../../shared/agent-status/process/shell-process-detection' import type { AgentStatusEntry } from '../../shared/agent-status/contracts/agent-status-types' -import type { PtyIncarnationId } from '../../shared/pty-incarnation' +import type { PtyIncarnationId } from '../../shared/terminal/pty/lifecycle/pty-incarnation' import type { RuntimeTerminalAgentStatus, RuntimeWorktreePsSummary, diff --git a/src/main/runtime/saved-structured-agent-session-restoration.test.ts b/src/main/runtime/saved-structured-agent-session-restoration.test.ts index 1867c9a1786..f7087dcabc9 100644 --- a/src/main/runtime/saved-structured-agent-session-restoration.test.ts +++ b/src/main/runtime/saved-structured-agent-session-restoration.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import type { Tab } from '../../shared/tab-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { collectSavedStructuredAgentSessionIds } from './saved-structured-agent-session-restoration' function tab(input: Partial & Pick): Tab { diff --git a/src/main/runtime/saved-structured-agent-session-restoration.ts b/src/main/runtime/saved-structured-agent-session-restoration.ts index 3313ccae98f..e53c38ac7cf 100644 --- a/src/main/runtime/saved-structured-agent-session-restoration.ts +++ b/src/main/runtime/saved-structured-agent-session-restoration.ts @@ -1,6 +1,6 @@ import { LOCAL_EXECUTION_HOST_ID } from '../../shared/execution-host' import type { Tab } from '../../shared/tab-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' /** The chat a saved tab shows, when it is this host's. */ export function savedSessionId(tab: Tab): string | null { diff --git a/src/main/runtime/serve-browser-tab-layout.test.ts b/src/main/runtime/serve-browser-tab-layout.test.ts index 7612e6088dd..cf37a6bab94 100644 --- a/src/main/runtime/serve-browser-tab-layout.test.ts +++ b/src/main/runtime/serve-browser-tab-layout.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest' import { getDefaultWorkspaceSession } from '../../shared/constants' -import { workspaceSessionStateSchema } from '../../shared/workspace-session-schema' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import { workspaceSessionStateSchema } from '../../shared/workspace-session/workspace-session-schema' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { findSavedBrowserPage, withClosedServeBrowserTab, diff --git a/src/main/runtime/serve-browser-tab-layout.ts b/src/main/runtime/serve-browser-tab-layout.ts index 252286f3926..2a665e915cb 100644 --- a/src/main/runtime/serve-browser-tab-layout.ts +++ b/src/main/runtime/serve-browser-tab-layout.ts @@ -7,7 +7,7 @@ import { BLANK_BROWSER_TAB_STATE } from '../../shared/workspace-layout/workspace import { loadWorkspaceLayout } from '../../shared/workspace-layout/workspace-layout-load' import { nameBasedLoadContext } from '../../shared/workspace-layout/workspace-layout-minted-ids' import { saveWorkspaceLayout } from '../../shared/workspace-layout/workspace-layout-save' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { randomUUID } from 'node:crypto' export type ServeBrowserPageState = { diff --git a/src/main/runtime/serve-browser-tabs-layout-owner.test.ts b/src/main/runtime/serve-browser-tabs-layout-owner.test.ts index c69d00acd14..6a9f7a16b58 100644 --- a/src/main/runtime/serve-browser-tabs-layout-owner.test.ts +++ b/src/main/runtime/serve-browser-tabs-layout-owner.test.ts @@ -5,7 +5,7 @@ import type { LayoutApplyOutcome, LayoutCommand } from '../../shared/workspace-layout/workspace-layout-command-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { applyCommandToSession } from '../persistence/terminal-topology/terminal-pane-admission' import { ServeBrowserTabs } from './serve-browser-tabs' diff --git a/src/main/runtime/serve-browser-tabs.ts b/src/main/runtime/serve-browser-tabs.ts index 9801b35fc80..996344b94a7 100644 --- a/src/main/runtime/serve-browser-tabs.ts +++ b/src/main/runtime/serve-browser-tabs.ts @@ -3,7 +3,7 @@ import type { BrowserBackend } from '../browser/browser-backend' import type { ExecutionHostId } from '../../shared/execution-host' import type { BrowserTabInfo } from '../../shared/runtime-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../shared/layout-owner-switch' import type { LayoutApplyOutcome, diff --git a/src/main/runtime/session-graph/session-graph-promotion.ts b/src/main/runtime/session-graph/session-graph-promotion.ts index dbaa3b8443f..7bc6576253c 100644 --- a/src/main/runtime/session-graph/session-graph-promotion.ts +++ b/src/main/runtime/session-graph/session-graph-promotion.ts @@ -15,7 +15,7 @@ import { OrcaRuntimeWithNotifySshStateChanged } from '../workspaces/workspace-ho import { HEADLESS_RUNTIME_WINDOW_ID } from '../../../shared/runtime-types' import { ActiveGroupViewFacts } from '../view-facts/active-group-view-facts' import type { ExecutionHostId } from '../../../shared/execution-host' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { RuntimePtyWorktreeRecord } from '../runtime-terminal-state-records' export abstract class OrcaRuntimeWithAttachWindow extends OrcaRuntimeWithNotifySshStateChanged { diff --git a/src/main/runtime/session-layout-apply.test-fixture.ts b/src/main/runtime/session-layout-apply.test-fixture.ts index 4ece1ce0153..dc36aa566f6 100644 --- a/src/main/runtime/session-layout-apply.test-fixture.ts +++ b/src/main/runtime/session-layout-apply.test-fixture.ts @@ -1,5 +1,5 @@ // Apply layout record patches to plain session maps as Store does, including main-owned chat tabs. -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import type { LayoutCommand } from '../../shared/workspace-layout/workspace-layout-command-types' import { applyCommandToSession } from '../persistence/terminal-topology/terminal-pane-admission' import { resolveHostId } from '../persistence/loading-store/session-host-partitions' diff --git a/src/main/runtime/session-lifecycle/close/close-by-split-handle-layout-owner.test.ts b/src/main/runtime/session-lifecycle/close/close-by-split-handle-layout-owner.test.ts index 7d1523d1d59..8e773e6573d 100644 --- a/src/main/runtime/session-lifecycle/close/close-by-split-handle-layout-owner.test.ts +++ b/src/main/runtime/session-lifecycle/close/close-by-split-handle-layout-owner.test.ts @@ -8,8 +8,8 @@ import type { RuntimeMobileSessionTabsSnapshot, RuntimeMobileSessionTerminalTab } from '../../../../shared/runtime-types' -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import { OrcaRuntimeService } from '../../orca-runtime' import type { ExecutionHostId } from '../../../../shared/execution-host' import type { LayoutCommand } from '../../../../shared/workspace-layout/workspace-layout-command-types' diff --git a/src/main/runtime/session-lifecycle/close/close-mobile-row-in-main-layout.test.ts b/src/main/runtime/session-lifecycle/close/close-mobile-row-in-main-layout.test.ts index 6fe09347899..68c8c11c7a0 100644 --- a/src/main/runtime/session-lifecycle/close/close-mobile-row-in-main-layout.test.ts +++ b/src/main/runtime/session-lifecycle/close/close-mobile-row-in-main-layout.test.ts @@ -6,7 +6,7 @@ import { resolveAgentLaunchPaneVerdict, trackRunningAgentLaunchPane } from '../../../agent-launch/agent-launch-pane-attachment' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { LEAF_A, LEAF_B, diff --git a/src/main/runtime/session-lifecycle/projection/agent-session-resume-ownership.ts b/src/main/runtime/session-lifecycle/projection/agent-session-resume-ownership.ts index 6cecfc22493..1075e3dbc1a 100644 --- a/src/main/runtime/session-lifecycle/projection/agent-session-resume-ownership.ts +++ b/src/main/runtime/session-lifecycle/projection/agent-session-resume-ownership.ts @@ -2,7 +2,7 @@ import { findPaneSleepingRecord } from './pane-sleeping-record' import { hookRowPaneResumeRecord, isPaneLocalHookRow } from './hook-row-pane-resume-record' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { OrcaRuntimeWithApplyMobileSessionTabNavigation } from './apply-mobile-session-tab-navigation' import type { RuntimeMobileSessionTerminalTab } from '../../../../shared/runtime-types' import { diff --git a/src/main/runtime/session-lifecycle/projection/build-headless-mobile-session-browser-tabs.ts b/src/main/runtime/session-lifecycle/projection/build-headless-mobile-session-browser-tabs.ts index 1286fdb3105..d37fc990fa8 100644 --- a/src/main/runtime/session-lifecycle/projection/build-headless-mobile-session-browser-tabs.ts +++ b/src/main/runtime/session-lifecycle/projection/build-headless-mobile-session-browser-tabs.ts @@ -20,7 +20,7 @@ import { import type { TerminalPaneCloseTarget, TerminalSurfaceCloseTarget -} from '../../../../shared/terminal-surface-close-target' +} from '../../../../shared/workspace-layout/terminal-surface-close-target' import { retireTerminalSurfacesFromSnapshot } from '../../mobile-session-terminal-retirement' import type { PtyControllerInventory } from '../../runtime-pty-controller-contract' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../../shared/constants' diff --git a/src/main/runtime/session-lifecycle/projection/pane-sleeping-record.test.ts b/src/main/runtime/session-lifecycle/projection/pane-sleeping-record.test.ts index 2e7b3b5d9be..a326aaef972 100644 --- a/src/main/runtime/session-lifecycle/projection/pane-sleeping-record.test.ts +++ b/src/main/runtime/session-lifecycle/projection/pane-sleeping-record.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from 'vitest' import type { SleepingAgentSessionRecord } from '../../../../shared/agent-session/lifecycle/agent-session-resume' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import { findPaneSleepingRecord } from './pane-sleeping-record' vi.mock('../../../../shared/layout-owner-switch', () => ({ ORCA_LAYOUT_OWNER_IS_MAIN: true })) diff --git a/src/main/runtime/session-lifecycle/projection/pane-sleeping-record.ts b/src/main/runtime/session-lifecycle/projection/pane-sleeping-record.ts index b459d555bab..9c57ce850d6 100644 --- a/src/main/runtime/session-lifecycle/projection/pane-sleeping-record.ts +++ b/src/main/runtime/session-lifecycle/projection/pane-sleeping-record.ts @@ -1,10 +1,13 @@ import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../../shared/layout-owner-switch' import type { SleepingAgentSessionRecord } from '../../../../shared/agent-session/lifecycle/agent-session-resume' import { findLegacyNumericSleepingRecord } from '../../../../shared/sleeping-record-legacy-pane-key' -import { makePaneKey, parseLegacyNumericPaneKey } from '../../../../shared/stable-pane-id' +import { + makePaneKey, + parseLegacyNumericPaneKey +} from '../../../../shared/workspace-layout/stable-pane-id' import { resolveRuntimePaneTitleLeafIdFromRoot } from '../../../../shared/runtime-pane-title-leaf-id' import { worktreeIdsEqual } from '../../../../shared/worktree/id' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import { collectPersistedTerminalLeafIds } from '../../mobile-session-layout-projection' /** The pane's record and, for a numbered one, its tab's numbered keys: aliases, not other panes. */ diff --git a/src/main/runtime/session-lifecycle/projection/prune-mobile-session-tab-group-layout.ts b/src/main/runtime/session-lifecycle/projection/prune-mobile-session-tab-group-layout.ts index 3ce9654069e..000f8a9cc74 100644 --- a/src/main/runtime/session-lifecycle/projection/prune-mobile-session-tab-group-layout.ts +++ b/src/main/runtime/session-lifecycle/projection/prune-mobile-session-tab-group-layout.ts @@ -21,7 +21,7 @@ import type { import type { AgentStatusIpcPayload } from '../../../../shared/agent-status/contracts/agent-status-ipc-payload' import { buildRuntimeMobileAgentStatus } from '../../runtime-mobile-agent-status-builder' import { FIRST_PANE_ID } from '../../../../shared/pane-key' -import { isTerminalLeafId, makePaneKey } from '../../../../shared/stable-pane-id' +import { isTerminalLeafId, makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { getStructuredAgentSessionHost } from '../../../native-chat/agent-session-wire/structured-agent-session-registry' import { structuredWorkerHandleAgentStatus } from '../../orchestration/structured-worker-group-addressing' import { diff --git a/src/main/runtime/session-lifecycle/projection/reconcile-headless-mobile-session-browser-tabs.ts b/src/main/runtime/session-lifecycle/projection/reconcile-headless-mobile-session-browser-tabs.ts index 8beeb78695a..56684468b1c 100644 --- a/src/main/runtime/session-lifecycle/projection/reconcile-headless-mobile-session-browser-tabs.ts +++ b/src/main/runtime/session-lifecycle/projection/reconcile-headless-mobile-session-browser-tabs.ts @@ -16,9 +16,9 @@ import { headlessBrowserTabsUnchanged } from '../../mobile-session-browser-equal import { appendBrowserTabOrder } from '../../mobile-session-browser-group-projection' import { parseAppSshPtyId, toComparableRelaySshPtyId } from '../../../../shared/ssh-pty-id' import { toSshExecutionHostId } from '../../../../shared/execution-host' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { sshRemotePtyLeaseAllowsReattach } from '../../../../shared/ssh-types' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import type { RuntimeStore } from '../../runtime-store-contract' import { SSH_PANE_RECOVERY_GRACE_MS } from '../../orca-runtime-core' import { findTerminalTabIdForLeaf } from '../../../persistence/terminal-topology/terminal-topology-membership' diff --git a/src/main/runtime/session-lifecycle/projection/restored-pane-materialize.ts b/src/main/runtime/session-lifecycle/projection/restored-pane-materialize.ts index 752e05d878c..3a534f591d3 100644 --- a/src/main/runtime/session-lifecycle/projection/restored-pane-materialize.ts +++ b/src/main/runtime/session-lifecycle/projection/restored-pane-materialize.ts @@ -31,7 +31,7 @@ import { getDaemonHistoryDir } from '../../../daemon/daemon-launch-paths' import { HistoryReader } from '../../../daemon/history-reader' import { servesWslMovedPaneHistory } from '../../../orcad/orcad-migration-wsl-destination' import { movedPaneHistorySessionId } from '../../../persistence/migrating-orcad-catalog/orcad-terminal-history-installer' -import { makePaneKey, parsePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey, parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { agentProviderSessionsEqual } from '../../../../shared/agent-session/lifecycle/agent-session-resume' import { worktreeIdsEqual } from '../../../../shared/worktree/id' diff --git a/src/main/runtime/session-lifecycle/projection/resume-agent-session-in-workspace.ts b/src/main/runtime/session-lifecycle/projection/resume-agent-session-in-workspace.ts index aef0a7e30a3..bf5b8016198 100644 --- a/src/main/runtime/session-lifecycle/projection/resume-agent-session-in-workspace.ts +++ b/src/main/runtime/session-lifecycle/projection/resume-agent-session-in-workspace.ts @@ -1,5 +1,5 @@ import { OrcaRuntimeWithAgentSessionResumeOwnership } from './agent-session-resume-ownership' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { agentProviderSessionsEqual, normalizeAgentProviderSession, diff --git a/src/main/runtime/session-lifecycle/projection/sleep-record-pane-claim.test.ts b/src/main/runtime/session-lifecycle/projection/sleep-record-pane-claim.test.ts index 46eeeb26af2..5c0fb663960 100644 --- a/src/main/runtime/session-lifecycle/projection/sleep-record-pane-claim.test.ts +++ b/src/main/runtime/session-lifecycle/projection/sleep-record-pane-claim.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import type { SleepingAgentSessionRecord } from '../../../../shared/agent-session/lifecycle/agent-session-resume' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import { markResumedRecordLive } from './sleep-record-pane-claim' const PANE_KEY = 'tab-1:leaf-1' diff --git a/src/main/runtime/session-lifecycle/projection/sleep-record-pane-claim.ts b/src/main/runtime/session-lifecycle/projection/sleep-record-pane-claim.ts index dcd17213934..1eb3cbbaacb 100644 --- a/src/main/runtime/session-lifecycle/projection/sleep-record-pane-claim.ts +++ b/src/main/runtime/session-lifecycle/projection/sleep-record-pane-claim.ts @@ -3,7 +3,7 @@ import { isPaneSleepRecord, type SleepingAgentSessionRecord } from '../../../../shared/agent-session/lifecycle/agent-session-resume' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' /** An older window capture of a still-running agent, which no pane has claimed yet. */ export function isUnclaimedRunningSleepRecord(record: SleepingAgentSessionRecord): boolean { diff --git a/src/main/runtime/session-tabs/desktop-pane-title-forwarding.ts b/src/main/runtime/session-tabs/desktop-pane-title-forwarding.ts index ffd328d552b..7ea33b96e62 100644 --- a/src/main/runtime/session-tabs/desktop-pane-title-forwarding.ts +++ b/src/main/runtime/session-tabs/desktop-pane-title-forwarding.ts @@ -1,6 +1,9 @@ -import { isTerminalLeafId } from '../../../shared/stable-pane-id' -import type { TerminalPaneLayoutNode, TerminalTab } from '../../../shared/terminal-tab-types' -import { sanitizeTerminalLayoutPaneTitles } from '../../../shared/terminal-pane-title-sanitization' +import { isTerminalLeafId } from '../../../shared/workspace-layout/stable-pane-id' +import type { + TerminalPaneLayoutNode, + TerminalTab +} from '../../../shared/workspace-layout/terminal-tab-types' +import { sanitizeTerminalLayoutPaneTitles } from '../../../shared/workspace-layout/terminal-pane-title-sanitization' function collectLeafIds(node: TerminalPaneLayoutNode | null): string[] { if (!node) { diff --git a/src/main/runtime/session-tabs/explicit-terminal-close-pty-stops.ts b/src/main/runtime/session-tabs/explicit-terminal-close-pty-stops.ts index 0a9bc09a421..6ca0e6b62df 100644 --- a/src/main/runtime/session-tabs/explicit-terminal-close-pty-stops.ts +++ b/src/main/runtime/session-tabs/explicit-terminal-close-pty-stops.ts @@ -1,6 +1,6 @@ import { OrcaRuntimeWithFocusTerminal } from '../terminal/focus/focus-terminal' import { EXPLICIT_TERMINAL_CLOSE_STOP_TIMEOUT_MS } from '../orca-runtime-core' -import { SSH_PROVIDER_UNREGISTERED_REASON } from '../../../shared/pty-liveness-verdict' +import { SSH_PROVIDER_UNREGISTERED_REASON } from '../../../shared/terminal/pty/lifecycle/pty-liveness-verdict' import { errorMessage } from '../../../shared/error-message' /** How an explicit close's stop of its addressed PTY ended. */ diff --git a/src/main/runtime/session-tabs/explicit-terminal-close-stops.ts b/src/main/runtime/session-tabs/explicit-terminal-close-stops.ts index 2269cf45bb6..434a77dae80 100644 --- a/src/main/runtime/session-tabs/explicit-terminal-close-stops.ts +++ b/src/main/runtime/session-tabs/explicit-terminal-close-stops.ts @@ -1,7 +1,7 @@ import type { WorktreePtyHostFence } from '../worktree-pty-host-fence' import type { RuntimeTerminalClose } from '../../../shared/runtime-types' import type { RuntimePtyTabCloseAuthority } from '../runtime-terminal-state-records' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import type { ResolvedWorktree } from '../runtime-worktree-path-identity' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../shared/layout-owner-switch' import type { LayoutApplyReply } from '../../../shared/workspace-layout/workspace-layout-command-types' diff --git a/src/main/runtime/session-tabs/headless-mobile-session-absorbed-rows.test.ts b/src/main/runtime/session-tabs/headless-mobile-session-absorbed-rows.test.ts index cac2676bc46..b26cc83439a 100644 --- a/src/main/runtime/session-tabs/headless-mobile-session-absorbed-rows.test.ts +++ b/src/main/runtime/session-tabs/headless-mobile-session-absorbed-rows.test.ts @@ -9,7 +9,7 @@ import { type PhoneLayoutView } from '../../../shared/workspace-layout/headless-phone-layout.test-fixture' import { leaf } from '../../../shared/workspace-layout/workspace-layout-session.test-fixture' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { deriveHeadlessLegacyTerminalLeafId } from '../mobile-session-layout-projection' import { OrcaRuntimeService } from '../orca-runtime' diff --git a/src/main/runtime/session-tabs/headless-pane-move-to-new-tab.ts b/src/main/runtime/session-tabs/headless-pane-move-to-new-tab.ts index 90311d8d74d..54008c5feb0 100644 --- a/src/main/runtime/session-tabs/headless-pane-move-to-new-tab.ts +++ b/src/main/runtime/session-tabs/headless-pane-move-to-new-tab.ts @@ -3,13 +3,13 @@ import { OrcaRuntimeWithCloseHeadlessMobileTerminalTab } from './headless-termin import { recordPtySurface, spawnSurfaceClaimSequence } from '../pty-recorded-surface-topology' import { withSelectedTabs } from '../headless-tab-group-selection' import type { RuntimeMobileSessionTabGroup } from '../../../shared/runtime-session-contracts' -import { makePaneKey } from '../../../shared/stable-pane-id' -import { isValidHostTerminalTabId } from '../../../shared/terminal-tab-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' +import { isValidHostTerminalTabId } from '../../../shared/workspace-layout/terminal-tab-id' import { isTerminalLeafMoveRequest, type TerminalLeafMoveRequest, type TerminalLeafMoveResult -} from '../../../shared/terminal-leaf-move' +} from '../../../shared/workspace-layout/terminal-leaf-move' /** Where the client dropped the new tab, in the host's group ids. */ export type MovedPanePlacement = { targetGroupId: string; index?: number } diff --git a/src/main/runtime/session-tabs/headless-tab-properties.ts b/src/main/runtime/session-tabs/headless-tab-properties.ts index e3e58dfccbd..93ffe97062f 100644 --- a/src/main/runtime/session-tabs/headless-tab-properties.ts +++ b/src/main/runtime/session-tabs/headless-tab-properties.ts @@ -1,15 +1,18 @@ import { renameStructuredSessionTab, type SessionTabProps } from './structured-session-tab-rename' import { OrcaRuntimeWithHeadlessPaneMoveToNewTab } from './headless-pane-move-to-new-tab' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { RuntimeMobileSessionTabsSnapshot } from '../../../shared/runtime-session-contracts' import type { RuntimeMobileSessionSnapshotTab } from '../../../shared/runtime-mobile-session-tab-contracts' import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode -} from '../../../shared/terminal-tab-types' +} from '../../../shared/workspace-layout/terminal-tab-types' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../shared/layout-owner-switch' import { cloneTerminalLayoutSnapshot } from '../mobile-session-layout-projection' -import { sameStringRecord, terminalLayoutNodeEqual } from '../../../shared/terminal-layout-equality' +import { + sameStringRecord, + terminalLayoutNodeEqual +} from '../../../shared/workspace-layout/terminal-layout-equality' type HeadlessPaneLayoutEdit = { tabId: string diff --git a/src/main/runtime/session-tabs/headless-terminal-tab-close.ts b/src/main/runtime/session-tabs/headless-terminal-tab-close.ts index 8446eff1c66..35398e5d600 100644 --- a/src/main/runtime/session-tabs/headless-terminal-tab-close.ts +++ b/src/main/runtime/session-tabs/headless-terminal-tab-close.ts @@ -12,9 +12,9 @@ import type { import { parseAppSshPtyId } from '../../../shared/ssh-pty-id' import { buildHeadlessMobileSessionTabGroups } from '../mobile-session-layout-projection' import { paneTitlesForDesktopWindow } from './desktop-pane-title-forwarding' -import { appendRetiredTerminalSurfaceProofs } from '../../../shared/terminal-retirement-proof-ledger' +import { appendRetiredTerminalSurfaceProofs } from '../../../shared/workspace-layout/terminal-retirement-proof-ledger' import type { RuntimePtyWorktreeRecord } from '../runtime-terminal-state-records' -import type { TerminalPaneLayoutNode } from '../../../shared/terminal-tab-types' +import type { TerminalPaneLayoutNode } from '../../../shared/workspace-layout/terminal-tab-types' import type { RuntimeTerminalRename } from '../../../shared/runtime-terminal-contracts' import type { RuntimeSessionTabCloseReason } from '../../../shared/runtime-session-contracts' diff --git a/src/main/runtime/session-tabs/main-layout-renames.ts b/src/main/runtime/session-tabs/main-layout-renames.ts index 699d1063b8b..8b6bc75d38c 100644 --- a/src/main/runtime/session-tabs/main-layout-renames.ts +++ b/src/main/runtime/session-tabs/main-layout-renames.ts @@ -5,7 +5,7 @@ import type { RuntimeTerminalRename, RuntimeTerminalSetPaneTitle } from '../../../shared/runtime-terminal-contracts' -import type { TerminalPaneLayoutNode } from '../../../shared/terminal-tab-types' +import type { TerminalPaneLayoutNode } from '../../../shared/workspace-layout/terminal-tab-types' import type { WindowLayoutCommand } from '../runtime-layout-apply' import type { RuntimePtyWorktreeRecord } from '../runtime-terminal-state-records' import { startedMainTerminalSurfaces } from '../terminal/surface/main-terminal-surfaces' diff --git a/src/main/runtime/session-tabs/mobile-session-hydration.ts b/src/main/runtime/session-tabs/mobile-session-hydration.ts index 3ff62139055..b69f1fc1a03 100644 --- a/src/main/runtime/session-tabs/mobile-session-hydration.ts +++ b/src/main/runtime/session-tabs/mobile-session-hydration.ts @@ -3,7 +3,7 @@ import type { OrcaRuntimeWithStoredMobileSnapshotHasStalePreservedTab as StoredM import type { OrcaRuntimeWithReconcileHeadlessMobileSessionBrowserTabs as ReconcileHeadlessMobileSessionBrowserTabsMethods } from '../session-lifecycle/projection/reconcile-headless-mobile-session-browser-tabs' import type { BrowserWindow } from 'electron' import { RuntimeSessionTabsInventoryPublication } from './session-tabs-inventory-publication' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { getRuntimeBrowserPageRegistry } from '../runtime-browser-page-registry' import { splitWorktreeIdForFilesystem } from '../../../shared/worktree/id' import { buildHeadlessMobileSessionTerminalTabs } from '../mobile-session-terminal-projection' diff --git a/src/main/runtime/session-tabs/mobile-session-membership.ts b/src/main/runtime/session-tabs/mobile-session-membership.ts index 9268175f8cb..b6607f0eed0 100644 --- a/src/main/runtime/session-tabs/mobile-session-membership.ts +++ b/src/main/runtime/session-tabs/mobile-session-membership.ts @@ -3,7 +3,7 @@ import type { OrcaRuntimeWithPruneMobileSessionTabGroupLayout as SessionTabsProj import type { OrcaRuntimeWithGetTerminalInteractiveWait as GetTerminalInteractiveWaitMethods } from '../terminal/wait/terminal-interactive-wait' import { OrcaRuntimeWithPublishPtyBackedMobileSessionTerminal } from './pty-backed-session-publication' import { getRepoIdFromWorktreeId } from '../../../shared/worktree/id' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { hasHostAuthoritativeTerminalMembership } from '../../persistence/terminal-topology/terminal-topology-membership' import type { RuntimeMobileSessionTabsSnapshot, diff --git a/src/main/runtime/session-tabs/mobile-session-preservation.ts b/src/main/runtime/session-tabs/mobile-session-preservation.ts index 378c18c8033..191c3ca1ca1 100644 --- a/src/main/runtime/session-tabs/mobile-session-preservation.ts +++ b/src/main/runtime/session-tabs/mobile-session-preservation.ts @@ -10,7 +10,7 @@ import { mergeMobileSessionSnapshotTabs, mergeMobileSessionTabGroups } from '../mobile-session-tab-merge' -import { terminalLayoutContainsLeaf } from '../../../shared/workspace-session-pane-ownership' +import { terminalLayoutContainsLeaf } from '../../../shared/workspace-session/workspace-session-pane-ownership' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../shared/layout-owner-switch' import { terminalIsOfTab } from '../session-lifecycle/close/closed-tab-terminal' import { getHeadlessMobileSessionGroupId } from '../mobile-session-layout-projection' diff --git a/src/main/runtime/session-tabs/mobile-session-reconciliation.ts b/src/main/runtime/session-tabs/mobile-session-reconciliation.ts index 801a2fb4fe3..a1d4ade9296 100644 --- a/src/main/runtime/session-tabs/mobile-session-reconciliation.ts +++ b/src/main/runtime/session-tabs/mobile-session-reconciliation.ts @@ -2,7 +2,7 @@ import type { OrcaRuntimeWithMergePreservedHeadlessMobileSessionTabs as MergePre import type { OrcaRuntimeWithStoredMobileSnapshotHasStalePreservedTab as StoredMobileSnapshotHasStalePreservedTabMethods } from './mobile-session-publication-preservation' import { OrcaRuntimeWithWriteOrchestrationPointerPty } from '../orchestration/terminal-authority/write-orchestration-pointer-pty' import type { RuntimeMobileSessionTabsSnapshot } from '../../../shared/runtime-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { getMobileSessionSnapshotTabIdentityKeys } from '../mobile-session-tab-merge' export abstract class OrcaRuntimeWithSyncMobileSessionTabs extends OrcaRuntimeWithWriteOrchestrationPointerPty { diff --git a/src/main/runtime/session-tabs/paired-host-terminal-close.ts b/src/main/runtime/session-tabs/paired-host-terminal-close.ts index 6300836648f..2d8f237b93f 100644 --- a/src/main/runtime/session-tabs/paired-host-terminal-close.ts +++ b/src/main/runtime/session-tabs/paired-host-terminal-close.ts @@ -1,7 +1,7 @@ import { parseRemoteRuntimePtyId } from '../../../shared/remote-runtime/remote-runtime-pty-id' import type { RuntimeTerminalClose } from '../../../shared/runtime-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' -import { findUnifiedTerminalTabs } from '../../../shared/workspace-session-terminal-tab-close' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' +import { findUnifiedTerminalTabs } from '../../../shared/workspace-session/workspace-session-terminal-tab-close' const PAIRED_HOST_TERMINAL_CLOSE_TIMEOUT_MS = 15_000 diff --git a/src/main/runtime/session-tabs/renderer-session-terminal-rescue.ts b/src/main/runtime/session-tabs/renderer-session-terminal-rescue.ts index a794319ba15..385f3dbbf82 100644 --- a/src/main/runtime/session-tabs/renderer-session-terminal-rescue.ts +++ b/src/main/runtime/session-tabs/renderer-session-terminal-rescue.ts @@ -1,6 +1,6 @@ import type { OrcaRuntimeWithWaitForLeafPtyId as WaitForLeafPtyIdMethods } from '../terminal/view/renderer-terminal-snapshot' import { OrcaRuntimeWithWaitForMobileTerminalSurface } from '../terminal/view/mobile-terminal-surface' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import type { RuntimePtyWorktreeRecord } from '../runtime-terminal-state-records' import type { RuntimeMobileSessionCreateTerminalResult } from '../../../shared/runtime-types' import { worktreeIdsEqual } from '../../../shared/worktree/id' diff --git a/src/main/runtime/session-tabs/structured-session-tab-presentation.ts b/src/main/runtime/session-tabs/structured-session-tab-presentation.ts index 0af30bbffb7..cdc254c577e 100644 --- a/src/main/runtime/session-tabs/structured-session-tab-presentation.ts +++ b/src/main/runtime/session-tabs/structured-session-tab-presentation.ts @@ -12,7 +12,7 @@ import { import { getStructuredAgentSessionHost } from '../../native-chat/agent-session-wire/structured-agent-session-registry' import { structuredAgentSessionTabCloseCause } from '../agent-session/structured-agent-session-tab-close-cause' import { isReopenedChatTabId } from '../../../shared/agent-session/view/structured-agent-session-host-tab-id' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { savedSessionId } from '../saved-structured-agent-session-restoration' import type { QueuedChatTabChange } from '../agent-session-tab-layout-queue' diff --git a/src/main/runtime/session-tabs/structured-session-tab-restoration.ts b/src/main/runtime/session-tabs/structured-session-tab-restoration.ts index f090dfeb72c..ea8bfc68a41 100644 --- a/src/main/runtime/session-tabs/structured-session-tab-restoration.ts +++ b/src/main/runtime/session-tabs/structured-session-tab-restoration.ts @@ -28,7 +28,7 @@ import type { TuiAgent } from '../../../shared/agent-launch/catalog/tui-agent' import type { AgentLaunchRuntime } from '../../../shared/agent-launch/startup/agent-launch-runtime' import type { TerminalWorkspaceLaunchScope } from '../runtime-legacy-worker-terminal-recovery-types' import { parseAppSshPtyId } from '../../../shared/ssh-pty-id' -import type { PtyProcessInspection } from '../../providers/pty-process-inspection' +import type { TerminalProcessInspection as PtyProcessInspection } from '../../../shared/terminal/pty/lifecycle/terminal-process-inspection' export type AgentLaunchScope = Parameters< OrcaRuntimeWithRestoreStructuredAgentSessionTabsOnce['getAgentLaunchPlatformForWorkspace'] diff --git a/src/main/runtime/sidebar-inputs/desktop-sidebar-facts.ts b/src/main/runtime/sidebar-inputs/desktop-sidebar-facts.ts index e277877a37a..23f1677ec39 100644 --- a/src/main/runtime/sidebar-inputs/desktop-sidebar-facts.ts +++ b/src/main/runtime/sidebar-inputs/desktop-sidebar-facts.ts @@ -14,7 +14,7 @@ import { getHostDisplayLabelOverrides } from '../../../shared/host-setting-overr import type { SshConnectionState, SshTarget } from '../../../shared/ssh-types' import type { WslHostStatus } from '../../../shared/wsl-host-types' import type { PersistedUIState } from '../../../shared/persisted-ui-state-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { folderWorkspaceKey } from '../../../shared/workspace-scope' import { readAllWorktreeMetaForHost } from '../../persistence/host-qualified-worktree-meta' import type { RuntimeStore } from '../runtime-store-contract' diff --git a/src/main/runtime/sidebar-inputs/orca-runtime-workspace-activity-facts.ts b/src/main/runtime/sidebar-inputs/orca-runtime-workspace-activity-facts.ts index f59184a015f..6ae420dde03 100644 --- a/src/main/runtime/sidebar-inputs/orca-runtime-workspace-activity-facts.ts +++ b/src/main/runtime/sidebar-inputs/orca-runtime-workspace-activity-facts.ts @@ -1,5 +1,5 @@ import { OrcaRuntimeWithAgentTransitions } from '../orca-runtime-agent-transitions' -import type { PtyLivenessVerdict } from '../../../shared/pty-liveness-verdict' +import type { PtyLivenessVerdict } from '../../../shared/terminal/pty/lifecycle/pty-liveness-verdict' import type { WorkspaceActivityFactsSnapshot, WorkspaceTerminalLiveness diff --git a/src/main/runtime/sidebar-inputs/workspace-viewers.ts b/src/main/runtime/sidebar-inputs/workspace-viewers.ts index 4a4124fc82b..4224d6e29e9 100644 --- a/src/main/runtime/sidebar-inputs/workspace-viewers.ts +++ b/src/main/runtime/sidebar-inputs/workspace-viewers.ts @@ -1,4 +1,4 @@ -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { worktreeIdentityKey } from '../../../shared/worktree/id' import type { ClientWorkspaceView } from '../../../shared/rpc-contract/client-workspace-view-params' diff --git a/src/main/runtime/structured-worker-identity.test.ts b/src/main/runtime/structured-worker-identity.test.ts index c6f2d87ffcf..e9a3045a64e 100644 --- a/src/main/runtime/structured-worker-identity.test.ts +++ b/src/main/runtime/structured-worker-identity.test.ts @@ -1,6 +1,6 @@ import { agentSessionConversationView } from '../../shared/agent-session/lifecycle/agent-session-conversation-view' import { describe, expect, it, beforeEach } from 'vitest' -import { isTerminalLeafId, parsePaneKey } from '../../shared/stable-pane-id' +import { isTerminalLeafId, parsePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { structuredAgentSessionPaneKey, structuredAgentSessionTabId diff --git a/src/main/runtime/structured-worker-identity.ts b/src/main/runtime/structured-worker-identity.ts index 2b1fc94a747..4213a2bb6b4 100644 --- a/src/main/runtime/structured-worker-identity.ts +++ b/src/main/runtime/structured-worker-identity.ts @@ -11,7 +11,11 @@ import { structuredAgentSessionPaneKey, structuredAgentSessionTabId } from '../../shared/agent-session/view/structured-agent-session-projection' -import { isTerminalLeafId, makePaneKey, parsePaneKey } from '../../shared/stable-pane-id' +import { + isTerminalLeafId, + makePaneKey, + parsePaneKey +} from '../../shared/workspace-layout/stable-pane-id' import { isOrcaSessionId, type OrcaSessionId } from '../../shared/orca-session-address' import type { TuiAgent } from '../../shared/agent-launch/catalog/tui-agent' import { diff --git a/src/main/runtime/terminal-agent-fenced-keys.ts b/src/main/runtime/terminal-agent-fenced-keys.ts index 2919f033136..65341f7e1c0 100644 --- a/src/main/runtime/terminal-agent-fenced-keys.ts +++ b/src/main/runtime/terminal-agent-fenced-keys.ts @@ -1,4 +1,4 @@ -import { readTerminalSendAcknowledgment } from '../../shared/terminal-send-acknowledgment' +import { readTerminalSendAcknowledgment } from '../../shared/terminal/pty/lifecycle/terminal-send-acknowledgment' import type { OrcaRuntimeService } from './orca-runtime' /** `refused` with no `error` property: the fence passed and the host then refused the write. */ diff --git a/src/main/runtime/terminal-agent-prompt-answer.test.ts b/src/main/runtime/terminal-agent-prompt-answer.test.ts index bb069ec3408..66a5b0a2856 100644 --- a/src/main/runtime/terminal-agent-prompt-answer.test.ts +++ b/src/main/runtime/terminal-agent-prompt-answer.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from 'vitest' import type { AgentStatusIpcPayload } from '../../shared/agent-status/contracts/agent-status-ipc-payload' -import type { WriteSettlement } from '../../shared/pty-write-settlement' +import type { WriteSettlement } from '../../shared/terminal/pty/lifecycle/pty-write-settlement' import type { RuntimeTerminalSend } from '../../shared/runtime-terminal-send-contract' import { TerminalAgentPromptAnswers } from './terminal-agent-prompt-answer' diff --git a/src/main/runtime/terminal-create-closed-tab-durability.test.ts b/src/main/runtime/terminal-create-closed-tab-durability.test.ts index 565a793549e..69ba6169845 100644 --- a/src/main/runtime/terminal-create-closed-tab-durability.test.ts +++ b/src/main/runtime/terminal-create-closed-tab-durability.test.ts @@ -7,7 +7,7 @@ import { getDefaultWorkspaceSession } from '../../shared/constants' import { CLOSED_TERMINAL_TAB_TOMBSTONE_TTL_MS, hasClosedTerminalTabRecord -} from '../../shared/closed-terminal-tab-tombstones' +} from '../../shared/workspace-layout/closed-terminal-tab-tombstones' import type { ExecutionHostId } from '../../shared/execution-host' import { Store } from '../persistence/loading-store/store' import { closeTestStores, createSqliteTestStore } from '../persistence/persistence-test-harness' diff --git a/src/main/runtime/terminal-foreground-group.ts b/src/main/runtime/terminal-foreground-group.ts index c52bfc75a0e..28343578f29 100644 --- a/src/main/runtime/terminal-foreground-group.ts +++ b/src/main/runtime/terminal-foreground-group.ts @@ -1,6 +1,6 @@ import { recognizeAgentProcessFromCommandLine } from '../../shared/agent-status/process/agent-process-recognition' import { unreadableArgvName, type ProcessTableRow } from '../../shared/process-table-snapshot' -import { isShellProcess } from '../../shared/shell-process-detection' +import { isShellProcess } from '../../shared/agent-status/process/shell-process-detection' import type { TuiAgent } from '../../shared/agent-launch/catalog/tui-agent' export { readTerminalProcessRows } from '../pty/process-retirement/terminal-process-rows' diff --git a/src/main/runtime/terminal-intentional-stop-exit.test.ts b/src/main/runtime/terminal-intentional-stop-exit.test.ts index caf90a61576..2820964970c 100644 --- a/src/main/runtime/terminal-intentional-stop-exit.test.ts +++ b/src/main/runtime/terminal-intentional-stop-exit.test.ts @@ -3,7 +3,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import type { BrowserWindow } from 'electron' import { afterEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { Store } from '../persistence/loading-store/store' import { ProfileStateSqliteAuthority } from '../persistence/profile-state/profile-state-sqlite-authority' import { wirePtyIpcSession } from '../ipc/pty/delivery/wire-session' diff --git a/src/main/runtime/terminal-leaf-tab-resolution.test.ts b/src/main/runtime/terminal-leaf-tab-resolution.test.ts index dae0a099e4c..5d1e5e01b8a 100644 --- a/src/main/runtime/terminal-leaf-tab-resolution.test.ts +++ b/src/main/runtime/terminal-leaf-tab-resolution.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest' -import type { TerminalLayoutSnapshot } from '../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { TerminalLayoutSnapshot } from '../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { findTerminalTabIdForLeaf } from '../persistence/terminal-topology/terminal-topology-membership' function layout(...leafIds: string[]): TerminalLayoutSnapshot { diff --git a/src/main/runtime/terminal-list-execution-host-scope.spec.ts b/src/main/runtime/terminal-list-execution-host-scope.spec.ts index 59f8fa36f2c..38a787fb487 100644 --- a/src/main/runtime/terminal-list-execution-host-scope.spec.ts +++ b/src/main/runtime/terminal-list-execution-host-scope.spec.ts @@ -1,7 +1,7 @@ import { describe, expect, it, vi } from 'vitest' import { OrcaRuntimeService } from './orca-runtime' import { getDefaultWorkspaceSession } from '../../shared/constants' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { folderWorkspaceKey } from '../../shared/workspace-scope' import type { FolderWorkspace } from '../../shared/folder-workspaces/folder-workspace-types' import { type ExecutionHostId, LOCAL_EXECUTION_HOST_ID } from '../../shared/execution-host' diff --git a/src/main/runtime/terminal-list-pending-pty-registration.test.ts b/src/main/runtime/terminal-list-pending-pty-registration.test.ts index 0645d90d5ad..4da29839fb4 100644 --- a/src/main/runtime/terminal-list-pending-pty-registration.test.ts +++ b/src/main/runtime/terminal-list-pending-pty-registration.test.ts @@ -1,7 +1,7 @@ import { classifyTerminalCreationFailure, readTerminalStartFailure -} from '../../shared/terminal-start-failure' +} from '../../shared/terminal/pty/lifecycle/terminal-start-failure' import { afterEach, describe, expect, it, vi } from 'vitest' import { spawnWorktreeTarget } from '../../shared/worktree/host-qualified-identity' import { diff --git a/src/main/runtime/terminal-list-stale-leaf-liveness.spec.ts b/src/main/runtime/terminal-list-stale-leaf-liveness.spec.ts index 1d2013e2f75..ff1249c8177 100644 --- a/src/main/runtime/terminal-list-stale-leaf-liveness.spec.ts +++ b/src/main/runtime/terminal-list-stale-leaf-liveness.spec.ts @@ -1,7 +1,7 @@ import { describe, expect, it, vi } from 'vitest' import { OrcaRuntimeService } from './orca-runtime' import { getDefaultWorkspaceSession } from '../../shared/constants' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' export function registerTerminalListStaleLeafLivenessTests(): void { // Graph ptyId alone cannot prove liveness; controller inventory must demote restored leaves no provider owns (#11959). diff --git a/src/main/runtime/terminal-list-surface-lost-orphan.spec.ts b/src/main/runtime/terminal-list-surface-lost-orphan.spec.ts index 9b5db0c92b8..59f705fad97 100644 --- a/src/main/runtime/terminal-list-surface-lost-orphan.spec.ts +++ b/src/main/runtime/terminal-list-surface-lost-orphan.spec.ts @@ -1,9 +1,12 @@ import { describe, expect, it, vi } from 'vitest' import { OrcaRuntimeService } from './orca-runtime' import { getDefaultWorkspaceSession } from '../../shared/constants' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../shared/terminal-tab-types' -import { makePaneKey } from '../../shared/stable-pane-id' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../shared/workspace-layout/terminal-tab-types' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { spawnSurfaceClaimSequence } from './pty-recorded-surface-topology' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../shared/layout-owner-switch' import { bindPaneFirst } from './bind-first-pane.test-fixture' diff --git a/src/main/runtime/terminal-restore-record-seed.test.ts b/src/main/runtime/terminal-restore-record-seed.test.ts index c80e4a8e69e..cef670c2ec4 100644 --- a/src/main/runtime/terminal-restore-record-seed.test.ts +++ b/src/main/runtime/terminal-restore-record-seed.test.ts @@ -1,8 +1,8 @@ import { describe, expect, it, vi, afterEach } from 'vitest' import { OrcaRuntimeService } from './orca-runtime' import { getDefaultWorkspaceSession } from '../../shared/constants' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' -import { makePaneKey } from '../../shared/stable-pane-id' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../shared/layout-owner-switch' import { bindPaneFirst } from './bind-first-pane.test-fixture' import type { diff --git a/src/main/runtime/terminal-send-stale-leaf-liveness.test.ts b/src/main/runtime/terminal-send-stale-leaf-liveness.test.ts index 2605c700d51..91e7f312731 100644 --- a/src/main/runtime/terminal-send-stale-leaf-liveness.test.ts +++ b/src/main/runtime/terminal-send-stale-leaf-liveness.test.ts @@ -3,7 +3,7 @@ import { settledWriteStub } from '../providers/settled-pty-write-stub' import { describe, expect, it, vi } from 'vitest' import { OrcaRuntimeService } from './orca-runtime' import { getDefaultWorkspaceSession } from '../../shared/constants' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' // Stale graphs can advertise writable PTYs no provider owns. Refuse only controller-proven absence; unknown restored-daemon liveness still permits writes. diff --git a/src/main/runtime/terminal-start-failure-readiness.test.ts b/src/main/runtime/terminal-start-failure-readiness.test.ts index 353a3a9c664..bc187577cf0 100644 --- a/src/main/runtime/terminal-start-failure-readiness.test.ts +++ b/src/main/runtime/terminal-start-failure-readiness.test.ts @@ -7,7 +7,7 @@ import { import { formatTerminalStartFailure, readTerminalStartFailure -} from '../../shared/terminal-start-failure' +} from '../../shared/terminal/pty/lifecycle/terminal-start-failure' vi.mock('electron', () => ({ BrowserWindow: { fromId: vi.fn(() => null) }, diff --git a/src/main/runtime/terminal-surface-close.test.ts b/src/main/runtime/terminal-surface-close.test.ts index 2e53fab9f52..cf9da663ae7 100644 --- a/src/main/runtime/terminal-surface-close.test.ts +++ b/src/main/runtime/terminal-surface-close.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { TerminalLayoutSnapshot } from '../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../shared/workspace-layout/terminal-tab-types' import { resolveTerminalCloseTarget, type TerminalCloseLayoutCopies diff --git a/src/main/runtime/terminal-surface-close.ts b/src/main/runtime/terminal-surface-close.ts index 2864144ce7e..199870374f4 100644 --- a/src/main/runtime/terminal-surface-close.ts +++ b/src/main/runtime/terminal-surface-close.ts @@ -1,18 +1,18 @@ import type { RuntimeSessionTabCloseReason } from '../../shared/runtime-session-contracts' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { hasClosedTerminalTabRecord, recordClosedTerminalTabTombstone -} from '../../shared/closed-terminal-tab-tombstones' +} from '../../shared/workspace-layout/closed-terminal-tab-tombstones' import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode -} from '../../shared/terminal-tab-types' -import type { TerminalSurfaceCloseTarget } from '../../shared/terminal-surface-close-target' +} from '../../shared/workspace-layout/terminal-tab-types' +import type { TerminalSurfaceCloseTarget } from '../../shared/workspace-layout/terminal-surface-close-target' import { closeTerminalTabInWorkspaceSession, type WorkspaceSessionTerminalTabCloseResult -} from '../../shared/workspace-session-terminal-tab-close' +} from '../../shared/workspace-session/workspace-session-terminal-tab-close' import { retireTerminalSurfaceFromPersistence } from './mobile-session-terminal-persistence-retirement' import { advanceTerminalTopologyRevision } from '../persistence/terminal-topology/terminal-topology-membership' import type { DurableProfileStateMutation } from '../persistence/loading-store/store-runtime-state' diff --git a/src/main/runtime/terminal-view-attribute-store.ts b/src/main/runtime/terminal-view-attribute-store.ts index f482a96b78b..806cb4025ab 100644 --- a/src/main/runtime/terminal-view-attribute-store.ts +++ b/src/main/runtime/terminal-view-attribute-store.ts @@ -16,7 +16,7 @@ import { import { colorQueryReplyColorsEqual, normalizeColorQueryReplyColors -} from '../../shared/pty-owner-color-query-colors' +} from '../../shared/terminal/pty/ingress/pty-owner-color-query-colors' // IPC stores shared attributes; runtime emulators read them at reply time. let currentAttributes: TerminalViewAttributes | null = null diff --git a/src/main/runtime/terminal-wait-detection.ts b/src/main/runtime/terminal-wait-detection.ts index 0056e889ee8..15c0511fb2c 100644 --- a/src/main/runtime/terminal-wait-detection.ts +++ b/src/main/runtime/terminal-wait-detection.ts @@ -1,5 +1,5 @@ import { isQoderComposerReady } from './qoder-terminal-readiness' -import { memoizeTitleClassification } from '../../shared/terminal-title-classification-memo' +import { memoizeTitleClassification } from '../../shared/agent-status/title/terminal-title-classification-memo' import { detectAgentStatusFromTitle } from '../../shared/agent-status/title/agent-title-status' import type { AgentStatus } from '../../shared/agent-status/title/agent-title-core' import type { RuntimeTerminalWaitBlockedReason } from '../../shared/runtime-types' diff --git a/src/main/runtime/terminal-wait-results.ts b/src/main/runtime/terminal-wait-results.ts index 14fa9b60fdb..012b23c5560 100644 --- a/src/main/runtime/terminal-wait-results.ts +++ b/src/main/runtime/terminal-wait-results.ts @@ -4,7 +4,7 @@ import type { RuntimeTerminalWaitBlockedReason, RuntimeTerminalWaitCondition } from '../../shared/runtime-types' -import type { TerminalExitCause } from '../../shared/terminal-exit-cause' +import type { TerminalExitCause } from '../../shared/terminal/pty/lifecycle/terminal-exit-cause' type ReadonlyTerminalStateRecord = { connected: boolean diff --git a/src/main/runtime/terminal/adoption/adopt-terminal-orphans-from-inventory.ts b/src/main/runtime/terminal/adoption/adopt-terminal-orphans-from-inventory.ts index 8f9a3f9a0ca..2493f3a050b 100644 --- a/src/main/runtime/terminal/adoption/adopt-terminal-orphans-from-inventory.ts +++ b/src/main/runtime/terminal/adoption/adopt-terminal-orphans-from-inventory.ts @@ -19,7 +19,7 @@ import { getLocalProjectWorktreeGitOptions } from '../../../workspaces/execution import { adoptRuntimeTerminalOrphansFromInventory } from '../../runtime-terminal-orphan-adoption' import { getRepoIdFromWorktreeId } from '../../../../shared/worktree/id' import { getLatestPtyTitle } from '../../runtime-worktree-status-projection' -import type { PtyLivenessVerdict } from '../../../../shared/pty-liveness-verdict' +import type { PtyLivenessVerdict } from '../../../../shared/terminal/pty/lifecycle/pty-liveness-verdict' export abstract class OrcaRuntimeWithAdoptTerminalOrphansFromInventory extends OrcaRuntimeWithSubscribeToTerminalResize { protected abstract issueHandle( diff --git a/src/main/runtime/terminal/adoption/unshown-live-terminal-placement.ts b/src/main/runtime/terminal/adoption/unshown-live-terminal-placement.ts index 440ee1e64ed..820bc481d39 100644 --- a/src/main/runtime/terminal/adoption/unshown-live-terminal-placement.ts +++ b/src/main/runtime/terminal/adoption/unshown-live-terminal-placement.ts @@ -3,12 +3,12 @@ import { randomUUID } from 'node:crypto' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../../shared/constants' import type { ExecutionHostId } from '../../../../shared/execution-host' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import type { CommandOf, LayoutApplyReply } from '../../../../shared/workspace-layout/workspace-layout-command-types' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import type { RuntimePtyWorktreeRecord } from '../../runtime-terminal-state-records' import type { PtyPaneOf, PtyPaneSource } from '../surface/pty-pane-query' diff --git a/src/main/runtime/terminal/driver/terminal-driver-resources.ts b/src/main/runtime/terminal/driver/terminal-driver-resources.ts index 18d943fbc6e..53352d3048d 100644 --- a/src/main/runtime/terminal/driver/terminal-driver-resources.ts +++ b/src/main/runtime/terminal/driver/terminal-driver-resources.ts @@ -6,13 +6,13 @@ import { } from '../../desktop-browser-bridge/remote-cli-browser-scope' import type { ResolvedWorktree } from '../../runtime-worktree-path-identity' import type { ExecutionHostId } from '../../../../shared/execution-host' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import type { RuntimeAccountController } from '../../runtime-account-controller' import type { BrowserNetworkExecutionHost } from '../../../../shared/browser/client-hosting/browser-network-execution-host' import type { BrowserWindow } from 'electron' import type { BrowserSessionTabSelectionOptions } from '../../browser-tab-create-publication' import type { RuntimeStore } from '../../runtime-store-contract' -import type { PtyLivenessVerdict } from '../../../../shared/pty-liveness-verdict' +import type { PtyLivenessVerdict } from '../../../../shared/terminal/pty/lifecycle/pty-liveness-verdict' import type { RuntimeTerminalClose, RuntimeTerminalRead diff --git a/src/main/runtime/terminal/focus/focus-terminal.ts b/src/main/runtime/terminal/focus/focus-terminal.ts index 189db51faff..6a42a28ca2f 100644 --- a/src/main/runtime/terminal/focus/focus-terminal.ts +++ b/src/main/runtime/terminal/focus/focus-terminal.ts @@ -3,8 +3,8 @@ import type { RuntimeTerminalFocus } from '../../../../shared/runtime-types' import type { RuntimeTerminalReveal, TerminalPaneRevealTarget -} from '../../../../shared/terminal-pane-reveal' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +} from '../../../../shared/workspace-layout/terminal-pane-reveal' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { getLatestPtyTitle } from '../../runtime-worktree-status-projection' import { copySleepingAgentLaunchConfig } from '../../runtime-agent-launch-resolution' import type { OrcaRuntimeWithBuildPtyTerminalSummary as PtyTerminalSummaryMethods } from '../query/pty-terminal-summary' diff --git a/src/main/runtime/terminal/identity/pty-worktree-record.ts b/src/main/runtime/terminal/identity/pty-worktree-record.ts index 80739090019..2ea990b573d 100644 --- a/src/main/runtime/terminal/identity/pty-worktree-record.ts +++ b/src/main/runtime/terminal/identity/pty-worktree-record.ts @@ -7,7 +7,7 @@ import { cloneAgentSessionOwnerBinding } from '../../../../shared/claimed-agent- import { advertisedUrlWatcher } from '../../../ports/advertised-url-watcher' import { maxTimestamp } from '../../runtime-worktree-status-projection' import type { RuntimeSyncedLeaf } from '../../../../shared/runtime-types' -import { isTerminalLeafId, makePaneKey } from '../../../../shared/stable-pane-id' +import { isTerminalLeafId, makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { inferWorktreeIdFromPtyId } from '../../runtime-worktree-path-identity' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../../shared/layout-owner-switch' import { diff --git a/src/main/runtime/terminal/identity/terminal-identity-source.test.ts b/src/main/runtime/terminal/identity/terminal-identity-source.test.ts index 45121ee9d3e..5703da8691f 100644 --- a/src/main/runtime/terminal/identity/terminal-identity-source.test.ts +++ b/src/main/runtime/terminal/identity/terminal-identity-source.test.ts @@ -6,7 +6,7 @@ import { TEST_WORKTREE_ID } from '../../orca-runtime-test-fixtures.spec' import { recordPtySurface, forgetPtySurface } from '../../pty-recorded-surface-topology' -import type { TerminalLeafMoveResult } from '../../../../shared/terminal-leaf-move' +import type { TerminalLeafMoveResult } from '../../../../shared/workspace-layout/terminal-leaf-move' it('retires before dependent callbacks, keeps connected output idle and preserves partial writes when a callback fails', () => { const f = identityFixture() diff --git a/src/main/runtime/terminal/input/terminal-input-dispatch.ts b/src/main/runtime/terminal/input/terminal-input-dispatch.ts index 22e2288f7de..dd9f9aff107 100644 --- a/src/main/runtime/terminal/input/terminal-input-dispatch.ts +++ b/src/main/runtime/terminal/input/terminal-input-dispatch.ts @@ -1,6 +1,6 @@ import { agentPromptObservationSignal } from './agent-prompt-signals' import type { RuntimeTerminalWriteOptions } from '../../runtime-terminal-writer' -import type { WriteSettlement } from '../../../../shared/pty-write-settlement' +import type { WriteSettlement } from '../../../../shared/terminal/pty/lifecycle/pty-write-settlement' import type { RuntimeLeafRecord } from '../../runtime-terminal-state-records' import type { RuntimeTerminalPromptDelivery } from '../../../../shared/runtime-terminal-send-contract' import { OrcaRuntimeWithResolveTerminalPane } from '../recovery/resolve-terminal-pane' diff --git a/src/main/runtime/terminal/launch/mobile-terminal-chat-fork-create.ts b/src/main/runtime/terminal/launch/mobile-terminal-chat-fork-create.ts index df28648b14c..e1961ddbcf1 100644 --- a/src/main/runtime/terminal/launch/mobile-terminal-chat-fork-create.ts +++ b/src/main/runtime/terminal/launch/mobile-terminal-chat-fork-create.ts @@ -18,7 +18,7 @@ import { rendererPublicationThrottle } from '../../../window/renderer-publicatio import { PROJECT_RUNTIME_REPAIR_REQUIRED_CODE } from '../../../../shared/project-runtime-repair-message' import { OrchestrationError } from '../../orchestration/orchestration-error' import { LOCAL_EXECUTION_HOST_ID } from '../../../../shared/execution-host' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import { loadWorkspaceLayoutWithoutReport } from '../../../../shared/workspace-layout/workspace-layout-load' import { nameBasedLoadContext } from '../../../../shared/workspace-layout/workspace-layout-minted-ids' import { resolveSessionTabRow } from '../../../../shared/workspace-layout/old-client/old-client-session-tab-rows' diff --git a/src/main/runtime/terminal/launch/mobile-terminal-owned-create.ts b/src/main/runtime/terminal/launch/mobile-terminal-owned-create.ts index 2958de89164..94e46e12830 100644 --- a/src/main/runtime/terminal/launch/mobile-terminal-owned-create.ts +++ b/src/main/runtime/terminal/launch/mobile-terminal-owned-create.ts @@ -11,7 +11,7 @@ import type { OwnedMobileTerminalCreateOptions } from './mobile-terminal-create' import { randomUUID } from 'node:crypto' import { copySleepingAgentLaunchConfig } from '../../runtime-agent-launch-resolution' import { deriveRemoteRuntimeTerminalCreateHandle } from '../../remote-runtime-terminal-create-identity' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { placeCreatedSessionTab } from '../../../../shared/session-tab-placement' import { insertTabIdIntoOrder } from '../../../../shared/workspace-layout/tab-order' import type { OrcaRuntimeWithBuildPtyTerminalSummary as PtyTerminalSummaryMethods } from '../query/pty-terminal-summary' diff --git a/src/main/runtime/terminal/launch/terminal-create.ts b/src/main/runtime/terminal/launch/terminal-create.ts index 1f45c9062eb..c35dc07388a 100644 --- a/src/main/runtime/terminal/launch/terminal-create.ts +++ b/src/main/runtime/terminal/launch/terminal-create.ts @@ -16,6 +16,7 @@ import { agentLaunchTokenFor, withAgentLaunchToken } from '../../../agent-launch import { seedPtyLaunchTitle } from './pty-launch-title' import { migratedPaneRestoreHint } from '../../migrated-pane-restore-cwd' import { paneSize, resolvePtyFirstSize } from '../../../ipc/pty/pty-first-size' +import * as dependenciesOwner1 from '../../../../shared/workspace-layout/stable-pane-id' export abstract class OrcaRuntimeWithCreateTerminal extends OrcaRuntimeWithTerminalCreateDeduplication { protected abstract paneStartStatusArgs: dependencies.PaneStartArgsOf @@ -217,7 +218,7 @@ export abstract class OrcaRuntimeWithCreateTerminal extends OrcaRuntimeWithTermi }) if (launch.surface) { ;({ terminalHandle: preAllocatedHandle, tabId, leafId } = launch.surface) - paneKey = dependencies.makePaneKey(tabId, leafId) + paneKey = dependenciesOwner1.makePaneKey(tabId, leafId) } this.assertCreatedPtyRegistrationAllowed(result) // Provider reattachment still needs this runtime's handle and workspace binding. diff --git a/src/main/runtime/terminal/launch/terminal-split-in-main.ts b/src/main/runtime/terminal/launch/terminal-split-in-main.ts index ef3ecff8195..7d6a917e65b 100644 --- a/src/main/runtime/terminal/launch/terminal-split-in-main.ts +++ b/src/main/runtime/terminal/launch/terminal-split-in-main.ts @@ -7,10 +7,10 @@ import { recordPtySurface, spawnSurfaceClaimSequence } from '../../pty-recorded- import { runtimeSplitPlacement } from '../../runtime-terminal-spawn-placement' import { spawnInAdmittedPane } from '../../runtime-pane-admission' import { resolvePtyFirstSize, type PtyGridSize } from '../../../ipc/pty/pty-first-size' -import { isTerminalLeafId, makePaneKey } from '../../../../shared/stable-pane-id' +import { isTerminalLeafId, makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { randomUUID } from 'node:crypto' import { paneStartFailure } from '../../pane-start-statuses' -import { collectLeafIds } from '../../../../shared/terminal-pane-layout-tree' +import { collectLeafIds } from '../../../../shared/workspace-layout/terminal-pane-layout-tree' export type SplitPaneSource = { worktreeId: string; tabId: string; leafId: string } diff --git a/src/main/runtime/terminal/launch/terminal-split-retry.test.ts b/src/main/runtime/terminal/launch/terminal-split-retry.test.ts index 8bb213db183..ce6fd7f9e9e 100644 --- a/src/main/runtime/terminal/launch/terminal-split-retry.test.ts +++ b/src/main/runtime/terminal/launch/terminal-split-retry.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { OrcaRuntimeService } from '../../orca-runtime' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../../shared/layout-owner-switch' -import { TerminalSplitOutcomeError } from '../../../../shared/terminal-split-outcome' +import { TerminalSplitOutcomeError } from '../../../../shared/workspace-layout/terminal-split-outcome' const WORKTREE_ID = 'repo-1::/workspace' const TAB_ID = 'tab-1' diff --git a/src/main/runtime/terminal/launch/terminal-split-retry.ts b/src/main/runtime/terminal/launch/terminal-split-retry.ts index 248280f4bde..dd76d6cf6d3 100644 --- a/src/main/runtime/terminal/launch/terminal-split-retry.ts +++ b/src/main/runtime/terminal/launch/terminal-split-retry.ts @@ -1,5 +1,5 @@ import { BoundedMap } from '../../../../shared/bounded-map' -import { TerminalSplitOutcomeError } from '../../../../shared/terminal-split-outcome' +import { TerminalSplitOutcomeError } from '../../../../shared/workspace-layout/terminal-split-outcome' import { SPLIT_PANE_WAIT_TIMEOUT_MESSAGE } from './terminal-split-wait-timeout' /** Where main asked the window to split; a retry answers from it without asking again. */ diff --git a/src/main/runtime/terminal/launch/terminal-split-source-authority.ts b/src/main/runtime/terminal/launch/terminal-split-source-authority.ts index 75b74cb56f7..b7dbfcc1107 100644 --- a/src/main/runtime/terminal/launch/terminal-split-source-authority.ts +++ b/src/main/runtime/terminal/launch/terminal-split-source-authority.ts @@ -1,8 +1,8 @@ import type { TerminalIdentityReadContext } from '../query/terminal-identity-read-context' import { OrcaRuntimeWithSplitPaneInMain } from './terminal-split-in-main' import { resolveTerminalSessionWorktreeId } from '../../runtime-worktree-path-identity' -import { makePaneKey } from '../../../../shared/stable-pane-id' -import { terminalLayoutContainsLeaf } from '../../../../shared/workspace-session-pane-ownership' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' +import { terminalLayoutContainsLeaf } from '../../../../shared/workspace-session/workspace-session-pane-ownership' import type { AgentTeamsTmuxCompatRequest, AgentTeamsTmuxCompatResponse diff --git a/src/main/runtime/terminal/launch/terminal-split-surface.ts b/src/main/runtime/terminal/launch/terminal-split-surface.ts index 56fc6813d0e..e8487ab609b 100644 --- a/src/main/runtime/terminal/launch/terminal-split-surface.ts +++ b/src/main/runtime/terminal/launch/terminal-split-surface.ts @@ -2,7 +2,7 @@ import { OrcaRuntimeWithSplitTerminal } from './terminal-split' import type { RuntimePtyWorktreeRecord } from '../../runtime-terminal-state-records' import type { TerminalPaneSplitSource } from '../../../../shared/feature-education-telemetry' import type { RuntimeTerminalSplit } from '../../../../shared/runtime-types' -import { makePaneKey, parsePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey, parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { recordPtySurface, spawnSurfaceClaimSequence } from '../../pty-recorded-surface-topology' import { randomUUID } from 'node:crypto' import { runtimeSplitPlacement } from '../../runtime-terminal-spawn-placement' diff --git a/src/main/runtime/terminal/launch/terminal-workspace-scope.ts b/src/main/runtime/terminal/launch/terminal-workspace-scope.ts index c68a13829dd..24e7211cfe6 100644 --- a/src/main/runtime/terminal/launch/terminal-workspace-scope.ts +++ b/src/main/runtime/terminal/launch/terminal-workspace-scope.ts @@ -26,7 +26,7 @@ import type { ResolvedWorktree } from '../../runtime-worktree-path-identity' import type { Worktree } from '../../../../shared/worktree/types' import { folderWorkspaceToWorktree } from '../../../../shared/folder-workspaces/folder-workspace-worktree' import type { TerminalWorkspaceLaunchScope } from '../../runtime-legacy-worker-terminal-recovery-types' -import { resolveTerminalStartupCwd } from '../../../../shared/terminal-startup-cwd' +import { resolveTerminalStartupCwd } from '../../../../shared/shell/launch/terminal-startup-cwd' import { type ResolvedTerminalWorkspaceLaunchTarget, @@ -35,12 +35,9 @@ import { import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../../shared/constants' import { homedir } from 'node:os' import { getExplicitWorktreeIdSelector } from '../../runtime-worktree-selection' -import { - WORKTREE_ID_SEPARATOR, - getRepoIdFromWorktreeId, - worktreeIdsEqual -} from '../../../../shared/worktree/id' -import { getPtyExecutionHost } from '../../../../shared/terminal-execution-host' +import { getRepoIdFromWorktreeId, worktreeIdsEqual } from '../../../../shared/worktree/id' +import { WORKTREE_ID_SEPARATOR } from '../../../../shared/terminal/pty/lifecycle/pty-session-id-format' +import { getPtyExecutionHost } from '../../../../shared/terminal/pty/lifecycle/terminal-execution-host' import { WorktreeIdRequiresFullPathError } from '../../runtime-worktree-lineage-resolution' import { triggerTerminalSpawnPushTargetMaterialization } from '../../runtime-terminal-spawn-push-target-materialization' import { resolveCreatedWorktreeTerminalTarget } from '../../runtime-created-worktree-terminal-target' diff --git a/src/main/runtime/terminal/launch/window-tab-start-layout-owner.test.ts b/src/main/runtime/terminal/launch/window-tab-start-layout-owner.test.ts index ac1d8d79f88..8f5e4d21e37 100644 --- a/src/main/runtime/terminal/launch/window-tab-start-layout-owner.test.ts +++ b/src/main/runtime/terminal/launch/window-tab-start-layout-owner.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from 'vitest' -import { collectLeafIds } from '../../../../shared/terminal-pane-layout-tree' +import { collectLeafIds } from '../../../../shared/workspace-layout/terminal-pane-layout-tree' import { toRuntimeExecutionHostId } from '../../../../shared/execution-host' import { setupLayoutOwnerRuntime, WORKTREE_ID } from '../../orca-runtime-layout-owner-start-fixture' diff --git a/src/main/runtime/terminal/layout/agent-generated-tab-titles-runtime.ts b/src/main/runtime/terminal/layout/agent-generated-tab-titles-runtime.ts index 7b129354740..a2477a70446 100644 --- a/src/main/runtime/terminal/layout/agent-generated-tab-titles-runtime.ts +++ b/src/main/runtime/terminal/layout/agent-generated-tab-titles-runtime.ts @@ -2,7 +2,10 @@ import { OrcaRuntimeWithWorktreeSleepResumeRecording } from '../stop/worktree-sl import { AgentGeneratedTabTitles, type GeneratedTitleTarget } from './agent-generated-tab-titles' import type { AgentStatusIpcPayload } from '../../../../shared/agent-status/contracts/agent-status-ipc-payload' import { parseExecutionHostId } from '../../../../shared/execution-host' -import { parseLegacyNumericPaneKey, parsePaneKey } from '../../../../shared/stable-pane-id' +import { + parseLegacyNumericPaneKey, + parsePaneKey +} from '../../../../shared/workspace-layout/stable-pane-id' import type { LayoutApplyReply } from '../../../../shared/workspace-layout/workspace-layout-command-types' import type { WindowLayoutCommand } from '../../runtime-layout-apply' diff --git a/src/main/runtime/terminal/layout/agent-generated-tab-titles.test.ts b/src/main/runtime/terminal/layout/agent-generated-tab-titles.test.ts index 40419c9b4ac..195fb780be2 100644 --- a/src/main/runtime/terminal/layout/agent-generated-tab-titles.test.ts +++ b/src/main/runtime/terminal/layout/agent-generated-tab-titles.test.ts @@ -6,7 +6,7 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import { getDefaultWorkspaceSession } from '../../../../shared/constants' import type { AgentStatusIpcPayload } from '../../../../shared/agent-status/contracts/agent-status-ipc-payload' import type { AgentStatusOrchestrationContext } from '../../../../shared/agent-status/contracts/agent-status-types' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import type { WorkspaceLayoutStreamEvent } from '../../../../shared/workspace-layout/workspace-layout-stream-frames' import type { Store } from '../../../persistence/loading-store/store' import { WindowSession } from '../../../persistence/terminal-topology/terminal-topology-window-session-fixture' diff --git a/src/main/runtime/terminal/layout/pane-grid-recording.test.ts b/src/main/runtime/terminal/layout/pane-grid-recording.test.ts index dc1a0ebe551..1025b141386 100644 --- a/src/main/runtime/terminal/layout/pane-grid-recording.test.ts +++ b/src/main/runtime/terminal/layout/pane-grid-recording.test.ts @@ -1,5 +1,5 @@ import { afterEach, describe, expect, it, vi } from 'vitest' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import { getDefaultWorkspaceSession } from '../../../../shared/constants' import { PaneGridRecorder, PANE_GRID_FLUSH_BUDGET_MS } from './pane-grid-recording' diff --git a/src/main/runtime/terminal/layout/pane-grid-recording.ts b/src/main/runtime/terminal/layout/pane-grid-recording.ts index a383dd03058..98c90668fe1 100644 --- a/src/main/runtime/terminal/layout/pane-grid-recording.ts +++ b/src/main/runtime/terminal/layout/pane-grid-recording.ts @@ -1,7 +1,7 @@ // Persist pane grids once per resize burst so main restarts terminals at their last size. -import type { TerminalGrid } from '../../../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { TerminalGrid } from '../../../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import type { WindowLayoutCommand } from '../../runtime-layout-apply' export const PANE_GRID_RECORD_DELAY_MS = 1_000 diff --git a/src/main/runtime/terminal/layout/terminal-input-floor.ts b/src/main/runtime/terminal/layout/terminal-input-floor.ts index aa6a8818b4d..ae1861f56a8 100644 --- a/src/main/runtime/terminal/layout/terminal-input-floor.ts +++ b/src/main/runtime/terminal/layout/terminal-input-floor.ts @@ -1,5 +1,5 @@ import { OrcaRuntimeWithOnPtyExit } from '../lifecycle/pty-exit-lifecycle' -import type { PtyLivenessVerdict } from '../../../../shared/pty-liveness-verdict' +import type { PtyLivenessVerdict } from '../../../../shared/terminal/pty/lifecycle/pty-liveness-verdict' import type { DriverState } from '../../orca-runtime-core' import { isDrivingInputKind, diff --git a/src/main/runtime/terminal/layout/terminal-resize-listeners.ts b/src/main/runtime/terminal/layout/terminal-resize-listeners.ts index e61d8b0f10e..6f6678aff13 100644 --- a/src/main/runtime/terminal/layout/terminal-resize-listeners.ts +++ b/src/main/runtime/terminal/layout/terminal-resize-listeners.ts @@ -3,11 +3,12 @@ import { observeStructuredWorker } from '../../rpc/methods/orchestration-structu import { OrcaRuntimeWithApplyMobileDisplayMode } from './terminal-display-mode' import { addListenerToMap } from '../../orca-runtime-core' import { notifyRuntimeListeners, withTimeoutResult } from '../../runtime-async-boundaries' -import type { TerminalExitCause } from '../../../../shared/terminal-exit-cause' + import { + type TerminalExitCause, describeTerminalExitCause, isDeliberateTerminalExit -} from '../../../../shared/terminal-exit-cause' +} from '../../../../shared/terminal/pty/lifecycle/terminal-exit-cause' import { DEFAULT_TERMINAL_LIST_LIMIT, PTY_CONTROLLER_LIST_TIMEOUT_MS diff --git a/src/main/runtime/terminal/layout/terminal-view-presence.ts b/src/main/runtime/terminal/layout/terminal-view-presence.ts index 608f838a21a..52a2e2a72dc 100644 --- a/src/main/runtime/terminal/layout/terminal-view-presence.ts +++ b/src/main/runtime/terminal/layout/terminal-view-presence.ts @@ -2,7 +2,7 @@ import { OrcaRuntimeWithRecordAgentPromptLifecycleState } from '../output/termin import type { TerminalOscLinkRange } from '../../../../shared/terminal/links/terminal-osc-link-ranges' import type { PtyProviderBufferSnapshot } from '../../../providers/pty-provider-contract' import type { RuntimeTerminalWriteOptions } from '../../runtime-terminal-writer' -import type { WriteSettlement } from '../../../../shared/pty-write-settlement' +import type { WriteSettlement } from '../../../../shared/terminal/pty/lifecycle/pty-write-settlement' import { type DriverState, addListenerToMap } from '../../orca-runtime-core' import { notifyRuntimeListeners } from '../../runtime-async-boundaries' diff --git a/src/main/runtime/terminal/lifecycle/closed-pane-of-exited-pty.ts b/src/main/runtime/terminal/lifecycle/closed-pane-of-exited-pty.ts index ec5ddac30f1..a565d5e225b 100644 --- a/src/main/runtime/terminal/lifecycle/closed-pane-of-exited-pty.ts +++ b/src/main/runtime/terminal/lifecycle/closed-pane-of-exited-pty.ts @@ -1,9 +1,9 @@ // Close removes the pane before exit; resolve it by PTY and incarnation in closed-pane records, then retire that entry (L80 Q2). -import { closedTerminalPaneOf } from '../../../../shared/closed-terminal-panes' +import { closedTerminalPaneOf } from '../../../../shared/workspace-layout/closed-terminal-panes' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../../shared/layout-owner-switch' import type { RuntimeStore } from '../../runtime-store-contract' import type { ExecutionHostId } from '../../../../shared/execution-host' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import { worktreeIdsEqual } from '../../../../shared/worktree/id' export type ClosedPaneOfExit = { diff --git a/src/main/runtime/terminal/lifecycle/exited-split-pane-rule.ts b/src/main/runtime/terminal/lifecycle/exited-split-pane-rule.ts index 898d06554b8..0b7bbeea582 100644 --- a/src/main/runtime/terminal/lifecycle/exited-split-pane-rule.ts +++ b/src/main/runtime/terminal/lifecycle/exited-split-pane-rule.ts @@ -2,7 +2,7 @@ import type { RuntimePtyWorktreeRecord } from '../../runtime-terminal-state-records' import type { TerminalRunFactsRegister } from '../../terminal-run-facts' -import { UNVERIFIED_PROCESS_EXIT_CODE } from '../../../../shared/terminal-exit-cause' +import { UNVERIFIED_PROCESS_EXIT_CODE } from '../../../../shared/terminal/pty/lifecycle/terminal-exit-cause' export type ExitedSplitPaneFacts = { exitCode: number diff --git a/src/main/runtime/terminal/lifecycle/pty-controller-inventory-refresh.ts b/src/main/runtime/terminal/lifecycle/pty-controller-inventory-refresh.ts index 0588bfa131b..d351a431a4d 100644 --- a/src/main/runtime/terminal/lifecycle/pty-controller-inventory-refresh.ts +++ b/src/main/runtime/terminal/lifecycle/pty-controller-inventory-refresh.ts @@ -1,5 +1,5 @@ import { OrcaRuntimeWithPtyControllerInventoryListing } from './pty-controller-inventory-listing' -import type { ResolvedWorktree } from '../../runtime-worktree-path-identity' + import type * as PtyControllerContract from '../../runtime-pty-controller-contract' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../../shared/constants' import { @@ -8,8 +8,9 @@ import { LOCAL_EXECUTION_HOST_ID, parseExecutionHostId } from '../../../../shared/execution-host' -import { getPtyExecutionHost } from '../../../../shared/terminal-execution-host' +import { getPtyExecutionHost } from '../../../../shared/terminal/pty/lifecycle/terminal-execution-host' import { + type ResolvedWorktree, createIncrementalResolvedWorktreeLookup, findResolvedWorktreeIdForPath, inferWorktreeIdFromPtyId @@ -21,7 +22,7 @@ import { } from '../../runtime-worktree-binding-index' import { parseAppSshPtyId } from '../../../../shared/ssh-pty-id' import { indexFloatingSnapshotPtyBindings } from '../../floating-snapshot-pty-bindings' -import { NO_OBSERVING_PROVIDER_REASON } from '../../../../shared/pty-liveness-verdict' +import { NO_OBSERVING_PROVIDER_REASON } from '../../../../shared/terminal/pty/lifecycle/pty-liveness-verdict' import { buildControllerTerminalIdentities } from '../../orca-runtime-build-controller-terminal-identities' import { retireOrchestrationAuthorityAbsentFromInventory } from '../../runtime-restored-orchestration-authority-sweep' import { worktreeIdsEqual } from '../../../../shared/worktree/id' diff --git a/src/main/runtime/terminal/lifecycle/pty-exit-lifecycle.ts b/src/main/runtime/terminal/lifecycle/pty-exit-lifecycle.ts index 092c89c2581..e6bb20e51af 100644 --- a/src/main/runtime/terminal/lifecycle/pty-exit-lifecycle.ts +++ b/src/main/runtime/terminal/lifecycle/pty-exit-lifecycle.ts @@ -1,15 +1,17 @@ import { OrcaRuntimeWithOnClientDisconnected } from '../layout/terminal-client-disconnect' -import type { PtyIncarnationId } from '../../../../shared/pty-incarnation' -import type { TerminalExitCause } from '../../../../shared/terminal-exit-cause' +import type { PtyIncarnationId } from '../../../../shared/terminal/pty/lifecycle/pty-incarnation' + import { + type TerminalExitCause, OPERATOR_CLOSE_EXIT_CAUSE, resolveUnreportedExitCause -} from '../../../../shared/terminal-exit-cause' -import { SSH_EXIT_UNCONFIRMED_REASON } from '../../../../shared/pty-liveness-verdict' +} from '../../../../shared/terminal/pty/lifecycle/terminal-exit-cause' +import { SSH_EXIT_UNCONFIRMED_REASON } from '../../../../shared/terminal/pty/lifecycle/pty-liveness-verdict' +import type { PtyLivenessVerdict } from '../../../../shared/terminal/pty/lifecycle/pty-liveness-verdict' import type { RetiredTerminalSurface } from '../../mobile-session-terminal-retirement' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { advertisedUrlWatcher } from '../../../ports/advertised-url-watcher' -import type { PtyLivenessVerdict } from '../../../../shared/pty-liveness-verdict' + import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../../shared/layout-owner-switch' import { exitedSplitPaneFacts } from './exited-split-pane-rule' import { closedPaneOfExitedPty, type ClosedPaneOfExit } from './closed-pane-of-exited-pty' diff --git a/src/main/runtime/terminal/lifecycle/pty-handle-invalidation.ts b/src/main/runtime/terminal/lifecycle/pty-handle-invalidation.ts index ad4bbb942b5..f3728d96b1b 100644 --- a/src/main/runtime/terminal/lifecycle/pty-handle-invalidation.ts +++ b/src/main/runtime/terminal/lifecycle/pty-handle-invalidation.ts @@ -1,6 +1,6 @@ import { OrcaRuntimeWithResolveKnownWorkspaceFileTarget } from '../../workspaces/known-workspace-file-target' -import type { PtyIncarnationId } from '../../../../shared/pty-incarnation' -import { getPtyExecutionHost } from '../../../../shared/terminal-execution-host' +import type { PtyIncarnationId } from '../../../../shared/terminal/pty/lifecycle/pty-incarnation' +import { getPtyExecutionHost } from '../../../../shared/terminal/pty/lifecycle/terminal-execution-host' import { getConnectionExecutionHostId, parseExecutionHostId diff --git a/src/main/runtime/terminal/lifecycle/pty-registration.ts b/src/main/runtime/terminal/lifecycle/pty-registration.ts index 0610bc29972..aa03e29d14d 100644 --- a/src/main/runtime/terminal/lifecycle/pty-registration.ts +++ b/src/main/runtime/terminal/lifecycle/pty-registration.ts @@ -1,13 +1,13 @@ import { classifyTerminalCreationFailure, terminalExitError -} from '../../../../shared/terminal-start-failure' +} from '../../../../shared/terminal/pty/lifecycle/terminal-start-failure' import type { PtySpawnResult } from '../../../providers/pty-provider-contract' import { OrcaRuntimeWithInvalidateAllHandlesForPty } from './pty-handle-invalidation' -import type { PtyIncarnationId } from '../../../../shared/pty-incarnation' +import type { PtyIncarnationId } from '../../../../shared/terminal/pty/lifecycle/pty-incarnation' import type { TuiAgent } from '../../../../shared/agent-launch/catalog/tui-agent' -import { isValidTerminalTabId } from '../../../../shared/terminal-tab-id' -import { isTerminalLeafId, makePaneKey } from '../../../../shared/stable-pane-id' +import { isValidTerminalTabId } from '../../../../shared/workspace-layout/terminal-tab-id' +import { isTerminalLeafId, makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { isTuiAgent } from '../../../../shared/agent-launch/catalog/tui-agent-config' import { spawnSurfaceClaimSequence } from '../../pty-recorded-surface-topology' import type { diff --git a/src/main/runtime/terminal/output/headless-terminal-state.ts b/src/main/runtime/terminal/output/headless-terminal-state.ts index 16d2461b653..398d3e695ea 100644 --- a/src/main/runtime/terminal/output/headless-terminal-state.ts +++ b/src/main/runtime/terminal/output/headless-terminal-state.ts @@ -7,7 +7,10 @@ import { getTerminalViewAttributes } from '../../terminal-view-attribute-store' import { PtyShellOwnershipMirror } from '../../pty-shell-ownership-mirror' import { PROCESS_BOUNDARY_GROUND } from '../../../../shared/terminal/protocol/input-modes/terminal-mode-reset-profiles' import { release } from 'node:os' -import { resolvePtyOwnerBackend, type PtyOwnerBackend } from '../../../../shared/pty-owner-backend' +import { + resolvePtyOwnerBackend, + type PtyOwnerBackend +} from '../../../../shared/terminal/pty/lifecycle/pty-owner-backend' import { isRemoteRuntimePtyId } from '../../../../shared/remote-runtime/remote-runtime-pty-id' import { parseAppSshPtyId } from '../../../../shared/ssh-pty-id' import { windowsPtyForOwnerBackend } from '../../../../shared/xterm-conpty-options' diff --git a/src/main/runtime/terminal/output/terminal-orchestration-authority.ts b/src/main/runtime/terminal/output/terminal-orchestration-authority.ts index 05cb9d8929e..85e05f67782 100644 --- a/src/main/runtime/terminal/output/terminal-orchestration-authority.ts +++ b/src/main/runtime/terminal/output/terminal-orchestration-authority.ts @@ -8,8 +8,8 @@ import { makePaneKey, parseLegacyNumericPaneKey, parsePaneKey -} from '../../../../shared/stable-pane-id' -import { isValidTerminalTabId } from '../../../../shared/terminal-tab-id' +} from '../../../../shared/workspace-layout/stable-pane-id' +import { isValidTerminalTabId } from '../../../../shared/workspace-layout/terminal-tab-id' import { RecentPtyOutputBuffer } from '../../recent-pty-output-buffer' import type { ProjectExecutionRuntimeResolution } from '../../../../shared/project-execution-runtime' import { resolveLocalProjectRuntimeForWorktreeId } from '../../../workspaces/execution-host/local-project-runtime-resolution' diff --git a/src/main/runtime/terminal/query/pty-terminal-summary.ts b/src/main/runtime/terminal/query/pty-terminal-summary.ts index 51c34181d8b..e22dda58c3a 100644 --- a/src/main/runtime/terminal/query/pty-terminal-summary.ts +++ b/src/main/runtime/terminal/query/pty-terminal-summary.ts @@ -11,8 +11,12 @@ import type { ResolvedWorktree } from '../../runtime-worktree-path-identity' import { worktreeIdentityKey } from '../../../../shared/worktree/id' import type { RuntimeTerminalRead, RuntimeTerminalSummary } from '../../../../shared/runtime-types' import { getLatestPtyTitle } from '../../runtime-worktree-status-projection' -import { isTerminalLeafId, makePaneKey, parsePaneKey } from '../../../../shared/stable-pane-id' -import { isValidTerminalTabId } from '../../../../shared/terminal-tab-id' +import { + isTerminalLeafId, + makePaneKey, + parsePaneKey +} from '../../../../shared/workspace-layout/stable-pane-id' +import { isValidTerminalTabId } from '../../../../shared/workspace-layout/terminal-tab-id' import { ptyHoldsRecordedSurface, type PtySurfaceTopology diff --git a/src/main/runtime/terminal/query/terminal-identity-read-context.ts b/src/main/runtime/terminal/query/terminal-identity-read-context.ts index 7472afa2546..e1c5de6c52c 100644 --- a/src/main/runtime/terminal/query/terminal-identity-read-context.ts +++ b/src/main/runtime/terminal/query/terminal-identity-read-context.ts @@ -6,7 +6,7 @@ import { createStructuredWorkerReadContext, type StructuredWorkerReadContext } from '../../structured-worker-authority' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import type { OrchestrationCompatibilitySshTerminal, TerminalHandleRecord diff --git a/src/main/runtime/terminal/recovery/foreign-pane-bindings.ts b/src/main/runtime/terminal/recovery/foreign-pane-bindings.ts index 356c575fd25..d24b2fd0784 100644 --- a/src/main/runtime/terminal/recovery/foreign-pane-bindings.ts +++ b/src/main/runtime/terminal/recovery/foreign-pane-bindings.ts @@ -1,9 +1,9 @@ // Restores never attach another workspace's terminal; gone local bindings show sleeping, matching window rules (deferred-session-reattach-choice.ts). -import { isPtySessionIdOwnedByWorktree } from '../../../../shared/pty-session-id-format' +import { isPtySessionIdOwnedByWorktree } from '../../../../shared/terminal/pty/lifecycle/pty-session-id-format' import { isRemoteRuntimePtyId } from '../../../../shared/remote-runtime/remote-runtime-pty-id' import { parseAppSshPtyId } from '../../../../shared/ssh-pty-id' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' /** An SSH id names its connection, never a workspace, so only a local minted id can be foreign. */ export function isPtyIdMintedForAnotherWorkspace(ptyId: string, worktreeId: string): boolean { diff --git a/src/main/runtime/terminal/recovery/layout-command-pane-starts.ts b/src/main/runtime/terminal/recovery/layout-command-pane-starts.ts index 1ff4b9b7fde..6a0e6649f3c 100644 --- a/src/main/runtime/terminal/recovery/layout-command-pane-starts.ts +++ b/src/main/runtime/terminal/recovery/layout-command-pane-starts.ts @@ -4,7 +4,7 @@ import type { LayoutEffects, LayoutCommand } from '../../../../shared/workspace-layout/workspace-layout-command-types' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import type { RestoredPane, StartedPty } from './restored-pane-start' /** Main's restored-pane starter: the pane's terminal, or null once main no longer holds it. */ diff --git a/src/main/runtime/terminal/recovery/resolve-terminal-pane.ts b/src/main/runtime/terminal/recovery/resolve-terminal-pane.ts index f3a45cff753..8f7a408c547 100644 --- a/src/main/runtime/terminal/recovery/resolve-terminal-pane.ts +++ b/src/main/runtime/terminal/recovery/resolve-terminal-pane.ts @@ -19,7 +19,7 @@ import type { RuntimePtyWorktreeRecord } from '../../runtime-terminal-state-records' import type { ResolvedWorktree } from '../../runtime-worktree-path-identity' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { buildVisibleSnapshotReadFallback, labelTerminalReadSource, diff --git a/src/main/runtime/terminal/recovery/restored-pane-start.ts b/src/main/runtime/terminal/recovery/restored-pane-start.ts index 801fa5c311d..56a7a14d758 100644 --- a/src/main/runtime/terminal/recovery/restored-pane-start.ts +++ b/src/main/runtime/terminal/recovery/restored-pane-start.ts @@ -2,7 +2,7 @@ import { isPtyIdMintedForAnotherWorkspace } from './foreign-pane-bindings' import type { RuntimeMobileSessionCreateTerminalResult as CreatedTerminal } from '../../../../shared/runtime-session-contracts' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' export type StartedPty = Pick & { id: string } export type RestoredPane = { worktreeId: string; tabId: string; leafId: string } diff --git a/src/main/runtime/terminal/recovery/shutdown-reconnect-facts.ts b/src/main/runtime/terminal/recovery/shutdown-reconnect-facts.ts index dfd30aa71de..1b584b21715 100644 --- a/src/main/runtime/terminal/recovery/shutdown-reconnect-facts.ts +++ b/src/main/runtime/terminal/recovery/shutdown-reconnect-facts.ts @@ -5,7 +5,7 @@ import { isOwnedSshTargetId } from '../../../../shared/execution-host' import { parseAppSshPtyId } from '../../../../shared/ssh-pty-id' import type { SshConnectionStatus } from '../../../../shared/ssh-types' import { collectLayoutLeafIdsInOrder } from '../../../../shared/workspace-layout/terminal-pane-tree' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' export type ShutdownReconnectFacts = Pick< WorkspaceSessionState, diff --git a/src/main/runtime/terminal/stop/hook-status-resume-records.ts b/src/main/runtime/terminal/stop/hook-status-resume-records.ts index 4be89c7c484..41c2635557c 100644 --- a/src/main/runtime/terminal/stop/hook-status-resume-records.ts +++ b/src/main/runtime/terminal/stop/hook-status-resume-records.ts @@ -14,10 +14,10 @@ import { type SleepingAgentSessionRecord } from '../../../../shared/agent-session/lifecycle/agent-session-resume' import type { AgentStatusIpcPayload } from '../../../../shared/agent-status/contracts/agent-status-ipc-payload' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { isLocalHookConnectionId } from '../../../../shared/wsl-hook-relay-contract' import type { CommandOf } from '../../../../shared/workspace-layout/workspace-layout-command-types' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' /** The part of a pane's previous status the next one may inherit its provider session from. */ export type PreviousHookStatus = Pick diff --git a/src/main/runtime/terminal/stop/worktree-sleep-resume-recording.ts b/src/main/runtime/terminal/stop/worktree-sleep-resume-recording.ts index 72238444b7f..81bdeec21a7 100644 --- a/src/main/runtime/terminal/stop/worktree-sleep-resume-recording.ts +++ b/src/main/runtime/terminal/stop/worktree-sleep-resume-recording.ts @@ -24,9 +24,9 @@ import { } from '../../../../shared/agent-session/lifecycle/agent-session-resume' import { type ExecutionHostId, parseExecutionHostId } from '../../../../shared/execution-host' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../../shared/layout-owner-switch' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' export abstract class OrcaRuntimeWithWorktreeSleepResumeRecording extends OrcaRuntimeWithStopTerminalsForWorktree { /** Capture after earlier status writes so their saved copy participates in exact cleanup. */ diff --git a/src/main/runtime/terminal/stop/worktree-sleep-resume-records.ts b/src/main/runtime/terminal/stop/worktree-sleep-resume-records.ts index 4adbd821eb0..3102e1b32a7 100644 --- a/src/main/runtime/terminal/stop/worktree-sleep-resume-records.ts +++ b/src/main/runtime/terminal/stop/worktree-sleep-resume-records.ts @@ -7,9 +7,9 @@ import { } from '../../../../shared/agent-session/lifecycle/agent-session-resume' import type { AgentStatusIpcPayload } from '../../../../shared/agent-status/contracts/agent-status-ipc-payload' import type { AgentProcessVerdict } from '../../../../shared/agent-status/process/agent-process-presence' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { isLocalHookConnectionId } from '../../../../shared/wsl-hook-relay-contract' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import { isWorkspaceSleepRecord } from '../../../../shared/workspace-sleep' /** Per slept PTY: the resume records captured, and the panes the hook store proves moved on. */ diff --git a/src/main/runtime/terminal/stop/worktree-terminal-stop.ts b/src/main/runtime/terminal/stop/worktree-terminal-stop.ts index 75328a856fa..cfaef63ddef 100644 --- a/src/main/runtime/terminal/stop/worktree-terminal-stop.ts +++ b/src/main/runtime/terminal/stop/worktree-terminal-stop.ts @@ -10,7 +10,7 @@ import type { import type { WorktreeTerminalStopOptions } from './worktree-terminal-stop-options' import type { HostWorktreeTarget } from '../../../../shared/worktree/host-qualified-identity' import type { WorktreeTerminalMutationKind } from '../../worktree-terminal-mutation-lock' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import { cloneWorkspaceSessionState } from '../../../persistence/restoring-sessions/session-owner-fields' import { rollbackWorkspaceSessionAfterFailedAsyncWrite } from '../../../persistence/restoring-sessions/workspace-session-write-rollback' import { diff --git a/src/main/runtime/terminal/surface/main-pane-verdict.ts b/src/main/runtime/terminal/surface/main-pane-verdict.ts index 481fac017d6..3e3db7d787d 100644 --- a/src/main/runtime/terminal/surface/main-pane-verdict.ts +++ b/src/main/runtime/terminal/surface/main-pane-verdict.ts @@ -1,4 +1,4 @@ -import type { PtyLivenessVerdict } from '../../../../shared/pty-liveness-verdict' +import type { PtyLivenessVerdict } from '../../../../shared/terminal/pty/lifecycle/pty-liveness-verdict' import { isRemoteRuntimePtyId } from '../../../../shared/remote-runtime/remote-runtime-pty-id' import { parseAppSshPtyId } from '../../../../shared/ssh-pty-id' import { paneTerminalFact, type RuntimePtyRegistryView } from '../../runtime-leaf-record-projection' diff --git a/src/main/runtime/terminal/surface/main-terminal-surfaces.ts b/src/main/runtime/terminal/surface/main-terminal-surfaces.ts index cfa86ff6238..1918bbd683b 100644 --- a/src/main/runtime/terminal/surface/main-terminal-surfaces.ts +++ b/src/main/runtime/terminal/surface/main-terminal-surfaces.ts @@ -2,7 +2,7 @@ import { captureMainTerminalPaneLookup, findMainTerminalPane } from './pty-pane- // Publish main-owned workspace panes from Store layout changes, even without a window graph. import type { PaneStartFactOf } from '../../pane-start-statuses' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../../shared/layout-owner-switch' import type { MainPaneBinding } from './main-pane-verdict' import type { ExecutionHostId } from '../../../../shared/execution-host' diff --git a/src/main/runtime/terminal/surface/pty-pane-query.ts b/src/main/runtime/terminal/surface/pty-pane-query.ts index 56525e86e84..2ef73c8fdca 100644 --- a/src/main/runtime/terminal/surface/pty-pane-query.ts +++ b/src/main/runtime/terminal/surface/pty-pane-query.ts @@ -1,4 +1,4 @@ -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import { collectLayoutLeafIdsInOrder } from '../../../../shared/workspace-layout/terminal-pane-tree' import type { WorkspaceLayoutLoadContext } from '../../../../shared/workspace-layout/workspace-layout-load-types' import { isPaneSleepRecord } from '../../../../shared/agent-session/lifecycle/agent-session-resume' @@ -11,8 +11,8 @@ import { // Read pane copies only in the window-owned branch; main-owned builds use layout alone. Delete these copies with the legacy branch (L80). import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../../shared/layout-owner-switch' -import { isTerminalLeafId, makePaneKey } from '../../../../shared/stable-pane-id' -import { isValidTerminalTabId } from '../../../../shared/terminal-tab-id' +import { isTerminalLeafId, makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' +import { isValidTerminalTabId } from '../../../../shared/workspace-layout/terminal-tab-id' import type { RuntimePtyWorktreeRecord } from '../../runtime-terminal-state-records' export type PtyPane = { diff --git a/src/main/runtime/terminal/surface/terminal-surface-index-spill.test.ts b/src/main/runtime/terminal/surface/terminal-surface-index-spill.test.ts index ffbdac268da..f971f51cc89 100644 --- a/src/main/runtime/terminal/surface/terminal-surface-index-spill.test.ts +++ b/src/main/runtime/terminal/surface/terminal-surface-index-spill.test.ts @@ -4,7 +4,7 @@ import { getDefaultWorkspaceSession } from '../../../../shared/constants' import { normalizeExecutionHostId, type ExecutionHostId } from '../../../../shared/execution-host' import { loadWorkspaceLayout } from '../../../../shared/workspace-layout/workspace-layout-load' import { nameBasedLoadContext } from '../../../../shared/workspace-layout/workspace-layout-minted-ids' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import { composeMainTerminalSurfaces, TerminalSurfaceIndex } from './terminal-surface-index' import { toRemoteRuntimePtyId } from '../../../../shared/remote-runtime/remote-runtime-pty-id' diff --git a/src/main/runtime/terminal/surface/terminal-surface-index.ts b/src/main/runtime/terminal/surface/terminal-surface-index.ts index 88b5afe2718..ec0079e6efd 100644 --- a/src/main/runtime/terminal/surface/terminal-surface-index.ts +++ b/src/main/runtime/terminal/surface/terminal-surface-index.ts @@ -19,7 +19,7 @@ import { collectLayoutLeafIdsInOrder } from '../../../../shared/workspace-layout import { bindingOf } from '../../pane-live-facts' import { worktreeIdsEqual } from '../../../../shared/worktree/id' import { isRemoteRuntimePtyId } from '../../../../shared/remote-runtime/remote-runtime-pty-id' -import { getPtyExecutionHost } from '../../../../shared/terminal-execution-host' +import { getPtyExecutionHost } from '../../../../shared/terminal/pty/lifecycle/terminal-execution-host' import { projectSessionTabs, type ProjectedSessionTabs diff --git a/src/main/runtime/terminal/surface/terminal-surface-replies.test-fixture.ts b/src/main/runtime/terminal/surface/terminal-surface-replies.test-fixture.ts index 7edb561ddb9..dd165c8cd1d 100644 --- a/src/main/runtime/terminal/surface/terminal-surface-replies.test-fixture.ts +++ b/src/main/runtime/terminal/surface/terminal-surface-replies.test-fixture.ts @@ -12,7 +12,7 @@ import { makeWorkspaceSessionWithHeadlessTerminal } from '../../orca-runtime-test-fixtures.spec' import type { RuntimeSyncWindowGraph, RuntimeTerminalShow } from '../../../../shared/runtime-types' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import type { ExecutionHostId } from '../../../../shared/execution-host' import type { LayoutCommand } from '../../../../shared/workspace-layout/workspace-layout-command-types' import { applyCommandToSession } from '../../../persistence/terminal-topology/terminal-pane-admission' diff --git a/src/main/runtime/terminal/view/mobile-terminal-surface.ts b/src/main/runtime/terminal/view/mobile-terminal-surface.ts index a17005a30cf..fc0f59083b3 100644 --- a/src/main/runtime/terminal/view/mobile-terminal-surface.ts +++ b/src/main/runtime/terminal/view/mobile-terminal-surface.ts @@ -5,7 +5,7 @@ import type { RuntimeMobileSessionTerminalClientTab } from '../../../../shared/runtime-types' import { MOBILE_TERMINAL_SURFACE_TIMEOUT_MS } from '../../orca-runtime-core' -import { makePaneKey, parsePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey, parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { resolveTerminalSessionWorktreeId } from '../../runtime-worktree-path-identity' import { worktreeIdsEqual } from '../../../../shared/worktree/id' import type { diff --git a/src/main/runtime/terminal/wait/terminal-idle-polls.ts b/src/main/runtime/terminal/wait/terminal-idle-polls.ts index fde55292f34..be1b0472d7d 100644 --- a/src/main/runtime/terminal/wait/terminal-idle-polls.ts +++ b/src/main/runtime/terminal/wait/terminal-idle-polls.ts @@ -1,4 +1,4 @@ -import { isShellProcess } from '../../../../shared/shell-process-detection' +import { isShellProcess } from '../../../../shared/agent-status/process/shell-process-detection' import type { RuntimeTerminalWait, RuntimeTerminalWaitBlockedReason diff --git a/src/main/runtime/terminal/wait/terminal-interactive-wait.ts b/src/main/runtime/terminal/wait/terminal-interactive-wait.ts index e87d7bfb13c..49a31560031 100644 --- a/src/main/runtime/terminal/wait/terminal-interactive-wait.ts +++ b/src/main/runtime/terminal/wait/terminal-interactive-wait.ts @@ -15,7 +15,7 @@ import type { import type { AgentLaunchScope } from '../../session-tabs/structured-session-tab-restoration' import { withTimeout } from '../../runtime-async-boundaries' import { TERMINAL_INTERACTIVE_WAIT_PROBE_TIMEOUT_MS } from '../../orca-runtime-core' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import type { ExactWorkerProviderSession } from '../../../../shared/orchestration-worker-output' import { selectExactWorkerProviderSession } from '../../orchestration/worker-provider-session' import type { TuiAgent } from '../../../../shared/agent-launch/catalog/tui-agent' diff --git a/src/main/runtime/terminal/wait/terminal-wait-blocked-checks.ts b/src/main/runtime/terminal/wait/terminal-wait-blocked-checks.ts index 4cc5df55622..47428fbccf0 100644 --- a/src/main/runtime/terminal/wait/terminal-wait-blocked-checks.ts +++ b/src/main/runtime/terminal/wait/terminal-wait-blocked-checks.ts @@ -17,7 +17,7 @@ import { } from '../../terminal-wait-tail-state' import { ownRetainedString } from '../../../../shared/own-retained-string' import type { ProcessedAgentStatusChunk } from '../../../../shared/agent-status/transport/agent-status-osc' -import { createTerminalAgentStatusProcessor } from '../../../../shared/terminal-agent-status-processor' +import { createTerminalAgentStatusProcessor } from '../../../../shared/program-status/terminal-agent-status-processor' import type { RuntimePtyTitleTrackerEntry } from '../../runtime-terminal-state-records' import type { OrcaRuntimeWithRecordAgentPromptLifecycleState } from '../output/terminal-output-generation' diff --git a/src/main/runtime/terminal/wait/terminal-wait-permission.ts b/src/main/runtime/terminal/wait/terminal-wait-permission.ts index ba29ddb568f..8760624a524 100644 --- a/src/main/runtime/terminal/wait/terminal-wait-permission.ts +++ b/src/main/runtime/terminal/wait/terminal-wait-permission.ts @@ -17,10 +17,10 @@ import { renewRuntimeMobileAgentStatusFromPtyTitle } from '../../runtime-mobile- import { getDisplayPromptLifecycle } from '../../runtime-worktree-status-projection' import { createTerminalInputReservation } from '../../terminal-input-admission' import type { RuntimeTerminalWriteOptions } from '../../runtime-terminal-writer' -import type { WriteSettlement } from '../../../../shared/pty-write-settlement' +import type { WriteSettlement } from '../../../../shared/terminal/pty/lifecycle/pty-write-settlement' import { resolvePtyWriteHostPlatform } from '../input/pty-write-host-platform' import type { TuiAgent } from '../../../../shared/agent-launch/catalog/tui-agent' -import type { TerminalAgent } from '../../../../shared/terminal-agent' +import type { TerminalAgent } from '../../../../shared/agent-status/identity/terminal-agent' import type { AgentPromptActivity } from '../../agent-prompt-submission-verification' import { hasExplicitIdleTitle } from '../../tui-idle-evidence' import { diff --git a/src/main/runtime/tui-idle-codex-plan-menu.test.ts b/src/main/runtime/tui-idle-codex-plan-menu.test.ts index 87a6e3617a4..f6b2a3356a3 100644 --- a/src/main/runtime/tui-idle-codex-plan-menu.test.ts +++ b/src/main/runtime/tui-idle-codex-plan-menu.test.ts @@ -1,6 +1,6 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import type { AgentStatusIpcPayload } from '../../shared/agent-status/contracts/agent-status-ipc-payload' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { createTranscriptPane, TRANSCRIPT_PANE_PTY_ID } from './agent-transcript-pane-test-harness' import { readRuntimeFixture } from './agent-transcript-replay-test-harness' import type { OrcaRuntimeService } from './orca-runtime' diff --git a/src/main/runtime/tui-idle-evidence.ts b/src/main/runtime/tui-idle-evidence.ts index e384b130f7a..e6434122834 100644 --- a/src/main/runtime/tui-idle-evidence.ts +++ b/src/main/runtime/tui-idle-evidence.ts @@ -6,9 +6,9 @@ import { import type { AgentStatusState } from '../../shared/agent-status/contracts/agent-status-types' import type { RuntimeTerminalWaitBlockedReason } from '../../shared/runtime-types' import { getSyntheticAgentTerminalTitle } from '../../shared/agent-status/title/synthetic-agent-title' -import { resolveTerminalTitlePolicyAgentType } from '../../shared/terminal-title-agent-type' +import { resolveTerminalTitlePolicyAgentType } from '../../shared/agent-status/title/terminal-title-agent-type' import type { TuiAgent } from '../../shared/agent-launch/catalog/tui-agent' -import type { TerminalAgent } from '../../shared/terminal-agent' +import type { TerminalAgent } from '../../shared/agent-status/identity/terminal-agent' import { isTuiAgent } from '../../shared/agent-launch/catalog/tui-agent-config' import { getTuiAgentRestSignal } from '../../shared/agent-status/title/tui-agent-rest-signal' import { detectExplicitIdleStatusFromTitle } from './terminal-wait-detection' diff --git a/src/main/runtime/tui-idle-hook-lane-runtime.test.ts b/src/main/runtime/tui-idle-hook-lane-runtime.test.ts index 01679518f3c..4310f7f0a8b 100644 --- a/src/main/runtime/tui-idle-hook-lane-runtime.test.ts +++ b/src/main/runtime/tui-idle-hook-lane-runtime.test.ts @@ -9,7 +9,7 @@ import { import { createHookListenerState } from '../../shared/agent-hook-listener/listener-state' import { normalizeHermesEvent } from '../../shared/agent-hook-listener/providers/hermes-events' import type { AgentStatusIpcPayload } from '../../shared/agent-status/contracts/agent-status-ipc-payload' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import type { TuiAgent } from '../../shared/agent-launch/catalog/tui-agent' import type { OrcaRuntimeService } from './orca-runtime' diff --git a/src/main/runtime/tui-idle-wait-test-harness.ts b/src/main/runtime/tui-idle-wait-test-harness.ts index 80290e53666..566d8402e48 100644 --- a/src/main/runtime/tui-idle-wait-test-harness.ts +++ b/src/main/runtime/tui-idle-wait-test-harness.ts @@ -1,7 +1,7 @@ import { OrcaRuntimeService } from './orca-runtime' import { getDefaultWorkspaceSession } from '../../shared/constants' import type { RuntimePtyWorktreeRecord } from './runtime-terminal-state-records' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' /** Centralize narrow wait-path fixtures and checked field contracts; wide unused runtime members stay confined to these doubles. */ diff --git a/src/main/runtime/twin-repo-session-host.ts b/src/main/runtime/twin-repo-session-host.ts index 6e2a38504f7..67f97da8a71 100644 --- a/src/main/runtime/twin-repo-session-host.ts +++ b/src/main/runtime/twin-repo-session-host.ts @@ -7,12 +7,12 @@ import { } from '../../shared/execution-host' import type { Repo } from '../../shared/repo-types' import type { Worktree } from '../../shared/worktree/types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' -import { WORKSPACE_SESSION_FIELD_OWNERSHIP } from '../../shared/workspace-session-host-field-ownership' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' +import { WORKSPACE_SESSION_FIELD_OWNERSHIP } from '../../shared/workspace-session/workspace-session-host-field-ownership' import { contestedPartitionHosts, pickPrimaryHostForClaims -} from '../../shared/workspace-session-contested-primary-host' +} from '../../shared/workspace-session/workspace-session-contested-primary-host' import { worktreeWorkspaceKey } from '../../shared/workspace-scope' import type { RuntimeStore } from './runtime-store-contract' diff --git a/src/main/runtime/unstopped-pty-verification.ts b/src/main/runtime/unstopped-pty-verification.ts index cd41b918329..d6db03c3cb3 100644 --- a/src/main/runtime/unstopped-pty-verification.ts +++ b/src/main/runtime/unstopped-pty-verification.ts @@ -9,15 +9,13 @@ import { } from '../../shared/worktree/removal' import { NO_OBSERVING_PROVIDER_REASON, - type PtyLivenessVerdict -} from '../../shared/pty-liveness-verdict' + type PtyLivenessVerdict as UnstoppedPtyVerdict +} from '../../shared/terminal/pty/lifecycle/pty-liveness-verdict' import { settleBeforeDeadline } from './settle-before-deadline' // Floor for the verification window when the sweep ran on a very short budget. export const WORKTREE_TEARDOWN_VERIFY_GRACE_MS = 2_000 -export type UnstoppedPtyVerdict = PtyLivenessVerdict - /** Give post-stop verification its own budget; the spent sweep deadline falsely timed out reachable inventories and blocked removal (#11960). Preserve live/exited/unverifiable distinctions. */ export async function verifyUnstoppedPtys( failedPtyIds: readonly string[], diff --git a/src/main/runtime/workspace-layout-live-titles.test.ts b/src/main/runtime/workspace-layout-live-titles.test.ts index 39f730c8efb..3e711e4c330 100644 --- a/src/main/runtime/workspace-layout-live-titles.test.ts +++ b/src/main/runtime/workspace-layout-live-titles.test.ts @@ -3,7 +3,7 @@ import { getDefaultWorkspaceSession } from '../../shared/constants' import { LOCAL_EXECUTION_HOST_ID } from '../../shared/execution-host' import type { PublishedPane } from '../../shared/workspace-layout/workspace-layout-published' import type { WorkspaceLayoutEvent } from '../../shared/workspace-layout/workspace-layout-stream-frames' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { OrcaRuntimeService } from './orca-runtime' import { collectLayoutEvents } from './workspace-layout-stream-events.test-fixture' diff --git a/src/main/runtime/workspace-layout-stream.test.ts b/src/main/runtime/workspace-layout-stream.test.ts index 01e8f092df3..ca0c80e68ee 100644 --- a/src/main/runtime/workspace-layout-stream.test.ts +++ b/src/main/runtime/workspace-layout-stream.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from 'vitest' import { LOCAL_EXECUTION_HOST_ID, type ExecutionHostId } from '../../shared/execution-host' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { localDesktopSession, relaySshSession, diff --git a/src/main/runtime/workspace-session-membership-scaling.test.ts b/src/main/runtime/workspace-session-membership-scaling.test.ts index 606128456b1..22e1a7385ae 100644 --- a/src/main/runtime/workspace-session-membership-scaling.test.ts +++ b/src/main/runtime/workspace-session-membership-scaling.test.ts @@ -1,6 +1,6 @@ import { expect, it, vi } from 'vitest' import type { TabGroup } from '../../shared/tab-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { rebaseWorkspaceSessionTerminalMembership } from './workspace-session-terminal-membership-authority' it('rebases a large group without rescanning tab order for every recent tab', () => { diff --git a/src/main/runtime/workspace-session-terminal-membership-authority.ts b/src/main/runtime/workspace-session-terminal-membership-authority.ts index a70edfb611f..74582cd2677 100644 --- a/src/main/runtime/workspace-session-terminal-membership-authority.ts +++ b/src/main/runtime/workspace-session-terminal-membership-authority.ts @@ -2,8 +2,8 @@ import type { Tab, TabGroup } from '../../shared/tab-types' import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode -} from '../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +} from '../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { getRepoIdFromWorktreeId } from '../../shared/worktree/id' import { pruneTabGroupLayoutAfterRetirement } from './mobile-session-terminal-retirement' diff --git a/src/main/runtime/workspace-session-terminal-tab-retirement-identity.ts b/src/main/runtime/workspace-session-terminal-tab-retirement-identity.ts index c0ffec68fba..e2a18361e4a 100644 --- a/src/main/runtime/workspace-session-terminal-tab-retirement-identity.ts +++ b/src/main/runtime/workspace-session-terminal-tab-retirement-identity.ts @@ -1,5 +1,5 @@ import type { RuntimeMobileSessionTabsSnapshot } from '../../shared/runtime-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { collectPersistedTerminalLeafIds } from './mobile-session-layout-projection' type PersistedTerminalTabIdentity = { diff --git a/src/main/runtime/workspace-session-worktree-id.test.ts b/src/main/runtime/workspace-session-worktree-id.test.ts index 9373a22abd2..0c7a2ea3c97 100644 --- a/src/main/runtime/workspace-session-worktree-id.test.ts +++ b/src/main/runtime/workspace-session-worktree-id.test.ts @@ -1,7 +1,7 @@ /** Absent tab rows mean never initialized; explicit empty rows are closed-last-tab tombstones. Re-keying must preserve that distinction. */ import { describe, expect, it } from 'vitest' import { getDefaultWorkspaceSession } from '../../shared/constants' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { canonicalizeTerminalSessionWorktreeId } from './workspace-session-worktree-id' const SOURCE = 'repo-1::/old/path' diff --git a/src/main/runtime/workspace-session-worktree-id.ts b/src/main/runtime/workspace-session-worktree-id.ts index 50cad3af826..a887e6f27b3 100644 --- a/src/main/runtime/workspace-session-worktree-id.ts +++ b/src/main/runtime/workspace-session-worktree-id.ts @@ -1,4 +1,4 @@ -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' export function canonicalizeTerminalSessionWorktreeId( session: WorkspaceSessionState, diff --git a/src/main/runtime/workspaces/known-workspace-file-target.ts b/src/main/runtime/workspaces/known-workspace-file-target.ts index 6f33012ba36..20802e7c9f8 100644 --- a/src/main/runtime/workspaces/known-workspace-file-target.ts +++ b/src/main/runtime/workspaces/known-workspace-file-target.ts @@ -16,7 +16,7 @@ import { resolveWorktreeHostRouting } from '../worktree-launch-host-repo' import { findRuntimeWorkspaceFileOwner } from '../../../shared/runtime-workspace-file-owner' import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-types' import { randomUUID } from 'node:crypto' -import type { PtyIncarnationId } from '../../../shared/pty-incarnation' +import type { PtyIncarnationId } from '../../../shared/terminal/pty/lifecycle/pty-incarnation' import { forgetPtySurface } from '../pty-recorded-surface-topology' export abstract class OrcaRuntimeWithResolveKnownWorkspaceFileTarget extends OrcaRuntimeWithPersistHeadlessTerminalTitle { diff --git a/src/main/runtime/workspaces/persisted-surfaces/has-exact-persisted-terminal-surface-identity.ts b/src/main/runtime/workspaces/persisted-surfaces/has-exact-persisted-terminal-surface-identity.ts index 0d65ee5bad7..3a554bcb9b5 100644 --- a/src/main/runtime/workspaces/persisted-surfaces/has-exact-persisted-terminal-surface-identity.ts +++ b/src/main/runtime/workspaces/persisted-surfaces/has-exact-persisted-terminal-surface-identity.ts @@ -8,8 +8,8 @@ import type { import type { PtyControllerInventory } from '../../runtime-pty-controller-contract' import { resolveTerminalSessionWorktreeId } from '../../runtime-worktree-path-identity' -import { makePaneKey } from '../../../../shared/stable-pane-id' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import { layoutContainsLeafId } from '../../../persistence/restoring-sessions/terminal-layout-normalization' import type { LegacyWorkerTerminalRecoveryPlan } from '../../orchestration/orchestration-legacy-worker-terminal-recovery' import { retireTerminalSurfacesFromSnapshot } from '../../mobile-session-terminal-retirement' diff --git a/src/main/runtime/workspaces/persisted-surfaces/restored-terminal-placement.ts b/src/main/runtime/workspaces/persisted-surfaces/restored-terminal-placement.ts index 67bfd0b4729..35c6316f97a 100644 --- a/src/main/runtime/workspaces/persisted-surfaces/restored-terminal-placement.ts +++ b/src/main/runtime/workspaces/persisted-surfaces/restored-terminal-placement.ts @@ -1,10 +1,9 @@ // Main restores unshown live terminals and reconnect facts at startup/window load, including headless hosts. -import type { ExecutionHostId } from '../../../../shared/execution-host' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { worktreeIdentityKey, worktreeIdsEqual } from '../../../../shared/worktree/id' import type { LayoutApplyReply } from '../../../../shared/workspace-layout/workspace-layout-command-types' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import { getSshConnectionManager } from '../../../ssh/targets/ssh-target-registry' import { recordPtySurface, @@ -27,7 +26,7 @@ import { panesBoundToAnotherWorkspace, panesBoundToGoneLocalTerminals } from '../../terminal/recovery/foreign-pane-bindings' -import { LOCAL_EXECUTION_HOST_ID } from '../../../../shared/execution-host' +import { type ExecutionHostId, LOCAL_EXECUTION_HOST_ID } from '../../../../shared/execution-host' import { getExplicitWorktreeIdSelector } from '../../runtime-worktree-selection' import { followExportedPaneKeys } from '../../terminal/identity/exported-pane-key-follow' diff --git a/src/main/runtime/workspaces/session-hosts/get-runtime-id.ts b/src/main/runtime/workspaces/session-hosts/get-runtime-id.ts index 860dc740b19..f74c4066b53 100644 --- a/src/main/runtime/workspaces/session-hosts/get-runtime-id.ts +++ b/src/main/runtime/workspaces/session-hosts/get-runtime-id.ts @@ -6,8 +6,9 @@ import type { OrchestrationWorkerServer } from '../../orchestration/environment-transport' import type { RuntimeOrchestrationEnvelope } from '../../../../shared/runtime-rpc-envelope' -import type { ExecutionHostId } from '../../../../shared/execution-host' + import { + type ExecutionHostId, LOCAL_EXECUTION_HOST_ID, getRepoExecutionHostId, parseExecutionHostId, @@ -16,7 +17,7 @@ import { import type { RuntimeTerminalSummary } from '../../../../shared/runtime-types' import type { ResolvedWorktree } from '../../runtime-worktree-path-identity' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../../shared/constants' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' export abstract class OrcaRuntimeWithGetRuntimeId extends OrcaRuntimeWithHasExactPersistedTerminalSurfaceIdentity { getRuntimeId(): string { diff --git a/src/main/runtime/workspaces/workspace-file-session-targets.ts b/src/main/runtime/workspaces/workspace-file-session-targets.ts index b0b01c644d6..ec99e1d63dc 100644 --- a/src/main/runtime/workspaces/workspace-file-session-targets.ts +++ b/src/main/runtime/workspaces/workspace-file-session-targets.ts @@ -27,7 +27,7 @@ import { type MarkdownTabDiskHost } from '../markdown-tab-disk-documents' import { createMarkdownTabDiskHost } from '../markdown-tab-disk-host' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' export abstract class OrcaRuntimeWithPersistHeadlessTerminalTitle extends RuntimeHeadlessTabGroups { protected abstract isRendererOwnedMobileBrowserTab( diff --git a/src/main/runtime/workspaces/workspace-query-prototype.test.ts b/src/main/runtime/workspaces/workspace-query-prototype.test.ts index 0ebd21752c2..1c3375adb4d 100644 --- a/src/main/runtime/workspaces/workspace-query-prototype.test.ts +++ b/src/main/runtime/workspaces/workspace-query-prototype.test.ts @@ -14,7 +14,7 @@ import { } from '../../../shared/constants' import type { BrowserTabInfo } from '../../../shared/runtime-browser-contracts' import type { RuntimeMobileSessionTabsSnapshot } from '../../../shared/runtime-session-contracts' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { firstWorkRenameDeps } from '../../agent-hooks/first-work-rename-runtime' const repo: Repo = { diff --git a/src/main/runtime/workspaces/workspace-selectors.ts b/src/main/runtime/workspaces/workspace-selectors.ts index cedcc329b6a..10e25e974ca 100644 --- a/src/main/runtime/workspaces/workspace-selectors.ts +++ b/src/main/runtime/workspaces/workspace-selectors.ts @@ -24,7 +24,7 @@ import type { import type { OrchestrationDb } from '../orchestration/db/orchestration-db' import { resolveNestedWorkerMaxDepth } from '../../../shared/nested-worker-depth' import type { WorkspaceLineage, WorktreeLineage } from '../../../shared/worktree/lineage-types' -import type { WorkspaceKey } from '../../../shared/folder-workspaces/folder-workspace-types' +import type { WorkspaceKey } from '../../../shared/workspace-scope' import type { Repo } from '../../../shared/repo-types' import type { RuntimeStore } from '../runtime-store-contract' import type { RuntimeWorkspaceCatalog } from './workspace-catalog' diff --git a/src/main/runtime/worktree-pty-stop-verdict.ts b/src/main/runtime/worktree-pty-stop-verdict.ts index 1c1d1c15c49..afb798f8bf2 100644 --- a/src/main/runtime/worktree-pty-stop-verdict.ts +++ b/src/main/runtime/worktree-pty-stop-verdict.ts @@ -1,4 +1,4 @@ -import type { PtyLivenessVerdict } from '../../shared/pty-liveness-verdict' +import type { PtyLivenessVerdict } from '../../shared/terminal/pty/lifecycle/pty-liveness-verdict' import type { RuntimeWorktreeTerminalCloseResult } from '../../shared/runtime-types' type WorktreePtyStopVerdict = Pick< diff --git a/src/main/runtime/wsl-moved-project-chat-runtime.test.ts b/src/main/runtime/wsl-moved-project-chat-runtime.test.ts index 97d2e08bdf2..5ac84d74145 100644 --- a/src/main/runtime/wsl-moved-project-chat-runtime.test.ts +++ b/src/main/runtime/wsl-moved-project-chat-runtime.test.ts @@ -6,7 +6,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { Repo } from '../../shared/repo-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { getDefaultWorkspaceSession } from '../../shared/constants' import type { Store } from '../persistence/loading-store/store' import { closeTestStores, createStore, testState } from '../persistence/persistence-test-harness' diff --git a/src/main/server/serve-readiness.ts b/src/main/server/serve-readiness.ts index 9aab8262ce5..961bc79b6e6 100644 --- a/src/main/server/serve-readiness.ts +++ b/src/main/server/serve-readiness.ts @@ -1,6 +1,6 @@ import type { PairingOfferUnavailableReason } from '../runtime/runtime-rpc/runtime-rpc-pairing-types' import type { OrcadHealth } from '../orcad/orcad-health' -import { describePtyProcessCeiling } from '../../shared/pty-process-ceiling-state' +import { describePtyProcessCeiling } from '../../shared/terminal/pty/native-process/pty-process-ceiling-state' export type ServePairingUnavailableReason = PairingOfferUnavailableReason | 'disabled_by_operator' diff --git a/src/main/skills/claude-plugin-skill-sources-wsl.ts b/src/main/skills/claude-plugin-skill-sources-wsl.ts index 1303f2efd33..be78917cfd7 100644 --- a/src/main/skills/claude-plugin-skill-sources-wsl.ts +++ b/src/main/skills/claude-plugin-skill-sources-wsl.ts @@ -1,5 +1,5 @@ import { posix as pathPosix } from 'node:path' -import { quotePosixShell as quoteBashString } from '../../shared/shell-argument-quoting' +import { quotePosixShell as quoteBashString } from '../../shared/shell/launch/shell-argument-quoting' import { runWslProcess } from '../wsl/execution/wsl-runner' import { getClaudePluginMetadataPaths, diff --git a/src/main/skills/skill-discovery-wsl.ts b/src/main/skills/skill-discovery-wsl.ts index 0d061f38d43..c67ac576b13 100644 --- a/src/main/skills/skill-discovery-wsl.ts +++ b/src/main/skills/skill-discovery-wsl.ts @@ -6,7 +6,7 @@ import { export { parseWslSkillDiscoveryOutput } from './skill-discovery-wsl-observation' import { posix as pathPosix } from 'node:path' import type { SkillDiscoveryResult, SkillSourceKind } from '../../shared/skills' -import { quotePosixShell as quoteBashString } from '../../shared/shell-argument-quoting' +import { quotePosixShell as quoteBashString } from '../../shared/shell/launch/shell-argument-quoting' import { runWslProcess } from '../wsl/execution/wsl-runner' import { buildSkillDiscoverySources, type SkillScanRoot } from './skill-discovery-sources' import { rootMayContainSourceKind } from './skill-discovery-source-filter' diff --git a/src/main/skills/skill-wsl-provider-detection.ts b/src/main/skills/skill-wsl-provider-detection.ts index 1ff5821dc55..daddd04b714 100644 --- a/src/main/skills/skill-wsl-provider-detection.ts +++ b/src/main/skills/skill-wsl-provider-detection.ts @@ -4,7 +4,7 @@ import { KNOWN_TUI_AGENT_DETECTION_COMMANDS, resolveDetectedTuiAgentIds } from '../../shared/agent-launch/catalog/tui-agent-detection-commands' -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' import { runWslProcess } from '../wsl/execution/wsl-runner' const PROVIDER_DETECTION_COMMANDS = KNOWN_TUI_AGENT_DETECTION_COMMANDS.filter((command) => diff --git a/src/main/ssh/connection/ssh-expired-lease-pane-readoption.test.ts b/src/main/ssh/connection/ssh-expired-lease-pane-readoption.test.ts index 2e82188f0b0..7ef799ea918 100644 --- a/src/main/ssh/connection/ssh-expired-lease-pane-readoption.test.ts +++ b/src/main/ssh/connection/ssh-expired-lease-pane-readoption.test.ts @@ -2,7 +2,7 @@ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest' import { rmSync, mkdtempSync } from 'node:fs' import { join } from 'node:path' import { tmpdir } from 'node:os' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { resolvePersistedStablePaneOwner } from '../../ipc/pty/pane/stable-owner' import { adoptStablePane } from '../../ipc/pty/pane/adopt-stable' import { PtyHostNotDispatchableError } from '../../ipc/pty/provider/registry' 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 9688172aebe..27e89c81244 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 @@ -24,7 +24,7 @@ import { ORCAD_READINESS_FILENAME } from '../../managed-server/install/orcad-remote-host-support' import { decommissionRemoteOrcad } from '../../managed-server/install/orcad-remote-decommission' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { forbiddenToolActions, type HostileHostCellCore, diff --git a/src/main/ssh/legacy-relay/legacy-relay-bridge-leases.ts b/src/main/ssh/legacy-relay/legacy-relay-bridge-leases.ts index 5b7e37d1d2c..e1d2db12a9b 100644 --- a/src/main/ssh/legacy-relay/legacy-relay-bridge-leases.ts +++ b/src/main/ssh/legacy-relay/legacy-relay-bridge-leases.ts @@ -5,7 +5,7 @@ import { toAppSshPtyId } from '../../../shared/ssh-pty-id' import type { SshRemotePtyLease } from '../../../shared/ssh-types' import type { LegacyRelayBridgedPane } from '../../../shared/legacy-relay-bridge-contract' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import type { LegacyRelayClient, LegacyRelayPty } from './legacy-relay-client' import { isEpochScopedRelayPtyId } from '../../../shared/ssh-pending-pty-kill' import type { LegacyRelayPaneOwners } from './legacy-relay-pane-owners' diff --git a/src/main/ssh/legacy-relay/legacy-relay-cli-caller.ts b/src/main/ssh/legacy-relay/legacy-relay-cli-caller.ts index 5abd9f57cbd..4767b6f0bc5 100644 --- a/src/main/ssh/legacy-relay/legacy-relay-cli-caller.ts +++ b/src/main/ssh/legacy-relay/legacy-relay-cli-caller.ts @@ -7,7 +7,7 @@ * the claimed handle (as a Dispatch assignee or a Run coordinator). It then reaches only its own * mailboxes, its own Dispatch or Run, and the other party of that same orchestration. */ -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import type { OrcaRuntimeService } from '../../runtime/orca-runtime' import type { OrchestrationDb } from '../../runtime/orchestration/db' import { isEquivalentPaneKey } from '../../runtime/orchestration/db/pane-key-match' diff --git a/src/main/ssh/legacy-relay/legacy-relay-endpoints.ts b/src/main/ssh/legacy-relay/legacy-relay-endpoints.ts index 1a1d46e4e43..a487ce51dde 100644 --- a/src/main/ssh/legacy-relay/legacy-relay-endpoints.ts +++ b/src/main/ssh/legacy-relay/legacy-relay-endpoints.ts @@ -1,6 +1,6 @@ /** List this target's legacy sockets/pipes and their own bridge commands without changing them; other desktops hash different target ids. COMPAT(legacy-relay-bridge): revisit 2027-01-15. */ import type { SshConnection } from '../connection/ssh-connection' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { RELAY_REMOTE_DIR } from '../remote-exec/remote-frame-protocol' import { SHORT_RELAY_SOCKET_DIR_PREFIX } from '../relay-socket-path-limit' import { execCommand } from '../remote-exec/remote-exec-command' diff --git a/src/main/ssh/legacy-relay/ssh-host-relay-endpoint-census.ts b/src/main/ssh/legacy-relay/ssh-host-relay-endpoint-census.ts index a113a13c4a7..627d5a431bb 100644 --- a/src/main/ssh/legacy-relay/ssh-host-relay-endpoint-census.ts +++ b/src/main/ssh/legacy-relay/ssh-host-relay-endpoint-census.ts @@ -1,6 +1,6 @@ /** Census all account-owned relays, including other desktops, before a session exists. Failed/truncated listings and unknown endpoints stay unverifiable; lost contact never proves exit (docs/reference/ssh-execution-boundary.md). */ import type { SshConnection } from '../connection/ssh-connection' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { RELAY_REMOTE_DIR } from '../remote-exec/remote-frame-protocol' import { SHORT_RELAY_SOCKET_DIR_PREFIX } from '../relay-socket-path-limit' import { execCommand } from '../remote-exec/remote-exec-command' diff --git a/src/main/ssh/legacy-relay/ssh-relay-endpoint-incumbent.ts b/src/main/ssh/legacy-relay/ssh-relay-endpoint-incumbent.ts index 15c159a1a02..2b2c29e8133 100644 --- a/src/main/ssh/legacy-relay/ssh-relay-endpoint-incumbent.ts +++ b/src/main/ssh/legacy-relay/ssh-relay-endpoint-incumbent.ts @@ -1,7 +1,7 @@ /** Probe this endpoint only: unlinking a refusing live socket strands its relay/PTYs (#8585). Exit requires refused connect, complete no-holder evidence and local storage; shared-home sockets may live on another kernel. Missing tools or ambiguous failures stay unverifiable and never authorize cleanup (docs/reference/ssh-execution-boundary.md). */ import { RELAY_LSOF_PROBE_JS } from '@orca/process-host/posix-lsof-probe' import type { SshConnection } from '../connection/ssh-connection' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { RELAY_CHILD_COUNT_VAR, RELAY_UNRECOGNIZED_CHILD_COUNT_VAR, diff --git a/src/main/ssh/legacy-relay/ssh-relay-endpoint-pty-count.ts b/src/main/ssh/legacy-relay/ssh-relay-endpoint-pty-count.ts index 2514841a5a6..f90ec470c70 100644 --- a/src/main/ssh/legacy-relay/ssh-relay-endpoint-pty-count.ts +++ b/src/main/ssh/legacy-relay/ssh-relay-endpoint-pty-count.ts @@ -1,7 +1,7 @@ /** Ask via the relay's own bridge/hash when process-table evidence is incomplete. pty.listProcesses needs no owner role and cannot take another desktop's PTYs. */ import type { SshConnection } from '../connection/ssh-connection' import { SshChannelMultiplexer } from '../ssh-channel-multiplexer' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { SHORT_RELAY_SOCKET_DIR_PREFIX } from '../relay-socket-path-limit' import { waitForSentinel } from './ssh-relay-sentinel' diff --git a/src/main/ssh/orcad-bash-stdio-bridge-test-host.ts b/src/main/ssh/orcad-bash-stdio-bridge-test-host.ts index d9188f1c435..b37456fa4d8 100644 --- a/src/main/ssh/orcad-bash-stdio-bridge-test-host.ts +++ b/src/main/ssh/orcad-bash-stdio-bridge-test-host.ts @@ -2,7 +2,7 @@ import { spawnSync } from 'node:child_process' import { mkdirSync, mkdtempSync, symlinkSync, writeFileSync } from 'node:fs' import { join } from 'node:path' -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' function commandPath(name: string): string { return spawnSync('sh', ['-c', `command -v ${name}`], { encoding: 'utf8' }).stdout.trim() diff --git a/src/main/ssh/orcad-exited-own-lock.ts b/src/main/ssh/orcad-exited-own-lock.ts index 8e17c78e800..0d269f0ea4a 100644 --- a/src/main/ssh/orcad-exited-own-lock.ts +++ b/src/main/ssh/orcad-exited-own-lock.ts @@ -21,7 +21,7 @@ import { ORCAD_STATE_MUTATION_LOCK_DIRNAME } from '../managed-server/host-state/orcad-state-snapshot-members' import { CMD_EXE_COMMAND_LINE_MAX_CHARS } from '../providers/windows-shell-args' -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' import type { InstallLockExitedOwnerProof } from '../managed-server/install/remote-install-lock' import { isWindowsRemoteHost, joinRemotePath } from './ssh-remote-platform' diff --git a/src/main/ssh/orcad-initial-activation-admission.ts b/src/main/ssh/orcad-initial-activation-admission.ts index 92f03e2724f..32b65982b56 100644 --- a/src/main/ssh/orcad-initial-activation-admission.ts +++ b/src/main/ssh/orcad-initial-activation-admission.ts @@ -1,7 +1,7 @@ /** Before first activation, rule out hand-started orcad/headless owners of the data root. Live, unreadable or unexpected PID records defer to avoid concurrent owners. */ import { ORCAD_LOCK_FILE_NAME } from '../orcad/orcad-instance-lock' import { PRIMARY_RUNTIME_METADATA_FILE } from '../../shared/runtime-bootstrap' -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' import { selectOrcadSlotRuntimeCommand } from '../managed-server/install/orcad-remote-runtime' import { isWindowsRemoteHost, joinRemotePath, type RemoteHostPlatform } from './ssh-remote-platform' import { orcadWindowsSlotOpCommand } from '../managed-server/install/orcad-remote-windows-node' diff --git a/src/main/ssh/orcad-launch-ssh-session.ts b/src/main/ssh/orcad-launch-ssh-session.ts index 2b03469f4e4..29d6fb5e0bb 100644 --- a/src/main/ssh/orcad-launch-ssh-session.ts +++ b/src/main/ssh/orcad-launch-ssh-session.ts @@ -1,5 +1,5 @@ /** macOS pins Local Network attribution at spawn: SSH-launched terminals can lose LAN access after sshd-session exits (#25934; Apple TN3179). Record the nearest session plus start time and matching slot PID; preserve earlier attribution while a live terminal daemon survives orcad restarts. */ -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' import { joinRemotePath, type RemoteHostPlatform } from './ssh-remote-platform' import { ORCAD_PID_FILENAME } from '../managed-server/install/orcad-remote-host-support' diff --git a/src/main/ssh/orcad-migration-bridged-panes.ts b/src/main/ssh/orcad-migration-bridged-panes.ts index 9cb10b6d1c2..260f75442c8 100644 --- a/src/main/ssh/orcad-migration-bridged-panes.ts +++ b/src/main/ssh/orcad-migration-bridged-panes.ts @@ -1,6 +1,6 @@ import type { OrcadMigrationCatalogPayload } from '../../shared/orcad-migration/orcad-migration-manifest' import type { SshRemotePtyLease } from '../../shared/ssh-types' -import { collectLeafIds } from '../../shared/terminal-pane-layout-tree' +import { collectLeafIds } from '../../shared/workspace-layout/terminal-pane-layout-tree' import { normalizeWorkspaceSessionKeyToWorkspaceId } from '../../shared/workspace-scope' export type OrcadMigrationPaneLeasePredicate = (lease: SshRemotePtyLease) => boolean diff --git a/src/main/ssh/orcad-migration-delta-move.test.ts b/src/main/ssh/orcad-migration-delta-move.test.ts index 3d98dca9ef6..c89e680de5a 100644 --- a/src/main/ssh/orcad-migration-delta-move.test.ts +++ b/src/main/ssh/orcad-migration-delta-move.test.ts @@ -12,7 +12,7 @@ import { } from '../../shared/remote-runtime/host-store/runtime-environment-store' import type { Repo } from '../../shared/repo-types' import type { SshTarget } from '../../shared/ssh-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { folderWorkspaceKey } from '../../shared/workspace-scope' import { closeTestStores, diff --git a/src/main/ssh/orcad-migration-path-rewrite.test.ts b/src/main/ssh/orcad-migration-path-rewrite.test.ts index c675738b19e..4747bada91a 100644 --- a/src/main/ssh/orcad-migration-path-rewrite.test.ts +++ b/src/main/ssh/orcad-migration-path-rewrite.test.ts @@ -2,7 +2,7 @@ import { describe, expect, it } from 'vitest' import type { OrcadMigrationCatalogPayload } from '../../shared/orcad-migration/orcad-migration-manifest' import { isRecord } from '../../shared/orcad-migration/orcad-migration-manifest-fields' -import { ownedEditorFileId } from '../../shared/workspace-session-pane-ownership' +import { ownedEditorFileId } from '../../shared/workspace-session/workspace-session-pane-ownership' import { ORCAD_MIGRATION_PATH_FIELDS, type OrcadMigrationPathFieldKind diff --git a/src/main/ssh/orcad-migration-path-rewrite.ts b/src/main/ssh/orcad-migration-path-rewrite.ts index fcafda4502c..2b4d59c30c2 100644 --- a/src/main/ssh/orcad-migration-path-rewrite.ts +++ b/src/main/ssh/orcad-migration-path-rewrite.ts @@ -1,7 +1,7 @@ /** Rewrite differing source/destination paths, such as WSL via \wsl.localhost; SSH identity rewriting must preserve payload bytes. */ import type { OrcadMigrationCatalogPayload } from '../../shared/orcad-migration/orcad-migration-manifest' import { isRecord } from '../../shared/orcad-migration/orcad-migration-manifest-fields' -import { PTY_SESSION_ID_SEPARATOR } from '../../shared/pty-session-id-format' +import { PTY_SESSION_ID_SEPARATOR } from '../../shared/terminal/pty/lifecycle/pty-session-id-format' import { parseWorkspaceKey } from '../../shared/workspace-scope' import { rewriteWorktreeIdPath } from '../../shared/worktree/id' import { diff --git a/src/main/ssh/orcad-migration-source-retention.test.ts b/src/main/ssh/orcad-migration-source-retention.test.ts index 5d672ddb2c7..be7bfd34ab6 100644 --- a/src/main/ssh/orcad-migration-source-retention.test.ts +++ b/src/main/ssh/orcad-migration-source-retention.test.ts @@ -4,7 +4,7 @@ import { join } from 'node:path' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { Repo } from '../../shared/repo-types' -import type { PersistedOpenFile } from '../../shared/workspace-session-state-types' +import type { PersistedOpenFile } from '../../shared/workspace-session/workspace-session-state-types' import { closeTestStores, createSqliteTestStore } from '../persistence/persistence-test-harness' import { Store } from '../persistence/loading-store/store' import { diff --git a/src/main/ssh/orcad-migration-source-retention.ts b/src/main/ssh/orcad-migration-source-retention.ts index a493befa53e..020863c2314 100644 --- a/src/main/ssh/orcad-migration-source-retention.ts +++ b/src/main/ssh/orcad-migration-source-retention.ts @@ -1,7 +1,7 @@ /** Keep source rows for downgraded clients using their old relays; new clients hide them and serve managed state. Never delete retained rows automatically. */ import { toRuntimeExecutionHostId } from '../../shared/execution-host' import type { OrcadMigrationSourceCutover } from '../../shared/orcad-migration/orcad-migration-source-cutover' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import type { Store } from '../persistence/loading-store/store' import { withRenamedOrcadMigrationDrafts } from '../persistence/migrating-orcad-catalog/orcad-source-draft-rename' import { diff --git a/src/main/ssh/orcad-migration-stuck-host-profiles.test.ts b/src/main/ssh/orcad-migration-stuck-host-profiles.test.ts index 1e4bac912ff..55752b0d5c9 100644 --- a/src/main/ssh/orcad-migration-stuck-host-profiles.test.ts +++ b/src/main/ssh/orcad-migration-stuck-host-profiles.test.ts @@ -6,7 +6,7 @@ import { getDefaultPersistedState, getDefaultWorkspaceSession } from '../../shar import type { FolderWorkspace } from '../../shared/folder-workspaces/folder-workspace-types' import type { PersistedState } from '../../shared/persisted-state-types' import type { SshRemotePtyLease, SshTarget } from '../../shared/ssh-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import { closeTestStores, createSqliteTestStore } from '../persistence/persistence-test-harness' import { Store } from '../persistence/loading-store/store' import { @@ -25,7 +25,7 @@ import { leaveBehindClearsOrcadMigrationBlockers, onlyLeavableOrcadMigrationBlockers } from './targets/ssh-target-orcad-preflight' -import { ownedEditorFileId } from '../../shared/workspace-session-pane-ownership' +import { ownedEditorFileId } from '../../shared/workspace-session/workspace-session-pane-ownership' import { allowsDirectSshRelay } from './connection/ssh-connection-store' // Load relay-era profiles through the real Store, then exercise terminal proof, lease retirement and fenced preflight. diff --git a/src/main/ssh/orcad-remote-deploy.test.ts b/src/main/ssh/orcad-remote-deploy.test.ts index 4a3bc4172e1..18c5ac08685 100644 --- a/src/main/ssh/orcad-remote-deploy.test.ts +++ b/src/main/ssh/orcad-remote-deploy.test.ts @@ -10,7 +10,9 @@ vi.mock('./remote-exec/remote-exec-command', async (importOriginal) => ({ ...(await importOriginal()), execCommand: vi.fn() })) -vi.mock('../../shared/shell-argument-quoting', () => ({ quotePosixShell: (s: string) => `'${s}'` })) +vi.mock('../../shared/shell/launch/shell-argument-quoting', () => ({ + quotePosixShell: (s: string) => `'${s}'` +})) vi.mock('../managed-server/install/remote-install-lock', () => ({ acquireInstallLock: vi.fn().mockResolvedValue(undefined), isRelayInstallLockStale: vi.fn().mockResolvedValue(false), diff --git a/src/main/ssh/orcad-snapshot-room.test.ts b/src/main/ssh/orcad-snapshot-room.test.ts index c0bac203e07..1c0c65caa48 100644 --- a/src/main/ssh/orcad-snapshot-room.test.ts +++ b/src/main/ssh/orcad-snapshot-room.test.ts @@ -8,7 +8,9 @@ vi.mock('./remote-exec/remote-exec-command', async (importOriginal) => ({ ...(await importOriginal()), execCommand: vi.fn() })) -vi.mock('../../shared/shell-argument-quoting', () => ({ quotePosixShell: (s: string) => `'${s}'` })) +vi.mock('../../shared/shell/launch/shell-argument-quoting', () => ({ + quotePosixShell: (s: string) => `'${s}'` +})) vi.mock('../managed-server/install/remote-install-lock', async (importOriginal) => ({ ...(await importOriginal()), acquireInstallLock: vi.fn() diff --git a/src/main/ssh/orcad-update-admission-fence.test.ts b/src/main/ssh/orcad-update-admission-fence.test.ts index 7765b5a5a15..1fcc7162081 100644 --- a/src/main/ssh/orcad-update-admission-fence.test.ts +++ b/src/main/ssh/orcad-update-admission-fence.test.ts @@ -9,7 +9,9 @@ vi.mock('./remote-exec/remote-exec-command', async (importOriginal) => ({ ...(await importOriginal()), execCommand: vi.fn() })) -vi.mock('../../shared/shell-argument-quoting', () => ({ quotePosixShell: (s: string) => `'${s}'` })) +vi.mock('../../shared/shell/launch/shell-argument-quoting', () => ({ + quotePosixShell: (s: string) => `'${s}'` +})) vi.mock('../managed-server/install/remote-install-lock', async (importOriginal) => ({ ...(await importOriginal()), acquireInstallLock: vi.fn() @@ -39,9 +41,10 @@ import { deployOrcad } from './orcad-remote-deploy' import { getRemoteHostPlatform } from './ssh-remote-platform' import { ORCAD_UPDATE_ADMISSION_FENCE_MS, - ORCAD_UPDATE_ADMISSION_STOP_BY_MS + ORCAD_UPDATE_ADMISSION_STOP_BY_MS, + type OrcadTerminalCensus } from '../../shared/orcad-terminal-census' -import type { OrcadTerminalCensus } from '../../shared/orcad-terminal-census' + import { TerminalUpdateAdmission, TerminalUpdateAdmissionClosedError diff --git a/src/main/ssh/relay-daemon-service-children.ts b/src/main/ssh/relay-daemon-service-children.ts index 6c8ecd75e60..733d7cc004d 100644 --- a/src/main/ssh/relay-daemon-service-children.ts +++ b/src/main/ssh/relay-daemon-service-children.ts @@ -1,6 +1,6 @@ /** Exclude only positively identified daemon service children from reap decisions. Persistent AI Vault sidecars made raw childCount===0 unreachable (#13614); unknown argv/children still retain the relay (docs/reference/ssh-execution-boundary.md). */ import { RELAY_DAEMON_SERVICE_ENTRY_FILENAMES } from './relay-install-artifacts' -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' export const RELAY_CHILD_COUNT_VAR = 'kids' diff --git a/src/main/ssh/ssh-agent-hook-interrupt-reconciliation.test.ts b/src/main/ssh/ssh-agent-hook-interrupt-reconciliation.test.ts index 58d13b47929..e657319003f 100644 --- a/src/main/ssh/ssh-agent-hook-interrupt-reconciliation.test.ts +++ b/src/main/ssh/ssh-agent-hook-interrupt-reconciliation.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from 'vitest' import { AgentHookServer } from '../agent-hooks/server' -import { makePaneKey } from '../../shared/stable-pane-id' +import { makePaneKey } from '../../shared/workspace-layout/stable-pane-id' import { AGENT_HOOK_INFER_INTERRUPT_METHOD } from '../../shared/agent-hook-listener/transport/agent-hook-interrupt-reconciliation' import { bindRemoteClaudeInterruptReconciliation } from './ssh-agent-hook-interrupt-reconciliation' diff --git a/src/main/ssh/ssh-exec-stdin-file-transfer.ts b/src/main/ssh/ssh-exec-stdin-file-transfer.ts index a55ade76b01..5d4405d6ca2 100644 --- a/src/main/ssh/ssh-exec-stdin-file-transfer.ts +++ b/src/main/ssh/ssh-exec-stdin-file-transfer.ts @@ -5,7 +5,7 @@ import { lstat, open } from 'node:fs/promises' import { posix } from 'node:path' import { Readable } from 'node:stream' import type { RemoteInstallTransport } from '../managed-server/install/remote-install-transport' -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' import { execCommand } from './remote-exec/remote-exec-command' import { REMOTE_INSTALL_TIMEOUT_MS } from '../managed-server/install/remote-deploy-timing' import type { RemoteHostPlatform } from './ssh-remote-platform' diff --git a/src/main/ssh/ssh-login-shell-command.ts b/src/main/ssh/ssh-login-shell-command.ts index c2b8731c965..86e3ffd03fe 100644 --- a/src/main/ssh/ssh-login-shell-command.ts +++ b/src/main/ssh/ssh-login-shell-command.ts @@ -1,4 +1,4 @@ -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' import { buildAnyShellStdoutFence } from '../../shared/posix-stdout-fence' const COMMAND_ONLY_SHELLS = new Set(['sh', 'dash', 'csh', 'tcsh']) diff --git a/src/main/ssh/ssh-multiplexer-transport-writer.ts b/src/main/ssh/ssh-multiplexer-transport-writer.ts index 6c9778b14ef..f1b384c8fbe 100644 --- a/src/main/ssh/ssh-multiplexer-transport-writer.ts +++ b/src/main/ssh/ssh-multiplexer-transport-writer.ts @@ -1,6 +1,9 @@ import { HEADER_LENGTH, MAX_MESSAGE_SIZE } from '../../shared/relay-frame-decoder' import { SshMultiplexerWriterLaneScheduler } from './ssh-multiplexer-writer-lane-scheduler' -import type { WriteAmbiguityReason, WriteRefusalReason } from '../../shared/pty-write-settlement' +import type { + WriteAmbiguityReason, + WriteRefusalReason +} from '../../shared/terminal/pty/lifecycle/pty-write-settlement' export type MultiplexerTransportWriteResult = { ok: true } | { ok: false; error: Error } diff --git a/src/main/ssh/ssh-posix-command-wrapper.test.ts b/src/main/ssh/ssh-posix-command-wrapper.test.ts index e6c8497c655..faab2e81ecc 100644 --- a/src/main/ssh/ssh-posix-command-wrapper.test.ts +++ b/src/main/ssh/ssh-posix-command-wrapper.test.ts @@ -5,7 +5,7 @@ import { describe, expect, it } from 'vitest' import { chmodSync, existsSync, mkdtempSync, writeFileSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' import { REMOTE_COMMAND_DECODER_UNAVAILABLE, REMOTE_COMMAND_DECODER_UNAVAILABLE_EXIT, diff --git a/src/main/ssh/ssh-posix-command-wrapper.ts b/src/main/ssh/ssh-posix-command-wrapper.ts index acf68f60d47..17b0555540b 100644 --- a/src/main/ssh/ssh-posix-command-wrapper.ts +++ b/src/main/ssh/ssh-posix-command-wrapper.ts @@ -1,6 +1,6 @@ import { encodePosixPrintfRecords } from '../../shared/posix-printf-encoding' import { gzipSync } from 'node:zlib' -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' const REMOTE_COMMAND_COMPRESSION_THRESHOLD_BYTES = 8_000 diff --git a/src/main/ssh/ssh-proxy-command.ts b/src/main/ssh/ssh-proxy-command.ts index d1f47202b7a..8b46a625c40 100644 --- a/src/main/ssh/ssh-proxy-command.ts +++ b/src/main/ssh/ssh-proxy-command.ts @@ -4,7 +4,7 @@ import { Duplex } from 'node:stream' import type { Socket as NetSocket } from 'node:net' import type { SshTarget } from '../../shared/ssh-types' import type { SshResolvedConfig } from './config/ssh-g-config-resolution' -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' import { isOpenSshConfigBackedTarget } from './system-transport/system-ssh-args' // Normalize ProxyJump/jumpHost to the ProxyCommand equivalent so ssh2 has one proxy transport path. diff --git a/src/main/ssh/ssh-remote-commands.ts b/src/main/ssh/ssh-remote-commands.ts index 57e3bc1f777..37e15c9a259 100644 --- a/src/main/ssh/ssh-remote-commands.ts +++ b/src/main/ssh/ssh-remote-commands.ts @@ -2,11 +2,16 @@ import { remoteInstallListingRegexSource, type RemoteInstallModel } from '../managed-server/install/remote-install-model' -import type { RemoteHostPlatform } from './ssh-remote-platform' -import { isWindowsRemoteHost, joinRemotePath, remoteDirname } from './ssh-remote-platform' + +import { + type RemoteHostPlatform, + isWindowsRemoteHost, + joinRemotePath, + remoteDirname +} from './ssh-remote-platform' import { powerShellCommand } from './ssh-remote-powershell' import { quotePowerShellLiteral as powerShellLiteral } from '../../shared/powershell-native-argument' -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' export function readRemoteHomeCommand(host: RemoteHostPlatform): string { if (!isWindowsRemoteHost(host)) { diff --git a/src/main/ssh/ssh-remote-directory-browse.ts b/src/main/ssh/ssh-remote-directory-browse.ts index ce3cccc8dcc..8b377876cf3 100644 --- a/src/main/ssh/ssh-remote-directory-browse.ts +++ b/src/main/ssh/ssh-remote-directory-browse.ts @@ -1,4 +1,4 @@ -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' import type { SshConnectionManager } from './connection/ssh-connection-manager' import type { SshExecOptions } from './connection/ssh-exec-options' import { powerShellCommand } from './ssh-remote-powershell' diff --git a/src/main/ssh/ssh-remote-node-toolchain-probe.ts b/src/main/ssh/ssh-remote-node-toolchain-probe.ts index dfa22c587be..9230f6ca537 100644 --- a/src/main/ssh/ssh-remote-node-toolchain-probe.ts +++ b/src/main/ssh/ssh-remote-node-toolchain-probe.ts @@ -1,5 +1,5 @@ import { posix as posixPath } from 'node:path' -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' import { quotePowerShellLiteral as powerShellLiteral } from '../../shared/powershell-native-argument' const MIN_HOST_NODE_MAJOR = 18 diff --git a/src/main/ssh/system-transport/system-ssh-file-binary-transfer.ts b/src/main/ssh/system-transport/system-ssh-file-binary-transfer.ts index b55788fc830..8a44be18072 100644 --- a/src/main/ssh/system-transport/system-ssh-file-binary-transfer.ts +++ b/src/main/ssh/system-transport/system-ssh-file-binary-transfer.ts @@ -5,7 +5,7 @@ import { join } from 'node:path' import type { Writable } from 'node:stream' import { pipeline } from 'node:stream/promises' import type { SshTarget } from '../../../shared/ssh-types' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { getSystemSshBuildArgsFromOperationOptions, type SystemSshBuildArgsOptions diff --git a/src/main/ssh/system-transport/system-ssh-file-transfer.ts b/src/main/ssh/system-transport/system-ssh-file-transfer.ts index 5a27e88ad79..7f1988b5124 100644 --- a/src/main/ssh/system-transport/system-ssh-file-transfer.ts +++ b/src/main/ssh/system-transport/system-ssh-file-transfer.ts @@ -4,7 +4,7 @@ import { lstat, opendir } from 'node:fs/promises' import { join as pathJoin } from 'node:path' import { pipeline } from 'node:stream/promises' import type { SshTarget } from '../../../shared/ssh-types' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { wrapRemoteCommandForPosixShell } from '../ssh-posix-command-wrapper' import { findSystemSsh } from './system-ssh-binary' import { diff --git a/src/main/ssh/targets/ssh-target-id-migration.test.ts b/src/main/ssh/targets/ssh-target-id-migration.test.ts index 623616dec3b..650a4dd080f 100644 --- a/src/main/ssh/targets/ssh-target-id-migration.test.ts +++ b/src/main/ssh/targets/ssh-target-id-migration.test.ts @@ -1,7 +1,7 @@ import { describe, it, expect } from 'vitest' import type { PersistedUIState } from '../../../shared/persisted-ui-state-types' -import type { TerminalTab } from '../../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { migrateUiHostScopeSshTargetId, migrateWorkspaceSessionSshTargetId diff --git a/src/main/ssh/targets/ssh-target-id-migration.ts b/src/main/ssh/targets/ssh-target-id-migration.ts index 50f723e4b70..7d2ccbb4958 100644 --- a/src/main/ssh/targets/ssh-target-id-migration.ts +++ b/src/main/ssh/targets/ssh-target-id-migration.ts @@ -1,7 +1,7 @@ import type { FolderWorkspace } from '../../../shared/folder-workspaces/folder-workspace-types' import type { PersistedUIState } from '../../../shared/persisted-ui-state-types' import type { ProjectGroup } from '../../../shared/project-group-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { parseAppSshPtyId, toAppSshPtyId } from '../../../shared/ssh-pty-id' import { toSshExecutionHostId } from '../../../shared/execution-host' import { normalizeManualRepoOrder } from '../../../shared/manual-repo-order' diff --git a/src/main/ssh/targets/ssh-target-orcad-dependents.ts b/src/main/ssh/targets/ssh-target-orcad-dependents.ts index 3a4f728433f..b60cb1d259f 100644 --- a/src/main/ssh/targets/ssh-target-orcad-dependents.ts +++ b/src/main/ssh/targets/ssh-target-orcad-dependents.ts @@ -4,7 +4,7 @@ import { getDefaultWorkspaceSession } from '../../../shared/constants' import { toSshExecutionHostId, type ExecutionHostId } from '../../../shared/execution-host' import { getRepoRegistrationHostIds } from '../../../shared/repo-host-identity' import { getRepoIdFromWorktreeId } from '../../../shared/worktree/id' -import { GLOBAL_WORKSPACE_SESSION_FIELDS } from '../../../shared/workspace-session-host-field-ownership' +import { GLOBAL_WORKSPACE_SESSION_FIELDS } from '../../../shared/workspace-session/workspace-session-host-field-ownership' import { ORCAD_MIGRATION_DEPENDENCY_KINDS, type OrcadMigrationBlocker, diff --git a/src/main/startup/hydrate-shell-path.ts b/src/main/startup/hydrate-shell-path.ts index dec9b9a98af..6bff7dcd290 100644 --- a/src/main/startup/hydrate-shell-path.ts +++ b/src/main/startup/hydrate-shell-path.ts @@ -2,7 +2,7 @@ import type { SpawnedProcess } from '@orca/process-host/process-spec' import { delimiter, win32 as pathWin32 } from 'node:path' import { spawnProcess } from '@orca/process-host' import { stripAnsiEscapeSequences } from '../../shared/ansi-escape-sequences' -import type { ShellHydrationFailureReason } from '../../shared/shell-path-hydration-types' +import type { ShellHydrationFailureReason } from '../../shared/shell/launch/shell-path-hydration-types' import { resolveWindowsShellStartupFamily } from '../../shared/windows-terminal-shell' import { SHELL_PATH_DELIMITER as DELIMITER, shellPathProbe } from './shell-path-probe' import { WindowsShellPathOwnership, createWindowsPathKey } from './windows-shell-path-ownership' diff --git a/src/main/text-generation/source-control-agent-cli-path.test.ts b/src/main/text-generation/source-control-agent-cli-path.test.ts index 4accefe8523..fb4b9c31ed4 100644 --- a/src/main/text-generation/source-control-agent-cli-path.test.ts +++ b/src/main/text-generation/source-control-agent-cli-path.test.ts @@ -2,7 +2,7 @@ import { chmodSync, mkdirSync, mkdtempSync, rmSync, symlinkSync, writeFileSync } import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, describe, expect, it } from 'vitest' -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' import { generateConversationNameFromContext } from './commit-message-text-generation' const homes: string[] = [] diff --git a/src/main/text-generation/source-control-wsl-launch.test.ts b/src/main/text-generation/source-control-wsl-launch.test.ts index 93d74d836fb..4e72b831ad5 100644 --- a/src/main/text-generation/source-control-wsl-launch.test.ts +++ b/src/main/text-generation/source-control-wsl-launch.test.ts @@ -5,7 +5,7 @@ import { rm } from 'node:fs/promises' import { tmpdir } from 'node:os' import { join } from 'node:path' import { expect, it, vi, afterEach } from 'vitest' -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' import { commandLineLength, MAX_COMMAND_LINE_CHARS } from '../../shared/windows-command-line-budget' import { prepareWslPrompt } from './source-control-prompt-files' import { producePromptRecords } from './source-control-prompt-producer' diff --git a/src/main/updater/linux-package/linux-package-install-command.test.ts b/src/main/updater/linux-package/linux-package-install-command.test.ts index 19baa9fd075..91482df01dd 100644 --- a/src/main/updater/linux-package/linux-package-install-command.test.ts +++ b/src/main/updater/linux-package/linux-package-install-command.test.ts @@ -1,5 +1,5 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { quotePosixShellDoubleQuotedApostrophe } from '../../../shared/shell-argument-quoting' +import { quotePosixShellDoubleQuotedApostrophe } from '../../../shared/shell/launch/shell-argument-quoting' const { statSyncMock } = vi.hoisted(() => ({ statSyncMock: vi.fn() })) diff --git a/src/main/updater/linux-package/linux-package-install-command.ts b/src/main/updater/linux-package/linux-package-install-command.ts index bb44ede3416..c2b6e07d87d 100644 --- a/src/main/updater/linux-package/linux-package-install-command.ts +++ b/src/main/updater/linux-package/linux-package-install-command.ts @@ -1,4 +1,4 @@ -import { quotePosixShellDoubleQuotedApostrophe } from '../../../shared/shell-argument-quoting' +import { quotePosixShellDoubleQuotedApostrophe } from '../../../shared/shell/launch/shell-argument-quoting' import { statSync } from 'node:fs' import path from 'node:path' import type { LinuxRootPackageType } from '../../../shared/update-status-types' diff --git a/src/main/window/runtime-window-lifecycle.ts b/src/main/window/runtime-window-lifecycle.ts index 6275e958e6c..c60c694c614 100644 --- a/src/main/window/runtime-window-lifecycle.ts +++ b/src/main/window/runtime-window-lifecycle.ts @@ -5,7 +5,7 @@ import { ipcMain, type BrowserWindow } from 'electron' import type { CreateWorktreeResult } from '../../shared/worktree/create-types' import type { WorktreeStartupLaunch } from '../../shared/worktree/launch-types' import type { RuntimeMobileSessionTabMove } from '../../shared/runtime-types' -import type { TerminalTabCreateReply } from '../../shared/terminal-reveal-identity' +import type { TerminalTabCreateReply } from '../../shared/workspace-layout/terminal-reveal-identity' import { runWorktreeChangeInvalidators } from '../ipc/worktrees/listing/worktree-change-invalidators' import { requestAgentLaunchTabPublishFromRenderer } from './agent-launch-tab-publish-relay' import type { OrcaRuntimeService } from '../runtime/orca-runtime' diff --git a/src/main/window/terminal-pane-reveal-relay.test.ts b/src/main/window/terminal-pane-reveal-relay.test.ts index aa5359d6882..493a954906e 100644 --- a/src/main/window/terminal-pane-reveal-relay.test.ts +++ b/src/main/window/terminal-pane-reveal-relay.test.ts @@ -4,7 +4,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { TerminalPaneRevealRequest, TerminalPaneRevealTarget -} from '../../shared/terminal-pane-reveal' +} from '../../shared/workspace-layout/terminal-pane-reveal' import type { FocusExistingMainWindowOptions } from './focus-existing-window' const ipcEmitter = new EventEmitter() diff --git a/src/main/window/terminal-pane-reveal-relay.ts b/src/main/window/terminal-pane-reveal-relay.ts index 74acc5a80f7..2238704d08f 100644 --- a/src/main/window/terminal-pane-reveal-relay.ts +++ b/src/main/window/terminal-pane-reveal-relay.ts @@ -1,11 +1,11 @@ import { randomUUID } from 'node:crypto' -import { app, ipcMain } from 'electron' -import type { BrowserWindow } from 'electron' +import { app, ipcMain, type BrowserWindow } from 'electron' + import type { TerminalPaneRevealReply, TerminalPaneRevealTarget -} from '../../shared/terminal-pane-reveal' +} from '../../shared/workspace-layout/terminal-pane-reveal' import { addFanoutListener } from '../runtime/events/event-listener-fanout' import { abortWhenRendererGone } from '../ipc/renderer-lifetime-abort' import { focusExistingMainWindow } from './focus-existing-window' diff --git a/src/main/window/terminal-tab-close-request-relay.ts b/src/main/window/terminal-tab-close-request-relay.ts index df2d46d0ec5..734da561101 100644 --- a/src/main/window/terminal-tab-close-request-relay.ts +++ b/src/main/window/terminal-tab-close-request-relay.ts @@ -1,11 +1,11 @@ import { randomUUID } from 'node:crypto' -import { ipcMain } from 'electron' -import type { BrowserWindow } from 'electron' +import { ipcMain, type BrowserWindow } from 'electron' + import type { TerminalTabCloseRequest, TerminalTabCloseResponse -} from '../../shared/terminal-tab-close' +} from '../../shared/workspace-layout/terminal-tab-close' import { addFanoutListener, addFanoutListeners } from '../runtime/events/event-listener-fanout' const TERMINAL_TAB_CLOSE_TIMEOUT_MS = 20_000 diff --git a/src/main/windows/windows-msys-job.win32.test.ts b/src/main/windows/windows-msys-job.win32.test.ts index 98777dc0175..9f39fb79112 100644 --- a/src/main/windows/windows-msys-job.win32.test.ts +++ b/src/main/windows/windows-msys-job.win32.test.ts @@ -4,7 +4,7 @@ import { join } from 'node:path' import { describe, expect, it, vi } from 'vitest' import { removeTreeSync } from '../../shared/windows-transient-lock-removal' import { resolveGitBashPath } from '../pty/shell-startup/git-bash' -import { quotePosixShell } from '../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../shared/shell/launch/shell-argument-quoting' import { listPtyJobProcessIds, terminatePtyJob } from './windows-pty-job' const describeOnWindows = process.platform === 'win32' ? describe : describe.skip diff --git a/src/main/workspace-hooks/hooks-runner.test.ts b/src/main/workspace-hooks/hooks-runner.test.ts index 49b84a55659..5a4dcff94c5 100644 --- a/src/main/workspace-hooks/hooks-runner.test.ts +++ b/src/main/workspace-hooks/hooks-runner.test.ts @@ -149,7 +149,7 @@ describe('createSetupRunnerScript', () => { try { const { createSetupRunnerScript } = await import('./worktree-runner-script') const { TERMINAL_GIT_CREDENTIAL_GUARD_POLICY_ENV } = - await import('../../shared/terminal-git-credential-guard') + await import('../../shared/shell/launch/terminal-git-credential-guard') const result = await createSetupRunnerScript( makeRepo(), 'C:\\repo\\feature', diff --git a/src/main/workspace-hooks/setup-hook-env-vars.ts b/src/main/workspace-hooks/setup-hook-env-vars.ts index 5b70783c1f6..77bcdcaf148 100644 --- a/src/main/workspace-hooks/setup-hook-env-vars.ts +++ b/src/main/workspace-hooks/setup-hook-env-vars.ts @@ -1,5 +1,5 @@ import { getRuntimePathBasename } from '../../shared/cross-platform-path' -import { TERMINAL_GIT_CREDENTIAL_GUARD_POLICY_ENV } from '../../shared/terminal-git-credential-guard' +import { TERMINAL_GIT_CREDENTIAL_GUARD_POLICY_ENV } from '../../shared/shell/launch/terminal-git-credential-guard' import type { Repo } from '../../shared/repo-types' // Keep WSL path translation in pty/wsl-orca-env.ts in sync; names and policies are not paths. diff --git a/src/main/workspaces/removal/local-worktree-filesystem.ts b/src/main/workspaces/removal/local-worktree-filesystem.ts index 2d7432a9f4c..d842638cb41 100644 --- a/src/main/workspaces/removal/local-worktree-filesystem.ts +++ b/src/main/workspaces/removal/local-worktree-filesystem.ts @@ -2,7 +2,7 @@ import { posix } from 'node:path' import { runProcess } from '@orca/process-host' import { lstat, stat, readFile, realpath } from 'node:fs/promises' import { buildWslExecArgs } from '../../../shared/wsl-login-shell-command' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { removeHostTree } from '../../filesystem/host-tree-removal' import { toLinuxPath } from '../../../shared/wsl-paths' import { resolveWslInteropSpawnCwd } from '../../wsl/execution/wsl-interop-spawn-directory' diff --git a/src/main/workspaces/removal/worktree-removal-close-records.test.ts b/src/main/workspaces/removal/worktree-removal-close-records.test.ts index bf9d600e855..06608f50beb 100644 --- a/src/main/workspaces/removal/worktree-removal-close-records.test.ts +++ b/src/main/workspaces/removal/worktree-removal-close-records.test.ts @@ -13,7 +13,7 @@ import { tmpdir } from 'node:os' import { getDefaultWorkspaceSession } from '../../../shared/constants' import { toSshExecutionHostId } from '../../../shared/execution-host' import { folderWorkspaceKey } from '../../../shared/workspace-scope' -import type { ClosedTerminalTabTombstonesByTabId } from '../../../shared/closed-terminal-tab-tombstones' +import type { ClosedTerminalTabTombstonesByTabId } from '../../../shared/workspace-layout/closed-terminal-tab-tombstones' import { hostWorktreeTarget } from '../../../shared/worktree/host-qualified-identity' diff --git a/src/main/workspaces/removal/worktree-removal-session-partition-fencing.test.ts b/src/main/workspaces/removal/worktree-removal-session-partition-fencing.test.ts index 85476905d94..c1d02a5caaa 100644 --- a/src/main/workspaces/removal/worktree-removal-session-partition-fencing.test.ts +++ b/src/main/workspaces/removal/worktree-removal-session-partition-fencing.test.ts @@ -11,7 +11,7 @@ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest' import { rmSync, mkdtempSync } from 'node:fs' import { join } from 'node:path' import { tmpdir } from 'node:os' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import { getDefaultWorkspaceSession } from '../../../shared/constants' import { toRuntimeExecutionHostId } from '../../../shared/execution-host' import { removeWorktreeMetaRow } from '../../persistence/host-qualified-worktree-meta' diff --git a/src/main/wsl/execution/wsl-bash-command.ts b/src/main/wsl/execution/wsl-bash-command.ts index 73b262dbe35..4384393a7f2 100644 --- a/src/main/wsl/execution/wsl-bash-command.ts +++ b/src/main/wsl/execution/wsl-bash-command.ts @@ -1,4 +1,4 @@ -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' export function buildEncodedWslBashCommand(command: string): string { // Encode multiline payloads intact; --exec separately preserves the wsl.exe argument boundary. diff --git a/src/main/wsl/execution/wsl-guest-pane-processes.ts b/src/main/wsl/execution/wsl-guest-pane-processes.ts index 79d26f0fb34..bf1f7a2da0f 100644 --- a/src/main/wsl/execution/wsl-guest-pane-processes.ts +++ b/src/main/wsl/execution/wsl-guest-pane-processes.ts @@ -1,5 +1,5 @@ /** Windows sees only wsl.exe and bridge bash lacks OSC 7; inherited ORCA_PANE_KEY identifies shell folders inside the guest. */ -import { isShellProcess } from '../../../shared/shell-process-detection' +import { isShellProcess } from '../../../shared/agent-status/process/shell-process-detection' import { isWslDistroRunning, wasWslDistroLastSeenRunningSettled diff --git a/src/main/wsl/filesystem/wsl-directory-upload.ts b/src/main/wsl/filesystem/wsl-directory-upload.ts index 598afba7f4c..355f2420f43 100644 --- a/src/main/wsl/filesystem/wsl-directory-upload.ts +++ b/src/main/wsl/filesystem/wsl-directory-upload.ts @@ -5,7 +5,7 @@ import { open } from 'node:fs/promises' import { Readable } from 'node:stream' import { parseWslUncPath, toLinuxPath } from '../../../shared/wsl-paths' import type { RemoteInstallTransport } from '../../managed-server/install/remote-install-transport' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { execCommand } from '../../ssh/remote-exec/remote-exec-command' import { REMOTE_INSTALL_TIMEOUT_MS } from '../../managed-server/install/remote-deploy-timing' import { getRemoteHostPlatform } from '../../ssh/ssh-remote-platform' diff --git a/src/main/wsl/filesystem/wsl-drive-unc-conversion-stores.ts b/src/main/wsl/filesystem/wsl-drive-unc-conversion-stores.ts index d3c79679d63..c04e205456c 100644 --- a/src/main/wsl/filesystem/wsl-drive-unc-conversion-stores.ts +++ b/src/main/wsl/filesystem/wsl-drive-unc-conversion-stores.ts @@ -5,7 +5,7 @@ */ import { existsSync, readdirSync, readFileSync, renameSync } from 'node:fs' import { join } from 'node:path' -import { PTY_SESSION_ID_SEPARATOR } from '../../../shared/pty-session-id-format' +import { PTY_SESSION_ID_SEPARATOR } from '../../../shared/terminal/pty/lifecycle/pty-session-id-format' import { isRecord } from '../../../shared/orcad-migration/orcad-migration-manifest-fields' import { getHistorySessionDirName } from '../../daemon/history-paths' import { diff --git a/src/main/wsl/filesystem/wsl-drive-unc-identity-rewrite.ts b/src/main/wsl/filesystem/wsl-drive-unc-identity-rewrite.ts index 5aecf83188f..9d24238970a 100644 --- a/src/main/wsl/filesystem/wsl-drive-unc-identity-rewrite.ts +++ b/src/main/wsl/filesystem/wsl-drive-unc-identity-rewrite.ts @@ -10,7 +10,7 @@ import { LOCAL_EXECUTION_HOST_ID, parseExecutionHostId } from '../../../shared/e import { PTY_SESSION_ID_SEPARATOR, WORKTREE_ID_SEPARATOR -} from '../../../shared/pty-session-id-format' +} from '../../../shared/terminal/pty/lifecycle/pty-session-id-format' import { parseWorkspaceKey } from '../../../shared/workspace-scope' import { getRepoIdFromWorktreeId } from '../../../shared/worktree/id' import { diff --git a/src/main/wsl/filesystem/wsl-drive-unc-state-rewrite.ts b/src/main/wsl/filesystem/wsl-drive-unc-state-rewrite.ts index 536957462c5..1974308d74f 100644 --- a/src/main/wsl/filesystem/wsl-drive-unc-state-rewrite.ts +++ b/src/main/wsl/filesystem/wsl-drive-unc-state-rewrite.ts @@ -14,7 +14,7 @@ import { splitWorktreeId, splitWorktreeIdForFilesystem } from '../../../shared/worktree/id' -import { PTY_SESSION_ID_SEPARATOR } from '../../../shared/pty-session-id-format' +import { PTY_SESSION_ID_SEPARATOR } from '../../../shared/terminal/pty/lifecycle/pty-session-id-format' import { parseWorkspaceKey } from '../../../shared/workspace-scope' import { WSL_DRIVE_UNC_STATE_DISPOSITIONS } from '../../../shared/wsl-drive-unc-state-dispositions' import { wslMoveRepoPaths } from '../../persistence/moving-wsl-projects/wsl-move-scope' diff --git a/src/main/wsl/host-lifecycle/wsl-host-uninstall-server-stop.ts b/src/main/wsl/host-lifecycle/wsl-host-uninstall-server-stop.ts index 4c9bc4638b8..b9029f610ef 100644 --- a/src/main/wsl/host-lifecycle/wsl-host-uninstall-server-stop.ts +++ b/src/main/wsl/host-lifecycle/wsl-host-uninstall-server-stop.ts @@ -2,7 +2,7 @@ // No paired connection exists by then, so the server's own CLI inside the distro stands in for RPC. import { z } from 'zod' import { errorMessage } from '../../../shared/error-message' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import type { WslHostServerStop } from '../../../shared/wsl-host-types' import { execCommand } from '../../ssh/remote-exec/remote-exec-command' import { listRunningWslDistrosAsync } from '../discovery/distro-catalog' diff --git a/src/main/wsl/orcad/__tests__/wsl-orcad-chat-provider-fixture.ts b/src/main/wsl/orcad/__tests__/wsl-orcad-chat-provider-fixture.ts index f69eef2dfe8..a852c6af138 100644 --- a/src/main/wsl/orcad/__tests__/wsl-orcad-chat-provider-fixture.ts +++ b/src/main/wsl/orcad/__tests__/wsl-orcad-chat-provider-fixture.ts @@ -3,7 +3,7 @@ import { z } from 'zod' import { folderWorkspaceKey } from '../../../../shared/workspace-scope' import { readFileSync } from 'node:fs' import { resolve } from 'node:path' -import { quotePosixShell } from '../../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../../shared/shell/launch/shell-argument-quoting' export type WslChatHost = { rpc(method: string, params?: unknown): Promise diff --git a/src/main/wsl/orcad/__tests__/wsl-orcad-chat-windows-decoy.ts b/src/main/wsl/orcad/__tests__/wsl-orcad-chat-windows-decoy.ts index 967641af7c8..db46533c7d2 100644 --- a/src/main/wsl/orcad/__tests__/wsl-orcad-chat-windows-decoy.ts +++ b/src/main/wsl/orcad/__tests__/wsl-orcad-chat-windows-decoy.ts @@ -1,5 +1,5 @@ import { expect, vi } from 'vitest' -import { quotePosixShell } from '../../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../../shared/shell/launch/shell-argument-quoting' import { randomUUID } from 'node:crypto' import { envelope } from './wsl-orcad-chat-envelope' import type { ChatInstall, ChatLane } from './wsl-orcad-structured-chat-contract' diff --git a/src/main/wsl/orcad/__tests__/wsl-orcad-midturn-stop-lane.ts b/src/main/wsl/orcad/__tests__/wsl-orcad-midturn-stop-lane.ts index 16acc01a324..6fbffdbe3be 100644 --- a/src/main/wsl/orcad/__tests__/wsl-orcad-midturn-stop-lane.ts +++ b/src/main/wsl/orcad/__tests__/wsl-orcad-midturn-stop-lane.ts @@ -14,7 +14,7 @@ import { ELECTRON_REMOTE_RUNTIME_CLIENT_CAPABILITIES } from '../../../../shared/ import type { PairedRuntimeConnection } from '../../../../shared/remote-runtime/pairing/paired-runtime-connection' import { subscribeRemoteRuntimeRequest } from '../../../../shared/remote-runtime/remote-runtime-client' import { latestNativeChatOrcaStopCut } from '../../../../shared/native-chat/native-chat-orca-stop-cut' -import { quotePosixShell } from '../../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../../shared/shell/launch/shell-argument-quoting' import type { WslHostStatus } from '../../../../shared/wsl-host-types' import { claudeSessionIdForOrcaSession } from '../../../claude/structured/claude-structured-session-id' import { hasOrcadTemplate } from '../../../orcad/orcad-artifact-materializer' diff --git a/src/main/wsl/orcad/__tests__/wsl-orcad-scripted-provider-chat.ts b/src/main/wsl/orcad/__tests__/wsl-orcad-scripted-provider-chat.ts index ba8c245f4c6..11ce935f384 100644 --- a/src/main/wsl/orcad/__tests__/wsl-orcad-scripted-provider-chat.ts +++ b/src/main/wsl/orcad/__tests__/wsl-orcad-scripted-provider-chat.ts @@ -5,7 +5,7 @@ import type { AgentJournalRenderItem } from '../../../../shared/agent-session/jo import type { AgentSessionSubscribeEvent } from '../../../../shared/agent-session/agent-session-wire' import { ELECTRON_REMOTE_RUNTIME_CLIENT_CAPABILITIES } from '../../../../shared/electron-remote-runtime-client-capabilities' import { subscribeRemoteRuntimeRequest } from '../../../../shared/remote-runtime/remote-runtime-client' -import { quotePosixShell } from '../../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../../shared/shell/launch/shell-argument-quoting' import { waitForProviderReport, type WslScriptedProviderInstall diff --git a/src/main/wsl/orcad/__tests__/wsl-orcad-structured-chat-contract.ts b/src/main/wsl/orcad/__tests__/wsl-orcad-structured-chat-contract.ts index cabb83c2f78..c06f744c7ec 100644 --- a/src/main/wsl/orcad/__tests__/wsl-orcad-structured-chat-contract.ts +++ b/src/main/wsl/orcad/__tests__/wsl-orcad-structured-chat-contract.ts @@ -15,7 +15,7 @@ import { } from '../../../../shared/remote-runtime/remote-runtime-client' import { claudeSessionIdForOrcaSession } from '../../../claude/structured/claude-structured-session-id' import { packagedClaudeChatScenario } from '../../../orcad/orcad-structured-chat-scenario' -import { quotePosixShell } from '../../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../../shared/shell/launch/shell-argument-quoting' import { wslClaudeChatScenario } from './wsl-orcad-chat-scenario' import { envelope } from './wsl-orcad-chat-envelope' import { exerciseScriptedProviderChats } from './wsl-orcad-scripted-provider-chat' diff --git a/src/main/wsl/orcad/wsl-orcad-active-probe.ts b/src/main/wsl/orcad/wsl-orcad-active-probe.ts index 1bb032a43b4..c39f80802fc 100644 --- a/src/main/wsl/orcad/wsl-orcad-active-probe.ts +++ b/src/main/wsl/orcad/wsl-orcad-active-probe.ts @@ -16,7 +16,7 @@ import { } from '../../ssh/orcad-active-readiness' import { computeLocalOrcadBuildHash } from '../../ssh/orcad-local-build-hash' import type { ServeReadiness } from '../../server/serve-readiness' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { execCommand } from '../../ssh/remote-exec/remote-exec-command' import { joinRemotePath } from '../../ssh/ssh-remote-platform' diff --git a/src/main/wsl/orcad/wsl-orcad-connect-state-snapshot.ts b/src/main/wsl/orcad/wsl-orcad-connect-state-snapshot.ts index dec25253d70..4f357273c04 100644 --- a/src/main/wsl/orcad/wsl-orcad-connect-state-snapshot.ts +++ b/src/main/wsl/orcad/wsl-orcad-connect-state-snapshot.ts @@ -27,7 +27,7 @@ import { wslGuestIdentityShellCommand, type WslGuestIdentity } from '../execution/wsl-guest-process-identity' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import type { OrcadHostTransport } from '../../ssh/orcad-host-transport' import { isWindowsRemoteHost, diff --git a/src/main/wsl/orcad/wsl-orcad-instance-adoption.ts b/src/main/wsl/orcad/wsl-orcad-instance-adoption.ts index 139af103d34..85e9843e05a 100644 --- a/src/main/wsl/orcad/wsl-orcad-instance-adoption.ts +++ b/src/main/wsl/orcad/wsl-orcad-instance-adoption.ts @@ -32,7 +32,7 @@ import { remoteInstallDirName, remoteInstallVersionDirRegex } from '../../managed-server/install/remote-install-model' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { joinRemotePath } from '../../ssh/ssh-remote-platform' import { readWslGuestIdentity, diff --git a/src/main/wsl/orcad/wsl-orcad-real-distro-idle-release-lane.test.ts b/src/main/wsl/orcad/wsl-orcad-real-distro-idle-release-lane.test.ts index 9e553fc83e8..4713b57a031 100644 --- a/src/main/wsl/orcad/wsl-orcad-real-distro-idle-release-lane.test.ts +++ b/src/main/wsl/orcad/wsl-orcad-real-distro-idle-release-lane.test.ts @@ -54,7 +54,7 @@ import { parseOrcadStartupTimingLine, type OrcadStartupTimingReport } from '../../orcad/orcad-startup-timing-summary' -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { ORCAD_LAUNCHER_FILENAME } from '../../../shared/orcad-artifacts' import { verifyWslOrcadIdentity } from './wsl-orcad-pairing-identity' import { listenWslOrcadStdioBridge } from './wsl-orcad-stdio-bridge' diff --git a/src/main/wsl/orcad/wsl-orcad-slot-process-probe.ts b/src/main/wsl/orcad/wsl-orcad-slot-process-probe.ts index f636682c26b..1ceaf74e1f2 100644 --- a/src/main/wsl/orcad/wsl-orcad-slot-process-probe.ts +++ b/src/main/wsl/orcad/wsl-orcad-slot-process-probe.ts @@ -1,5 +1,5 @@ /** Whether any process runs from an orcad slot: its server, or a terminal daemon a candidate spawned there, which outlives the candidate's stop. */ -import { quotePosixShell } from '../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../shared/shell/launch/shell-argument-quoting' import { posixProcessArgsShellFunction } from '../../managed-server/install/orcad-remote-host-support' import { isOrcadInstallDirLive } from '../../managed-server/install/orcad-remote-gc' import { diff --git a/src/preload/api-types.ts b/src/preload/api-types.ts index 749f95b5600..b8281b80482 100644 --- a/src/preload/api-types.ts +++ b/src/preload/api-types.ts @@ -228,11 +228,7 @@ export type { PtyManagementSeveredDaemon, PtyManagementSeveredDaemonRestartResult } from './api/pty-management-api' -export type { - ShellOpenExternalEditorRequest, - ShellOpenExternalEditorResult, - ShellOpenLocalPathResult -} from './api/shell-api' + export type { DiagnosticsBundlePayload, DiagnosticsStatusPayload, diff --git a/src/preload/api/app-api.ts b/src/preload/api/app-api.ts index d08ba96aaf3..3cc6a76b7aa 100644 --- a/src/preload/api/app-api.ts +++ b/src/preload/api/app-api.ts @@ -11,7 +11,7 @@ import type { MacCapturedDigitRowChord } from '../../shared/macos-symbolic-hotke import type { MarkdownDocument } from '../../shared/filesystem-entry-types' import type { PersistedUIState } from '../../shared/persisted-ui-state-types' import type { FloatingTerminalCwdRequest } from '../../shared/ui-chrome-types' -import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session/workspace-session-state-types' import type { KeyboardLayoutSnapshot } from '../../shared/keyboard-layout-snapshot' import type { KeyboardLayoutChangeEvent } from '../../shared/keyboard-layout-events' diff --git a/src/preload/api/preflight-api.ts b/src/preload/api/preflight-api.ts index 5129537184d..70afe1c633d 100644 --- a/src/preload/api/preflight-api.ts +++ b/src/preload/api/preflight-api.ts @@ -3,7 +3,7 @@ import type { ProjectExecutionRuntimeResolution } from '../../shared/project-exe import type { PathSource, ShellHydrationFailureReason -} from '../../shared/shell-path-hydration-types' +} from '../../shared/shell/launch/shell-path-hydration-types' export type PreflightStatus = { git: { installed: boolean } diff --git a/src/preload/api/pty-api.ts b/src/preload/api/pty-api.ts index 3046acf267c..d13fc2ead87 100644 --- a/src/preload/api/pty-api.ts +++ b/src/preload/api/pty-api.ts @@ -2,7 +2,7 @@ import type { PaintedRestorePane } from '../../shared/painted-restore-ack' import type { PtyFencedTerminationRequest, PtyFencedTerminationOutcome -} from '../../shared/pty-fenced-termination' +} from '../../shared/terminal/pty/lifecycle/pty-fenced-termination' import type { ResourceViewAdmission } from '../../shared/resource-view-admission' import type { SpawnIntent } from '../../shared/host-spawn-admission' import type { @@ -16,27 +16,27 @@ import type { TerminalInputKind } from '../../shared/terminal/input/terminal-inp import type { TerminalLeafMoveRequest, TerminalLeafMoveResult -} from '../../shared/terminal-leaf-move' +} from '../../shared/workspace-layout/terminal-leaf-move' import type { ProjectExecutionRuntimeResolution } from '../../shared/project-execution-runtime' import type { PtyListedSession, PtySessionListScope, PtySessionLifecycle -} from '../../shared/pty-listed-session' -import type { PtyMainDeliveryDiagnostics } from '../../shared/pty-delivery-diagnostics' +} from '../../shared/terminal/pty/lifecycle/pty-listed-session' +import type { PtyMainDeliveryDiagnostics } from '../../shared/terminal/pty/diagnostics/pty-delivery-diagnostics' import type { PtyModelRestoreNeededEvent } from '../../shared/terminal/replay/pty-model-restore-marker' import type { PtyRendererDeliveryHealthReply, PtyRendererDeliveryStateReport -} from '../../shared/pty-renderer-delivery-health' +} from '../../shared/terminal/pty/diagnostics/pty-renderer-delivery-health' import type { AgentKind, LaunchSource, RequestKind } from '../../shared/telemetry-events' import type { TerminalSideEffectBatch } from '../../shared/terminal/output/terminal-side-effect-facts' import type { TerminalViewAttributes } from '../../shared/terminal/protocol/queries/terminal-view-attributes' import type { TuiAgent } from '../../shared/agent-launch/catalog/tui-agent' -import type { TerminalPanePlacement } from '../../shared/terminal-pane-placement' +import type { TerminalPanePlacement } from '../../shared/workspace-layout/terminal-pane-placement' import type { AgentPaneLaunchRequest } from '../../shared/agent-launch/contracts/agent-pane-launch-request' import type { PtyManagementApi } from './pty-management-api' -import type { TerminalProcessInspection } from '../../shared/terminal-process-inspection' +import type { TerminalProcessInspection } from '../../shared/terminal/pty/lifecycle/terminal-process-inspection' import type { CodexSharedServerStatus } from '../../shared/codex-shared-server-command' import type { NewerDaemonHeldScreen, NewerDaemonReopenResult } from '../../shared/newer-daemon-hold' diff --git a/src/preload/api/pty-bridge-session-control.ts b/src/preload/api/pty-bridge-session-control.ts index ead345946c3..24fbb9bf47e 100644 --- a/src/preload/api/pty-bridge-session-control.ts +++ b/src/preload/api/pty-bridge-session-control.ts @@ -2,7 +2,7 @@ import type { PaintedRestorePane } from '../../shared/painted-restore-ack' import type { PtyFencedTerminationRequest, PtyFencedTerminationOutcome -} from '../../shared/pty-fenced-termination' +} from '../../shared/terminal/pty/lifecycle/pty-fenced-termination' import type { ResourceViewAdmission } from '../../shared/resource-view-admission' import type { SpawnIntent } from '../../shared/host-spawn-admission' import { ipcRenderer } from 'electron' @@ -12,7 +12,7 @@ import type { TerminalInputKind } from '../../shared/terminal/input/terminal-inp import type { TerminalLeafMoveRequest, TerminalLeafMoveResult -} from '../../shared/terminal-leaf-move' +} from '../../shared/workspace-layout/terminal-leaf-move' import type { SavedResumeDecision, TerminalLaunchResult, @@ -20,16 +20,19 @@ import type { SleepingAgentLaunchConfig } from '../../shared/agent-session/lifecycle/agent-session-resume' import type { TuiAgent } from '../../shared/agent-launch/catalog/tui-agent' -import type { PtyListedSession, PtySessionListScope } from '../../shared/pty-listed-session' +import type { + PtyListedSession, + PtySessionListScope +} from '../../shared/terminal/pty/lifecycle/pty-listed-session' import type { PtyRendererDeliveryHealthReply, PtyRendererDeliveryStateReport -} from '../../shared/pty-renderer-delivery-health' +} from '../../shared/terminal/pty/diagnostics/pty-renderer-delivery-health' import type { TerminalViewAttributes } from '../../shared/terminal/protocol/queries/terminal-view-attributes' -import type { PtyMainDeliveryDiagnostics } from '../../shared/pty-delivery-diagnostics' +import type { PtyMainDeliveryDiagnostics } from '../../shared/terminal/pty/diagnostics/pty-delivery-diagnostics' import type { AgentKind, LaunchSource, RequestKind } from '../../shared/telemetry-events' import type { PreloadApi } from '../api-types' -import type { TerminalPanePlacement } from '../../shared/terminal-pane-placement' +import type { TerminalPanePlacement } from '../../shared/workspace-layout/terminal-pane-placement' import type { AgentPaneLaunchRequest } from '../../shared/agent-launch/contracts/agent-pane-launch-request' export const ptySessionControlApi = { diff --git a/src/preload/api/pty-bridge-stream-and-serialization.ts b/src/preload/api/pty-bridge-stream-and-serialization.ts index c451d88025a..ea01419f816 100644 --- a/src/preload/api/pty-bridge-stream-and-serialization.ts +++ b/src/preload/api/pty-bridge-stream-and-serialization.ts @@ -1,9 +1,9 @@ -import type { PtySessionLifecycle } from '../../shared/pty-listed-session' +import type { PtySessionLifecycle } from '../../shared/terminal/pty/lifecycle/pty-listed-session' import { ipcRenderer } from 'electron' import type { PtyModelRestoreNeededEvent } from '../../shared/terminal/replay/pty-model-restore-marker' import type { TerminalSideEffectBatch } from '../../shared/terminal/output/terminal-side-effect-facts' import type { PreloadApi } from '../api-types' -import type { TerminalProcessInspection } from '../../shared/terminal-process-inspection' +import type { TerminalProcessInspection } from '../../shared/terminal/pty/lifecycle/terminal-process-inspection' import type { CodexSharedServerStatus } from '../../shared/codex-shared-server-command' import type { NewerDaemonHeldScreen, NewerDaemonReopenResult } from '../../shared/newer-daemon-hold' diff --git a/src/preload/api/shell-api.ts b/src/preload/api/shell-api.ts index f01136f8adc..f66a26b4ba3 100644 --- a/src/preload/api/shell-api.ts +++ b/src/preload/api/shell-api.ts @@ -5,13 +5,7 @@ import type { ShellOpenExternalEditorRequest, ShellOpenExternalEditorResult, ShellOpenLocalPathResult -} from '../../shared/shell-open-types' - -export type { - ShellOpenExternalEditorRequest, - ShellOpenExternalEditorResult, - ShellOpenLocalPathResult -} from '../../shared/shell-open-types' +} from '../../shared/shell/opening/shell-open-types' export type ShellApi = { /** Every OS open names the path's owner; main refuses anything not owned by this computer. */ diff --git a/src/preload/api/shell-bridge.ts b/src/preload/api/shell-bridge.ts index 15e7796fa3d..6a8e2b3f784 100644 --- a/src/preload/api/shell-bridge.ts +++ b/src/preload/api/shell-bridge.ts @@ -4,7 +4,7 @@ import type { ShellOpenExternalEditorRequest, ShellOpenExternalEditorResult, ShellOpenLocalPathResult -} from '../../shared/shell-open-types' +} from '../../shared/shell/opening/shell-open-types' import type { ExecutionHostId } from '../../shared/execution-host' import type { ShellPathExistence } from '../../shared/path-existence-batch' import type { PreloadApi } from '../api-types' diff --git a/src/preload/api/ui-bridge-clipboard-and-window-controls.ts b/src/preload/api/ui-bridge-clipboard-and-window-controls.ts index f5b928019e9..82fd02628b2 100644 --- a/src/preload/api/ui-bridge-clipboard-and-window-controls.ts +++ b/src/preload/api/ui-bridge-clipboard-and-window-controls.ts @@ -8,7 +8,7 @@ import { type RichMarkdownContextMenuTableTarget } from '../../shared/rich-markdown-context-menu' import type { RuntimeNavigationTarget } from '../../shared/runtime-navigation' -import type { TerminalSurfaceCloseTarget } from '../../shared/terminal-surface-close-target' +import type { TerminalSurfaceCloseTarget } from '../../shared/workspace-layout/terminal-surface-close-target' import type { ClipboardImageThumbnail } from '../../shared/clipboard-image' import type { ReadClipboardTextOptions } from '../../shared/clipboard-text' import type { PreloadApi } from '../api-types' diff --git a/src/preload/api/ui-bridge-terminal-and-session-tabs.ts b/src/preload/api/ui-bridge-terminal-and-session-tabs.ts index b907cbb973d..277989ee83c 100644 --- a/src/preload/api/ui-bridge-terminal-and-session-tabs.ts +++ b/src/preload/api/ui-bridge-terminal-and-session-tabs.ts @@ -4,18 +4,18 @@ import type { } from '../../shared/runtime-file-contracts' import { ipcRenderer } from 'electron' import type { TerminalPaneSplitSource } from '../../shared/feature-education-telemetry' -import type { TerminalTabCreateReply } from '../../shared/terminal-reveal-identity' +import type { TerminalTabCreateReply } from '../../shared/workspace-layout/terminal-reveal-identity' import type { AgentLaunchTabPublishReply, AgentLaunchTabViewerRule, AgentLaunchTabPublishRequest } from '../../shared/agent-launch/contracts/agent-launch-tab-publication' import type { AgentLaunchPaneVerdictEvent } from '../../shared/agent-launch/contracts/agent-launch-pane-verdict' -import type { PaneLaunchRecipe } from '../../shared/terminal-attachment-launch-result' +import type { PaneLaunchRecipe } from '../../shared/terminal/pty/lifecycle/terminal-attachment-launch-result' import type { TerminalPaneRevealReply, TerminalPaneRevealRequest -} from '../../shared/terminal-pane-reveal' +} from '../../shared/workspace-layout/terminal-pane-reveal' import type { AgentProviderSessionMetadata, SleepingAgentLaunchConfig diff --git a/src/preload/api/ui-command-event-api.ts b/src/preload/api/ui-command-event-api.ts index b5692b08d18..30e058a4780 100644 --- a/src/preload/api/ui-command-event-api.ts +++ b/src/preload/api/ui-command-event-api.ts @@ -17,17 +17,17 @@ import type { AgentLaunchTabPublishRequest } from '../../shared/agent-launch/contracts/agent-launch-tab-publication' import type { AgentLaunchPaneVerdictEvent } from '../../shared/agent-launch/contracts/agent-launch-pane-verdict' -import type { PaneLaunchRecipe } from '../../shared/terminal-attachment-launch-result' +import type { PaneLaunchRecipe } from '../../shared/terminal/pty/lifecycle/terminal-attachment-launch-result' import type { TerminalPaneRevealReply, TerminalPaneRevealRequest -} from '../../shared/terminal-pane-reveal' +} from '../../shared/workspace-layout/terminal-pane-reveal' import type { RuntimeNavigationTarget } from '../../shared/runtime-navigation' import type { ProjectMovePauseRequest, ProjectMovePauseResponse } from '../../shared/project-move-pause' -import type { TerminalSurfaceCloseTarget } from '../../shared/terminal-surface-close-target' +import type { TerminalSurfaceCloseTarget } from '../../shared/workspace-layout/terminal-surface-close-target' import type { WorktreeDefaultTabsLaunch, WorktreeSetupLaunch, @@ -52,11 +52,11 @@ import type { RuntimeTerminalCreateRequestPayload, RuntimeTerminalPresentation } from '../../shared/runtime-types' -import type { TerminalTabCreateReply } from '../../shared/terminal-reveal-identity' +import type { TerminalTabCreateReply } from '../../shared/workspace-layout/terminal-reveal-identity' import type { TerminalTabCloseRequest, TerminalTabCloseResponse -} from '../../shared/terminal-tab-close' +} from '../../shared/workspace-layout/terminal-tab-close' import type { SessionTabCloseRequest, SessionTabCloseResponse diff --git a/src/preload/api/workspace-session-api.ts b/src/preload/api/workspace-session-api.ts index 65563c2905a..ccd70c8004b 100644 --- a/src/preload/api/workspace-session-api.ts +++ b/src/preload/api/workspace-session-api.ts @@ -2,9 +2,9 @@ import type { IssueInfo, PRInfo } from '../../shared/github/pull-request-types' import type { WorkspaceSessionPatch, WorkspaceSessionState -} from '../../shared/workspace-session-state-types' +} from '../../shared/workspace-session/workspace-session-state-types' import type { ExecutionHostId } from '../../shared/execution-host' -import type { TerminalSurfaceCloseTarget } from '../../shared/terminal-surface-close-target' +import type { TerminalSurfaceCloseTarget } from '../../shared/workspace-layout/terminal-surface-close-target' export type WorkspaceSessionApi = { session: { diff --git a/src/renderer/src/app-shell/AppBackgroundServices.tsx b/src/renderer/src/app-shell/AppBackgroundServices.tsx index 3e8a003d450..73498d68993 100644 --- a/src/renderer/src/app-shell/AppBackgroundServices.tsx +++ b/src/renderer/src/app-shell/AppBackgroundServices.tsx @@ -6,7 +6,7 @@ import RetainedAgentsSyncGate from '../components/dashboard/RetainedAgentsSyncGa import { WorkspacePortScanner } from '../components/ports/WorkspacePortScanner' import { SavedHostScopeWidenGate } from '../components/sidebar/SavedHostScopeWidenGate' import { MacosTccPromptNoticeHost } from '../hooks/MacosTccPromptNoticeHost' -import { useAppStore } from '../store' +import { useAppStore } from '../store/index' import { ActiveWorkspaceSyncGate } from './ActiveWorkspaceSyncGate' import { StructuredAgentSessionAttentionBridge } from '../components/native-chat/StructuredAgentSessionAttentionBridge' import { StructuredAgentSessionStatusBridge } from '../components/native-chat/StructuredAgentSessionStatusBridge' diff --git a/src/renderer/src/app-shell/app-command-handlers-tab-rename.test.ts b/src/renderer/src/app-shell/app-command-handlers-tab-rename.test.ts index 197cd9fd971..49e91cb93a4 100644 --- a/src/renderer/src/app-shell/app-command-handlers-tab-rename.test.ts +++ b/src/renderer/src/app-shell/app-command-handlers-tab-rename.test.ts @@ -1,11 +1,10 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type { Tab, TabGroup } from '../../../shared/tab-types' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import type { AppState } from '@/store/types' import { createTabsFocusActions } from '../store/slices/tabs/tabs-focus-actions' import type { TabsSliceGet, TabsSliceSet } from '../store/slices/tabs/tabs-slice-contract' import { buildActiveSurfacePatch } from '../store/slices/tabs/tabs-surface' -import type { AppShortcutState, ShortcutDispatchInput } from './app-command-handlers' const mocks = vi.hoisted(() => ({ requestTerminalTabRename: vi.fn(), @@ -28,7 +27,11 @@ vi.mock('@/lib/terminal-shortcut-capture-notification', () => ({ showTerminalShortcutCaptureNotification: vi.fn() })) -import { createAppCommandHandlers } from './app-command-handlers' +import { + type AppShortcutState, + type ShortcutDispatchInput, + createAppCommandHandlers +} from './app-command-handlers' const WORKTREE_ID = 'repo::/feature' const GROUP_ID = 'group-1' diff --git a/src/renderer/src/app-shell/reconcile-hydrated-workspace-tab-models.ts b/src/renderer/src/app-shell/reconcile-hydrated-workspace-tab-models.ts index 7c70f77e2d8..8a3cb1856a2 100644 --- a/src/renderer/src/app-shell/reconcile-hydrated-workspace-tab-models.ts +++ b/src/renderer/src/app-shell/reconcile-hydrated-workspace-tab-models.ts @@ -1,4 +1,4 @@ -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../shared/layout-owner-switch' import { showStartupLayoutFrames } from '../runtime/workspace-layout-frame-sync' import { showServerLayoutFrames } from '../runtime/server-layout-frames' diff --git a/src/renderer/src/app-shell/startup-window-frame-parity.test.ts b/src/renderer/src/app-shell/startup-window-frame-parity.test.ts index 04359a18577..42f49992788 100644 --- a/src/renderer/src/app-shell/startup-window-frame-parity.test.ts +++ b/src/renderer/src/app-shell/startup-window-frame-parity.test.ts @@ -7,7 +7,7 @@ import { toSshExecutionHostId, type ExecutionHostId } from '../../../shared/execution-host' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { LEGACY_WORKSPACE_LAYOUT_PROFILES } from '../../../shared/workspace-layout/workspace-layout-legacy-profile.test-fixture' import { loadWorkspaceLayoutWithoutReport } from '../../../shared/workspace-layout/workspace-layout-load' import { nameBasedLoadContext } from '../../../shared/workspace-layout/workspace-layout-minted-ids' diff --git a/src/renderer/src/app-shell/startup-window-parity-differences.test-fixture.ts b/src/renderer/src/app-shell/startup-window-parity-differences.test-fixture.ts index 56d802a2d29..63d431f1588 100644 --- a/src/renderer/src/app-shell/startup-window-parity-differences.test-fixture.ts +++ b/src/renderer/src/app-shell/startup-window-parity-differences.test-fixture.ts @@ -2,7 +2,7 @@ import { parseExecutionHostId, type ExecutionHostId } from '../../../shared/execution-host' import { sweepUnattachedTerminalRows } from '../../../shared/workspace-layout/unattached-terminal-row-sweep' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' export const GIT = 'repo-1::/Users/dev/orca' diff --git a/src/renderer/src/app-shell/startup-window-parity.test.ts b/src/renderer/src/app-shell/startup-window-parity.test.ts index 5394b07bd3a..03a3a6813f9 100644 --- a/src/renderer/src/app-shell/startup-window-parity.test.ts +++ b/src/renderer/src/app-shell/startup-window-parity.test.ts @@ -3,7 +3,7 @@ import { describe, expect, it, vi } from 'vitest' import type * as AgentStatusModule from '@/lib/agent-status' import type { ExecutionHostId } from '../../../shared/execution-host' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { LEGACY_WORKSPACE_LAYOUT_PROFILES } from '../../../shared/workspace-layout/workspace-layout-legacy-profile.test-fixture' import { loadWorkspaceLayout } from '../../../shared/workspace-layout/workspace-layout-load' import { WORKSPACE_LAYOUT_PROFILES } from '../../../shared/workspace-layout/workspace-layout-profile.test-fixture' diff --git a/src/renderer/src/app-shell/startup-window-view.test-fixture.ts b/src/renderer/src/app-shell/startup-window-view.test-fixture.ts index 6c245eb26c9..da192ee510a 100644 --- a/src/renderer/src/app-shell/startup-window-view.test-fixture.ts +++ b/src/renderer/src/app-shell/startup-window-view.test-fixture.ts @@ -11,8 +11,8 @@ import type { TabGroupLayoutNode } from '../../../shared/tab-types' import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode -} from '../../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +} from '../../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { getRepoIdFromWorktreeId } from '../../../shared/worktree/id' import { fetchWorkspaceSessionWithRuntimeHostOwners } from '@/lib/workspace-session-host-hydration' import { collectFolderWorkspaceKeysFromSession } from '@/lib/workspace-session-hydration-keys' diff --git a/src/renderer/src/attention/notification-subject-owner.ts b/src/renderer/src/attention/notification-subject-owner.ts index 49ee58acb6f..56eebe0288d 100644 --- a/src/renderer/src/attention/notification-subject-owner.ts +++ b/src/renderer/src/attention/notification-subject-owner.ts @@ -1,8 +1,8 @@ import { parseExecutionHostId, type ExecutionHostId } from '../../../shared/execution-host' import type { NotificationWorkspaceOwner } from '../../../shared/notification-source' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { parseWorkspaceKey } from '../../../shared/workspace-scope' -import { getPtyExecutionHost } from '../../../shared/terminal-execution-host' +import { getPtyExecutionHost } from '../../../shared/terminal/pty/lifecycle/terminal-execution-host' import type { Tab } from '../../../shared/tab-types' import type { AppState } from '@/store/types' import type { PtyTransport } from '@/components/terminal-pane/pty-transport-types' diff --git a/src/renderer/src/components/ClaudeAccountSwitchSessionTree.tsx b/src/renderer/src/components/ClaudeAccountSwitchSessionTree.tsx index 1c979f4180a..9ec3cb39102 100644 --- a/src/renderer/src/components/ClaudeAccountSwitchSessionTree.tsx +++ b/src/renderer/src/components/ClaudeAccountSwitchSessionTree.tsx @@ -13,7 +13,7 @@ import { resolveWorktreeBranchLabel, resolveWorktreeDisplayName } from '@/lib/worktree-default-display-name' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { useAppStore } from '../store' import { ResumeTreeRow } from './NativeChatResumeTreeRow' import { diff --git a/src/renderer/src/components/TerminalTitlebarTabs.tsx b/src/renderer/src/components/TerminalTitlebarTabs.tsx index d5afe23e47f..d3d467d9170 100644 --- a/src/renderer/src/components/TerminalTitlebarTabs.tsx +++ b/src/renderer/src/components/TerminalTitlebarTabs.tsx @@ -1,5 +1,5 @@ import { createPortal } from 'react-dom' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import { useAppStore } from '../store' import TabBar from './tab-bar/TabBar' import type { TerminalController } from './use-terminal-controller' diff --git a/src/renderer/src/components/activity/ActivityPrototypePage-test-fixtures.ts b/src/renderer/src/components/activity/ActivityPrototypePage-test-fixtures.ts index 882bb69730b..c4a0b1207fb 100644 --- a/src/renderer/src/components/activity/ActivityPrototypePage-test-fixtures.ts +++ b/src/renderer/src/components/activity/ActivityPrototypePage-test-fixtures.ts @@ -1,7 +1,7 @@ import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' import type { Repo } from '../../../../shared/repo-types' -import { makePaneKey } from '../../../../shared/stable-pane-id' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { Worktree } from '../../../../shared/worktree/types' import type { RetainedAgentEntry } from '@/store/slices/agent-status/agent-status-contract' import { buildActivityEvents } from './activity-event-builder' diff --git a/src/renderer/src/components/activity/ActivityPrototypePage.test.ts b/src/renderer/src/components/activity/ActivityPrototypePage.test.ts index 195fa9bf7b3..94d5d113788 100644 --- a/src/renderer/src/components/activity/ActivityPrototypePage.test.ts +++ b/src/renderer/src/components/activity/ActivityPrototypePage.test.ts @@ -2,8 +2,8 @@ import { describe, expect, it, vi } from 'vitest' import { AGENT_STATUS_STALE_AFTER_MS } from '../../../../shared/agent-status/contracts/agent-status-freshness' import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../../shared/constants' -import { makePaneKey } from '../../../../shared/stable-pane-id' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { ACTIVITY_SEARCH_QUERY_MAX_BYTES, activityThreadMatchesSearchQuery, diff --git a/src/renderer/src/components/activity/activity-auto-mark-read-loop.react185.test.tsx b/src/renderer/src/components/activity/activity-auto-mark-read-loop.react185.test.tsx index fbd372b978f..60c707c3245 100644 --- a/src/renderer/src/components/activity/activity-auto-mark-read-loop.react185.test.tsx +++ b/src/renderer/src/components/activity/activity-auto-mark-read-loop.react185.test.tsx @@ -4,9 +4,9 @@ import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it } from 'vitest' import { TooltipProvider } from '@/components/ui/tooltip' import { useAppStore } from '@/store' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import type { Repo } from '../../../../shared/repo-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { Worktree } from '../../../../shared/worktree/types' import { registerAgentSubjectReadCapture } from '@/attention/agent-subject-read-actions' import ActivityPrototypePage from './ActivityPrototypePage' diff --git a/src/renderer/src/components/activity/activity-event-build-cache.ts b/src/renderer/src/components/activity/activity-event-build-cache.ts index e0ec0937ca7..653ec3e58c2 100644 --- a/src/renderer/src/components/activity/activity-event-build-cache.ts +++ b/src/renderer/src/components/activity/activity-event-build-cache.ts @@ -5,7 +5,7 @@ import type { AgentType } from '../../../../shared/agent-status/contracts/agent-status-types' import type { Repo } from '../../../../shared/repo-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { Worktree } from '../../../../shared/worktree/types' import type { ActivityEvent, diff --git a/src/renderer/src/components/activity/activity-event-builder-context.ts b/src/renderer/src/components/activity/activity-event-builder-context.ts index 942e39a0862..7b514be7b07 100644 --- a/src/renderer/src/components/activity/activity-event-builder-context.ts +++ b/src/renderer/src/components/activity/activity-event-builder-context.ts @@ -10,7 +10,7 @@ import { import type { Repo } from '../../../../shared/repo-types' import { parseAppSshPtyId } from '../../../../shared/ssh-pty-id' import type { Tab } from '../../../../shared/tab-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { projectedStructuredChatTabSavedName, type StructuredChatTabNames diff --git a/src/renderer/src/components/activity/activity-event-builder-sources.ts b/src/renderer/src/components/activity/activity-event-builder-sources.ts index 2c24df715f3..256f7c42514 100644 --- a/src/renderer/src/components/activity/activity-event-builder-sources.ts +++ b/src/renderer/src/components/activity/activity-event-builder-sources.ts @@ -1,14 +1,14 @@ import { getStructuredAgentSessionTabsByPaneKey } from '@/components/native-chat/structured-agent-session-tabs' import { parseAgentStatusPaneIdentity } from '../../../../shared/agent-status/identity/agent-status-worktree-attribution' import { migrationUnsupportedToAgentStatusEntry } from '../../../../shared/migration-unsupported-agent-entry' -import { parsePaneKey } from '../../../../shared/stable-pane-id' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' import type { Repo } from '../../../../shared/repo-types' import type { Worktree } from '../../../../shared/worktree/types' import type { ActivityLiveAgentSnapshot, ActivityEvent } from './activity-thread-types' -import type { ActivityEventBuildCache } from './activity-event-build-cache' -import { resolvePaneBuild } from './activity-event-build-cache' + +import { type ActivityEventBuildCache, resolvePaneBuild } from './activity-event-build-cache' import type { BuildActivityEventsArgs } from './activity-event-builder' export function appendUnsupportedAndRetainedEvents(context: { diff --git a/src/renderer/src/components/activity/activity-event-builder.identity-reuse.test.ts b/src/renderer/src/components/activity/activity-event-builder.identity-reuse.test.ts index e466eb7148e..9cf7ebf802b 100644 --- a/src/renderer/src/components/activity/activity-event-builder.identity-reuse.test.ts +++ b/src/renderer/src/components/activity/activity-event-builder.identity-reuse.test.ts @@ -2,15 +2,20 @@ import { describe, expect, it, vi } from 'vitest' import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' import type { AgentStateHistoryEntry } from '../../../../shared/agent-status/lifecycle/agent-state-history' import type { RetainedAgentEntry } from '@/store/slices/agent-status/agent-status-contract' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { buildActivityEvents, createActivityEventBuildCache, - newestActivityHistoryEntries + newestActivityHistoryEntries, + type ActivityEventBuildCache } from './activity-event-builder' -import type { ActivityEventBuildCache } from './activity-event-builder' -import { buildAgentPaneThreads, createAgentPaneThreadReuseCache } from './activity-thread-builder' -import type { AgentPaneThreadReuseCache } from './activity-thread-builder' + +import { + buildAgentPaneThreads, + createAgentPaneThreadReuseCache, + type AgentPaneThreadReuseCache +} from './activity-thread-builder' + import { LEAF_ID, LEAF_ID_2, diff --git a/src/renderer/src/components/activity/activity-event-builder.ts b/src/renderer/src/components/activity/activity-event-builder.ts index bd6eeb6b29a..163b8ff6f93 100644 --- a/src/renderer/src/components/activity/activity-event-builder.ts +++ b/src/renderer/src/components/activity/activity-event-builder.ts @@ -11,7 +11,7 @@ import type { ExecutionHostId } from '../../../../shared/execution-host' import type { StructuredChatTabNames } from '@/runtime/structured-chat-tab-name' import type { Repo } from '../../../../shared/repo-types' import type { Tab } from '../../../../shared/tab-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { Worktree } from '../../../../shared/worktree/types' import type { ActivityEvent, ActivityLiveAgentSnapshot } from './activity-thread-types' import { capActivityEvents } from './activity-event-cap' diff --git a/src/renderer/src/components/activity/activity-pane-events.ts b/src/renderer/src/components/activity/activity-pane-events.ts index 22a41df2514..7eb420bf41f 100644 --- a/src/renderer/src/components/activity/activity-pane-events.ts +++ b/src/renderer/src/components/activity/activity-pane-events.ts @@ -5,7 +5,7 @@ import type { AgentStatusState as ActivityEventState } from '../../../../shared/agent-status/contracts/agent-status-types' import type { Repo } from '../../../../shared/repo-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { Worktree } from '../../../../shared/worktree/types' import type { ActivityEvent, ActivityLiveAgentState } from './activity-thread-types' diff --git a/src/renderer/src/components/activity/activity-search-query.test.tsx b/src/renderer/src/components/activity/activity-search-query.test.tsx index 69db7d479c1..534c7f968a0 100644 --- a/src/renderer/src/components/activity/activity-search-query.test.tsx +++ b/src/renderer/src/components/activity/activity-search-query.test.tsx @@ -2,7 +2,7 @@ import { act, cleanup, renderHook } from '@testing-library/react' import { afterEach, describe, expect, it, vi } from 'vitest' import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { toSshExecutionHostId } from '../../../../shared/execution-host' import { useAppStore } from '@/store' import { diff --git a/src/renderer/src/components/activity/activity-terminal-portal-status.ts b/src/renderer/src/components/activity/activity-terminal-portal-status.ts index a3cbf52bc1f..a1f2c1d73ad 100644 --- a/src/renderer/src/components/activity/activity-terminal-portal-status.ts +++ b/src/renderer/src/components/activity/activity-terminal-portal-status.ts @@ -1,5 +1,5 @@ import { useEffect, useLayoutEffect, useRef, useState } from 'react' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { ACTIVITY_PORTAL_READINESS_BURST_WINDOW_MS, createActivityPortalReadinessLatch, diff --git a/src/renderer/src/components/activity/activity-thread-actions.ts b/src/renderer/src/components/activity/activity-thread-actions.ts index 01c5f0956c6..621243948c0 100644 --- a/src/renderer/src/components/activity/activity-thread-actions.ts +++ b/src/renderer/src/components/activity/activity-thread-actions.ts @@ -10,7 +10,7 @@ import { getWorktreeExecutionHostId, type ExecutionHostId } from '../../../../shared/execution-host' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { findKnownWorktreeById } from '@/store/slices/worktrees/listing/detected-worktree-meta' import type { AppState } from '@/store/types' import type { AgentPaneThread } from './activity-thread-types' diff --git a/src/renderer/src/components/activity/activity-thread-presentation.ts b/src/renderer/src/components/activity/activity-thread-presentation.ts index 2883b7e5d84..c983d2fb028 100644 --- a/src/renderer/src/components/activity/activity-thread-presentation.ts +++ b/src/renderer/src/components/activity/activity-thread-presentation.ts @@ -17,7 +17,7 @@ import type { AgentStatusEntry, AgentStatusState } from '../../../../shared/agent-status/contracts/agent-status-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { isHistoricalActivityState } from './activity-event-state' import type { ActivityEvent, diff --git a/src/renderer/src/components/activity/activity-thread-types.ts b/src/renderer/src/components/activity/activity-thread-types.ts index 59f855f0c66..b6ba66cdb29 100644 --- a/src/renderer/src/components/activity/activity-thread-types.ts +++ b/src/renderer/src/components/activity/activity-thread-types.ts @@ -5,7 +5,7 @@ import type { AgentType } from '../../../../shared/agent-status/contracts/agent-status-types' import type { Repo } from '../../../../shared/repo-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { Worktree } from '../../../../shared/worktree/types' import type { ActivityPortalReadinessStatus } from './activity-portal-readiness-oscillation' diff --git a/src/renderer/src/components/activity/dev-activity-fixture.test.ts b/src/renderer/src/components/activity/dev-activity-fixture.test.ts index 3895c01eeb4..cf70e4b7ce3 100644 --- a/src/renderer/src/components/activity/dev-activity-fixture.test.ts +++ b/src/renderer/src/components/activity/dev-activity-fixture.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' const mocks = vi.hoisted(() => ({ getState: vi.fn(), diff --git a/src/renderer/src/components/activity/dev-activity-fixture.ts b/src/renderer/src/components/activity/dev-activity-fixture.ts index 9c2f2fc45f9..0341f325d89 100644 --- a/src/renderer/src/components/activity/dev-activity-fixture.ts +++ b/src/renderer/src/components/activity/dev-activity-fixture.ts @@ -1,7 +1,7 @@ import { useAppStore } from '@/store' import type { Repo } from '../../../../shared/repo-types' -import { makePaneKey } from '../../../../shared/stable-pane-id' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { Worktree } from '../../../../shared/worktree/types' const FIXTURE_REPO_ID = 'dev-fixture-repo' diff --git a/src/renderer/src/components/agent-child-row-parity.test.tsx b/src/renderer/src/components/agent-child-row-parity.test.tsx index bc21fef72e1..c4f8d037b55 100644 --- a/src/renderer/src/components/agent-child-row-parity.test.tsx +++ b/src/renderer/src/components/agent-child-row-parity.test.tsx @@ -9,7 +9,7 @@ import type { AgentSessionBackgroundTask } from '../../../shared/agent-session/a import type { AgentChildWorkView } from '../../../shared/agent-status/child-work/agent-status-child-work-view' import { structuredRunningChildWork } from '../../../shared/agent-status/child-work/agent-child-work-listing' import type { AgentStatusEntry } from '../../../shared/agent-status/contracts/agent-status-types' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import DashboardAgentRow from '@/components/dashboard/DashboardAgentRow' import { NativeChatBackgroundTasksStatus } from '@/components/native-chat/NativeChatBackgroundTasksStatus' import { buildBackgroundTaskGroupsFromViews } from '../../../shared/background-task-roster' diff --git a/src/renderer/src/components/agent/launch-settings/agent-default-env-draft.ts b/src/renderer/src/components/agent/launch-settings/agent-default-env-draft.ts index 504f30bfe05..6fc0964f91d 100644 --- a/src/renderer/src/components/agent/launch-settings/agent-default-env-draft.ts +++ b/src/renderer/src/components/agent/launch-settings/agent-default-env-draft.ts @@ -1,6 +1,6 @@ import { isClipboardTextByteLengthOverLimit } from '../../../../../shared/clipboard-text' import { tokenizeCustomCommandTemplate } from '../../../../../shared/source-control/ai/generation/commit-message-prompt' -import { quotePosixShellDoubleQuotedApostrophe } from '../../../../../shared/shell-argument-quoting' +import { quotePosixShellDoubleQuotedApostrophe } from '../../../../../shared/shell/launch/shell-argument-quoting' // Reject oversized pasted overrides before tokenization. export const AGENT_DEFAULT_ENV_DRAFT_MAX_BYTES = 8 * 1024 diff --git a/src/renderer/src/components/automations/automation-run-open-target.ts b/src/renderer/src/components/automations/automation-run-open-target.ts index 524975e1b7a..b6b56bc55a7 100644 --- a/src/renderer/src/components/automations/automation-run-open-target.ts +++ b/src/renderer/src/components/automations/automation-run-open-target.ts @@ -1,5 +1,5 @@ import type { AutomationRun } from '../../../../shared/automations-types' -import { makePaneKey, parsePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey, parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { parseRemoteRuntimePtyId, isRemoteRuntimePtyId @@ -7,9 +7,9 @@ import { import { isWebTerminalSurfaceTabId, toWebTerminalSurfaceTabId -} from '../../../../shared/terminal-surface-id' -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' -import { terminalLayoutContainsLeaf } from '../../../../shared/workspace-session-pane-ownership' +} from '../../../../shared/workspace-layout/terminal-surface-id' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' +import { terminalLayoutContainsLeaf } from '../../../../shared/workspace-session/workspace-session-pane-ownership' import { getRepoExecutionHostId, parseExecutionHostId, diff --git a/src/renderer/src/components/automations/automation-run-pane-layout.ts b/src/renderer/src/components/automations/automation-run-pane-layout.ts index 5734adfc9dd..5cf655364a1 100644 --- a/src/renderer/src/components/automations/automation-run-pane-layout.ts +++ b/src/renderer/src/components/automations/automation-run-pane-layout.ts @@ -1,4 +1,4 @@ -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' import type { AutomationRunPaneTarget } from './automation-run-open-target' export function buildAutomationRunOpenLayout({ diff --git a/src/renderer/src/components/automations/automation-run-workspace-action.paired-server.test.ts b/src/renderer/src/components/automations/automation-run-workspace-action.paired-server.test.ts index 7557fb3f93b..63d73519b64 100644 --- a/src/renderer/src/components/automations/automation-run-workspace-action.paired-server.test.ts +++ b/src/renderer/src/components/automations/automation-run-workspace-action.paired-server.test.ts @@ -13,7 +13,7 @@ import type { } from '../../../../shared/automation-owner-ref' import type { Worktree } from '../../../../shared/worktree/types' import { toRemoteRuntimePtyId } from '../../../../shared/remote-runtime/remote-runtime-pty-id' -import { toWebTerminalSurfaceTabId } from '../../../../shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../../../shared/workspace-layout/terminal-surface-id' import { makeAutomation, makeAutomationListRow, diff --git a/src/renderer/src/components/automations/automation-run-workspace-action.ts b/src/renderer/src/components/automations/automation-run-workspace-action.ts index 3591593f6ea..63e8f88a10c 100644 --- a/src/renderer/src/components/automations/automation-run-workspace-action.ts +++ b/src/renderer/src/components/automations/automation-run-workspace-action.ts @@ -14,7 +14,7 @@ import { useAppStore } from '@/store' import { activateTerminalTabOnOwner } from '@/lib/terminal-tab-owner-activation' import { activateWebRuntimeSessionTab } from '@/runtime/web-runtime-session-tab-lifecycle' import { resolveWebSessionVisibleTabId } from '@/runtime/web-session-focus-intent' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { parseWorkspaceKey } from '../../../../shared/workspace-scope' import { buildAutomationRunOpenLayout } from './automation-run-open-target' import type { AutomationsPageActionContext } from './automations-page-action-context' diff --git a/src/renderer/src/components/browser-pane/assemble-chrome/browser-address-bar-suggestions.ts b/src/renderer/src/components/browser-pane/assemble-chrome/browser-address-bar-suggestions.ts index f5c86edf107..54139a3ac8d 100644 --- a/src/renderer/src/components/browser-pane/assemble-chrome/browser-address-bar-suggestions.ts +++ b/src/renderer/src/components/browser-pane/assemble-chrome/browser-address-bar-suggestions.ts @@ -10,7 +10,7 @@ import type { BrowserHistoryEntry, BrowserPageDocLocation } from '../../../../../shared/browser-workspace-types' -import type { WorkspaceDocHistoryEntry } from '../../../../../shared/workspace-doc-history' +import type { WorkspaceDocHistoryEntry } from '../../../../../shared/workspace-session/workspace-doc-history' import { formatBrowserHistoryUrl, historyHost, diff --git a/src/renderer/src/components/browser-pane/history/browser-history-view-rows.ts b/src/renderer/src/components/browser-pane/history/browser-history-view-rows.ts index cae6f368636..b6b8d7683d7 100644 --- a/src/renderer/src/components/browser-pane/history/browser-history-view-rows.ts +++ b/src/renderer/src/components/browser-pane/history/browser-history-view-rows.ts @@ -1,5 +1,5 @@ import type { BrowserHistoryEntry } from '../../../../../shared/browser-workspace-types' -import type { WorkspaceDocHistoryEntry } from '../../../../../shared/workspace-doc-history' +import type { WorkspaceDocHistoryEntry } from '../../../../../shared/workspace-session/workspace-doc-history' import { startOfLocalDay } from '../../../../../shared/automation-cron-occurrence' import { listBrowserHistoryRecents, diff --git a/src/renderer/src/components/browser-pane/stream-remote/use-remote-browser-page-navigation.ts b/src/renderer/src/components/browser-pane/stream-remote/use-remote-browser-page-navigation.ts index d5aa65615a5..60560ef14af 100644 --- a/src/renderer/src/components/browser-pane/stream-remote/use-remote-browser-page-navigation.ts +++ b/src/renderer/src/components/browser-pane/stream-remote/use-remote-browser-page-navigation.ts @@ -1,7 +1,7 @@ import { useCallback, useRef } from 'react' import { useAppStore } from '@/store' import { redactKagiSessionToken } from '../../../../../shared/browser-url' -import { normalizeBrowserHistoryUrl } from '../../../../../shared/workspace-session-browser-history' +import { normalizeBrowserHistoryUrl } from '../../../../../shared/workspace-session/workspace-session-browser-history' import { resolveBrowserAddressBarSubmission } from '../navigate/browser-address-bar-navigation' import { routeWorkspaceDocAddressSubmission } from '../navigate/workspace-doc-address-submission' import { deferBrowserPageNavigation } from '../navigate/browser-page-deferred-navigation' diff --git a/src/renderer/src/components/cmd-j/palette-live-status.test.tsx b/src/renderer/src/components/cmd-j/palette-live-status.test.tsx index 4f8ada5b4a2..ccc586a0568 100644 --- a/src/renderer/src/components/cmd-j/palette-live-status.test.tsx +++ b/src/renderer/src/components/cmd-j/palette-live-status.test.tsx @@ -11,8 +11,8 @@ import type { AgentStatusEntry, AgentStatusState } from '../../../../shared/agent-status/contracts/agent-status-types' -import { makePaneKey } from '../../../../shared/stable-pane-id' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { PaletteLiveStatusProvider as ProductionPaletteLiveStatusProvider, PaletteRecentTabStatusDot, diff --git a/src/renderer/src/components/cmd-j/palette-live-status.tsx b/src/renderer/src/components/cmd-j/palette-live-status.tsx index 57417be8921..32b8341f130 100644 --- a/src/renderer/src/components/cmd-j/palette-live-status.tsx +++ b/src/renderer/src/components/cmd-j/palette-live-status.tsx @@ -11,7 +11,10 @@ import { type TabPaneInputSources } from '../../../../shared/sidebar-list/smart-attention' import { isExplicitAgentStatusFresh } from '@/lib/pane-agent-evidence' -import { getLiveAgentStatusByWorktreeId } from '@/lib/worktree-activity-state' +import { + getLiveAgentStatusByWorktreeId, + type LiveAgentWorktreeStatus +} from '@/lib/worktree-activity-state' import { getWorktreeStatus, getWorktreeStatusLabel, @@ -27,12 +30,12 @@ import { type TerminalTabAttentionBadge } from '@/components/tab-bar/terminal-tab-activity-status' import { translate } from '@/i18n/i18n' -import type { LiveAgentWorktreeStatus } from '@/lib/worktree-activity-state' + import { AGENT_STATUS_STALE_AFTER_MS } from '../../../../shared/agent-status/contracts/agent-status-freshness' import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import type { BrowserWorkspace } from '../../../../shared/browser-workspace-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { Worktree } from '../../../../shared/worktree/types' import { useNow } from '@/hooks/use-now' diff --git a/src/renderer/src/components/dashboard/DashboardAgentRow.test.tsx b/src/renderer/src/components/dashboard/DashboardAgentRow.test.tsx index 7130d25ebbb..c128024ea9b 100644 --- a/src/renderer/src/components/dashboard/DashboardAgentRow.test.tsx +++ b/src/renderer/src/components/dashboard/DashboardAgentRow.test.tsx @@ -2,7 +2,7 @@ import { renderToStaticMarkup } from 'react-dom/server' import type { ComponentProps } from 'react' import { describe, expect, it, vi } from 'vitest' import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { TooltipProvider } from '../ui/tooltip' import DashboardAgentRow from './DashboardAgentRow' import type { DashboardAgentRow as DashboardAgentRowData } from './useDashboardData' diff --git a/src/renderer/src/components/dashboard/agent-destination-navigation.integration.test.tsx b/src/renderer/src/components/dashboard/agent-destination-navigation.integration.test.tsx index 1d2b288c136..3574684d92e 100644 --- a/src/renderer/src/components/dashboard/agent-destination-navigation.integration.test.tsx +++ b/src/renderer/src/components/dashboard/agent-destination-navigation.integration.test.tsx @@ -9,7 +9,7 @@ import { seedAlreadyActiveWorktree } from '@/lib/worktree-activation-created-agent.test-fixture' import { folderWorkspaceKey } from '../../../../shared/workspace-scope' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import type { Tab } from '../../../../shared/tab-types' import type * as RuntimeRpcClient from '@/runtime/runtime-rpc-client' import type * as WebRuntimeSessionEnvironment from '@/runtime/web-runtime-session-environment' diff --git a/src/renderer/src/components/dashboard/agent-row-lineage-model.test.ts b/src/renderer/src/components/dashboard/agent-row-lineage-model.test.ts index 17c42b3cdbd..c0e47a247c2 100644 --- a/src/renderer/src/components/dashboard/agent-row-lineage-model.test.ts +++ b/src/renderer/src/components/dashboard/agent-row-lineage-model.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from 'vitest' import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { DashboardAgentRow } from './useDashboardData' import { buildAgentRowLineageTree } from './agent-row-lineage-model' diff --git a/src/renderer/src/components/dashboard/agent-row-pane-live-title.test.ts b/src/renderer/src/components/dashboard/agent-row-pane-live-title.test.ts index 562c3300c13..ecaa74be60d 100644 --- a/src/renderer/src/components/dashboard/agent-row-pane-live-title.test.ts +++ b/src/renderer/src/components/dashboard/agent-row-pane-live-title.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' import { resolveAgentRowPaneLiveTitle } from './agent-row-pane-live-title' const LEAF_A = '11111111-1111-4111-8111-111111111111' diff --git a/src/renderer/src/components/dashboard/agent-row-pane-live-title.ts b/src/renderer/src/components/dashboard/agent-row-pane-live-title.ts index ef4a0b0cfb4..2beaa66b1e1 100644 --- a/src/renderer/src/components/dashboard/agent-row-pane-live-title.ts +++ b/src/renderer/src/components/dashboard/agent-row-pane-live-title.ts @@ -1,5 +1,5 @@ import { resolveRuntimePaneTitleForLeaf } from '../../../../shared/runtime-pane-title-leaf-id' -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' /** Undefined preserves single-pane tab-title fallback; null suppresses unattributable split titles so siblings cannot inherit the focused pane’s name. */ export function resolveAgentRowPaneLiveTitle( diff --git a/src/renderer/src/components/dashboard/build-dashboard-bucket-counts.allocation.test.ts b/src/renderer/src/components/dashboard/build-dashboard-bucket-counts.allocation.test.ts index 735cb8525ae..ebb5207b999 100644 --- a/src/renderer/src/components/dashboard/build-dashboard-bucket-counts.allocation.test.ts +++ b/src/renderer/src/components/dashboard/build-dashboard-bucket-counts.allocation.test.ts @@ -1,7 +1,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' -import { makePaneKey } from '../../../../shared/stable-pane-id' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { Worktree } from '../../../../shared/worktree/types' import type * as DashboardSnapshotWorkspaces from './dashboard-snapshot-workspaces' import type * as DashboardRowBucket from './dashboard-row-bucket' diff --git a/src/renderer/src/components/dashboard/build-dashboard-bucket-counts.equivalence.test.ts b/src/renderer/src/components/dashboard/build-dashboard-bucket-counts.equivalence.test.ts index 38e07acba66..14c8c9c1cf2 100644 --- a/src/renderer/src/components/dashboard/build-dashboard-bucket-counts.equivalence.test.ts +++ b/src/renderer/src/components/dashboard/build-dashboard-bucket-counts.equivalence.test.ts @@ -4,8 +4,8 @@ import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts import type { DashboardBucket } from '../../../../shared/dashboard-snapshot' import type { FolderWorkspace } from '../../../../shared/folder-workspaces/folder-workspace-types' import type { ProjectGroup } from '../../../../shared/project-group-types' -import { makePaneKey } from '../../../../shared/stable-pane-id' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { Worktree } from '../../../../shared/worktree/types' import { folderWorkspaceKey } from '../../../../shared/workspace-scope' import { EMPTY_WORKTREE_AGENT_ORCHESTRATION } from '../sidebar/worktree-agent-orchestration-batch' diff --git a/src/renderer/src/components/dashboard/build-dashboard-snapshot-folder-workspace.test.ts b/src/renderer/src/components/dashboard/build-dashboard-snapshot-folder-workspace.test.ts index 567041c69e2..547e4463ec1 100644 --- a/src/renderer/src/components/dashboard/build-dashboard-snapshot-folder-workspace.test.ts +++ b/src/renderer/src/components/dashboard/build-dashboard-snapshot-folder-workspace.test.ts @@ -1,10 +1,10 @@ import { describe, expect, it } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { folderWorkspaceKey } from '../../../../shared/workspace-scope' import type { FolderWorkspace } from '../../../../shared/folder-workspaces/folder-workspace-types' import type { ProjectGroup } from '../../../../shared/project-group-types' import type { Tab } from '../../../../shared/tab-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' import { buildDashboardSnapshot, diff --git a/src/renderer/src/components/dashboard/build-dashboard-snapshot-orchestration-routing.test.ts b/src/renderer/src/components/dashboard/build-dashboard-snapshot-orchestration-routing.test.ts index c9afc7767e3..3f43c418bac 100644 --- a/src/renderer/src/components/dashboard/build-dashboard-snapshot-orchestration-routing.test.ts +++ b/src/renderer/src/components/dashboard/build-dashboard-snapshot-orchestration-routing.test.ts @@ -1,7 +1,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type { AgentStatusOrchestrationContext } from '../../../../shared/agent-status/contracts/agent-status-types' -import { makePaneKey } from '../../../../shared/stable-pane-id' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { Worktree } from '../../../../shared/worktree/types' const batchMocks = vi.hoisted(() => ({ diff --git a/src/renderer/src/components/dashboard/build-dashboard-snapshot.rows-cache.test.ts b/src/renderer/src/components/dashboard/build-dashboard-snapshot.rows-cache.test.ts index 5f726375a0d..7df2cf98ba6 100644 --- a/src/renderer/src/components/dashboard/build-dashboard-snapshot.rows-cache.test.ts +++ b/src/renderer/src/components/dashboard/build-dashboard-snapshot.rows-cache.test.ts @@ -44,8 +44,8 @@ vi.mock('@/lib/agent-catalog', () => ({ import { AGENT_STATUS_STALE_AFTER_MS } from '../../../../shared/agent-status/contracts/agent-status-freshness' import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' -import { makePaneKey } from '../../../../shared/stable-pane-id' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { Worktree } from '../../../../shared/worktree/types' import type { RetainedAgentEntry } from '@/store/slices/agent-status/agent-status-contract' import { diff --git a/src/renderer/src/components/dashboard/build-dashboard-snapshot.test.ts b/src/renderer/src/components/dashboard/build-dashboard-snapshot.test.ts index c83dae053b3..bd9d9511072 100644 --- a/src/renderer/src/components/dashboard/build-dashboard-snapshot.test.ts +++ b/src/renderer/src/components/dashboard/build-dashboard-snapshot.test.ts @@ -9,8 +9,8 @@ import type { AgentStatusOrchestrationContext } from '../../../../shared/agent-status/contracts/agent-status-types' import { DASHBOARD_MAX_LABEL_LENGTH } from '../../../../shared/dashboard-snapshot' -import { makePaneKey } from '../../../../shared/stable-pane-id' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { Worktree } from '../../../../shared/worktree/types' import { selectRuntimeAgentOrchestrationBatch } from '../sidebar/worktree-agent-orchestration-batch' import { selectRuntimeAgentOrchestrationForWorktree } from '../sidebar/worktree-agent-row-selectors' diff --git a/src/renderer/src/components/dashboard/build-dashboard-snapshot.ts b/src/renderer/src/components/dashboard/build-dashboard-snapshot.ts index bc857dcbbaf..d2c603e5813 100644 --- a/src/renderer/src/components/dashboard/build-dashboard-snapshot.ts +++ b/src/renderer/src/components/dashboard/build-dashboard-snapshot.ts @@ -9,7 +9,7 @@ import { type DashboardWorkspace } from '../../../../shared/dashboard-snapshot' import type { RepoIcon } from '../../../../shared/repo-icon' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { resolveDashboardCardTerminalInput, type DashboardCardTerminalInputState diff --git a/src/renderer/src/components/dashboard/dashboard-card-labels.ts b/src/renderer/src/components/dashboard/dashboard-card-labels.ts index a397bcec03c..c185ce6cfa1 100644 --- a/src/renderer/src/components/dashboard/dashboard-card-labels.ts +++ b/src/renderer/src/components/dashboard/dashboard-card-labels.ts @@ -1,7 +1,7 @@ import { getAgentRowConversationName } from '../../../../shared/agent-status/presentation/agent-row-conversation-name' import { DASHBOARD_MAX_LABEL_LENGTH } from '../../../../shared/dashboard-snapshot' -import { parsePaneKey } from '../../../../shared/stable-pane-id' -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' import { resolveAgentRowPaneLiveTitle } from './agent-row-pane-live-title' import type { DashboardAgentRow } from './useDashboardData' import type { AppState } from '@/store/types' diff --git a/src/renderer/src/components/dashboard/use-agent-row-conversation-name.ts b/src/renderer/src/components/dashboard/use-agent-row-conversation-name.ts index 8659222d3d9..e6ff2123876 100644 --- a/src/renderer/src/components/dashboard/use-agent-row-conversation-name.ts +++ b/src/renderer/src/components/dashboard/use-agent-row-conversation-name.ts @@ -1,5 +1,5 @@ import { getAgentRowConversationName } from '../../../../shared/agent-status/presentation/agent-row-conversation-name' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { structuredChatDisplayName } from '../../../../shared/structured-chat-row-name' import { resolveAgentRowPaneLiveTitle } from './agent-row-pane-live-title' import { useAppStore } from '@/store' diff --git a/src/renderer/src/components/dashboard/useDashboardData.ts b/src/renderer/src/components/dashboard/useDashboardData.ts index 944b8e30a96..2b07e1d5e90 100644 --- a/src/renderer/src/components/dashboard/useDashboardData.ts +++ b/src/renderer/src/components/dashboard/useDashboardData.ts @@ -3,7 +3,7 @@ import type { AgentType } from '../../../../shared/agent-status/contracts/agent-status-types' import type { AgentRowState } from '../../../../shared/agent-status/presentation/agent-row-decay-state' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { AgentChildRowModel } from '../../../../shared/agent-status/presentation/agent-child-row-model' export type DashboardAgentRow = { diff --git a/src/renderer/src/components/dashboard/useLiveDashboardSnapshot.test.ts b/src/renderer/src/components/dashboard/useLiveDashboardSnapshot.test.ts index 1e3d59c7a0f..673bf2698c4 100644 --- a/src/renderer/src/components/dashboard/useLiveDashboardSnapshot.test.ts +++ b/src/renderer/src/components/dashboard/useLiveDashboardSnapshot.test.ts @@ -16,10 +16,10 @@ import { act, cleanup, renderHook } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { useAppStore } from '@/store' import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import type { GlobalSettings } from '../../../../shared/global-settings-types' import type { Repo } from '../../../../shared/repo-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { Worktree } from '../../../../shared/worktree/types' import { useLiveDashboardSnapshot } from './useLiveDashboardSnapshot' diff --git a/src/renderer/src/components/dashboard/useRetainedAgents.test.ts b/src/renderer/src/components/dashboard/useRetainedAgents.test.ts index a1fef134b9a..3975de99e35 100644 --- a/src/renderer/src/components/dashboard/useRetainedAgents.test.ts +++ b/src/renderer/src/components/dashboard/useRetainedAgents.test.ts @@ -8,7 +8,7 @@ import type { AgentStatusEntry, AgentStatusState } from '../../../../shared/agent-status/contracts/agent-status-types' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { applyWebSessionTabsSnapshot } from '@/runtime/web-session-tabs-sync/snapshot-api' import { ENV, @@ -18,7 +18,7 @@ import { resetWebSessionTabsSyncTestState } from '@/runtime/web-session-tabs-sync-test-harness' import type { Repo } from '../../../../shared/repo-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { Worktree } from '../../../../shared/worktree/types' import { buildRetainedAgentsSyncSnapshot, diff --git a/src/renderer/src/components/dashboard/useRetainedAgents.ts b/src/renderer/src/components/dashboard/useRetainedAgents.ts index aea1ba686f9..29023768959 100644 --- a/src/renderer/src/components/dashboard/useRetainedAgents.ts +++ b/src/renderer/src/components/dashboard/useRetainedAgents.ts @@ -7,13 +7,13 @@ import type { DashboardAgentRow } from './useDashboardData' import type { RetainedAgentEntry } from '@/store/slices/agent-status/agent-status-contract' import type { FolderWorkspace } from '../../../../shared/folder-workspaces/folder-workspace-types' import type { Repo } from '../../../../shared/repo-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { Worktree } from '../../../../shared/worktree/types' import { folderWorkspaceKey } from '../../../../shared/workspace-scope' import { resolveAgentPaneAuthorityKey } from '@/store/slices/agent-pane-authority' import { AGENT_STATUS_STALE_AFTER_MS } from '../../../../shared/agent-status/contracts/agent-status-freshness' import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { agentTurnEndedOnPurpose } from '../../../../shared/agent-status/lifecycle/agent-main-agent-verdict' import { diff --git a/src/renderer/src/components/dashboard/useRetainedAgentsSync.test.ts b/src/renderer/src/components/dashboard/useRetainedAgentsSync.test.ts index 17b8e0861a0..5ac7d37b5b1 100644 --- a/src/renderer/src/components/dashboard/useRetainedAgentsSync.test.ts +++ b/src/renderer/src/components/dashboard/useRetainedAgentsSync.test.ts @@ -6,10 +6,10 @@ import type { } from '../../../../shared/agent-status/contracts/agent-status-types' import type { FolderWorkspace } from '../../../../shared/folder-workspaces/folder-workspace-types' import type { Repo } from '../../../../shared/repo-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { Worktree } from '../../../../shared/worktree/types' import { folderWorkspaceKey } from '../../../../shared/workspace-scope' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { buildRetainedAgentsSyncSnapshot } from './useRetainedAgents' const ACTIVE_PANE_KEY = makePaneKey('tab-active', '22222222-2222-4222-8222-222222222222') diff --git a/src/renderer/src/components/dashboard/worktree-agent-rows-cache.ts b/src/renderer/src/components/dashboard/worktree-agent-rows-cache.ts index 891d578fe28..f9ed6b78ed2 100644 --- a/src/renderer/src/components/dashboard/worktree-agent-rows-cache.ts +++ b/src/renderer/src/components/dashboard/worktree-agent-rows-cache.ts @@ -4,7 +4,10 @@ import type { AgentStatusOrchestrationContext } from '../../../../shared/agent-status/contracts/agent-status-types' import type { MigrationUnsupportedPtyEntry } from '../../../../shared/agent-status/contracts/agent-status-ipc-payload' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../../shared/workspace-layout/terminal-tab-types' import { migrationUnsupportedToAgentStatusEntry } from '../../../../shared/migration-unsupported-agent-entry' import type { RetainedAgentEntry } from '@/store/slices/agent-status/agent-status-contract' import type { AppState } from '@/store/types' diff --git a/src/renderer/src/components/editor/model-lifetime/buffer-text/editor-buffer-sharing.test.ts b/src/renderer/src/components/editor/model-lifetime/buffer-text/editor-buffer-sharing.test.ts index ee7de15778b..3b743e60137 100644 --- a/src/renderer/src/components/editor/model-lifetime/buffer-text/editor-buffer-sharing.test.ts +++ b/src/renderer/src/components/editor/model-lifetime/buffer-text/editor-buffer-sharing.test.ts @@ -7,7 +7,7 @@ import * as monaco from 'monaco-editor/esm/vs/editor/editor.api.js' import type { StoreApi } from 'zustand' import type { AppState } from '@/store/types' import type { OpenFile } from '@/store/slices/editor/types/open-file' -import type { WorkspaceSessionState } from '../../../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../../../shared/workspace-session/workspace-session-state-types' import { getOpenFilesForExternalFileChange, isAutosaveSuspendedForFile, diff --git a/src/renderer/src/components/editor/notebook/kernel/ipynb-kernel-setup-commands.ts b/src/renderer/src/components/editor/notebook/kernel/ipynb-kernel-setup-commands.ts index c005981ad3b..6f8e4d548ff 100644 --- a/src/renderer/src/components/editor/notebook/kernel/ipynb-kernel-setup-commands.ts +++ b/src/renderer/src/components/editor/notebook/kernel/ipynb-kernel-setup-commands.ts @@ -1,4 +1,4 @@ -import { quotePosixShell } from '../../../../../../shared/shell-argument-quoting' +import { quotePosixShell } from '../../../../../../shared/shell/launch/shell-argument-quoting' import { getRendererAppPlatform } from '@/lib/renderer-app-platform' import { venvInterpreterSegments } from '../../../../../../shared/notebook-venv-location' import { quotePowerShellLiteral } from '../../../../../../shared/powershell-native-argument' diff --git a/src/renderer/src/components/editor/review-note-delivery/ReviewNotesSendMenuContent.test.tsx b/src/renderer/src/components/editor/review-note-delivery/ReviewNotesSendMenuContent.test.tsx index 49c1401f64d..72c41a7ebc4 100644 --- a/src/renderer/src/components/editor/review-note-delivery/ReviewNotesSendMenuContent.test.tsx +++ b/src/renderer/src/components/editor/review-note-delivery/ReviewNotesSendMenuContent.test.tsx @@ -8,7 +8,7 @@ import type { } from '../../../../../shared/agent-status/contracts/agent-status-types' import type { TuiAgent } from '../../../../../shared/agent-launch/catalog/tui-agent' import type { NotesSendAgentTarget } from '@/lib/notes-send-agent-targets' -import { makePaneKey } from '../../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../../shared/workspace-layout/stable-pane-id' import type { DashboardAgentRow as DashboardAgentRowData } from '@/components/dashboard/useDashboardData' import { ReviewNotesSendMenuContent } from './ReviewNotesSendMenuContent' diff --git a/src/renderer/src/components/floating-terminal/FloatingTerminalPanel.behavior.test.tsx b/src/renderer/src/components/floating-terminal/FloatingTerminalPanel.behavior.test.tsx index a9711f6f5b7..20715250f15 100644 --- a/src/renderer/src/components/floating-terminal/FloatingTerminalPanel.behavior.test.tsx +++ b/src/renderer/src/components/floating-terminal/FloatingTerminalPanel.behavior.test.tsx @@ -27,7 +27,7 @@ vi.mock('react', async () => { const { createReactHookOverrides } = await import('./floating-terminal-panel-test-module-mocks') return { ...actual, ...createReactHookOverrides() } }) -vi.mock('@/store', async () => { +vi.mock('@/store/index', async () => { return (await import('./floating-terminal-panel-test-module-mocks')).createAppStoreModule() }) // The probe checks element names and props without mounting these workspace children. diff --git a/src/renderer/src/components/floating-terminal/floating-terminal-panel-test-fixtures.ts b/src/renderer/src/components/floating-terminal/floating-terminal-panel-test-fixtures.ts index 5a8bd59badd..fba910d593f 100644 --- a/src/renderer/src/components/floating-terminal/floating-terminal-panel-test-fixtures.ts +++ b/src/renderer/src/components/floating-terminal/floating-terminal-panel-test-fixtures.ts @@ -2,7 +2,7 @@ import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../../shared/constants' import type { KeybindingOverrides, TerminalShortcutPolicy } from '../../../../shared/keybindings' import type { BrowserTab } from '../../../../shared/browser-workspace-types' import type { Tab, TabGroup, TabGroupLayoutNode } from '../../../../shared/tab-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { OpenFile } from '@/store/slices/editor' export type FloatingPanelStoreState = { diff --git a/src/renderer/src/components/floating-terminal/floating-terminal-panel-test-harness.ts b/src/renderer/src/components/floating-terminal/floating-terminal-panel-test-harness.ts index 4a6bf2097b5..01de80c58a4 100644 --- a/src/renderer/src/components/floating-terminal/floating-terminal-panel-test-harness.ts +++ b/src/renderer/src/components/floating-terminal/floating-terminal-panel-test-harness.ts @@ -1,13 +1,13 @@ -import { vi } from 'vitest' +import { vi, type Mock } from 'vitest' import { createUntitledMarkdownFileWithTemplateSelection } from '@/lib/create-untitled-markdown' -import type { Mock } from 'vitest' + import { consumeFloatingTerminalOpenMaximizedIntent } from '@/lib/floating-terminal' import { clearFloatingPanelReclaimIntent } from '@/lib/floating-workspace-focus-reclaim' import type { useContextualTour } from '@/components/contextual-tours/use-contextual-tour' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../../shared/constants' import type { CliInstallStatus } from '../../../../shared/cli-install-types' import type { MarkdownDocument } from '../../../../shared/filesystem-entry-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { makeTab, removeFloatingTerminalTabFromStore, diff --git a/src/renderer/src/components/floating-terminal/floating-workspace-surface-model.test.ts b/src/renderer/src/components/floating-terminal/floating-workspace-surface-model.test.ts index 4b6d994b42f..dd16e7d3d32 100644 --- a/src/renderer/src/components/floating-terminal/floating-workspace-surface-model.test.ts +++ b/src/renderer/src/components/floating-terminal/floating-workspace-surface-model.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../../shared/constants' import type { Tab, TabGroup, TabGroupLayoutNode } from '../../../../shared/tab-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { resolveFloatingWorkspaceSurfaceModel } from './floating-workspace-surface-model' const FLOATING = FLOATING_TERMINAL_WORKTREE_ID diff --git a/src/renderer/src/components/floating-terminal/use-floating-workspace-chrome-model.ts b/src/renderer/src/components/floating-terminal/use-floating-workspace-chrome-model.ts index c92c60cb13c..7dfd7db6d4f 100644 --- a/src/renderer/src/components/floating-terminal/use-floating-workspace-chrome-model.ts +++ b/src/renderer/src/components/floating-terminal/use-floating-workspace-chrome-model.ts @@ -1,5 +1,5 @@ import { useMemo } from 'react' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { useShallow } from 'zustand/react/shallow' import { useAppStore } from '@/store' import { useTabGroupWorkspaceModel } from '@/components/tab-group/useTabGroupWorkspaceModel' diff --git a/src/renderer/src/components/native-chat/NativeChatVisualGuestThemePublisher.test.tsx b/src/renderer/src/components/native-chat/NativeChatVisualGuestThemePublisher.test.tsx index ce061bb0d98..f0452ba1821 100644 --- a/src/renderer/src/components/native-chat/NativeChatVisualGuestThemePublisher.test.tsx +++ b/src/renderer/src/components/native-chat/NativeChatVisualGuestThemePublisher.test.tsx @@ -1,14 +1,14 @@ // @vitest-environment happy-dom import { act, cleanup, render } from '@testing-library/react' import { afterEach, expect, it, vi } from 'vitest' -import { useAppStore } from '@/store' +import { useAppStore } from '@/store/index' import { NativeChatVisualGuestThemePublisher, publishNativeChatVisualGuestTheme } from './NativeChatVisualGuestThemePublisher' import { readNativeChatVisualTheme } from './use-native-chat-visual-theme' -vi.mock('@/store', async () => { +vi.mock('@/store/index', async () => { const { create } = await import('zustand') return { useAppStore: create(() => ({ settings: { theme: 'dark' }, noise: 0 })) } }) diff --git a/src/renderer/src/components/native-chat/NativeChatVisualGuestThemePublisher.tsx b/src/renderer/src/components/native-chat/NativeChatVisualGuestThemePublisher.tsx index da320addfe2..aa01ef53531 100644 --- a/src/renderer/src/components/native-chat/NativeChatVisualGuestThemePublisher.tsx +++ b/src/renderer/src/components/native-chat/NativeChatVisualGuestThemePublisher.tsx @@ -1,5 +1,5 @@ import { useEffect } from 'react' -import { useAppStore } from '@/store' +import { useAppStore } from '@/store/index' import { nativeChatAppearanceStyle, NATIVE_CHAT_APPEARANCE_ROOT_CLASS diff --git a/src/renderer/src/components/native-chat/native-chat-agent-message-sender-view.test.tsx b/src/renderer/src/components/native-chat/native-chat-agent-message-sender-view.test.tsx index 0782061aee6..6f67646c3fc 100644 --- a/src/renderer/src/components/native-chat/native-chat-agent-message-sender-view.test.tsx +++ b/src/renderer/src/components/native-chat/native-chat-agent-message-sender-view.test.tsx @@ -8,7 +8,7 @@ import { makeTab, makeWorktree, TEST_REPO } from '@/store/slices/store-test-help import { readStoreListenerCount } from '@/store/store-listener-census' import { getKnownExecutionHostIdForWorktree } from '@/lib/worktree-runtime-owner' import { resolveStructuredAgentSessionOwner } from '@/runtime/structured-agent-session-owner' -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' import type { AgentMessageSenderView } from '../../../../shared/agent-session/agent-message-presentation' import { runtimeEnvironmentStatusFromSnapshot } from '../../../../shared/remote-runtime/host-status/runtime-host-status' diff --git a/src/renderer/src/components/native-chat/native-chat-file-link.test.ts b/src/renderer/src/components/native-chat/native-chat-file-link.test.ts index 231ba916e03..ca355b1db3b 100644 --- a/src/renderer/src/components/native-chat/native-chat-file-link.test.ts +++ b/src/renderer/src/components/native-chat/native-chat-file-link.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import type { Tab } from '../../../../shared/tab-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { folderWorkspaceKey } from '../../../../shared/workspace-scope' import { FLOATING_TERMINAL_WORKTREE_ID, getDefaultSettings } from '../../../../shared/constants' import { createNativeChatFileHref } from '../../../../shared/native-chat/native-chat-href-routing' diff --git a/src/renderer/src/components/native-chat/native-chat-floating-file-drop.test.tsx b/src/renderer/src/components/native-chat/native-chat-floating-file-drop.test.tsx index 342af578022..7a961a5ee65 100644 --- a/src/renderer/src/components/native-chat/native-chat-floating-file-drop.test.tsx +++ b/src/renderer/src/components/native-chat/native-chat-floating-file-drop.test.tsx @@ -2,7 +2,7 @@ import { act, cleanup, fireEvent, render } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../../shared/constants' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { createUuidV4 } from '../../../../shared/uuid-v4' import { NativeChatPaneFileDropSurface } from './NativeChatPaneFileDropSurface' import { useNativeChatFileDrops } from './use-native-chat-file-drops' diff --git a/src/renderer/src/components/native-chat/native-chat-leaf-routing.ts b/src/renderer/src/components/native-chat/native-chat-leaf-routing.ts index f41c7f6e867..5c6326d92d8 100644 --- a/src/renderer/src/components/native-chat/native-chat-leaf-routing.ts +++ b/src/renderer/src/components/native-chat/native-chat-leaf-routing.ts @@ -1,7 +1,7 @@ import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode -} from '../../../../shared/terminal-tab-types' +} from '../../../../shared/workspace-layout/terminal-tab-types' import type { TuiAgent } from '../../../../shared/agent-launch/catalog/tui-agent' function layoutNodeContainsLeaf(node: TerminalPaneLayoutNode | null, leafId: string): boolean { diff --git a/src/renderer/src/components/native-chat/native-chat-open-wake.test.ts b/src/renderer/src/components/native-chat/native-chat-open-wake.test.ts index 51a243bde7b..6a272063c77 100644 --- a/src/renderer/src/components/native-chat/native-chat-open-wake.test.ts +++ b/src/renderer/src/components/native-chat/native-chat-open-wake.test.ts @@ -4,7 +4,7 @@ import { noteUserWorkspaceSwitch, resetWorkspaceSwitchUserActsForTests } from '@/lib/workspace-switch-user-act' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { takeNativeChatOpenWake } from './native-chat-open-wake' const LEAF = '11111111-1111-4111-8111-111111111111' diff --git a/src/renderer/src/components/native-chat/native-chat-open-wake.ts b/src/renderer/src/components/native-chat/native-chat-open-wake.ts index 3290963199c..026208bca08 100644 --- a/src/renderer/src/components/native-chat/native-chat-open-wake.ts +++ b/src/renderer/src/components/native-chat/native-chat-open-wake.ts @@ -1,6 +1,6 @@ import { takeRecentWorkspaceSwitchWake } from '@/lib/workspace-switch-user-act' import type { AppState } from '@/store/types' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { getTabIdToWorktreeId } from '../sidebar/worktree-agent-row-selectors' import { useAppStore } from '../../store' diff --git a/src/renderer/src/components/native-chat/native-chat-owner-selectors.test.tsx b/src/renderer/src/components/native-chat/native-chat-owner-selectors.test.tsx index ec4fb32da68..dbb24900834 100644 --- a/src/renderer/src/components/native-chat/native-chat-owner-selectors.test.tsx +++ b/src/renderer/src/components/native-chat/native-chat-owner-selectors.test.tsx @@ -3,7 +3,7 @@ import { act, cleanup, renderHook } from '@testing-library/react' import { afterEach, describe, expect, it, vi } from 'vitest' import { FLOATING_TERMINAL_WORKTREE_ID, getDefaultSettings } from '../../../../shared/constants' import type { Tab } from '../../../../shared/tab-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { Worktree } from '../../../../shared/worktree/types' import { createNativeChatFileLinkContextSelector, diff --git a/src/renderer/src/components/native-chat/native-chat-runtime-owner-selector.test.ts b/src/renderer/src/components/native-chat/native-chat-runtime-owner-selector.test.ts index 8e476421bba..63399c03d2a 100644 --- a/src/renderer/src/components/native-chat/native-chat-runtime-owner-selector.test.ts +++ b/src/renderer/src/components/native-chat/native-chat-runtime-owner-selector.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { createNativeChatRuntimeSelector, selectNativeChatRuntimeEnvironmentId, diff --git a/src/renderer/src/components/native-chat/native-chat-runtime-owner.test.ts b/src/renderer/src/components/native-chat/native-chat-runtime-owner.test.ts index c843e896e60..19e812e1eb5 100644 --- a/src/renderer/src/components/native-chat/native-chat-runtime-owner.test.ts +++ b/src/renderer/src/components/native-chat/native-chat-runtime-owner.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { selectNativeChatRuntimeEnvironmentId, type NativeChatRuntimeOwnerState diff --git a/src/renderer/src/components/native-chat/native-chat-workspace-test-fixtures.ts b/src/renderer/src/components/native-chat/native-chat-workspace-test-fixtures.ts index 14d74b5bff5..f355e5cbf88 100644 --- a/src/renderer/src/components/native-chat/native-chat-workspace-test-fixtures.ts +++ b/src/renderer/src/components/native-chat/native-chat-workspace-test-fixtures.ts @@ -1,6 +1,6 @@ import type { Repo } from '../../../../shared/repo-types' import type { Tab } from '../../../../shared/tab-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { DetectedWorktreeListResult, Worktree } from '../../../../shared/worktree/types' import type { AppState } from '@/store/types' import type { FolderWorkspace } from '../../../../shared/folder-workspaces/folder-workspace-types' diff --git a/src/renderer/src/components/native-chat/structured-attention-surface.ts b/src/renderer/src/components/native-chat/structured-attention-surface.ts index 41ea20d413f..dd9a39f5467 100644 --- a/src/renderer/src/components/native-chat/structured-attention-surface.ts +++ b/src/renderer/src/components/native-chat/structured-attention-surface.ts @@ -6,7 +6,7 @@ import type { AgentAttentionSurfaceAdmission, AgentAttentionSurfaceSubject } from '@/attention/agent-attention-contract' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { structuredAgentSessionPaneKey } from '../../../../shared/agent-session/view/structured-agent-session-projection' import { isTabOnScreen, isWorkspaceOnScreen } from '@/hooks/agent-auto-ack-targets' import { isWorkspaceNotificationMutedBySidebarFilters } from '@/attention/hidden-workspace-notification-mute' diff --git a/src/renderer/src/components/native-chat/structured-child-records-switch.test.tsx b/src/renderer/src/components/native-chat/structured-child-records-switch.test.tsx index 1817a9a2de3..fe05351ca17 100644 --- a/src/renderer/src/components/native-chat/structured-child-records-switch.test.tsx +++ b/src/renderer/src/components/native-chat/structured-child-records-switch.test.tsx @@ -15,7 +15,7 @@ import { AGENT_STATUS_STALE_AFTER_MS } from '../../../../shared/agent-status/con import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' import { structuredAgentSessionPaneKey } from '../../../../shared/agent-session/view/structured-agent-session-projection' import type { Tab } from '../../../../shared/tab-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { isExplicitAgentStatusFresh } from '@/lib/pane-agent-evidence' import type { AppState } from '@/store/types' import type * as RuntimeRpcClientModule from '@/runtime/runtime-rpc-client' diff --git a/src/renderer/src/components/native-chat/use-native-chat-toggle-shortcut.ts b/src/renderer/src/components/native-chat/use-native-chat-toggle-shortcut.ts index 3d1c5c9586d..193a8637246 100644 --- a/src/renderer/src/components/native-chat/use-native-chat-toggle-shortcut.ts +++ b/src/renderer/src/components/native-chat/use-native-chat-toggle-shortcut.ts @@ -12,7 +12,7 @@ import { } from '../../../../shared/modifier-double-tap-detector' import { useAppStore } from '../../store' import type { AgentType } from '../../../../shared/agent-status/contracts/agent-status-types' -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' import { resolveNativeChatTabAgentEvidence } from '../tab-bar/native-chat-tab-agent-evidence' import { canToggleNativeChat } from '../../../../shared/native-chat/native-chat-availability' import { isNativeChatTranscriptLocalReadable } from '../../../../shared/native-chat/transcript/native-chat-transcript-readability' diff --git a/src/renderer/src/components/onboarding/agent-picked-payload.ts b/src/renderer/src/components/onboarding/agent-picked-payload.ts index 9155646f7b8..419cda71e81 100644 --- a/src/renderer/src/components/onboarding/agent-picked-payload.ts +++ b/src/renderer/src/components/onboarding/agent-picked-payload.ts @@ -3,7 +3,7 @@ import type { EventProps } from '../../../../shared/telemetry-events' import type { PathSource, ShellHydrationFailureReason -} from '../../../../shared/shell-path-hydration-types' +} from '../../../../shared/shell/launch/shell-path-hydration-types' import type { TuiAgent } from '../../../../shared/agent-launch/catalog/tui-agent' export type AgentPickedSnapshot = { diff --git a/src/renderer/src/components/orchestration-crew/CrewAgentIcons.test.tsx b/src/renderer/src/components/orchestration-crew/CrewAgentIcons.test.tsx index 2b5c2ca958a..f45f7fda5fa 100644 --- a/src/renderer/src/components/orchestration-crew/CrewAgentIcons.test.tsx +++ b/src/renderer/src/components/orchestration-crew/CrewAgentIcons.test.tsx @@ -17,12 +17,12 @@ import * as presentation from '@/lib/program-status/agent-row-presentation' import * as worktreeStatus from '@/lib/worktree-status' import * as sessionTime from '@/components/right-sidebar/ai-vault-session-time' import { readStoreListenerCount } from '@/store/store-listener-census' -import type { OrchestrationCrewRow } from '../../../../shared/orchestration-crew' -import { emptyCrew } from '../../../../shared/orchestration-crew' + +import { type OrchestrationCrewRow, emptyCrew } from '../../../../shared/orchestration-crew' import { structuredAgentSessionPaneKey } from '../../../../shared/agent-session/view/structured-agent-session-projection' import { testOrcaSessionId } from '../../../../shared/orca-session-address-test-fixture' import type { RuntimeClientTarget } from '../../../../shared/runtime-client-target' -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' const local = { kind: 'local' } as const function row(id = 0): OrchestrationCrewRow { diff --git a/src/renderer/src/components/orchestration-crew/TerminalCrewPortals.test.tsx b/src/renderer/src/components/orchestration-crew/TerminalCrewPortals.test.tsx index 3569a569c50..3307e0c8d5e 100644 --- a/src/renderer/src/components/orchestration-crew/TerminalCrewPortals.test.tsx +++ b/src/renderer/src/components/orchestration-crew/TerminalCrewPortals.test.tsx @@ -6,11 +6,11 @@ import userEvent from '@testing-library/user-event' import { afterEach, expect, it, vi } from 'vitest' import { toast } from 'sonner' import { PaneManager } from '@/lib/pane-manager/pane-manager' -import { useAppStore } from '@/store' +import { useAppStore } from '@/store/index' import { TooltipProvider } from '@/components/ui/tooltip' import type { PtyTransport } from '../terminal-pane/pty-transport-types' import { emptyCrew, type OrchestrationCrewRow } from '../../../../shared/orchestration-crew' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { createIpcPtyTransport } from '../terminal-pane/pty-transport' import { TerminalCrewPortals } from './TerminalCrewPortals' import { holdPhysicalCloseTasks } from './crew-menu.test-fixture' diff --git a/src/renderer/src/components/orchestration-crew/TerminalCrewPortals.tsx b/src/renderer/src/components/orchestration-crew/TerminalCrewPortals.tsx index b49479a1c1a..1c410af01a1 100644 --- a/src/renderer/src/components/orchestration-crew/TerminalCrewPortals.tsx +++ b/src/renderer/src/components/orchestration-crew/TerminalCrewPortals.tsx @@ -4,7 +4,7 @@ import { translate } from '@/i18n/i18n' import { useAppStore } from '@/store' import type { ManagedPane } from '@/lib/pane-manager/pane-manager' import type { TerminalPaneController } from '../terminal-pane/use-terminal-pane-controller' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { captureTerminalDropTarget, getCurrentTerminalDropTransport diff --git a/src/renderer/src/components/orchestration-crew/orchestration-panel-enabled.test.tsx b/src/renderer/src/components/orchestration-crew/orchestration-panel-enabled.test.tsx index e31763f420f..f03a3866430 100644 --- a/src/renderer/src/components/orchestration-crew/orchestration-panel-enabled.test.tsx +++ b/src/renderer/src/components/orchestration-crew/orchestration-panel-enabled.test.tsx @@ -4,7 +4,7 @@ import { act, cleanup, render, screen } from '@testing-library/react' import type { ComponentProps } from 'react' import { afterEach, expect, it, vi } from 'vitest' import { getDefaultSettings } from '../../../../shared/constants' -import { useAppStore } from '@/store' +import { useAppStore } from '@/store/index' import { NativeChatCrewFrame } from './NativeChatCrewPanel' import { TerminalCrewPortals } from './TerminalCrewPortals' import { ExperimentalPane } from '../settings/advanced/ExperimentalPane' diff --git a/src/renderer/src/components/orchestration-crew/use-terminal-crew-identity.ts b/src/renderer/src/components/orchestration-crew/use-terminal-crew-identity.ts index 52dc3be5ce4..718dbf098b6 100644 --- a/src/renderer/src/components/orchestration-crew/use-terminal-crew-identity.ts +++ b/src/renderer/src/components/orchestration-crew/use-terminal-crew-identity.ts @@ -3,7 +3,7 @@ import { useAppStore } from '@/store' import { getKnownExecutionHostIdForWorktree } from '@/lib/worktree-runtime-owner' import { parseExecutionHostId } from '../../../../shared/execution-host' import { parseRemoteRuntimePtyId } from '../../../../shared/remote-runtime/remote-runtime-pty-id' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import type { RuntimeClientTarget } from '../../../../shared/runtime-client-target' import { resolveTerminalHandleForPane } from '../terminal-pane/terminal-handle-copy' diff --git a/src/renderer/src/components/right-sidebar/ai-vault-original-pane.test.ts b/src/renderer/src/components/right-sidebar/ai-vault-original-pane.test.ts index 08af1c6881d..087dd37f8d3 100644 --- a/src/renderer/src/components/right-sidebar/ai-vault-original-pane.test.ts +++ b/src/renderer/src/components/right-sidebar/ai-vault-original-pane.test.ts @@ -2,7 +2,7 @@ import { describe, expect, it } from 'vitest' import type { AiVaultSession } from '../../../../shared/ai-vault/contracts/ai-vault-types' import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' import type { SleepingAgentSessionRecord } from '../../../../shared/agent-session/lifecycle/agent-session-resume' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { findAiVaultSessionLiveState, findOriginalAiVaultSessionPane diff --git a/src/renderer/src/components/right-sidebar/ai-vault-original-pane.ts b/src/renderer/src/components/right-sidebar/ai-vault-original-pane.ts index a5b520c5a37..9ecaabcb7f1 100644 --- a/src/renderer/src/components/right-sidebar/ai-vault-original-pane.ts +++ b/src/renderer/src/components/right-sidebar/ai-vault-original-pane.ts @@ -3,11 +3,14 @@ import type { AppState } from '@/store/types' import { resolveRuntimePaneTitleLeafId } from '../../../../shared/runtime-pane-title-leaf-id' import type { AgentDotState } from '@/components/AgentStateDot' import type { AiVaultSession } from '../../../../shared/ai-vault/contracts/ai-vault-types' -import { parseLegacyNumericPaneKey, parsePaneKey } from '../../../../shared/stable-pane-id' +import { + parseLegacyNumericPaneKey, + parsePaneKey +} from '../../../../shared/workspace-layout/stable-pane-id' import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode -} from '../../../../shared/terminal-tab-types' +} from '../../../../shared/workspace-layout/terminal-tab-types' export type AiVaultOriginalPaneTarget = { paneKey: string diff --git a/src/renderer/src/components/right-sidebar/checks-panel-terminal-worktree.ts b/src/renderer/src/components/right-sidebar/checks-panel-terminal-worktree.ts index 19057d90661..dc7a9b22996 100644 --- a/src/renderer/src/components/right-sidebar/checks-panel-terminal-worktree.ts +++ b/src/renderer/src/components/right-sidebar/checks-panel-terminal-worktree.ts @@ -5,7 +5,7 @@ import { isRuntimePathAbsolute, normalizeRuntimePathForComparison } from '../../../../shared/cross-platform-path' -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' import type { Worktree } from '../../../../shared/worktree/types' type TerminalPtyContext = { diff --git a/src/renderer/src/components/settings/ssh/server-actions/SshHostRecoverServerAction.tsx b/src/renderer/src/components/settings/ssh/server-actions/SshHostRecoverServerAction.tsx index f37161db1ff..822745614a0 100644 --- a/src/renderer/src/components/settings/ssh/server-actions/SshHostRecoverServerAction.tsx +++ b/src/renderer/src/components/settings/ssh/server-actions/SshHostRecoverServerAction.tsx @@ -7,7 +7,7 @@ import { } from '../../../../../../shared/orcad-stale-lock-reclaim' import type { SshManagedServerStatus } from '../../../../../../shared/ssh-types' import type { ManagedOrcadPreloadApi } from '../../../../../../preload/api/managed-orcad-api' -import { quotePosixShellUnlessPlain } from '../../../../../../shared/shell-argument-quoting' +import { quotePosixShellUnlessPlain } from '../../../../../../shared/shell/launch/shell-argument-quoting' import { useMountedRef } from '@/hooks/useMountedRef' import { formatUiRelativeTime } from '@/i18n/relative-time-format' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/sidebar/WorkspaceAttachmentOrigins.test.tsx b/src/renderer/src/components/sidebar/WorkspaceAttachmentOrigins.test.tsx index f6d63716a01..4028df89439 100644 --- a/src/renderer/src/components/sidebar/WorkspaceAttachmentOrigins.test.tsx +++ b/src/renderer/src/components/sidebar/WorkspaceAttachmentOrigins.test.tsx @@ -6,7 +6,7 @@ import type { WorkspaceAttachment, WorkspaceAttachmentOrigin } from '../../../../shared/worktree/types' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { singlePaneLayoutSnapshot } from '../../store/slices/terminal-helpers' import { TooltipProvider } from '@/components/ui/tooltip' import { WorktreeLinkedItemRow } from './WorktreeLinkedItemRow' diff --git a/src/renderer/src/components/sidebar/WorkspaceAttachmentOrigins.tsx b/src/renderer/src/components/sidebar/WorkspaceAttachmentOrigins.tsx index ce6baa97011..f13bd726b61 100644 --- a/src/renderer/src/components/sidebar/WorkspaceAttachmentOrigins.tsx +++ b/src/renderer/src/components/sidebar/WorkspaceAttachmentOrigins.tsx @@ -5,9 +5,9 @@ import { Button } from '@/components/ui/button' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' import { translate } from '@/i18n/i18n' import { resolveNotificationTabOwner } from '@/attention/notification-subject-owner' -import { terminalLayoutContainsLeaf } from '../../../../shared/workspace-session-pane-ownership' +import { terminalLayoutContainsLeaf } from '../../../../shared/workspace-session/workspace-session-pane-ownership' import { activateTabAndFocusPane } from '@/lib/activate-tab-and-focus-pane' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import type { WorkspaceAttachment, Worktree } from '../../../../shared/worktree/types' import type { Tab } from '../../../../shared/tab-types' import { getWorkspaceAttachmentOriginKey } from '../../../../shared/workspace-attachments/workspace-attachment-origins' diff --git a/src/renderer/src/components/sidebar/WorktreeCardAgents.acknowledgement-emphasis.test.tsx b/src/renderer/src/components/sidebar/WorktreeCardAgents.acknowledgement-emphasis.test.tsx index a91eff55165..db47275265e 100644 --- a/src/renderer/src/components/sidebar/WorktreeCardAgents.acknowledgement-emphasis.test.tsx +++ b/src/renderer/src/components/sidebar/WorktreeCardAgents.acknowledgement-emphasis.test.tsx @@ -4,7 +4,7 @@ import { renderToStaticMarkup } from 'react-dom/server' import { beforeEach, describe, expect, it, vi } from 'vitest' import type { DashboardAgentRow } from '@/components/dashboard/useDashboardData' import { TooltipProvider } from '@/components/ui/tooltip' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { clearWorktreeAgentExpansionStateForTests, seedWorktreeAgentExpansionStateForTests diff --git a/src/renderer/src/components/sidebar/WorktreeCardAgents.activation.test.tsx b/src/renderer/src/components/sidebar/WorktreeCardAgents.activation.test.tsx index 24307ae0a7f..2947a6e9514 100644 --- a/src/renderer/src/components/sidebar/WorktreeCardAgents.activation.test.tsx +++ b/src/renderer/src/components/sidebar/WorktreeCardAgents.activation.test.tsx @@ -8,8 +8,8 @@ import type { DashboardAgentRow as DashboardAgentRowData } from '@/components/da import { TooltipProvider } from '@/components/ui/tooltip' import type * as ActivateTabAndFocusPaneModule from '@/lib/activate-tab-and-focus-pane' import type { Tab } from '../../../../shared/tab-types' -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' const LEAF_A = '11111111-1111-4111-8111-111111111111' const LEAF_B = '22222222-2222-4222-8222-222222222222' diff --git a/src/renderer/src/components/sidebar/WorktreeCardAgents.test.tsx b/src/renderer/src/components/sidebar/WorktreeCardAgents.test.tsx index 67c3ab34837..caf7c559050 100644 --- a/src/renderer/src/components/sidebar/WorktreeCardAgents.test.tsx +++ b/src/renderer/src/components/sidebar/WorktreeCardAgents.test.tsx @@ -2,7 +2,7 @@ import { renderToStaticMarkup } from 'react-dom/server' import type { ReactNode } from 'react' import { beforeEach, describe, expect, it, vi } from 'vitest' import type { DashboardAgentRow as DashboardAgentRowData } from '@/components/dashboard/useDashboardData' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' const LEAF_A = '11111111-1111-4111-8111-111111111111' const LEAF_B = '22222222-2222-4222-8222-222222222222' diff --git a/src/renderer/src/components/sidebar/WorktreeCardHelpers.tsx b/src/renderer/src/components/sidebar/WorktreeCardHelpers.tsx index 0ecd42b7a6a..9dd587892fe 100644 --- a/src/renderer/src/components/sidebar/WorktreeCardHelpers.tsx +++ b/src/renderer/src/components/sidebar/WorktreeCardHelpers.tsx @@ -1,7 +1,7 @@ import React from 'react' import type { GitConflictOperation } from '../../../../shared/git/status/git-status-types' import type { CheckPresentationOutcome } from '../../../../shared/source-control/checks/provider-check-summary' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { translate } from '@/i18n/i18n' export function branchDisplayName(branch: string): string { diff --git a/src/renderer/src/components/sidebar/WorktreeCardSubagents.fixture.tsx b/src/renderer/src/components/sidebar/WorktreeCardSubagents.fixture.tsx index f7046ac7d23..22cdcb0ce70 100644 --- a/src/renderer/src/components/sidebar/WorktreeCardSubagents.fixture.tsx +++ b/src/renderer/src/components/sidebar/WorktreeCardSubagents.fixture.tsx @@ -4,7 +4,7 @@ import { clearWorktreeAgentExpansionStateForTests } from './worktree-card-agents import { buildWorktreeAgentRows } from './worktree-agent-rows' import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' import type { AgentChildWorkView } from '../../../../shared/agent-status/child-work/agent-status-child-work-view' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' const now = Date.now() const HOUR = 3_600_000 diff --git a/src/renderer/src/components/sidebar/WorktreeList.lineage-agent-expansion-coupling.test.tsx b/src/renderer/src/components/sidebar/WorktreeList.lineage-agent-expansion-coupling.test.tsx index cd536582fcb..e0b24a2dcbe 100644 --- a/src/renderer/src/components/sidebar/WorktreeList.lineage-agent-expansion-coupling.test.tsx +++ b/src/renderer/src/components/sidebar/WorktreeList.lineage-agent-expansion-coupling.test.tsx @@ -14,7 +14,7 @@ import type { AgentStatusOrchestrationContext } from '../../../../shared/agent-status/contracts/agent-status-types' import type { Repo } from '../../../../shared/repo-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { WorktreeCardProperty } from '../../../../shared/ui-chrome-types' import type { WorktreeLineage } from '../../../../shared/worktree/lineage-types' import type { Worktree } from '../../../../shared/worktree/types' diff --git a/src/renderer/src/components/sidebar/activate-retained-agent-row.ts b/src/renderer/src/components/sidebar/activate-retained-agent-row.ts index 9b335088379..3b423e39f83 100644 --- a/src/renderer/src/components/sidebar/activate-retained-agent-row.ts +++ b/src/renderer/src/components/sidebar/activate-retained-agent-row.ts @@ -8,8 +8,8 @@ import { structuredAgentSessionTargetForTab } from '@/runtime/structured-agent-session-owner' import { stablePaneHasLivePty } from '@/lib/sleeping-agent-pane-ownership' -import { parsePaneKey } from '../../../../shared/stable-pane-id' -import { getPtyExecutionHost } from '../../../../shared/terminal-execution-host' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' +import { getPtyExecutionHost } from '../../../../shared/terminal/pty/lifecycle/terminal-execution-host' export function activateRetainedAgentRow(worktreeId: string, tabId: string, paneKey: string): void { const parsed = parsePaneKey(paneKey) diff --git a/src/renderer/src/components/sidebar/agent-send-picker-collapse.test.tsx b/src/renderer/src/components/sidebar/agent-send-picker-collapse.test.tsx index eadde77cce5..d87494b667d 100644 --- a/src/renderer/src/components/sidebar/agent-send-picker-collapse.test.tsx +++ b/src/renderer/src/components/sidebar/agent-send-picker-collapse.test.tsx @@ -1,7 +1,7 @@ // @vitest-environment happy-dom import { cleanup, renderHook } from '@testing-library/react' import { afterEach, expect, it } from 'vitest' -import { useAppStore } from '@/store' +import { useAppStore } from '@/store/index' import { makeRepo, makeWorktree } from './worktree-list-lineage-card-test-fixtures' import { useEffectiveCollapsedGroups } from './worktree-list/listing/use-collapsed-groups' import { useSidebarSectionRows } from './worktree-list/listing/use-section-rows' diff --git a/src/renderer/src/components/sidebar/compute-visible-worktrees.ts b/src/renderer/src/components/sidebar/compute-visible-worktrees.ts index e09ff9a884d..6935579db39 100644 --- a/src/renderer/src/components/sidebar/compute-visible-worktrees.ts +++ b/src/renderer/src/components/sidebar/compute-visible-worktrees.ts @@ -1,5 +1,5 @@ import type { Repo } from '../../../../shared/repo-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { WorktreeLineage } from '../../../../shared/worktree/lineage-types' import type { Worktree } from '../../../../shared/worktree/types' import { getWorktreeHostIdentity } from '../../../../shared/worktree/host-qualified-identity' diff --git a/src/renderer/src/components/sidebar/desktop-workspace-row-facts.ts b/src/renderer/src/components/sidebar/desktop-workspace-row-facts.ts index a3eaaa993dd..a63fc8c5e46 100644 --- a/src/renderer/src/components/sidebar/desktop-workspace-row-facts.ts +++ b/src/renderer/src/components/sidebar/desktop-workspace-row-facts.ts @@ -1,6 +1,6 @@ import { getWorktreeExecutionHostId, type ExecutionHostId } from '../../../../shared/execution-host' import type { Repo } from '../../../../shared/repo-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { WorkspaceRowFactReader } from '../../../../shared/workspace-view/workspace-row-filters' import { isAutomationGeneratedWorkspace, diff --git a/src/renderer/src/components/sidebar/focused-agent-row-highlight.ts b/src/renderer/src/components/sidebar/focused-agent-row-highlight.ts index 127a81ebed1..eb1a2c6e8b5 100644 --- a/src/renderer/src/components/sidebar/focused-agent-row-highlight.ts +++ b/src/renderer/src/components/sidebar/focused-agent-row-highlight.ts @@ -1,6 +1,6 @@ import { useAppStore } from '@/store' import type { AppState } from '@/store/types' -import { isTerminalLeafId, makePaneKey } from '../../../../shared/stable-pane-id' +import { isTerminalLeafId, makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' export type FocusedAgentRowHighlightState = Pick< AppState, diff --git a/src/renderer/src/components/sidebar/host-section-reveal.test.tsx b/src/renderer/src/components/sidebar/host-section-reveal.test.tsx index f8b05fc3d06..ecdb94b6103 100644 --- a/src/renderer/src/components/sidebar/host-section-reveal.test.tsx +++ b/src/renderer/src/components/sidebar/host-section-reveal.test.tsx @@ -3,7 +3,7 @@ import { createRef } from 'react' import { cleanup, renderHook } from '@testing-library/react' import { Virtualizer } from '@tanstack/react-virtual' import { afterEach, expect, it, vi } from 'vitest' -import { useAppStore } from '@/store' +import { useAppStore } from '@/store/index' import { makeRepo, makeWorktree } from './worktree-list-lineage-card-test-fixtures' import { useSidebarSectionRows } from './worktree-list/listing/use-section-rows' import { expandGroupsForWorktreeReveal } from './worktree-list/navigation/pending-reveal-inputs' diff --git a/src/renderer/src/components/sidebar/mirrored-terminal-lineage.test-fixture.tsx b/src/renderer/src/components/sidebar/mirrored-terminal-lineage.test-fixture.tsx index e6740f0ff30..69748c5ce99 100644 --- a/src/renderer/src/components/sidebar/mirrored-terminal-lineage.test-fixture.tsx +++ b/src/renderer/src/components/sidebar/mirrored-terminal-lineage.test-fixture.tsx @@ -5,7 +5,7 @@ import { isStructuredTab } from '../../../../shared/agent-session/view/structure import { useAppStore } from '@/store' import type { AppState } from '@/store/types' import type { DashboardAgentRow } from '@/components/dashboard/useDashboardData' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' import { makeTab } from '@/store/slices/store-test-helpers' @@ -46,7 +46,8 @@ export async function verifyMirroredTerminalLineage( const { buildTerminalUnifiedTab } = await import('@/runtime/web-session-tabs-sync/tab-builders') const { toRemoteRuntimePtyId } = await import('../../../../shared/remote-runtime/remote-runtime-pty-id') - const { toWebTerminalSurfaceTabId } = await import('../../../../shared/terminal-surface-id') + const { toWebTerminalSurfaceTabId } = + await import('../../../../shared/workspace-layout/terminal-surface-id') const { projectStatus } = await import('@/components/native-chat/structured-agent-session-status-projection') const { structuredAgentSessionPaneKey: pane, structuredAgentSessionTabId: tabId } = diff --git a/src/renderer/src/components/sidebar/prompt-cache-timer-selection.ts b/src/renderer/src/components/sidebar/prompt-cache-timer-selection.ts index d568c1d8508..f6f2ad4b785 100644 --- a/src/renderer/src/components/sidebar/prompt-cache-timer-selection.ts +++ b/src/renderer/src/components/sidebar/prompt-cache-timer-selection.ts @@ -1,5 +1,5 @@ -import type { TerminalTab } from '../../../../shared/terminal-tab-types' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' export type PromptCacheCountdownSelection = { startedAt: number diff --git a/src/renderer/src/components/sidebar/rendered-sidebar-worktree-order.test.ts b/src/renderer/src/components/sidebar/rendered-sidebar-worktree-order.test.ts index 62a8ec880a1..88a1b2eaa95 100644 --- a/src/renderer/src/components/sidebar/rendered-sidebar-worktree-order.test.ts +++ b/src/renderer/src/components/sidebar/rendered-sidebar-worktree-order.test.ts @@ -1,5 +1,5 @@ import { afterEach, describe, expect, it } from 'vitest' -import { useAppStore } from '@/store' +import { useAppStore } from '@/store/index' import { getVisibleWorktreeIds, getVisibleWorktreeShortcutTargets, diff --git a/src/renderer/src/components/sidebar/title-derived-pane-agent-identity.ts b/src/renderer/src/components/sidebar/title-derived-pane-agent-identity.ts index f8966bf833a..10372af0718 100644 --- a/src/renderer/src/components/sidebar/title-derived-pane-agent-identity.ts +++ b/src/renderer/src/components/sidebar/title-derived-pane-agent-identity.ts @@ -1,7 +1,7 @@ -import { titleShowsNoAgent } from '../../../../shared/shell-process-detection' +import { titleShowsNoAgent } from '../../../../shared/agent-status/process/shell-process-detection' import type { AgentType } from '../../../../shared/agent-status/contracts/agent-status-types' import { resolveCompatibleAgentTypeForOwner } from '../../../../shared/agent-status/title/agent-title-owner' -import { resolveExplicitTerminalTitleAgentType } from '../../../../shared/terminal-title-agent-type' +import { resolveExplicitTerminalTitleAgentType } from '../../../../shared/agent-status/title/terminal-title-agent-type' import type { PaneForegroundAgentEntry } from '@/store/slices/pane-foreground-agent' export const TITLE_AGENT_LABEL_TO_TYPE: Record = { diff --git a/src/renderer/src/components/sidebar/use-worktree-activity-status.test.tsx b/src/renderer/src/components/sidebar/use-worktree-activity-status.test.tsx index e933f66e1c2..515a30f37d9 100644 --- a/src/renderer/src/components/sidebar/use-worktree-activity-status.test.tsx +++ b/src/renderer/src/components/sidebar/use-worktree-activity-status.test.tsx @@ -3,8 +3,11 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' import { structuredAgentSessionPaneKey } from '../../../../shared/agent-session/view/structured-agent-session-projection' import type { Tab } from '../../../../shared/tab-types' -import { makePaneKey } from '../../../../shared/stable-pane-id' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../../shared/workspace-layout/terminal-tab-types' import { toRemoteRuntimePtyId } from '../../../../shared/remote-runtime/remote-runtime-pty-id' import { useWorktreeActivityStatus } from './use-worktree-activity-status' import { useWorktreeActivityStatuses } from './use-worktree-activity-statuses' diff --git a/src/renderer/src/components/sidebar/use-worktree-agent-activation.ts b/src/renderer/src/components/sidebar/use-worktree-agent-activation.ts index f9552d76a26..73e30897c07 100644 --- a/src/renderer/src/components/sidebar/use-worktree-agent-activation.ts +++ b/src/renderer/src/components/sidebar/use-worktree-agent-activation.ts @@ -3,7 +3,7 @@ import { useAppStore } from '@/store' import { activateAndRevealWorktree } from '@/lib/worktree-activation' import { activateTabAndFocusPane } from '@/lib/activate-tab-and-focus-pane' import { activateTerminalTabOnOwner } from '@/lib/terminal-tab-owner-activation' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { dismissStaleAgentRowByKey } from '../terminal-pane/stale-agent-row' import { activateStructuredAgentSessionTab } from '@/lib/agent-session/structured-agent-session-tab-activation' diff --git a/src/renderer/src/components/sidebar/use-worktree-agent-rows-subscriptions.test.tsx b/src/renderer/src/components/sidebar/use-worktree-agent-rows-subscriptions.test.tsx index 9c8c5172342..445e5bf9239 100644 --- a/src/renderer/src/components/sidebar/use-worktree-agent-rows-subscriptions.test.tsx +++ b/src/renderer/src/components/sidebar/use-worktree-agent-rows-subscriptions.test.tsx @@ -7,7 +7,7 @@ import { readStoreListenerCount } from '@/store/store-listener-census' import { makeTab } from '@/store/slices/store-test-helpers' import type { AppState } from '@/store/types' import type { DashboardAgentRow } from '@/components/dashboard/useDashboardData' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { AGENT_STATUS_STALE_AFTER_MS } from '../../../../shared/agent-status/contracts/agent-status-freshness' import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' import { useWorktreeAgentRows } from './useWorktreeAgentRows' diff --git a/src/renderer/src/components/sidebar/useWorktreeAgentRows.test.ts b/src/renderer/src/components/sidebar/useWorktreeAgentRows.test.ts index d50908bad15..3c5ced47d74 100644 --- a/src/renderer/src/components/sidebar/useWorktreeAgentRows.test.ts +++ b/src/renderer/src/components/sidebar/useWorktreeAgentRows.test.ts @@ -1,10 +1,13 @@ import { describe, expect, it } from 'vitest' import { AGENT_STATUS_STALE_AFTER_MS } from '../../../../shared/agent-status/contracts/agent-status-freshness' import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../../shared/workspace-layout/terminal-tab-types' import type { RetainedAgentEntry } from '@/store/slices/agent-status/agent-status-contract' import { applyAgentRowLineage } from '@/components/dashboard/agent-row-lineage' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { comparePaneKeysOrdinal } from './worktree-agent-row-order' import { buildWorktreeAgentRows } from './worktree-agent-rows' diff --git a/src/renderer/src/components/sidebar/visible-worktree-activity-inputs.test.ts b/src/renderer/src/components/sidebar/visible-worktree-activity-inputs.test.ts index 50dbfc34644..8e21f2a2f5d 100644 --- a/src/renderer/src/components/sidebar/visible-worktree-activity-inputs.test.ts +++ b/src/renderer/src/components/sidebar/visible-worktree-activity-inputs.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import type { BrowserWorkspace } from '../../../../shared/browser-workspace-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { createVisibleWorktreeTerminalActivityProjection, getVisibleWorktreeBrowserActivityTabs, diff --git a/src/renderer/src/components/sidebar/visible-worktree-activity-inputs.ts b/src/renderer/src/components/sidebar/visible-worktree-activity-inputs.ts index d25ee1d1e1a..4a2b152ffb0 100644 --- a/src/renderer/src/components/sidebar/visible-worktree-activity-inputs.ts +++ b/src/renderer/src/components/sidebar/visible-worktree-activity-inputs.ts @@ -1,7 +1,7 @@ import type { BrowserWorkspace } from '../../../../shared/browser-workspace-types' import { structuredAgentSessionPaneKey } from '../../../../shared/agent-session/view/structured-agent-session-projection' import type { Tab } from '../../../../shared/tab-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { getStructuredAgentSessionTabs } from '@/components/native-chat/structured-agent-session-tabs' import { createWorktreeTabBucketProjection } from '@/lib/worktree-tab-bucket-projection' import type { StructuredChatSleptAtByPaneKey } from '@/store/slices/structured-chat-slept-at' diff --git a/src/renderer/src/components/sidebar/visible-worktree-indexes.test.ts b/src/renderer/src/components/sidebar/visible-worktree-indexes.test.ts index c3578df4c70..3b756e5bb10 100644 --- a/src/renderer/src/components/sidebar/visible-worktree-indexes.test.ts +++ b/src/renderer/src/components/sidebar/visible-worktree-indexes.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it, vi } from 'vitest' import type * as ResolvedWorktreeLineage from '../../../../shared/resolved-worktree-lineage' import type { Repo } from '../../../../shared/repo-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { WorktreeLineage } from '../../../../shared/worktree/lineage-types' import type { Worktree } from '../../../../shared/worktree/types' import { LOCAL_EXECUTION_HOST_ID } from '../../../../shared/execution-host' @@ -19,8 +19,10 @@ vi.mock('../../../../shared/resolved-worktree-lineage', async (importOriginal) = } }) -import { computeVisibleWorktreeIds } from './compute-visible-worktrees' -import type { computeVisibleWorktrees } from './compute-visible-worktrees' +import { + computeVisibleWorktreeIds, + type computeVisibleWorktrees +} from './compute-visible-worktrees' import { getWorktreeHostIdentity } from '../../../../shared/worktree/host-qualified-identity' import { getLineageAncestorIndex } from './visible-worktree-indexes' diff --git a/src/renderer/src/components/sidebar/visible-worktrees.test.ts b/src/renderer/src/components/sidebar/visible-worktrees.test.ts index 53c319d2453..5b467142bad 100644 --- a/src/renderer/src/components/sidebar/visible-worktrees.test.ts +++ b/src/renderer/src/components/sidebar/visible-worktrees.test.ts @@ -2,7 +2,7 @@ import { describe, expect, it } from 'vitest' import { computeVisibleWorktreeIds } from './compute-visible-worktrees' import { getPairedDeviceIdsByEnvironment } from '../../../../shared/workspace-creator-visibility' import type { Repo } from '../../../../shared/repo-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { WorktreeLineage } from '../../../../shared/worktree/lineage-types' import type { Worktree } from '../../../../shared/worktree/types' import { LOCAL_EXECUTION_HOST_ID } from '../../../../shared/execution-host' diff --git a/src/renderer/src/components/sidebar/workspace-view-evaluator-parity.test.ts b/src/renderer/src/components/sidebar/workspace-view-evaluator-parity.test.ts index 122249a75c7..92d2f3fc9dd 100644 --- a/src/renderer/src/components/sidebar/workspace-view-evaluator-parity.test.ts +++ b/src/renderer/src/components/sidebar/workspace-view-evaluator-parity.test.ts @@ -15,7 +15,7 @@ import { countActiveWorkspaceFilters } from '../../../../shared/workspace-view/w import { getWorktreeExecutionHostId, type ExecutionHostId } from '../../../../shared/execution-host' import { isWorkspaceOwnedBySomeoneElse } from '../../../../shared/workspace-creator-visibility' import type { Repo } from '../../../../shared/repo-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { Worktree } from '../../../../shared/worktree/types' import { buildCliWorkspaceProvenance } from '../../../../shared/cli-workspace-provenance' import { isInactiveWorkspace } from '@/lib/worktree-activity-state' diff --git a/src/renderer/src/components/sidebar/worktree-agent-activity-summary.test.ts b/src/renderer/src/components/sidebar/worktree-agent-activity-summary.test.ts index a2b733932c7..f24f528034a 100644 --- a/src/renderer/src/components/sidebar/worktree-agent-activity-summary.test.ts +++ b/src/renderer/src/components/sidebar/worktree-agent-activity-summary.test.ts @@ -2,11 +2,11 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import { shallow } from 'zustand/shallow' import { AGENT_STATUS_STALE_AFTER_MS } from '../../../../shared/agent-status/contracts/agent-status-freshness' import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { structuredAgentSessionPaneKey } from '../../../../shared/agent-session/view/structured-agent-session-projection' import type { Tab } from '../../../../shared/tab-types' import { resolveWorktreeStatus } from '@/lib/worktree-status' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { selectWorktreeAgentActivitySummary, type AgentActivityInput diff --git a/src/renderer/src/components/sidebar/worktree-agent-live-index-patch.ts b/src/renderer/src/components/sidebar/worktree-agent-live-index-patch.ts index ff9316d8c37..7f9e13adcac 100644 --- a/src/renderer/src/components/sidebar/worktree-agent-live-index-patch.ts +++ b/src/renderer/src/components/sidebar/worktree-agent-live-index-patch.ts @@ -5,7 +5,7 @@ import { } from '../../../../shared/agent-status/identity/agent-status-worktree-attribution' import type { AppState } from '@/store/types' import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' -import { isWebTerminalSurfaceTabId } from '../../../../shared/terminal-surface-id' +import { isWebTerminalSurfaceTabId } from '../../../../shared/workspace-layout/terminal-surface-id' export type LiveEntriesByWorktreeCache = { tabsByWorktree: AppState['tabsByWorktree'] diff --git a/src/renderer/src/components/sidebar/worktree-agent-models.test.tsx b/src/renderer/src/components/sidebar/worktree-agent-models.test.tsx index a1d6cf136cc..637a0b0b1b3 100644 --- a/src/renderer/src/components/sidebar/worktree-agent-models.test.tsx +++ b/src/renderer/src/components/sidebar/worktree-agent-models.test.tsx @@ -21,7 +21,7 @@ import { seedWorktreeAgentExpansionStateForTests } from './worktree-card-agents-expansion-state' import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { TooltipProvider } from '@/components/ui/tooltip' import { buildWorktreeAgentRows } from './worktree-agent-rows' diff --git a/src/renderer/src/components/sidebar/worktree-agent-orchestration-batch.test.ts b/src/renderer/src/components/sidebar/worktree-agent-orchestration-batch.test.ts index ca9d667d502..437a0108f93 100644 --- a/src/renderer/src/components/sidebar/worktree-agent-orchestration-batch.test.ts +++ b/src/renderer/src/components/sidebar/worktree-agent-orchestration-batch.test.ts @@ -4,8 +4,8 @@ import type { AgentStatusEntry, AgentStatusOrchestrationContext } from '../../../../shared/agent-status/contracts/agent-status-types' -import { makePaneKey } from '../../../../shared/stable-pane-id' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { EMPTY_WORKTREE_AGENT_ORCHESTRATION, selectRuntimeAgentOrchestrationBatch diff --git a/src/renderer/src/components/sidebar/worktree-agent-orchestration-index.test.ts b/src/renderer/src/components/sidebar/worktree-agent-orchestration-index.test.ts index fc31a3a0526..9b1fbd7a647 100644 --- a/src/renderer/src/components/sidebar/worktree-agent-orchestration-index.test.ts +++ b/src/renderer/src/components/sidebar/worktree-agent-orchestration-index.test.ts @@ -4,8 +4,8 @@ import type { AgentStatusOrchestrationContext } from '../../../../shared/agent-status/contracts/agent-status-types' import type { RetainedAgentEntry } from '@/store/slices/agent-status/agent-status-contract' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' -import { makePaneKey, parsePaneKey } from '../../../../shared/stable-pane-id' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' +import { makePaneKey, parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { _getWorktreeAgentOrchestrationIndexBuildCountForTest, EMPTY_WORKTREE_AGENT_ORCHESTRATION, diff --git a/src/renderer/src/components/sidebar/worktree-agent-orchestration-index.ts b/src/renderer/src/components/sidebar/worktree-agent-orchestration-index.ts index 89d87334afb..a0fc3b7a9e4 100644 --- a/src/renderer/src/components/sidebar/worktree-agent-orchestration-index.ts +++ b/src/renderer/src/components/sidebar/worktree-agent-orchestration-index.ts @@ -5,7 +5,7 @@ import { } from '@/runtime/visible-agent-orchestration' import type { AppState } from '@/store/types' import type { AgentStatusOrchestrationContext } from '../../../../shared/agent-status/contracts/agent-status-types' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' type OrchestrationIndexState = Pick< AppState, diff --git a/src/renderer/src/components/sidebar/worktree-agent-remote-attribution.test.ts b/src/renderer/src/components/sidebar/worktree-agent-remote-attribution.test.ts index 2ba5deeda14..36837cce6f3 100644 --- a/src/renderer/src/components/sidebar/worktree-agent-remote-attribution.test.ts +++ b/src/renderer/src/components/sidebar/worktree-agent-remote-attribution.test.ts @@ -1,7 +1,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' -import { makePaneKey } from '../../../../shared/stable-pane-id' -import { toWebTerminalSurfaceTabId } from '../../../../shared/terminal-surface-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' +import { toWebTerminalSurfaceTabId } from '../../../../shared/workspace-layout/terminal-surface-id' import { applyWebSessionTabsSnapshot } from '../../runtime/web-session-tabs-sync/snapshot-api' import { ENV, diff --git a/src/renderer/src/components/sidebar/worktree-agent-row-fallback-tab.ts b/src/renderer/src/components/sidebar/worktree-agent-row-fallback-tab.ts index 6d05aa4cfed..5cc6026518d 100644 --- a/src/renderer/src/components/sidebar/worktree-agent-row-fallback-tab.ts +++ b/src/renderer/src/components/sidebar/worktree-agent-row-fallback-tab.ts @@ -2,7 +2,7 @@ import { agentEntrySessionStartedAt } from '../../../../shared/agent-session/lif import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' import { parseAgentStatusPaneIdentity } from '../../../../shared/agent-status/identity/agent-status-worktree-attribution' import type { Tab } from '../../../../shared/tab-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' export function effectiveWorktreeAgentRowStartedAt(entry: AgentStatusEntry): number { return agentEntrySessionStartedAt(entry) diff --git a/src/renderer/src/components/sidebar/worktree-agent-row-selectors.test.ts b/src/renderer/src/components/sidebar/worktree-agent-row-selectors.test.ts index 305acb1e2bf..09790f838dd 100644 --- a/src/renderer/src/components/sidebar/worktree-agent-row-selectors.test.ts +++ b/src/renderer/src/components/sidebar/worktree-agent-row-selectors.test.ts @@ -2,9 +2,9 @@ import { describe, expect, it } from 'vitest' import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' import type { MigrationUnsupportedPtyEntry } from '../../../../shared/agent-status/contracts/agent-status-ipc-payload' import type { Tab } from '../../../../shared/tab-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { RetainedAgentEntry } from '@/store/slices/agent-status/agent-status-contract' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { getLiveEntriesFullRebuildCountForTests } from './worktree-agent-live-index-patch' import { EMPTY_LIVE_ENTRIES, diff --git a/src/renderer/src/components/sidebar/worktree-agent-row-selectors.ts b/src/renderer/src/components/sidebar/worktree-agent-row-selectors.ts index 2d84049c397..1ec211068e2 100644 --- a/src/renderer/src/components/sidebar/worktree-agent-row-selectors.ts +++ b/src/renderer/src/components/sidebar/worktree-agent-row-selectors.ts @@ -6,7 +6,7 @@ import type { AgentStatusOrchestrationContext } from '../../../../shared/agent-status/contracts/agent-status-types' import type { MigrationUnsupportedPtyEntry } from '../../../../shared/agent-status/contracts/agent-status-ipc-payload' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { type LiveEntriesByWorktreeCache, liveEntryWorktreeId, @@ -15,7 +15,7 @@ import { } from './worktree-agent-live-index-patch' import { selectWorktreeAgentOrchestration } from './worktree-agent-orchestration-index' import { createWorktreeRecordSelector } from '@/store/worktree-record-selector-cache' -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' // Why frozen and exported: card hooks return these from their inactive branch, // so the identity has to be shared app-wide and safe from stray writes. diff --git a/src/renderer/src/components/sidebar/worktree-agent-row-type.ts b/src/renderer/src/components/sidebar/worktree-agent-row-type.ts index 4b727797adf..40349a43193 100644 --- a/src/renderer/src/components/sidebar/worktree-agent-row-type.ts +++ b/src/renderer/src/components/sidebar/worktree-agent-row-type.ts @@ -2,7 +2,7 @@ import type { AgentStatusEntry, AgentType } from '../../../../shared/agent-status/contracts/agent-status-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { resolveCompatibleAgentTypeForOwner } from '../../../../shared/agent-status/title/agent-title-owner' import { resolveAgentTypeFromTerminalTitle } from './worktree-title-derived-agent-rows' diff --git a/src/renderer/src/components/sidebar/worktree-agent-rows.ts b/src/renderer/src/components/sidebar/worktree-agent-rows.ts index ab5faaecc7f..a00309e5e3b 100644 --- a/src/renderer/src/components/sidebar/worktree-agent-rows.ts +++ b/src/renderer/src/components/sidebar/worktree-agent-rows.ts @@ -12,12 +12,12 @@ import { makePaneKey, parseLegacyNumericPaneKey, parsePaneKey -} from '../../../../shared/stable-pane-id' +} from '../../../../shared/workspace-layout/stable-pane-id' import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode, TerminalTab -} from '../../../../shared/terminal-tab-types' +} from '../../../../shared/workspace-layout/terminal-tab-types' import { resolveRuntimePaneTitleLeafId } from '../../../../shared/runtime-pane-title-leaf-id' import { resolveDecayedAgentRowState } from '../../../../shared/agent-status/presentation/agent-row-decay-state' import { tabHasLivePty } from '../../../../shared/tab-has-live-pty' diff --git a/src/renderer/src/components/sidebar/worktree-card-status-inputs.test.ts b/src/renderer/src/components/sidebar/worktree-card-status-inputs.test.ts index e3a0b17995f..811a9c3fc7d 100644 --- a/src/renderer/src/components/sidebar/worktree-card-status-inputs.test.ts +++ b/src/renderer/src/components/sidebar/worktree-card-status-inputs.test.ts @@ -4,7 +4,7 @@ import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode, TerminalTab -} from '../../../../shared/terminal-tab-types' +} from '../../../../shared/workspace-layout/terminal-tab-types' import { EMPTY_LIVE_PTY_IDS, EMPTY_PANE_FOREGROUND_AGENTS, diff --git a/src/renderer/src/components/sidebar/worktree-card-status-inputs.ts b/src/renderer/src/components/sidebar/worktree-card-status-inputs.ts index 542dd51603d..389e5dd91d0 100644 --- a/src/renderer/src/components/sidebar/worktree-card-status-inputs.ts +++ b/src/renderer/src/components/sidebar/worktree-card-status-inputs.ts @@ -1,7 +1,7 @@ import type { AppState } from '@/store/types' import type { PaneForegroundAgentEntry } from '@/store/slices/pane-foreground-agent' -import { parsePaneKey } from '../../../../shared/stable-pane-id' -import type { TerminalPaneLayoutNode } from '../../../../shared/terminal-tab-types' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' +import type { TerminalPaneLayoutNode } from '../../../../shared/workspace-layout/terminal-tab-types' import { createWorktreeRecordSelector } from '@/store/worktree-record-selector-cache' // Cache projected maps per source snapshot while preserving per-tab value references. diff --git a/src/renderer/src/components/sidebar/worktree-list/listing/host-status-test-fixtures.ts b/src/renderer/src/components/sidebar/worktree-list/listing/host-status-test-fixtures.ts index 0c2dc978525..e0292eac212 100644 --- a/src/renderer/src/components/sidebar/worktree-list/listing/host-status-test-fixtures.ts +++ b/src/renderer/src/components/sidebar/worktree-list/listing/host-status-test-fixtures.ts @@ -3,7 +3,7 @@ import type { useSidebarSectionRows } from './use-section-rows' import { makeRepo, makeWorktree } from '../../../worktree-jump/worktree-jump-palette-test-fixtures' import type { Repo } from '../../../../../../shared/repo-types' import { toRuntimeExecutionHostId } from '../../../../../../shared/execution-host' -import { useAppStore } from '@/store' +import { useAppStore } from '@/store/index' import { createCompatibleRuntimeStatusResponse } from '@/runtime/runtime-compatibility-test-fixture' import type { RuntimeHostStatusSnapshot } from '../../../../../../shared/remote-runtime/host-status/runtime-host-status' import type { PublicKnownRuntimeEnvironment } from '../../../../../../shared/remote-runtime/host-catalog/runtime-environments' diff --git a/src/renderer/src/components/sidebar/worktree-list/listing/use-section-rows.ts b/src/renderer/src/components/sidebar/worktree-list/listing/use-section-rows.ts index 96fcb8548e8..55a8993a601 100644 --- a/src/renderer/src/components/sidebar/worktree-list/listing/use-section-rows.ts +++ b/src/renderer/src/components/sidebar/worktree-list/listing/use-section-rows.ts @@ -3,7 +3,7 @@ import { useCallback, useMemo, useState } from 'react' import { shallow } from 'zustand/shallow' import { persistedUIValuesEqual } from '../../../../../../shared/persisted-ui-equality' import { useShallow } from 'zustand/react/shallow' -import { useAppStore } from '@/store' +import { useAppStore } from '@/store/index' import type { AppState } from '@/store/types' import type { Repo } from '../../../../../../shared/repo-types' import { diff --git a/src/renderer/src/components/sidebar/worktree-list/rows/section-header-create-host.test.tsx b/src/renderer/src/components/sidebar/worktree-list/rows/section-header-create-host.test.tsx index 00fca23f088..e7b248fb3d9 100644 --- a/src/renderer/src/components/sidebar/worktree-list/rows/section-header-create-host.test.tsx +++ b/src/renderer/src/components/sidebar/worktree-list/rows/section-header-create-host.test.tsx @@ -1,7 +1,7 @@ // @vitest-environment happy-dom import { cleanup, fireEvent, render } from '@testing-library/react' import { afterEach, expect, it, vi } from 'vitest' -import { useAppStore } from '@/store' +import { useAppStore } from '@/store/index' import { TooltipProvider } from '@/components/ui/tooltip' import type { Repo } from '../../../../../../shared/repo-types' import type { Worktree } from '../../../../../../shared/worktree/types' diff --git a/src/renderer/src/components/sidebar/worktree-open-failure-toast.ts b/src/renderer/src/components/sidebar/worktree-open-failure-toast.ts index d3bae3004ef..f26e20a2ab2 100644 --- a/src/renderer/src/components/sidebar/worktree-open-failure-toast.ts +++ b/src/renderer/src/components/sidebar/worktree-open-failure-toast.ts @@ -1,6 +1,6 @@ import { toast } from 'sonner' import { translate } from '@/i18n/i18n' -import type { ShellOpenExternalEditorResult } from '../../../../shared/shell-open-types' +import type { ShellOpenExternalEditorResult } from '../../../../shared/shell/opening/shell-open-types' export function showOpenFailureToast( result: Exclude, diff --git a/src/renderer/src/components/sidebar/worktree-sidebar-running-children.test.ts b/src/renderer/src/components/sidebar/worktree-sidebar-running-children.test.ts index 204d96f03cc..3ed66f3246b 100644 --- a/src/renderer/src/components/sidebar/worktree-sidebar-running-children.test.ts +++ b/src/renderer/src/components/sidebar/worktree-sidebar-running-children.test.ts @@ -9,7 +9,7 @@ import { buildLegacyTaskRowModels } from '../../../../shared/agent-status/presen import type { AgentChildWorkView } from '../../../../shared/agent-status/child-work/agent-status-child-work-view' import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' import type { AgentSubagentSnapshot } from '../../../../shared/agent-status/contracts/agent-status-subagent-snapshot' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { buildBackgroundTaskGroupsFromViews } from '../../../../shared/background-task-roster' import { buildBackgroundTaskGroups } from '@/components/native-chat/background-task-roster' import { structuredSessionBackgroundTasksView } from '../../../../shared/structured-session-background-tasks-view' diff --git a/src/renderer/src/components/sidebar/worktree-subagent-child-rows.ts b/src/renderer/src/components/sidebar/worktree-subagent-child-rows.ts index 056d6801c7d..02fd3befe06 100644 --- a/src/renderer/src/components/sidebar/worktree-subagent-child-rows.ts +++ b/src/renderer/src/components/sidebar/worktree-subagent-child-rows.ts @@ -10,7 +10,7 @@ import { type AgentChildDisplayState } from '../../../../shared/agent-status/child-work/agent-status-child-work-display' import { buildRunningAgentChildRowModels } from '../../../../shared/running-agent-child-rows' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' /** NUL prevents collision with real pane keys; synthetic keys are never parsed for activation, which uses the parent pane. */ function subagentRowKey(parentPaneKey: string, subagentId: string): string { diff --git a/src/renderer/src/components/sidebar/worktree-title-classification-work.test.ts b/src/renderer/src/components/sidebar/worktree-title-classification-work.test.ts index 221ca6436b0..3c683a7b60b 100644 --- a/src/renderer/src/components/sidebar/worktree-title-classification-work.test.ts +++ b/src/renderer/src/components/sidebar/worktree-title-classification-work.test.ts @@ -1,16 +1,16 @@ import { describe, expect, it, vi } from 'vitest' import * as AgentNameTokenMatchModule from '../../../../shared/agent-status/title/agent-name-token-match' -import { resolveExplicitTerminalTitleAgentType } from '../../../../shared/terminal-title-agent-type' +import { resolveExplicitTerminalTitleAgentType } from '../../../../shared/agent-status/title/terminal-title-agent-type' import * as Evidence from '../../../../shared/agent-status/title/agent-title-evidence' import * as Frames from '../../../../shared/agent-status/title/agent-title-name-anchoring' import { createTerminalTitleTracker } from '../../../../shared/terminal/output/terminal-output-side-effects' import { resolveTabAgentFromSignalSnapshot } from '../../../../shared/tab-agent-from-signals' import { buildTitleDerivedAgentRows } from './worktree-title-derived-agent-rows' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type * as OpenCode from '../../../../shared/agent-status/title/providers/opencode-terminal-title' import * as Status from '../../../../shared/agent-status/title/agent-title-status' -import * as Wrappers from '../../../../shared/terminal-title-wrapper-segments' +import * as Wrappers from '../../../../shared/agent-status/title/terminal-title-wrapper-segments' import * as Ingress from '../terminal-pane/terminal-title-evidence' const work = vi.hoisted((): { strict: boolean; frames: number[] } => ({ @@ -36,10 +36,13 @@ vi.mock('../../../../shared/agent-status/title/agent-title-status', async (impor const actual = await importOriginal() return { ...actual, normalizeTerminalTitle: vi.fn(actual.normalizeTerminalTitle) } }) -vi.mock('../../../../shared/terminal-title-wrapper-segments', async (importOriginal) => { - const actual = await importOriginal() - return { ...actual, getWrapperTitleSegments: vi.fn(actual.getWrapperTitleSegments) } -}) +vi.mock( + '../../../../shared/agent-status/title/terminal-title-wrapper-segments', + async (importOriginal) => { + const actual = await importOriginal() + return { ...actual, getWrapperTitleSegments: vi.fn(actual.getWrapperTitleSegments) } + } +) vi.mock('../terminal-pane/terminal-title-evidence', async (importOriginal) => { const actual = await importOriginal() return { ...actual, resolvePaneTitleDecision: vi.fn(actual.resolvePaneTitleDecision) } diff --git a/src/renderer/src/components/sidebar/worktree-title-derived-agent-rows.test.ts b/src/renderer/src/components/sidebar/worktree-title-derived-agent-rows.test.ts index 4c1c063610d..b3aeeb2af5d 100644 --- a/src/renderer/src/components/sidebar/worktree-title-derived-agent-rows.test.ts +++ b/src/renderer/src/components/sidebar/worktree-title-derived-agent-rows.test.ts @@ -1,14 +1,17 @@ import { describe, expect, it } from 'vitest' import { applyAgentRowLineage } from '@/components/dashboard/agent-row-lineage' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../../shared/workspace-layout/terminal-tab-types' import type { TuiAgent } from '../../../../shared/agent-launch/catalog/tui-agent' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { buildWorktreeAgentRows } from './worktree-agent-rows' import { createTerminalTitleTracker } from '../../../../shared/terminal/output/terminal-output-side-effects' import { resolveTabAgentFromSignalSnapshot } from '../../../../shared/tab-agent-from-signals' import type { TitleDerivedPaneForeground } from './title-derived-pane-agent-identity' -import { resolveExplicitTerminalTitleAgentType } from '../../../../shared/terminal-title-agent-type' +import { resolveExplicitTerminalTitleAgentType } from '../../../../shared/agent-status/title/terminal-title-agent-type' const LEAF_ID_1 = '77777777-7777-4777-8777-777777777777' const LEAF_ID_2 = '88888888-8888-4888-8888-888888888888' diff --git a/src/renderer/src/components/sidebar/worktree-title-derived-agent-rows.ts b/src/renderer/src/components/sidebar/worktree-title-derived-agent-rows.ts index 71c62ae1bd1..f86fd000816 100644 --- a/src/renderer/src/components/sidebar/worktree-title-derived-agent-rows.ts +++ b/src/renderer/src/components/sidebar/worktree-title-derived-agent-rows.ts @@ -19,8 +19,11 @@ import { resolveRuntimePaneTitleLeafIdFromSparseSlots, collectRuntimePaneLeafIds } from '../../../../shared/runtime-pane-title-leaf-id' -import { isTerminalLeafId, makePaneKey } from '../../../../shared/stable-pane-id' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' +import { isTerminalLeafId, makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../../shared/workspace-layout/terminal-tab-types' import { normalizeCompatibleAgentTitleForOwner, resolveCompatibleAgentTypeForOwner, diff --git a/src/renderer/src/components/status-bar/mergeSnapshotAndSessions.test.ts b/src/renderer/src/components/status-bar/mergeSnapshotAndSessions.test.ts index 45c6361e597..28ba6821d39 100644 --- a/src/renderer/src/components/status-bar/mergeSnapshotAndSessions.test.ts +++ b/src/renderer/src/components/status-bar/mergeSnapshotAndSessions.test.ts @@ -1,11 +1,12 @@ import { describe, expect, it } from 'vitest' import type { BrowserWorkspace } from '../../../../shared/browser-workspace-types' import type { MemorySnapshot, WorktreeMemory } from '../../../../shared/process-stats-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { Worktree } from '../../../../shared/worktree/types' import { mergeSnapshotAndSessions, UNATTRIBUTED_REPO_ID } from './mergeSnapshotAndSessions' import { requiresKillConfirmation } from './resource-session-kill-confirmation' -import type { DaemonSession, MergeContext } from './resource-usage-merge-types' +import type { MergeContext } from './resource-usage-merge-types' +import type { PtyListedSession as DaemonSession } from '../../../../shared/terminal/pty/lifecycle/pty-listed-session' function emptyAppMemory() { return { diff --git a/src/renderer/src/components/status-bar/mergeSnapshotAndSessions.ts b/src/renderer/src/components/status-bar/mergeSnapshotAndSessions.ts index 617300983d4..2a70d1b21c5 100644 --- a/src/renderer/src/components/status-bar/mergeSnapshotAndSessions.ts +++ b/src/renderer/src/components/status-bar/mergeSnapshotAndSessions.ts @@ -1,15 +1,15 @@ /** Merge local/paired-host samples and daemon sessions by project/workspace; unsampled metrics are null and paired rows are read-only. */ import type { MemorySnapshot, WorktreeMemory } from '../../../../shared/process-stats-types' -import { parsePtySessionId } from '../../../../shared/pty-session-id-format' +import { parsePtySessionId } from '../../../../shared/terminal/pty/lifecycle/pty-session-id-format' import { getRepoIdFromWorktreeId } from '../../../../shared/worktree/id' import type { - DaemonSession, MergeContext, UnifiedProjectGroup, UnifiedSessionRow, UnifiedWorktreeRow } from './resource-usage-merge-types' +import type { PtyListedSession as DaemonSession } from '../../../../shared/terminal/pty/lifecycle/pty-listed-session' import { buildResourceSessionBindingIndex } from './resource-session-bindings' import { resolveResourceFolderWorkspace, diff --git a/src/renderer/src/components/status-bar/resource-pty-view-model.test.ts b/src/renderer/src/components/status-bar/resource-pty-view-model.test.ts index 964d9c99d6c..3a1877d6ebd 100644 --- a/src/renderer/src/components/status-bar/resource-pty-view-model.test.ts +++ b/src/renderer/src/components/status-bar/resource-pty-view-model.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from 'vitest' import { buildResourcePtyRows, groupResourcePtyRows } from './resource-pty-view-model' -import type { PtyListedSession } from '../../../../shared/pty-listed-session' +import type { PtyListedSession } from '../../../../shared/terminal/pty/lifecycle/pty-listed-session' import { folderWorkspaceToWorktree } from '../../../../shared/folder-workspaces/folder-workspace-worktree' import { makeFolderWorkspace, @@ -9,7 +9,7 @@ import { makeWorktree } from '../worktree-jump/worktree-jump-palette-test-fixtures' import { makeProjectGroup } from '../sidebar/folder-workspace-composer-submit-fixtures' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' const leaf = '11111111-1111-4111-8111-111111111111' const session = (id: string, overrides: Partial = {}): PtyListedSession => ({ diff --git a/src/renderer/src/components/status-bar/resource-pty-view-model.ts b/src/renderer/src/components/status-bar/resource-pty-view-model.ts index 6169fc4eccd..d8585de5449 100644 --- a/src/renderer/src/components/status-bar/resource-pty-view-model.ts +++ b/src/renderer/src/components/status-bar/resource-pty-view-model.ts @@ -1,4 +1,7 @@ -import { ptySessionIdentity, type PtyListedSession } from '../../../../shared/pty-listed-session' +import { + ptySessionIdentity, + type PtyListedSession +} from '../../../../shared/terminal/pty/lifecycle/pty-listed-session' import type { Worktree } from '../../../../shared/worktree/types' import type { Repo } from '../../../../shared/repo-types' import type { ProjectGroup } from '../../../../shared/project-group-types' @@ -7,7 +10,7 @@ import { getWorktreeExecutionHostId } from '../../../../shared/execution-host' import { projectGroupIdFromRepoId } from '../../../../shared/folder-workspaces/folder-workspace-worktree' -import { makePaneKey, isTerminalLeafId } from '../../../../shared/stable-pane-id' +import { makePaneKey, isTerminalLeafId } from '../../../../shared/workspace-layout/stable-pane-id' import { recentStamp } from '../../../../shared/sidebar-list/stamp-order' import { buildResourceSessionBindingIndex, diff --git a/src/renderer/src/components/status-bar/resource-pty-virtualization.test.tsx b/src/renderer/src/components/status-bar/resource-pty-virtualization.test.tsx index ef4865d3fae..e15abbb8da8 100644 --- a/src/renderer/src/components/status-bar/resource-pty-virtualization.test.tsx +++ b/src/renderer/src/components/status-bar/resource-pty-virtualization.test.tsx @@ -7,7 +7,7 @@ import { afterEach, beforeEach, expect, it, vi } from 'vitest' import type { PtyFencedTerminationOutcome, PtyFencedTerminationRequest -} from '../../../../shared/pty-fenced-termination' +} from '../../../../shared/terminal/pty/lifecycle/pty-fenced-termination' import { TooltipProvider } from '@/components/ui/tooltip' import { ResourcePtyPanel } from './ResourcePtyPanel' import { useResourcePtyActions } from './use-resource-pty-actions' diff --git a/src/renderer/src/components/status-bar/resource-session-bindings.test.ts b/src/renderer/src/components/status-bar/resource-session-bindings.test.ts index 30c4647a314..04190ffa1c0 100644 --- a/src/renderer/src/components/status-bar/resource-session-bindings.test.ts +++ b/src/renderer/src/components/status-bar/resource-session-bindings.test.ts @@ -1,5 +1,8 @@ import { describe, expect, it } from 'vitest' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../../shared/workspace-layout/terminal-tab-types' import { buildResourceSessionBindingIndex, countUnboundDaemonSessions, diff --git a/src/renderer/src/components/status-bar/resource-session-bindings.ts b/src/renderer/src/components/status-bar/resource-session-bindings.ts index 36732ee95fd..5f65d3b9af4 100644 --- a/src/renderer/src/components/status-bar/resource-session-bindings.ts +++ b/src/renderer/src/components/status-bar/resource-session-bindings.ts @@ -1,6 +1,11 @@ -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' -import { mayDestroyWithoutOwnerEvidence } from '../../../../shared/pty-listed-session' -import type { DaemonSession } from './resource-usage-merge-types' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../../shared/workspace-layout/terminal-tab-types' +import { + mayDestroyWithoutOwnerEvidence, + type PtyListedSession as DaemonSession +} from '../../../../shared/terminal/pty/lifecycle/pty-listed-session' export type ResourceSessionBindingInputs = { tabsByWorktree: Record diff --git a/src/renderer/src/components/status-bar/resource-session-inventory-cache.ts b/src/renderer/src/components/status-bar/resource-session-inventory-cache.ts index 8973724a026..f45b215c9ac 100644 --- a/src/renderer/src/components/status-bar/resource-session-inventory-cache.ts +++ b/src/renderer/src/components/status-bar/resource-session-inventory-cache.ts @@ -1,12 +1,15 @@ -import type { DaemonSessionInventory } from './resource-session-inventory' import { ptySessionIdentity, type PtyListedSession, type PtySessionLifecycle -} from '../../../../shared/pty-listed-session' +} from '../../../../shared/terminal/pty/lifecycle/pty-listed-session' import { isResourceViewInactive } from '../../../../shared/resource-view-admission' -import { isProvenProcessExit } from '../../../../shared/terminal-exit-cause' -import { EMPTY_DAEMON_SESSION_INVENTORY, inventoryFromSessions } from './resource-session-inventory' +import { isProvenProcessExit } from '../../../../shared/terminal/pty/lifecycle/terminal-exit-cause' +import { + type DaemonSessionInventory, + EMPTY_DAEMON_SESSION_INVENTORY, + inventoryFromSessions +} from './resource-session-inventory' const COOLDOWN_MS = 100 const EXIT_PUBLICATION_MS = 50 diff --git a/src/renderer/src/components/status-bar/resource-session-inventory.test.ts b/src/renderer/src/components/status-bar/resource-session-inventory.test.ts index e9aab750e69..89b144fff38 100644 --- a/src/renderer/src/components/status-bar/resource-session-inventory.test.ts +++ b/src/renderer/src/components/status-bar/resource-session-inventory.test.ts @@ -1,5 +1,5 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { DaemonSession } from './resource-usage-merge-types' +import type { PtyListedSession as DaemonSession } from '../../../../shared/terminal/pty/lifecycle/pty-listed-session' import { ResourceSessionInventoryCache } from './resource-session-inventory-cache' function session(id: string, incarnationId?: string): DaemonSession { diff --git a/src/renderer/src/components/status-bar/resource-session-inventory.ts b/src/renderer/src/components/status-bar/resource-session-inventory.ts index fda71c1beae..4f7f5ba5946 100644 --- a/src/renderer/src/components/status-bar/resource-session-inventory.ts +++ b/src/renderer/src/components/status-bar/resource-session-inventory.ts @@ -1,4 +1,4 @@ -import type { DaemonSession } from './resource-usage-merge-types' +import type { PtyListedSession as DaemonSession } from '../../../../shared/terminal/pty/lifecycle/pty-listed-session' /** Last-known daemon terminal inventory for the Resource Manager badge. */ export type DaemonSessionInventory = { diff --git a/src/renderer/src/components/status-bar/resource-session-kill-confirmation.ts b/src/renderer/src/components/status-bar/resource-session-kill-confirmation.ts index 7978e2a33f3..235e6431ea8 100644 --- a/src/renderer/src/components/status-bar/resource-session-kill-confirmation.ts +++ b/src/renderer/src/components/status-bar/resource-session-kill-confirmation.ts @@ -1,4 +1,4 @@ -import { mayDestroyWithoutOwnerEvidence } from '../../../../shared/pty-listed-session' +import { mayDestroyWithoutOwnerEvidence } from '../../../../shared/terminal/pty/lifecycle/pty-listed-session' import type { UnifiedSessionRow } from './resource-usage-merge-types' /** Skip confirmation only for unbound sessions with proven agent-owner absence; bound or unverifiable sessions must ask. */ diff --git a/src/renderer/src/components/status-bar/resource-session-labels.ts b/src/renderer/src/components/status-bar/resource-session-labels.ts index db3a1ab52b9..6d0678f70f6 100644 --- a/src/renderer/src/components/status-bar/resource-session-labels.ts +++ b/src/renderer/src/components/status-bar/resource-session-labels.ts @@ -1,8 +1,9 @@ import type { SessionMemory } from '../../../../shared/process-stats-types' -import { parsePaneKey as parseStablePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey as parseStablePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { getWorktreePathBasenameFromId } from '../../../../shared/worktree/id' import { translate } from '@/i18n/i18n' -import type { DaemonSession, MergeContext } from './resource-usage-merge-types' +import type { MergeContext } from './resource-usage-merge-types' +import type { PtyListedSession as DaemonSession } from '../../../../shared/terminal/pty/lifecycle/pty-listed-session' import type { ResourceSessionBindingIndex } from './resource-session-bindings' export function deriveWorktreeNameFromWorktreeId(worktreeId: string): string { diff --git a/src/renderer/src/components/status-bar/resource-session-navigation.ts b/src/renderer/src/components/status-bar/resource-session-navigation.ts index 94f11f862c8..93aaf4f4365 100644 --- a/src/renderer/src/components/status-bar/resource-session-navigation.ts +++ b/src/renderer/src/components/status-bar/resource-session-navigation.ts @@ -1,4 +1,4 @@ -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' type TabLookup = Record diff --git a/src/renderer/src/components/status-bar/resource-usage-merge-types.ts b/src/renderer/src/components/status-bar/resource-usage-merge-types.ts index 88dc78e95bb..698c9636288 100644 --- a/src/renderer/src/components/status-bar/resource-usage-merge-types.ts +++ b/src/renderer/src/components/status-bar/resource-usage-merge-types.ts @@ -1,17 +1,16 @@ import type { BrowserWorkspace } from '../../../../shared/browser-workspace-types' import type { WorktreeMemory } from '../../../../shared/process-stats-types' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' -import type { Worktree } from '../../../../shared/worktree/types' import type { - AgentOwnershipEvidence, - PtyListedSession -} from '../../../../shared/pty-listed-session' + TerminalLayoutSnapshot, + TerminalTab +} from '../../../../shared/workspace-layout/terminal-tab-types' +import type { Worktree } from '../../../../shared/worktree/types' +import type { AgentOwnershipEvidence } from '../../../../shared/terminal/pty/lifecycle/pty-listed-session' /** Null means no process sample, commonly for SSH PTYs; render an em dash. */ export type Metric = number | null /** One `pty.listSessions()` row. Aliased so ownership evidence cannot be dropped locally. */ -export type DaemonSession = PtyListedSession export type UnifiedSessionRow = { sessionId: string diff --git a/src/renderer/src/components/status-bar/use-resource-pty-actions.test.tsx b/src/renderer/src/components/status-bar/use-resource-pty-actions.test.tsx index bd81bfb7b9f..c3d03b8b24c 100644 --- a/src/renderer/src/components/status-bar/use-resource-pty-actions.test.tsx +++ b/src/renderer/src/components/status-bar/use-resource-pty-actions.test.tsx @@ -1,11 +1,11 @@ // @vitest-environment happy-dom import { act, cleanup, renderHook } from '@testing-library/react' import { afterEach, beforeEach, expect, it, vi } from 'vitest' -import type { PtyListedSession } from '../../../../shared/pty-listed-session' +import type { PtyListedSession } from '../../../../shared/terminal/pty/lifecycle/pty-listed-session' import type { PtyFencedTerminationOutcome, PtyFencedTerminationRequest -} from '../../../../shared/pty-fenced-termination' +} from '../../../../shared/terminal/pty/lifecycle/pty-fenced-termination' import { useResourcePtyActions } from './use-resource-pty-actions' import { useResourceSessionInventory } from './use-resource-session-inventory' import { buildResourcePtyRows } from './resource-pty-view-model' diff --git a/src/renderer/src/components/status-bar/use-resource-pty-actions.ts b/src/renderer/src/components/status-bar/use-resource-pty-actions.ts index 3995b36c308..697a48e8340 100644 --- a/src/renderer/src/components/status-bar/use-resource-pty-actions.ts +++ b/src/renderer/src/components/status-bar/use-resource-pty-actions.ts @@ -1,5 +1,5 @@ import { useCallback, useEffect, useRef, useState } from 'react' -import type { PtyFencedTerminationRequest } from '../../../../shared/pty-fenced-termination' +import type { PtyFencedTerminationRequest } from '../../../../shared/terminal/pty/lifecycle/pty-fenced-termination' import type { ResourcePtyRow } from './resource-pty-view-model' import type { useResourceSessionInventory } from './use-resource-session-inventory' import { useMountedRef } from '@/hooks/useMountedRef' diff --git a/src/renderer/src/components/status-bar/use-resource-session-inventory.ts b/src/renderer/src/components/status-bar/use-resource-session-inventory.ts index f2b99655fd5..24954b57dae 100644 --- a/src/renderer/src/components/status-bar/use-resource-session-inventory.ts +++ b/src/renderer/src/components/status-bar/use-resource-session-inventory.ts @@ -1,7 +1,7 @@ import { useCallback, useEffect, useState, useSyncExternalStore } from 'react' import { subscribeDaemonSessionInventoryInvalidated } from './daemon-session-inventory-invalidation' import { ResourceSessionInventoryCache } from './resource-session-inventory-cache' -import type { PtyListedSession } from '../../../../shared/pty-listed-session' +import type { PtyListedSession } from '../../../../shared/terminal/pty/lifecycle/pty-listed-session' export function useResourceSessionInventory(ready: boolean, active = false, localOnly = false) { const [cache] = useState( diff --git a/src/renderer/src/components/status-bar/use-resource-usage-actions.test.tsx b/src/renderer/src/components/status-bar/use-resource-usage-actions.test.tsx index 8b0d2fca6e9..e540ab8dea4 100644 --- a/src/renderer/src/components/status-bar/use-resource-usage-actions.test.tsx +++ b/src/renderer/src/components/status-bar/use-resource-usage-actions.test.tsx @@ -3,7 +3,8 @@ import { act, cleanup, renderHook } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { ResourceManagerWorktreeTarget } from './resource-manager-worktree-target' import { ResourceSessionInventoryCache } from './resource-session-inventory-cache' -import type { DaemonSession, UnifiedSessionRow } from './resource-usage-merge-types' +import type { UnifiedSessionRow } from './resource-usage-merge-types' +import type { PtyListedSession as DaemonSession } from '../../../../shared/terminal/pty/lifecycle/pty-listed-session' const mocks = vi.hoisted(() => ({ activateAndRevealWorkspace: vi.fn(), diff --git a/src/renderer/src/components/status-bar/use-resource-usage-actions.ts b/src/renderer/src/components/status-bar/use-resource-usage-actions.ts index 502995f714d..8dc8a7e7b16 100644 --- a/src/renderer/src/components/status-bar/use-resource-usage-actions.ts +++ b/src/renderer/src/components/status-bar/use-resource-usage-actions.ts @@ -15,9 +15,13 @@ import { runWorktreeDelete } from '../sidebar/delete-worktree-flow' import { ORPHAN_WORKTREE_ID } from '../../../../shared/constants' import { parseWorkspaceKey } from '../../../../shared/workspace-scope' import { UNATTRIBUTED_REPO_ID } from './mergeSnapshotAndSessions' -import type { DaemonSession, UnifiedSessionRow } from './resource-usage-merge-types' -import type { ResourceSessionBindingInputs } from './resource-session-bindings' -import { selectUnboundDaemonSessions } from './resource-session-bindings' +import type { UnifiedSessionRow } from './resource-usage-merge-types' +import type { PtyListedSession as DaemonSession } from '../../../../shared/terminal/pty/lifecycle/pty-listed-session' + +import { + type ResourceSessionBindingInputs, + selectUnboundDaemonSessions +} from './resource-session-bindings' import { navigateResourceSessionToTab } from './resource-session-navigation' import { requiresKillConfirmation } from './resource-session-kill-confirmation' import { resolveResourceManagerWorktreeTarget } from './resource-manager-worktree-target' diff --git a/src/renderer/src/components/status-bar/use-resource-usage-derived-model.test.tsx b/src/renderer/src/components/status-bar/use-resource-usage-derived-model.test.tsx index 58dccb8d3a1..9e5d12a5ec8 100644 --- a/src/renderer/src/components/status-bar/use-resource-usage-derived-model.test.tsx +++ b/src/renderer/src/components/status-bar/use-resource-usage-derived-model.test.tsx @@ -5,7 +5,7 @@ import type { BrowserWorkspace } from '../../../../shared/browser-workspace-type import type { MemorySnapshot, WorktreeMemory } from '../../../../shared/process-stats-types' import type { Worktree } from '../../../../shared/worktree/types' import type { ProjectGroup } from '../../../../shared/project-group-types' -import type { DaemonSession } from './resource-usage-merge-types' +import type { PtyListedSession as DaemonSession } from '../../../../shared/terminal/pty/lifecycle/pty-listed-session' import { useResourceUsageDerivedModel } from './use-resource-usage-derived-model' const local = { diff --git a/src/renderer/src/components/status-bar/use-resource-usage-derived-model.ts b/src/renderer/src/components/status-bar/use-resource-usage-derived-model.ts index 5c5a84e0812..6258e7875dd 100644 --- a/src/renderer/src/components/status-bar/use-resource-usage-derived-model.ts +++ b/src/renderer/src/components/status-bar/use-resource-usage-derived-model.ts @@ -4,9 +4,13 @@ import type { MemorySnapshot } from '../../../../shared/process-stats-types' import type { Worktree } from '../../../../shared/worktree/types' import { getRepoExecutionHostId, parseExecutionHostId } from '../../../../shared/execution-host' import { mergeSnapshotAndSessions } from './mergeSnapshotAndSessions' -import type { DaemonSession, RuntimeHostResourceSample } from './resource-usage-merge-types' -import type { ResourceSessionBindingInputs } from './resource-session-bindings' -import { countUnboundDaemonSessions } from './resource-session-bindings' +import type { RuntimeHostResourceSample } from './resource-usage-merge-types' +import type { PtyListedSession as DaemonSession } from '../../../../shared/terminal/pty/lifecycle/pty-listed-session' + +import { + type ResourceSessionBindingInputs, + countUnboundDaemonSessions +} from './resource-session-bindings' import { getResourceManagerAriaLabel, getResourceManagerTooltipLines diff --git a/src/renderer/src/components/status-bar/workspace-space-decision-details.ts b/src/renderer/src/components/status-bar/workspace-space-decision-details.ts index 290a0d720e6..d1925efb816 100644 --- a/src/renderer/src/components/status-bar/workspace-space-decision-details.ts +++ b/src/renderer/src/components/status-bar/workspace-space-decision-details.ts @@ -3,7 +3,7 @@ import type { MigrationUnsupportedPtyEntry } from '../../../../shared/agent-stat import type { ExecutionHostId } from '../../../../shared/execution-host' import type { HostedReviewProvider } from '../../../../shared/source-control/hosted-review/hosted-review-contracts' import type { Repo } from '../../../../shared/repo-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { Worktree } from '../../../../shared/worktree/types' import { isGitHubPRSuppressed } from '../../../../shared/worktree/github-pr-suppression' import type { WorkspaceSpaceWorktree } from '../../../../shared/workspace-disk-space/workspace-space-types' diff --git a/src/renderer/src/components/status-bar/workspace-space-decision-inputs.ts b/src/renderer/src/components/status-bar/workspace-space-decision-inputs.ts index 0be93dfa61f..758d2b208ef 100644 --- a/src/renderer/src/components/status-bar/workspace-space-decision-inputs.ts +++ b/src/renderer/src/components/status-bar/workspace-space-decision-inputs.ts @@ -1,4 +1,4 @@ -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { WorkspaceSpaceWorktree } from '../../../../shared/workspace-disk-space/workspace-space-types' import type { WorkspaceDecisionInputs } from './workspace-space-decision-details' import { getPaneKeyTabId } from './workspace-space-presentation' diff --git a/src/renderer/src/components/status-bar/workspace-space-presentation.ts b/src/renderer/src/components/status-bar/workspace-space-presentation.ts index 65d791d9f9a..72dad17b787 100644 --- a/src/renderer/src/components/status-bar/workspace-space-presentation.ts +++ b/src/renderer/src/components/status-bar/workspace-space-presentation.ts @@ -3,8 +3,8 @@ import { tabHasLivePty } from '../../../../shared/tab-has-live-pty' import { AGENT_STATUS_STALE_AFTER_MS } from '../../../../shared/agent-status/contracts/agent-status-freshness' import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' import type { MigrationUnsupportedPtyEntry } from '../../../../shared/agent-status/contracts/agent-status-ipc-payload' -import { parsePaneKey } from '../../../../shared/stable-pane-id' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { isClipboardTextByteLengthOverLimit } from '../../../../shared/clipboard-text' import type { WorkspaceSpaceItem, diff --git a/src/renderer/src/components/tab-bar/CliChatResumeMenuItems.tsx b/src/renderer/src/components/tab-bar/CliChatResumeMenuItems.tsx index 46300ac8b52..73e080bb7d0 100644 --- a/src/renderer/src/components/tab-bar/CliChatResumeMenuItems.tsx +++ b/src/renderer/src/components/tab-bar/CliChatResumeMenuItems.tsx @@ -1,7 +1,7 @@ import { useState } from 'react' import { useAppStore } from '@/store' import { ContextMenuSeparator } from '@/components/ui/context-menu' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { AiVaultSessionSurfaceSwitchMenuItems } from '../right-sidebar/AiVaultSessionSurfaceSwitchMenuItems' import { resolveCliChatResumeSource } from './cli-chat-resume-source' import { runCliChatResume, useCliChatResumePending } from './cli-chat-resume-run' diff --git a/src/renderer/src/components/tab-bar/SortableTab.tsx b/src/renderer/src/components/tab-bar/SortableTab.tsx index 3658ae0044d..001f7833651 100644 --- a/src/renderer/src/components/tab-bar/SortableTab.tsx +++ b/src/renderer/src/components/tab-bar/SortableTab.tsx @@ -7,8 +7,8 @@ import { getAgentLabel } from '@/lib/agent-catalog' import { basename } from '@/lib/path' import { Input } from '@/components/ui/input' import { TabHoverCard } from './TabHoverCard' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' -import type { TerminalAgent } from '../../../../shared/terminal-agent' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' +import type { TerminalAgent } from '../../../../shared/agent-status/identity/terminal-agent' import type { TabDragItemData } from '../tab-group/useTabDragSplit' import { useAppStore } from '../../store' import { diff --git a/src/renderer/src/components/tab-bar/SortableTab.update-depth-probe.test.tsx b/src/renderer/src/components/tab-bar/SortableTab.update-depth-probe.test.tsx index 3998a33d0e7..7d13f965a87 100644 --- a/src/renderer/src/components/tab-bar/SortableTab.update-depth-probe.test.tsx +++ b/src/renderer/src/components/tab-bar/SortableTab.update-depth-probe.test.tsx @@ -1,10 +1,9 @@ // @vitest-environment happy-dom -import type { ReactElement, ReactNode } from 'react' -import { cloneElement, isValidElement, StrictMode } from 'react' +import { type ReactElement, type ReactNode, cloneElement, isValidElement, StrictMode } from 'react' import { act, render, cleanup, fireEvent, screen } from '@testing-library/react' import { afterEach, describe, expect, it, vi } from 'vitest' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { TabDragItemData } from '../tab-group/useTabDragSplit' import { useAppStore } from '../../store' import SortableTab from './SortableTab' diff --git a/src/renderer/src/components/tab-bar/SortableTabContextMenu.tsx b/src/renderer/src/components/tab-bar/SortableTabContextMenu.tsx index b00b8fa2569..478b70bd5e2 100644 --- a/src/renderer/src/components/tab-bar/SortableTabContextMenu.tsx +++ b/src/renderer/src/components/tab-bar/SortableTabContextMenu.tsx @@ -5,7 +5,7 @@ import { ContextMenuShortcut, ContextMenuContent } from '@/components/ui/context-menu' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { useAppStore } from '../../store' import { formatShortcutLabel, useOptionalShortcutLabel } from '@/hooks/useShortcutLabel' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/tab-bar/TabBar.fixture.tsx b/src/renderer/src/components/tab-bar/TabBar.fixture.tsx index dd3017bf98a..e255d860c91 100644 --- a/src/renderer/src/components/tab-bar/TabBar.fixture.tsx +++ b/src/renderer/src/components/tab-bar/TabBar.fixture.tsx @@ -1,7 +1,7 @@ import { useState } from 'react' import { DndContext } from '@dnd-kit/core' import { defineFixture } from '../../component-fixtures/component-fixture' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import TabBar from './TabBar' import type { TabBarProps } from './tab-bar-props' diff --git a/src/renderer/src/components/tab-bar/TabBarCreateEntry.keyboard.test.tsx b/src/renderer/src/components/tab-bar/TabBarCreateEntry.keyboard.test.tsx index 8a7cb3720cb..6bda3080761 100644 --- a/src/renderer/src/components/tab-bar/TabBarCreateEntry.keyboard.test.tsx +++ b/src/renderer/src/components/tab-bar/TabBarCreateEntry.keyboard.test.tsx @@ -4,7 +4,7 @@ import { act } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { Tab, TabGroup } from '../../../../shared/tab-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { Worktree } from '../../../../shared/worktree/types' import type { TabEntryOption } from './tab-create-entry-action' import type { TabAgentLaunchOption } from './tab-agent-launch-options' diff --git a/src/renderer/src/components/tab-bar/TabSessionSurfaceSwitchMenuItems.tsx b/src/renderer/src/components/tab-bar/TabSessionSurfaceSwitchMenuItems.tsx index d4e57d3cae8..3bc28abf086 100644 --- a/src/renderer/src/components/tab-bar/TabSessionSurfaceSwitchMenuItems.tsx +++ b/src/renderer/src/components/tab-bar/TabSessionSurfaceSwitchMenuItems.tsx @@ -1,4 +1,4 @@ -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { CliChatResumeMenuItems } from './CliChatResumeMenuItems' import { NativeChatCliForkMenuItems } from './NativeChatCliForkMenuItems' import type { NativeChatTabSession } from './tab-session-history-switch' diff --git a/src/renderer/src/components/tab-bar/TerminalSortableTab.tsx b/src/renderer/src/components/tab-bar/TerminalSortableTab.tsx index ec53f475458..3deeaef1609 100644 --- a/src/renderer/src/components/tab-bar/TerminalSortableTab.tsx +++ b/src/renderer/src/components/tab-bar/TerminalSortableTab.tsx @@ -1,5 +1,5 @@ import { useTabAgent } from '@/lib/use-tab-agent' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import SortableTab, { type SortableTabProps } from './SortableTab' type TerminalSortableTabProps = Omit & { tab: TerminalTab } diff --git a/src/renderer/src/components/tab-bar/TerminalTabLeadingIcon.tsx b/src/renderer/src/components/tab-bar/TerminalTabLeadingIcon.tsx index 677297e17ca..8a4f8da3fc4 100644 --- a/src/renderer/src/components/tab-bar/TerminalTabLeadingIcon.tsx +++ b/src/renderer/src/components/tab-bar/TerminalTabLeadingIcon.tsx @@ -1,8 +1,8 @@ import { AgentStateDot } from '@/components/AgentStateDot' import { AgentIcon } from '@/lib/agent-catalog' import { cn } from '@/lib/utils' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' -import type { TerminalAgent } from '../../../../shared/terminal-agent' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' +import type { TerminalAgent } from '../../../../shared/agent-status/identity/terminal-agent' import { FilledBellIcon } from '../sidebar/WorktreeCardHelpers' import { ShellIcon } from './shell-icons' import { diff --git a/src/renderer/src/components/tab-bar/cli-chat-resume-close-terminal.ts b/src/renderer/src/components/tab-bar/cli-chat-resume-close-terminal.ts index a10c9946b6c..0997e54b736 100644 --- a/src/renderer/src/components/tab-bar/cli-chat-resume-close-terminal.ts +++ b/src/renderer/src/components/tab-bar/cli-chat-resume-close-terminal.ts @@ -4,11 +4,11 @@ import { callRuntimeRpc } from '@/runtime/runtime-rpc-client' import { structuredAgentSessionTargetForHost } from '@/runtime/structured-agent-session-owner' import { collectTabPtyIds } from '../terminal/running-terminal-close-guard' import { closeTerminalTab } from '../terminal/terminal-tab-actions' -import { toHostSessionPaneKey } from '../../../../shared/terminal-surface-id' +import { toHostSessionPaneKey } from '../../../../shared/workspace-layout/terminal-surface-id' import { captureTerminalSurfaceIdentity, isRetainedTerminalSurfaceIdentity -} from '../../../../shared/terminal-tab-close' +} from '../../../../shared/workspace-layout/terminal-tab-close' import type { RuntimeTerminalResolvePane, RuntimeTerminalWait diff --git a/src/renderer/src/components/tab-bar/cli-chat-resume-run.test.ts b/src/renderer/src/components/tab-bar/cli-chat-resume-run.test.ts index 1d5f296d397..8f34f8db1ae 100644 --- a/src/renderer/src/components/tab-bar/cli-chat-resume-run.test.ts +++ b/src/renderer/src/components/tab-bar/cli-chat-resume-run.test.ts @@ -103,7 +103,7 @@ import { useAppStore } from '@/store' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../../shared/layout-owner-switch' import { layoutApplyTestTransport } from '@/runtime/layout-apply-test-transport.test-fixture' import { runCliChatResume } from './cli-chat-resume-run' -import { toWebTerminalSurfaceTabId } from '../../../../shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../../../shared/workspace-layout/terminal-surface-id' import { isEmptyWorkspaceDefaultSurfacePending } from '@/lib/empty-workspace-default-surface-claims' import { clearWebSessionFocusIntent, diff --git a/src/renderer/src/components/tab-bar/cli-chat-resume-run.ts b/src/renderer/src/components/tab-bar/cli-chat-resume-run.ts index 6c1ae76bb96..1bdb29e399b 100644 --- a/src/renderer/src/components/tab-bar/cli-chat-resume-run.ts +++ b/src/renderer/src/components/tab-bar/cli-chat-resume-run.ts @@ -19,7 +19,7 @@ import { supportsStructuredAgentSessionCliSource } from '@/runtime/structured-ag import { structuredAgentSessionTargetForHost } from '@/runtime/structured-agent-session-owner' import { waitForPromiseWithSignal } from '../../../../shared/abort-signal-reason' import { CLI_CONVERSATION_ADOPTING_AGENTS } from '../../../../shared/structured-agent-cli-conversation-adoption' -import { toHostSessionPaneKey } from '../../../../shared/terminal-surface-id' +import { toHostSessionPaneKey } from '../../../../shared/workspace-layout/terminal-surface-id' import { resolveCliChatResumeSource, type CliChatResumeSource } from './cli-chat-resume-source' import { cliChatResumeExitUnprovenText, diff --git a/src/renderer/src/components/tab-bar/native-chat-tab-agent-evidence.ts b/src/renderer/src/components/tab-bar/native-chat-tab-agent-evidence.ts index 4e96d69bb5c..4557431073f 100644 --- a/src/renderer/src/components/tab-bar/native-chat-tab-agent-evidence.ts +++ b/src/renderer/src/components/tab-bar/native-chat-tab-agent-evidence.ts @@ -1,5 +1,5 @@ import type { Tab } from '../../../../shared/tab-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { TuiAgent } from '../../../../shared/agent-launch/catalog/tui-agent' import { isTuiAgent } from '../../../../shared/agent-launch/catalog/tui-agent-config' import { resolveCommittedTitleAgentType } from '@/lib/pane-agent-evidence' diff --git a/src/renderer/src/components/tab-bar/open-tab-entry-dedupe.ts b/src/renderer/src/components/tab-bar/open-tab-entry-dedupe.ts index 9214f28233c..0df7ddd8fa3 100644 --- a/src/renderer/src/components/tab-bar/open-tab-entry-dedupe.ts +++ b/src/renderer/src/components/tab-bar/open-tab-entry-dedupe.ts @@ -2,7 +2,7 @@ import { normalizeRelativePath } from '@/lib/path' import { isCaseInsensitiveRuntimeRoot } from '../../../../shared/cross-platform-path' -import { normalizeBrowserHistoryUrl } from '../../../../shared/workspace-session-browser-history' +import { normalizeBrowserHistoryUrl } from '../../../../shared/workspace-session/workspace-session-browser-history' import type { OpenTabSearchResult } from './open-tab-search' import type { BrowserHistoryOmniboxRow } from './tab-create-entry-active-option' import type { TabEntryOption } from './tab-create-entry-action' diff --git a/src/renderer/src/components/tab-bar/open-tab-search.ts b/src/renderer/src/components/tab-bar/open-tab-search.ts index fab68fab194..cafa33f2171 100644 --- a/src/renderer/src/components/tab-bar/open-tab-search.ts +++ b/src/renderer/src/components/tab-bar/open-tab-search.ts @@ -22,7 +22,7 @@ import { type SimulatorPaletteSearchResult } from '@/lib/simulator-palette-search' import { getUnifiedTabPaletteExecutionHostId } from '@/lib/unified-tab-host-ownership' -import type { TerminalAgent } from '../../../../shared/terminal-agent' +import type { TerminalAgent } from '../../../../shared/agent-status/identity/terminal-agent' import { searchWorkspaceTabs, type SearchableWorkspaceTab, diff --git a/src/renderer/src/components/tab-bar/tab-agent-types-by-tab-id.test.ts b/src/renderer/src/components/tab-bar/tab-agent-types-by-tab-id.test.ts index 6b2d3f287b0..8ea766f8fdf 100644 --- a/src/renderer/src/components/tab-bar/tab-agent-types-by-tab-id.test.ts +++ b/src/renderer/src/components/tab-bar/tab-agent-types-by-tab-id.test.ts @@ -2,7 +2,7 @@ import { describe, expect, it, vi } from 'vitest' import { shallow } from 'zustand/shallow' import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' import { mulberry32 } from '../../../../shared/agent-tui-ansi-fuzz-stream' -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' import { findTabAgentEntry } from '../native-chat/native-chat-tab-agent-entry' import { createTabBarAgentProjectionSelector, diff --git a/src/renderer/src/components/tab-bar/tab-agent-types-by-tab-id.ts b/src/renderer/src/components/tab-bar/tab-agent-types-by-tab-id.ts index 344e5b2eed6..1474c785115 100644 --- a/src/renderer/src/components/tab-bar/tab-agent-types-by-tab-id.ts +++ b/src/renderer/src/components/tab-bar/tab-agent-types-by-tab-id.ts @@ -2,7 +2,7 @@ import type { AgentStatusEntry, AgentType } from '../../../../shared/agent-status/contracts/agent-status-types' -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' import { isNativeChatTabWideFallbackSafe, resolveNativeChatActiveLayoutLeafId diff --git a/src/renderer/src/components/tab-bar/tab-bar-item-model.ts b/src/renderer/src/components/tab-bar/tab-bar-item-model.ts index 02191ec24e9..b4be7cf71b1 100644 --- a/src/renderer/src/components/tab-bar/tab-bar-item-model.ts +++ b/src/renderer/src/components/tab-bar/tab-bar-item-model.ts @@ -7,7 +7,7 @@ import type { AppState } from '@/store/types' import type { BrowserTab as BrowserTabState } from '../../../../shared/browser-workspace-types' import type { GitFileStatus } from '../../../../shared/git/status/git-status-types' import type { Tab, WorkspaceVisibleTabType } from '../../../../shared/tab-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { resolveTerminalTabTitle } from '../../../../shared/tab-title-resolution' import type { OpenFile } from '../../store/slices/editor' import { normalizeRelativePath } from '@/lib/path' diff --git a/src/renderer/src/components/tab-bar/tab-bar-props.ts b/src/renderer/src/components/tab-bar/tab-bar-props.ts index 43321487c9c..ec086b2aca5 100644 --- a/src/renderer/src/components/tab-bar/tab-bar-props.ts +++ b/src/renderer/src/components/tab-bar/tab-bar-props.ts @@ -1,7 +1,7 @@ import type { BrowserTab as BrowserTabState } from '../../../../shared/browser-workspace-types' import type { ClientHostedBrowserRow } from '../../../../shared/client-hosted-browser-rows' import type { Tab, WorkspaceVisibleTabType } from '../../../../shared/tab-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { OpenFile } from '../../store/slices/editor' import type { HoveredTabInsertion } from '../tab-group/useTabDragSplit' import type { TabCreateEntryArgs } from './tab-create-entry-action' diff --git a/src/renderer/src/components/tab-bar/tab-create-entry-history-placement.ts b/src/renderer/src/components/tab-bar/tab-create-entry-history-placement.ts index f48aa0e9d13..01e7ea9509c 100644 --- a/src/renderer/src/components/tab-bar/tab-create-entry-history-placement.ts +++ b/src/renderer/src/components/tab-bar/tab-create-entry-history-placement.ts @@ -1,7 +1,7 @@ // Place history with matching URL entries, otherwise below file matches and above creation/search fallbacks. import { dropUrlEntriesCoveredByHistoryRows } from './open-tab-entry-dedupe' -import { normalizeBrowserHistoryUrl } from '../../../../shared/workspace-session-browser-history' +import { normalizeBrowserHistoryUrl } from '../../../../shared/workspace-session/workspace-session-browser-history' import { isActiveEntryOption, type ActiveEntryOption, diff --git a/src/renderer/src/components/tab-bar/tab-session-history-switch.ts b/src/renderer/src/components/tab-bar/tab-session-history-switch.ts index 36fec564103..63f4de2be25 100644 --- a/src/renderer/src/components/tab-bar/tab-session-history-switch.ts +++ b/src/renderer/src/components/tab-bar/tab-session-history-switch.ts @@ -25,7 +25,7 @@ import { type CliConversationRowAgent } from '../../../../shared/structured-agent-cli-conversation-adoption' import { agentForksConversations } from '../../../../shared/agent-launch/startup/agent-resume-argv' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { AgentType } from '../../../../shared/agent-status/contracts/agent-status-types' import { resolveAiVaultSessionSurfaceSwitchTargets } from '../right-sidebar/ai-vault-session-surface-switch' import { resolveAiVaultHistoryRowResume } from '../right-sidebar/ai-vault-session-resume-in-chat-workspace' diff --git a/src/renderer/src/components/tab-bar/terminal-tab-activity-status.test.ts b/src/renderer/src/components/tab-bar/terminal-tab-activity-status.test.ts index 415b73eb112..23b1d641ae0 100644 --- a/src/renderer/src/components/tab-bar/terminal-tab-activity-status.test.ts +++ b/src/renderer/src/components/tab-bar/terminal-tab-activity-status.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { AGENT_STATUS_STALE_AFTER_MS } from '../../../../shared/agent-status/contracts/agent-status-freshness' import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { hasUnreadAgentCompletionForTerminalTab, resetUnreadAgentCompletionTabIdsCacheForTest, diff --git a/src/renderer/src/components/tab-bar/terminal-tab-activity-status.ts b/src/renderer/src/components/tab-bar/terminal-tab-activity-status.ts index 12e054851f7..046d23ce942 100644 --- a/src/renderer/src/components/tab-bar/terminal-tab-activity-status.ts +++ b/src/renderer/src/components/tab-bar/terminal-tab-activity-status.ts @@ -8,12 +8,18 @@ import { AGENT_STATUS_STALE_AFTER_MS } from '../../../../shared/agent-status/con import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' import { agentVerdictDisplayMark } from '../../../../shared/agent-status/lifecycle/agent-main-agent-verdict' import { resolveProgramStatusPresentation } from '../../../../shared/program-status/presentation' -import { parseLegacyNumericPaneKey, parsePaneKey } from '../../../../shared/stable-pane-id' +import { + parseLegacyNumericPaneKey, + parsePaneKey +} from '../../../../shared/workspace-layout/stable-pane-id' import { applyAgentPaneActivityFlags, type AgentPaneActivityFlags } from '../../../../shared/worktree-status-rollup' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../../shared/workspace-layout/terminal-tab-types' // Share sidebar pane-state resolution, excluding worktree-only retained-done promotion. export type TerminalTabActivityStatus = WorktreeStatus diff --git a/src/renderer/src/components/tab-bar/terminal-tab-spinner-launch-agent.test.ts b/src/renderer/src/components/tab-bar/terminal-tab-spinner-launch-agent.test.ts index 55693d3e5b4..410acee5f47 100644 --- a/src/renderer/src/components/tab-bar/terminal-tab-spinner-launch-agent.test.ts +++ b/src/renderer/src/components/tab-bar/terminal-tab-spinner-launch-agent.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it } from 'vitest' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { resetTerminalTabActivityFlagsCacheForTest, resolveTerminalTabActivityStatus diff --git a/src/renderer/src/components/tab-bar/use-allow-auto-close.ts b/src/renderer/src/components/tab-bar/use-allow-auto-close.ts index 33013050f9f..b7f5386e3a2 100644 --- a/src/renderer/src/components/tab-bar/use-allow-auto-close.ts +++ b/src/renderer/src/components/tab-bar/use-allow-auto-close.ts @@ -7,7 +7,7 @@ import { setWorkerKeptOpen, type WorkerAutoCloseSubject } from '@/lib/worker-auto-close' -import { isTerminalLeafId, makePaneKey } from '../../../../shared/stable-pane-id' +import { isTerminalLeafId, makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import type { RuntimeClientTarget } from '../../../../shared/runtime-client-target' function tabWorkerSubjects(tabId: string, sessionId: string | undefined): WorkerAutoCloseSubject[] { diff --git a/src/renderer/src/components/tab-bar/use-open-tab-search.test.ts b/src/renderer/src/components/tab-bar/use-open-tab-search.test.ts index 56bb65b8a09..0b91c34989c 100644 --- a/src/renderer/src/components/tab-bar/use-open-tab-search.test.ts +++ b/src/renderer/src/components/tab-bar/use-open-tab-search.test.ts @@ -5,7 +5,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { BrowserPage, BrowserWorkspace } from '../../../../shared/browser-workspace-types' import type { Repo } from '../../../../shared/repo-types' import type { Tab, TabContentType, TabGroup } from '../../../../shared/tab-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { Worktree } from '../../../../shared/worktree/types' import { useAppStore } from '@/store' import type { AppState } from '@/store/types' diff --git a/src/renderer/src/components/tab-bar/use-tab-bar-item-projection.test.tsx b/src/renderer/src/components/tab-bar/use-tab-bar-item-projection.test.tsx index 332b13473b9..085b81c043a 100644 --- a/src/renderer/src/components/tab-bar/use-tab-bar-item-projection.test.tsx +++ b/src/renderer/src/components/tab-bar/use-tab-bar-item-projection.test.tsx @@ -2,7 +2,7 @@ import { renderHook } from '@testing-library/react' import { describe, expect, it } from 'vitest' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { TabBarProps } from './tab-bar-props' import { useTabBarItemProjection } from './use-tab-bar-item-projection' diff --git a/src/renderer/src/components/tab-bar/use-terminal-tab-activity.ts b/src/renderer/src/components/tab-bar/use-terminal-tab-activity.ts index 0f0cd1a6036..6dcc72add28 100644 --- a/src/renderer/src/components/tab-bar/use-terminal-tab-activity.ts +++ b/src/renderer/src/components/tab-bar/use-terminal-tab-activity.ts @@ -1,5 +1,5 @@ import { useAppStore } from '../../store' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { resolveTerminalTabActivityStatus, resolveTerminalTabProgramProgress, diff --git a/src/renderer/src/components/tab-group/useTabGroupItemProjections.ts b/src/renderer/src/components/tab-group/useTabGroupItemProjections.ts index 68e3e394806..1d8810ae9c0 100644 --- a/src/renderer/src/components/tab-group/useTabGroupItemProjections.ts +++ b/src/renderer/src/components/tab-group/useTabGroupItemProjections.ts @@ -2,7 +2,7 @@ import { useMemo } from 'react' import type { OpenFile } from '@/store/slices/editor' import type { BrowserTab as BrowserTabState } from '../../../../shared/browser-workspace-types' import type { Tab, TabGroup } from '../../../../shared/tab-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { resolveUnifiedTabLabel } from '../../../../shared/tab-title-resolution' import type { useAppStore } from '../../store' import { isEditorTabContentType } from '@/store/slices/editor/tabs/editor-tab-content-type' diff --git a/src/renderer/src/components/tab-group/useTabGroupWorkspaceModel.focus.test.ts b/src/renderer/src/components/tab-group/useTabGroupWorkspaceModel.focus.test.ts index a5b981668d4..0f08b49837c 100644 --- a/src/renderer/src/components/tab-group/useTabGroupWorkspaceModel.focus.test.ts +++ b/src/renderer/src/components/tab-group/useTabGroupWorkspaceModel.focus.test.ts @@ -93,7 +93,7 @@ vi.mock('../../runtime/web-runtime-terminal-creation', () => ({ vi.mock('../../runtime/web-runtime-session-environment', () => ({ isWebRuntimeSessionActive: mocks.isWebRuntimeSessionActive })) -vi.mock('../../../../shared/terminal-surface-id', () => ({ +vi.mock('../../../../shared/workspace-layout/terminal-surface-id', () => ({ toHostSessionTabId: (tabId: string) => tabId })) diff --git a/src/renderer/src/components/tab-group/useTabGroupWorkspaceModel.ts b/src/renderer/src/components/tab-group/useTabGroupWorkspaceModel.ts index 662721214e4..0b9b798ff92 100644 --- a/src/renderer/src/components/tab-group/useTabGroupWorkspaceModel.ts +++ b/src/renderer/src/components/tab-group/useTabGroupWorkspaceModel.ts @@ -1,7 +1,7 @@ import { useShallow } from 'zustand/react/shallow' import type { BrowserTab as BrowserTabState } from '../../../../shared/browser-workspace-types' import type { Tab, TabGroup } from '../../../../shared/tab-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { useAppStore } from '../../store' import { useTabGroupItemProjections } from './useTabGroupItemProjections' import { useTabGroupTabCloseCommands } from './useTabGroupTabCloseCommands' diff --git a/src/renderer/src/components/terminal-pane/ClaudeDiffPanelNoticeBanner.tsx b/src/renderer/src/components/terminal-pane/ClaudeDiffPanelNoticeBanner.tsx index 8f433379ca4..f20a30565d2 100644 --- a/src/renderer/src/components/terminal-pane/ClaudeDiffPanelNoticeBanner.tsx +++ b/src/renderer/src/components/terminal-pane/ClaudeDiffPanelNoticeBanner.tsx @@ -2,7 +2,7 @@ import { useEffect, useState } from 'react' import { Button } from '@/components/ui/button' import { translate } from '@/i18n/i18n' import { useAppStore } from '@/store' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { paneClaudeTarget } from './terminal-pane-claude-target' import { PaneTopWarningBanner } from './PaneTopWarningBanner' diff --git a/src/renderer/src/components/terminal-pane/ClaudeOldTerminalBanner.tsx b/src/renderer/src/components/terminal-pane/ClaudeOldTerminalBanner.tsx index ac6a60bf1c4..b9e9549bd2c 100644 --- a/src/renderer/src/components/terminal-pane/ClaudeOldTerminalBanner.tsx +++ b/src/renderer/src/components/terminal-pane/ClaudeOldTerminalBanner.tsx @@ -3,7 +3,7 @@ import { Button } from '@/components/ui/button' import { translate } from '@/i18n/i18n' import { useAppStore } from '@/store' import type { AppState } from '@/store/types' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { paneClaudeTarget } from './terminal-pane-claude-target' import { useModalReturnFocus } from '@/hooks/useModalReturnFocus' import { OldTerminalDialog } from './OldTerminalDialog' diff --git a/src/renderer/src/components/terminal-pane/CodexSharedServerBanner.tsx b/src/renderer/src/components/terminal-pane/CodexSharedServerBanner.tsx index 363a6bc6298..920c4617d8f 100644 --- a/src/renderer/src/components/terminal-pane/CodexSharedServerBanner.tsx +++ b/src/renderer/src/components/terminal-pane/CodexSharedServerBanner.tsx @@ -4,7 +4,7 @@ import { translate } from '@/i18n/i18n' import { useAppStore } from '@/store' import { isCodexSharedServerWarningEnabled } from '../../../../shared/codex-terminal-server-isolation' import type { CodexSharedServerStatus } from '../../../../shared/codex-shared-server-command' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { useModalReturnFocus } from '@/hooks/useModalReturnFocus' import { OldTerminalDialog } from './OldTerminalDialog' import { CodexSharedServerFixDialog } from './CodexSharedServerFixDialog' diff --git a/src/renderer/src/components/terminal-pane/NewerDaemonHoldBanner.tsx b/src/renderer/src/components/terminal-pane/NewerDaemonHoldBanner.tsx index f050c43aea2..56361264537 100644 --- a/src/renderer/src/components/terminal-pane/NewerDaemonHoldBanner.tsx +++ b/src/renderer/src/components/terminal-pane/NewerDaemonHoldBanner.tsx @@ -1,7 +1,7 @@ import { Button } from '@/components/ui/button' import { LoadingSpinner } from '@/components/LoadingSpinner' import { translate } from '@/i18n/i18n' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { PaneTopWarningBanner } from './PaneTopWarningBanner' import { dismissHeldPaneBanner, diff --git a/src/renderer/src/components/terminal-pane/TerminalErrorToast.test.ts b/src/renderer/src/components/terminal-pane/TerminalErrorToast.test.ts index 9899ceea5ee..3ffb11e6693 100644 --- a/src/renderer/src/components/terminal-pane/TerminalErrorToast.test.ts +++ b/src/renderer/src/components/terminal-pane/TerminalErrorToast.test.ts @@ -17,7 +17,7 @@ import { i18n } from '@/i18n/i18n' import { formatTerminalStartFailure, terminalStartError -} from '../../../../shared/terminal-start-failure' +} from '../../../../shared/terminal/pty/lifecycle/terminal-start-failure' import { appendPaneTerminalError, clearPaneTerminalError, @@ -30,7 +30,7 @@ import { PTY_ALLOCATION_HINT, TERMINAL_HOST_CAP_HINT, TERMINAL_PROCESS_LIMIT_HINT -} from '../../../../shared/terminal-spawn-error-copy' +} from '../../../../shared/terminal/pty/lifecycle/terminal-spawn-error-copy' import { TerminalErrorToast, diff --git a/src/renderer/src/components/terminal-pane/TerminalOverlaySlot.tsx b/src/renderer/src/components/terminal-pane/TerminalOverlaySlot.tsx index ca49adf1f2e..761a3e33802 100644 --- a/src/renderer/src/components/terminal-pane/TerminalOverlaySlot.tsx +++ b/src/renderer/src/components/terminal-pane/TerminalOverlaySlot.tsx @@ -1,7 +1,7 @@ import { memo, useLayoutEffect, useState } from 'react' import { createPortal } from 'react-dom' import { useAppStore } from '../../store' -import { isProvenProcessExit } from '../../../../shared/terminal-exit-cause' +import { isProvenProcessExit } from '../../../../shared/terminal/pty/lifecycle/terminal-exit-cause' import { RetainedPaneHost } from '../tab-group/RetainedPaneHost' import type { ActivityTerminalPortalTarget } from '../activity/activity-terminal-portal' import TerminalPane from './TerminalPane' diff --git a/src/renderer/src/components/terminal-pane/TerminalPaneHeaderOverlay.test.tsx b/src/renderer/src/components/terminal-pane/TerminalPaneHeaderOverlay.test.tsx index dd668cf3297..67594158013 100644 --- a/src/renderer/src/components/terminal-pane/TerminalPaneHeaderOverlay.test.tsx +++ b/src/renderer/src/components/terminal-pane/TerminalPaneHeaderOverlay.test.tsx @@ -4,7 +4,7 @@ import { act, createRef, type ReactNode } from 'react' import { createRoot, type Root } from 'react-dom/client' import path from 'node:path' -import { isTerminalLeafId } from '../../../../shared/stable-pane-id' +import { isTerminalLeafId } from '../../../../shared/workspace-layout/stable-pane-id' import { afterEach, describe, expect, it, vi } from 'vitest' import type { ManagedPane, PaneManager } from '@/lib/pane-manager/pane-manager' import type { PtyTransport } from './pty-transport-types' diff --git a/src/renderer/src/components/terminal-pane/TerminalPaneHeaderOverlay.tsx b/src/renderer/src/components/terminal-pane/TerminalPaneHeaderOverlay.tsx index 752f5262a91..3c5dc13f243 100644 --- a/src/renderer/src/components/terminal-pane/TerminalPaneHeaderOverlay.tsx +++ b/src/renderer/src/components/terminal-pane/TerminalPaneHeaderOverlay.tsx @@ -10,7 +10,7 @@ import { isImeCompositionKeyDown } from '@/lib/ime-composition-keyboard-event' import type { PtyTransport } from './pty-transport-types' import { TerminalPaneHeaderDropSurface } from './TerminalPaneHeaderDropSurface' import { TerminalPaneResumeInChatButton } from './TerminalPaneResumeInChatButton' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { NativeChatSettingsButton } from '../native-chat/NativeChatSettingsButton' export type PaneTitleOverlayRect = { diff --git a/src/renderer/src/components/terminal-pane/TerminalPaneNativeChatPortal.tsx b/src/renderer/src/components/terminal-pane/TerminalPaneNativeChatPortal.tsx index a773d2607d3..410e60bc8cb 100644 --- a/src/renderer/src/components/terminal-pane/TerminalPaneNativeChatPortal.tsx +++ b/src/renderer/src/components/terminal-pane/TerminalPaneNativeChatPortal.tsx @@ -1,6 +1,6 @@ import { createPortal } from 'react-dom' import NativeChatView from '../native-chat/NativeChatView' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { canContinueAgentSessionInNewSession } from './terminal-agent-session-continuation' import type { TerminalPaneController } from './use-terminal-pane-controller' import { useAppStore } from '@/store' diff --git a/src/renderer/src/components/terminal-pane/TerminalPaneOverlayLayer.tsx b/src/renderer/src/components/terminal-pane/TerminalPaneOverlayLayer.tsx index c95f110316d..3fd25b7db38 100644 --- a/src/renderer/src/components/terminal-pane/TerminalPaneOverlayLayer.tsx +++ b/src/renderer/src/components/terminal-pane/TerminalPaneOverlayLayer.tsx @@ -1,7 +1,7 @@ import { memo, useCallback, useMemo } from 'react' import { useShallow } from 'zustand/react/shallow' import type { Tab, TabGroup } from '../../../../shared/tab-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { useAppStore } from '../../store' import { useThemeBackgroundStore } from '@/store/theme-background' import { diff --git a/src/renderer/src/components/terminal-pane/TerminalPaneSleepingPortals.tsx b/src/renderer/src/components/terminal-pane/TerminalPaneSleepingPortals.tsx index 5eb147eb14b..6fcb9343592 100644 --- a/src/renderer/src/components/terminal-pane/TerminalPaneSleepingPortals.tsx +++ b/src/renderer/src/components/terminal-pane/TerminalPaneSleepingPortals.tsx @@ -1,5 +1,5 @@ import { createPortal } from 'react-dom' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import type { ManagedPane } from '@/lib/pane-manager/pane-manager' import { usePaneSpawnDeferral } from '@/lib/pane-spawn-deferral-registry' import { TerminalSleepingPaneOverlay } from './TerminalSleepingPaneOverlay' diff --git a/src/renderer/src/components/terminal-pane/TerminalPaneSurface.tsx b/src/renderer/src/components/terminal-pane/TerminalPaneSurface.tsx index 1c2eeec2ac6..e429af57577 100644 --- a/src/renderer/src/components/terminal-pane/TerminalPaneSurface.tsx +++ b/src/renderer/src/components/terminal-pane/TerminalPaneSurface.tsx @@ -1,7 +1,7 @@ import { TerminalCrewPortals } from '../orchestration-crew/TerminalCrewPortals' import { createPortal } from 'react-dom' import { TerminalPaneFileDropOwner } from './TerminalPaneFileDropOwner' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import TerminalSearch from '@/components/TerminalSearch' import { DaemonActionDialog } from '@/components/shared/useDaemonActions' import { AgentSessionContinuationDialog } from '@/components/agent-session-continuation/AgentSessionContinuationDialog' diff --git a/src/renderer/src/components/terminal-pane/TerminalSessionStateSaveFailureDialog.tsx b/src/renderer/src/components/terminal-pane/TerminalSessionStateSaveFailureDialog.tsx index 889fa69d7ef..57e9ac370bf 100644 --- a/src/renderer/src/components/terminal-pane/TerminalSessionStateSaveFailureDialog.tsx +++ b/src/renderer/src/components/terminal-pane/TerminalSessionStateSaveFailureDialog.tsx @@ -9,7 +9,7 @@ import { DialogTitle } from '@/components/ui/dialog' import { translate } from '@/i18n/i18n' -import { isTerminalSessionStorageCapacityFailure } from '../../../../shared/terminal-session-state-save-failure' +import { isTerminalSessionStorageCapacityFailure } from '../../../../shared/workspace-session/terminal-session-state-save-failure' export function TerminalSessionStateSaveFailureDialog({ open, diff --git a/src/renderer/src/components/terminal-pane/WorkerAutoCloseBanner.tsx b/src/renderer/src/components/terminal-pane/WorkerAutoCloseBanner.tsx index 9f3a81ee7fa..8bfc7bd9af0 100644 --- a/src/renderer/src/components/terminal-pane/WorkerAutoCloseBanner.tsx +++ b/src/renderer/src/components/terminal-pane/WorkerAutoCloseBanner.tsx @@ -7,7 +7,7 @@ import { workerAutoCloseStripText, workerKeepOpenLabel } from '@/lib/worker-auto-close' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { PaneTopWarningBanner } from './PaneTopWarningBanner' /** Across a temporary orchestration worker's pane: when it closes, and Keep open. */ diff --git a/src/renderer/src/components/terminal-pane/WslDistroStoppedHoldCard.tsx b/src/renderer/src/components/terminal-pane/WslDistroStoppedHoldCard.tsx index a091cc579c6..6085cb68c74 100644 --- a/src/renderer/src/components/terminal-pane/WslDistroStoppedHoldCard.tsx +++ b/src/renderer/src/components/terminal-pane/WslDistroStoppedHoldCard.tsx @@ -1,4 +1,4 @@ -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { WslDistroStoppedCard } from './WslDistroStoppedCard' import { startHeldPanesForWslDistro, diff --git a/src/renderer/src/components/terminal-pane/agent-completion-coordinator-hook-title-precedence.test.ts b/src/renderer/src/components/terminal-pane/agent-completion-coordinator-hook-title-precedence.test.ts index 82284f510cc..8c34194a166 100644 --- a/src/renderer/src/components/terminal-pane/agent-completion-coordinator-hook-title-precedence.test.ts +++ b/src/renderer/src/components/terminal-pane/agent-completion-coordinator-hook-title-precedence.test.ts @@ -7,7 +7,7 @@ import { processResult, useAgentCompletionCoordinatorLifecycle } from './agent-completion-coordinator-test-harness' -import type { RuntimeTerminalProcessInspection } from '@/runtime/runtime-terminal-inspection' +import type { TerminalProcessInspection as RuntimeTerminalProcessInspection } from '../../../../shared/terminal/pty/lifecycle/terminal-process-inspection' describe('agent completion coordinator', () => { useAgentCompletionCoordinatorLifecycle() diff --git a/src/renderer/src/components/terminal-pane/agent-completion-coordinator-monitoring-turn-end.test.ts b/src/renderer/src/components/terminal-pane/agent-completion-coordinator-monitoring-turn-end.test.ts index 1e6bf22a903..4a89644bea5 100644 --- a/src/renderer/src/components/terminal-pane/agent-completion-coordinator-monitoring-turn-end.test.ts +++ b/src/renderer/src/components/terminal-pane/agent-completion-coordinator-monitoring-turn-end.test.ts @@ -3,7 +3,7 @@ import { createAgentCompletionCoordinator } from './agent-completion-coordinator import { useAgentCompletionCoordinatorLifecycle } from './agent-completion-coordinator-test-harness' import { normalizeHookPayload } from '../../../../shared/agent-hook-listener/normalization/normalize-hook-payload' import { createHookListenerState } from '../../../../shared/agent-hook-listener/listener-state' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' // Feed real hook-listener output to the real coordinator to verify monitoring turn boundaries agree across layers. const PANE = makePaneKey('tab-1', '11111111-1111-4111-8111-111111111111') diff --git a/src/renderer/src/components/terminal-pane/agent-completion-coordinator-pending-title-inspection.test.ts b/src/renderer/src/components/terminal-pane/agent-completion-coordinator-pending-title-inspection.test.ts index 9339f5f7570..3be7d6a84eb 100644 --- a/src/renderer/src/components/terminal-pane/agent-completion-coordinator-pending-title-inspection.test.ts +++ b/src/renderer/src/components/terminal-pane/agent-completion-coordinator-pending-title-inspection.test.ts @@ -6,7 +6,7 @@ import { processResult, useAgentCompletionCoordinatorLifecycle } from './agent-completion-coordinator-test-harness' -import type { RuntimeTerminalProcessInspection } from '@/runtime/runtime-terminal-inspection' +import type { TerminalProcessInspection as RuntimeTerminalProcessInspection } from '../../../../shared/terminal/pty/lifecycle/terminal-process-inspection' function createRejectableDeferred(): { promise: Promise diff --git a/src/renderer/src/components/terminal-pane/agent-completion-coordinator-process-cadence.test.ts b/src/renderer/src/components/terminal-pane/agent-completion-coordinator-process-cadence.test.ts index 3238684735e..5d1560f56fb 100644 --- a/src/renderer/src/components/terminal-pane/agent-completion-coordinator-process-cadence.test.ts +++ b/src/renderer/src/components/terminal-pane/agent-completion-coordinator-process-cadence.test.ts @@ -6,7 +6,7 @@ import { processResult, useAgentCompletionCoordinatorLifecycle } from './agent-completion-coordinator-test-harness' -import type { RuntimeTerminalProcessInspection } from '@/runtime/runtime-terminal-inspection' +import type { TerminalProcessInspection as RuntimeTerminalProcessInspection } from '../../../../shared/terminal/pty/lifecycle/terminal-process-inspection' describe('agent completion coordinator', () => { useAgentCompletionCoordinatorLifecycle() diff --git a/src/renderer/src/components/terminal-pane/agent-completion-coordinator-queued-inspection-disposal.test.ts b/src/renderer/src/components/terminal-pane/agent-completion-coordinator-queued-inspection-disposal.test.ts index 2e9a2afe42e..cadc401fd95 100644 --- a/src/renderer/src/components/terminal-pane/agent-completion-coordinator-queued-inspection-disposal.test.ts +++ b/src/renderer/src/components/terminal-pane/agent-completion-coordinator-queued-inspection-disposal.test.ts @@ -6,7 +6,7 @@ import { processResult, useAgentCompletionCoordinatorLifecycle } from './agent-completion-coordinator-test-harness' -import type { RuntimeTerminalProcessInspection } from '@/runtime/runtime-terminal-inspection' +import type { TerminalProcessInspection as RuntimeTerminalProcessInspection } from '../../../../shared/terminal/pty/lifecycle/terminal-process-inspection' describe('agent completion coordinator queued inspections', () => { useAgentCompletionCoordinatorLifecycle() diff --git a/src/renderer/src/components/terminal-pane/agent-completion-coordinator-test-harness.ts b/src/renderer/src/components/terminal-pane/agent-completion-coordinator-test-harness.ts index a9affa8edbf..a6658442f61 100644 --- a/src/renderer/src/components/terminal-pane/agent-completion-coordinator-test-harness.ts +++ b/src/renderer/src/components/terminal-pane/agent-completion-coordinator-test-harness.ts @@ -1,7 +1,7 @@ import { afterEach, beforeEach, vi } from 'vitest' import { resetAgentCompletionCoordinatorIdentitiesForTest } from './agent-completion-coordinator' import { resetAgentProcessInspectionQueueForTests } from './agent-process-inspection-queue' -import type { RuntimeTerminalProcessInspection } from '@/runtime/runtime-terminal-inspection' +import type { TerminalProcessInspection as RuntimeTerminalProcessInspection } from '../../../../shared/terminal/pty/lifecycle/terminal-process-inspection' export const HOOK_DONE_QUIET_MS = 1_500 diff --git a/src/renderer/src/components/terminal-pane/agent-completion-coordinator-types.ts b/src/renderer/src/components/terminal-pane/agent-completion-coordinator-types.ts index 1439c11b499..566373878b5 100644 --- a/src/renderer/src/components/terminal-pane/agent-completion-coordinator-types.ts +++ b/src/renderer/src/components/terminal-pane/agent-completion-coordinator-types.ts @@ -3,7 +3,7 @@ import type { TurnEndDisposition } from '../../../../shared/agent-status/contracts/agent-status-types' import type { RecognizedAgentProcess } from '../../../../shared/agent-status/process/agent-process-recognition' -import type { RuntimeTerminalProcessInspection } from '@/runtime/runtime-terminal-inspection' +import type { TerminalProcessInspection as RuntimeTerminalProcessInspection } from '../../../../shared/terminal/pty/lifecycle/terminal-process-inspection' export type AgentCompletionStatusSnapshot = ParsedAgentStatusPayload & { stateStartedAt?: number diff --git a/src/renderer/src/components/terminal-pane/agent-completion-inspection-result.ts b/src/renderer/src/components/terminal-pane/agent-completion-inspection-result.ts index 7a1084855c5..503c19e60dd 100644 --- a/src/renderer/src/components/terminal-pane/agent-completion-inspection-result.ts +++ b/src/renderer/src/components/terminal-pane/agent-completion-inspection-result.ts @@ -1,10 +1,15 @@ -import type { RecognizedAgentProcess } from '../../../../shared/agent-status/process/agent-process-recognition' -import { recognizeAgentProcess } from '../../../../shared/agent-status/process/agent-process-recognition' +import { + type RecognizedAgentProcess, + recognizeAgentProcess +} from '../../../../shared/agent-status/process/agent-process-recognition' import { parseAppSshPtyId } from '../../../../shared/ssh-pty-id' import { admitRemoteForegroundEvidence } from '../../../../shared/remote-foreground-evidence-admission' -import { isClientOnlyUnverifiableInspection } from '../../../../shared/terminal-process-inspection' +import { + isClientOnlyUnverifiableInspection, + type TerminalProcessInspection as RuntimeTerminalProcessInspection +} from '../../../../shared/terminal/pty/lifecycle/terminal-process-inspection' import { getRemoteRuntimeTerminalHandle } from '@/runtime/runtime-terminal-stream' -import type { RuntimeTerminalProcessInspection } from '@/runtime/runtime-terminal-inspection' + import type { AgentCompletionCoordinatorOptions } from './agent-completion-coordinator-types' import type { AgentCompletionIdentityScope, diff --git a/src/renderer/src/components/terminal-pane/agent-completion-no-evidence-cadence.test.ts b/src/renderer/src/components/terminal-pane/agent-completion-no-evidence-cadence.test.ts index 45830386ba9..7885f8cd8bb 100644 --- a/src/renderer/src/components/terminal-pane/agent-completion-no-evidence-cadence.test.ts +++ b/src/renderer/src/components/terminal-pane/agent-completion-no-evidence-cadence.test.ts @@ -8,7 +8,7 @@ import { resetAgentProcessInspectionQueueForTests } from './agent-process-inspec import { isAgentProcessInspectionCostly } from './agent-process-inspection-cost' import { toRemoteRuntimePtyId } from '../../../../shared/remote-runtime/remote-runtime-pty-id' import { toAppSshPtyId } from '../../../../shared/ssh-pty-id' -import type { RuntimeTerminalProcessInspection } from '@/runtime/runtime-terminal-inspection' +import type { TerminalProcessInspection as RuntimeTerminalProcessInspection } from '../../../../shared/terminal/pty/lifecycle/terminal-process-inspection' import type { AgentCompletionCoordinatorOptions } from './agent-completion-coordinator-types' function processResult( diff --git a/src/renderer/src/components/terminal-pane/agent-completion-process-monitor.ts b/src/renderer/src/components/terminal-pane/agent-completion-process-monitor.ts index 3b6b7b8c18c..87dd6632a19 100644 --- a/src/renderer/src/components/terminal-pane/agent-completion-process-monitor.ts +++ b/src/renderer/src/components/terminal-pane/agent-completion-process-monitor.ts @@ -6,11 +6,11 @@ import { recognizeAgentProcess, type RecognizedAgentProcess } from '../../../../shared/agent-status/process/agent-process-recognition' -import { isShellProcess } from '../../../../shared/shell-process-detection' +import { isShellProcess } from '../../../../shared/agent-status/process/shell-process-detection' import { clientOnlyUnverifiableInspection, isClientOnlyUnverifiableInspection -} from '../../../../shared/terminal-process-inspection' +} from '../../../../shared/terminal/pty/lifecycle/terminal-process-inspection' import type { ProcessMonitorOptions } from './agent-completion-process-types' import { createAgentCompletionPollScheduler } from './agent-completion-poll-scheduler' import { diff --git a/src/renderer/src/components/terminal-pane/agent-completion-stale-evidence-backoff.test.ts b/src/renderer/src/components/terminal-pane/agent-completion-stale-evidence-backoff.test.ts index 9a3d84d1800..e364bb16385 100644 --- a/src/renderer/src/components/terminal-pane/agent-completion-stale-evidence-backoff.test.ts +++ b/src/renderer/src/components/terminal-pane/agent-completion-stale-evidence-backoff.test.ts @@ -1,10 +1,13 @@ // A capture exceeding its budget must publish prompt unverifiable evidence; truthful-but-stale live records trigger retries and degrade completion cadence. import { describe, expect, it, vi } from 'vitest' -import { handleAgentCompletionInspectionResult } from './agent-completion-inspection-result' -import type { RemoteInspectionState } from './agent-completion-inspection-result' +import { + handleAgentCompletionInspectionResult, + type RemoteInspectionState +} from './agent-completion-inspection-result' + import type { ProcessMonitorState } from './agent-completion-process-types' import type { AgentCompletionCoordinatorOptions } from './agent-completion-coordinator-types' -import type { RuntimeTerminalProcessInspection } from '@/runtime/runtime-terminal-inspection' +import type { TerminalProcessInspection as RuntimeTerminalProcessInspection } from '../../../../shared/terminal/pty/lifecycle/terminal-process-inspection' import { toAppSshPtyId } from '../../../../shared/ssh-pty-id' import { REMOTE_FOREGROUND_EVIDENCE_MAX_AGE_MS } from '../../../../shared/remote-foreground-evidence-admission' diff --git a/src/renderer/src/components/terminal-pane/agent-launch-pane-notice-text.ts b/src/renderer/src/components/terminal-pane/agent-launch-pane-notice-text.ts index 6999a3a4892..e5b2c075324 100644 --- a/src/renderer/src/components/terminal-pane/agent-launch-pane-notice-text.ts +++ b/src/renderer/src/components/terminal-pane/agent-launch-pane-notice-text.ts @@ -1,7 +1,7 @@ import { translate } from '@/i18n/i18n' import type { AgentLaunchPaneOutcome } from '../../../../shared/agent-launch/contracts/agent-launch-pane-verdict' import { stripClientEnvironmentFooter } from '../../../../shared/client-environment-info' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { tuiAgentDisplayName } from '../../../../shared/agent-launch/catalog/tui-agent-display-names' /** What the pane shows, if its tab keeps a final launch outcome for this leaf. */ diff --git a/src/renderer/src/components/terminal-pane/agent-pre-ready-typed-draft.test.ts b/src/renderer/src/components/terminal-pane/agent-pre-ready-typed-draft.test.ts index 29a8d2c3fd0..5f190a6c697 100644 --- a/src/renderer/src/components/terminal-pane/agent-pre-ready-typed-draft.test.ts +++ b/src/renderer/src/components/terminal-pane/agent-pre-ready-typed-draft.test.ts @@ -1,7 +1,7 @@ import type * as React from 'react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { connectPanePty } from './pty-connection' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { flushAsyncTicks } from './pty-connection-test-async' import { createManager, diff --git a/src/renderer/src/components/terminal-pane/claude-detached-pane-restart.test.ts b/src/renderer/src/components/terminal-pane/claude-detached-pane-restart.test.ts index 9b26afe97c3..4586d87d988 100644 --- a/src/renderer/src/components/terminal-pane/claude-detached-pane-restart.test.ts +++ b/src/renderer/src/components/terminal-pane/claude-detached-pane-restart.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { useAppStore } from '@/store' import { provideLayoutFrameTerminalPanes } from '@/runtime/layout-frame-terminal-panes' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' import { sweepUnclaimedCodexPaneRestarts } from './codex-detached-pane-restart' import { diff --git a/src/renderer/src/components/terminal-pane/claude-diff-panel-notice-banner.test.tsx b/src/renderer/src/components/terminal-pane/claude-diff-panel-notice-banner.test.tsx index ce8f3c6a3ac..86c9907523b 100644 --- a/src/renderer/src/components/terminal-pane/claude-diff-panel-notice-banner.test.tsx +++ b/src/renderer/src/components/terminal-pane/claude-diff-panel-notice-banner.test.tsx @@ -5,7 +5,7 @@ import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { useAppStore } from '@/store' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../../shared/constants' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { ClaudeDiffPanelNoticeBanner } from './ClaudeDiffPanelNoticeBanner' globalThis.IS_REACT_ACT_ENVIRONMENT = true diff --git a/src/renderer/src/components/terminal-pane/claude-old-terminal-banner.test.tsx b/src/renderer/src/components/terminal-pane/claude-old-terminal-banner.test.tsx index cf1c82573b5..bea0930ed97 100644 --- a/src/renderer/src/components/terminal-pane/claude-old-terminal-banner.test.tsx +++ b/src/renderer/src/components/terminal-pane/claude-old-terminal-banner.test.tsx @@ -8,7 +8,7 @@ import type { GlobalSettings } from '../../../../shared/global-settings-types' import { FLOATING_TERMINAL_WORKTREE_ID, getDefaultSettings } from '../../../../shared/constants' import type { ClaudeManagedAccount } from '../../../../shared/managed-account-types' import type { Worktree } from '../../../../shared/worktree/types' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { ClaudeOldTerminalBanner } from './ClaudeOldTerminalBanner' const routing = vi.hoisted(() => ({ activateAndRevealWorkspace: vi.fn(() => ({})) })) diff --git a/src/renderer/src/components/terminal-pane/claude-side-question-completion.test.ts b/src/renderer/src/components/terminal-pane/claude-side-question-completion.test.ts index 6ff82f91d28..e33fded00c5 100644 --- a/src/renderer/src/components/terminal-pane/claude-side-question-completion.test.ts +++ b/src/renderer/src/components/terminal-pane/claude-side-question-completion.test.ts @@ -1,6 +1,6 @@ import { bindPtyConnectionTestMocks } from './pty-connection-mocks.spec' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { flushAsyncTicks } from './pty-connection-test-async' import { LEAF_1, diff --git a/src/renderer/src/components/terminal-pane/closed-terminal-leaf-notice.test.ts b/src/renderer/src/components/terminal-pane/closed-terminal-leaf-notice.test.ts index d870de50c9b..19c4a55f976 100644 --- a/src/renderer/src/components/terminal-pane/closed-terminal-leaf-notice.test.ts +++ b/src/renderer/src/components/terminal-pane/closed-terminal-leaf-notice.test.ts @@ -1,5 +1,5 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' import { CLOSE_TERMINAL_PANE_EVENT } from '@/constants/terminal' const TAB_ID = 'tab-1' diff --git a/src/renderer/src/components/terminal-pane/codex-detached-pane-restart.ts b/src/renderer/src/components/terminal-pane/codex-detached-pane-restart.ts index 720aec6f113..955f6adadad 100644 --- a/src/renderer/src/components/terminal-pane/codex-detached-pane-restart.ts +++ b/src/renderer/src/components/terminal-pane/codex-detached-pane-restart.ts @@ -1,8 +1,9 @@ /** Execute accepted Codex/Claude account restarts for unmounted local panes so input cannot stay blocked until reveal. */ -import { isTerminalLeafId, makePaneKey } from '../../../../shared/stable-pane-id' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' -import type { AppState } from '@/store' -import { useAppStore } from '@/store' +import { isTerminalLeafId, makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' +import type { LocatedCodexPane } from './located-codex-pane' + +import { type AppState, useAppStore } from '@/store' import { singlePaneLayoutSnapshot } from '@/store/slices/terminal-helpers' import { hasRegisteredRuntimeTerminalTab } from '@/runtime/mounted-terminal-tab-registry' import { @@ -18,7 +19,7 @@ import { hasCachedWindowsTerminalCapabilities } from '@/lib/windows-terminal-capabilities' import { ptyDataHandlers } from './pty-dispatcher' -import { collectLeafIds } from '../../../../shared/terminal-pane-layout-tree' +import { collectLeafIds } from '../../../../shared/workspace-layout/terminal-pane-layout-tree' import { buildPaneIdentityEnv, getWorkspacePath } from './detached-pane-restart-spawn-context' import { restartPaneOwner } from './codex-restart-main-pane' import { @@ -115,13 +116,6 @@ async function restartUnclaimedPane(ptyId: string, onSettled?: () => void): Prom } } -type LocatedCodexPane = { - worktreeId: string - tab: TerminalTab - leafId: string | null - generation: number -} - function locateCodexPane(state: AppState, ptyId: string): LocatedCodexPane | null { for (const [worktreeId, tabs] of Object.entries(state.tabsByWorktree)) { for (const tab of tabs) { diff --git a/src/renderer/src/components/terminal-pane/codex-shared-server-banner.test.tsx b/src/renderer/src/components/terminal-pane/codex-shared-server-banner.test.tsx index 1855062a1df..4b68be17535 100644 --- a/src/renderer/src/components/terminal-pane/codex-shared-server-banner.test.tsx +++ b/src/renderer/src/components/terminal-pane/codex-shared-server-banner.test.tsx @@ -13,7 +13,7 @@ import { CODEX_STOP_SHARED_SERVER_COMMAND, type CodexSharedServerStatus } from '../../../../shared/codex-shared-server-command' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import type { Tab } from '../../../../shared/tab-types' const routing = vi.hoisted(() => ({ diff --git a/src/renderer/src/components/terminal-pane/command-code-output-ownership.ts b/src/renderer/src/components/terminal-pane/command-code-output-ownership.ts index bc2add1d347..7038784066b 100644 --- a/src/renderer/src/components/terminal-pane/command-code-output-ownership.ts +++ b/src/renderer/src/components/terminal-pane/command-code-output-ownership.ts @@ -1,5 +1,5 @@ import type { AgentType } from '../../../../shared/agent-status/contracts/agent-status-types' -import type { TerminalAgent } from '../../../../shared/terminal-agent' +import type { TerminalAgent } from '../../../../shared/agent-status/identity/terminal-agent' export function canCommandCodeOutputOwnPane(args: { foregroundAgent?: TerminalAgent | null diff --git a/src/renderer/src/components/terminal-pane/deferred-split-pane-handoff.test.ts b/src/renderer/src/components/terminal-pane/deferred-split-pane-handoff.test.ts index 80091ce7363..bee7c467918 100644 --- a/src/renderer/src/components/terminal-pane/deferred-split-pane-handoff.test.ts +++ b/src/renderer/src/components/terminal-pane/deferred-split-pane-handoff.test.ts @@ -1,5 +1,5 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { PTY_PRECONNECT_INPUT_MAX_CODE_UNITS, PTY_PRECONNECT_INPUT_MAX_ENTRIES diff --git a/src/renderer/src/components/terminal-pane/deferred-split-pane-handoff.ts b/src/renderer/src/components/terminal-pane/deferred-split-pane-handoff.ts index 060ebf2c36f..5d4c3ba4aa2 100644 --- a/src/renderer/src/components/terminal-pane/deferred-split-pane-handoff.ts +++ b/src/renderer/src/components/terminal-pane/deferred-split-pane-handoff.ts @@ -3,13 +3,14 @@ import { type TerminalLaunchInputAttemptOwner } from './terminal-launch-input-attempt' import type { PtyConnectionDeps } from './pty-connection-types' -import type { PaneKey } from '../../../../shared/stable-pane-id' -import { parsePaneKey } from '../../../../shared/stable-pane-id' + +import { type PaneKey, parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { PTY_PRECONNECT_INPUT_MAX_CODE_UNITS, - PTY_PRECONNECT_INPUT_MAX_ENTRIES + PTY_PRECONNECT_INPUT_MAX_ENTRIES, + type PtyPreconnectInputEntry, + type PtyPreconnectInputKind } from './pty-preconnect-input-buffer' -import type { PtyPreconnectInputEntry, PtyPreconnectInputKind } from './pty-preconnect-input-buffer' export type DeferredSplitPaneInputKind = PtyPreconnectInputKind export type DeferredSplitPaneInput = PtyPreconnectInputEntry diff --git a/src/renderer/src/components/terminal-pane/detached-pane-restart-spawn-context.ts b/src/renderer/src/components/terminal-pane/detached-pane-restart-spawn-context.ts index 228a6be5f87..be3f7db6b95 100644 --- a/src/renderer/src/components/terminal-pane/detached-pane-restart-spawn-context.ts +++ b/src/renderer/src/components/terminal-pane/detached-pane-restart-spawn-context.ts @@ -1,6 +1,6 @@ import type { AppState } from '@/store' import { getWorktreeMapFromState } from '@/store/selectors' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { parseWorkspaceKey } from '../../../../shared/workspace-scope' import { selectFolderWorkspaces } from '@/store/workspace-record-selectors' diff --git a/src/renderer/src/components/terminal-pane/focus-terminal-pane-event.test.ts b/src/renderer/src/components/terminal-pane/focus-terminal-pane-event.test.ts index 43a295a1045..be874a9d4db 100644 --- a/src/renderer/src/components/terminal-pane/focus-terminal-pane-event.test.ts +++ b/src/renderer/src/components/terminal-pane/focus-terminal-pane-event.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from 'vitest' -import type { TerminalLeafId } from '../../../../shared/stable-pane-id' +import type { TerminalLeafId } from '../../../../shared/workspace-layout/stable-pane-id' import { handleFocusTerminalPaneDetail } from './focus-terminal-pane-event' const LEAF_ID = '11111111-1111-4111-8111-111111111111' as TerminalLeafId diff --git a/src/renderer/src/components/terminal-pane/host-scrollback-mount.test.ts b/src/renderer/src/components/terminal-pane/host-scrollback-mount.test.ts index 8a7bedddac3..9039decb398 100644 --- a/src/renderer/src/components/terminal-pane/host-scrollback-mount.test.ts +++ b/src/renderer/src/components/terminal-pane/host-scrollback-mount.test.ts @@ -1,7 +1,7 @@ // @vitest-environment happy-dom import { cleanup, renderHook, waitFor } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' import type { OrcadDeploymentLink } from '../../../../shared/remote-runtime/host-catalog/runtime-environments' import { resetHostTerminalScrollbackHydrationForTests } from '@/runtime/host-terminal-scrollback-hydration' import { useHostTerminalScrollbackHold } from './use-host-terminal-scrollback-hold' diff --git a/src/renderer/src/components/terminal-pane/issue-12112-agent-pane-startup-color-reply-leak.repro.test.ts b/src/renderer/src/components/terminal-pane/issue-12112-agent-pane-startup-color-reply-leak.repro.test.ts index 3a49dc75dc6..8c4b011a027 100644 --- a/src/renderer/src/components/terminal-pane/issue-12112-agent-pane-startup-color-reply-leak.repro.test.ts +++ b/src/renderer/src/components/terminal-pane/issue-12112-agent-pane-startup-color-reply-leak.repro.test.ts @@ -1,6 +1,6 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import { Terminal } from '@xterm/headless' -import { PtyStartupIngress } from '../../../../shared/pty-startup-ingress' +import { PtyStartupIngress } from '../../../../shared/terminal/pty/ingress/pty-startup-ingress' import { isTuiAgent } from '../../../../shared/agent-launch/catalog/tui-agent-config' import { installTerminalCapabilityReplyHandlers } from './terminal-capability-replies' import { createIpcPtyTransport } from './pty-transport' diff --git a/src/renderer/src/components/terminal-pane/layout-serialization.test.ts b/src/renderer/src/components/terminal-pane/layout-serialization.test.ts index 0473b65cbb0..4ae653035d8 100644 --- a/src/renderer/src/components/terminal-pane/layout-serialization.test.ts +++ b/src/renderer/src/components/terminal-pane/layout-serialization.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, beforeAll, vi } from 'vitest' import { Terminal } from '@xterm/headless' -import type { TerminalPaneLayoutNode } from '../../../../shared/terminal-tab-types' +import type { TerminalPaneLayoutNode } from '../../../../shared/workspace-layout/terminal-tab-types' class MockHTMLElement { classList: { contains: (cls: string) => boolean } diff --git a/src/renderer/src/components/terminal-pane/layout-serialization.ts b/src/renderer/src/components/terminal-pane/layout-serialization.ts index 55267c53976..d34225e16fd 100644 --- a/src/renderer/src/components/terminal-pane/layout-serialization.ts +++ b/src/renderer/src/components/terminal-pane/layout-serialization.ts @@ -2,9 +2,9 @@ import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode, TerminalPaneSplitDirection -} from '../../../../shared/terminal-tab-types' +} from '../../../../shared/workspace-layout/terminal-tab-types' import { markTerminalShowsReplayedHistory } from './replayed-history-terminals' -import { isTerminalLeafId } from '../../../../shared/stable-pane-id' +import { isTerminalLeafId } from '../../../../shared/workspace-layout/stable-pane-id' import { POST_REPLAY_MODE_RESET, RESET_GRAPHIC_RENDITION diff --git a/src/renderer/src/components/terminal-pane/leaf-scrollback-resolution.test.ts b/src/renderer/src/components/terminal-pane/leaf-scrollback-resolution.test.ts index eba81e4850c..b787c8c3bbc 100644 --- a/src/renderer/src/components/terminal-pane/leaf-scrollback-resolution.test.ts +++ b/src/renderer/src/components/terminal-pane/leaf-scrollback-resolution.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import { TERMINAL_SCROLLBACK_SESSION_HOMES } from '../../../../shared/workspace-session-terminal-buffers' +import { TERMINAL_SCROLLBACK_SESSION_HOMES } from '../../../../shared/workspace-session/workspace-session-terminal-buffers' import { resolveLeafScrollbackBuffers, resolveTabScrollbackBuffers, diff --git a/src/renderer/src/components/terminal-pane/leaf-scrollback-resolution.ts b/src/renderer/src/components/terminal-pane/leaf-scrollback-resolution.ts index c186a52919b..840e4d18c5a 100644 --- a/src/renderer/src/components/terminal-pane/leaf-scrollback-resolution.ts +++ b/src/renderer/src/components/terminal-pane/leaf-scrollback-resolution.ts @@ -1,6 +1,6 @@ -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' -import type { TERMINAL_SCROLLBACK_SESSION_HOMES } from '../../../../shared/workspace-session-terminal-buffers' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' +import type { TERMINAL_SCROLLBACK_SESSION_HOMES } from '../../../../shared/workspace-session/workspace-session-terminal-buffers' /** Track every persisted scrollback home; adding one must also extend this resolver. */ export type TerminalScrollbackSessionHomes = Pick< diff --git a/src/renderer/src/components/terminal-pane/legacy-relay-bridge-panes.ts b/src/renderer/src/components/terminal-pane/legacy-relay-bridge-panes.ts index 990c3a96c14..6aba1611e9a 100644 --- a/src/renderer/src/components/terminal-pane/legacy-relay-bridge-panes.ts +++ b/src/renderer/src/components/terminal-pane/legacy-relay-bridge-panes.ts @@ -7,7 +7,7 @@ import { parseAppSshPtyId } from '../../../../shared/ssh-pty-id' import { HOST_TERMINAL_SURFACE_SEPARATOR, toHostSessionTabId -} from '../../../../shared/terminal-surface-id' +} from '../../../../shared/workspace-layout/terminal-surface-id' let panes: LegacyRelayBridgedPane[] = [] const listeners = new Set<() => void>() diff --git a/src/renderer/src/components/terminal-pane/located-codex-pane.ts b/src/renderer/src/components/terminal-pane/located-codex-pane.ts new file mode 100644 index 00000000000..5b820aa6d51 --- /dev/null +++ b/src/renderer/src/components/terminal-pane/located-codex-pane.ts @@ -0,0 +1,8 @@ +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' + +export type LocatedCodexPane = { + worktreeId: string + tab: TerminalTab + leafId: string | null + generation: number +} diff --git a/src/renderer/src/components/terminal-pane/newer-daemon-hold-banner.test.tsx b/src/renderer/src/components/terminal-pane/newer-daemon-hold-banner.test.tsx index 5dc753b9d8f..83ffcd359ef 100644 --- a/src/renderer/src/components/terminal-pane/newer-daemon-hold-banner.test.tsx +++ b/src/renderer/src/components/terminal-pane/newer-daemon-hold-banner.test.tsx @@ -3,7 +3,7 @@ import { act } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import type { NewerDaemonReopenResult } from '../../../../shared/newer-daemon-hold' import { NewerDaemonHoldBanner } from './NewerDaemonHoldBanner' import { diff --git a/src/renderer/src/components/terminal-pane/notification-dispatch-test-harness.ts b/src/renderer/src/components/terminal-pane/notification-dispatch-test-harness.ts index e38fc84b497..ff4564a5f7b 100644 --- a/src/renderer/src/components/terminal-pane/notification-dispatch-test-harness.ts +++ b/src/renderer/src/components/terminal-pane/notification-dispatch-test-harness.ts @@ -1,10 +1,10 @@ -import { vi } from 'vitest' -import type { Mock } from 'vitest' +import { vi, type Mock } from 'vitest' + import type { AgentStatusEntry, AgentStatusOrchestrationContext } from '../../../../shared/agent-status/contracts/agent-status-types' -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' import type { Tab, TabGroup } from '../../../../shared/tab-types' // Hoisted mock factories reach this state through lazy imports because they cannot capture imports. diff --git a/src/renderer/src/components/terminal-pane/pane-account-restart-readiness.ts b/src/renderer/src/components/terminal-pane/pane-account-restart-readiness.ts index 00c7ccce375..b7f4b3d6cb6 100644 --- a/src/renderer/src/components/terminal-pane/pane-account-restart-readiness.ts +++ b/src/renderer/src/components/terminal-pane/pane-account-restart-readiness.ts @@ -1,6 +1,6 @@ import type { AppState } from '@/store' import { isClaudePaneMidTurn } from '@/lib/claude-session-account-move' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' /** PTYs whose queued account restart can run now: Codex at once, this tab's Claude once its turn ends. */ export function selectReadyAccountRestartPtyIds(state: AppState, tabId: string): string[] { diff --git a/src/renderer/src/components/terminal-pane/pane-foreground-agent-tracker-contract.ts b/src/renderer/src/components/terminal-pane/pane-foreground-agent-tracker-contract.ts index bf92fc55ab6..054ad640c04 100644 --- a/src/renderer/src/components/terminal-pane/pane-foreground-agent-tracker-contract.ts +++ b/src/renderer/src/components/terminal-pane/pane-foreground-agent-tracker-contract.ts @@ -1,6 +1,6 @@ import type { RecognizedAgentProcess } from '../../../../shared/agent-status/process/agent-process-recognition' import type { PaneForegroundAgentEntry } from '@/store/slices/pane-foreground-agent' -import type { RuntimeTerminalProcessInspection } from '@/runtime/runtime-terminal-inspection' +import type { TerminalProcessInspection as RuntimeTerminalProcessInspection } from '../../../../shared/terminal/pty/lifecycle/terminal-process-inspection' export type ForegroundReadReason = 'command' | 'visible-pty' | 'command-finished' diff --git a/src/renderer/src/components/terminal-pane/pane-foreground-agent-tracker.ts b/src/renderer/src/components/terminal-pane/pane-foreground-agent-tracker.ts index f6c07ac9595..efca1b725f1 100644 --- a/src/renderer/src/components/terminal-pane/pane-foreground-agent-tracker.ts +++ b/src/renderer/src/components/terminal-pane/pane-foreground-agent-tracker.ts @@ -4,8 +4,8 @@ import { type RecognizedAgentProcess } from '../../../../shared/agent-status/process/agent-process-recognition' import { resolveCompatibleAgentTypeForOwner } from '../../../../shared/agent-status/title/agent-title-owner' -import { isShellProcess } from '../../../../shared/shell-process-detection' -import type { TerminalAgent } from '../../../../shared/terminal-agent' +import { isShellProcess } from '../../../../shared/agent-status/process/shell-process-detection' +import type { TerminalAgent } from '../../../../shared/agent-status/identity/terminal-agent' import { createPaneForegroundProcessReader } from './pane-foreground-process-reader' import { FOREGROUND_COMMAND_READS } from '../../../../shared/foreground-command-settle' import type { diff --git a/src/renderer/src/components/terminal-pane/pane-foreground-process-reader.ts b/src/renderer/src/components/terminal-pane/pane-foreground-process-reader.ts index 51627feb119..e697acb035c 100644 --- a/src/renderer/src/components/terminal-pane/pane-foreground-process-reader.ts +++ b/src/renderer/src/components/terminal-pane/pane-foreground-process-reader.ts @@ -1,8 +1,10 @@ -import type { RuntimeTerminalProcessInspection } from '@/runtime/runtime-terminal-inspection' import { getRemoteRuntimeTerminalHandle } from '@/runtime/runtime-terminal-stream' import { parseAppSshPtyId } from '../../../../shared/ssh-pty-id' import { admitRemoteForegroundEvidence } from '../../../../shared/remote-foreground-evidence-admission' -import { isClientOnlyUnverifiableInspection } from '../../../../shared/terminal-process-inspection' +import { + type TerminalProcessInspection as RuntimeTerminalProcessInspection, + isClientOnlyUnverifiableInspection +} from '../../../../shared/terminal/pty/lifecycle/terminal-process-inspection' type ForegroundReader = ( ptyId: string, diff --git a/src/renderer/src/components/terminal-pane/pane-helpers.test.ts b/src/renderer/src/components/terminal-pane/pane-helpers.test.ts index 247ff5df14d..7ce94ded69c 100644 --- a/src/renderer/src/components/terminal-pane/pane-helpers.test.ts +++ b/src/renderer/src/components/terminal-pane/pane-helpers.test.ts @@ -1,6 +1,7 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import type { PaneManager } from '@/lib/pane-manager/pane-manager' -import { fitAndFocusPanes, isWindowsUserAgent, shellEscapePath } from './pane-helpers' +import { fitAndFocusPanes, isWindowsUserAgent } from './pane-helpers' +import { shellEscapePath } from '../../../../shared/shell/launch/shell-path-quoting' describe('isWindowsUserAgent', () => { it('detects Windows user agents', () => { diff --git a/src/renderer/src/components/terminal-pane/pane-helpers.ts b/src/renderer/src/components/terminal-pane/pane-helpers.ts index 06ead75eba3..888bfe098c8 100644 --- a/src/renderer/src/components/terminal-pane/pane-helpers.ts +++ b/src/renderer/src/components/terminal-pane/pane-helpers.ts @@ -64,4 +64,4 @@ export function shouldPreserveEditableFocus(element: Element | null): boolean { ) } -export { shellEscapePath } from '../../../../shared/shell-path-quoting' +import '../../../../shared/shell/launch/shell-path-quoting' diff --git a/src/renderer/src/components/terminal-pane/pane-title-update-global-scan-budget.test.tsx b/src/renderer/src/components/terminal-pane/pane-title-update-global-scan-budget.test.tsx index d849e2185f4..d8f0277cea7 100644 --- a/src/renderer/src/components/terminal-pane/pane-title-update-global-scan-budget.test.tsx +++ b/src/renderer/src/components/terminal-pane/pane-title-update-global-scan-budget.test.tsx @@ -17,7 +17,7 @@ import { TooltipProvider } from '@/components/ui/tooltip' import { readStoreListenerCount } from '@/store/store-listener-census' import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' import type { SleepingAgentSessionRecord } from '../../../../shared/agent-session/lifecycle/agent-session-resume' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { Tab } from '../../../../shared/tab-types' import { structuredAgentSessionPaneKey } from '../../../../shared/agent-session/view/structured-agent-session-projection' import { useTerminalTabColdParking } from './use-terminal-tab-cold-parking' diff --git a/src/renderer/src/components/terminal-pane/parked-terminal-buffer-capture.test.ts b/src/renderer/src/components/terminal-pane/parked-terminal-buffer-capture.test.ts index 4190510e888..aca96705e3c 100644 --- a/src/renderer/src/components/terminal-pane/parked-terminal-buffer-capture.test.ts +++ b/src/renderer/src/components/terminal-pane/parked-terminal-buffer-capture.test.ts @@ -1,5 +1,5 @@ import { afterEach, describe, expect, it, vi } from 'vitest' -import type { RepoConnection } from '../../../../shared/workspace-session-terminal-buffers' +import type { RepoConnection } from '../../../../shared/workspace-session/workspace-session-terminal-buffers' import { captureParkedTerminalBuffers } from './parked-terminal-buffer-capture' import { shutdownBufferCaptures } from './shutdown-buffer-captures' diff --git a/src/renderer/src/components/terminal-pane/parked-terminal-buffer-capture.ts b/src/renderer/src/components/terminal-pane/parked-terminal-buffer-capture.ts index 12cf1058376..6a456fc0758 100644 --- a/src/renderer/src/components/terminal-pane/parked-terminal-buffer-capture.ts +++ b/src/renderer/src/components/terminal-pane/parked-terminal-buffer-capture.ts @@ -1,7 +1,7 @@ import { shouldPreserveTerminalScrollbackBuffers, type RepoConnection -} from '../../../../shared/workspace-session-terminal-buffers' +} from '../../../../shared/workspace-session/workspace-session-terminal-buffers' import { captureTerminalShutdownBuffersBestEffort } from './shutdown-buffer-captures' type ParkedTerminalCaptureArgs = { diff --git a/src/renderer/src/components/terminal-pane/parked-terminal-byte-watcher.ts b/src/renderer/src/components/terminal-pane/parked-terminal-byte-watcher.ts index a4bda635359..7c4c95f998b 100644 --- a/src/renderer/src/components/terminal-pane/parked-terminal-byte-watcher.ts +++ b/src/renderer/src/components/terminal-pane/parked-terminal-byte-watcher.ts @@ -3,7 +3,7 @@ import { isClaudeIdleEdge } from '@/lib/agent-idle-edge' import type { AgentIdleEdgeMeta } from '../../../../shared/terminal/output/terminal-output-side-effects' import { resolveTerminalNotificationOwner } from '@/attention/notification-subject-owner' import type { NotificationWorkspaceOwner } from '../../../../shared/notification-source' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { useAppStore } from '@/store' import { createTerminalGitHubPRLinkDetector } from '../../../../shared/terminal/links/terminal-github-pr-link-detector' import { diff --git a/src/renderer/src/components/terminal-pane/parked-terminal-command-status.ts b/src/renderer/src/components/terminal-pane/parked-terminal-command-status.ts index 56c5bf4121d..c3c6ab12de3 100644 --- a/src/renderer/src/components/terminal-pane/parked-terminal-command-status.ts +++ b/src/renderer/src/components/terminal-pane/parked-terminal-command-status.ts @@ -2,7 +2,7 @@ import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' import { resolvePaneAgentOwner } from '../../../../shared/agent-status/identity/pane-agent-owner' import { parseAppSshPtyId } from '../../../../shared/ssh-pty-id' -import { isShellProcess } from '../../../../shared/shell-process-detection' +import { isShellProcess } from '../../../../shared/agent-status/process/shell-process-detection' import { dispatchTerminalCommandFinishedEvent } from '@/hooks/terminal-command-finished-event' import { resolveLiveAgentStatusConnectionRouting } from '@/lib/agent-status-connection-ownership' import { getConnectionIdFromState } from '@/lib/connection-owner-resolution' diff --git a/src/renderer/src/components/terminal-pane/parked-terminal-tab-capture-episodes.test.ts b/src/renderer/src/components/terminal-pane/parked-terminal-tab-capture-episodes.test.ts index 6e87ab14996..e1b5c9bfda9 100644 --- a/src/renderer/src/components/terminal-pane/parked-terminal-tab-capture-episodes.test.ts +++ b/src/renderer/src/components/terminal-pane/parked-terminal-tab-capture-episodes.test.ts @@ -1,5 +1,5 @@ import { afterEach, describe, expect, it, vi } from 'vitest' -import type { RepoConnection } from '../../../../shared/workspace-session-terminal-buffers' +import type { RepoConnection } from '../../../../shared/workspace-session/workspace-session-terminal-buffers' import { captureNewlyParkedTerminalTabs } from './parked-terminal-tab-capture-episodes' import { shutdownBufferCaptures } from './shutdown-buffer-captures' diff --git a/src/renderer/src/components/terminal-pane/pending-pane-close-confirmation.test.ts b/src/renderer/src/components/terminal-pane/pending-pane-close-confirmation.test.ts index 73656e7c853..0f459669abe 100644 --- a/src/renderer/src/components/terminal-pane/pending-pane-close-confirmation.test.ts +++ b/src/renderer/src/components/terminal-pane/pending-pane-close-confirmation.test.ts @@ -2,7 +2,7 @@ import { afterEach, beforeEach, expect, it, vi } from 'vitest' import { preparePendingSplitClose } from './pending-split-close-test-fixture' import { preparePendingRuntimeClose } from './pending-runtime-pane-close-test-fixture' import { flushPtySideEffects } from './pty-transport-test-harness' -import type { PtyRunningWorkProbe } from '../terminal/pty-running-work-probe' +import type { PtyRunningWorkProbe } from '../../../../shared/terminal/pty/lifecycle/pty-running-work-probe' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../../shared/layout-owner-switch' beforeEach(() => vi.clearAllMocks()) diff --git a/src/renderer/src/components/terminal-pane/pending-split-close-test-fixture.ts b/src/renderer/src/components/terminal-pane/pending-split-close-test-fixture.ts index 6d0a4e417d8..0f388e94f73 100644 --- a/src/renderer/src/components/terminal-pane/pending-split-close-test-fixture.ts +++ b/src/renderer/src/components/terminal-pane/pending-split-close-test-fixture.ts @@ -1,7 +1,7 @@ import { afterEach, beforeEach, vi } from 'vitest' import type { AppState } from '@/store/types' import type { TerminalTabRetirementState } from '@/store/slices/terminal-tab-retirement' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { PaneManager } from '@/lib/pane-manager/pane-manager' import type { PtyConnectResult, PtyTransport } from './pty-transport-types' import type { TerminalPaneBindingController } from './use-terminal-pane-layout-bindings' diff --git a/src/renderer/src/components/terminal-pane/pty-agent-pane-launch.test.ts b/src/renderer/src/components/terminal-pane/pty-agent-pane-launch.test.ts index 7a6f0d28489..4389e9abb95 100644 --- a/src/renderer/src/components/terminal-pane/pty-agent-pane-launch.test.ts +++ b/src/renderer/src/components/terminal-pane/pty-agent-pane-launch.test.ts @@ -11,7 +11,7 @@ import { resetAgentLaunchPanesForTests } from '../../../../main/agent-launch/agent-launch-pane-attachment' import { AGENT_LAUNCH_PANE_REFUSED_CODE } from '../../../../shared/agent-launch/contracts/agent-launch-pane-verdict' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { makePaneSpawnReservationKey, paneSpawnReservationsByOwnerKey diff --git a/src/renderer/src/components/terminal-pane/pty-connection-agent-session-resume.spec.ts b/src/renderer/src/components/terminal-pane/pty-connection-agent-session-resume.spec.ts index fb5947903b9..f3b258fd0a4 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-agent-session-resume.spec.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-agent-session-resume.spec.ts @@ -1,6 +1,6 @@ import { bindPtyConnectionTestMocks } from './pty-connection-mocks.spec' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../../shared/layout-owner-switch' import { bindsPaneInStore, @@ -16,7 +16,8 @@ import { LEAF_2, createMockTransport, createPane, - createManager + createManager, + type MockTransport } from './pty-connection-test-pane-fixtures' import { buildPaneConnectionDeps, @@ -27,7 +28,7 @@ import { createInitialStoreState } from './pty-connection-test-store-fixtures' import type { StoreState } from './pty-connection-test-store-state' import type { AgentStatusSlice } from '@/store/slices/agent-status/agent-status-slice-contract' import { normalizeLaunchConfigRegistrationMetadata } from '@/store/slices/agent-status/agent-status-launch-config' -import type { MockTransport } from './pty-connection-test-pane-fixtures' + import { installTerminalTestGlobals, restoreTerminalTestGlobals diff --git a/src/renderer/src/components/terminal-pane/pty-connection-cold-restore-agent-resume.spec.ts b/src/renderer/src/components/terminal-pane/pty-connection-cold-restore-agent-resume.spec.ts index c16cd06e671..53c892fc5b8 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-cold-restore-agent-resume.spec.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-cold-restore-agent-resume.spec.ts @@ -1,7 +1,7 @@ import { mockPanePtyArgs } from './pty-connection-test-connect-mock-pane' import { bindPtyConnectionTestMocks } from './pty-connection-mocks.spec' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../../shared/layout-owner-switch' import { expectNoWindowStart, diff --git a/src/renderer/src/components/terminal-pane/pty-connection-cold-restore-resume-command.spec.ts b/src/renderer/src/components/terminal-pane/pty-connection-cold-restore-resume-command.spec.ts index 08f489576c4..758ce58d740 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-cold-restore-resume-command.spec.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-cold-restore-resume-command.spec.ts @@ -1,6 +1,6 @@ import { bindPtyConnectionTestMocks } from './pty-connection-mocks.spec' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../../shared/layout-owner-switch' import { expectNoWindowStart, diff --git a/src/renderer/src/components/terminal-pane/pty-connection-command-finished-cleanup.spec.ts b/src/renderer/src/components/terminal-pane/pty-connection-command-finished-cleanup.spec.ts index aac382629f6..c74d1cbf555 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-command-finished-cleanup.spec.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-command-finished-cleanup.spec.ts @@ -3,7 +3,7 @@ import { bindPtyConnectionTestMocks } from './pty-connection-mocks.spec' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { POST_REPLAY_REATTACH_RESET } from '../../../../shared/terminal/protocol/input-modes/terminal-mode-reset-profiles' import { TerminalKittyKeyboardModeTracker } from '../../../../shared/terminal/protocol/input-modes/terminal-kitty-keyboard-mode-tracker' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { flushAsyncTicks, createDeferred } from './pty-connection-test-async' import { createKeyboardEventTarget, keyEvent } from './pty-connection-test-dom' import { diff --git a/src/renderer/src/components/terminal-pane/pty-connection-command-finished-late-done.test.ts b/src/renderer/src/components/terminal-pane/pty-connection-command-finished-late-done.test.ts index f92a1ec49c4..0706f125bd7 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-command-finished-late-done.test.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-command-finished-late-done.test.ts @@ -1,6 +1,6 @@ import type * as React from 'react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' import { flushAsyncTicks } from './pty-connection-test-async' import { diff --git a/src/renderer/src/components/terminal-pane/pty-connection-command-input-agent-identity.spec.ts b/src/renderer/src/components/terminal-pane/pty-connection-command-input-agent-identity.spec.ts index a5a549df8a7..1067b26f9a1 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-command-input-agent-identity.spec.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-command-input-agent-identity.spec.ts @@ -1,5 +1,5 @@ import { expect, it, vi } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { flushAsyncTicks } from './pty-connection-test-async' import { sendTerminalInputThroughPane } from './pty-connection-test-dom' import { diff --git a/src/renderer/src/components/terminal-pane/pty-connection-deferred-reattach-live-output.spec.ts b/src/renderer/src/components/terminal-pane/pty-connection-deferred-reattach-live-output.spec.ts index bfdf5b30b7b..ad4fa23de4c 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-deferred-reattach-live-output.spec.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-deferred-reattach-live-output.spec.ts @@ -1,6 +1,6 @@ import { bindPtyConnectionTestMocks } from './pty-connection-mocks.spec' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { RESET_GRAPHIC_RENDITION } from '../../../../shared/terminal/protocol/input-modes/terminal-mode-reset-profiles' import { flushAsyncTicks } from './pty-connection-test-async' import { diff --git a/src/renderer/src/components/terminal-pane/pty-connection-foreground-agent-routing.spec.ts b/src/renderer/src/components/terminal-pane/pty-connection-foreground-agent-routing.spec.ts index 59aec17891a..4b2ac5809c2 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-foreground-agent-routing.spec.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-foreground-agent-routing.spec.ts @@ -1,6 +1,6 @@ import { bindPtyConnectionTestMocks } from './pty-connection-mocks.spec' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { flushAsyncTicks } from './pty-connection-test-async' import { VISIBLE_PTY_SETTLE_MS, diff --git a/src/renderer/src/components/terminal-pane/pty-connection-foreground-agent-sampling.spec.ts b/src/renderer/src/components/terminal-pane/pty-connection-foreground-agent-sampling.spec.ts index c32b3eb09b5..ef3e0038a1d 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-foreground-agent-sampling.spec.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-foreground-agent-sampling.spec.ts @@ -1,6 +1,6 @@ import { bindPtyConnectionTestMocks } from './pty-connection-mocks.spec' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import type { TuiAgent } from '../../../../shared/agent-launch/catalog/tui-agent' import { flushAsyncTicks } from './pty-connection-test-async' import { diff --git a/src/renderer/src/components/terminal-pane/pty-connection-foreground-process-exit.spec.ts b/src/renderer/src/components/terminal-pane/pty-connection-foreground-process-exit.spec.ts index 6bdfe989304..80439a8c5dc 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-foreground-process-exit.spec.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-foreground-process-exit.spec.ts @@ -1,6 +1,6 @@ import { bindPtyConnectionTestMocks } from './pty-connection-mocks.spec' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { flushAsyncTicks } from './pty-connection-test-async' import { LEAF_1, diff --git a/src/renderer/src/components/terminal-pane/pty-connection-foreground-routing-confirmation.spec.ts b/src/renderer/src/components/terminal-pane/pty-connection-foreground-routing-confirmation.spec.ts index a5cfec4a442..f167a234b00 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-foreground-routing-confirmation.spec.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-foreground-routing-confirmation.spec.ts @@ -1,6 +1,6 @@ import { bindPtyConnectionTestMocks } from './pty-connection-mocks.spec' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import type { TuiAgent } from '../../../../shared/agent-launch/catalog/tui-agent' import { flushAsyncTicks } from './pty-connection-test-async' import { diff --git a/src/renderer/src/components/terminal-pane/pty-connection-git-bash-console-capacity.test.ts b/src/renderer/src/components/terminal-pane/pty-connection-git-bash-console-capacity.test.ts index 54e7e6796fc..754c97b0dc7 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-git-bash-console-capacity.test.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-git-bash-console-capacity.test.ts @@ -29,7 +29,7 @@ import { type PtyStreamPayload, type PtyExitPayload } from './pty-transport-test-harness' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import type { ConnectPanePtySession } from './pty-connection/connect-pane-pty-session' import type { PtyPreconnectInputEntry } from './pty-preconnect-input-buffer' import type { PtyTransport } from './pty-transport-types' diff --git a/src/renderer/src/components/terminal-pane/pty-connection-hibernation-kill-shell-foreground.test.ts b/src/renderer/src/components/terminal-pane/pty-connection-hibernation-kill-shell-foreground.test.ts index d95f806816a..1ed9d5a59b6 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-hibernation-kill-shell-foreground.test.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-hibernation-kill-shell-foreground.test.ts @@ -1,6 +1,6 @@ import type * as React from 'react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import type { SleepingAgentSessionRecord } from '../../../../shared/agent-session/lifecycle/agent-session-resume' import { createDeferred, flushAsyncTicks } from './pty-connection-test-async' import { diff --git a/src/renderer/src/components/terminal-pane/pty-connection-hidden-codex-queries.spec.ts b/src/renderer/src/components/terminal-pane/pty-connection-hidden-codex-queries.spec.ts index b9b585097bb..42f2f242909 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-hidden-codex-queries.spec.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-hidden-codex-queries.spec.ts @@ -7,7 +7,7 @@ import { POST_REPLAY_REATTACH_RESET } from '../../../../shared/terminal/protocol/input-modes/terminal-mode-reset-profiles' import { replayEpilogue } from './pty-connection-test-replay-epilogue' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { flushAsyncTicks } from './pty-connection-test-async' import { LEAF_1, diff --git a/src/renderer/src/components/terminal-pane/pty-connection-hidden-output-restore.spec.ts b/src/renderer/src/components/terminal-pane/pty-connection-hidden-output-restore.spec.ts index c99af72dd54..84515e6e41a 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-hidden-output-restore.spec.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-hidden-output-restore.spec.ts @@ -1,6 +1,6 @@ import { bindPtyConnectionTestMocks } from './pty-connection-mocks.spec' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { flushAsyncTicks, renderHeadlessBuffer } from './pty-connection-test-async' import { terminalWriteText, diff --git a/src/renderer/src/components/terminal-pane/pty-connection-hidden-sleeping-resume.spec.ts b/src/renderer/src/components/terminal-pane/pty-connection-hidden-sleeping-resume.spec.ts index f1322b02be6..60b8c3d8d1a 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-hidden-sleeping-resume.spec.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-hidden-sleeping-resume.spec.ts @@ -1,6 +1,6 @@ import { bindPtyConnectionTestMocks } from './pty-connection-mocks.spec' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../../shared/layout-owner-switch' import { bindsPaneInStore, @@ -14,7 +14,8 @@ import { LEAF_2, createMockTransport, createPane, - createManager + createManager, + type MockTransport } from './pty-connection-test-pane-fixtures' import { buildPaneConnectionDeps, @@ -23,7 +24,7 @@ import { } from './pty-connection-test-deps' import { createInitialStoreState } from './pty-connection-test-store-fixtures' import type { StoreState } from './pty-connection-test-store-state' -import type { MockTransport } from './pty-connection-test-pane-fixtures' + import type { connectPanePty } from './pty-connection' import { installTerminalTestGlobals, diff --git a/src/renderer/src/components/terminal-pane/pty-connection-hook-completion-bell-arbitration.spec.ts b/src/renderer/src/components/terminal-pane/pty-connection-hook-completion-bell-arbitration.spec.ts index 2cd3e3e9671..b61fceb2018 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-hook-completion-bell-arbitration.spec.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-hook-completion-bell-arbitration.spec.ts @@ -1,6 +1,6 @@ import { bindPtyConnectionTestMocks } from './pty-connection-mocks.spec' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { AGENT_TASK_COMPLETE_NOTIFICATION_GRACE_MS, AGENT_TASK_COMPLETE_NOTIFICATION_MAX_WAIT_MS @@ -9,7 +9,8 @@ import { LEAF_1, createMockTransport, createPane, - createManager + createManager, + type MockTransport } from './pty-connection-test-pane-fixtures' import { buildPaneConnectionDeps, @@ -21,7 +22,7 @@ import { buildActiveRuntimeEnvironmentState } from './pty-connection-test-store-fixtures' import type { StoreState } from './pty-connection-test-store-state' -import type { MockTransport } from './pty-connection-test-pane-fixtures' + import { installTerminalTestGlobals, restoreTerminalTestGlobals diff --git a/src/renderer/src/components/terminal-pane/pty-connection-hook-completion-side-effects.spec.ts b/src/renderer/src/components/terminal-pane/pty-connection-hook-completion-side-effects.spec.ts index fe7da8965bb..809cc9ae9e1 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-hook-completion-side-effects.spec.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-hook-completion-side-effects.spec.ts @@ -1,7 +1,7 @@ import { bindPtyConnectionTestMocks } from './pty-connection-mocks.spec' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { RESET_TERMINAL_CURSOR_STYLE } from '../../../../shared/terminal/protocol/input-modes/terminal-mode-reset-profiles' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { flushAsyncTicks } from './pty-connection-test-async' import { AGENT_TASK_COMPLETE_NOTIFICATION_GRACE_MS, diff --git a/src/renderer/src/components/terminal-pane/pty-connection-hook-idle-arbitration.test.ts b/src/renderer/src/components/terminal-pane/pty-connection-hook-idle-arbitration.test.ts index 2564cfeb779..8ad92ed1c95 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-hook-idle-arbitration.test.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-hook-idle-arbitration.test.ts @@ -1,7 +1,7 @@ import type * as React from 'react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { RESET_TERMINAL_CURSOR_STYLE } from '../../../../shared/terminal/protocol/input-modes/terminal-mode-reset-profiles' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { flushAsyncTicks } from './pty-connection-test-async' import { AGENT_TASK_COMPLETE_NOTIFICATION_MAX_WAIT_MS } from './pty-connection-test-constants' import { diff --git a/src/renderer/src/components/terminal-pane/pty-connection-interrupt-inference.spec.ts b/src/renderer/src/components/terminal-pane/pty-connection-interrupt-inference.spec.ts index 9b7e20c9db8..73fc62148cb 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-interrupt-inference.spec.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-interrupt-inference.spec.ts @@ -1,6 +1,6 @@ import { bindPtyConnectionTestMocks } from './pty-connection-mocks.spec' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { flushAsyncTicks } from './pty-connection-test-async' import { createKeyboardEventTarget, @@ -12,7 +12,8 @@ import { LEAF_1, createMockTransport, createPane, - createManager + createManager, + type MockTransport } from './pty-connection-test-pane-fixtures' import { buildPaneConnectionDeps, @@ -21,7 +22,7 @@ import { } from './pty-connection-test-deps' import { createInitialStoreState } from './pty-connection-test-store-fixtures' import type { StoreState } from './pty-connection-test-store-state' -import type { MockTransport } from './pty-connection-test-pane-fixtures' + import { installTerminalTestGlobals, restoreTerminalTestGlobals diff --git a/src/renderer/src/components/terminal-pane/pty-connection-main-side-effect-authority.spec.ts b/src/renderer/src/components/terminal-pane/pty-connection-main-side-effect-authority.spec.ts index 3c741c5ba63..c767df19955 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-main-side-effect-authority.spec.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-main-side-effect-authority.spec.ts @@ -1,6 +1,6 @@ import { bindPtyConnectionTestMocks } from './pty-connection-mocks.spec' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { flushAsyncTicks } from './pty-connection-test-async' import { AGENT_TASK_COMPLETE_NOTIFICATION_MAX_WAIT_MS } from './pty-connection-test-constants' import { diff --git a/src/renderer/src/components/terminal-pane/pty-connection-notification-settings-gating.spec.ts b/src/renderer/src/components/terminal-pane/pty-connection-notification-settings-gating.spec.ts index 32057b4ee41..1b9e0125d65 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-notification-settings-gating.spec.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-notification-settings-gating.spec.ts @@ -1,13 +1,14 @@ import { bindPtyConnectionTestMocks } from './pty-connection-mocks.spec' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { flushAsyncTicks, createDeferred } from './pty-connection-test-async' import { AGENT_TASK_COMPLETE_NOTIFICATION_MAX_WAIT_MS } from './pty-connection-test-constants' import { LEAF_1, createMockTransport, createPane, - createManager + createManager, + type MockTransport } from './pty-connection-test-pane-fixtures' import type * as UseNotificationDispatchModule from './use-notification-dispatch' import { @@ -17,7 +18,7 @@ import { } from './pty-connection-test-deps' import { createInitialStoreState } from './pty-connection-test-store-fixtures' import type { StoreState } from './pty-connection-test-store-state' -import type { MockTransport } from './pty-connection-test-pane-fixtures' + import { installTerminalTestGlobals, restoreTerminalTestGlobals diff --git a/src/renderer/src/components/terminal-pane/pty-connection-preconnect-input.test.ts b/src/renderer/src/components/terminal-pane/pty-connection-preconnect-input.test.ts index 10b5abd7265..e5ccaa7d061 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-preconnect-input.test.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-preconnect-input.test.ts @@ -1,7 +1,7 @@ import type * as React from 'react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { connectPanePty } from './pty-connection' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { flushAsyncTicks } from './pty-connection-test-async' import { createManager, diff --git a/src/renderer/src/components/terminal-pane/pty-connection-process-exit-row-retire.test.ts b/src/renderer/src/components/terminal-pane/pty-connection-process-exit-row-retire.test.ts index b20e6b55a4a..cca997ca75e 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-process-exit-row-retire.test.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-process-exit-row-retire.test.ts @@ -1,10 +1,10 @@ import type * as React from 'react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { toAppSshPtyId } from '../../../../shared/ssh-pty-id' import { RESET_MOUSE_REPORTING } from '../../../../shared/terminal/protocol/input-modes/terminal-mode-reset-profiles' import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' -import type { TerminalAgent } from '../../../../shared/terminal-agent' +import type { TerminalAgent } from '../../../../shared/agent-status/identity/terminal-agent' import type * as CoordinatorModule from './agent-completion-coordinator' import type { AgentCompletionCoordinatorOptions } from './agent-completion-coordinator-types' import { createDeferred, flushAsyncTicks } from './pty-connection-test-async' diff --git a/src/renderer/src/components/terminal-pane/pty-connection-pty-exit-teardown.spec.ts b/src/renderer/src/components/terminal-pane/pty-connection-pty-exit-teardown.spec.ts index 8fce436a59d..30d62b6cbdd 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-pty-exit-teardown.spec.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-pty-exit-teardown.spec.ts @@ -1,7 +1,7 @@ import { registerPtyConnectionShutdownExitDeferralTests } from './pty-connection-pty-shutdown-exit-deferral.spec' import { bindPtyConnectionTestMocks } from './pty-connection-mocks.spec' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { sendTerminalInputThroughPane, temporarilySetNavigatorUserAgent diff --git a/src/renderer/src/components/terminal-pane/pty-connection-remote-runtime-attach.spec.ts b/src/renderer/src/components/terminal-pane/pty-connection-remote-runtime-attach.spec.ts index b91b84d33c1..c61062b46be 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-remote-runtime-attach.spec.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-remote-runtime-attach.spec.ts @@ -1,6 +1,6 @@ import { bindPtyConnectionTestMocks } from './pty-connection-mocks.spec' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { flushAsyncTicks } from './pty-connection-test-async' import { UUID_RE } from './pty-connection-test-constants' import { diff --git a/src/renderer/src/components/terminal-pane/pty-connection-runtime-owner-spawn-routing.spec.ts b/src/renderer/src/components/terminal-pane/pty-connection-runtime-owner-spawn-routing.spec.ts index cb1b7653649..3576fc457cf 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-runtime-owner-spawn-routing.spec.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-runtime-owner-spawn-routing.spec.ts @@ -1,6 +1,6 @@ import { bindPtyConnectionTestMocks } from './pty-connection-mocks.spec' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { flushAsyncTicks } from './pty-connection-test-async' import { LEAF_1, @@ -8,7 +8,8 @@ import { createMockTransport, createPane, captureCallbackTerminalWrites, - createManager + createManager, + type MockTransport } from './pty-connection-test-pane-fixtures' import { buildPaneConnectionDeps, @@ -17,7 +18,7 @@ import { } from './pty-connection-test-deps' import { createInitialStoreState } from './pty-connection-test-store-fixtures' import type { StoreState } from './pty-connection-test-store-state' -import type { MockTransport } from './pty-connection-test-pane-fixtures' + import { installTerminalTestGlobals, restoreTerminalTestGlobals diff --git a/src/renderer/src/components/terminal-pane/pty-connection-sleeping-resume-banner.spec.ts b/src/renderer/src/components/terminal-pane/pty-connection-sleeping-resume-banner.spec.ts index bfed69708b5..8dde26265c4 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-sleeping-resume-banner.spec.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-sleeping-resume-banner.spec.ts @@ -1,6 +1,6 @@ import { bindPtyConnectionTestMocks } from './pty-connection-mocks.spec' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../../shared/layout-owner-switch' import { bindsPaneInStore, @@ -15,7 +15,8 @@ import { LEAF_2, createMockTransport, createPane, - createManager + createManager, + type MockTransport } from './pty-connection-test-pane-fixtures' import { buildPaneConnectionDeps, @@ -24,7 +25,7 @@ import { } from './pty-connection-test-deps' import { createInitialStoreState } from './pty-connection-test-store-fixtures' import type { StoreState } from './pty-connection-test-store-state' -import type { MockTransport } from './pty-connection-test-pane-fixtures' + import { installTerminalTestGlobals, restoreTerminalTestGlobals diff --git a/src/renderer/src/components/terminal-pane/pty-connection-spawn-deferred-sleep.test.ts b/src/renderer/src/components/terminal-pane/pty-connection-spawn-deferred-sleep.test.ts index d64703a4d90..537150a4c99 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-spawn-deferred-sleep.test.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-spawn-deferred-sleep.test.ts @@ -3,14 +3,19 @@ import { registerMainOwnedResumeDrainTests } from './pty-connection-main-owned-r import type { ConnectPanePtySession } from './pty-connection/connect-pane-pty-session' import type * as React from 'react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../../shared/layout-owner-switch' import { expectWindowStartAskedMain, mainLayoutApplyTransport } from './pty-connection-test-main-pane-start-fixtures' import { flushAsyncTicks } from './pty-connection-test-async' -import { createMockTransport, createPane, createManager } from './pty-connection-test-pane-fixtures' +import { + createMockTransport, + createPane, + createManager, + type MockTransport +} from './pty-connection-test-pane-fixtures' import { buildPaneConnectionDeps, type PtyConnectionAgentTitleMocks, @@ -18,7 +23,7 @@ import { } from './pty-connection-test-deps' import { createInitialStoreState } from './pty-connection-test-store-fixtures' import type { StoreState } from './pty-connection-test-store-state' -import type { MockTransport } from './pty-connection-test-pane-fixtures' + import { installTerminalTestGlobals, restoreTerminalTestGlobals diff --git a/src/renderer/src/components/terminal-pane/pty-connection-startup-command-delivery.spec.ts b/src/renderer/src/components/terminal-pane/pty-connection-startup-command-delivery.spec.ts index 34fb29706a7..d56fe5b714c 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-startup-command-delivery.spec.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-startup-command-delivery.spec.ts @@ -4,7 +4,7 @@ import { TERMINAL_PASTE_CHUNK_MAX_BYTES, TERMINAL_PASTE_DIRECT_MAX_BYTES } from './terminal-paste-limits' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { toAppSshPtyId } from '../../../../shared/ssh-pty-id' import { flushAsyncTicks } from './pty-connection-test-async' import { diff --git a/src/renderer/src/components/terminal-pane/pty-connection-startup-draft-delivery.spec.ts b/src/renderer/src/components/terminal-pane/pty-connection-startup-draft-delivery.spec.ts index 43b044e1974..2128eb101dd 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-startup-draft-delivery.spec.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-startup-draft-delivery.spec.ts @@ -1,6 +1,6 @@ import { bindPtyConnectionTestMocks } from './pty-connection-mocks.spec' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { beginAgentStartupDeliveryAttempt } from '@/lib/agent-startup-delayed-delivery' import { flushAsyncTicks } from './pty-connection-test-async' import { VISIBLE_PTY_SETTLE_MS } from './pty-connection-test-constants' diff --git a/src/renderer/src/components/terminal-pane/pty-connection-task-complete-dispatch.spec.ts b/src/renderer/src/components/terminal-pane/pty-connection-task-complete-dispatch.spec.ts index 46ffe11fd24..c8ffe861522 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-task-complete-dispatch.spec.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-task-complete-dispatch.spec.ts @@ -1,7 +1,7 @@ import { bindPtyConnectionTestMocks } from './pty-connection-mocks.spec' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { RESET_TERMINAL_CURSOR_STYLE } from '../../../../shared/terminal/protocol/input-modes/terminal-mode-reset-profiles' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { flushAsyncTicks } from './pty-connection-test-async' import { AGENT_TASK_COMPLETE_NOTIFICATION_MAX_WAIT_MS } from './pty-connection-test-constants' import { diff --git a/src/renderer/src/components/terminal-pane/pty-connection-terminal-input-gating.spec.ts b/src/renderer/src/components/terminal-pane/pty-connection-terminal-input-gating.spec.ts index 4d876b1c731..f96c979c8bd 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-terminal-input-gating.spec.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-terminal-input-gating.spec.ts @@ -1,7 +1,7 @@ import { registerPtyConnectionCodexRestartInputLookupTests } from './pty-connection-codex-restart-input-lookup.spec' import { bindPtyConnectionTestMocks } from './pty-connection-mocks.spec' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { flushAsyncTicks } from './pty-connection-test-async' import { createKeyboardEventTarget, diff --git a/src/renderer/src/components/terminal-pane/pty-connection-test-exited-split-pane-close.ts b/src/renderer/src/components/terminal-pane/pty-connection-test-exited-split-pane-close.ts index 8f5b182c131..f95a952626f 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-test-exited-split-pane-close.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-test-exited-split-pane-close.ts @@ -1,5 +1,5 @@ import { expect, vi } from 'vitest' -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' import { LEAF_1, LEAF_2, type MockPaneManager } from './pty-connection-test-pane-fixtures' /** Main-owned exits wait for its leaf-removal frame without sending another close; dynamic imports share the test’s reset module graph. */ diff --git a/src/renderer/src/components/terminal-pane/pty-connection-test-main-pane-start-fixtures.ts b/src/renderer/src/components/terminal-pane/pty-connection-test-main-pane-start-fixtures.ts index f3ab83b7ad7..745b14343f7 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-test-main-pane-start-fixtures.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-test-main-pane-start-fixtures.ts @@ -1,5 +1,5 @@ import { expect } from 'vitest' -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' import type { PaneResumeOutcome } from '../../../../shared/workspace-layout/workspace-layout-published' import type { TerminalPaneResumeOutcome } from '@/store/terminals/terminal-state' import type { MockTransport } from './pty-connection-test-pane-fixtures' diff --git a/src/renderer/src/components/terminal-pane/pty-connection-test-store-state.ts b/src/renderer/src/components/terminal-pane/pty-connection-test-store-state.ts index 12413a09612..0cc1ef5242f 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-test-store-state.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-test-store-state.ts @@ -1,6 +1,6 @@ import type { vi } from 'vitest' import type { AgentType } from '../../../../shared/agent-status/contracts/agent-status-types' -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' import { resolveWindowsShiftEnterEncodingForPane } from './terminal-windows-shift-enter' import type { PaneForegroundAgentEntry } from '@/store/slices/pane-foreground-agent' import type { AppState } from '@/store/types' diff --git a/src/renderer/src/components/terminal-pane/pty-connection-typed-agent-identity.spec.ts b/src/renderer/src/components/terminal-pane/pty-connection-typed-agent-identity.spec.ts index c6f98ea85a7..bde3284f148 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-typed-agent-identity.spec.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-typed-agent-identity.spec.ts @@ -1,6 +1,6 @@ import { bindPtyConnectionTestMocks } from './pty-connection-mocks.spec' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { flushAsyncTicks } from './pty-connection-test-async' import { sendTerminalInputThroughPane } from './pty-connection-test-dom' import { diff --git a/src/renderer/src/components/terminal-pane/pty-connection-types.ts b/src/renderer/src/components/terminal-pane/pty-connection-types.ts index 3104a4f7672..24aa5d3ab60 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-types.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-types.ts @@ -13,7 +13,7 @@ import type { EventProps } from '../../../../shared/telemetry-events' import type { TerminalColorSchemeMode } from '../../../../shared/terminal/protocol/queries/terminal-color-scheme-protocol' import type { StartupCommandDelivery } from '../../../../shared/agent-launch/startup/codex-startup-delivery' import type { TuiAgent } from '../../../../shared/agent-launch/catalog/tui-agent' -import type { TerminalPanePlacement } from '../../../../shared/terminal-pane-placement' +import type { TerminalPanePlacement } from '../../../../shared/workspace-layout/terminal-pane-placement' import type { SavedResumeStartupSource, AgentProviderSessionMetadata, diff --git a/src/renderer/src/components/terminal-pane/pty-connection-unanswered-command-finish.spec.ts b/src/renderer/src/components/terminal-pane/pty-connection-unanswered-command-finish.spec.ts index 4c348ee7fa6..5901efcb588 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-unanswered-command-finish.spec.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-unanswered-command-finish.spec.ts @@ -1,6 +1,6 @@ import { bindPtyConnectionTestMocks } from './pty-connection-mocks.spec' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { flushAsyncTicks } from './pty-connection-test-async' import { LEAF_1, diff --git a/src/renderer/src/components/terminal-pane/pty-connection-windows-keyboard-reset.spec.ts b/src/renderer/src/components/terminal-pane/pty-connection-windows-keyboard-reset.spec.ts index 84430cbfef2..04fd110eded 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-windows-keyboard-reset.spec.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-windows-keyboard-reset.spec.ts @@ -4,7 +4,7 @@ import { RESET_KITTY_KEYBOARD_PROTOCOL, RESET_TERMINAL_CURSOR_STYLE } from '../../../../shared/terminal/protocol/input-modes/terminal-mode-reset-profiles' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { temporarilySetNavigatorUserAgent, sendTerminalInputThroughPane diff --git a/src/renderer/src/components/terminal-pane/pty-connection/command-inferred-pane-agent.ts b/src/renderer/src/components/terminal-pane/pty-connection/command-inferred-pane-agent.ts index 60f21960e2a..02eb610af77 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection/command-inferred-pane-agent.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection/command-inferred-pane-agent.ts @@ -11,7 +11,7 @@ import type { AgentCompletionStatusSnapshot } from '../agent-completion-coordina import { resolveCompatibleAgentTypeForOwner } from '../../../../../shared/agent-status/title/agent-title-owner' import { resolveCommittedTitleAgentType } from '@/lib/pane-agent-evidence' import { recognizeAgentLaunchCommand } from '../../../../../shared/agent-launch/startup/agent-command-line-intent' -import type { TerminalAgent } from '../../../../../shared/terminal-agent' +import type { TerminalAgent } from '../../../../../shared/agent-status/identity/terminal-agent' import { isTuiAgent } from '../../../../../shared/agent-launch/catalog/tui-agent-config' import { MANUAL_AGENT_COMMAND_MAX_CHARS } from './pty-connect-limits' diff --git a/src/renderer/src/components/terminal-pane/pty-connection/confirmed-shell-agent-title.ts b/src/renderer/src/components/terminal-pane/pty-connection/confirmed-shell-agent-title.ts index 2251e8f4e9d..eabf1714b0b 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection/confirmed-shell-agent-title.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection/confirmed-shell-agent-title.ts @@ -1,5 +1,5 @@ import { useAppStore } from '@/store' -import { titleAfterConfirmedShell } from '../../../../../shared/terminal-pane-title-reset' +import { titleAfterConfirmedShell } from '../../../../../shared/workspace-layout/terminal-pane-title-reset' import type { ConnectPanePtySession } from './connect-pane-pty-session' // Clear only agent-named titles on confirmed shell return; plain codex/grok can leave OSC titles the shell never repaints. diff --git a/src/renderer/src/components/terminal-pane/pty-connection/connect-pane-pty.ts b/src/renderer/src/components/terminal-pane/pty-connection/connect-pane-pty.ts index b49944487c7..2b884b37015 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection/connect-pane-pty.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection/connect-pane-pty.ts @@ -13,7 +13,7 @@ import { TerminalIdleCursorReset } from '../terminal-idle-cursor-reset' import { TerminalResumeEscapeGap } from '../terminal-resume-escape-gap' import { writeTerminalOutput } from '@/lib/pane-manager/pane-terminal-output-scheduler' import { createTerminalStructuralReplayCoordinator } from '@/lib/pane-manager/terminal-structural-replay-coordinator' -import { makePaneKey } from '../../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../../shared/workspace-layout/stable-pane-id' import type { AgentType } from '../../../../../shared/agent-status/contracts/agent-status-types' import { resolveCommittedTitleAgentType } from '@/lib/pane-agent-evidence' diff --git a/src/renderer/src/components/terminal-pane/pty-connection/deferred-session-reattach-choice.ts b/src/renderer/src/components/terminal-pane/pty-connection/deferred-session-reattach-choice.ts index 119355120d4..e46c48430d2 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection/deferred-session-reattach-choice.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection/deferred-session-reattach-choice.ts @@ -1,7 +1,7 @@ import { isRemoteRuntimePtyId } from '../../../../../shared/remote-runtime/remote-runtime-pty-id' import { scheduleRuntimeGraphSync } from '@/runtime/sync-runtime-graph' import { useAppStore } from '@/store' -import { isWebTerminalSurfaceTabId } from '../../../../../shared/terminal-surface-id' +import { isWebTerminalSurfaceTabId } from '../../../../../shared/workspace-layout/terminal-surface-id' import { getEagerPtyBufferHandle } from '../pty-dispatcher' import { @@ -9,10 +9,8 @@ import { pendingSpawnGenerationByPaneKey, recordPtyConnectDiagnostic } from './pty-connect-limits' -import { - canRestorePairedParkedTerminal, - isSessionOwnedByWorktree -} from './paired-parked-terminal-restore' +import { canRestorePairedParkedTerminal } from './paired-parked-terminal-restore' +import { isPtySessionIdOwnedByWorktree as isSessionOwnedByWorktree } from '../../../../../shared/terminal/pty/lifecycle/pty-session-id-format' import { startDeferredSessionReattachUnlessHiddenAgentResume } from './hidden-agent-resume-deferral' import type { ConnectPanePtySession } from './connect-pane-pty-session' diff --git a/src/renderer/src/components/terminal-pane/pty-connection/disposed-spawn-retention.test.ts b/src/renderer/src/components/terminal-pane/pty-connection/disposed-spawn-retention.test.ts index 0034ba58138..eb4ea96132d 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection/disposed-spawn-retention.test.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection/disposed-spawn-retention.test.ts @@ -1,6 +1,9 @@ import { describe, expect, it } from 'vitest' import { composeWorktreeHostIdentity } from '../../../../../shared/worktree/host-qualified-identity' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../../shared/terminal-tab-types' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../../../shared/workspace-layout/terminal-tab-types' import type { WorktreeDeleteState } from '@/store/slices/worktree-delete-state-types' import { shouldRetainDisposedPaneSpawn } from './disposed-spawn-retention' diff --git a/src/renderer/src/components/terminal-pane/pty-connection/foreground-output-refresh.ts b/src/renderer/src/components/terminal-pane/pty-connection/foreground-output-refresh.ts index 3e80605e17d..819c1561a3f 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection/foreground-output-refresh.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection/foreground-output-refresh.ts @@ -1,7 +1,7 @@ import * as unhideCoverage from './hidden-unhide-snapshot-coverage' import { isRemoteRuntimePtyId } from '../../../../../shared/remote-runtime/remote-runtime-pty-id' import { recordTerminalFreezeBreadcrumb } from '../terminal-freeze-breadcrumbs' -import { redactPtyIdForDiagnostics } from '../../../../../shared/pty-delivery-diagnostics' +import { redactPtyIdForDiagnostics } from '../../../../../shared/terminal/pty/diagnostics/pty-delivery-diagnostics' import { terminalRewriteOutputRenderRefreshDecision, terminalRewriteOutputPrefersRenderRefresh, diff --git a/src/renderer/src/components/terminal-pane/pty-connection/hidden-output-restore-drain.ts b/src/renderer/src/components/terminal-pane/pty-connection/hidden-output-restore-drain.ts index cb20b4772e1..f634e9166bc 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection/hidden-output-restore-drain.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection/hidden-output-restore-drain.ts @@ -1,6 +1,6 @@ import { isRemoteRuntimePtyId } from '../../../../../shared/remote-runtime/remote-runtime-pty-id' import { recordTerminalFreezeBreadcrumb } from '../terminal-freeze-breadcrumbs' -import { redactPtyIdForDiagnostics } from '../../../../../shared/pty-delivery-diagnostics' +import { redactPtyIdForDiagnostics } from '../../../../../shared/terminal/pty/diagnostics/pty-delivery-diagnostics' import { cancelScheduledHiddenOutputRestore } from '../hidden-output-restore-scheduler' import { isRemoteExecutionHostPtyId } from '../../../../../shared/remote-execution-host-pty-id' diff --git a/src/renderer/src/components/terminal-pane/pty-connection/live-data-callback.ts b/src/renderer/src/components/terminal-pane/pty-connection/live-data-callback.ts index e11cf760946..af5c6a3a935 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection/live-data-callback.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection/live-data-callback.ts @@ -1,4 +1,4 @@ -import { makePaneKey } from '../../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../../shared/workspace-layout/stable-pane-id' import { useAppStore } from '@/store' import { takeCurrentTerminalDeliveryCredit } from '@/lib/pane-manager/terminal-delivery-credit' import { recordAgentHibernationPaneOutput } from '@/lib/agent-hibernation-output-activity' diff --git a/src/renderer/src/components/terminal-pane/pty-connection/main-pane-resume-banner.test.ts b/src/renderer/src/components/terminal-pane/pty-connection/main-pane-resume-banner.test.ts index 8600275acb0..2bcc1d7a678 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection/main-pane-resume-banner.test.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection/main-pane-resume-banner.test.ts @@ -1,6 +1,6 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { TerminalPaneResumeOutcome } from '@/store/terminals/terminal-state' -import type { TerminalLayoutSnapshot } from '../../../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../../../shared/workspace-layout/terminal-tab-types' import type { ConnectPanePtySession } from './connect-pane-pty-session' import type { showMainPaneResumeOutcome as ShowOutcome } from './main-pane-resume-banner' diff --git a/src/renderer/src/components/terminal-pane/pty-connection/main-pane-start-request.ts b/src/renderer/src/components/terminal-pane/pty-connection/main-pane-start-request.ts index abd6522ec55..70229b692c8 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection/main-pane-start-request.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection/main-pane-start-request.ts @@ -2,7 +2,7 @@ import { useAppStore } from '@/store' import { sendLayoutApply } from '@/runtime/layout-apply-send' -import { parsePaneKey } from '../../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../../shared/workspace-layout/stable-pane-id' import { recordPtyConnectDiagnostic } from './pty-connect-limits' import { adoptMainBinding, diff --git a/src/renderer/src/components/terminal-pane/pty-connection/main-resumed-sleep-pane.ts b/src/renderer/src/components/terminal-pane/pty-connection/main-resumed-sleep-pane.ts index 13b4c39d9fb..0dd9b05debb 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection/main-resumed-sleep-pane.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection/main-resumed-sleep-pane.ts @@ -6,7 +6,7 @@ import { readTerminalSpawnDeferral } from '../../../../../shared/host-spawn-admi import { releaseDeferredCwdFence } from './fresh-spawn-start' import { findTerminalTabForPane } from './terminal-tab-id' import { isHostMirroredSleepingRecord } from '@/lib/host-mirrored-pane-liveness' -import { parsePaneKey } from '../../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../../shared/workspace-layout/stable-pane-id' import { isWorkspaceSleepRecord, WORKTREE_TERMINALS_SLEEPING_ERROR diff --git a/src/renderer/src/components/terminal-pane/pty-connection/paired-parked-terminal-restore.ts b/src/renderer/src/components/terminal-pane/pty-connection/paired-parked-terminal-restore.ts index 192a881e60d..4c125ff3461 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection/paired-parked-terminal-restore.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection/paired-parked-terminal-restore.ts @@ -22,4 +22,4 @@ export function canRestorePairedParkedTerminal(ptyId: string): boolean { } // Daemon worktreeId@@shortUuid IDs prevent cross-workspace reattach. -export { isPtySessionIdOwnedByWorktree as isSessionOwnedByWorktree } from '../../../../../shared/pty-session-id-format' +import '../../../../../shared/terminal/pty/lifecycle/pty-session-id-format' diff --git a/src/renderer/src/components/terminal-pane/pty-connection/pane-transport-options.ts b/src/renderer/src/components/terminal-pane/pty-connection/pane-transport-options.ts index 7643abdb57c..e31e5764bd8 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection/pane-transport-options.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection/pane-transport-options.ts @@ -1,7 +1,7 @@ import { useAppStore } from '@/store' import { notifyTerminalTypingDiscardedBeforeBind } from '../terminal-input-not-sent-notice' import { terminalShowsReplayedHistory } from '../replayed-history-terminals' -import { isWebTerminalSurfaceTabId } from '../../../../../shared/terminal-surface-id' +import { isWebTerminalSurfaceTabId } from '../../../../../shared/workspace-layout/terminal-surface-id' import { shouldRetainDisposedPaneSpawn } from './disposed-spawn-retention' import { findColdRestoreResumeSource } from './cold-restore-resume-startup' import { mainStartsPane } from './main-starts-pane' diff --git a/src/renderer/src/components/terminal-pane/pty-connection/park-reveal-snapshot-verdict.ts b/src/renderer/src/components/terminal-pane/pty-connection/park-reveal-snapshot-verdict.ts index 2d9312af89f..50862651e10 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection/park-reveal-snapshot-verdict.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection/park-reveal-snapshot-verdict.ts @@ -1,6 +1,6 @@ import { isRemoteRuntimePtyId } from '../../../../../shared/remote-runtime/remote-runtime-pty-id' import { RESET_GRAPHIC_RENDITION } from '../../../../../shared/terminal/protocol/input-modes/terminal-mode-reset-profiles' -import { redactPtyIdForDiagnostics } from '../../../../../shared/pty-delivery-diagnostics' +import { redactPtyIdForDiagnostics } from '../../../../../shared/terminal/pty/diagnostics/pty-delivery-diagnostics' import { writeTerminalOutput } from '@/lib/pane-manager/pane-terminal-output-scheduler' import { recordTerminalFreezeBreadcrumb } from '../terminal-freeze-breadcrumbs' import type { PtyBufferSnapshot } from '../pty-transport-types' diff --git a/src/renderer/src/components/terminal-pane/pty-connection/pty-exit-hibernate.ts b/src/renderer/src/components/terminal-pane/pty-connection/pty-exit-hibernate.ts index 22ecb60521e..72e28d2cffd 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection/pty-exit-hibernate.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection/pty-exit-hibernate.ts @@ -8,7 +8,7 @@ import { isHostPtySleepPending } from '../pty-shutdown-exit-deferral' import { POST_REPLAY_MODE_RESET } from '../../../../../shared/terminal/protocol/input-modes/terminal-mode-reset-profiles' -import { isProvenProcessExit } from '../../../../../shared/terminal-exit-cause' +import { isProvenProcessExit } from '../../../../../shared/terminal/pty/lifecycle/terminal-exit-cause' import { getProviderSessionClaimKey } from '@/lib/sleeping-agent-pane-ownership' import type { SleepingAgentSessionRecord } from '../../../../../shared/agent-session/lifecycle/agent-session-resume' import { agentTurnEndedUncleanly } from '../../../../../shared/agent-status/lifecycle/agent-main-agent-verdict' diff --git a/src/renderer/src/components/terminal-pane/pty-connection/pty-kitty-file-reader.ts b/src/renderer/src/components/terminal-pane/pty-connection/pty-kitty-file-reader.ts index a6dbc224255..3da93ea15a2 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection/pty-kitty-file-reader.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection/pty-kitty-file-reader.ts @@ -6,7 +6,7 @@ import { waitForPromiseWithSignal } from '../../../../../shared/abort-signal-rea import { HOST_TERMINAL_SURFACE_SEPARATOR, toHostSessionTabId -} from '../../../../../shared/terminal-surface-id' +} from '../../../../../shared/workspace-layout/terminal-surface-id' import { toRemoteRuntimePtyId } from '../../../../../shared/remote-runtime/remote-runtime-pty-id' import type { RuntimeTerminalResolvePane } from '../../../../../shared/runtime-types' import type { RuntimeClientTarget } from '../../../../../shared/runtime-client-target' diff --git a/src/renderer/src/components/terminal-pane/pty-connection/remote-program-redraw.ts b/src/renderer/src/components/terminal-pane/pty-connection/remote-program-redraw.ts index 222fd4b3dd8..418dcda299e 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection/remote-program-redraw.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection/remote-program-redraw.ts @@ -5,7 +5,7 @@ import { } from '../../../../../shared/terminal/viewport/terminal-viewport' import { onOverrideChange } from '@/lib/pane-manager/mobile-fit-overrides' import { recordTerminalFreezeBreadcrumb } from '../terminal-freeze-breadcrumbs' -import { redactPtyIdForDiagnostics } from '../../../../../shared/pty-delivery-diagnostics' +import { redactPtyIdForDiagnostics } from '../../../../../shared/terminal/pty/diagnostics/pty-delivery-diagnostics' import type { ConnectPanePtySession } from './connect-pane-pty-session' diff --git a/src/renderer/src/components/terminal-pane/pty-connection/shell-command-inference.ts b/src/renderer/src/components/terminal-pane/pty-connection/shell-command-inference.ts index 007ea65429b..27944cbe2ae 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection/shell-command-inference.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection/shell-command-inference.ts @@ -3,7 +3,7 @@ import { useAppStore } from '@/store' import type { AgentType } from '../../../../../shared/agent-status/contracts/agent-status-types' import { AGENT_INTERRUPT_SETTLE_MS } from '../../../../../shared/agent-status/lifecycle/agent-interrupt-intent' import { resolvePaneAgentOwner } from '../../../../../shared/agent-status/identity/pane-agent-owner' -import { titleAfterInferredInterrupt } from '../../../../../shared/terminal-pane-title-reset' +import { titleAfterInferredInterrupt } from '../../../../../shared/workspace-layout/terminal-pane-title-reset' import { MANUAL_AGENT_COMMAND_MAX_CHARS } from './pty-connect-limits' import { diff --git a/src/renderer/src/components/terminal-pane/pty-connection/sleeping-record-access.ts b/src/renderer/src/components/terminal-pane/pty-connection/sleeping-record-access.ts index 6d1de5ff8fc..38ed3785f7e 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection/sleeping-record-access.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection/sleeping-record-access.ts @@ -4,7 +4,7 @@ import { useAppStore } from '@/store/index' import type { PtyConnectResult } from '../pty-transport-types' import { createBrowserUuid } from '@/lib/browser-uuid' import { findLegacyNumericSleepingRecord } from '../../../../../shared/sleeping-record-legacy-pane-key' -import { neutralTerminalTitle } from '../../../../../shared/terminal-pane-title-reset' +import { neutralTerminalTitle } from '../../../../../shared/workspace-layout/terminal-pane-title-reset' import { agentProviderSessionsEqual, type SleepingAgentSessionRecord diff --git a/src/renderer/src/components/terminal-pane/pty-connection/spawn-deferred-sleep.ts b/src/renderer/src/components/terminal-pane/pty-connection/spawn-deferred-sleep.ts index ec7e715bbc2..aa703f9c53d 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection/spawn-deferred-sleep.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection/spawn-deferred-sleep.ts @@ -9,7 +9,7 @@ import { type AgentProviderSessionMetadata, type SleepingAgentSessionRecord } from '../../../../../shared/agent-session/lifecycle/agent-session-resume' -import { parsePaneKey } from '../../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../../shared/workspace-layout/stable-pane-id' import { stablePaneHasLivePty } from '@/lib/sleeping-agent-pane-ownership' import { clearPaneSpawnDeferral, diff --git a/src/renderer/src/components/terminal-pane/pty-connection/terminal-keydown-fit.ts b/src/renderer/src/components/terminal-pane/pty-connection/terminal-keydown-fit.ts index 5969f16b00a..afcaf539c66 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection/terminal-keydown-fit.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection/terminal-keydown-fit.ts @@ -1,5 +1,5 @@ import { isRemoteRuntimePtyId } from '../../../../../shared/remote-runtime/remote-runtime-pty-id' -import { makePaneKey } from '../../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../../shared/workspace-layout/stable-pane-id' import { useAppStore } from '@/store' import { safeFit } from '@/lib/pane-manager/pane-tree-ops' import { bindPanePtyId, getFitOverrideForPty } from '@/lib/pane-manager/mobile-fit-overrides' diff --git a/src/renderer/src/components/terminal-pane/pty-connection/terminal-tab-id.ts b/src/renderer/src/components/terminal-pane/pty-connection/terminal-tab-id.ts index b1caccbab28..fc7598d89d2 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection/terminal-tab-id.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection/terminal-tab-id.ts @@ -1,4 +1,4 @@ -import type { TerminalTab } from '../../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../../shared/workspace-layout/terminal-tab-types' type TerminalTabLookup = { getTab?: (tabId: string) => { contentType: string; entityId: string } | null diff --git a/src/renderer/src/components/terminal-pane/pty-connection/transport-output-callbacks.ts b/src/renderer/src/components/terminal-pane/pty-connection/transport-output-callbacks.ts index 27409526055..e94935e00f4 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection/transport-output-callbacks.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection/transport-output-callbacks.ts @@ -3,7 +3,7 @@ import { captureTerminalLaunchContext } from './terminal-launch-result-policy' import type { ColdRestoreAgentResumeStartup } from './fresh-spawn-types' -import type { TerminalAttachmentLaunchResult } from '../../../../../shared/terminal-attachment-launch-result' +import type { TerminalAttachmentLaunchResult } from '../../../../../shared/terminal/pty/lifecycle/terminal-attachment-launch-result' import { isPaneOwnerRefusal } from './pane-owner-recovery' import type { SpawnDeferralReason } from '../../../../../shared/host-spawn-admission' import { createTerminalStartupTiming } from '../terminal-startup-timing' diff --git a/src/renderer/src/components/terminal-pane/pty-input-write-queue.test.ts b/src/renderer/src/components/terminal-pane/pty-input-write-queue.test.ts index 851c00f1274..cc38995cb38 100644 --- a/src/renderer/src/components/terminal-pane/pty-input-write-queue.test.ts +++ b/src/renderer/src/components/terminal-pane/pty-input-write-queue.test.ts @@ -12,7 +12,8 @@ import { } from '../../../../shared/terminal/input/terminal-input' import { CLIPBOARD_TEXT_MEASURE_YIELD_CODE_UNITS } from '../../../../shared/clipboard-text' import { mode2031SequenceFor } from '../../../../shared/terminal/protocol/queries/terminal-color-scheme-protocol' -import { PtyStartupIngress, type PtyIngressEmission } from '../../../../shared/pty-startup-ingress' +import { PtyStartupIngress } from '../../../../shared/terminal/pty/ingress/pty-startup-ingress' +import type { PtyIngressEmission } from '../../../../shared/terminal/pty/ingress/pty-startup-ingress-contract' import { extractOnlyCookedEchoSafeQueryReplies, needsCookedEchoSafeQueryReply diff --git a/src/renderer/src/components/terminal-pane/pty-output-processor.ts b/src/renderer/src/components/terminal-pane/pty-output-processor.ts index a66178aba18..e90a3809dbb 100644 --- a/src/renderer/src/components/terminal-pane/pty-output-processor.ts +++ b/src/renderer/src/components/terminal-pane/pty-output-processor.ts @@ -6,7 +6,7 @@ import { createAgentStatusOscProcessor, type ProgramActivityChange } from '../../../../shared/agent-status/transport/agent-status-osc' -import { createProgramStatusSideEffectScanner } from '../../../../shared/terminal-agent-status-processor' +import { createProgramStatusSideEffectScanner } from '../../../../shared/program-status/terminal-agent-status-processor' import { placeProgramActivityAmongTitles } from '../../../../shared/program-status/title-activity-order' import { diff --git a/src/renderer/src/components/terminal-pane/pty-pre-handler-buffer.ts b/src/renderer/src/components/terminal-pane/pty-pre-handler-buffer.ts index fd0497ad83c..0148f73dc4a 100644 --- a/src/renderer/src/components/terminal-pane/pty-pre-handler-buffer.ts +++ b/src/renderer/src/components/terminal-pane/pty-pre-handler-buffer.ts @@ -1,4 +1,4 @@ -import { isPtyIncarnationId } from '../../../../shared/pty-incarnation' +import { isPtyIncarnationId } from '../../../../shared/terminal/pty/lifecycle/pty-incarnation' import { clampUtf8Tail } from './pty-eager-buffer-clamp' import type { PtyDataMeta } from './pty-dispatcher' diff --git a/src/renderer/src/components/terminal-pane/pty-renderer-delivery-claims.ts b/src/renderer/src/components/terminal-pane/pty-renderer-delivery-claims.ts index 9296809816b..68306b8438c 100644 --- a/src/renderer/src/components/terminal-pane/pty-renderer-delivery-claims.ts +++ b/src/renderer/src/components/terminal-pane/pty-renderer-delivery-claims.ts @@ -1,4 +1,4 @@ -import { redactPtyIdForDiagnostics } from '../../../../shared/pty-delivery-diagnostics' +import { redactPtyIdForDiagnostics } from '../../../../shared/terminal/pty/diagnostics/pty-delivery-diagnostics' import { recordTerminalFreezeBreadcrumb } from './terminal-freeze-breadcrumbs' const hiddenClaimCounts = new Map() diff --git a/src/renderer/src/components/terminal-pane/pty-transport-connect-spawn.test.ts b/src/renderer/src/components/terminal-pane/pty-transport-connect-spawn.test.ts index 154c83dafc8..b66c4b7648a 100644 --- a/src/renderer/src/components/terminal-pane/pty-transport-connect-spawn.test.ts +++ b/src/renderer/src/components/terminal-pane/pty-transport-connect-spawn.test.ts @@ -5,7 +5,7 @@ import { import type { ManagedPane } from '@/lib/pane-manager/pane-manager' import type { PtyConnectionDeps } from './pty-connection-types' import type { ConnectCallbacks } from './pty-connection-test-pane-fixtures' -import { terminalAttachResult } from '../../../../shared/terminal-attach-result' +import { terminalAttachResult } from '../../../../shared/terminal/pty/lifecycle/terminal-attach-result' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { installIpcPtyWindow, restorePtySpecWindow } from './pty-transport-test-harness' @@ -440,7 +440,8 @@ describe('createIpcPtyTransport', () => { expect(writeMock).not.toHaveBeenCalled() }) it('paints an old image and delayed live bytes once without claiming their newer frontier', async () => { - const { provenSpawnResponse } = await import('../../../../shared/terminal-spawn-response') + const { provenSpawnResponse } = + await import('../../../../shared/terminal/pty/lifecycle/terminal-spawn-response') const { bindPtyConnectionTestMocks } = await import('./pty-connection-mocks.spec') const { createInitialStoreState } = await import('./pty-connection-test-store-fixtures') const { buildPaneConnectionDeps } = await import('./pty-connection-test-deps') @@ -451,7 +452,7 @@ describe('createIpcPtyTransport', () => { const { SearchAddon } = await import('@xterm/addon-search') const { SerializeAddon } = await import('@xterm/addon-serialize') const { PaneManager } = await import('@/lib/pane-manager/pane-manager') - const { isTerminalLeafId } = await import('../../../../shared/stable-pane-id') + const { isTerminalLeafId } = await import('../../../../shared/workspace-layout/stable-pane-id') const { installTerminalTestGlobals, restoreTerminalTestGlobals } = await import('./pty-connection-test-environment') const { flushAsyncTicks } = await import('./pty-connection-test-async') diff --git a/src/renderer/src/components/terminal-pane/pty-transport-spawn-errors.test.ts b/src/renderer/src/components/terminal-pane/pty-transport-spawn-errors.test.ts index caa020cd2ca..c9d4603143e 100644 --- a/src/renderer/src/components/terminal-pane/pty-transport-spawn-errors.test.ts +++ b/src/renderer/src/components/terminal-pane/pty-transport-spawn-errors.test.ts @@ -1,5 +1,5 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { createTerminalSessionStateSaveFailureMessage } from '../../../../shared/terminal-session-state-save-failure' +import { createTerminalSessionStateSaveFailureMessage } from '../../../../shared/workspace-session/terminal-session-state-save-failure' import { installIpcPtyWindow, restorePtySpecWindow } from './pty-transport-test-harness' describe('createIpcPtyTransport', () => { diff --git a/src/renderer/src/components/terminal-pane/pty-transport-types.ts b/src/renderer/src/components/terminal-pane/pty-transport-types.ts index fcd541cff89..f1370050460 100644 --- a/src/renderer/src/components/terminal-pane/pty-transport-types.ts +++ b/src/renderer/src/components/terminal-pane/pty-transport-types.ts @@ -1,4 +1,4 @@ -import type { TerminalAttachmentLaunchResult } from '../../../../shared/terminal-attachment-launch-result' +import type { TerminalAttachmentLaunchResult } from '../../../../shared/terminal/pty/lifecycle/terminal-attachment-launch-result' import type { AgentIdleEdgeMeta } from '../../../../shared/terminal/output/terminal-output-side-effects' import type { RestoreSpawnIntent, @@ -20,7 +20,7 @@ import type { EventProps } from '../../../../shared/telemetry-events' import type { TerminalInputKind } from '../../../../shared/terminal/input/terminal-input-kind' import type { TerminalOscColorQueryReplyColors } from '../../../../shared/terminal/protocol/queries/terminal-osc-color-reply' import type { TuiAgent } from '../../../../shared/agent-launch/catalog/tui-agent' -import type { TerminalPanePlacement } from '../../../../shared/terminal-pane-placement' +import type { TerminalPanePlacement } from '../../../../shared/workspace-layout/terminal-pane-placement' import type { ExecutionHostId } from '../../../../shared/execution-host' import type { PtyDataMeta } from './pty-dispatcher' import type { diff --git a/src/renderer/src/components/terminal-pane/remote-layout-scrollback-retention.test.ts b/src/renderer/src/components/terminal-pane/remote-layout-scrollback-retention.test.ts index 228c3f9b01a..c457d589d74 100644 --- a/src/renderer/src/components/terminal-pane/remote-layout-scrollback-retention.test.ts +++ b/src/renderer/src/components/terminal-pane/remote-layout-scrollback-retention.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' import { retainLocalScrollbackInRemoteLayout } from './remote-layout-scrollback-retention' const LEAF_A = 'leaf-a' diff --git a/src/renderer/src/components/terminal-pane/remote-layout-scrollback-retention.ts b/src/renderer/src/components/terminal-pane/remote-layout-scrollback-retention.ts index 78ad7aa96be..8c4bf6a6330 100644 --- a/src/renderer/src/components/terminal-pane/remote-layout-scrollback-retention.ts +++ b/src/renderer/src/components/terminal-pane/remote-layout-scrollback-retention.ts @@ -1,4 +1,4 @@ -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' import { collectLeafIdsInOrder } from './terminal-layout-leaf-ids' import { mergeCapturedLeafState } from './merge-captured-leaf-state' diff --git a/src/renderer/src/components/terminal-pane/remote-pane-layout-push.test.ts b/src/renderer/src/components/terminal-pane/remote-pane-layout-push.test.ts index 20a406250d3..1591ae95f0c 100644 --- a/src/renderer/src/components/terminal-pane/remote-pane-layout-push.test.ts +++ b/src/renderer/src/components/terminal-pane/remote-pane-layout-push.test.ts @@ -1,6 +1,6 @@ /** Repeated title-driven persists with unchanged host-visible layout must dedupe to one remote push; count at the IPC boundary. */ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' const updateWebRuntimePaneLayout = vi.fn() vi.mock('@/runtime/web-runtime-terminal-actions', () => ({ diff --git a/src/renderer/src/components/terminal-pane/remote-pane-layout-push.ts b/src/renderer/src/components/terminal-pane/remote-pane-layout-push.ts index a62e09f3d7d..0b07071fd87 100644 --- a/src/renderer/src/components/terminal-pane/remote-pane-layout-push.ts +++ b/src/renderer/src/components/terminal-pane/remote-pane-layout-push.ts @@ -1,5 +1,5 @@ -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' -import { terminalLayoutEqual } from '../../../../shared/terminal-layout-equality' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' +import { terminalLayoutEqual } from '../../../../shared/workspace-layout/terminal-layout-equality' import { updateWebRuntimePaneLayout } from '@/runtime/web-runtime-terminal-actions' import { requeuePendingPaneTitleRenames, diff --git a/src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-stopped-host-reopen.test.ts b/src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-stopped-host-reopen.test.ts index 2ed4b9ec90b..5bf8d48e49d 100644 --- a/src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-stopped-host-reopen.test.ts +++ b/src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-stopped-host-reopen.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -vi.mock('@/store', () => ({ +vi.mock('@/store/index', () => ({ useAppStore: { getState: () => { throw new Error('These transport fixtures must not read app-store ownership') diff --git a/src/renderer/src/components/terminal-pane/remote-runtime-pty-transport.ts b/src/renderer/src/components/terminal-pane/remote-runtime-pty-transport.ts index 1e324f2726f..113b8150e39 100644 --- a/src/renderer/src/components/terminal-pane/remote-runtime-pty-transport.ts +++ b/src/renderer/src/components/terminal-pane/remote-runtime-pty-transport.ts @@ -1,4 +1,4 @@ -import { parseTerminalAttachmentLaunchResult } from '../../../../shared/terminal-attachment-launch-result' +import { parseTerminalAttachmentLaunchResult } from '../../../../shared/terminal/pty/lifecycle/terminal-attachment-launch-result' import { REMOTE_RUNTIME_PTY_HONOURS_TAB_SHELL_OVERRIDE } from './remote-runtime-pty-shell' import { terminalLaunchFacts } from '../../../../shared/agent-session/lifecycle/agent-session-resume' import { isRuntimeCompatBlockError } from '@/runtime/runtime-protocol-compat' @@ -102,7 +102,7 @@ import { replaceDriverPtyId, setDriverForPty } from '@/lib/pane-manager/mobile-d import { isWebTerminalSurfaceTabId, toHostSessionTabId -} from '../../../../shared/terminal-surface-id' +} from '../../../../shared/workspace-layout/terminal-surface-id' import { listRemoteRuntimeSessionTabsAfterCurrentInFlight } from '@/runtime/remote-runtime-session-tabs-inflight' import { subscribeAcceptedWebSessionTerminalHandle } from '@/runtime/web-session-terminal-handle-events' import { hostSnapshotAffirmsWorktreeContents } from '@/runtime/host-session-snapshot-authority' diff --git a/src/renderer/src/components/terminal-pane/remote-runtime-saved-result-consumer.test.ts b/src/renderer/src/components/terminal-pane/remote-runtime-saved-result-consumer.test.ts index 2b5a62cd2d4..c5100ab9508 100644 --- a/src/renderer/src/components/terminal-pane/remote-runtime-saved-result-consumer.test.ts +++ b/src/renderer/src/components/terminal-pane/remote-runtime-saved-result-consumer.test.ts @@ -1,5 +1,5 @@ import { afterEach, beforeEach, expect, it, vi } from 'vitest' -import type { TerminalAttachmentLaunchResult } from '../../../../shared/terminal-attachment-launch-result' +import type { TerminalAttachmentLaunchResult } from '../../../../shared/terminal/pty/lifecycle/terminal-attachment-launch-result' import type { ConnectPanePtySession } from './pty-connection/connect-pane-pty-session' import type { AgentLaunchConfigRegistryEntry } from '@/store/slices/agent-status/agent-status-contract' import { bindCaptureTransportOutputCallbacks } from './pty-connection/transport-output-callbacks' diff --git a/src/renderer/src/components/terminal-pane/replay-guard.ts b/src/renderer/src/components/terminal-pane/replay-guard.ts index f051039ad23..2016a0f9397 100644 --- a/src/renderer/src/components/terminal-pane/replay-guard.ts +++ b/src/renderer/src/components/terminal-pane/replay-guard.ts @@ -11,7 +11,7 @@ import { recordTerminalParseProgress } from '@/lib/pane-manager/terminal-write-pipeline-health' import { writeXtermParseBarrier } from '@/lib/pane-manager/xterm-parse-barrier' -import { redactPtyIdForDiagnostics } from '../../../../shared/pty-delivery-diagnostics' +import { redactPtyIdForDiagnostics } from '../../../../shared/terminal/pty/diagnostics/pty-delivery-diagnostics' // Guard replay auto-replies from shell stdin while xterm’s provenance keeps real typing flowing. diff --git a/src/renderer/src/components/terminal-pane/replayed-scrollback-store-release.test.ts b/src/renderer/src/components/terminal-pane/replayed-scrollback-store-release.test.ts index 06a0d610f24..614f0eaf9b0 100644 --- a/src/renderer/src/components/terminal-pane/replayed-scrollback-store-release.test.ts +++ b/src/renderer/src/components/terminal-pane/replayed-scrollback-store-release.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { RepoConnection } from '../../../../shared/workspace-session-terminal-buffers' +import type { RepoConnection } from '../../../../shared/workspace-session/workspace-session-terminal-buffers' import { canReleaseReplayedScrollbackFromStore } from './replayed-scrollback-store-release' const LOCAL_REPO: RepoConnection = { diff --git a/src/renderer/src/components/terminal-pane/replayed-scrollback-store-release.ts b/src/renderer/src/components/terminal-pane/replayed-scrollback-store-release.ts index 1a9575a6b8c..8f482e7d272 100644 --- a/src/renderer/src/components/terminal-pane/replayed-scrollback-store-release.ts +++ b/src/renderer/src/components/terminal-pane/replayed-scrollback-store-release.ts @@ -1,7 +1,7 @@ import { shouldPreserveTerminalScrollbackBuffers, type RepoConnection -} from '../../../../shared/workspace-session-terminal-buffers' +} from '../../../../shared/workspace-session/workspace-session-terminal-buffers' type ReplayedScrollbackReleaseArgs = { hasScrollbackRefs: boolean diff --git a/src/renderer/src/components/terminal-pane/sleeping-record-park-exemption.ts b/src/renderer/src/components/terminal-pane/sleeping-record-park-exemption.ts index 5260cdc18dd..5ad94a60d35 100644 --- a/src/renderer/src/components/terminal-pane/sleeping-record-park-exemption.ts +++ b/src/renderer/src/components/terminal-pane/sleeping-record-park-exemption.ts @@ -1,5 +1,8 @@ import type { SleepingAgentSessionRecord } from '../../../../shared/agent-session/lifecycle/agent-session-resume' -import { parseLegacyNumericPaneKey, parsePaneKey } from '../../../../shared/stable-pane-id' +import { + parseLegacyNumericPaneKey, + parsePaneKey +} from '../../../../shared/workspace-layout/stable-pane-id' import { activationTreatsNoteAsFinished } from '../../lib/sleeping-agent-pane-ownership' import { createWorktreeRecordSelector } from '@/store/worktree-record-selector-cache' diff --git a/src/renderer/src/components/terminal-pane/stale-agent-row.ts b/src/renderer/src/components/terminal-pane/stale-agent-row.ts index e51df37064b..4a1870f3bd7 100644 --- a/src/renderer/src/components/terminal-pane/stale-agent-row.ts +++ b/src/renderer/src/components/terminal-pane/stale-agent-row.ts @@ -1,6 +1,6 @@ import { toast } from 'sonner' import { useAppStore } from '@/store' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { translate } from '@/i18n/i18n' export function dismissStaleAgentRowByKey(paneKey: string): void { diff --git a/src/renderer/src/components/terminal-pane/terminal-agent-paste-bracketing.ts b/src/renderer/src/components/terminal-pane/terminal-agent-paste-bracketing.ts index 7e71446631c..b10242cceb8 100644 --- a/src/renderer/src/components/terminal-pane/terminal-agent-paste-bracketing.ts +++ b/src/renderer/src/components/terminal-pane/terminal-agent-paste-bracketing.ts @@ -3,7 +3,7 @@ import { isTuiAgent, TUI_AGENT_CONFIG } from '../../../../shared/agent-launch/catalog/tui-agent-config' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import type { PaneForegroundAgentEntry } from '../../store/slices/pane-foreground-agent' import type { TerminalPasteTextOptions } from './terminal-paste-model' diff --git a/src/renderer/src/components/terminal-pane/terminal-agent-session-continuation.ts b/src/renderer/src/components/terminal-pane/terminal-agent-session-continuation.ts index dbbd0f49800..45411402eb7 100644 --- a/src/renderer/src/components/terminal-pane/terminal-agent-session-continuation.ts +++ b/src/renderer/src/components/terminal-pane/terminal-agent-session-continuation.ts @@ -6,7 +6,7 @@ import { type AgentSessionContinuationRequest } from '@/lib/agent-session-continuation' import { useAppStore } from '@/store' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { isTuiAgent } from '../../../../shared/agent-launch/catalog/tui-agent-config' import type { TuiAgent } from '../../../../shared/agent-launch/catalog/tui-agent' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/terminal-pane/terminal-agent-session-fork.ts b/src/renderer/src/components/terminal-pane/terminal-agent-session-fork.ts index becd2e7771b..9a355713784 100644 --- a/src/renderer/src/components/terminal-pane/terminal-agent-session-fork.ts +++ b/src/renderer/src/components/terminal-pane/terminal-agent-session-fork.ts @@ -8,7 +8,7 @@ import { activateAndRevealWorktree } from '@/lib/worktree-activation' import { resolveOwner } from '@/lib/resolve-owner' import { toRuntimeExecutionHostId, type ExecutionHostId } from '../../../../shared/execution-host' import { useAppStore } from '@/store' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { TUI_AGENT_CONFIG } from '../../../../shared/agent-launch/catalog/tui-agent-config' import { getForkAgentLaunchPlatform } from './terminal-agent-session-fork-launch-platform' import { slugifyForWorkspaceName } from '../../../../shared/workspace-name' diff --git a/src/renderer/src/components/terminal-pane/terminal-attention-surface.test.ts b/src/renderer/src/components/terminal-pane/terminal-attention-surface.test.ts index 071d9a89e36..0f2bf1ae786 100644 --- a/src/renderer/src/components/terminal-pane/terminal-attention-surface.test.ts +++ b/src/renderer/src/components/terminal-pane/terminal-attention-surface.test.ts @@ -7,7 +7,7 @@ import { makeTabGroup, makeUnifiedTab } from '@/store/slices/store-test-helpers' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { FLOATING_TERMINAL_WORKTREE_ID, getDefaultSettings } from '../../../../shared/constants' import { resolveAgentAttention } from '@/attention/agent-attention-policy' diff --git a/src/renderer/src/components/terminal-pane/terminal-attention-surface.ts b/src/renderer/src/components/terminal-pane/terminal-attention-surface.ts index 46caac65a09..1bc229e6ca5 100644 --- a/src/renderer/src/components/terminal-pane/terminal-attention-surface.ts +++ b/src/renderer/src/components/terminal-pane/terminal-attention-surface.ts @@ -7,7 +7,7 @@ import type { AgentAttentionSurfaceSubject, AgentAttentionLiveness } from '@/attention/agent-attention-contract' -import { isTerminalLeafId, makePaneKey } from '../../../../shared/stable-pane-id' +import { isTerminalLeafId, makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { getPaneKeyTabId, hasLivePtyForNotification, diff --git a/src/renderer/src/components/terminal-pane/terminal-chat-ownership-lifecycle.test.tsx b/src/renderer/src/components/terminal-pane/terminal-chat-ownership-lifecycle.test.tsx index 6f62f08d060..55ace2f871f 100644 --- a/src/renderer/src/components/terminal-pane/terminal-chat-ownership-lifecycle.test.tsx +++ b/src/renderer/src/components/terminal-pane/terminal-chat-ownership-lifecycle.test.tsx @@ -2,12 +2,12 @@ import { act, cleanup, renderHook } from '@testing-library/react' import { useEffect, useState } from 'react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' import { useTerminalPaneChatState } from './use-terminal-pane-chat-state' import { useTerminalPaneLayoutPersistence } from './use-terminal-pane-layout-persistence' import { resolveNativeChatLeafRoute } from '../native-chat/native-chat-leaf-routing' import { detachTerminalLayoutLeaf } from './terminal-layout-leaf-detach' -import { parseWorkspaceSession } from '../../../../shared/workspace-session-schema' +import { parseWorkspaceSession } from '../../../../shared/workspace-session/workspace-session-schema' import type { RemotePaneLayoutPusher } from './remote-pane-layout-push' const LEFT = '11111111-1111-4111-8111-111111111111' @@ -42,7 +42,8 @@ const mocks = vi.hoisted(() => { }) vi.mock('../../store', async () => { const { create } = await import('zustand') - const { terminalLayoutEqual } = await import('../../../../shared/terminal-layout-equality') + const { terminalLayoutEqual } = + await import('../../../../shared/workspace-layout/terminal-layout-equality') mocks.state.setTabLayout = (id, layout) => { if (terminalLayoutEqual(mocks.state.terminalLayoutsByTabId[id], layout)) { return diff --git a/src/renderer/src/components/terminal-pane/terminal-cold-park-exempt-flip.react185.test.tsx b/src/renderer/src/components/terminal-pane/terminal-cold-park-exempt-flip.react185.test.tsx index 48e6bdea7ba..c0fa20bd9fe 100644 --- a/src/renderer/src/components/terminal-pane/terminal-cold-park-exempt-flip.react185.test.tsx +++ b/src/renderer/src/components/terminal-pane/terminal-cold-park-exempt-flip.react185.test.tsx @@ -5,7 +5,7 @@ import type * as ReactModule from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { Tab, TabGroup } from '../../../../shared/tab-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type * as ParkedTabWatchersModule from './terminal-parked-tab-watchers' ;(globalThis as { IS_REACT_ACT_ENVIRONMENT?: boolean }).IS_REACT_ACT_ENVIRONMENT = true diff --git a/src/renderer/src/components/terminal-pane/terminal-cold-park-pre-gate-loop.react185.test.tsx b/src/renderer/src/components/terminal-pane/terminal-cold-park-pre-gate-loop.react185.test.tsx index 5f4db2d3878..b069d5b1787 100644 --- a/src/renderer/src/components/terminal-pane/terminal-cold-park-pre-gate-loop.react185.test.tsx +++ b/src/renderer/src/components/terminal-pane/terminal-cold-park-pre-gate-loop.react185.test.tsx @@ -4,7 +4,7 @@ import type * as ReactModule from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { Tab, TabGroup } from '../../../../shared/tab-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' ;(globalThis as { IS_REACT_ACT_ENVIRONMENT?: boolean }).IS_REACT_ACT_ENVIRONMENT = true diff --git a/src/renderer/src/components/terminal-pane/terminal-cold-park-subscription-narrowing.react185.test.tsx b/src/renderer/src/components/terminal-pane/terminal-cold-park-subscription-narrowing.react185.test.tsx index be2d19cbb76..2c8161e19f1 100644 --- a/src/renderer/src/components/terminal-pane/terminal-cold-park-subscription-narrowing.react185.test.tsx +++ b/src/renderer/src/components/terminal-pane/terminal-cold-park-subscription-narrowing.react185.test.tsx @@ -3,7 +3,7 @@ import { act } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { SleepingAgentSessionRecord } from '../../../../shared/agent-session/lifecycle/agent-session-resume' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' ;(globalThis as { IS_REACT_ACT_ENVIRONMENT?: boolean }).IS_REACT_ACT_ENVIRONMENT = true diff --git a/src/renderer/src/components/terminal-pane/terminal-cold-park-tab-model-identity.react185.test.tsx b/src/renderer/src/components/terminal-pane/terminal-cold-park-tab-model-identity.react185.test.tsx index 7666a34d432..8991d8c722e 100644 --- a/src/renderer/src/components/terminal-pane/terminal-cold-park-tab-model-identity.react185.test.tsx +++ b/src/renderer/src/components/terminal-pane/terminal-cold-park-tab-model-identity.react185.test.tsx @@ -5,7 +5,7 @@ import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { REACT_NESTED_UPDATE_LIMIT } from '../../../../shared/react-update-depth-attribution' import type { Tab, TabGroup } from '../../../../shared/tab-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' ;(globalThis as { IS_REACT_ACT_ENVIRONMENT?: boolean }).IS_REACT_ACT_ENVIRONMENT = true diff --git a/src/renderer/src/components/terminal-pane/terminal-cold-park-timer-rearm.test.tsx b/src/renderer/src/components/terminal-pane/terminal-cold-park-timer-rearm.test.tsx index 3bf79941d99..07239dc2ef0 100644 --- a/src/renderer/src/components/terminal-pane/terminal-cold-park-timer-rearm.test.tsx +++ b/src/renderer/src/components/terminal-pane/terminal-cold-park-timer-rearm.test.tsx @@ -3,7 +3,7 @@ import { act, useEffect, useState } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' ;(globalThis as { IS_REACT_ACT_ENVIRONMENT?: boolean }).IS_REACT_ACT_ENVIRONMENT = true const park = vi.hoisted(() => ({ diff --git a/src/renderer/src/components/terminal-pane/terminal-cold-park-verdict-loop.test.tsx b/src/renderer/src/components/terminal-pane/terminal-cold-park-verdict-loop.test.tsx index ae2927bb6d9..3f6c0c1cd8e 100644 --- a/src/renderer/src/components/terminal-pane/terminal-cold-park-verdict-loop.test.tsx +++ b/src/renderer/src/components/terminal-pane/terminal-cold-park-verdict-loop.test.tsx @@ -3,7 +3,7 @@ import { act, useEffect, useRef, useState } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' ;(globalThis as { IS_REACT_ACT_ENVIRONMENT?: boolean }).IS_REACT_ACT_ENVIRONMENT = true diff --git a/src/renderer/src/components/terminal-pane/terminal-cold-park-withheld-tabs.ts b/src/renderer/src/components/terminal-pane/terminal-cold-park-withheld-tabs.ts index 80b764bd4b2..e7a027c56da 100644 --- a/src/renderer/src/components/terminal-pane/terminal-cold-park-withheld-tabs.ts +++ b/src/renderer/src/components/terminal-pane/terminal-cold-park-withheld-tabs.ts @@ -1,5 +1,5 @@ /** Keep panes mounted when watchers cannot cover them or flip damping pins them; return pin expiry because settled damping removes the other wakeups. */ -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { getParkVerdictUnparkPinUntilMs, type ParkVerdictFlipRecord diff --git a/src/renderer/src/components/terminal-pane/terminal-delivery-watchdog.test.ts b/src/renderer/src/components/terminal-pane/terminal-delivery-watchdog.test.ts index 8fde9cef5dd..95b00313a97 100644 --- a/src/renderer/src/components/terminal-pane/terminal-delivery-watchdog.test.ts +++ b/src/renderer/src/components/terminal-pane/terminal-delivery-watchdog.test.ts @@ -1,6 +1,6 @@ // Confirm dead push delivery over two silent ticks, then heal through invoke once per cooldown: reattach first and deliver pulled restore markers locally. import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { PtyRendererDeliveryHealthReply } from '../../../../shared/pty-renderer-delivery-health' +import type { PtyRendererDeliveryHealthReply } from '../../../../shared/terminal/pty/diagnostics/pty-renderer-delivery-health' vi.mock('@/lib/e2e-config', () => ({ e2eConfig: { exposeStore: false } })) diff --git a/src/renderer/src/components/terminal-pane/terminal-delivery-watchdog.ts b/src/renderer/src/components/terminal-pane/terminal-delivery-watchdog.ts index 827fa2fb23d..c38e1879c18 100644 --- a/src/renderer/src/components/terminal-pane/terminal-delivery-watchdog.ts +++ b/src/renderer/src/components/terminal-pane/terminal-delivery-watchdog.ts @@ -1,7 +1,7 @@ /** Invoke can survive dead main → renderer push delivery; ACK probes use that same dead push channel, so detect and pull-restore through invoke. Skip IPC while output flows or no PTY expects delivery. */ import { e2eConfig } from '@/lib/e2e-config' -import type { PtyRendererDeliveryHealthReply } from '../../../../shared/pty-renderer-delivery-health' -import { redactPtyIdForDiagnostics } from '../../../../shared/pty-delivery-diagnostics' +import type { PtyRendererDeliveryHealthReply } from '../../../../shared/terminal/pty/diagnostics/pty-renderer-delivery-health' +import { redactPtyIdForDiagnostics } from '../../../../shared/terminal/pty/diagnostics/pty-delivery-diagnostics' import { deliverPulledPtyModelRestoreMarkers } from './pty-model-restore-channel' import { getProcessedPtyCharTotals } from './terminal-pty-ack-gate' import { recordTerminalFreezeBreadcrumb } from './terminal-freeze-breadcrumbs' diff --git a/src/renderer/src/components/terminal-pane/terminal-drop-path-writer.ts b/src/renderer/src/components/terminal-pane/terminal-drop-path-writer.ts index c45a2ded58b..ff52b889d16 100644 --- a/src/renderer/src/components/terminal-pane/terminal-drop-path-writer.ts +++ b/src/renderer/src/components/terminal-pane/terminal-drop-path-writer.ts @@ -1,6 +1,7 @@ import type { PaneManager } from '@/lib/pane-manager/pane-manager' import { separateImagePasteFromFollowingText } from '../../../../shared/image-paste-following-text' -import { shellEscapePath } from './pane-helpers' +import './pane-helpers' +import { shellEscapePath } from '../../../../shared/shell/launch/shell-path-quoting' import type { PtyTransport } from './pty-transport-types' import './terminal-bracketed-paste' import { wrapTerminalBracketedPasteText } from '../../../../shared/terminal/input/terminal-bracketed-paste-text' diff --git a/src/renderer/src/components/terminal-pane/terminal-error-accumulation.test.ts b/src/renderer/src/components/terminal-pane/terminal-error-accumulation.test.ts index e4c9d45b619..07e64269e85 100644 --- a/src/renderer/src/components/terminal-pane/terminal-error-accumulation.test.ts +++ b/src/renderer/src/components/terminal-pane/terminal-error-accumulation.test.ts @@ -9,7 +9,7 @@ import { terminalErrorForPane } from './terminal-error-accumulation' import { stripSshReconnectOwnedErrorLines } from './TerminalErrorToast' -import { PTY_ALLOCATION_HINT } from '../../../../shared/terminal-spawn-error-copy' +import { PTY_ALLOCATION_HINT } from '../../../../shared/terminal/pty/lifecycle/terminal-spawn-error-copy' const MULTILINE_ERROR = 'Remote terminal write failed.\nThe remote runtime rejected the request.' diff --git a/src/renderer/src/components/terminal-pane/terminal-error-accumulation.ts b/src/renderer/src/components/terminal-pane/terminal-error-accumulation.ts index b9322a70f74..35da942b828 100644 --- a/src/renderer/src/components/terminal-pane/terminal-error-accumulation.ts +++ b/src/renderer/src/components/terminal-pane/terminal-error-accumulation.ts @@ -1,5 +1,5 @@ import { flattenRetainedSlice } from '../../lib/flatten-retained-slice' -import { isTerminalResourceLimitError } from '../../../../shared/terminal-spawn-resource-error' +import { isTerminalResourceLimitError } from '../../../../shared/terminal/pty/lifecycle/terminal-spawn-resource-error' // Legacy tab messages render as newline-joined text and need whole-run dedup; pane errors stay separate until render. function containsWholeLineRun(accumulated: string, message: string): boolean { diff --git a/src/renderer/src/components/terminal-pane/terminal-freeze-breadcrumbs.ts b/src/renderer/src/components/terminal-pane/terminal-freeze-breadcrumbs.ts index 82f03d5b068..c71cd766e5e 100644 --- a/src/renderer/src/components/terminal-pane/terminal-freeze-breadcrumbs.ts +++ b/src/renderer/src/components/terminal-pane/terminal-freeze-breadcrumbs.ts @@ -3,7 +3,7 @@ import { recordRendererCrashBreadcrumb } from '@/lib/crash-breadcrumb-recorder' import { type PtyDeliveryBreadcrumb, createPtyDeliveryBreadcrumbRing -} from '../../../../shared/pty-delivery-diagnostics' +} from '../../../../shared/terminal/pty/diagnostics/pty-delivery-diagnostics' import { TERMINAL_WEBGL_DIAGNOSTIC_BREADCRUMB, recordTerminalWebglDiagnostic, diff --git a/src/renderer/src/components/terminal-pane/terminal-handle-copy.ts b/src/renderer/src/components/terminal-pane/terminal-handle-copy.ts index 84209dbecac..b34852a5f7f 100644 --- a/src/renderer/src/components/terminal-pane/terminal-handle-copy.ts +++ b/src/renderer/src/components/terminal-pane/terminal-handle-copy.ts @@ -1,5 +1,5 @@ import type { RuntimeRpcResponse } from '../../../../shared/runtime-rpc-envelope' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { isRemoteRuntimePtyId, parseRemoteRuntimePtyId diff --git a/src/renderer/src/components/terminal-pane/terminal-hidden-view-parking.ts b/src/renderer/src/components/terminal-pane/terminal-hidden-view-parking.ts index e1a2d86318d..0baaa52278d 100644 --- a/src/renderer/src/components/terminal-pane/terminal-hidden-view-parking.ts +++ b/src/renderer/src/components/terminal-pane/terminal-hidden-view-parking.ts @@ -1,9 +1,9 @@ import { isRemoteRuntimePtyId } from '../../../../shared/remote-runtime/remote-runtime-pty-id' import { isRemoteExecutionHostPtyId } from '../../../../shared/remote-execution-host-pty-id' import { getRemoteRuntimePtyEnvironmentId } from '@/runtime/runtime-terminal-stream' -import { PTY_SESSION_ID_SEPARATOR } from '../../../../shared/pty-session-id-format' +import { PTY_SESSION_ID_SEPARATOR } from '../../../../shared/terminal/pty/lifecycle/pty-session-id-format' import { parseAppSshPtyId } from '../../../../shared/ssh-pty-id' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' // Hysteresis avoids quick-switch remounts; bounded hot-retain keeps recent worktrees warm. Reducing remount frequency matters more than replay size. export const TERMINAL_WORKTREE_COLD_PARK_DELAY_MS = 30_000 diff --git a/src/renderer/src/components/terminal-pane/terminal-hidden-worktree-retention.test.ts b/src/renderer/src/components/terminal-pane/terminal-hidden-worktree-retention.test.ts index 30309121446..e16ea39d4cd 100644 --- a/src/renderer/src/components/terminal-pane/terminal-hidden-worktree-retention.test.ts +++ b/src/renderer/src/components/terminal-pane/terminal-hidden-worktree-retention.test.ts @@ -1,5 +1,5 @@ import { afterEach, beforeEach, describe, expect, it } from 'vitest' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { TERMINAL_WORKTREE_PARK_DELAY_MS } from './terminal-hidden-view-parking' import { clearTerminalProviderSnapshotCapabilities, diff --git a/src/renderer/src/components/terminal-pane/terminal-hidden-worktree-retention.ts b/src/renderer/src/components/terminal-pane/terminal-hidden-worktree-retention.ts index 27e2c172be9..7d72e54ba82 100644 --- a/src/renderer/src/components/terminal-pane/terminal-hidden-worktree-retention.ts +++ b/src/renderer/src/components/terminal-pane/terminal-hidden-worktree-retention.ts @@ -1,6 +1,6 @@ import { isRemoteRuntimePtyId } from '../../../../shared/remote-runtime/remote-runtime-pty-id' import { isRemoteExecutionHostPtyId } from '../../../../shared/remote-execution-host-pty-id' -import { PTY_SESSION_ID_SEPARATOR } from '../../../../shared/pty-session-id-format' +import { PTY_SESSION_ID_SEPARATOR } from '../../../../shared/terminal/pty/lifecycle/pty-session-id-format' import { terminalProviderHasAuthoritativeSnapshot } from '../terminal/terminal-provider-snapshot-capability' import { TERMINAL_WORKTREE_COLD_PARK_DELAY_MS, @@ -8,7 +8,7 @@ import { type ColdParkRetainCandidate, type TerminalColdParkPolicyOverrides } from './terminal-hidden-view-parking' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { createWorktreeTabBucketProjection } from '@/lib/worktree-tab-bucket-projection' // Budget hidden worktrees by count and absolute TTL: measured pane heap grows with scrollback. Last-active exempts only the cap; unrestorable live tabs must remain mounted, and scrollback depth is unbounded, so force-park may free nothing. diff --git a/src/renderer/src/components/terminal-pane/terminal-input-activity.ts b/src/renderer/src/components/terminal-pane/terminal-input-activity.ts index 51e581d618a..4b157d995ea 100644 --- a/src/renderer/src/components/terminal-pane/terminal-input-activity.ts +++ b/src/renderer/src/components/terminal-pane/terminal-input-activity.ts @@ -1,4 +1,4 @@ -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { useAppStore } from '@/store' export function recordTerminalUserInputForLeaf(tabId: string, leafId: string): void { diff --git a/src/renderer/src/components/terminal-pane/terminal-keyboard-runtime.ts b/src/renderer/src/components/terminal-pane/terminal-keyboard-runtime.ts index 449ae9e5324..fab02f76696 100644 --- a/src/renderer/src/components/terminal-pane/terminal-keyboard-runtime.ts +++ b/src/renderer/src/components/terminal-pane/terminal-keyboard-runtime.ts @@ -26,7 +26,7 @@ import { } from './terminal-captured-input-dispatch' import { recordTerminalUserInputForLeaf } from './terminal-input-activity' import { useAppStore } from '@/store' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { resolveWindowsShiftEnterEncodingForPane } from './terminal-windows-shift-enter' import { hasCtrlEnterCsiUAuthorityForPane } from './terminal-ctrl-enter' import { titleHasExplicitAgentIdentity } from './title-agent-identity' diff --git a/src/renderer/src/components/terminal-pane/terminal-layout-leaf-detach.ts b/src/renderer/src/components/terminal-pane/terminal-layout-leaf-detach.ts index ffa88d60783..f25e5d99b71 100644 --- a/src/renderer/src/components/terminal-pane/terminal-layout-leaf-detach.ts +++ b/src/renderer/src/components/terminal-pane/terminal-layout-leaf-detach.ts @@ -1,7 +1,7 @@ import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode -} from '../../../../shared/terminal-tab-types' +} from '../../../../shared/workspace-layout/terminal-tab-types' import { collectLeafIdsInOrder, normalizeTerminalLayoutSnapshot, diff --git a/src/renderer/src/components/terminal-pane/terminal-layout-leaf-ids.test.ts b/src/renderer/src/components/terminal-pane/terminal-layout-leaf-ids.test.ts index 813c0a0112a..59116d282c1 100644 --- a/src/renderer/src/components/terminal-pane/terminal-layout-leaf-ids.test.ts +++ b/src/renderer/src/components/terminal-pane/terminal-layout-leaf-ids.test.ts @@ -2,7 +2,7 @@ import { describe, expect, it } from 'vitest' import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode -} from '../../../../shared/terminal-tab-types' +} from '../../../../shared/workspace-layout/terminal-tab-types' import { normalizeTerminalLayoutSnapshot } from './terminal-layout-leaf-ids' const LEAF_1 = '11111111-1111-4111-8111-111111111111' diff --git a/src/renderer/src/components/terminal-pane/terminal-layout-leaf-ids.ts b/src/renderer/src/components/terminal-pane/terminal-layout-leaf-ids.ts index eb2e408d49b..3ce66381dc6 100644 --- a/src/renderer/src/components/terminal-pane/terminal-layout-leaf-ids.ts +++ b/src/renderer/src/components/terminal-pane/terminal-layout-leaf-ids.ts @@ -1,10 +1,13 @@ import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode -} from '../../../../shared/terminal-tab-types' -import { isTerminalLeafId, type TerminalLeafId } from '../../../../shared/stable-pane-id' +} from '../../../../shared/workspace-layout/terminal-tab-types' +import { + isTerminalLeafId, + type TerminalLeafId +} from '../../../../shared/workspace-layout/stable-pane-id' import { mintStablePaneId } from '@/lib/pane-manager/mint-stable-pane-id' -import { normalizeTerminalLayoutPtyOwnership } from '../../../../shared/terminal-layout-pty-ownership' +import { normalizeTerminalLayoutPtyOwnership } from '../../../../shared/workspace-layout/terminal-layout-pty-ownership' import { resolveRootlessTerminalLayoutLeafId } from '../../../../shared/workspace-layout/terminal-pane-tree' const EMPTY_TERMINAL_LAYOUT: TerminalLayoutSnapshot = { diff --git a/src/renderer/src/components/terminal-pane/terminal-layout-pty-ownership-depth.test.ts b/src/renderer/src/components/terminal-pane/terminal-layout-pty-ownership-depth.test.ts index dc557301175..3b16d3e5007 100644 --- a/src/renderer/src/components/terminal-pane/terminal-layout-pty-ownership-depth.test.ts +++ b/src/renderer/src/components/terminal-pane/terminal-layout-pty-ownership-depth.test.ts @@ -1,6 +1,6 @@ import { expect, it } from 'vitest' -import type { TerminalPaneLayoutNode } from '../../../../shared/terminal-tab-types' -import { normalizeTerminalLayoutPtyOwnership } from '../../../../shared/terminal-layout-pty-ownership' +import type { TerminalPaneLayoutNode } from '../../../../shared/workspace-layout/terminal-tab-types' +import { normalizeTerminalLayoutPtyOwnership } from '../../../../shared/workspace-layout/terminal-layout-pty-ownership' it('prunes deeply nested duplicate ownership without recursive stack growth', () => { const leafCount = 12_000 diff --git a/src/renderer/src/components/terminal-pane/terminal-layout-pty-ownership.test.ts b/src/renderer/src/components/terminal-pane/terminal-layout-pty-ownership.test.ts index c162de1fc67..2b7eaefcc9a 100644 --- a/src/renderer/src/components/terminal-pane/terminal-layout-pty-ownership.test.ts +++ b/src/renderer/src/components/terminal-pane/terminal-layout-pty-ownership.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest' -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' import { normalizeTerminalLayoutSnapshot } from './terminal-layout-leaf-ids' -import { normalizeTerminalLayoutPtyOwnership } from '../../../../shared/terminal-layout-pty-ownership' +import { normalizeTerminalLayoutPtyOwnership } from '../../../../shared/workspace-layout/terminal-layout-pty-ownership' const LEAF_1 = '11111111-1111-4111-8111-111111111111' const LEAF_2 = '22222222-2222-4222-8222-222222222222' diff --git a/src/renderer/src/components/terminal-pane/terminal-live-layout-reconciliation.test.ts b/src/renderer/src/components/terminal-pane/terminal-live-layout-reconciliation.test.ts index e85f82708d8..1441c64f984 100644 --- a/src/renderer/src/components/terminal-pane/terminal-live-layout-reconciliation.test.ts +++ b/src/renderer/src/components/terminal-pane/terminal-live-layout-reconciliation.test.ts @@ -6,7 +6,7 @@ import { selectRetiredPaneIds, trackRetiredLeafIds } from './terminal-live-layout-reconciliation' -import type { TerminalPaneLayoutNode } from '../../../../shared/terminal-tab-types' +import type { TerminalPaneLayoutNode } from '../../../../shared/workspace-layout/terminal-tab-types' const LOCAL_PTY = 'pty-local-123' const REMOTE_PTY = 'remote:env-1@@term_abc' diff --git a/src/renderer/src/components/terminal-pane/terminal-live-layout-reconciliation.ts b/src/renderer/src/components/terminal-pane/terminal-live-layout-reconciliation.ts index 1df81588479..71ee5258e47 100644 --- a/src/renderer/src/components/terminal-pane/terminal-live-layout-reconciliation.ts +++ b/src/renderer/src/components/terminal-pane/terminal-live-layout-reconciliation.ts @@ -1,9 +1,9 @@ import type { TerminalPaneLayoutNode, TerminalPaneSplitDirection -} from '../../../../shared/terminal-tab-types' +} from '../../../../shared/workspace-layout/terminal-tab-types' import { isRemoteRuntimePtyId } from '../../../../shared/remote-runtime/remote-runtime-pty-id' -import { collectLeafIds } from '../../../../shared/terminal-pane-layout-tree' +import { collectLeafIds } from '../../../../shared/workspace-layout/terminal-pane-layout-tree' /** Materialize host-published layouts for web/mobile and desktop remote-runtime tabs; local desktop splits create panes directly. */ export function isHostAuthoritativeLayout(args: { diff --git a/src/renderer/src/components/terminal-pane/terminal-notification-state.ts b/src/renderer/src/components/terminal-pane/terminal-notification-state.ts index 786740c0f32..8dd29a1a686 100644 --- a/src/renderer/src/components/terminal-pane/terminal-notification-state.ts +++ b/src/renderer/src/components/terminal-pane/terminal-notification-state.ts @@ -18,8 +18,8 @@ import type { ExecutionHostId } from '../../../../shared/execution-host' import type { Repo } from '../../../../shared/repo-types' import type { Worktree } from '../../../../shared/worktree/types' import { parseWorkspaceKey } from '../../../../shared/workspace-scope' -import { parsePaneKey } from '../../../../shared/stable-pane-id' -import type { TerminalPaneLayoutNode } from '../../../../shared/terminal-tab-types' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' +import type { TerminalPaneLayoutNode } from '../../../../shared/workspace-layout/terminal-tab-types' import { selectFolderWorkspaces, selectWorktreesByRepo } from '@/store/workspace-record-selectors' type StoreSnapshot = ReturnType diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-attention-subscriptions.test.ts b/src/renderer/src/components/terminal-pane/terminal-pane-attention-subscriptions.test.ts index 1bd0f84b1a7..544c58785e7 100644 --- a/src/renderer/src/components/terminal-pane/terminal-pane-attention-subscriptions.test.ts +++ b/src/renderer/src/components/terminal-pane/terminal-pane-attention-subscriptions.test.ts @@ -1,5 +1,5 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' const storeMock = vi.hoisted(() => ({ state: { diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-attention-subscriptions.ts b/src/renderer/src/components/terminal-pane/terminal-pane-attention-subscriptions.ts index 4dd2f947441..24265a91538 100644 --- a/src/renderer/src/components/terminal-pane/terminal-pane-attention-subscriptions.ts +++ b/src/renderer/src/components/terminal-pane/terminal-pane-attention-subscriptions.ts @@ -1,6 +1,6 @@ import { useAppStore } from '@/store' import type { PaneManager } from '@/lib/pane-manager/pane-manager' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' type TerminalPaneAttentionListener = () => void diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-close-identity.ts b/src/renderer/src/components/terminal-pane/terminal-pane-close-identity.ts index cffcd58d6aa..3179d0a6a2f 100644 --- a/src/renderer/src/components/terminal-pane/terminal-pane-close-identity.ts +++ b/src/renderer/src/components/terminal-pane/terminal-pane-close-identity.ts @@ -1,4 +1,4 @@ -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' export function shouldClearLaunchAgentForClosedPane( tab: Pick | null | undefined, diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-detach-layout-owner.test.ts b/src/renderer/src/components/terminal-pane/terminal-pane-detach-layout-owner.test.ts index 71f00dfc2a3..ccf34e0606c 100644 --- a/src/renderer/src/components/terminal-pane/terminal-pane-detach-layout-owner.test.ts +++ b/src/renderer/src/components/terminal-pane/terminal-pane-detach-layout-owner.test.ts @@ -3,7 +3,7 @@ import type { sendLayoutCommandToOwner } from '@/runtime/layout-owner-command' import type { TerminalLeafMoveRequest, TerminalLeafMoveResult -} from '../../../../shared/terminal-leaf-move' +} from '../../../../shared/workspace-layout/terminal-leaf-move' import { moveLeafThroughLayoutOwner } from './terminal-pane-detach-layout-owner' import { detachTerminalPaneToTab } from './terminal-pane-tab-detach' import { diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-detach-layout-owner.ts b/src/renderer/src/components/terminal-pane/terminal-pane-detach-layout-owner.ts index d09c4067213..41c51e0967f 100644 --- a/src/renderer/src/components/terminal-pane/terminal-pane-detach-layout-owner.ts +++ b/src/renderer/src/components/terminal-pane/terminal-pane-detach-layout-owner.ts @@ -3,7 +3,7 @@ import { useAppStore } from '@/store' import type { TerminalLeafMoveRequest, TerminalLeafMoveResult -} from '../../../../shared/terminal-leaf-move' +} from '../../../../shared/workspace-layout/terminal-leaf-move' /** Ask the layout-owning main to move the pane and name its tab; use paired main only when its frames draw the workspace. Fall back to window moves for unowned or legacy tab/pane identities main lacks. */ export function moveLeafThroughLayoutOwner( diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-element-file-drop.test.tsx b/src/renderer/src/components/terminal-pane/terminal-pane-element-file-drop.test.tsx index f845511a2db..163d3522904 100644 --- a/src/renderer/src/components/terminal-pane/terminal-pane-element-file-drop.test.tsx +++ b/src/renderer/src/components/terminal-pane/terminal-pane-element-file-drop.test.tsx @@ -2,7 +2,7 @@ import { act, cleanup, render } from '@testing-library/react' import { createPortal } from 'react-dom' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { isTerminalLeafId } from '../../../../shared/stable-pane-id' +import { isTerminalLeafId } from '../../../../shared/workspace-layout/stable-pane-id' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../../shared/constants' import type { PreparedDroppedPaths } from '../../../../shared/native-file-drop-preparation' import type { PaneManager } from '@/lib/pane-manager/pane-manager' diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-frame-reconciliation.test.ts b/src/renderer/src/components/terminal-pane/terminal-pane-frame-reconciliation.test.ts index ca4dea2bb05..206ca190dc0 100644 --- a/src/renderer/src/components/terminal-pane/terminal-pane-frame-reconciliation.test.ts +++ b/src/renderer/src/components/terminal-pane/terminal-pane-frame-reconciliation.test.ts @@ -1,7 +1,7 @@ // @vitest-environment happy-dom import { afterEach, beforeEach, describe, expect, it, vi, type Mock } from 'vitest' import type { PaneManagerOptions } from '@/lib/pane-manager/pane-manager-types' -import type { TerminalPaneLayoutNode } from '../../../../shared/terminal-tab-types' +import type { TerminalPaneLayoutNode } from '../../../../shared/workspace-layout/terminal-tab-types' import { _resetLayoutOwnerPaneIntentsForTests, expectPaneToClose, diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-frame-reconciliation.ts b/src/renderer/src/components/terminal-pane/terminal-pane-frame-reconciliation.ts index 3b1cf020f4d..4172578ed7e 100644 --- a/src/renderer/src/components/terminal-pane/terminal-pane-frame-reconciliation.ts +++ b/src/renderer/src/components/terminal-pane/terminal-pane-frame-reconciliation.ts @@ -1,12 +1,12 @@ import type { PaneManager } from '@/lib/pane-manager/pane-manager' -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' import { type PaneCloseKind, takePaneCloseIntent, takePaneMountUnfocused } from '@/runtime/layout-owner-pane-intents' import { planTerminalLiveLayoutInsertions } from './terminal-live-layout-reconciliation' -import { collectLeafIds } from '../../../../shared/terminal-pane-layout-tree' +import { collectLeafIds } from '../../../../shared/workspace-layout/terminal-pane-layout-tree' /** Draw main’s tree by mounting added panes, attaching main-started terminals and moving existing panes/ratios. Apply requested local closes; other removals wait for main’s notice. Return whether panes changed. */ export function reconcileMountedPanesToLayout(args: { diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-layout-owner-gestures.test.ts b/src/renderer/src/components/terminal-pane/terminal-pane-layout-owner-gestures.test.ts index d50c8ec4fe4..58cc637a3e4 100644 --- a/src/renderer/src/components/terminal-pane/terminal-pane-layout-owner-gestures.test.ts +++ b/src/renderer/src/components/terminal-pane/terminal-pane-layout-owner-gestures.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type { PaneManager } from '@/lib/pane-manager/pane-manager' -import type { TerminalPaneLayoutNode } from '../../../../shared/terminal-tab-types' +import type { TerminalPaneLayoutNode } from '../../../../shared/workspace-layout/terminal-tab-types' import { layoutOwnerPaneGestures } from './terminal-pane-layout-owner-gestures' import { withPaneSplitRatios } from '../../../../shared/workspace-layout/split-ratio-intents' import type { sendLayoutCommandToOwner } from '@/runtime/layout-owner-command' diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-layout-owner-gestures.ts b/src/renderer/src/components/terminal-pane/terminal-pane-layout-owner-gestures.ts index 50b64144175..37613c5770b 100644 --- a/src/renderer/src/components/terminal-pane/terminal-pane-layout-owner-gestures.ts +++ b/src/renderer/src/components/terminal-pane/terminal-pane-layout-owner-gestures.ts @@ -1,5 +1,5 @@ import type { PaneManager, PaneManagerOptions } from '@/lib/pane-manager/pane-manager' -import type { TerminalPaneLayoutNode } from '../../../../shared/terminal-tab-types' +import type { TerminalPaneLayoutNode } from '../../../../shared/workspace-layout/terminal-tab-types' import { useAppStore } from '@/store' import { sendLayoutCommandToOwner } from '@/runtime/layout-owner-command' import { layoutFrameTerminalTab } from '@/runtime/layout-frame-terminal-panes' diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-layout-snapshot-merge.ts b/src/renderer/src/components/terminal-pane/terminal-pane-layout-snapshot-merge.ts index 7ed2ce0c414..04913bb56ad 100644 --- a/src/renderer/src/components/terminal-pane/terminal-pane-layout-snapshot-merge.ts +++ b/src/renderer/src/components/terminal-pane/terminal-pane-layout-snapshot-merge.ts @@ -1,4 +1,4 @@ -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' import { mergeCapturedLeafState } from './merge-captured-leaf-state' /** Carries the saved scrollback of `leafIds` into a freshly serialized layout. */ diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-lifecycle-primitives.ts b/src/renderer/src/components/terminal-pane/terminal-pane-lifecycle-primitives.ts index 057a6af8d21..ac474535dd3 100644 --- a/src/renderer/src/components/terminal-pane/terminal-pane-lifecycle-primitives.ts +++ b/src/renderer/src/components/terminal-pane/terminal-pane-lifecycle-primitives.ts @@ -1,12 +1,18 @@ import { isRemoteRuntimePtyId } from '../../../../shared/remote-runtime/remote-runtime-pty-id' import type { Terminal } from '@xterm/xterm' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../../shared/workspace-layout/terminal-tab-types' import type { PtyPaneStartup } from './pty-connection-types' import type { PtyTransport } from './pty-transport-types' import type { PaneCwdMap } from './resolve-split-cwd' import type { TerminalPaneSplitSource } from '../../../../shared/feature-education-telemetry' -import type { HttpLinkSourceOwner } from '@/lib/http-link-routing' -import { resolveLocalhostHttpLinkDisplayUrl } from '@/lib/http-link-routing' + +import { + type HttpLinkSourceOwner, + resolveLocalhostHttpLinkDisplayUrl +} from '@/lib/http-link-routing' import { recordCreatedTerminalPaneSplit } from './terminal-pane-split-completion' import { PRIMARY_SELECTION_MAX_LENGTH } from '@/lib/primary-selection' diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-lifecycle-types.ts b/src/renderer/src/components/terminal-pane/terminal-pane-lifecycle-types.ts index b763ae935ff..78e586b271c 100644 --- a/src/renderer/src/components/terminal-pane/terminal-pane-lifecycle-types.ts +++ b/src/renderer/src/components/terminal-pane/terminal-pane-lifecycle-types.ts @@ -5,7 +5,7 @@ import type { IDisposable } from '@xterm/xterm' import type { ParsedAgentStatusPayload } from '../../../../shared/agent-status/contracts/agent-status-types' import type { TerminalKittyKeyboardModeTracker } from '../../../../shared/terminal/protocol/input-modes/terminal-kitty-keyboard-mode-tracker' import type { GlobalSettings } from '../../../../shared/global-settings-types' -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' import type { PaneExternalDropHandler, PaneExternalDropResolver, diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-menu-copy-actions.ts b/src/renderer/src/components/terminal-pane/terminal-pane-menu-copy-actions.ts index 4a9d61b8432..7e50578d908 100644 --- a/src/renderer/src/components/terminal-pane/terminal-pane-menu-copy-actions.ts +++ b/src/renderer/src/components/terminal-pane/terminal-pane-menu-copy-actions.ts @@ -1,6 +1,6 @@ import { toast } from 'sonner' import type { ManagedPane } from '@/lib/pane-manager/pane-manager' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { translate } from '@/i18n/i18n' import { copyTerminalHandleForPane } from './terminal-handle-copy' import { runTerminalCopy, runTerminalIdentityCopy } from './terminal-copy-rejection-guards' diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-mount-events.ts b/src/renderer/src/components/terminal-pane/terminal-pane-mount-events.ts index 1bd886a709d..bbf9e6764b7 100644 --- a/src/renderer/src/components/terminal-pane/terminal-pane-mount-events.ts +++ b/src/renderer/src/components/terminal-pane/terminal-pane-mount-events.ts @@ -10,7 +10,7 @@ import { consumePendingWebRuntimeSplitMirrorTelemetry } from '@/runtime/web-runt import { scheduleRuntimeGraphSync } from '@/runtime/sync-runtime-graph' import { closeTerminalTab } from '../terminal/terminal-tab-actions' import { useAppStore } from '@/store' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { splitPaneWithOneShotStartup, recordRuntimeCreatedTerminalPaneSplit diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-owner-context.ts b/src/renderer/src/components/terminal-pane/terminal-pane-owner-context.ts index 24e305eae21..e346e892eac 100644 --- a/src/renderer/src/components/terminal-pane/terminal-pane-owner-context.ts +++ b/src/renderer/src/components/terminal-pane/terminal-pane-owner-context.ts @@ -7,7 +7,7 @@ import { getRemoteRuntimePtyEnvironmentId } from '@/runtime/runtime-terminal-str import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../../shared/constants' import { isEphemeralSetupTerminalWorktreeId } from '../../../../shared/ephemeral-setup-terminal-worktree-id' import { parseWorkspaceKey } from '../../../../shared/workspace-scope' -import { isWebTerminalSurfaceTabId } from '../../../../shared/terminal-surface-id' +import { isWebTerminalSurfaceTabId } from '../../../../shared/workspace-layout/terminal-surface-id' import { getRepoExecutionHostId, getConnectionExecutionHostId, diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-pane-closed.ts b/src/renderer/src/components/terminal-pane/terminal-pane-pane-closed.ts index 6bab19095db..399254b9ac0 100644 --- a/src/renderer/src/components/terminal-pane/terminal-pane-pane-closed.ts +++ b/src/renderer/src/components/terminal-pane/terminal-pane-pane-closed.ts @@ -1,5 +1,5 @@ import { useAppStore } from '@/store' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { scheduleRuntimeGraphSync } from '@/runtime/sync-runtime-graph' import { resolveTabTitleAfterPaneClose, diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-pane-created.ts b/src/renderer/src/components/terminal-pane/terminal-pane-pane-created.ts index bee5894ccaf..1e069ae0a98 100644 --- a/src/renderer/src/components/terminal-pane/terminal-pane-pane-created.ts +++ b/src/renderer/src/components/terminal-pane/terminal-pane-pane-created.ts @@ -2,7 +2,7 @@ import type { ManagedPane } from '@/lib/pane-manager/pane-manager' import type { PaneSpawnHints } from '@/lib/pane-manager/pane-manager-types' import { useAppStore } from '@/store' import { isWebClientLocation } from '@/lib/web-client-location' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { createOsc52OscHandler } from '../../../../shared/osc52-clipboard' import { showOsc52ClipboardBlockedToast, diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-recovery.ts b/src/renderer/src/components/terminal-pane/terminal-pane-recovery.ts index 83baaffbb43..770871adae7 100644 --- a/src/renderer/src/components/terminal-pane/terminal-pane-recovery.ts +++ b/src/renderer/src/components/terminal-pane/terminal-pane-recovery.ts @@ -3,15 +3,14 @@ import { recordRendererCrashBreadcrumb } from '@/lib/crash-breadcrumb-recorder' import { locateTerminalTab } from '@/store/terminals/terminal-tab-location' import { admitTerminalRecoveryRemount, - captureTabRecoveryGeneration + captureTabRecoveryGeneration, + type TerminalRecoveryDecline, + type TerminalRecoveryRemountRequest, + type TerminalRecoveryRemountResult, + type TerminalRecoveryTrigger } from '@/store/terminals/terminal-tab-recovery-ledger' -import type { - TerminalRecoveryDecline, - TerminalRecoveryRemountRequest, - TerminalRecoveryRemountResult, - TerminalRecoveryTrigger -} from '@/store/terminals/terminal-tab-recovery-ledger' -import type { TerminalPaneRecoveryReason } from '../../../../shared/terminal-tab-types' + +import type { TerminalPaneRecoveryReason } from '../../../../shared/workspace-layout/terminal-tab-types' import { _resetTerminalInputQuarantineForTests, armTerminalInputQuarantine @@ -20,8 +19,6 @@ import { notifyTerminalInputNotSent } from './terminal-input-not-sent-notice' // Renderer death can leave the PTY alive; remount rebuilds xterm and reattaches/replays without restarting the shell (#2836, #8104). Store budget/epoch on the durable tab row, with only concrete xterm registration module-local. -export type { TerminalPaneRecoveryReason } - type RecoveryRequest = { tabId: string ptyId: string | null diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-spawn-placement.test.ts b/src/renderer/src/components/terminal-pane/terminal-pane-spawn-placement.test.ts index eec7df33470..332e3f2ea1e 100644 --- a/src/renderer/src/components/terminal-pane/terminal-pane-spawn-placement.test.ts +++ b/src/renderer/src/components/terminal-pane/terminal-pane-spawn-placement.test.ts @@ -1,6 +1,6 @@ // @vitest-environment happy-dom import { afterEach, describe, expect, it, vi } from 'vitest' -import type { TerminalPanePlacement } from '../../../../shared/terminal-pane-placement' +import type { TerminalPanePlacement } from '../../../../shared/workspace-layout/terminal-pane-placement' const TAB = { id: 'tab-1', diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-spawn-placement.ts b/src/renderer/src/components/terminal-pane/terminal-pane-spawn-placement.ts index 920e2786546..79079f961df 100644 --- a/src/renderer/src/components/terminal-pane/terminal-pane-spawn-placement.ts +++ b/src/renderer/src/components/terminal-pane/terminal-pane-spawn-placement.ts @@ -1,4 +1,4 @@ -import type { TerminalPanePlacement } from '../../../../shared/terminal-pane-placement' +import type { TerminalPanePlacement } from '../../../../shared/workspace-layout/terminal-pane-placement' import { useAppStore } from '@/store' import { terminalPanePlacementRow } from '@/lib/terminal-pane-placement-row' import { serializePaneTree } from './layout-serialization' diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-split-in-main.test.ts b/src/renderer/src/components/terminal-pane/terminal-pane-split-in-main.test.ts index cbba0589eee..1fdd915c030 100644 --- a/src/renderer/src/components/terminal-pane/terminal-pane-split-in-main.test.ts +++ b/src/renderer/src/components/terminal-pane/terminal-pane-split-in-main.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import { isTerminalLeafId } from '../../../../shared/stable-pane-id' +import { isTerminalLeafId } from '../../../../shared/workspace-layout/stable-pane-id' import { provideServerLayoutApplyRoutes } from '@/runtime/server-layout-apply-routes' import { splitPaneInMain, splitServerPane } from './terminal-pane-split-in-main' diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-surface-ownership.test.ts b/src/renderer/src/components/terminal-pane/terminal-pane-surface-ownership.test.ts index c671383aaca..e0666f0cc5d 100644 --- a/src/renderer/src/components/terminal-pane/terminal-pane-surface-ownership.test.ts +++ b/src/renderer/src/components/terminal-pane/terminal-pane-surface-ownership.test.ts @@ -1,6 +1,6 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' -import { parseWorkspaceSession } from '../../../../shared/workspace-session-schema' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' +import { parseWorkspaceSession } from '../../../../shared/workspace-session/workspace-session-schema' import { _resetTerminalPaneRecoveryForTests, requestTerminalPaneRecovery diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-tab-detach-commit.test.ts b/src/renderer/src/components/terminal-pane/terminal-pane-tab-detach-commit.test.ts index e16bef699ad..3ffec214182 100644 --- a/src/renderer/src/components/terminal-pane/terminal-pane-tab-detach-commit.test.ts +++ b/src/renderer/src/components/terminal-pane/terminal-pane-tab-detach-commit.test.ts @@ -2,7 +2,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type { TerminalLeafMoveRequest, TerminalLeafMoveResult -} from '../../../../shared/terminal-leaf-move' +} from '../../../../shared/workspace-layout/terminal-leaf-move' import { detachTerminalPaneToTab } from './terminal-pane-tab-detach' import { createStore, diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-tab-detach-fixture.ts b/src/renderer/src/components/terminal-pane/terminal-pane-tab-detach-fixture.ts index b7d69404a44..ed3f14c2520 100644 --- a/src/renderer/src/components/terminal-pane/terminal-pane-tab-detach-fixture.ts +++ b/src/renderer/src/components/terminal-pane/terminal-pane-tab-detach-fixture.ts @@ -1,5 +1,8 @@ import { vi } from 'vitest' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../../shared/workspace-layout/terminal-tab-types' import type { TerminalPaneTabDetachStore } from './terminal-pane-tab-detach' export const WORKTREE_ID = 'repo-1::/worktree' diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-tab-detach-main.test-fixture.ts b/src/renderer/src/components/terminal-pane/terminal-pane-tab-detach-main.test-fixture.ts index c3f0477ad40..0ca5848f698 100644 --- a/src/renderer/src/components/terminal-pane/terminal-pane-tab-detach-main.test-fixture.ts +++ b/src/renderer/src/components/terminal-pane/terminal-pane-tab-detach-main.test-fixture.ts @@ -5,7 +5,7 @@ import { buildWorkspaceSessionPayload } from '@/lib/workspace-session' import { layoutApplyTestTransport } from '@/runtime/layout-apply-test-transport.test-fixture' import { loadMainLayoutModel } from '@/runtime/main-loaded-layout-frames.test-fixture' import { openWorkspaceLayoutFrameSync } from '@/runtime/workspace-layout-frame-sync' -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' import { createTestStore, makeWorktree, diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-tab-detach-runtime-host.test.ts b/src/renderer/src/components/terminal-pane/terminal-pane-tab-detach-runtime-host.test.ts index dcfa88b2571..e4c4c01d265 100644 --- a/src/renderer/src/components/terminal-pane/terminal-pane-tab-detach-runtime-host.test.ts +++ b/src/renderer/src/components/terminal-pane/terminal-pane-tab-detach-runtime-host.test.ts @@ -12,7 +12,7 @@ import { isWebTerminalSurfaceTabId, toHostSessionTabId, toWebTerminalSurfaceTabId -} from '../../../../shared/terminal-surface-id' +} from '../../../../shared/workspace-layout/terminal-surface-id' const moveOnHost = vi.hoisted(() => vi.fn()) const paneMoveHost = vi.hoisted(() => vi.fn()) const moveLocally = vi.hoisted(() => vi.fn()) diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-tab-detach.ts b/src/renderer/src/components/terminal-pane/terminal-pane-tab-detach.ts index 47fcf681f5d..21b7b5ce639 100644 --- a/src/renderer/src/components/terminal-pane/terminal-pane-tab-detach.ts +++ b/src/renderer/src/components/terminal-pane/terminal-pane-tab-detach.ts @@ -2,8 +2,8 @@ import { toast } from 'sonner' import type { AppState } from '@/store' import { translate } from '@/i18n/i18n' import { createBrowserUuid } from '@/lib/browser-uuid' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' -import type { TerminalLeafMoveRequest } from '../../../../shared/terminal-leaf-move' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' +import type { TerminalLeafMoveRequest } from '../../../../shared/workspace-layout/terminal-leaf-move' import { commitTerminalSurfaceClose } from '@/store/terminals/terminal-surface-close-intent' import type { PaneCwdEntry } from './resolve-split-cwd' import { detachTerminalLayoutLeaf } from './terminal-layout-leaf-detach' @@ -12,7 +12,7 @@ import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../../shared/layout-owner-switc import { isWebTerminalSurfaceTabId, toWebTerminalSurfaceTabId -} from '../../../../shared/terminal-surface-id' +} from '../../../../shared/workspace-layout/terminal-surface-id' import { moveWebRuntimeLeafToNewTab, resolvePaneMoveHost, diff --git a/src/renderer/src/components/terminal-pane/terminal-park-verdict-worktree-driver-loop.test.tsx b/src/renderer/src/components/terminal-pane/terminal-park-verdict-worktree-driver-loop.test.tsx index 021c345bce1..5e5705c53f7 100644 --- a/src/renderer/src/components/terminal-pane/terminal-park-verdict-worktree-driver-loop.test.tsx +++ b/src/renderer/src/components/terminal-pane/terminal-park-verdict-worktree-driver-loop.test.tsx @@ -3,7 +3,7 @@ import { act, useEffect, useState } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' ;(globalThis as { IS_REACT_ACT_ENVIRONMENT?: boolean }).IS_REACT_ACT_ENVIRONMENT = true diff --git a/src/renderer/src/components/terminal-pane/terminal-parked-pty-watcher.ts b/src/renderer/src/components/terminal-pane/terminal-parked-pty-watcher.ts index 7401bdef3ec..47e6edcd375 100644 --- a/src/renderer/src/components/terminal-pane/terminal-parked-pty-watcher.ts +++ b/src/renderer/src/components/terminal-pane/terminal-parked-pty-watcher.ts @@ -1,5 +1,5 @@ -import { isTerminalLeafId } from '../../../../shared/stable-pane-id' -import { isProvenProcessExit } from '../../../../shared/terminal-exit-cause' +import { isTerminalLeafId } from '../../../../shared/workspace-layout/stable-pane-id' +import { isProvenProcessExit } from '../../../../shared/terminal/pty/lifecycle/terminal-exit-cause' import { isRemoteRuntimePtyId } from '../../../../shared/remote-runtime/remote-runtime-pty-id' import { useAppStore } from '@/store' import { closeTerminalTab } from '../terminal/terminal-tab-actions' diff --git a/src/renderer/src/components/terminal-pane/terminal-parked-tab-watchers.ts b/src/renderer/src/components/terminal-pane/terminal-parked-tab-watchers.ts index fe1b099cd82..fbcdbf9cd5b 100644 --- a/src/renderer/src/components/terminal-pane/terminal-parked-tab-watchers.ts +++ b/src/renderer/src/components/terminal-pane/terminal-parked-tab-watchers.ts @@ -1,5 +1,5 @@ /** Parking removes pane byte parsers; run pane-less watchers until reveal, exit or teardown. */ -import { isTerminalLeafId } from '../../../../shared/stable-pane-id' +import { isTerminalLeafId } from '../../../../shared/workspace-layout/stable-pane-id' import { useAppStore } from '@/store' import { isRemoteExecutionHostPtyId } from '../../../../shared/remote-execution-host-pty-id' import { discardPreHandlerPtyState } from './pty-pre-handler-buffer' diff --git a/src/renderer/src/components/terminal-pane/terminal-parked-watcher-reconciliation.ts b/src/renderer/src/components/terminal-pane/terminal-parked-watcher-reconciliation.ts index 0566e61527c..9a639aadb5e 100644 --- a/src/renderer/src/components/terminal-pane/terminal-parked-watcher-reconciliation.ts +++ b/src/renderer/src/components/terminal-pane/terminal-parked-watcher-reconciliation.ts @@ -1,4 +1,4 @@ -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { useAppStore } from '@/store' import { collectLeafIdsInOrder } from './terminal-layout-leaf-ids' import { resolveRootlessTerminalLayoutLeafId } from '../../../../shared/workspace-layout/terminal-pane-tree' diff --git a/src/renderer/src/components/terminal-pane/terminal-pending-startup-park-presence.ts b/src/renderer/src/components/terminal-pane/terminal-pending-startup-park-presence.ts index 0e644adbfb0..57b2f4845c3 100644 --- a/src/renderer/src/components/terminal-pane/terminal-pending-startup-park-presence.ts +++ b/src/renderer/src/components/terminal-pane/terminal-pending-startup-park-presence.ts @@ -1,5 +1,5 @@ import { useShallow } from 'zustand/react/shallow' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { useAppStore } from '../../store' const EMPTY_PENDING_STARTUP: Readonly> = Object.freeze({}) diff --git a/src/renderer/src/components/terminal-pane/terminal-recovery-ledger-test-store.ts b/src/renderer/src/components/terminal-pane/terminal-recovery-ledger-test-store.ts index 91f7cad29aa..31732e8d9e0 100644 --- a/src/renderer/src/components/terminal-pane/terminal-recovery-ledger-test-store.ts +++ b/src/renderer/src/components/terminal-pane/terminal-recovery-ledger-test-store.ts @@ -3,7 +3,7 @@ import { createRemountTerminalTabForRecovery, createSettleTerminalTabRecovery } from '@/store/slices/worktrees/session/worktree-slice-lookups' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' // Drive real row-ledger actions over minimal state so suites cannot drift from durable budget writes. Do not import recovery here: the store mock factory imports this module and a back-edge deadlocks. diff --git a/src/renderer/src/components/terminal-pane/terminal-render-desync-evidence-persistence.test.ts b/src/renderer/src/components/terminal-pane/terminal-render-desync-evidence-persistence.test.ts index c8f1c39d3f4..f1977093788 100644 --- a/src/renderer/src/components/terminal-pane/terminal-render-desync-evidence-persistence.test.ts +++ b/src/renderer/src/components/terminal-pane/terminal-render-desync-evidence-persistence.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import { TERMINAL_RENDER_DESYNC_CAPTURE_ID_PATTERN } from '../../../../shared/terminal/diagnostics/terminal-render-desync-evidence' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { createBrowserUuid } from '@/lib/browser-uuid' import { createCaptureId } from './terminal-render-desync-evidence-persistence' diff --git a/src/renderer/src/components/terminal-pane/terminal-retention-churn-pins.test.tsx b/src/renderer/src/components/terminal-pane/terminal-retention-churn-pins.test.tsx index a84ee6f2eb1..374fba80fce 100644 --- a/src/renderer/src/components/terminal-pane/terminal-retention-churn-pins.test.tsx +++ b/src/renderer/src/components/terminal-pane/terminal-retention-churn-pins.test.tsx @@ -2,7 +2,7 @@ import { act, renderHook } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { CrashReportBreadcrumbData } from '../../../../shared/crash-reporting' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' const harness = vi.hoisted(() => ({ state: { diff --git a/src/renderer/src/components/terminal-pane/terminal-retention-exempt-growth.test.ts b/src/renderer/src/components/terminal-pane/terminal-retention-exempt-growth.test.ts index 460e07e8633..2afd267844e 100644 --- a/src/renderer/src/components/terminal-pane/terminal-retention-exempt-growth.test.ts +++ b/src/renderer/src/components/terminal-pane/terminal-retention-exempt-growth.test.ts @@ -1,6 +1,6 @@ // Model capability outage → daemon recovery → growing hidden inventory; permanently settled unknowns would retain every tab despite the force-park budget. import { beforeEach, describe, expect, it, vi } from 'vitest' -import { PTY_SESSION_ID_SEPARATOR } from '../../../../shared/pty-session-id-format' +import { PTY_SESSION_ID_SEPARATOR } from '../../../../shared/terminal/pty/lifecycle/pty-session-id-format' import { TERMINAL_HIDDEN_WORKTREE_RETENTION_LIMIT, isEvictionExemptTerminalPty, diff --git a/src/renderer/src/components/terminal-pane/terminal-shutdown-layout-capture.test.ts b/src/renderer/src/components/terminal-pane/terminal-shutdown-layout-capture.test.ts index c20302262d7..6ff7d6a69fe 100644 --- a/src/renderer/src/components/terminal-pane/terminal-shutdown-layout-capture.test.ts +++ b/src/renderer/src/components/terminal-pane/terminal-shutdown-layout-capture.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { TERMINAL_SCROLLBACK_SESSION_BUFFER_BYTE_LIMIT } from '../../../../shared/terminal/replay/terminal-scrollback-limits' -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' import { getUtf8ByteLength } from '../../../../shared/utf8-byte-limits' const LEAF_ID = '11111111-1111-4111-8111-111111111111' as const diff --git a/src/renderer/src/components/terminal-pane/terminal-shutdown-layout-capture.ts b/src/renderer/src/components/terminal-pane/terminal-shutdown-layout-capture.ts index 0357f059781..84a0858dbd9 100644 --- a/src/renderer/src/components/terminal-pane/terminal-shutdown-layout-capture.ts +++ b/src/renderer/src/components/terminal-pane/terminal-shutdown-layout-capture.ts @@ -1,9 +1,9 @@ -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' import type { ManagedPane } from '@/lib/pane-manager/pane-manager' import type { PtyTransport } from './pty-transport-types' import { flushTerminalOutput } from '@/lib/pane-manager/pane-terminal-output-scheduler' import { mergeCapturedLeafState } from './merge-captured-leaf-state' -import { collectLeafIds } from '../../../../shared/terminal-pane-layout-tree' +import { collectLeafIds } from '../../../../shared/workspace-layout/terminal-pane-layout-tree' import { resolveTerminalLayoutActiveLeafId } from './terminal-layout-leaf-ids' import { TERMINAL_SCROLLBACK_SESSION_BUFFER_BYTE_LIMIT } from '../../../../shared/terminal/replay/terminal-scrollback-limits' import { serializeWithAbsoluteCursor } from '../../../../shared/terminal/replay/terminal-serialize-absolute-cursor' diff --git a/src/renderer/src/components/terminal-pane/terminal-spawn-error-display.test.ts b/src/renderer/src/components/terminal-pane/terminal-spawn-error-display.test.ts index 3a2a376634c..5c5bf3be5bf 100644 --- a/src/renderer/src/components/terminal-pane/terminal-spawn-error-display.test.ts +++ b/src/renderer/src/components/terminal-pane/terminal-spawn-error-display.test.ts @@ -3,7 +3,7 @@ import { LEGACY_PTY_ALLOCATION_HINT, LEGACY_TERMINAL_PROCESS_LIMIT_HINT, PTY_ALLOCATION_HINT -} from '../../../../shared/terminal-spawn-error-copy' +} from '../../../../shared/terminal/pty/lifecycle/terminal-spawn-error-copy' // Why a locale stand-in: English fallbacks equal the host copy, so only a translation shows the swap. vi.mock('@/i18n/i18n', () => ({ diff --git a/src/renderer/src/components/terminal-pane/terminal-spawn-error-display.ts b/src/renderer/src/components/terminal-pane/terminal-spawn-error-display.ts index 311bf4e0919..21da0ea6153 100644 --- a/src/renderer/src/components/terminal-pane/terminal-spawn-error-display.ts +++ b/src/renderer/src/components/terminal-pane/terminal-spawn-error-display.ts @@ -7,7 +7,7 @@ import { TERMINAL_HOST_CAP_HINT, TERMINAL_PROCESS_LIMIT_HINT, TERMINAL_SPAWN_ISSUE_REQUEST -} from '../../../../shared/terminal-spawn-error-copy' +} from '../../../../shared/terminal/pty/lifecycle/terminal-spawn-error-copy' /** Swaps the host's English resource-limit hints for the viewer's locale. */ export function localizeTerminalSpawnHints(error: string): string { diff --git a/src/renderer/src/components/terminal-pane/terminal-tab-lookup.test.ts b/src/renderer/src/components/terminal-pane/terminal-tab-lookup.test.ts index a3f7d7320f1..39a0f4472fd 100644 --- a/src/renderer/src/components/terminal-pane/terminal-tab-lookup.test.ts +++ b/src/renderer/src/components/terminal-pane/terminal-tab-lookup.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from 'vitest' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { getCachedTerminalTabForWorktree } from './terminal-tab-lookup' function makeTab(id: string): TerminalTab { diff --git a/src/renderer/src/components/terminal-pane/terminal-tab-lookup.ts b/src/renderer/src/components/terminal-pane/terminal-tab-lookup.ts index db4c3db628b..59a2979ab08 100644 --- a/src/renderer/src/components/terminal-pane/terminal-tab-lookup.ts +++ b/src/renderer/src/components/terminal-pane/terminal-tab-lookup.ts @@ -1,4 +1,4 @@ -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' const terminalTabLookupByArray = new WeakMap>() diff --git a/src/renderer/src/components/terminal-pane/terminal-tab-park-candidates.ts b/src/renderer/src/components/terminal-pane/terminal-tab-park-candidates.ts index fad9acc8d85..a2dd2f5a28b 100644 --- a/src/renderer/src/components/terminal-pane/terminal-tab-park-candidates.ts +++ b/src/renderer/src/components/terminal-pane/terminal-tab-park-candidates.ts @@ -1,4 +1,4 @@ -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { TerminalTabColdParkCandidate } from './terminal-hidden-view-parking' import type { TerminalTabActivationOrder } from './terminal-tab-activation-order' diff --git a/src/renderer/src/components/terminal-pane/terminal-title-evidence.test.ts b/src/renderer/src/components/terminal-pane/terminal-title-evidence.test.ts index a1710286603..203aa734797 100644 --- a/src/renderer/src/components/terminal-pane/terminal-title-evidence.test.ts +++ b/src/renderer/src/components/terminal-pane/terminal-title-evidence.test.ts @@ -8,7 +8,7 @@ import { resolvePaneTitleDecision } from './terminal-title-evidence' import { installTitleSpawnBell } from './pty-connection/title-spawn-bell' import { clearStaleAgentTabTitleOnConfirmedShell } from './pty-connection/confirmed-shell-agent-title' -import { resolveExplicitTerminalTitleAgentType } from '../../../../shared/terminal-title-agent-type' +import { resolveExplicitTerminalTitleAgentType } from '../../../../shared/agent-status/title/terminal-title-agent-type' import { isNormalizedAgentTitleStamp } from '../../../../shared/agent-status/title/agent-title-status' vi.mock('@/store/index', () => ({ diff --git a/src/renderer/src/components/terminal-pane/terminal-title-evidence.ts b/src/renderer/src/components/terminal-pane/terminal-title-evidence.ts index 5e88bdb1ca6..e9c2dc233ff 100644 --- a/src/renderer/src/components/terminal-pane/terminal-title-evidence.ts +++ b/src/renderer/src/components/terminal-pane/terminal-title-evidence.ts @@ -3,7 +3,7 @@ import { isNormalizedAgentTitleStamp, normalizeTerminalTitle } from '../../../../shared/agent-status/title/agent-title-status' -import { resolveExplicitTerminalTitleAgentType } from '../../../../shared/terminal-title-agent-type' +import { resolveExplicitTerminalTitleAgentType } from '../../../../shared/agent-status/title/terminal-title-agent-type' import type { AgentType } from '../../../../shared/agent-status/contracts/agent-status-types' import { resolvePaneRendererPolicy, diff --git a/src/renderer/src/components/terminal-pane/use-host-pane-title-sync.ts b/src/renderer/src/components/terminal-pane/use-host-pane-title-sync.ts index 7dfd64dc760..acefef5542f 100644 --- a/src/renderer/src/components/terminal-pane/use-host-pane-title-sync.ts +++ b/src/renderer/src/components/terminal-pane/use-host-pane-title-sync.ts @@ -1,7 +1,7 @@ import { useEffect } from 'react' import { isRemoteRuntimePtyId } from '../../../../shared/remote-runtime/remote-runtime-pty-id' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../../shared/layout-owner-switch' -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' import { collectLeafIdsInOrder } from './terminal-layout-leaf-ids' import type { TerminalPaneLayoutController } from './use-terminal-pane-layout-persistence' diff --git a/src/renderer/src/components/terminal-pane/use-layout-owner-pane-tree.test.ts b/src/renderer/src/components/terminal-pane/use-layout-owner-pane-tree.test.ts index 7c21154d2fb..a1e5e804bcf 100644 --- a/src/renderer/src/components/terminal-pane/use-layout-owner-pane-tree.test.ts +++ b/src/renderer/src/components/terminal-pane/use-layout-owner-pane-tree.test.ts @@ -1,7 +1,7 @@ // @vitest-environment happy-dom import { act, renderHook } from '@testing-library/react' import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' import { _resetLayoutOwnerPaneIntentsForTests, holdTabPaneTree, diff --git a/src/renderer/src/components/terminal-pane/use-parked-terminal-watcher-synchronization.react185.test.tsx b/src/renderer/src/components/terminal-pane/use-parked-terminal-watcher-synchronization.react185.test.tsx index 87f63fdd5ae..ee619693af6 100644 --- a/src/renderer/src/components/terminal-pane/use-parked-terminal-watcher-synchronization.react185.test.tsx +++ b/src/renderer/src/components/terminal-pane/use-parked-terminal-watcher-synchronization.react185.test.tsx @@ -2,7 +2,10 @@ import { act, StrictMode, useEffect } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../../shared/workspace-layout/terminal-tab-types' ;(globalThis as { IS_REACT_ACT_ENVIRONMENT?: boolean }).IS_REACT_ACT_ENVIRONMENT = true diff --git a/src/renderer/src/components/terminal-pane/use-parked-terminal-watcher-synchronization.ts b/src/renderer/src/components/terminal-pane/use-parked-terminal-watcher-synchronization.ts index e1635578f88..55bcecbbf10 100644 --- a/src/renderer/src/components/terminal-pane/use-parked-terminal-watcher-synchronization.ts +++ b/src/renderer/src/components/terminal-pane/use-parked-terminal-watcher-synchronization.ts @@ -1,6 +1,9 @@ import { useEffect, useMemo, useRef } from 'react' import { useShallow } from 'zustand/react/shallow' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../../shared/workspace-layout/terminal-tab-types' import { useAppStore, type AppState } from '../../store' import { disposeParkedTerminalWatchersForWorktree, diff --git a/src/renderer/src/components/terminal-pane/use-terminal-pane-chat-state.ts b/src/renderer/src/components/terminal-pane/use-terminal-pane-chat-state.ts index 83b380c2cad..25d5df31ac9 100644 --- a/src/renderer/src/components/terminal-pane/use-terminal-pane-chat-state.ts +++ b/src/renderer/src/components/terminal-pane/use-terminal-pane-chat-state.ts @@ -4,7 +4,7 @@ import { useAppStore } from '../../store' import { getCachedTerminalTabForWorktree } from './terminal-tab-lookup' import { selectTerminalTabAgentTypesByLeaf } from './terminal-tab-agent-type-index' import { collectLeafIdsInOrder, EMPTY_LAYOUT } from './layout-serialization' -import { sanitizeTerminalLayoutPaneTitles } from '../../../../shared/terminal-pane-title-sanitization' +import { sanitizeTerminalLayoutPaneTitles } from '../../../../shared/workspace-layout/terminal-pane-title-sanitization' import { resolveNativeChatLeafTitleAgent } from './native-chat-leaf-title-agent' import { useTerminalPaneStoreActions } from './use-terminal-pane-store-actions' import { selectUnifiedTerminalTabFields } from './terminal-unified-tab-lookup' diff --git a/src/renderer/src/components/terminal-pane/use-terminal-pane-close-actions.ts b/src/renderer/src/components/terminal-pane/use-terminal-pane-close-actions.ts index 163f85958ea..ab5db41f96b 100644 --- a/src/renderer/src/components/terminal-pane/use-terminal-pane-close-actions.ts +++ b/src/renderer/src/components/terminal-pane/use-terminal-pane-close-actions.ts @@ -3,7 +3,7 @@ import { onActiveTerminalPaneCloseRequest } from './request-active-terminal-pane import { useAppStore } from '../../store' import { retireUnboundRuntimeTerminalPane } from './retire-unbound-runtime-terminal-pane' import type { PaneExternalDropTarget } from '@/lib/pane-manager/pane-manager' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { closeWebRuntimeTerminal } from '@/runtime/web-runtime-terminal-actions' import { resolveLeafCloseCopyKind } from '../terminal/terminal-close-copy-kind' import { RUNNING_CLOSE_PROBE_TIMEOUT_MS } from '../terminal/running-terminal-close-guard' diff --git a/src/renderer/src/components/terminal-pane/use-terminal-pane-context-menu.ts b/src/renderer/src/components/terminal-pane/use-terminal-pane-context-menu.ts index 7680f49e1c2..9fda6147bb4 100644 --- a/src/renderer/src/components/terminal-pane/use-terminal-pane-context-menu.ts +++ b/src/renderer/src/components/terminal-pane/use-terminal-pane-context-menu.ts @@ -24,7 +24,7 @@ import { import { useTerminalPaneSplitActions } from './use-terminal-pane-split-actions' import { useTerminalContextMenuTrigger } from './use-terminal-context-menu-trigger' import { useAppStore } from '@/store' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { resolvePaneAgentSessionId } from './pane-agent-session-id' import { resetTerminalInputModes } from './terminal-input-mode-reset' import { equalizeTerminalPanes } from './terminal-pane-layout-owner-commands' diff --git a/src/renderer/src/components/terminal-pane/use-terminal-pane-file-drop-owner.ts b/src/renderer/src/components/terminal-pane/use-terminal-pane-file-drop-owner.ts index fbb9373a5dc..96b73404d57 100644 --- a/src/renderer/src/components/terminal-pane/use-terminal-pane-file-drop-owner.ts +++ b/src/renderer/src/components/terminal-pane/use-terminal-pane-file-drop-owner.ts @@ -8,7 +8,7 @@ import { type OsFileDropSequence } from '@/hooks/use-os-file-drop-owner' import { getNativeFileDropRejectionMessage } from '@/lib/native-file-drop-rejection-message' -import { makePaneKey, type PaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey, type PaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import type { PtyTransport } from './pty-transport-types' import { captureNativeTerminalFileDrop } from './terminal-native-file-drop-destination' diff --git a/src/renderer/src/components/terminal-pane/use-terminal-pane-layout-persistence.ts b/src/renderer/src/components/terminal-pane/use-terminal-pane-layout-persistence.ts index 71e5b9b0c47..8e7693cac96 100644 --- a/src/renderer/src/components/terminal-pane/use-terminal-pane-layout-persistence.ts +++ b/src/renderer/src/components/terminal-pane/use-terminal-pane-layout-persistence.ts @@ -10,7 +10,7 @@ import { clearWebRuntimeTerminalBuffer } from '@/runtime/web-runtime-terminal-bu import { isSyntheticSinglePaneTitle, sanitizeTerminalLayoutPaneTitles -} from '../../../../shared/terminal-pane-title-sanitization' +} from '../../../../shared/workspace-layout/terminal-pane-title-sanitization' import type { TerminalPaneStartupController } from './use-terminal-pane-startup-actions' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../../shared/layout-owner-switch' import { sendLayoutCommandToOwner } from '@/runtime/layout-owner-command' @@ -19,7 +19,7 @@ import { mergeLayoutTitlesByLeafId, retainLayoutScrollback } from './terminal-pane-layout-snapshot-merge' -import { retireLeavesFromTerminalLayout } from '../../../../shared/terminal-layout-leaf-retirement' +import { retireLeavesFromTerminalLayout } from '../../../../shared/workspace-layout/terminal-layout-leaf-retirement' export function useTerminalPaneLayoutPersistence(controller: TerminalPaneStartupController) { const { diff --git a/src/renderer/src/components/terminal-pane/use-terminal-pane-process-exit-actions.ts b/src/renderer/src/components/terminal-pane/use-terminal-pane-process-exit-actions.ts index c1c8f620414..a8ecd7e1868 100644 --- a/src/renderer/src/components/terminal-pane/use-terminal-pane-process-exit-actions.ts +++ b/src/renderer/src/components/terminal-pane/use-terminal-pane-process-exit-actions.ts @@ -6,7 +6,7 @@ import { isAccountRestartReady, selectReadyAccountRestartPtyIds } from './pane-account-restart-readiness' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { connectPanePty } from './pty-connection' import { bindPanePtyId } from '@/lib/pane-manager/mobile-fit-overrides' import { releasePaneTransportForRestart } from './pane-restart-transport-handoff' diff --git a/src/renderer/src/components/terminal-pane/use-terminal-pane-projection.ts b/src/renderer/src/components/terminal-pane/use-terminal-pane-projection.ts index ef01211af9f..1515b195ed1 100644 --- a/src/renderer/src/components/terminal-pane/use-terminal-pane-projection.ts +++ b/src/renderer/src/components/terminal-pane/use-terminal-pane-projection.ts @@ -21,7 +21,7 @@ import { canContinueAgentSessionInNewSession } from './terminal-agent-session-co import type { TerminalPaneMobileController } from './use-terminal-pane-mobile-actions' import { useShallow } from 'zustand/react/shallow' import { useAppStore } from '@/store' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { resolvePaneAgentSessionId } from './pane-agent-session-id' import { canPaneOfferResumeInNewChat } from '../tab-bar/tab-session-history-switch' diff --git a/src/renderer/src/components/terminal-pane/use-terminal-pane-reconciliation.ts b/src/renderer/src/components/terminal-pane/use-terminal-pane-reconciliation.ts index 412726f3b10..c9f731b0b3b 100644 --- a/src/renderer/src/components/terminal-pane/use-terminal-pane-reconciliation.ts +++ b/src/renderer/src/components/terminal-pane/use-terminal-pane-reconciliation.ts @@ -13,7 +13,7 @@ import { selectRetiredPaneIds, trackRetiredLeafIds } from './terminal-live-layout-reconciliation' -import { collectLeafIds } from '../../../../shared/terminal-pane-layout-tree' +import { collectLeafIds } from '../../../../shared/workspace-layout/terminal-pane-layout-tree' import { useTerminalPaneProcessExitActions } from './use-terminal-pane-process-exit-actions' import type { TerminalPaneCloseController } from './use-terminal-pane-close-actions' diff --git a/src/renderer/src/components/terminal-pane/use-terminal-pane-title-effects.ts b/src/renderer/src/components/terminal-pane/use-terminal-pane-title-effects.ts index ff011c95c74..01ce9f22830 100644 --- a/src/renderer/src/components/terminal-pane/use-terminal-pane-title-effects.ts +++ b/src/renderer/src/components/terminal-pane/use-terminal-pane-title-effects.ts @@ -20,7 +20,7 @@ import { } from './shutdown-buffer-captures' import { captureTerminalShutdownLayout } from './terminal-shutdown-layout-capture' import { resolveLeafScrollbackBuffers } from './leaf-scrollback-resolution' -import { shouldPreserveTerminalScrollbackBuffers } from '../../../../shared/workspace-session-terminal-buffers' +import { shouldPreserveTerminalScrollbackBuffers } from '../../../../shared/workspace-session/workspace-session-terminal-buffers' import type { TerminalPaneCloseController } from './use-terminal-pane-close-actions' export function useTerminalPaneTitleEffects(controller: TerminalPaneCloseController): void { diff --git a/src/renderer/src/components/terminal-pane/use-terminal-pane-title-state.ts b/src/renderer/src/components/terminal-pane/use-terminal-pane-title-state.ts index ae54decdc15..95ceb94b79c 100644 --- a/src/renderer/src/components/terminal-pane/use-terminal-pane-title-state.ts +++ b/src/renderer/src/components/terminal-pane/use-terminal-pane-title-state.ts @@ -4,7 +4,7 @@ import { createRemotePaneLayoutPusher, type RemotePaneLayoutPusher } from './remote-pane-layout-push' -import { isTerminalSessionStateSaveFailure } from '../../../../shared/terminal-session-state-save-failure' +import { isTerminalSessionStateSaveFailure } from '../../../../shared/workspace-session/terminal-session-state-save-failure' import { AGENT_LAUNCH_PANE_REFUSED_CODE } from '../../../../shared/agent-launch/contracts/agent-launch-pane-verdict' import { appendPaneTerminalError, clearPaneTerminalError } from './terminal-error-accumulation' import { stripSshReconnectOwnedErrorLines } from './TerminalErrorToast' diff --git a/src/renderer/src/components/terminal-pane/use-terminal-park-verdict-pin.ts b/src/renderer/src/components/terminal-pane/use-terminal-park-verdict-pin.ts index 772977e330c..cb9ceabadc8 100644 --- a/src/renderer/src/components/terminal-pane/use-terminal-park-verdict-pin.ts +++ b/src/renderer/src/components/terminal-pane/use-terminal-park-verdict-pin.ts @@ -1,6 +1,6 @@ /** Damp the final rendered verdict, including worktree/activation inputs that bypass cold-park candidates (#15136). The passive-effect pin lags one commit so rendering unparked settles the flip loop. */ import { useEffect, useMemo, useRef, useState } from 'react' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { recordParkVerdictFlips, selectParkVerdictPinnedTabIds, diff --git a/src/renderer/src/components/terminal-pane/use-terminal-tab-cold-parking.test.ts b/src/renderer/src/components/terminal-pane/use-terminal-tab-cold-parking.test.ts index 01a1530f375..0537af8338c 100644 --- a/src/renderer/src/components/terminal-pane/use-terminal-tab-cold-parking.test.ts +++ b/src/renderer/src/components/terminal-pane/use-terminal-tab-cold-parking.test.ts @@ -1,8 +1,7 @@ // @vitest-environment happy-dom import { act, renderHook } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' -import type { selectColdParkedTerminalTabs } from './terminal-hidden-view-parking' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' const mocks = vi.hoisted(() => ({ storeState: { @@ -75,6 +74,7 @@ vi.mock('@/lib/crash-breadcrumb-recorder', () => ({ })) import { + type selectColdParkedTerminalTabs, TERMINAL_TAB_COLD_PARK_DELAY_MS, TERMINAL_TAB_HOT_RETAIN_MS } from './terminal-hidden-view-parking' diff --git a/src/renderer/src/components/terminal-pane/use-terminal-tab-cold-parking.ts b/src/renderer/src/components/terminal-pane/use-terminal-tab-cold-parking.ts index 51941798b1b..a321afd7c43 100644 --- a/src/renderer/src/components/terminal-pane/use-terminal-tab-cold-parking.ts +++ b/src/renderer/src/components/terminal-pane/use-terminal-tab-cold-parking.ts @@ -1,7 +1,7 @@ /** Own per-tab park clocks, deadlines, and watcher reconciliation so the overlay consumes only the final render verdict. */ import { useEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react' import { useShallow } from 'zustand/react/shallow' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { useAppStore } from '../../store' import { findActivityTerminalPortal, diff --git a/src/renderer/src/components/terminal-parked-watcher-sync-entries.test.tsx b/src/renderer/src/components/terminal-parked-watcher-sync-entries.test.tsx index e30b6eb28cd..0cb5200b698 100644 --- a/src/renderer/src/components/terminal-parked-watcher-sync-entries.test.tsx +++ b/src/renderer/src/components/terminal-parked-watcher-sync-entries.test.tsx @@ -4,7 +4,7 @@ import { createRoot, type Root } from 'react-dom/client' import { afterEach, describe, expect, it, vi } from 'vitest' import { useTerminalWatcherEffects } from './use-terminal-watcher-effects' import type { ParkedTerminalTabWatcherSyncEntry } from './terminal-pane/terminal-parked-tab-watchers' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' type WatcherController = Parameters[0] diff --git a/src/renderer/src/components/terminal-parking-pass-candidates.ts b/src/renderer/src/components/terminal-parking-pass-candidates.ts index 95c5439f929..eb6d6d8d631 100644 --- a/src/renderer/src/components/terminal-parking-pass-candidates.ts +++ b/src/renderer/src/components/terminal-parking-pass-candidates.ts @@ -1,4 +1,4 @@ -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import { TERMINAL_WORKTREE_COLD_PARK_DELAY_MS, canParkTerminalWorktreeRenderers, diff --git a/src/renderer/src/components/terminal-startup-hold-placeholder.test.tsx b/src/renderer/src/components/terminal-startup-hold-placeholder.test.tsx index 84df99c1ced..8884cb53b93 100644 --- a/src/renderer/src/components/terminal-startup-hold-placeholder.test.tsx +++ b/src/renderer/src/components/terminal-startup-hold-placeholder.test.tsx @@ -3,7 +3,7 @@ import { act } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { Tab, TabGroup } from '../../../shared/tab-types' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import type { TerminalController } from './use-terminal-controller' vi.mock('../store', async () => { diff --git a/src/renderer/src/components/terminal/active-terminal-repair-loop.react185.test.tsx b/src/renderer/src/components/terminal/active-terminal-repair-loop.react185.test.tsx index ecfda05b474..a2fb9ccf570 100644 --- a/src/renderer/src/components/terminal/active-terminal-repair-loop.react185.test.tsx +++ b/src/renderer/src/components/terminal/active-terminal-repair-loop.react185.test.tsx @@ -4,7 +4,7 @@ import { createRoot } from 'react-dom/client' import { afterEach, describe, expect, it } from 'vitest' import { useAppStore } from '@/store' import type { Tab, TabGroup } from '../../../../shared/tab-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { useActiveTerminalRepair } from './use-active-terminal-repair' ;(globalThis as { IS_REACT_ACT_ENVIRONMENT?: boolean }).IS_REACT_ACT_ENVIRONMENT = true diff --git a/src/renderer/src/components/terminal/active-terminal-repair.ts b/src/renderer/src/components/terminal/active-terminal-repair.ts index 539644b6fc8..5395c0efc5b 100644 --- a/src/renderer/src/components/terminal/active-terminal-repair.ts +++ b/src/renderer/src/components/terminal/active-terminal-repair.ts @@ -1,5 +1,5 @@ import type { WorkspaceVisibleTabType } from '../../../../shared/tab-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' export function shouldRepairActiveTerminalTab(args: { activeTabType: WorkspaceVisibleTabType diff --git a/src/renderer/src/components/terminal/cold-activation-deferral-stranding.test.ts b/src/renderer/src/components/terminal/cold-activation-deferral-stranding.test.ts index 91224adb3c9..88b6205804c 100644 --- a/src/renderer/src/components/terminal/cold-activation-deferral-stranding.test.ts +++ b/src/renderer/src/components/terminal/cold-activation-deferral-stranding.test.ts @@ -18,7 +18,7 @@ import { captureParkedTerminalPaneCandidates } from '../terminal-pane/terminal-parked-tab-watchers' import { capturedPanesByTabId } from '../terminal-pane/terminal-parked-watcher-registry' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { TerminalParkingFoundation } from '../use-terminal-parking-foundation' import type { StartupTerminalTabHold } from './startup-terminal-tab-hold' diff --git a/src/renderer/src/components/terminal/pty-running-work-probe.ts b/src/renderer/src/components/terminal/pty-running-work-probe.ts index e97fda74939..07dff3b333f 100644 --- a/src/renderer/src/components/terminal/pty-running-work-probe.ts +++ b/src/renderer/src/components/terminal/pty-running-work-probe.ts @@ -2,12 +2,7 @@ import { inspectRuntimeTerminalProcess } from '@/runtime/runtime-terminal-inspec import { probePtyRunningWorkWithInspection, type PtyRunningWorkProbe -} from '../../../../shared/pty-running-work-probe' - -export type { - PtyRunningWorkProbe, - PtyRunningWorkVerdict -} from '../../../../shared/pty-running-work-probe' +} from '../../../../shared/terminal/pty/lifecycle/pty-running-work-probe' export function probePtyRunningWork( ptyIds: readonly string[], diff --git a/src/renderer/src/components/terminal/startup-terminal-tab-hold.test.ts b/src/renderer/src/components/terminal/startup-terminal-tab-hold.test.ts index f62d397fc36..0569dcb68bc 100644 --- a/src/renderer/src/components/terminal/startup-terminal-tab-hold.test.ts +++ b/src/renderer/src/components/terminal/startup-terminal-tab-hold.test.ts @@ -19,7 +19,7 @@ import { type StartupTerminalTabHold } from './startup-terminal-tab-hold' import type { TabGroup, TabGroupLayoutNode } from '../../../../shared/tab-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { TerminalParkingFoundation } from '../use-terminal-parking-foundation' const WORKTREE_ID = 'repo::/worktree' diff --git a/src/renderer/src/components/terminal/terminal-close-copy-kind.ts b/src/renderer/src/components/terminal/terminal-close-copy-kind.ts index eecfd589a7c..fe504cbaaf0 100644 --- a/src/renderer/src/components/terminal/terminal-close-copy-kind.ts +++ b/src/renderer/src/components/terminal/terminal-close-copy-kind.ts @@ -1,6 +1,6 @@ import { useAppStore } from '@/store' import type { CloseTerminalDialogCopyKind } from '../terminal-pane/CloseTerminalDialog' -import { isTerminalLeafId, makePaneKey } from '../../../../shared/stable-pane-id' +import { isTerminalLeafId, makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' /** Share agent classification across pane- and PTY-scoped close prompts so identical closes use identical copy. */ export function resolveLeafCloseCopyKind( diff --git a/src/renderer/src/components/terminal/terminal-provider-snapshot-bound-pty-ids.test.ts b/src/renderer/src/components/terminal/terminal-provider-snapshot-bound-pty-ids.test.ts index 3e8c15267cb..7f3ba6ec748 100644 --- a/src/renderer/src/components/terminal/terminal-provider-snapshot-bound-pty-ids.test.ts +++ b/src/renderer/src/components/terminal/terminal-provider-snapshot-bound-pty-ids.test.ts @@ -1,7 +1,7 @@ // @vitest-environment happy-dom import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type * as SnapshotCapabilityModule from './terminal-provider-snapshot-capability' -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' import { makeTab } from '../../store/slices/store-session-test-harness' import { makeWorktree } from '../../store/slices/worktrees-slice-test-fixtures' diff --git a/src/renderer/src/components/terminal/terminal-provider-snapshot-bound-pty-ids.ts b/src/renderer/src/components/terminal/terminal-provider-snapshot-bound-pty-ids.ts index d4a57dee7c9..2d3610b23a4 100644 --- a/src/renderer/src/components/terminal/terminal-provider-snapshot-bound-pty-ids.ts +++ b/src/renderer/src/components/terminal/terminal-provider-snapshot-bound-pty-ids.ts @@ -1,6 +1,6 @@ import { reuseArrayIfEqual } from '@/components/sidebar/worktree-agent-row-selectors' import { sameBucketRecords } from '@/lib/bucket-record-equality' -import { sameStringRecord } from '../../../../shared/terminal-layout-equality' +import { sameStringRecord } from '../../../../shared/workspace-layout/terminal-layout-equality' import { type SnapshotCapabilityBindingState, type SnapshotCapabilityTab, diff --git a/src/renderer/src/components/terminal/terminal-tab-actions-unified-close.test.ts b/src/renderer/src/components/terminal/terminal-tab-actions-unified-close.test.ts index f69377b0600..e8d3c267ca3 100644 --- a/src/renderer/src/components/terminal/terminal-tab-actions-unified-close.test.ts +++ b/src/renderer/src/components/terminal/terminal-tab-actions-unified-close.test.ts @@ -15,7 +15,7 @@ vi.mock('@/runtime/web-runtime-terminal-creation', () => ({ vi.mock('@/runtime/web-runtime-session-environment', () => ({ isWebRuntimeSessionActive: vi.fn(() => false) })) -vi.mock('../../../../shared/terminal-surface-id', () => ({ +vi.mock('../../../../shared/workspace-layout/terminal-surface-id', () => ({ isWebTerminalSurfaceTabId: vi.fn(() => false), toHostSessionTabId: vi.fn((tabId: string) => tabId) })) diff --git a/src/renderer/src/components/terminal/terminal-tab-actions-unrouted-close.test.ts b/src/renderer/src/components/terminal/terminal-tab-actions-unrouted-close.test.ts index 3d92151fcca..c44e93d89a6 100644 --- a/src/renderer/src/components/terminal/terminal-tab-actions-unrouted-close.test.ts +++ b/src/renderer/src/components/terminal/terminal-tab-actions-unrouted-close.test.ts @@ -17,7 +17,7 @@ vi.mock('@/runtime/web-runtime-session-tab-lifecycle', () => ({ vi.mock('@/runtime/web-runtime-session-environment', () => ({ isWebRuntimeSessionActive: isWebRuntimeSessionActiveMock })) -vi.mock('../../../../shared/terminal-surface-id', () => ({ +vi.mock('../../../../shared/workspace-layout/terminal-surface-id', () => ({ toHostSessionTabId: (tabId: string) => tabId })) diff --git a/src/renderer/src/components/terminal/terminal-tab-actions.test.ts b/src/renderer/src/components/terminal/terminal-tab-actions.test.ts index a601544eef5..c673913550e 100644 --- a/src/renderer/src/components/terminal/terminal-tab-actions.test.ts +++ b/src/renderer/src/components/terminal/terminal-tab-actions.test.ts @@ -44,7 +44,7 @@ vi.mock('@/runtime/web-runtime-terminal-creation', () => ({ vi.mock('@/runtime/web-runtime-session-environment', () => ({ isWebRuntimeSessionActive: isWebRuntimeSessionActiveMock })) -vi.mock('../../../../shared/terminal-surface-id', () => ({ +vi.mock('../../../../shared/workspace-layout/terminal-surface-id', () => ({ isWebTerminalSurfaceTabId: isWebTerminalSurfaceTabIdMock, toHostSessionTabId: toHostSessionTabIdMock })) diff --git a/src/renderer/src/components/terminal/terminal-tab-actions.ts b/src/renderer/src/components/terminal/terminal-tab-actions.ts index ce1251acab2..e539c934085 100644 --- a/src/renderer/src/components/terminal/terminal-tab-actions.ts +++ b/src/renderer/src/components/terminal/terminal-tab-actions.ts @@ -1,7 +1,7 @@ import { useAppStore } from '@/store' import { closeWebRuntimeSessionTab } from '@/runtime/web-runtime-session-tab-lifecycle' import { isWebRuntimeSessionActive } from '@/runtime/web-runtime-session-environment' -import { toHostSessionTabId } from '../../../../shared/terminal-surface-id' +import { toHostSessionTabId } from '../../../../shared/workspace-layout/terminal-surface-id' import { getLatestWebSessionTabsPublicationEpoch } from '@/runtime/web-session-tabs-sync/tracking-lifecycle' import { resolveHostSessionTabIdForWebSessionTab } from '@/runtime/web-session-tabs-sync/tracking-mappings' import { resolveTerminalCloseRoute } from '@/lib/terminal-close-route' diff --git a/src/renderer/src/components/terminal/terminal-tab-close-running-confirm.test.ts b/src/renderer/src/components/terminal/terminal-tab-close-running-confirm.test.ts index e1be78d32b4..39a6d443a8b 100644 --- a/src/renderer/src/components/terminal/terminal-tab-close-running-confirm.test.ts +++ b/src/renderer/src/components/terminal/terminal-tab-close-running-confirm.test.ts @@ -31,7 +31,7 @@ vi.mock('@/runtime/web-runtime-terminal-creation', () => ({ vi.mock('@/runtime/web-runtime-session-environment', () => ({ isWebRuntimeSessionActive: isWebRuntimeSessionActiveMock })) -vi.mock('../../../../shared/terminal-surface-id', () => ({ +vi.mock('../../../../shared/workspace-layout/terminal-surface-id', () => ({ isWebTerminalSurfaceTabId: vi.fn(() => false), toHostSessionTabId: vi.fn((tabId: string) => tabId) })) diff --git a/src/renderer/src/components/terminal/terminal-worktree-prewarm-targets.ts b/src/renderer/src/components/terminal/terminal-worktree-prewarm-targets.ts index 31113e95ad5..142c5e27d5d 100644 --- a/src/renderer/src/components/terminal/terminal-worktree-prewarm-targets.ts +++ b/src/renderer/src/components/terminal/terminal-worktree-prewarm-targets.ts @@ -1,5 +1,5 @@ import type { AppState } from '@/store/types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { getSleepingRecordTabId } from '@/lib/sleeping-agent-wake-requests' import { resolveParkedTerminalPaneCandidates } from '../terminal-pane/terminal-parked-tab-watchers' diff --git a/src/renderer/src/components/terminal/terminal-worktree-prewarm.ts b/src/renderer/src/components/terminal/terminal-worktree-prewarm.ts index a41cce6d405..f584bfc9124 100644 --- a/src/renderer/src/components/terminal/terminal-worktree-prewarm.ts +++ b/src/renderer/src/components/terminal/terminal-worktree-prewarm.ts @@ -1,4 +1,4 @@ -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' /** Each stage is its own task so a slow pointer sweep never stacks mount, style/layout and WebGL into one long frame. */ export type TerminalPrewarmStage = 'mount' | 'layout' | 'warm' diff --git a/src/renderer/src/components/terminal/use-active-terminal-repair.ts b/src/renderer/src/components/terminal/use-active-terminal-repair.ts index e14a53df196..96c8127213e 100644 --- a/src/renderer/src/components/terminal/use-active-terminal-repair.ts +++ b/src/renderer/src/components/terminal/use-active-terminal-repair.ts @@ -1,6 +1,6 @@ import { useEffect } from 'react' import type { WorkspaceVisibleTabType } from '../../../../shared/tab-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { resolveRepairedActiveTerminalTabId } from './active-terminal-repair' type ActiveTerminalRepairInput = { diff --git a/src/renderer/src/components/terminal/use-terminal-worktree-prewarm.ts b/src/renderer/src/components/terminal/use-terminal-worktree-prewarm.ts index 58052c75adb..b5241637d3e 100644 --- a/src/renderer/src/components/terminal/use-terminal-worktree-prewarm.ts +++ b/src/renderer/src/components/terminal/use-terminal-worktree-prewarm.ts @@ -1,6 +1,6 @@ import { useEffect, useLayoutEffect, useRef } from 'react' import { useAppStore } from '@/store' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { hasRegisteredRuntimeTerminalTab } from '../../runtime/mounted-terminal-tab-registry' import { canWatcherCoverParkedTerminalTab } from '../terminal-pane/terminal-parked-tab-watchers' import { canAdmitTerminalTabsForStartup } from './background-terminal-worktree-mount' diff --git a/src/renderer/src/components/use-terminal-close-actions.ts b/src/renderer/src/components/use-terminal-close-actions.ts index 8c40fab70a4..546cbcc05a5 100644 --- a/src/renderer/src/components/use-terminal-close-actions.ts +++ b/src/renderer/src/components/use-terminal-close-actions.ts @@ -1,6 +1,6 @@ import { useCallback } from 'react' import { useAppStore } from '../store' -import { isProvenProcessExit } from '../../../shared/terminal-exit-cause' +import { isProvenProcessExit } from '../../../shared/terminal/pty/lifecycle/terminal-exit-cause' import { closeTerminalTab } from './terminal/terminal-tab-actions' import { shouldDeferParkedPtyExitTabClose } from './terminal-pane/terminal-parked-tab-watchers' import { dispatchWorkspaceTabCommand } from '@/lib/workspace-tab-commands' diff --git a/src/renderer/src/components/use-terminal-watcher-effects.ts b/src/renderer/src/components/use-terminal-watcher-effects.ts index 7f3ad862cf0..41b0c26567b 100644 --- a/src/renderer/src/components/use-terminal-watcher-effects.ts +++ b/src/renderer/src/components/use-terminal-watcher-effects.ts @@ -11,7 +11,7 @@ import { type ParkedTerminalTabWatcherSyncEntry } from './terminal-pane/terminal-parked-tab-watchers' import { useAppStore } from '@/store' -import { isTerminalWorkspaceEmptiedOnPurpose } from '../../../shared/closed-terminal-tab-tombstones' +import { isTerminalWorkspaceEmptiedOnPurpose } from '../../../shared/workspace-layout/closed-terminal-tab-tombstones' import { gateWorktreeAgentActivation } from '@/lib/worktree-agent-activation-gate' import { createWorkspaceTerminalHostAuthoritySelector } from '@/lib/workspace-terminal-host-authority' import { hasStructuredAgentLaunchInWorktree } from '@/lib/agent-session/launch/structured-agent-session-launch-status' diff --git a/src/renderer/src/components/use-terminal-workspace-foundation.ts b/src/renderer/src/components/use-terminal-workspace-foundation.ts index ec226c717e0..072b9dbaafd 100644 --- a/src/renderer/src/components/use-terminal-workspace-foundation.ts +++ b/src/renderer/src/components/use-terminal-workspace-foundation.ts @@ -1,6 +1,6 @@ import { useMemo, useRef } from 'react' import { parseWorkspaceKey } from '../../../shared/workspace-scope' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import { useAppStore } from '../store' import { useWorktreeMap } from '../store/selectors' import { getResolvedExecutionHostIdForWorktree } from '@/lib/resolved-worktree-execution-host' diff --git a/src/renderer/src/components/workspace-cleanup/use-workspace-cleanup-removal.agent-stop.test.tsx b/src/renderer/src/components/workspace-cleanup/use-workspace-cleanup-removal.agent-stop.test.tsx index 6284e256038..d025d5a96c7 100644 --- a/src/renderer/src/components/workspace-cleanup/use-workspace-cleanup-removal.agent-stop.test.tsx +++ b/src/renderer/src/components/workspace-cleanup/use-workspace-cleanup-removal.agent-stop.test.tsx @@ -3,7 +3,7 @@ import { act, renderHook, waitFor } from '@testing-library/react' import { beforeEach, describe, expect, it, vi } from 'vitest' import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import type { WorkspaceCleanupCandidate } from '../../../../shared/workspace-cleanup/workspace-cleanup' import type { WorkspaceCleanupRemoveOptions, diff --git a/src/renderer/src/components/worktree-jump/WorktreeJumpPalette.recent-tabs.behavior.test.tsx b/src/renderer/src/components/worktree-jump/WorktreeJumpPalette.recent-tabs.behavior.test.tsx index aa799d09672..ef1b52ea712 100644 --- a/src/renderer/src/components/worktree-jump/WorktreeJumpPalette.recent-tabs.behavior.test.tsx +++ b/src/renderer/src/components/worktree-jump/WorktreeJumpPalette.recent-tabs.behavior.test.tsx @@ -9,7 +9,7 @@ import type { AppState } from '@/store/types' import { emitCmdJRowIndexJump } from '@/lib/cmd-j-row-index-jump' import WorktreeJumpPalette from './WorktreeJumpPalette' import { encodePaletteIdentity } from '../../../../shared/palette-match/palette-ranking' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { LEAF_ID, makeAgentEntry, diff --git a/src/renderer/src/components/worktree-jump/WorktreeJumpPalette.recent-tabs.test.tsx b/src/renderer/src/components/worktree-jump/WorktreeJumpPalette.recent-tabs.test.tsx index fb31dc2af89..d6246d93298 100644 --- a/src/renderer/src/components/worktree-jump/WorktreeJumpPalette.recent-tabs.test.tsx +++ b/src/renderer/src/components/worktree-jump/WorktreeJumpPalette.recent-tabs.test.tsx @@ -9,7 +9,7 @@ import type { AppState } from '@/store/types' import { emitCmdJRowIndexJump } from '@/lib/cmd-j-row-index-jump' import WorktreeJumpPalette from './WorktreeJumpPalette' import { encodePaletteIdentity } from '../../../../shared/palette-match/palette-ranking' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { LEAF_ID, makeAgentEntry, diff --git a/src/renderer/src/components/worktree-jump/use-worktree-jump-palette-recent-tabs.ts b/src/renderer/src/components/worktree-jump/use-worktree-jump-palette-recent-tabs.ts index 65d84fe1db6..d921b5e8d61 100644 --- a/src/renderer/src/components/worktree-jump/use-worktree-jump-palette-recent-tabs.ts +++ b/src/renderer/src/components/worktree-jump/use-worktree-jump-palette-recent-tabs.ts @@ -7,7 +7,7 @@ import { orderRecentWorkspaceTabs, type RecentWorkspaceTabRow } from '@/lib/recent-workspace-tab-rows' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { EMPTY_RECENT_TAB_ORDER, type OpenTabRecentRow, diff --git a/src/renderer/src/components/worktree-jump/worktree-jump-palette-interleaved-sections.test.tsx b/src/renderer/src/components/worktree-jump/worktree-jump-palette-interleaved-sections.test.tsx index 9fc41b186be..6e2cc10aa93 100644 --- a/src/renderer/src/components/worktree-jump/worktree-jump-palette-interleaved-sections.test.tsx +++ b/src/renderer/src/components/worktree-jump/worktree-jump-palette-interleaved-sections.test.tsx @@ -6,7 +6,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type * as ReactI18Next from 'react-i18next' import type { Repo } from '../../../../shared/repo-types' import type { Tab, TabGroup } from '../../../../shared/tab-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { Worktree } from '../../../../shared/worktree/types' import { useAppStore } from '@/store/index' import type { AppState } from '@/store/types' diff --git a/src/renderer/src/components/worktree-jump/worktree-jump-palette-test-fixtures.ts b/src/renderer/src/components/worktree-jump/worktree-jump-palette-test-fixtures.ts index cb598dc810f..5e3bedcf2fe 100644 --- a/src/renderer/src/components/worktree-jump/worktree-jump-palette-test-fixtures.ts +++ b/src/renderer/src/components/worktree-jump/worktree-jump-palette-test-fixtures.ts @@ -1,13 +1,13 @@ import type { Repo } from '../../../../shared/repo-types' import type { Tab, TabGroup } from '../../../../shared/tab-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { Worktree } from '../../../../shared/worktree/types' import type { FolderWorkspace } from '../../../../shared/folder-workspaces/folder-workspace-types' import type { AgentStatusEntry, AgentStatusState } from '../../../../shared/agent-status/contracts/agent-status-types' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import type { AppState } from '@/store/types' export function makeRepo(): Repo { diff --git a/src/renderer/src/components/wsl-move/WslMoveOrchestratorStatusLine.tsx b/src/renderer/src/components/wsl-move/WslMoveOrchestratorStatusLine.tsx index 87be32546e8..5eb6d4293fc 100644 --- a/src/renderer/src/components/wsl-move/WslMoveOrchestratorStatusLine.tsx +++ b/src/renderer/src/components/wsl-move/WslMoveOrchestratorStatusLine.tsx @@ -5,7 +5,7 @@ import { translate } from '@/i18n/i18n' import { Button } from '@/components/ui/button' import { useAppStore } from '@/store' import { revealTerminalPane } from '@/lib/reveal-terminal-pane' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import type { WslMoveBlocker } from '../../../../shared/wsl-move/wsl-move-driver-types' import { wslMoveBlockerHint, wslMoveBlockerTitle } from './wsl-move-copy' import { wslMoveOrchestratorLine } from './wsl-move-orchestrator-copy' diff --git a/src/renderer/src/components/wsl-move/wsl-move-scope-rows.ts b/src/renderer/src/components/wsl-move/wsl-move-scope-rows.ts index 2d8e387553f..d955236458e 100644 --- a/src/renderer/src/components/wsl-move/wsl-move-scope-rows.ts +++ b/src/renderer/src/components/wsl-move/wsl-move-scope-rows.ts @@ -9,9 +9,9 @@ import { isWslHostRuntimeEnvironment, type PublicKnownRuntimeEnvironment } from '../../../../shared/remote-runtime/host-catalog/runtime-environments' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import type { Tab } from '../../../../shared/tab-types' -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' import { collectLeafIdsInOrder } from '../terminal-pane/terminal-layout-leaf-ids' import { folderWorkspaceKey, parseWorkspaceKey } from '../../../../shared/workspace-scope' import { getRepoIdFromWorktreeId } from '../../../../shared/worktree/id' diff --git a/src/renderer/src/components/wsl-move/wsl-move-slept-pane-bindings.ts b/src/renderer/src/components/wsl-move/wsl-move-slept-pane-bindings.ts index bf94e6771ec..096bf7039f4 100644 --- a/src/renderer/src/components/wsl-move/wsl-move-slept-pane-bindings.ts +++ b/src/renderer/src/components/wsl-move/wsl-move-slept-pane-bindings.ts @@ -1,4 +1,4 @@ -import { makePaneKey, isTerminalLeafId } from '../../../../shared/stable-pane-id' +import { makePaneKey, isTerminalLeafId } from '../../../../shared/workspace-layout/stable-pane-id' type SleptPaneBinding = { paneKey: string; sessionId: string } diff --git a/src/renderer/src/hooks/agent-hook-completion-background-turn-notifications.test.ts b/src/renderer/src/hooks/agent-hook-completion-background-turn-notifications.test.ts index 36588f27e91..37624f5f1d9 100644 --- a/src/renderer/src/hooks/agent-hook-completion-background-turn-notifications.test.ts +++ b/src/renderer/src/hooks/agent-hook-completion-background-turn-notifications.test.ts @@ -13,7 +13,7 @@ import { buildRunningAgentChildRowModels } from '../../../shared/running-agent-c import { worktreeAgentChildRows } from '../../../../mobile/src/worktree/worktree-agent-child-rows' import type { ParsedAgentStatusPayload } from '../../../shared/agent-status/contracts/agent-status-types' import { normalizeHookPayload } from '../../../shared/agent-hook-listener/normalization/normalize-hook-payload' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' const dispatchTerminalNotification = vi.fn() const dispatchAgentHookTerminalLifecycle = vi.fn() diff --git a/src/renderer/src/hooks/agent-hook-completion-fresh-working.test.ts b/src/renderer/src/hooks/agent-hook-completion-fresh-working.test.ts index e64486c35d2..f8960dac6f5 100644 --- a/src/renderer/src/hooks/agent-hook-completion-fresh-working.test.ts +++ b/src/renderer/src/hooks/agent-hook-completion-fresh-working.test.ts @@ -1,6 +1,6 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { ParsedAgentStatusPayload } from '../../../shared/agent-status/contracts/agent-status-types' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' const dispatchTerminalNotification = vi.fn() const dispatchAgentHookTerminalLifecycle = vi.fn() diff --git a/src/renderer/src/hooks/agent-hook-completion-grok-notifications.test.ts b/src/renderer/src/hooks/agent-hook-completion-grok-notifications.test.ts index e4de7b2f6ce..71cfc40ffb5 100644 --- a/src/renderer/src/hooks/agent-hook-completion-grok-notifications.test.ts +++ b/src/renderer/src/hooks/agent-hook-completion-grok-notifications.test.ts @@ -4,7 +4,7 @@ import type { AgentStatusIpcPayload } from '../../../shared/agent-status/contrac import type { ParsedAgentStatusPayload } from '../../../shared/agent-status/contracts/agent-status-types' import { normalizeHookPayload } from '../../../shared/agent-hook-listener/normalization/normalize-hook-payload' import { createHookListenerState } from '../../../shared/agent-hook-listener/listener-state' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { normalizeAgentStatusEvent } from './ipc-events/normalize-agent-status-event' const dispatchTerminalNotification = vi.fn() diff --git a/src/renderer/src/hooks/agent-hook-completion-notifications.ts b/src/renderer/src/hooks/agent-hook-completion-notifications.ts index baee163d2d9..2f6e2a2d69f 100644 --- a/src/renderer/src/hooks/agent-hook-completion-notifications.ts +++ b/src/renderer/src/hooks/agent-hook-completion-notifications.ts @@ -1,11 +1,11 @@ import { useAppStore } from '@/store' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { createAgentCompletionCoordinator } from '@/components/terminal-pane/agent-completion-coordinator' import type { AgentCompletionCoordinator, AgentCompletionStatusSnapshot } from '@/components/terminal-pane/agent-completion-coordinator-types' -import type { RuntimeTerminalProcessInspection } from '@/runtime/runtime-terminal-inspection' +import type { TerminalProcessInspection as RuntimeTerminalProcessInspection } from '../../../shared/terminal/pty/lifecycle/terminal-process-inspection' import { dispatchTerminalNotification } from '@/components/terminal-pane/use-notification-dispatch' import { collectLeafIdsInOrder } from '@/components/terminal-pane/layout-serialization' import { getPtyIdForPaneKey } from './pane-key-pty-id' diff --git a/src/renderer/src/hooks/agent-hook-turn-end-ownership.ts b/src/renderer/src/hooks/agent-hook-turn-end-ownership.ts index 3bb80d905b5..324e0721816 100644 --- a/src/renderer/src/hooks/agent-hook-turn-end-ownership.ts +++ b/src/renderer/src/hooks/agent-hook-turn-end-ownership.ts @@ -3,7 +3,7 @@ import { resolveCommittedTitleAgentType } from '@/lib/pane-agent-evidence' import { resolveCompatibleAgentTypeForOwner } from '../../../shared/agent-status/title/agent-title-owner' import { isAgentStatusHooksEnabledForAgent } from '../../../shared/agent-hook-listener/configuration/agent-status-hooks-setting' import { isTuiAgent } from '../../../shared/agent-launch/catalog/tui-agent-config' -import type { TerminalAgent } from '../../../shared/terminal-agent' +import type { TerminalAgent } from '../../../shared/agent-status/identity/terminal-agent' import { hookLaneCanAnnouncePaneTurnEnd } from './agent-hook-completion-notifications' import { hookTurnEndEvidence } from './agent-hook-turn-end-capability' diff --git a/src/renderer/src/hooks/automation-dispatch-completion.ts b/src/renderer/src/hooks/automation-dispatch-completion.ts index 93002bd8230..8e61d21cc7d 100644 --- a/src/renderer/src/hooks/automation-dispatch-completion.ts +++ b/src/renderer/src/hooks/automation-dispatch-completion.ts @@ -15,7 +15,7 @@ import { UNCHANGED_AUTOMATION_AGENT_STATUS_ENTRY } from './automation-agent-status-entry-change' import type { Worktree } from '../../../shared/worktree/types' -import { isProvenProcessExit } from '../../../shared/terminal-exit-cause' +import { isProvenProcessExit } from '../../../shared/terminal/pty/lifecycle/terminal-exit-cause' import { automationRunFailure } from '../../../shared/automation-run-failure-copy' import type { AutomationTerminalOwnership } from '@/lib/automation-terminal-ownership' diff --git a/src/renderer/src/hooks/ipc-events-agent-status-store-test-fixtures.ts b/src/renderer/src/hooks/ipc-events-agent-status-store-test-fixtures.ts index a037ef471cc..785eeffda24 100644 --- a/src/renderer/src/hooks/ipc-events-agent-status-store-test-fixtures.ts +++ b/src/renderer/src/hooks/ipc-events-agent-status-store-test-fixtures.ts @@ -4,7 +4,7 @@ import type { AgentStatusBatchUpdate } from '../store/slices/agent-status/agent-status-contract' import type { AppState } from '../store/types' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' export const FUTURE_LEAF_ID = '11111111-1111-4111-8111-111111111111' export const STALE_LEAF_ID = '22222222-2222-4222-8222-222222222222' diff --git a/src/renderer/src/hooks/ipc-events-close-routing-test-harness.ts b/src/renderer/src/hooks/ipc-events-close-routing-test-harness.ts index cc1bae8ff9e..b67a283773b 100644 --- a/src/renderer/src/hooks/ipc-events-close-routing-test-harness.ts +++ b/src/renderer/src/hooks/ipc-events-close-routing-test-harness.ts @@ -1,7 +1,7 @@ import type * as UIZoomLevelModule from '../../../shared/ui-zoom-level' import type * as ReactModule from 'react' import { vi } from 'vitest' -import type { TerminalSurfaceCloseTarget } from '../../../shared/terminal-surface-close-target' +import type { TerminalSurfaceCloseTarget } from '../../../shared/workspace-layout/terminal-surface-close-target' import { createIdleSshApiStub } from './ipc-events-ssh-api-test-fixtures' export type RequestTabCloseListener = (data: { diff --git a/src/renderer/src/hooks/ipc-events-harness-store-state.ts b/src/renderer/src/hooks/ipc-events-harness-store-state.ts index eb270729974..34aff5bc2a3 100644 --- a/src/renderer/src/hooks/ipc-events-harness-store-state.ts +++ b/src/renderer/src/hooks/ipc-events-harness-store-state.ts @@ -1,5 +1,5 @@ import { vi } from 'vitest' -import type { TerminalPaneLayoutNode } from '../../../shared/terminal-tab-types' +import type { TerminalPaneLayoutNode } from '../../../shared/workspace-layout/terminal-tab-types' export type HarnessTab = { id: string; ptyId?: string | null; title?: string } diff --git a/src/renderer/src/hooks/ipc-events/agent-status-event-applicator.ts b/src/renderer/src/hooks/ipc-events/agent-status-event-applicator.ts index 1b3bd04cd09..4d28f8fb797 100644 --- a/src/renderer/src/hooks/ipc-events/agent-status-event-applicator.ts +++ b/src/renderer/src/hooks/ipc-events/agent-status-event-applicator.ts @@ -3,7 +3,7 @@ import { AgentHookAttributionDiagnostics } from '../../../../shared/agent-hook-l import { pickHostTurnEnd } from '../../../../shared/agent-status/contracts/agent-status-types' import type { AgentStatusIpcPayload } from '../../../../shared/agent-status/contracts/agent-status-ipc-payload' import { isDecorativeAgentTitleFrameChange } from '../../../../shared/agent-status/title/agent-decorative-title-signature' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { normalizeProgramStatusFacet } from '../../../../shared/program-status/facet' import { resolveAgentStatusTerminalTitle } from '@/lib/agent-status-terminal-title' import { track } from '@/lib/telemetry' diff --git a/src/renderer/src/hooks/ipc-events/agent-status-pane-routing-index-retention.test.ts b/src/renderer/src/hooks/ipc-events/agent-status-pane-routing-index-retention.test.ts index a792ea18484..218bdc49e18 100644 --- a/src/renderer/src/hooks/ipc-events/agent-status-pane-routing-index-retention.test.ts +++ b/src/renderer/src/hooks/ipc-events/agent-status-pane-routing-index-retention.test.ts @@ -6,7 +6,7 @@ import { makeWorktree, TEST_REPO } from '../../store/slices/store-test-helpers' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { createAgentStatusPaneRoutingIndex, resolvePaneKeyFromRoutingIndex diff --git a/src/renderer/src/hooks/ipc-events/agent-status-pane-routing-index.test.ts b/src/renderer/src/hooks/ipc-events/agent-status-pane-routing-index.test.ts index 661fda630fb..9152264dc74 100644 --- a/src/renderer/src/hooks/ipc-events/agent-status-pane-routing-index.test.ts +++ b/src/renderer/src/hooks/ipc-events/agent-status-pane-routing-index.test.ts @@ -9,7 +9,7 @@ import { makeWorktree, TEST_REPO } from '../../store/slices/store-test-helpers' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { agentStatusPaneRoutingIndexCounters, createAgentStatusPaneRoutingIndex, diff --git a/src/renderer/src/hooks/ipc-events/agent-status-pane-routing-index.ts b/src/renderer/src/hooks/ipc-events/agent-status-pane-routing-index.ts index 98fb5bbd20a..d5bf3790ab1 100644 --- a/src/renderer/src/hooks/ipc-events/agent-status-pane-routing-index.ts +++ b/src/renderer/src/hooks/ipc-events/agent-status-pane-routing-index.ts @@ -1,7 +1,7 @@ import { collectLeafIdsInOrder } from '@/components/terminal-pane/layout-serialization' import { getRepoMapFromState, getWorktreeMapFromState } from '@/store/selectors' -import { parsePaneKey } from '../../../../shared/stable-pane-id' -import type { TerminalPaneLayoutNode } from '../../../../shared/terminal-tab-types' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' +import type { TerminalPaneLayoutNode } from '../../../../shared/workspace-layout/terminal-tab-types' import type { AppState } from '../../store/types' type AgentStatusPaneResolution = { diff --git a/src/renderer/src/hooks/ipc-events/agent-status-program-status-only.test.ts b/src/renderer/src/hooks/ipc-events/agent-status-program-status-only.test.ts index 664484f5326..13005dc5ff9 100644 --- a/src/renderer/src/hooks/ipc-events/agent-status-program-status-only.test.ts +++ b/src/renderer/src/hooks/ipc-events/agent-status-program-status-only.test.ts @@ -1,7 +1,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type { AgentStatusIpcPayload } from '../../../../shared/agent-status/contracts/agent-status-ipc-payload' import type { ProgramStatusFacet } from '../../../../shared/program-status/facet' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { buildStoreState, type StoreLike } from '../ipc-events-agent-status-store-test-fixtures' import type { PendingAgentStatusEvent } from './agent-status-bridge-types' diff --git a/src/renderer/src/hooks/ipc-events/agent-status-reconnect-replay-notification.test.ts b/src/renderer/src/hooks/ipc-events/agent-status-reconnect-replay-notification.test.ts index e9121ee005f..769b6a674e1 100644 --- a/src/renderer/src/hooks/ipc-events/agent-status-reconnect-replay-notification.test.ts +++ b/src/renderer/src/hooks/ipc-events/agent-status-reconnect-replay-notification.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type { AgentStatusIpcPayload } from '../../../../shared/agent-status/contracts/agent-status-ipc-payload' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { buildStoreState, type StoreLike } from '../ipc-events-agent-status-store-test-fixtures' const LEAF_ID = '11111111-1111-4111-8111-111111111111' diff --git a/src/renderer/src/hooks/ipc-events/agent-status-routing.ts b/src/renderer/src/hooks/ipc-events/agent-status-routing.ts index 5a7b9930c16..3891dc91122 100644 --- a/src/renderer/src/hooks/ipc-events/agent-status-routing.ts +++ b/src/renderer/src/hooks/ipc-events/agent-status-routing.ts @@ -9,7 +9,7 @@ import type { import type { AgentStatusIpcPayload } from '../../../../shared/agent-status/contracts/agent-status-ipc-payload' import { resolveAgentStatusIdentity } from '../../../../shared/agent-status/identity/agent-status-identity' import { sameAgentStatusTerminalOwner } from '../../../../shared/agent-status/identity/agent-status-terminal-owner' -import { makePaneKey, parsePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey, parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import type { useAppStore } from '../../store' export function isAgentStatusForRecentlyClosedTab( diff --git a/src/renderer/src/hooks/ipc-events/agent-status-terminal-title-tab-write.test.ts b/src/renderer/src/hooks/ipc-events/agent-status-terminal-title-tab-write.test.ts index deb31e2b472..b1d0343cc97 100644 --- a/src/renderer/src/hooks/ipc-events/agent-status-terminal-title-tab-write.test.ts +++ b/src/renderer/src/hooks/ipc-events/agent-status-terminal-title-tab-write.test.ts @@ -2,8 +2,8 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import type { useAppStore } from '@/store' import { createTestStore } from '@/store/slices/store-test-helpers' import type { AgentStatusIpcPayload } from '../../../../shared/agent-status/contracts/agent-status-ipc-payload' -import { makePaneKey } from '../../../../shared/stable-pane-id' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { buildWindowApi } from '../ipc-events-agent-status-window-test-fixtures' import type { AgentStatusSetData } from '../ipc-events-agent-status-store-test-fixtures' diff --git a/src/renderer/src/hooks/ipc-events/launch-recipe-registration.ts b/src/renderer/src/hooks/ipc-events/launch-recipe-registration.ts index da8b9777df3..d4778a24164 100644 --- a/src/renderer/src/hooks/ipc-events/launch-recipe-registration.ts +++ b/src/renderer/src/hooks/ipc-events/launch-recipe-registration.ts @@ -1,5 +1,5 @@ import { useAppStore } from '../../store' -import type { PaneLaunchRecipe } from '../../../../shared/terminal-attachment-launch-result' +import type { PaneLaunchRecipe } from '../../../../shared/terminal/pty/lifecycle/terminal-attachment-launch-result' import { tryMakePaneKey } from './agent-status-routing' /** Record a pane's launch recipe so a later resume replays its flags. */ diff --git a/src/renderer/src/hooks/ipc-events/terminal-command-state.ts b/src/renderer/src/hooks/ipc-events/terminal-command-state.ts index daec95c545d..75e8fd47d83 100644 --- a/src/renderer/src/hooks/ipc-events/terminal-command-state.ts +++ b/src/renderer/src/hooks/ipc-events/terminal-command-state.ts @@ -5,7 +5,7 @@ import type { RuntimeTerminalPresentation } from '../../../../shared/runtime-typ import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode -} from '../../../../shared/terminal-tab-types' +} from '../../../../shared/workspace-layout/terminal-tab-types' export function resolveTerminalPresentation(data: { presentation?: RuntimeTerminalPresentation diff --git a/src/renderer/src/hooks/ipc-events/terminal-pane-reveal-ipc-bridge.ts b/src/renderer/src/hooks/ipc-events/terminal-pane-reveal-ipc-bridge.ts index ea9e599c860..eb0511bb14b 100644 --- a/src/renderer/src/hooks/ipc-events/terminal-pane-reveal-ipc-bridge.ts +++ b/src/renderer/src/hooks/ipc-events/terminal-pane-reveal-ipc-bridge.ts @@ -2,11 +2,11 @@ import { revealTerminalPane } from '@/lib/reveal-terminal-pane' import { runtimeEnvironmentIdUnlessTwin } from '@/lib/resolve-owner' import { useAppStore } from '../../store' import { parseExecutionHostId } from '../../../../shared/execution-host' -import type { TerminalPaneRevealTarget } from '../../../../shared/terminal-pane-reveal' +import type { TerminalPaneRevealTarget } from '../../../../shared/workspace-layout/terminal-pane-reveal' import { isWebTerminalSurfaceTabId, toWebTerminalSurfaceTabId -} from '../../../../shared/terminal-surface-id' +} from '../../../../shared/workspace-layout/terminal-surface-id' /** Map host terminal IDs to prefixed client mirrors before reveal; leaf IDs remain stable. */ function toWindowTabId(target: TerminalPaneRevealTarget): string { diff --git a/src/renderer/src/hooks/ipc-events/terminal-pane-title-ipc-bridge.ts b/src/renderer/src/hooks/ipc-events/terminal-pane-title-ipc-bridge.ts index e8f06a3390a..6dcad89062e 100644 --- a/src/renderer/src/hooks/ipc-events/terminal-pane-title-ipc-bridge.ts +++ b/src/renderer/src/hooks/ipc-events/terminal-pane-title-ipc-bridge.ts @@ -6,8 +6,8 @@ import { collectLeafIdsInOrder } from '@/components/terminal-pane/terminal-layou import { findTerminalTabWorktreeId } from '@/components/native-chat/native-chat-file-link' import { sendLayoutCommandToOwner } from '@/runtime/layout-owner-command' import { useAppStore } from '../../store' -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' -import { isTerminalLeafId } from '../../../../shared/stable-pane-id' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' +import { isTerminalLeafId } from '../../../../shared/workspace-layout/stable-pane-id' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../../shared/layout-owner-switch' import { resolveRootlessTerminalLayoutLeafId } from '../../../../shared/workspace-layout/terminal-pane-tree' diff --git a/src/renderer/src/hooks/ipc-tab-switch-structured-tab-cycle.test.ts b/src/renderer/src/hooks/ipc-tab-switch-structured-tab-cycle.test.ts index 8e2b75c3428..3ea071df772 100644 --- a/src/renderer/src/hooks/ipc-tab-switch-structured-tab-cycle.test.ts +++ b/src/renderer/src/hooks/ipc-tab-switch-structured-tab-cycle.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type { Tab, TabGroup } from '../../../shared/tab-types' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import type { AppState } from '@/store/types' import { createTabsFocusActions } from '../store/slices/tabs/tabs-focus-actions' import type { TabsSliceGet, TabsSliceSet } from '../store/slices/tabs/tabs-slice-contract' diff --git a/src/renderer/src/hooks/legacy-worker-terminal-recovery-event.ts b/src/renderer/src/hooks/legacy-worker-terminal-recovery-event.ts index 61940acedd7..8fdcdb420a0 100644 --- a/src/renderer/src/hooks/legacy-worker-terminal-recovery-event.ts +++ b/src/renderer/src/hooks/legacy-worker-terminal-recovery-event.ts @@ -1,7 +1,7 @@ import type { CloseTerminalPaneDetail } from '@/constants/terminal' import { detachTerminalLayoutLeaf } from '@/components/terminal-pane/terminal-layout-leaf-detach' import type { AppState } from '@/store' -import { makePaneKey, parsePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey, parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' type LegacyWorkerTerminalRecoveryEvent = { paneKey: string diff --git a/src/renderer/src/hooks/pane-key-pty-id.ts b/src/renderer/src/hooks/pane-key-pty-id.ts index ec7e7d53a30..7ae7896c1e3 100644 --- a/src/renderer/src/hooks/pane-key-pty-id.ts +++ b/src/renderer/src/hooks/pane-key-pty-id.ts @@ -1,5 +1,5 @@ import { useAppStore } from '@/store' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { collectLeafIdsInOrder } from '@/components/terminal-pane/layout-serialization' export function getPtyIdForPaneKey(paneKey: string): string | null { diff --git a/src/renderer/src/hooks/useIpcEvents-agent-status-snapshot-hydration.test.ts b/src/renderer/src/hooks/useIpcEvents-agent-status-snapshot-hydration.test.ts index 798847f9a28..4eaffb8c096 100644 --- a/src/renderer/src/hooks/useIpcEvents-agent-status-snapshot-hydration.test.ts +++ b/src/renderer/src/hooks/useIpcEvents-agent-status-snapshot-hydration.test.ts @@ -11,8 +11,8 @@ import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../shared/layout-owner-switch' import { layoutApplyTestDouble } from '@/runtime/layout-apply-test-double' import type { AppState } from '../store/types' import type { MigrationUnsupportedPtyEntry } from '../../../shared/agent-status/contracts/agent-status-ipc-payload' -import type { TerminalPaneLayoutNode } from '../../../shared/terminal-tab-types' -import { makePaneKey } from '../../../shared/stable-pane-id' +import type { TerminalPaneLayoutNode } from '../../../shared/workspace-layout/terminal-tab-types' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { buildStoreState, expectWorktreeRouting, diff --git a/src/renderer/src/hooks/useIpcEvents-terminal-create-surfacing.test.ts b/src/renderer/src/hooks/useIpcEvents-terminal-create-surfacing.test.ts index 38a3942b7aa..57d43c5407f 100644 --- a/src/renderer/src/hooks/useIpcEvents-terminal-create-surfacing.test.ts +++ b/src/renderer/src/hooks/useIpcEvents-terminal-create-surfacing.test.ts @@ -1,6 +1,6 @@ import { EVERY_AGENT_CHAT } from '../../../shared/native-chat/every-agent-chat.test-fixture' import { describe, expect, it } from 'vitest' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { setupTerminalCreateSurfacing } from './ipc-events-terminal-create-test-harness' describe('useIpcEvents updater integration', () => { diff --git a/src/renderer/src/hooks/useReadOnScreenAttention.away.test.ts b/src/renderer/src/hooks/useReadOnScreenAttention.away.test.ts index 94d8d0cb670..6d615200b2d 100644 --- a/src/renderer/src/hooks/useReadOnScreenAttention.away.test.ts +++ b/src/renderer/src/hooks/useReadOnScreenAttention.away.test.ts @@ -4,7 +4,7 @@ import { afterEach, beforeEach, expect, it, vi } from 'vitest' import { useReadOnScreenAttention } from './useReadOnScreenAttention' import { useAppStore } from '../store' import { makeTab, makeTabGroup, makeUnifiedTab } from '../store/slices/store-session-test-harness' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { createNotificationsApi } from '../web/preload-api/web-notifications-api' const leaf = '11111111-1111-4111-8111-111111111111' diff --git a/src/renderer/src/hooks/useReadOnScreenAttention.clock-skew.test.ts b/src/renderer/src/hooks/useReadOnScreenAttention.clock-skew.test.ts index 88f363b231d..83fadc6a477 100644 --- a/src/renderer/src/hooks/useReadOnScreenAttention.clock-skew.test.ts +++ b/src/renderer/src/hooks/useReadOnScreenAttention.clock-skew.test.ts @@ -6,7 +6,7 @@ import type * as AgentAutoAckPresence from './agent-auto-ack-presence' import { useReadOnScreenAttention } from './useReadOnScreenAttention' import { useAppStore } from '../store' import { makeTab, makeTabGroup, makeUnifiedTab } from '../store/slices/store-session-test-harness' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import type { AgentStatusEntry } from '../../../shared/agent-status/contracts/agent-status-types' // Synchronous ack re-entry once repeated forever when remote turn time led local clock and scans crossed millisecond boundaries (React #185); slice guards retained pre-write snapshots. diff --git a/src/renderer/src/hooks/useReadOnScreenAttention.floating-panel.test.ts b/src/renderer/src/hooks/useReadOnScreenAttention.floating-panel.test.ts index 95911b713f9..af845839d9c 100644 --- a/src/renderer/src/hooks/useReadOnScreenAttention.floating-panel.test.ts +++ b/src/renderer/src/hooks/useReadOnScreenAttention.floating-panel.test.ts @@ -8,7 +8,7 @@ import { useAppStore } from '../store' import { selectFloatingWorkspaceHasUnread } from '../store/selectors' import { makeTab, makeTabGroup, makeUnifiedTab } from '../store/slices/store-session-test-harness' import { FLOATING_TERMINAL_WORKTREE_ID, getDefaultSettings } from '../../../shared/constants' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' vi.mock('./agent-auto-ack-presence', async (importOriginal) => ({ ...(await importOriginal()), diff --git a/src/renderer/src/hooks/useReadOnScreenAttention.mixed-workspace.test.ts b/src/renderer/src/hooks/useReadOnScreenAttention.mixed-workspace.test.ts index 9b9449befb5..ea104361867 100644 --- a/src/renderer/src/hooks/useReadOnScreenAttention.mixed-workspace.test.ts +++ b/src/renderer/src/hooks/useReadOnScreenAttention.mixed-workspace.test.ts @@ -8,7 +8,7 @@ import { makeTabGroup, makeUnifiedTab } from '../store/slices/store-test-helpers' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { structuredAgentSessionPaneKey } from '../../../shared/agent-session/view/structured-agent-session-projection' import { workspaceHasLiveMarker } from '../store/slices/workspace-attention/workspace-live-markers' diff --git a/src/renderer/src/hooks/useReadOnScreenAttention.test.ts b/src/renderer/src/hooks/useReadOnScreenAttention.test.ts index e55fc612870..b19f701fd05 100644 --- a/src/renderer/src/hooks/useReadOnScreenAttention.test.ts +++ b/src/renderer/src/hooks/useReadOnScreenAttention.test.ts @@ -7,7 +7,7 @@ import { import { createTestStore, makeTab, makeUnifiedTab } from '../store/slices/store-test-helpers' import type { RetainedAgentEntry } from '../store/slices/agent-status/agent-status-contract' import { FLOATING_TERMINAL_WORKTREE_ID, getDefaultSettings } from '../../../shared/constants' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' const CODEX_LEAF_ID = '11111111-1111-4111-8111-111111111111' const OTHER_LEAF_ID = '22222222-2222-4222-8222-222222222222' diff --git a/src/renderer/src/lib/active-agent-note-send-target-detection.test.ts b/src/renderer/src/lib/active-agent-note-send-target-detection.test.ts index d8d3e60d9b8..b5c6abb568d 100644 --- a/src/renderer/src/lib/active-agent-note-send-target-detection.test.ts +++ b/src/renderer/src/lib/active-agent-note-send-target-detection.test.ts @@ -7,7 +7,7 @@ import { type NoteSendAppState } from './active-agent-note-send-test-harness' import type { AgentStatusEntry } from '../../../shared/agent-status/contracts/agent-status-types' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' const NOW = 1_700_000_000_000 diff --git a/src/renderer/src/lib/active-agent-note-send-test-harness.ts b/src/renderer/src/lib/active-agent-note-send-test-harness.ts index 31eb87ff9b0..0717fa37c9d 100644 --- a/src/renderer/src/lib/active-agent-note-send-test-harness.ts +++ b/src/renderer/src/lib/active-agent-note-send-test-harness.ts @@ -1,5 +1,5 @@ import type { AgentStatusEntry } from '../../../shared/agent-status/contracts/agent-status-types' -import type { TerminalLayoutSnapshot } from '../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../shared/workspace-layout/terminal-tab-types' export const LEAF_ID = '11111111-1111-4111-8111-111111111111' export const OTHER_LEAF_ID = '22222222-2222-4222-8222-222222222222' diff --git a/src/renderer/src/lib/active-agent-note-target.ts b/src/renderer/src/lib/active-agent-note-target.ts index 9595cec8eb1..be158d75696 100644 --- a/src/renderer/src/lib/active-agent-note-target.ts +++ b/src/renderer/src/lib/active-agent-note-target.ts @@ -1,7 +1,7 @@ import type { RuntimeTerminalListResult } from '../../../shared/runtime-types' import { runtimeTargetForOwnerEnvironment } from '@/runtime/runtime-client-target' import type { RuntimeClientTarget } from '../../../shared/runtime-client-target' -import { toHostSessionTabId } from '../../../shared/terminal-surface-id' +import { toHostSessionTabId } from '../../../shared/workspace-layout/terminal-surface-id' import { AGENT_STATUS_STALE_AFTER_MS } from '../../../shared/agent-status/contracts/agent-status-freshness' import type { AgentStatusEntry } from '../../../shared/agent-status/contracts/agent-status-types' import type { AppState } from '@/store/types' @@ -9,8 +9,8 @@ import { callRuntimeRpc } from '@/runtime/runtime-rpc-client' import { runtimeEnvironmentIdOrLocalUnlessTwin } from '@/lib/worktree-runtime-owner' import type { WorktreeRuntimeOwnerState } from '@/lib/worktree-runtime-owner-state' import { toRuntimeWorktreeSelector } from '@/runtime/runtime-worktree-selector' -import { isTerminalLeafId, makePaneKey } from '../../../shared/stable-pane-id' -import type { TerminalLayoutSnapshot } from '../../../shared/terminal-tab-types' +import { isTerminalLeafId, makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' +import type { TerminalLayoutSnapshot } from '../../../shared/workspace-layout/terminal-tab-types' import { classifyTitleActivity, isExplicitAgentStatusFresh, diff --git a/src/renderer/src/lib/activity-thread-display.ts b/src/renderer/src/lib/activity-thread-display.ts index 9bedece7bec..8ae24edd67d 100644 --- a/src/renderer/src/lib/activity-thread-display.ts +++ b/src/renderer/src/lib/activity-thread-display.ts @@ -3,7 +3,7 @@ import type { AgentStatusEntry, AgentStatusState } from '../../../shared/agent-status/contracts/agent-status-types' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import type { Worktree } from '../../../shared/worktree/types' import { getAgentRowPrimaryText, diff --git a/src/renderer/src/lib/adopt-agent-background-session-tab.ts b/src/renderer/src/lib/adopt-agent-background-session-tab.ts index aa980570d9f..23857aad126 100644 --- a/src/renderer/src/lib/adopt-agent-background-session-tab.ts +++ b/src/renderer/src/lib/adopt-agent-background-session-tab.ts @@ -1,5 +1,9 @@ import { useAppStore } from '@/store' -import { makePaneKey, parsePaneKey, type PaneKey } from '../../../shared/stable-pane-id' +import { + makePaneKey, + parsePaneKey, + type PaneKey +} from '../../../shared/workspace-layout/stable-pane-id' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../shared/layout-owner-switch' import type { AgentType } from '../../../shared/agent-status/contracts/agent-status-types' import { bindAutomationTerminal } from '@/lib/automation-terminal-ownership' diff --git a/src/renderer/src/lib/agent-account-restart-startup.test.ts b/src/renderer/src/lib/agent-account-restart-startup.test.ts index 64bbe75cd36..550e59eb3f8 100644 --- a/src/renderer/src/lib/agent-account-restart-startup.test.ts +++ b/src/renderer/src/lib/agent-account-restart-startup.test.ts @@ -1,7 +1,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type { AgentStatusEntry } from '../../../shared/agent-status/contracts/agent-status-types' import { useAppStore } from '@/store' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { getDefaultSettings } from '../../../shared/constants' import { resolveTuiAgentLaunchArgs } from '../../../shared/agent-launch/choices/tui-agent-launch-defaults' import { diff --git a/src/renderer/src/lib/agent-account-restart-startup.ts b/src/renderer/src/lib/agent-account-restart-startup.ts index 08ee162be33..4033188bef1 100644 --- a/src/renderer/src/lib/agent-account-restart-startup.ts +++ b/src/renderer/src/lib/agent-account-restart-startup.ts @@ -13,7 +13,7 @@ import { runtimeEnvironmentIdUnlessTwin } from '@/lib/resolve-owner' import { getLocalProjectExecutionRuntimeContext } from '@/lib/local-preflight-context' import { repoMatchesHostIdentity } from '@/store/slices/repo-host-identity' import { isSessionHeldByAnotherPane } from '@/lib/claude-session-pane-holders' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { normalizeAgentProviderSession, type AgentProviderSessionMetadata, diff --git a/src/renderer/src/lib/agent-background-session-exit.ts b/src/renderer/src/lib/agent-background-session-exit.ts index 2de7a407a5b..cd0253f5420 100644 --- a/src/renderer/src/lib/agent-background-session-exit.ts +++ b/src/renderer/src/lib/agent-background-session-exit.ts @@ -2,7 +2,7 @@ import { useAppStore } from '@/store' import { isProvenProcessExit, UNVERIFIED_PROCESS_EXIT_CODE -} from '../../../shared/terminal-exit-cause' +} from '../../../shared/terminal/pty/lifecycle/terminal-exit-cause' /** Missing wait status means no observed exit; inventing zero would falsely report a clean finish. */ export function runtimeWaitExitCode(wait: { exitCode?: number | null }): number { diff --git a/src/renderer/src/lib/agent-catalog.tsx b/src/renderer/src/lib/agent-catalog.tsx index cbcace15635..9a18e6f075f 100644 --- a/src/renderer/src/lib/agent-catalog.tsx +++ b/src/renderer/src/lib/agent-catalog.tsx @@ -1,7 +1,7 @@ import type React from 'react' import { ClaudeIcon, DroidIcon, OpenAIIcon } from '@/components/status-bar/icons' import type { TuiAgent } from '../../../shared/agent-launch/catalog/tui-agent' -import type { TerminalAgent } from '../../../shared/terminal-agent' +import type { TerminalAgent } from '../../../shared/agent-status/identity/terminal-agent' import { formatAgentTypeLabel } from '../../../shared/agent-status/presentation/agent-type-label' import { AgentLetterIcon, diff --git a/src/renderer/src/lib/agent-followup-delivery.ts b/src/renderer/src/lib/agent-followup-delivery.ts index 444f03ac988..079b830fb71 100644 --- a/src/renderer/src/lib/agent-followup-delivery.ts +++ b/src/renderer/src/lib/agent-followup-delivery.ts @@ -5,7 +5,7 @@ import { isAgentForegroundWrapperProcess, isExpectedAgentProcess } from '../../../shared/agent-status/process/agent-process-recognition' -import { isShellProcess } from '../../../shared/shell-process-detection' +import { isShellProcess } from '../../../shared/agent-status/process/shell-process-detection' export async function sendFollowupPromptWhenAgentReady(args: { ptyId: string diff --git a/src/renderer/src/lib/agent-hibernation-coordinator-test-fixture.ts b/src/renderer/src/lib/agent-hibernation-coordinator-test-fixture.ts index e6f1b0d9927..ebddc1a45db 100644 --- a/src/renderer/src/lib/agent-hibernation-coordinator-test-fixture.ts +++ b/src/renderer/src/lib/agent-hibernation-coordinator-test-fixture.ts @@ -1,6 +1,9 @@ import { vi, type Mock } from 'vitest' import type { AgentStatusEntry } from '../../../shared/agent-status/contracts/agent-status-types' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../shared/terminal-tab-types' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../shared/workspace-layout/terminal-tab-types' import { useAppStore } from '@/store' import type { AppState } from '@/store/types' import { DEFAULT_AGENT_HIBERNATION_IDLE_MS } from './agent-hibernation-planner' diff --git a/src/renderer/src/lib/agent-hibernation-pane-age.test.ts b/src/renderer/src/lib/agent-hibernation-pane-age.test.ts index 5df8df72443..7530c39f580 100644 --- a/src/renderer/src/lib/agent-hibernation-pane-age.test.ts +++ b/src/renderer/src/lib/agent-hibernation-pane-age.test.ts @@ -1,5 +1,8 @@ import { beforeEach, describe, expect, it } from 'vitest' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../shared/terminal-tab-types' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../shared/workspace-layout/terminal-tab-types' import { getHibernationBoundaryResolvedAtByPaneKey, getHibernationPtyBindingFirstSeenAtByPaneKey, diff --git a/src/renderer/src/lib/agent-hibernation-pane-age.ts b/src/renderer/src/lib/agent-hibernation-pane-age.ts index 15a2b37b4bc..f00fad6b8c5 100644 --- a/src/renderer/src/lib/agent-hibernation-pane-age.ts +++ b/src/renderer/src/lib/agent-hibernation-pane-age.ts @@ -1,5 +1,8 @@ -import { makePaneKey } from '../../../shared/stable-pane-id' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../shared/terminal-tab-types' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../shared/workspace-layout/terminal-tab-types' type PtyBinding = { ptyId: string; firstSeenAt: number; lastSeenAt: number } diff --git a/src/renderer/src/lib/agent-hibernation-pane-eligibility.ts b/src/renderer/src/lib/agent-hibernation-pane-eligibility.ts index 072fa391385..8e5c531c174 100644 --- a/src/renderer/src/lib/agent-hibernation-pane-eligibility.ts +++ b/src/renderer/src/lib/agent-hibernation-pane-eligibility.ts @@ -1,8 +1,11 @@ import type { AgentStatusEntry } from '../../../shared/agent-status/contracts/agent-status-types' import { getAgentResumeArgv } from '../../../shared/agent-launch/startup/agent-resume-argv' import { isResumableTuiAgent } from '../../../shared/agent-session/lifecycle/agent-session-resume' -import { parsePaneKey } from '../../../shared/stable-pane-id' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../shared/terminal-tab-types' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../shared/workspace-layout/terminal-tab-types' import { parseRemoteRuntimePtyId } from '../../../shared/remote-runtime/remote-runtime-pty-id' import { lastInputBlocksHibernation } from './agent-hibernation-input-guard' import { isLiveResumeAnchorForCompletedAgent } from '../../../shared/agent-session/lifecycle/live-resume-anchor-record' diff --git a/src/renderer/src/lib/agent-hibernation-planner-snapshot.ts b/src/renderer/src/lib/agent-hibernation-planner-snapshot.ts index ed7fbbe407b..7d4a2463f39 100644 --- a/src/renderer/src/lib/agent-hibernation-planner-snapshot.ts +++ b/src/renderer/src/lib/agent-hibernation-planner-snapshot.ts @@ -1,7 +1,10 @@ import type { AgentStatusEntry } from '../../../shared/agent-status/contracts/agent-status-types' import type { SleepingAgentSessionRecord } from '../../../shared/agent-session/lifecycle/agent-session-resume' import type { GlobalSettings } from '../../../shared/global-settings-types' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../shared/terminal-tab-types' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../shared/workspace-layout/terminal-tab-types' export type AgentHibernationPlannerSnapshot = { settings: Pick | null diff --git a/src/renderer/src/lib/agent-hibernation-planner.test.ts b/src/renderer/src/lib/agent-hibernation-planner.test.ts index dc9b08bdfac..249bd13d2a6 100644 --- a/src/renderer/src/lib/agent-hibernation-planner.test.ts +++ b/src/renderer/src/lib/agent-hibernation-planner.test.ts @@ -1,7 +1,10 @@ import { describe, expect, it } from 'vitest' import type { AgentStatusEntry } from '../../../shared/agent-status/contracts/agent-status-types' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../shared/constants' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../shared/terminal-tab-types' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../shared/workspace-layout/terminal-tab-types' import { DEFAULT_AGENT_HIBERNATION_IDLE_MS, planAgentHibernationCandidates, diff --git a/src/renderer/src/lib/agent-hibernation-planner.ts b/src/renderer/src/lib/agent-hibernation-planner.ts index 9b752cf7203..65cabb43d87 100644 --- a/src/renderer/src/lib/agent-hibernation-planner.ts +++ b/src/renderer/src/lib/agent-hibernation-planner.ts @@ -1,6 +1,6 @@ import type { AgentStatusEntry } from '../../../shared/agent-status/contracts/agent-status-types' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../shared/constants' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import { getEligiblePane, getEntryTabId, diff --git a/src/renderer/src/lib/agent-launch-route-input.ts b/src/renderer/src/lib/agent-launch-route-input.ts index 9f21df12340..1355655420c 100644 --- a/src/renderer/src/lib/agent-launch-route-input.ts +++ b/src/renderer/src/lib/agent-launch-route-input.ts @@ -6,7 +6,7 @@ import { } from '../../../shared/execution-host' import type { AppState } from '@/store/types' import { findWorktreeById } from '@/store/slices/worktree-helpers' -import { requestsCwdOutsideWorkspaceRootForWorkspace } from '../../../shared/terminal-startup-cwd' +import { requestsCwdOutsideWorkspaceRootForWorkspace } from '../../../shared/shell/launch/terminal-startup-cwd' import type { TuiAgent } from '../../../shared/agent-launch/catalog/tui-agent' import { workspaceKindForWorktreeId } from '../../../shared/workspace-launch-kind' import type { AgentLaunchRoutingInput } from '@/lib/agent-launch-routing' diff --git a/src/renderer/src/lib/agent-launch-tab-main-written.ts b/src/renderer/src/lib/agent-launch-tab-main-written.ts index 44e2c2df892..8facc2b5d64 100644 --- a/src/renderer/src/lib/agent-launch-tab-main-written.ts +++ b/src/renderer/src/lib/agent-launch-tab-main-written.ts @@ -5,7 +5,7 @@ import type { AgentLaunchTabPublished, AgentLaunchTabPublishRequest } from '../../../shared/agent-launch/contracts/agent-launch-tab-publication' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import { useAppStore } from '../store' import { presentAgentLaunchTab } from './agent-launch-tab-presentation' import { diff --git a/src/renderer/src/lib/agent-ready-wait.ts b/src/renderer/src/lib/agent-ready-wait.ts index 176a915c967..94e93ee07f9 100644 --- a/src/renderer/src/lib/agent-ready-wait.ts +++ b/src/renderer/src/lib/agent-ready-wait.ts @@ -1,6 +1,6 @@ import { classifyTitleActivity } from '@/lib/pane-agent-evidence' import { isExpectedAgentProcess } from '../../../shared/agent-status/process/agent-process-recognition' -import { isShellProcess } from '../../../shared/shell-process-detection' +import { isShellProcess } from '../../../shared/agent-status/process/shell-process-detection' import { useAppStore } from '@/store' import { inspectRuntimeTerminalProcess } from '@/runtime/runtime-terminal-inspection' diff --git a/src/renderer/src/lib/agent-session/structured-agent-session-provisional-tab.test.ts b/src/renderer/src/lib/agent-session/structured-agent-session-provisional-tab.test.ts index f38eaf5fa92..93d80f6e443 100644 --- a/src/renderer/src/lib/agent-session/structured-agent-session-provisional-tab.test.ts +++ b/src/renderer/src/lib/agent-session/structured-agent-session-provisional-tab.test.ts @@ -27,7 +27,7 @@ import { applyStructuredSessionTabSnapshots } from '@/runtime/local-structured-s import { makeEmptyHostSnapshot } from '@/runtime/host-session-mirror-frame-fixtures' import * as unlisted from '../structured-agent-session-unlisted-created-chats' import { buildFullWorktreePurgeState } from '@/store/slices/worktrees/teardown/worktree-purge-state' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../../shared/layout-owner-switch' import { sendLayoutCommandToOwner } from '@/runtime/layout-owner-command' import { structuredAgentSessionTabId } from '../../../../shared/agent-session/view/structured-agent-session-projection' diff --git a/src/renderer/src/lib/agent-startup-delayed-delivery.ts b/src/renderer/src/lib/agent-startup-delayed-delivery.ts index 6194ac69e76..2637ef3b4b5 100644 --- a/src/renderer/src/lib/agent-startup-delayed-delivery.ts +++ b/src/renderer/src/lib/agent-startup-delayed-delivery.ts @@ -1,6 +1,6 @@ import { useAppStore } from '@/store' import type { AgentStartupPlan } from '../../../shared/agent-launch/startup/tui-agent-startup' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { agentStartupDeliveryKey as deliveryKey, clearConsumedAgentStartupDeliveriesForTests, diff --git a/src/renderer/src/lib/agent-status-connection-ownership.ts b/src/renderer/src/lib/agent-status-connection-ownership.ts index 6f55aaaca4f..ecf95fe0110 100644 --- a/src/renderer/src/lib/agent-status-connection-ownership.ts +++ b/src/renderer/src/lib/agent-status-connection-ownership.ts @@ -3,7 +3,7 @@ import { parseRemoteRuntimePtyId } from '../../../shared/remote-runtime/remote-runtime-pty-id' import { parseAppSshPtyId } from '../../../shared/ssh-pty-id' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' export type AgentStatusConnectionRouting = { connectionId: string | null } diff --git a/src/renderer/src/lib/agent-status-pane-ownership.ts b/src/renderer/src/lib/agent-status-pane-ownership.ts index 52d82243e39..8dc34fed140 100644 --- a/src/renderer/src/lib/agent-status-pane-ownership.ts +++ b/src/renderer/src/lib/agent-status-pane-ownership.ts @@ -1,5 +1,5 @@ import type { AppState } from '../store/types' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { collectLeafIdsInOrder } from '../components/terminal-pane/terminal-layout-leaf-ids' import { getIndexedRepoMap, getIndexedWorktreeMap } from '../store/worktree-repo-index' import { selectWorktreesByRepo } from '@/store/workspace-record-selectors' diff --git a/src/renderer/src/lib/agent-status.ts b/src/renderer/src/lib/agent-status.ts index e0a9dcb0462..b7e21c0d15a 100644 --- a/src/renderer/src/lib/agent-status.ts +++ b/src/renderer/src/lib/agent-status.ts @@ -1,4 +1,4 @@ -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import { isTuiAgent } from '../../../shared/agent-launch/catalog/tui-agent-config' import type { Worktree } from '../../../shared/worktree/types' import type { diff --git a/src/renderer/src/lib/ai-vault-tab-title-requests.ts b/src/renderer/src/lib/ai-vault-tab-title-requests.ts index 70bf8f6dc26..8b4016f9d8e 100644 --- a/src/renderer/src/lib/ai-vault-tab-title-requests.ts +++ b/src/renderer/src/lib/ai-vault-tab-title-requests.ts @@ -8,8 +8,8 @@ import { isAiVaultTitleAgent } from '../../../shared/ai-vault/contracts/ai-vault-session-title' import type { ExecutionHostId } from '../../../shared/execution-host' -import { parsePaneKey } from '../../../shared/stable-pane-id' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import { getExecutionHostIdForWorktree } from '@/lib/worktree-runtime-owner' import type { AppState } from '@/store/types' import type { AgentPaneConversationIdentity } from '@/store/slices/agent-pane-conversation' diff --git a/src/renderer/src/lib/ai-vault-tab-title-sync-inputs.test.ts b/src/renderer/src/lib/ai-vault-tab-title-sync-inputs.test.ts index b2d540fd05c..d2ec730568c 100644 --- a/src/renderer/src/lib/ai-vault-tab-title-sync-inputs.test.ts +++ b/src/renderer/src/lib/ai-vault-tab-title-sync-inputs.test.ts @@ -1,7 +1,7 @@ import { createStore } from 'zustand/vanilla' import { describe, expect, it, vi } from 'vitest' import type { AppState } from '@/store/types' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import { aiVaultTitleSyncInputsChanged } from './ai-vault-tab-title-sync-inputs' import { startAiVaultTabTitleSync } from './ai-vault-tab-title-sync' diff --git a/src/renderer/src/lib/ai-vault-tab-title-sync-inputs.ts b/src/renderer/src/lib/ai-vault-tab-title-sync-inputs.ts index 8d19cd18010..13f1ce4cb12 100644 --- a/src/renderer/src/lib/ai-vault-tab-title-sync-inputs.ts +++ b/src/renderer/src/lib/ai-vault-tab-title-sync-inputs.ts @@ -1,6 +1,6 @@ import type { AgentProviderSessionMetadata } from '../../../shared/agent-session/lifecycle/agent-session-resume' import { isAiVaultTitleAgent } from '../../../shared/ai-vault/contracts/ai-vault-session-title' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import { getExecutionHostIdForWorktree } from '@/lib/worktree-runtime-owner' import type { AppState } from '@/store/types' import { collectAiVaultTitleRequests } from './ai-vault-tab-title-requests' diff --git a/src/renderer/src/lib/ai-vault-tab-title-sync.test.ts b/src/renderer/src/lib/ai-vault-tab-title-sync.test.ts index 5df5d399f4b..fdb7ed1829c 100644 --- a/src/renderer/src/lib/ai-vault-tab-title-sync.test.ts +++ b/src/renderer/src/lib/ai-vault-tab-title-sync.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it, vi } from 'vitest' import type { AiVaultSessionTitlesResult } from '../../../shared/ai-vault/contracts/ai-vault-session-title' import { resolveTerminalTabTitle } from '../../../shared/tab-title-resolution' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import type { AiVaultTitleRequest } from './ai-vault-tab-title-requests' import { settleAiVaultTitleRequestBatches } from './ai-vault-tab-title-batches' import { startAiVaultTabTitleSync } from './ai-vault-tab-title-sync' diff --git a/src/renderer/src/lib/automation-session-observer.test.ts b/src/renderer/src/lib/automation-session-observer.test.ts index f38636bd506..07987a50985 100644 --- a/src/renderer/src/lib/automation-session-observer.test.ts +++ b/src/renderer/src/lib/automation-session-observer.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { toAppSshPtyId } from '../../../shared/ssh-pty-id' -import { UNVERIFIED_PROCESS_EXIT_CODE } from '../../../shared/terminal-exit-cause' +import { UNVERIFIED_PROCESS_EXIT_CODE } from '../../../shared/terminal/pty/lifecycle/terminal-exit-cause' const mockSubscribeToPtyData = vi.fn() const mockSubscribeToPtyExit = vi.fn() diff --git a/src/renderer/src/lib/automation-session-reuse.ts b/src/renderer/src/lib/automation-session-reuse.ts index 9de3846c066..d37f4fff9e6 100644 --- a/src/renderer/src/lib/automation-session-reuse.ts +++ b/src/renderer/src/lib/automation-session-reuse.ts @@ -4,9 +4,9 @@ import { findReusableAutomationRun, type AutomationSessionTarget } from '../../../shared/automation-session-reuse' -import { getPtyExecutionHost } from '../../../shared/terminal-execution-host' +import { getPtyExecutionHost } from '../../../shared/terminal/pty/lifecycle/terminal-execution-host' import type { TuiAgent } from '../../../shared/agent-launch/catalog/tui-agent' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import type { AppState } from '@/store/types' export type ReusableAutomationSession = { diff --git a/src/renderer/src/lib/automation-terminal-bind-layout-owner.test.ts b/src/renderer/src/lib/automation-terminal-bind-layout-owner.test.ts index 3f2d7fd2865..6d091dc129b 100644 --- a/src/renderer/src/lib/automation-terminal-bind-layout-owner.test.ts +++ b/src/renderer/src/lib/automation-terminal-bind-layout-owner.test.ts @@ -2,7 +2,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type * as AgentStatusModule from '@/lib/agent-status' import { createTestStore, makeWorktree, seedStore } from '@/store/slices/store-test-helpers' import { createStoreCascadesMockApi } from '@/store/slices/store-cascades-test-harness' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { LayoutApplyParams } from '../../../shared/rpc-contract/workspace-layout-params' import { bindAutomationTerminal } from './automation-terminal-ownership' diff --git a/src/renderer/src/lib/automation-terminal-ownership.ts b/src/renderer/src/lib/automation-terminal-ownership.ts index 1443312a635..f4b3ce8ef12 100644 --- a/src/renderer/src/lib/automation-terminal-ownership.ts +++ b/src/renderer/src/lib/automation-terminal-ownership.ts @@ -1,8 +1,8 @@ import { isRemoteRuntimePtyId } from '../../../shared/remote-runtime/remote-runtime-pty-id' import { useAppStore } from '@/store' import type { AppState } from '@/store/types' -import type { TerminalTab } from '../../../shared/terminal-tab-types' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import '@/store/slices/agent-status/agent-status' import { collectSleepingAgentSessionRecordsForWorktree } from '@/store/slices/agent-status/agent-status-recovery-collection' import { singlePaneLayoutSnapshot } from '@/store/slices/terminal-helpers' diff --git a/src/renderer/src/lib/claude-agent-row-view.ts b/src/renderer/src/lib/claude-agent-row-view.ts index b7ad200a293..69f8d2300a3 100644 --- a/src/renderer/src/lib/claude-agent-row-view.ts +++ b/src/renderer/src/lib/claude-agent-row-view.ts @@ -7,7 +7,7 @@ import { hostRouteForAuthority } from '@/runtime/runtime-client-target' import { getRuntimeEnvironmentRevision } from '@/runtime/runtime-environment-revision' import { resolveOwnerOrLocal } from './worktree-runtime-owner' import { findActiveRuntimeTerminal } from './active-agent-note-target' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { authorityKey } from '../../../shared/host-authority' import type { ClaudeAgentViewResult } from '../../../shared/claude-agent-view' diff --git a/src/renderer/src/lib/claude-session-account-move.test.ts b/src/renderer/src/lib/claude-session-account-move.test.ts index c27ec2bb619..811d3b2c3a6 100644 --- a/src/renderer/src/lib/claude-session-account-move.test.ts +++ b/src/renderer/src/lib/claude-session-account-move.test.ts @@ -1,8 +1,8 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { useAppStore } from '@/store' import type { AgentStatusEntry } from '../../../shared/agent-status/contracts/agent-status-types' -import { makePaneKey } from '../../../shared/stable-pane-id' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import type { ClaudeManagedAccount } from '../../../shared/managed-account-types' import type { ProjectExecutionRuntimeResolution } from '../../../shared/project-execution-runtime' import { getDefaultSettings } from '../../../shared/constants' diff --git a/src/renderer/src/lib/claude-session-account-move.ts b/src/renderer/src/lib/claude-session-account-move.ts index 267ebe12fbb..7240412306b 100644 --- a/src/renderer/src/lib/claude-session-account-move.ts +++ b/src/renderer/src/lib/claude-session-account-move.ts @@ -1,18 +1,21 @@ /** Find sessions affected by account selection; resume preserves the session while launch reads the newly selected account folder. */ -import type { AppState } from '@/store' -import { useAppStore } from '@/store' + +import { type AppState, useAppStore } from '@/store' import { confirmRuntimeTerminalForegroundProcess, - inspectRuntimeTerminalProcess, - type RuntimeTerminalProcessInspection + inspectRuntimeTerminalProcess } from '@/runtime/runtime-terminal-inspection' + import { isAgentForegroundWrapperProcess, recognizeAgentProcess } from '../../../shared/agent-status/process/agent-process-recognition' import { normalizeAgentProviderSession } from '../../../shared/agent-session/lifecycle/agent-session-resume' -import { isTerminalLeafId, makePaneKey } from '../../../shared/stable-pane-id' -import { isClientOnlyUnverifiableInspection } from '../../../shared/terminal-process-inspection' +import { isTerminalLeafId, makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' +import { + type TerminalProcessInspection as RuntimeTerminalProcessInspection, + isClientOnlyUnverifiableInspection +} from '../../../shared/terminal/pty/lifecycle/terminal-process-inspection' import { getCodexSelectionLaneKey, normalizeCodexAccountSelectionTarget, @@ -23,7 +26,7 @@ import type { ClaudeManagedAccount, ClaudeRateLimitAccountsState } from '../../../shared/managed-account-types' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import { resolvePaneAgentSessionId } from '@/components/terminal-pane/pane-agent-session-id' import { resolveAgentAccountRestartResumeStartup } from './agent-account-restart-startup' import { isSessionHeldByAnotherPane } from './claude-session-pane-holders' diff --git a/src/renderer/src/lib/claude-session-pane-holders.ts b/src/renderer/src/lib/claude-session-pane-holders.ts index 592163455c6..c2b9c60cb1a 100644 --- a/src/renderer/src/lib/claude-session-pane-holders.ts +++ b/src/renderer/src/lib/claude-session-pane-holders.ts @@ -1,6 +1,6 @@ import { resolvePaneAgentSessionId } from '@/components/terminal-pane/pane-agent-session-id' import type { AppState } from '@/store' -import { isTerminalLeafId, makePaneKey } from '../../../shared/stable-pane-id' +import { isTerminalLeafId, makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' /** Claude reopens one branch of a shared transcript on resume, which may be the other pane's. */ export function isSessionHeldByAnotherPane( diff --git a/src/renderer/src/lib/cmd-j-host-qualified-candidate-ownership.test.ts b/src/renderer/src/lib/cmd-j-host-qualified-candidate-ownership.test.ts index 66d4dc43a3d..89e784f26e2 100644 --- a/src/renderer/src/lib/cmd-j-host-qualified-candidate-ownership.test.ts +++ b/src/renderer/src/lib/cmd-j-host-qualified-candidate-ownership.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest' import type { BrowserPage, BrowserWorkspace } from '../../../shared/browser-workspace-types' import type { Tab } from '../../../shared/tab-types' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import type { Worktree } from '../../../shared/worktree/types' import { buildSearchableBrowserPages } from './browser-palette-page-entries' import { searchBrowserPages } from './browser-palette-search' diff --git a/src/renderer/src/lib/codex-pane-restart-eligibility.ts b/src/renderer/src/lib/codex-pane-restart-eligibility.ts index 45cf56868ec..45eab760037 100644 --- a/src/renderer/src/lib/codex-pane-restart-eligibility.ts +++ b/src/renderer/src/lib/codex-pane-restart-eligibility.ts @@ -2,10 +2,13 @@ import { isAgentForegroundWrapperProcess, recognizeAgentProcess } from '../../../shared/agent-status/process/agent-process-recognition' -import { isShellProcess } from '../../../shared/shell-process-detection' +import { isShellProcess } from '../../../shared/agent-status/process/shell-process-detection' import type { TuiAgent } from '../../../shared/agent-launch/catalog/tui-agent' -import type { RuntimeTerminalProcessInspection } from '@/runtime/runtime-terminal-inspection' -import { isClientOnlyUnverifiableInspection } from '../../../shared/terminal-process-inspection' + +import { + type TerminalProcessInspection as RuntimeTerminalProcessInspection, + isClientOnlyUnverifiableInspection +} from '../../../shared/terminal/pty/lifecycle/terminal-process-inspection' function normalizeProcessName(processName: string | null): string | null { if (!processName) { diff --git a/src/renderer/src/lib/codex-pane-selection-lane.ts b/src/renderer/src/lib/codex-pane-selection-lane.ts index 581a40702fe..887edb06c3c 100644 --- a/src/renderer/src/lib/codex-pane-selection-lane.ts +++ b/src/renderer/src/lib/codex-pane-selection-lane.ts @@ -13,8 +13,8 @@ import { type LocalWindowsTerminalRuntimeOptions } from '../../../shared/local-windows-terminal-runtime' import { parseAppSshPtyId } from '../../../shared/ssh-pty-id' -import { resolveTerminalStartupCwd } from '../../../shared/terminal-startup-cwd' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import { resolveTerminalStartupCwd } from '../../../shared/shell/launch/terminal-startup-cwd' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import { parseWorkspaceKey } from '../../../shared/workspace-scope' import { parseWslUncPath } from '../../../shared/wsl-paths' import { getLocalProjectExecutionRuntimeContext } from './local-preflight-context' diff --git a/src/renderer/src/lib/codex-session-restart.ts b/src/renderer/src/lib/codex-session-restart.ts index f90208b3c96..1bdb348aa3e 100644 --- a/src/renderer/src/lib/codex-session-restart.ts +++ b/src/renderer/src/lib/codex-session-restart.ts @@ -1,21 +1,23 @@ -import type { AppState } from '@/store' -import { useAppStore } from '@/store' +import { type AppState, useAppStore } from '@/store' import { confirmRuntimeTerminalForegroundProcess, - inspectRuntimeTerminalProcess, - type RuntimeTerminalProcessInspection + inspectRuntimeTerminalProcess } from '@/runtime/runtime-terminal-inspection' + import { translate } from '@/i18n/i18n' import { getCodexAccountDisplayLabel, normalizeCodexAccountEmail } from './codex-account-display-label' -import { isShellProcess } from '../../../shared/shell-process-detection' +import { isShellProcess } from '../../../shared/agent-status/process/shell-process-detection' import { isCodexForegroundProcess, isCodexRestartEligiblePane } from './codex-pane-restart-eligibility' -import { isClientOnlyUnverifiableInspection } from '../../../shared/terminal-process-inspection' +import { + type TerminalProcessInspection as RuntimeTerminalProcessInspection, + isClientOnlyUnverifiableInspection +} from '../../../shared/terminal/pty/lifecycle/terminal-process-inspection' import { getCodexAccountSwitchLaneMatcher, isForeignMachineCodexPtyId, diff --git a/src/renderer/src/lib/command-code-prompt-status-seed.ts b/src/renderer/src/lib/command-code-prompt-status-seed.ts index d150937edce..b7bcc4c2e99 100644 --- a/src/renderer/src/lib/command-code-prompt-status-seed.ts +++ b/src/renderer/src/lib/command-code-prompt-status-seed.ts @@ -1,5 +1,5 @@ import { useAppStore } from '@/store' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { getConnectionIdFromState } from './connection-owner-resolution' import { resolveLiveAgentStatusConnectionRouting } from './agent-status-connection-ownership' import { rendererAgentStatusObservations } from './renderer-agent-status-observations' diff --git a/src/renderer/src/lib/default-terminal-tabs-applied-persist.test.ts b/src/renderer/src/lib/default-terminal-tabs-applied-persist.test.ts index bcd8d409c98..e31a5ec8d5f 100644 --- a/src/renderer/src/lib/default-terminal-tabs-applied-persist.test.ts +++ b/src/renderer/src/lib/default-terminal-tabs-applied-persist.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { getDefaultWorkspaceSession } from '../../../shared/constants' import { preserveRuntimeAuthoredWorkspaceSessionFields } from '../../../main/persistence/runtime-authored-workspace-session-fields' -import { parseWorkspaceSession } from '../../../shared/workspace-session-schema' +import { parseWorkspaceSession } from '../../../shared/workspace-session/workspace-session-schema' import { useAppStore, type AppState } from '@/store' import { applyDefaultTerminalTabs } from './worktree-default-terminal-tabs' import { diff --git a/src/renderer/src/lib/finished-agent-resume-resurrection.test.ts b/src/renderer/src/lib/finished-agent-resume-resurrection.test.ts index 9fb1a089023..95eb96b9f0c 100644 --- a/src/renderer/src/lib/finished-agent-resume-resurrection.test.ts +++ b/src/renderer/src/lib/finished-agent-resume-resurrection.test.ts @@ -1,6 +1,6 @@ /** Completed local agents retain cold-restore identity (#9454) without posing as unfinished work or resurrecting after pane removal. This path does not use paired-runtime web-tab recovery. */ import { afterEach, describe, expect, it } from 'vitest' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { useAppStore } from '@/store' import { activationTreatsNoteAsFinished } from './sleeping-agent-pane-ownership' import { resumeSleepingAgentSessionsForWorktree } from './resume-sleeping-agent-session' diff --git a/src/renderer/src/lib/host-mirror-handle-gap-resume.test.ts b/src/renderer/src/lib/host-mirror-handle-gap-resume.test.ts index 06f838ce456..ef7385266a4 100644 --- a/src/renderer/src/lib/host-mirror-handle-gap-resume.test.ts +++ b/src/renderer/src/lib/host-mirror-handle-gap-resume.test.ts @@ -8,7 +8,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { useAppStore, type AppState } from '@/store' import { resumeSleepingAgentSessionsForWorktree } from './resume-sleeping-agent-session' import { makeCreatedAgentWorktree } from '@/lib/worktree-activation-created-agent.test-fixture' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { markHostSessionMirrorHydrated, resetHostSessionMirrorHydrationForTests diff --git a/src/renderer/src/lib/host-mirror-handle-gap-verdict-union.test.ts b/src/renderer/src/lib/host-mirror-handle-gap-verdict-union.test.ts index fc4294e9000..8bf6dc5b99c 100644 --- a/src/renderer/src/lib/host-mirror-handle-gap-verdict-union.test.ts +++ b/src/renderer/src/lib/host-mirror-handle-gap-verdict-union.test.ts @@ -13,7 +13,7 @@ import { resetHostMirrorHandleGapWaitsForTests } from './host-mirror-handle-gap-wait' import { makeTerminalTab } from '../store/slices/worktrees-slice-test-fixtures' -import type { TerminalLayoutSnapshot } from '../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../shared/workspace-layout/terminal-tab-types' /** Verify composition: same-environment tab death, environment teardown, global stale-generation pruning and read-time pane identity. Retain verdicts for live/genuine reattached panes so expiry cannot re-park forever. */ diff --git a/src/renderer/src/lib/host-mirrored-pane-liveness.ts b/src/renderer/src/lib/host-mirrored-pane-liveness.ts index e4f1ba6274f..9c2d9ae4ec3 100644 --- a/src/renderer/src/lib/host-mirrored-pane-liveness.ts +++ b/src/renderer/src/lib/host-mirrored-pane-liveness.ts @@ -1,8 +1,11 @@ import type { useAppStore } from '@/store' import type { SleepingAgentSessionRecord } from '../../../shared/agent-session/lifecycle/agent-session-resume' import { parseRemoteRuntimePtyId } from '../../../shared/remote-runtime/remote-runtime-pty-id' -import { parseLegacyNumericPaneKey, parsePaneKey } from '../../../shared/stable-pane-id' -import { isWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { + parseLegacyNumericPaneKey, + parsePaneKey +} from '../../../shared/workspace-layout/stable-pane-id' +import { isWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' import { hasHostSessionMirrorHydrated } from '@/runtime/host-session-mirror-hydration' import { hasHostMirrorHandleWaitExpired } from './host-mirror-handle-gap-wait' import { runtimeEnvironmentIdForWorkspaceOwner } from './resolve-owner' diff --git a/src/renderer/src/lib/host-mirrored-pane-resume-replay.test.ts b/src/renderer/src/lib/host-mirrored-pane-resume-replay.test.ts index 39bc1c5b2ab..25ec461e455 100644 --- a/src/renderer/src/lib/host-mirrored-pane-resume-replay.test.ts +++ b/src/renderer/src/lib/host-mirrored-pane-resume-replay.test.ts @@ -4,7 +4,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { useAppStore, type AppState } from '@/store' import { resumeSleepingAgentSessionsForWorktree } from './resume-sleeping-agent-session' import { makeCreatedAgentWorktree } from '@/lib/worktree-activation-created-agent.test-fixture' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { hasHostSessionMirrorHydrated, markHostSessionMirrorHydrated, diff --git a/src/renderer/src/lib/launch-agent-background-session.ts b/src/renderer/src/lib/launch-agent-background-session.ts index 060c8a197fc..ffd0f3f549f 100644 --- a/src/renderer/src/lib/launch-agent-background-session.ts +++ b/src/renderer/src/lib/launch-agent-background-session.ts @@ -11,7 +11,7 @@ import { requestBackgroundTerminalWorktreeMount } from '@/components/terminal/ba import { resolveAgentStartupPlanInputs } from '../../../shared/agent-launch/startup/agent-startup-plan-inputs' import { requireTuiAgentConfig } from '../../../shared/require-tui-agent-config' import { resolveAgentBackgroundLaunchContext } from '@/lib/agent-background-session-launch-host' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { registerEagerPtyBuffer, subscribeToPtyExit, diff --git a/src/renderer/src/lib/launch-agent-in-new-tab-host-resolution.test.ts b/src/renderer/src/lib/launch-agent-in-new-tab-host-resolution.test.ts index 0dcb9ac73c4..e1c6fb2eacd 100644 --- a/src/renderer/src/lib/launch-agent-in-new-tab-host-resolution.test.ts +++ b/src/renderer/src/lib/launch-agent-in-new-tab-host-resolution.test.ts @@ -89,7 +89,7 @@ vi.mock('@/runtime/web-runtime-terminal-creation', () => ({ vi.mock('@/runtime/web-runtime-session-environment', () => ({ isWebRuntimeSessionActive: vi.fn(() => false) })) -vi.mock('../../../shared/terminal-surface-id', () => ({ +vi.mock('../../../shared/workspace-layout/terminal-surface-id', () => ({ isWebTerminalSurfaceTabId: vi.fn(() => false) })) diff --git a/src/renderer/src/lib/launch-agent-in-new-tab-test-fixture.ts b/src/renderer/src/lib/launch-agent-in-new-tab-test-fixture.ts index 1d074f77772..ea3d79c632e 100644 --- a/src/renderer/src/lib/launch-agent-in-new-tab-test-fixture.ts +++ b/src/renderer/src/lib/launch-agent-in-new-tab-test-fixture.ts @@ -165,7 +165,7 @@ vi.mock('@/runtime/web-runtime-terminal-creation', () => ({ vi.mock('@/runtime/web-runtime-session-environment', () => ({ isWebRuntimeSessionActive: mockIsWebRuntimeSessionActive })) -vi.mock('../../../shared/terminal-surface-id', () => ({ +vi.mock('../../../shared/workspace-layout/terminal-surface-id', () => ({ isWebTerminalSurfaceTabId: vi.fn(() => false) })) diff --git a/src/renderer/src/lib/launch-agent-in-new-tab-windows-quoting.test.ts b/src/renderer/src/lib/launch-agent-in-new-tab-windows-quoting.test.ts index 54326dcf931..894d274f4bd 100644 --- a/src/renderer/src/lib/launch-agent-in-new-tab-windows-quoting.test.ts +++ b/src/renderer/src/lib/launch-agent-in-new-tab-windows-quoting.test.ts @@ -109,7 +109,7 @@ vi.mock('@/runtime/web-runtime-terminal-creation', () => ({ vi.mock('@/runtime/web-runtime-session-environment', () => ({ isWebRuntimeSessionActive: mockIsWebRuntimeSessionActive })) -vi.mock('../../../shared/terminal-surface-id', () => ({ +vi.mock('../../../shared/workspace-layout/terminal-surface-id', () => ({ isWebTerminalSurfaceTabId: vi.fn(() => false) })) diff --git a/src/renderer/src/lib/launch-agent-in-new-tab.test-fixture.ts b/src/renderer/src/lib/launch-agent-in-new-tab.test-fixture.ts index 4e11565960c..eb73bee489b 100644 --- a/src/renderer/src/lib/launch-agent-in-new-tab.test-fixture.ts +++ b/src/renderer/src/lib/launch-agent-in-new-tab.test-fixture.ts @@ -146,7 +146,7 @@ vi.mock('@/runtime/web-runtime-terminal-creation', () => ({ vi.mock('@/runtime/web-runtime-session-environment', () => ({ isWebRuntimeSessionActive: mockIsWebRuntimeSessionActive })) -vi.mock('../../../shared/terminal-surface-id', () => ({ +vi.mock('../../../shared/workspace-layout/terminal-surface-id', () => ({ isWebTerminalSurfaceTabId: vi.fn(() => false) })) diff --git a/src/renderer/src/lib/launch-agent-structured-chat-test-fixture.ts b/src/renderer/src/lib/launch-agent-structured-chat-test-fixture.ts index 53693370a64..c21c90a17ae 100644 --- a/src/renderer/src/lib/launch-agent-structured-chat-test-fixture.ts +++ b/src/renderer/src/lib/launch-agent-structured-chat-test-fixture.ts @@ -21,7 +21,7 @@ import type { launchStructuredAgentSession as launch } from './agent-session/lau import type { refreshLocalStructuredSessionTabs as refreshTabs } from '@/runtime/local-structured-session-tabs-sync/inventory-refresh' import type { toast } from 'sonner' import type * as WebEnvironment from '@/runtime/web-runtime-session-environment' -import type * as TerminalSurface from '../../../shared/terminal-surface-id' +import type * as TerminalSurface from '../../../shared/workspace-layout/terminal-surface-id' import type * as LaunchErrors from '@/lib/agent-session/launch/structured-agent-session-launch-errors' const mockCreateTab = vi.hoisted(() => vi.fn()) @@ -128,7 +128,7 @@ vi.mock('@/runtime/web-runtime-session-environment', async (original) => ({ ...(await original()), isWebRuntimeSessionActive: vi.fn(() => false) })) -vi.mock('../../../shared/terminal-surface-id', async (original) => ({ +vi.mock('../../../shared/workspace-layout/terminal-surface-id', async (original) => ({ ...(await original()), isWebTerminalSurfaceTabId: vi.fn(() => false) })) diff --git a/src/renderer/src/lib/launch-agent-web-host-tab.ts b/src/renderer/src/lib/launch-agent-web-host-tab.ts index 4e5701803ff..4201da5fd36 100644 --- a/src/renderer/src/lib/launch-agent-web-host-tab.ts +++ b/src/renderer/src/lib/launch-agent-web-host-tab.ts @@ -17,7 +17,7 @@ import type { Tab } from '../../../shared/tab-types' import type { TuiAgent } from '../../../shared/agent-launch/catalog/tui-agent' import type { AgentPromptDelivery } from '../../../shared/agent-session/agent-session-host-authority' import { translate } from '@/i18n/i18n' -import { toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' import type { AgentTerminalLaunchCompletion } from './agent-session/launch/structured-agent-session-launch-admission' import { agentLaunchNeedsPreparedCommand, diff --git a/src/renderer/src/lib/notes-send-agent-targets.ts b/src/renderer/src/lib/notes-send-agent-targets.ts index 36a3573732c..8be090d9315 100644 --- a/src/renderer/src/lib/notes-send-agent-targets.ts +++ b/src/renderer/src/lib/notes-send-agent-targets.ts @@ -5,9 +5,9 @@ import { import { structuredChatTabById } from './structured-chat-tab-index' import type { AgentType } from '../../../shared/agent-status/contracts/agent-status-types' import type { AppState } from '@/store/types' -import { isTerminalLeafId, makePaneKey } from '../../../shared/stable-pane-id' -import { resolveTerminalTitleAgentType } from '../../../shared/terminal-title-agent-type' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import { isTerminalLeafId, makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' +import { resolveTerminalTitleAgentType } from '../../../shared/agent-status/title/terminal-title-agent-type' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import { detectAgentSendTitleStatus } from './agent-send-title-status' import { resolveRuntimePaneTitleLeafResolution, diff --git a/src/renderer/src/lib/open-located-agent-message-sender.ts b/src/renderer/src/lib/open-located-agent-message-sender.ts index 236ab2ed936..580df866259 100644 --- a/src/renderer/src/lib/open-located-agent-message-sender.ts +++ b/src/renderer/src/lib/open-located-agent-message-sender.ts @@ -24,7 +24,7 @@ import { type AgentMessageSenderTarget } from '@/components/native-chat/native-chat-agent-message-sender-target' import { activateWorktreeAgentPane } from '@/components/sidebar/use-worktree-agent-activation' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { structuredAgentSessionTargetForHost } from '@/runtime/structured-agent-session-owner' /** older-host identifies the chat host; update may mean either side, and unreachable proves nothing. */ diff --git a/src/renderer/src/lib/open-tab-occupant-agent.ts b/src/renderer/src/lib/open-tab-occupant-agent.ts index 7546c9dbf6e..1638e574f20 100644 --- a/src/renderer/src/lib/open-tab-occupant-agent.ts +++ b/src/renderer/src/lib/open-tab-occupant-agent.ts @@ -2,9 +2,9 @@ import type { RetainedAgentEntry } from '@/store/slices/agent-status/agent-statu import type { PaneForegroundAgentEntry } from '@/store/slices/pane-foreground-agent' import type { SleepingAgentSessionRecord } from '../../../shared/agent-session/lifecycle/agent-session-resume' import type { AgentStatusEntry } from '../../../shared/agent-status/contracts/agent-status-types' -import { isTerminalLeafId, makePaneKey } from '../../../shared/stable-pane-id' -import type { TerminalLayoutSnapshot } from '../../../shared/terminal-tab-types' -import type { TerminalAgent } from '../../../shared/terminal-agent' +import { isTerminalLeafId, makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' +import type { TerminalLayoutSnapshot } from '../../../shared/workspace-layout/terminal-tab-types' +import type { TerminalAgent } from '../../../shared/agent-status/identity/terminal-agent' import type { TuiAgent } from '../../../shared/agent-launch/catalog/tui-agent' import { resolveFocusedCompletedTabAgent, diff --git a/src/renderer/src/lib/paired-runtime-closed-tab-resume.test.ts b/src/renderer/src/lib/paired-runtime-closed-tab-resume.test.ts index 4bc1c346f35..b1182e5dea5 100644 --- a/src/renderer/src/lib/paired-runtime-closed-tab-resume.test.ts +++ b/src/renderer/src/lib/paired-runtime-closed-tab-resume.test.ts @@ -9,12 +9,12 @@ import { markHostSessionMirrorHydrated, resetHostSessionMirrorHydrationForTests } from '@/runtime/host-session-mirror-hydration' -import { useAppStore } from '@/store' -import type { AppState } from '@/store' +import { useAppStore, type AppState } from '@/store' + import type { SleepingAgentSessionRecord } from '../../../shared/agent-session/lifecycle/agent-session-resume' import type { Worktree } from '../../../shared/worktree/types' -import { makePaneKey } from '../../../shared/stable-pane-id' -import { toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' +import { toWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' import { makeCreatedAgentWorktree } from './worktree-activation-created-agent.test-fixture' import { resumeSleepingAgentSessionsForWorktree } from './resume-sleeping-agent-session' diff --git a/src/renderer/src/lib/pane-agent-evidence.ts b/src/renderer/src/lib/pane-agent-evidence.ts index 4f5f48ab1e8..a927fe28ba8 100644 --- a/src/renderer/src/lib/pane-agent-evidence.ts +++ b/src/renderer/src/lib/pane-agent-evidence.ts @@ -1,8 +1,8 @@ import type { AgentStatus } from '../../../shared/agent-status/title/agent-title-core' import { detectAgentStatusFromTitle } from '../../../shared/agent-status/title/agent-title-status' import { getAgentLabel } from '../../../shared/agent-status/title/agent-title-identity' -import { resolveExplicitTerminalTitleAgentType } from '../../../shared/terminal-title-agent-type' -import type { TerminalAgent } from '../../../shared/terminal-agent' +import { resolveExplicitTerminalTitleAgentType } from '../../../shared/agent-status/title/terminal-title-agent-type' +import type { TerminalAgent } from '../../../shared/agent-status/identity/terminal-agent' import { AGENT_STATUS_STALE_AFTER_MS, isAgentStatusFresh diff --git a/src/renderer/src/lib/pane-manager/mint-stable-pane-id.ts b/src/renderer/src/lib/pane-manager/mint-stable-pane-id.ts index a6ca7cc2d64..4354dab14c1 100644 --- a/src/renderer/src/lib/pane-manager/mint-stable-pane-id.ts +++ b/src/renderer/src/lib/pane-manager/mint-stable-pane-id.ts @@ -1,4 +1,4 @@ -import type { TerminalLeafId } from '../../../../shared/stable-pane-id' +import type { TerminalLeafId } from '../../../../shared/workspace-layout/stable-pane-id' import { createBrowserUuid } from '../browser-uuid' export function mintStablePaneId(): TerminalLeafId { diff --git a/src/renderer/src/lib/pane-manager/pane-dom-creation.ts b/src/renderer/src/lib/pane-manager/pane-dom-creation.ts index e53a47e9399..050857042f8 100644 --- a/src/renderer/src/lib/pane-manager/pane-dom-creation.ts +++ b/src/renderer/src/lib/pane-manager/pane-dom-creation.ts @@ -6,7 +6,7 @@ import { Terminal, type ILink, type ITerminalOptions } from '@xterm/xterm' import { createWrappedTerminalHttpLinkProvider } from '../../components/terminal-pane/wrapped-terminal-http-link-provider' import { TERMINAL_HTTP_URL_REGEX } from '../../../../shared/terminal/links/terminal-http-url-extraction' -import type { TerminalLeafId } from '../../../../shared/stable-pane-id' +import type { TerminalLeafId } from '../../../../shared/workspace-layout/stable-pane-id' import type { DragReorderCallbacks, DragReorderState } from './pane-drag-reorder' import { attachPaneDrag } from './pane-drag-pointer' import type { ManagedPaneInternal, PaneManagerOptions } from './pane-manager-types' diff --git a/src/renderer/src/lib/pane-manager/pane-drag-reorder.test.ts b/src/renderer/src/lib/pane-manager/pane-drag-reorder.test.ts index b41e4da6a15..e300b916fc7 100644 --- a/src/renderer/src/lib/pane-manager/pane-drag-reorder.test.ts +++ b/src/renderer/src/lib/pane-manager/pane-drag-reorder.test.ts @@ -3,7 +3,7 @@ import type { ManagedPaneInternal } from './pane-manager-types' import type * as PaneTreeOpsModule from './pane-tree-ops' import { attachPaneDrag } from './pane-drag-pointer' import { createDragReorderState } from './pane-drag-reorder' -import type { TerminalLeafId } from '../../../../shared/stable-pane-id' +import type { TerminalLeafId } from '../../../../shared/workspace-layout/stable-pane-id' const detachPaneFromTree = vi.hoisted(() => vi.fn()) const insertPaneNextTo = vi.hoisted(() => vi.fn()) diff --git a/src/renderer/src/lib/pane-manager/pane-drop-no-op.test.ts b/src/renderer/src/lib/pane-manager/pane-drop-no-op.test.ts index da55e16adbe..3239f72f2c8 100644 --- a/src/renderer/src/lib/pane-manager/pane-drop-no-op.test.ts +++ b/src/renderer/src/lib/pane-manager/pane-drop-no-op.test.ts @@ -9,7 +9,7 @@ import { type DragReorderCallbacks } from './pane-drag-reorder' -import type { TerminalLeafId } from '../../../../shared/stable-pane-id' +import type { TerminalLeafId } from '../../../../shared/workspace-layout/stable-pane-id' import { serializePaneTree } from '@/components/terminal-pane/layout-serialization' import { insertLeafBeside, diff --git a/src/renderer/src/lib/pane-manager/pane-identity-registry.ts b/src/renderer/src/lib/pane-manager/pane-identity-registry.ts index 709ff30ec5f..2c9e9a294e9 100644 --- a/src/renderer/src/lib/pane-manager/pane-identity-registry.ts +++ b/src/renderer/src/lib/pane-manager/pane-identity-registry.ts @@ -1,4 +1,7 @@ -import { isTerminalLeafId, type TerminalLeafId } from '../../../../shared/stable-pane-id' +import { + isTerminalLeafId, + type TerminalLeafId +} from '../../../../shared/workspace-layout/stable-pane-id' import { mintStablePaneId } from './mint-stable-pane-id' import type { ManagedPaneInternal } from './pane-manager-types' diff --git a/src/renderer/src/lib/pane-manager/pane-key-resolution.ts b/src/renderer/src/lib/pane-manager/pane-key-resolution.ts index e410e9fe9a7..06277203d93 100644 --- a/src/renderer/src/lib/pane-manager/pane-key-resolution.ts +++ b/src/renderer/src/lib/pane-manager/pane-key-resolution.ts @@ -2,7 +2,7 @@ import { isTerminalLeafId, parsePaneKey, type TerminalLeafId -} from '../../../../shared/stable-pane-id' +} from '../../../../shared/workspace-layout/stable-pane-id' import type { ManagedPane } from './pane-manager-types' export type PaneKeyUnresolvedReason = 'confirmed-missing' | 'ownership-mismatch' | 'invalid' diff --git a/src/renderer/src/lib/pane-manager/pane-layout-geometry-apply.test.ts b/src/renderer/src/lib/pane-manager/pane-layout-geometry-apply.test.ts index 2093f219a2c..898a821f097 100644 --- a/src/renderer/src/lib/pane-manager/pane-layout-geometry-apply.test.ts +++ b/src/renderer/src/lib/pane-manager/pane-layout-geometry-apply.test.ts @@ -1,8 +1,8 @@ // @vitest-environment happy-dom -import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { Mock } from 'vitest' +import { afterEach, beforeEach, describe, expect, it, vi, type Mock } from 'vitest' + import type { PaneManagerOptions } from './pane-manager-types' -import type { TerminalPaneLayoutNode } from '../../../../shared/terminal-tab-types' +import type { TerminalPaneLayoutNode } from '../../../../shared/workspace-layout/terminal-tab-types' import { serializePaneTree } from '@/components/terminal-pane/layout-serialization' import { applyExpandedLayoutTo } from '@/components/terminal-pane/expand-collapse' diff --git a/src/renderer/src/lib/pane-manager/pane-layout-geometry-apply.ts b/src/renderer/src/lib/pane-manager/pane-layout-geometry-apply.ts index 734f4c7ac59..06a77a853b2 100644 --- a/src/renderer/src/lib/pane-manager/pane-layout-geometry-apply.ts +++ b/src/renderer/src/lib/pane-manager/pane-layout-geometry-apply.ts @@ -1,4 +1,4 @@ -import type { TerminalPaneLayoutNode } from '../../../../shared/terminal-tab-types' +import type { TerminalPaneLayoutNode } from '../../../../shared/workspace-layout/terminal-tab-types' import type { PaneManagerHost } from './pane-manager-host' import { movePanesToMatchTree } from './pane-tree-match-moves' import { applyDividerStyles, disposeDivider } from './pane-divider' @@ -6,8 +6,6 @@ import { findPaneChildren } from './pane-tree-equalization' import { refitPanesUnder } from './pane-tree-ops' import { readSplitRatio, SPLIT_RATIO_TOLERANCE } from './pane-split-ratio' -export type { TerminalPaneLayoutNode } - type GeometryWrite = { split: HTMLElement first: HTMLElement diff --git a/src/renderer/src/lib/pane-manager/pane-manager-types.ts b/src/renderer/src/lib/pane-manager/pane-manager-types.ts index e5f07de3908..b1e63812127 100644 --- a/src/renderer/src/lib/pane-manager/pane-manager-types.ts +++ b/src/renderer/src/lib/pane-manager/pane-manager-types.ts @@ -8,8 +8,8 @@ import type { WebLinksAddon } from '@xterm/addon-web-links' import type { WebglAddon } from '@xterm/addon-webgl' import type { SerializeAddon } from '@xterm/addon-serialize' import type { GlobalSettings } from '../../../../shared/global-settings-types' -import type { TerminalLeafId } from '../../../../shared/stable-pane-id' -import type { TerminalPanePlacement } from '../../../../shared/terminal-pane-placement' +import type { TerminalLeafId } from '../../../../shared/workspace-layout/stable-pane-id' +import type { TerminalPanePlacement } from '../../../../shared/workspace-layout/terminal-pane-placement' import type { TerminalWebglAutoDecision } from './terminal-webgl-auto-policy' export type { TerminalScrollIntentTarget } from './terminal-scroll-intent' diff --git a/src/renderer/src/lib/pane-manager/pane-manager.ts b/src/renderer/src/lib/pane-manager/pane-manager.ts index bfffe900158..f971bcabe3e 100644 --- a/src/renderer/src/lib/pane-manager/pane-manager.ts +++ b/src/renderer/src/lib/pane-manager/pane-manager.ts @@ -27,7 +27,7 @@ import { setPaneGpuRenderingState, suspendPaneRendering } from './pane-rendering-control' -import type { TerminalLeafId } from '../../../../shared/stable-pane-id' +import type { TerminalLeafId } from '../../../../shared/workspace-layout/stable-pane-id' import { registerLivePaneManager, unregisterLivePaneManager } from './pane-manager-registry' import { releaseHiddenWebglRetention } from './terminal-webgl-hidden-retention' import { schedulePaneRevealPresent, schedulePaneRevealRepaint } from './pane-reveal-repaint' @@ -54,7 +54,8 @@ import { refreshAllPaneTerminals } from './pane-manager-layout-sweeps' import { collectPaneRenderingDiagnostics } from './pane-rendering-diagnostics' -import { applyPaneLayoutGeometry, type TerminalPaneLayoutNode } from './pane-layout-geometry-apply' +import { applyPaneLayoutGeometry } from './pane-layout-geometry-apply' +import type { TerminalPaneLayoutNode } from '../../../../shared/workspace-layout/terminal-tab-types' import { FIRST_PANE_ID } from '../../../../shared/pane-key' export type { diff --git a/src/renderer/src/lib/pane-manager/pane-tree-match-moves.test.ts b/src/renderer/src/lib/pane-manager/pane-tree-match-moves.test.ts index 0c47f85a455..4602f928253 100644 --- a/src/renderer/src/lib/pane-manager/pane-tree-match-moves.test.ts +++ b/src/renderer/src/lib/pane-manager/pane-tree-match-moves.test.ts @@ -1,8 +1,8 @@ // @vitest-environment happy-dom -import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { Mock } from 'vitest' +import { afterEach, beforeEach, describe, expect, it, vi, type Mock } from 'vitest' + import type { PaneManagerOptions } from './pane-manager-types' -import type { TerminalPaneLayoutNode } from '../../../../shared/terminal-tab-types' +import type { TerminalPaneLayoutNode } from '../../../../shared/workspace-layout/terminal-tab-types' import { serializePaneTree } from '@/components/terminal-pane/layout-serialization' // Why: happy-dom has no canvas, so xterm cannot open; reshaping never touches the terminal. diff --git a/src/renderer/src/lib/pane-manager/pane-tree-match-moves.ts b/src/renderer/src/lib/pane-manager/pane-tree-match-moves.ts index 8c52ee7f633..5ac51ab6040 100644 --- a/src/renderer/src/lib/pane-manager/pane-tree-match-moves.ts +++ b/src/renderer/src/lib/pane-manager/pane-tree-match-moves.ts @@ -1,4 +1,4 @@ -import type { TerminalPaneLayoutNode } from '../../../../shared/terminal-tab-types' +import type { TerminalPaneLayoutNode } from '../../../../shared/workspace-layout/terminal-tab-types' import type { PaneManagerHost } from './pane-manager-host' import type { ManagedPaneInternal } from './pane-manager-types' import { updateMultiPaneState } from './pane-drag-reorder' diff --git a/src/renderer/src/lib/pane-manager/pane-viewport-present-lifetime.test.ts b/src/renderer/src/lib/pane-manager/pane-viewport-present-lifetime.test.ts index a94a1e87481..82e26db86c6 100644 --- a/src/renderer/src/lib/pane-manager/pane-viewport-present-lifetime.test.ts +++ b/src/renderer/src/lib/pane-manager/pane-viewport-present-lifetime.test.ts @@ -6,7 +6,7 @@ import { SearchAddon } from '@xterm/addon-search' import { SerializeAddon } from '@xterm/addon-serialize' import { Unicode11Addon } from '@xterm/addon-unicode11' import { WebLinksAddon } from '@xterm/addon-web-links' -import { isTerminalLeafId } from '../../../../shared/stable-pane-id' +import { isTerminalLeafId } from '../../../../shared/workspace-layout/stable-pane-id' import type { ManagedPaneInternal } from './pane-manager-types' import { disposePane } from './pane-lifecycle' import { toPublicPane } from './pane-public-view' diff --git a/src/renderer/src/lib/pane-manager/pane-viewport-present-synchronized-output.test.ts b/src/renderer/src/lib/pane-manager/pane-viewport-present-synchronized-output.test.ts index 8dd27d5a984..d2a6984dc4a 100644 --- a/src/renderer/src/lib/pane-manager/pane-viewport-present-synchronized-output.test.ts +++ b/src/renderer/src/lib/pane-manager/pane-viewport-present-synchronized-output.test.ts @@ -8,7 +8,7 @@ import { SearchAddon } from '@xterm/addon-search' import { SerializeAddon } from '@xterm/addon-serialize' import { Unicode11Addon } from '@xterm/addon-unicode11' import { WebLinksAddon } from '@xterm/addon-web-links' -import { isTerminalLeafId } from '../../../../shared/stable-pane-id' +import { isTerminalLeafId } from '../../../../shared/workspace-layout/stable-pane-id' import type { ManagedPaneInternal } from './pane-manager-types' import { presentPaneViewport } from './pane-viewport-present' diff --git a/src/renderer/src/lib/pane-manager/terminal-scroll-intent-key-retention.test.ts b/src/renderer/src/lib/pane-manager/terminal-scroll-intent-key-retention.test.ts index 46abf38ec06..20682634581 100644 --- a/src/renderer/src/lib/pane-manager/terminal-scroll-intent-key-retention.test.ts +++ b/src/renderer/src/lib/pane-manager/terminal-scroll-intent-key-retention.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type { ManagedPaneInternal } from './pane-manager-types' -import type { TerminalLeafId } from '../../../../shared/stable-pane-id' +import type { TerminalLeafId } from '../../../../shared/workspace-layout/stable-pane-id' const disposePane = vi.hoisted(() => vi.fn((pane: ManagedPaneInternal, panes: Map) => { @@ -30,8 +30,12 @@ import { detachManagedPaneForExternalMove, retireManagedPanePreservingPty } from './pane-split-close' -import { bindTerminalScrollIntentKey, markTerminalPinnedViewport } from './terminal-scroll-intent' -import type { TerminalScrollIntentTarget } from './terminal-scroll-intent' +import { + bindTerminalScrollIntentKey, + markTerminalPinnedViewport, + type TerminalScrollIntentTarget +} from './terminal-scroll-intent' + import { readTerminalScrollIntentKeyRetention, releaseTerminalScrollIntentKey diff --git a/src/renderer/src/lib/pane-manager/windows-pty-compatibility.ts b/src/renderer/src/lib/pane-manager/windows-pty-compatibility.ts index af7d99884af..3c481f5669c 100644 --- a/src/renderer/src/lib/pane-manager/windows-pty-compatibility.ts +++ b/src/renderer/src/lib/pane-manager/windows-pty-compatibility.ts @@ -6,7 +6,10 @@ import { parseWindowsBuildNumber, windowsPtyForOwnerBackend } from '../../../../shared/xterm-conpty-options' -import { resolvePtyOwnerBackend, type PtyOwnerBackend } from '../../../../shared/pty-owner-backend' +import { + resolvePtyOwnerBackend, + type PtyOwnerBackend +} from '../../../../shared/terminal/pty/lifecycle/pty-owner-backend' export type WindowsPtyCompatibilityContext = { userAgent?: string diff --git a/src/renderer/src/lib/recent-workspace-tab-rows.ts b/src/renderer/src/lib/recent-workspace-tab-rows.ts index 3a150b11b8c..bc3543624fd 100644 --- a/src/renderer/src/lib/recent-workspace-tab-rows.ts +++ b/src/renderer/src/lib/recent-workspace-tab-rows.ts @@ -8,7 +8,7 @@ import { tabHasLivePty } from '../../../shared/tab-has-live-pty' import { agentVerdictDisplayMark } from '../../../shared/agent-status/lifecycle/agent-main-agent-verdict' import { isExplicitAgentStatusFresh } from './pane-agent-evidence' import type { WorktreeStatus } from './worktree-status' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import type { ExecutionHostId } from '../../../shared/execution-host' import { AGENT_STATUS_STALE_AFTER_MS } from '../../../shared/agent-status/contracts/agent-status-freshness' diff --git a/src/renderer/src/lib/resume-sleeping-agent-session-deferred-pane.test.ts b/src/renderer/src/lib/resume-sleeping-agent-session-deferred-pane.test.ts index c54d281514a..329823295c0 100644 --- a/src/renderer/src/lib/resume-sleeping-agent-session-deferred-pane.test.ts +++ b/src/renderer/src/lib/resume-sleeping-agent-session-deferred-pane.test.ts @@ -1,6 +1,6 @@ import { afterEach, describe, expect, it } from 'vitest' import type { SleepingAgentSessionRecord } from '../../../shared/agent-session/lifecycle/agent-session-resume' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { useAppStore } from '@/store' import type { AppState } from '@/store/types' import { clearPaneSpawnDeferral, setPaneSpawnDeferral } from './pane-spawn-deferral-registry' diff --git a/src/renderer/src/lib/resume-sleeping-agent-session-live-ssh-dedupe.test.ts b/src/renderer/src/lib/resume-sleeping-agent-session-live-ssh-dedupe.test.ts index da6fb45f74d..e1bdf821c69 100644 --- a/src/renderer/src/lib/resume-sleeping-agent-session-live-ssh-dedupe.test.ts +++ b/src/renderer/src/lib/resume-sleeping-agent-session-live-ssh-dedupe.test.ts @@ -1,6 +1,6 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import type { SleepingAgentSessionRecord } from '../../../shared/agent-session/lifecycle/agent-session-resume' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { useAppStore } from '@/store' import { makeWorktree, TEST_REPO } from '../store/slices/worktrees-slice-test-fixtures' import { resumeSleepingAgentSessionsForWorktree } from './resume-sleeping-agent-session' diff --git a/src/renderer/src/lib/resume-sleeping-agent-session-provider-claim.test.ts b/src/renderer/src/lib/resume-sleeping-agent-session-provider-claim.test.ts index 88b53e13d74..11f02684b8d 100644 --- a/src/renderer/src/lib/resume-sleeping-agent-session-provider-claim.test.ts +++ b/src/renderer/src/lib/resume-sleeping-agent-session-provider-claim.test.ts @@ -1,8 +1,8 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import type { SleepingAgentSessionRecord } from '../../../shared/agent-session/lifecycle/agent-session-resume' import type { AgentStatusEntry } from '../../../shared/agent-status/contracts/agent-status-types' -import { makePaneKey } from '../../../shared/stable-pane-id' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import { getProviderSessionClaimKey } from './sleeping-agent-pane-ownership' import { useAppStore, type AppState } from '@/store' import { resumeSleepingAgentSessionsForWorktree } from './resume-sleeping-agent-session' diff --git a/src/renderer/src/lib/resume-sleeping-agent-session-retired-binding.test.ts b/src/renderer/src/lib/resume-sleeping-agent-session-retired-binding.test.ts index c1ac80021f1..5a3f163e9a1 100644 --- a/src/renderer/src/lib/resume-sleeping-agent-session-retired-binding.test.ts +++ b/src/renderer/src/lib/resume-sleeping-agent-session-retired-binding.test.ts @@ -1,6 +1,6 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import type { SleepingAgentSessionRecord } from '../../../shared/agent-session/lifecycle/agent-session-resume' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { useAppStore } from '@/store' import { resumeSleepingAgentSessionsForWorktree } from './resume-sleeping-agent-session' import { recordPaneIsOwnedByPreservedPane } from './sleeping-agent-pane-ownership' diff --git a/src/renderer/src/lib/resume-sleeping-agent-session-slept-pane-recovery.test.ts b/src/renderer/src/lib/resume-sleeping-agent-session-slept-pane-recovery.test.ts index 16285fff025..f0eb6342746 100644 --- a/src/renderer/src/lib/resume-sleeping-agent-session-slept-pane-recovery.test.ts +++ b/src/renderer/src/lib/resume-sleeping-agent-session-slept-pane-recovery.test.ts @@ -1,6 +1,6 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import type { SleepingAgentSessionRecord } from '../../../shared/agent-session/lifecycle/agent-session-resume' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { useAppStore } from '@/store' import { resumeSleepingAgentSessionsForWorktree } from './resume-sleeping-agent-session' diff --git a/src/renderer/src/lib/resume-sleeping-agent-session-stranded-sleep.test.ts b/src/renderer/src/lib/resume-sleeping-agent-session-stranded-sleep.test.ts index eb5da905f91..d3fef52e0a9 100644 --- a/src/renderer/src/lib/resume-sleeping-agent-session-stranded-sleep.test.ts +++ b/src/renderer/src/lib/resume-sleeping-agent-session-stranded-sleep.test.ts @@ -1,6 +1,6 @@ import { afterEach, expect, it, vi } from 'vitest' import type { SleepingAgentSessionRecord } from '../../../shared/agent-session/lifecycle/agent-session-resume' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { useAppStore } from '@/store' import { resumeSleepingAgentSessionsForWorktree } from './resume-sleeping-agent-session' diff --git a/src/renderer/src/lib/resume-sleeping-agent-session-suppress-navigation.test.ts b/src/renderer/src/lib/resume-sleeping-agent-session-suppress-navigation.test.ts index 52b119c977d..f6d2816ec68 100644 --- a/src/renderer/src/lib/resume-sleeping-agent-session-suppress-navigation.test.ts +++ b/src/renderer/src/lib/resume-sleeping-agent-session-suppress-navigation.test.ts @@ -1,6 +1,6 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import type { SleepingAgentSessionRecord } from '../../../shared/agent-session/lifecycle/agent-session-resume' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import { useAppStore } from '@/store' import { resumeSleepingAgentSessionsForWorktree } from './resume-sleeping-agent-session' import { getProviderSessionClaimKey } from './sleeping-agent-pane-ownership' diff --git a/src/renderer/src/lib/resume-sleeping-agent-session.test.ts b/src/renderer/src/lib/resume-sleeping-agent-session.test.ts index 0fc6adc4f98..ea36ecb238b 100644 --- a/src/renderer/src/lib/resume-sleeping-agent-session.test.ts +++ b/src/renderer/src/lib/resume-sleeping-agent-session.test.ts @@ -1,7 +1,7 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import type { SleepingAgentSessionRecord } from '../../../shared/agent-session/lifecycle/agent-session-resume' -import { makePaneKey } from '../../../shared/stable-pane-id' -import { parseWorkspaceSession } from '../../../shared/workspace-session-schema' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' +import { parseWorkspaceSession } from '../../../shared/workspace-session/workspace-session-schema' import { useAppStore } from '@/store' import { resumeSleepingAgentSessionsForWorktree } from './resume-sleeping-agent-session' diff --git a/src/renderer/src/lib/resume-sleeping-agent-session.ts b/src/renderer/src/lib/resume-sleeping-agent-session.ts index 8203f185494..5ff77d41565 100644 --- a/src/renderer/src/lib/resume-sleeping-agent-session.ts +++ b/src/renderer/src/lib/resume-sleeping-agent-session.ts @@ -5,7 +5,7 @@ import { type SleepingAgentSessionRecord } from '../../../shared/agent-session/lifecycle/agent-session-resume' import { AGENT_STATUS_STALE_AFTER_MS } from '../../../shared/agent-status/contracts/agent-status-freshness' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { getProviderSessionClaimKey, activationTreatsNoteAsFinished, diff --git a/src/renderer/src/lib/resume-stale-structured-agent-session.test.ts b/src/renderer/src/lib/resume-stale-structured-agent-session.test.ts index 47d78ecce4d..2a134852f90 100644 --- a/src/renderer/src/lib/resume-stale-structured-agent-session.test.ts +++ b/src/renderer/src/lib/resume-stale-structured-agent-session.test.ts @@ -1,7 +1,7 @@ import { afterEach, describe, expect, it } from 'vitest' import { useAppStore } from '@/store' import type { SleepingAgentSessionRecord } from '../../../shared/agent-session/lifecycle/agent-session-resume' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { structuredAgentSessionTabId } from '../../../shared/agent-session/view/structured-agent-session-projection' import { resumeSleepingAgentSessionsForWorktree } from './resume-sleeping-agent-session' diff --git a/src/renderer/src/lib/retracted-host-pane-resume.test.ts b/src/renderer/src/lib/retracted-host-pane-resume.test.ts index b07771382d5..db648004a80 100644 --- a/src/renderer/src/lib/retracted-host-pane-resume.test.ts +++ b/src/renderer/src/lib/retracted-host-pane-resume.test.ts @@ -1,7 +1,7 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import { useAppStore } from '@/store' import type { SleepingAgentSessionRecord } from '../../../shared/agent-session/lifecycle/agent-session-resume' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { resumeSleepingAgentSessionsForWorktree } from './resume-sleeping-agent-session' // Main's answer to the window's layout commands, as a switch-on build sends them. diff --git a/src/renderer/src/lib/reveal-terminal-pane.ts b/src/renderer/src/lib/reveal-terminal-pane.ts index d11b55c4c3b..41fee3ddb06 100644 --- a/src/renderer/src/lib/reveal-terminal-pane.ts +++ b/src/renderer/src/lib/reveal-terminal-pane.ts @@ -1,7 +1,7 @@ import { activateTabAndFocusPane } from '@/lib/activate-tab-and-focus-pane' import { activateAndRevealWorkspace } from '@/lib/worktree-activation' import { activateTerminalTabOnOwner } from '@/lib/terminal-tab-owner-activation' -import type { TerminalPaneRevealTarget } from '../../../shared/terminal-pane-reveal' +import type { TerminalPaneRevealTarget } from '../../../shared/workspace-layout/terminal-pane-reveal' /** Reveal through the workspace dispatcher on local/SSH/server/floating owners. Bare setActiveWorktree skips terminal view, sleeping resume and surface seeding, leaving parked SSH workspaces empty (#16731). Return false for unknown workspaces. */ export function revealTerminalPane(target: TerminalPaneRevealTarget): boolean { diff --git a/src/renderer/src/lib/running-agent-targets.ts b/src/renderer/src/lib/running-agent-targets.ts index 0984a7fefbb..1a5a1b7110f 100644 --- a/src/renderer/src/lib/running-agent-targets.ts +++ b/src/renderer/src/lib/running-agent-targets.ts @@ -3,8 +3,8 @@ import type { AgentStatusEntry, AgentType } from '../../../shared/agent-status/contracts/agent-status-types' -import type { TerminalTab } from '../../../shared/terminal-tab-types' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { structuredAgentSessionPaneKey } from '../../../shared/agent-session/view/structured-agent-session-projection' import { isStructuredTab } from '../../../shared/agent-session/view/structured-agent-session-tab' import { resolvePaneAgentActivity } from '@/lib/pane-agent-evidence' diff --git a/src/renderer/src/lib/serve-desktop-promotion-session-continuity.test.ts b/src/renderer/src/lib/serve-desktop-promotion-session-continuity.test.ts index 060785bc716..1051c0da515 100644 --- a/src/renderer/src/lib/serve-desktop-promotion-session-continuity.test.ts +++ b/src/renderer/src/lib/serve-desktop-promotion-session-continuity.test.ts @@ -4,7 +4,7 @@ import type { App, BrowserWindow } from 'electron' import { useAppStore } from '@/store' import { resumeSleepingAgentSessionsForWorktree } from '@/lib/resume-sleeping-agent-session' import type { SleepingAgentSessionRecord } from '../../../shared/agent-session/lifecycle/agent-session-resume' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { focusExistingMainWindow } from '../../../main/window/focus-existing-window' import { createMacAppActivationHandler } from '../../../main/window/macos-app-activation' import { diff --git a/src/renderer/src/lib/session-write-subscriber.ts b/src/renderer/src/lib/session-write-subscriber.ts index dc20617214c..4124f5f2083 100644 --- a/src/renderer/src/lib/session-write-subscriber.ts +++ b/src/renderer/src/lib/session-write-subscriber.ts @@ -1,6 +1,6 @@ import type { AppState } from '../store' import { isDecorativeAgentTitleFrameChange } from '../../../shared/agent-status/title/agent-decorative-title-signature' -import type { WorkspaceSessionPatch } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionPatch } from '../../../shared/workspace-session/workspace-session-state-types' import { SESSION_RELEVANT_FIELDS, shouldPersistWorkspaceSession } from './workspace-session' import { buildWorkspaceSessionPatch } from './workspace-session-patch' import { createWorktreeTabBucketProjection } from './worktree-tab-bucket-projection' diff --git a/src/renderer/src/lib/setup-split-activation-single-owner.test.ts b/src/renderer/src/lib/setup-split-activation-single-owner.test.ts index 6d574fcad10..d53f288a549 100644 --- a/src/renderer/src/lib/setup-split-activation-single-owner.test.ts +++ b/src/renderer/src/lib/setup-split-activation-single-owner.test.ts @@ -1,12 +1,12 @@ import path from 'node:path' import { afterEach, describe, expect, it, vi } from 'vitest' -import type { AppState } from '@/store' -import { useAppStore } from '@/store' + +import { type AppState, useAppStore } from '@/store' import { registerTerminalPresentationIpcBridge } from '@/hooks/ipc-events/terminal-presentation-ipc-bridge' import { getDefaultSettings } from '../../../shared/constants' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../shared/layout-owner-switch' import type { RuntimeTerminalSummary } from '../../../shared/runtime-types' -import type { TerminalPaneLayoutNode } from '../../../shared/terminal-tab-types' +import type { TerminalPaneLayoutNode } from '../../../shared/workspace-layout/terminal-tab-types' import { activateAndRevealWorktree } from './worktree-activation' import { gateWorktreeAgentActivation } from './worktree-agent-activation-gate' import { makeCreatedAgentWorktree as makeWorktree } from './worktree-activation-created-agent.test-fixture' diff --git a/src/renderer/src/lib/sleeping-agent-pane-ownership.ts b/src/renderer/src/lib/sleeping-agent-pane-ownership.ts index c1f0c98f633..d141df8a100 100644 --- a/src/renderer/src/lib/sleeping-agent-pane-ownership.ts +++ b/src/renderer/src/lib/sleeping-agent-pane-ownership.ts @@ -5,11 +5,14 @@ import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode, TerminalTab -} from '../../../shared/terminal-tab-types' +} from '../../../shared/workspace-layout/terminal-tab-types' import { parseAppSshPtyId } from '../../../shared/ssh-pty-id' -import { parseLegacyNumericPaneKey, parsePaneKey } from '../../../shared/stable-pane-id' +import { + parseLegacyNumericPaneKey, + parsePaneKey +} from '../../../shared/workspace-layout/stable-pane-id' import { getProviderSessionClaimKey } from '../../../shared/sleeping-record-legacy-pane-key' -import { isWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { isWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../shared/layout-owner-switch' import { isWorkspaceSleepRecord } from '../../../shared/workspace-sleep' import { isPaneResumingInPlace, isPaneSpawnDeferred } from './pane-spawn-deferral-registry' diff --git a/src/renderer/src/lib/sleeping-agent-wake-requests.ts b/src/renderer/src/lib/sleeping-agent-wake-requests.ts index 3601de2ba10..e51d397671b 100644 --- a/src/renderer/src/lib/sleeping-agent-wake-requests.ts +++ b/src/renderer/src/lib/sleeping-agent-wake-requests.ts @@ -1,6 +1,9 @@ import { useAppStore } from '@/store' import type { SleepingAgentSessionRecord } from '../../../shared/agent-session/lifecycle/agent-session-resume' -import { parseLegacyNumericPaneKey, parsePaneKey } from '../../../shared/stable-pane-id' +import { + parseLegacyNumericPaneKey, + parsePaneKey +} from '../../../shared/workspace-layout/stable-pane-id' // Why record identity: a replaced or cleared record drops its request, so a stale ask never wakes a later sleep. const requestedRecords = new WeakSet() diff --git a/src/renderer/src/lib/structured-agent-synthetic-sleeping-record.ts b/src/renderer/src/lib/structured-agent-synthetic-sleeping-record.ts index 2d0d6411ebe..2de60637a11 100644 --- a/src/renderer/src/lib/structured-agent-synthetic-sleeping-record.ts +++ b/src/renderer/src/lib/structured-agent-synthetic-sleeping-record.ts @@ -1,6 +1,6 @@ import type { SleepingAgentSessionRecord } from '../../../shared/agent-session/lifecycle/agent-session-resume' import { structuredAgentSessionTabId } from '../../../shared/agent-session/view/structured-agent-session-projection' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' /** Old structured projections persisted their desktop id as if a terminal could resume it. */ export function isStructuredAgentSyntheticSleepingRecord( diff --git a/src/renderer/src/lib/tab-agent-status-index.test.ts b/src/renderer/src/lib/tab-agent-status-index.test.ts index c586ee64faf..47922d19357 100644 --- a/src/renderer/src/lib/tab-agent-status-index.test.ts +++ b/src/renderer/src/lib/tab-agent-status-index.test.ts @@ -8,14 +8,17 @@ import { resolveSiblingTabAgent } from './tab-agent' import { agentTypeToIconAgent } from '../../../shared/agent-status/presentation/agent-type-icon-agent' -import { isTerminalLeafId, parsePaneKey } from '../../../shared/stable-pane-id' +import { isTerminalLeafId, parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import type { AgentStatusEntry, AgentStatusState, AgentType } from '../../../shared/agent-status/contracts/agent-status-types' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../shared/terminal-tab-types' -import type { TerminalAgent } from '../../../shared/terminal-agent' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../shared/workspace-layout/terminal-tab-types' +import type { TerminalAgent } from '../../../shared/agent-status/identity/terminal-agent' import type { RetainedAgentEntry } from '@/store/slices/agent-status/agent-status-contract' // Keep pre-index scans as the randomized differential oracle for exact resolver behavior. diff --git a/src/renderer/src/lib/tab-agent-status-index.ts b/src/renderer/src/lib/tab-agent-status-index.ts index 6c75a677a8d..8cf013dfd2b 100644 --- a/src/renderer/src/lib/tab-agent-status-index.ts +++ b/src/renderer/src/lib/tab-agent-status-index.ts @@ -1,6 +1,6 @@ import type { AgentStatusEntry } from '../../../shared/agent-status/contracts/agent-status-types' -import type { TerminalAgent } from '../../../shared/terminal-agent' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import type { TerminalAgent } from '../../../shared/agent-status/identity/terminal-agent' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import type { RetainedAgentEntry } from '@/store/slices/agent-status/agent-status-contract' import { agentTypeToIconAgent } from '../../../shared/agent-status/presentation/agent-type-icon-agent' diff --git a/src/renderer/src/lib/tab-agent.ts b/src/renderer/src/lib/tab-agent.ts index b2dc75cfb69..bb3b6afaab8 100644 --- a/src/renderer/src/lib/tab-agent.ts +++ b/src/renderer/src/lib/tab-agent.ts @@ -1,7 +1,7 @@ import type { AgentStatusEntry } from '../../../shared/agent-status/contracts/agent-status-types' -import type { TerminalLayoutSnapshot } from '../../../shared/terminal-tab-types' -import type { TerminalAgent } from '../../../shared/terminal-agent' -import { isTerminalLeafId, makePaneKey } from '../../../shared/stable-pane-id' +import type { TerminalLayoutSnapshot } from '../../../shared/workspace-layout/terminal-tab-types' +import type { TerminalAgent } from '../../../shared/agent-status/identity/terminal-agent' +import { isTerminalLeafId, makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import type { RetainedAgentEntry } from '@/store/slices/agent-status/agent-status-contract' import { agentTypeToIconAgent } from '../../../shared/agent-status/presentation/agent-type-icon-agent' import { diff --git a/src/renderer/src/lib/terminal-close-route.ts b/src/renderer/src/lib/terminal-close-route.ts index 9c1c95937ac..6d281191b35 100644 --- a/src/renderer/src/lib/terminal-close-route.ts +++ b/src/renderer/src/lib/terminal-close-route.ts @@ -1,5 +1,5 @@ import { parseExecutionHostId } from '../../../shared/execution-host' -import { getPtyExecutionHost } from '../../../shared/terminal-execution-host' +import { getPtyExecutionHost } from '../../../shared/terminal/pty/lifecycle/terminal-execution-host' import type { AppState } from '@/store/types' import { collectPtyIdsForTab } from '@/store/slices/terminal-tab-retirement' import { resolveTerminalWorktreeRoute, type TerminalWorktreeRoute } from './terminal-worktree-route' diff --git a/src/renderer/src/lib/terminal-pane-placement-row.ts b/src/renderer/src/lib/terminal-pane-placement-row.ts index 53ae435a200..c9f02fa94f5 100644 --- a/src/renderer/src/lib/terminal-pane-placement-row.ts +++ b/src/renderer/src/lib/terminal-pane-placement-row.ts @@ -1,5 +1,5 @@ -import type { TerminalPaneNewTabRow } from '../../../shared/terminal-pane-placement' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalPaneNewTabRow } from '../../../shared/workspace-layout/terminal-pane-placement' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' export function terminalPanePlacementRow(tab: TerminalTab): TerminalPaneNewTabRow { const { diff --git a/src/renderer/src/lib/terminal-reveal-identity.ts b/src/renderer/src/lib/terminal-reveal-identity.ts index d352e96aedb..9d6684d3f62 100644 --- a/src/renderer/src/lib/terminal-reveal-identity.ts +++ b/src/renderer/src/lib/terminal-reveal-identity.ts @@ -1,4 +1,4 @@ -import type { TerminalRevealIdentity } from '../../../shared/terminal-reveal-identity' +import type { TerminalRevealIdentity } from '../../../shared/workspace-layout/terminal-reveal-identity' type TerminalRevealState = { tabsByWorktree: Record diff --git a/src/renderer/src/lib/unread-badge-count.ts b/src/renderer/src/lib/unread-badge-count.ts index f8b13fc651e..ae29dc2b7a5 100644 --- a/src/renderer/src/lib/unread-badge-count.ts +++ b/src/renderer/src/lib/unread-badge-count.ts @@ -14,7 +14,7 @@ import type { ProjectGroup } from '../../../shared/project-group-types' import type { Repo } from '../../../shared/repo-types' import { folderWorkspaceKey } from '../../../shared/workspace-scope' import type { StoredAgentAttentionUnread } from '@/attention/agent-attention-contract' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import type { Tab } from '../../../shared/tab-types' import type { Worktree } from '../../../shared/worktree/types' import { hasLiveTabMarker } from '@/store/slices/workspace-attention/workspace-live-markers' diff --git a/src/renderer/src/lib/use-tab-agent-observed-signal-dispatch.test.tsx b/src/renderer/src/lib/use-tab-agent-observed-signal-dispatch.test.tsx index bca14ade869..8543fab9b20 100644 --- a/src/renderer/src/lib/use-tab-agent-observed-signal-dispatch.test.tsx +++ b/src/renderer/src/lib/use-tab-agent-observed-signal-dispatch.test.tsx @@ -20,9 +20,12 @@ import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it } from 'vitest' import { useAppStore } from '@/store' import type { AgentStatusEntry } from '../../../shared/agent-status/contracts/agent-status-types' -import { makePaneKey } from '../../../shared/stable-pane-id' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../shared/terminal-tab-types' -import type { TerminalAgent } from '../../../shared/terminal-agent' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../shared/workspace-layout/terminal-tab-types' +import type { TerminalAgent } from '../../../shared/agent-status/identity/terminal-agent' import { useTabAgent } from './use-tab-agent' ;(globalThis as { IS_REACT_ACT_ENVIRONMENT?: boolean }).IS_REACT_ACT_ENVIRONMENT = true diff --git a/src/renderer/src/lib/use-tab-agent-opencode-native-title.test.ts b/src/renderer/src/lib/use-tab-agent-opencode-native-title.test.ts index 32545b8419d..0439af65ad3 100644 --- a/src/renderer/src/lib/use-tab-agent-opencode-native-title.test.ts +++ b/src/renderer/src/lib/use-tab-agent-opencode-native-title.test.ts @@ -5,10 +5,13 @@ import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { useAppStore } from '@/store' import type { SleepingAgentSessionRecord } from '../../../shared/agent-session/lifecycle/agent-session-resume' -import { makePaneKey } from '../../../shared/stable-pane-id' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../shared/terminal-tab-types' -import type { TerminalAgent } from '../../../shared/terminal-agent' -import '../../../shared/workspace-session-schema' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../shared/workspace-layout/terminal-tab-types' +import type { TerminalAgent } from '../../../shared/agent-status/identity/terminal-agent' +import '../../../shared/workspace-session/workspace-session-schema' import '../../../shared/tab-agent-from-signals' import { useTabAgent } from './use-tab-agent' diff --git a/src/renderer/src/lib/use-tab-agent-process-signals.test.ts b/src/renderer/src/lib/use-tab-agent-process-signals.test.ts index 234b8e10fe2..d45cdfef5fc 100644 --- a/src/renderer/src/lib/use-tab-agent-process-signals.test.ts +++ b/src/renderer/src/lib/use-tab-agent-process-signals.test.ts @@ -4,10 +4,10 @@ import { act, createElement } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { useAppStore } from '@/store' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import type { PaneForegroundAgentEntry } from '@/store/slices/pane-foreground-agent' -import type { TerminalTab } from '../../../shared/terminal-tab-types' -import type { TerminalAgent } from '../../../shared/terminal-agent' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' +import type { TerminalAgent } from '../../../shared/agent-status/identity/terminal-agent' import '../../../shared/tab-agent-from-signals' import { useTabAgent } from './use-tab-agent' diff --git a/src/renderer/src/lib/use-tab-agent.test.ts b/src/renderer/src/lib/use-tab-agent.test.ts index fcdab23c75a..5ad45ba2aba 100644 --- a/src/renderer/src/lib/use-tab-agent.test.ts +++ b/src/renderer/src/lib/use-tab-agent.test.ts @@ -5,9 +5,12 @@ import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { useAppStore } from '@/store' import type { AgentStatusEntry } from '../../../shared/agent-status/contracts/agent-status-types' -import { makePaneKey } from '../../../shared/stable-pane-id' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../shared/terminal-tab-types' -import type { TerminalAgent } from '../../../shared/terminal-agent' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../shared/workspace-layout/terminal-tab-types' +import type { TerminalAgent } from '../../../shared/agent-status/identity/terminal-agent' import '../../../shared/tab-agent-from-signals' import { useTabAgent } from './use-tab-agent' diff --git a/src/renderer/src/lib/use-tab-agent.ts b/src/renderer/src/lib/use-tab-agent.ts index 221d906a929..f599c9023e4 100644 --- a/src/renderer/src/lib/use-tab-agent.ts +++ b/src/renderer/src/lib/use-tab-agent.ts @@ -2,7 +2,7 @@ import { useEffect, useRef, useState } from 'react' import { useAppStore } from '@/store' import { worktreeUsesRemoteConnection } from '@/store/terminals/terminal-workspace-routing' import { hasRemoteRuntimePtyForTab } from './tab-agent-remote-pty-selector' -import { isTerminalLeafId, makePaneKey } from '../../../shared/stable-pane-id' +import { isTerminalLeafId, makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { resolveFocusedCompletedTabAgent, resolveFocusedRetainedTabAgent, @@ -16,8 +16,8 @@ import { resolveLaunchedAgentExitEvidence, resolveTabAgentFromSignals } from '../../../shared/tab-agent-from-signals' -import type { TerminalTab } from '../../../shared/terminal-tab-types' -import type { TerminalAgent } from '../../../shared/terminal-agent' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' +import type { TerminalAgent } from '../../../shared/agent-status/identity/terminal-agent' /** Resolve pane identity, separate from activity, without foreground probes: live focused hook → process (normalized to owner group) → reuse/hookless title → completed/retained focused identity → sleeping session → launch → sibling fallback. Native OpenCode titles cannot displace durable ownership; local OSC 133;D suppresses exited idle identity. */ export function useTabAgent(tab: TerminalTab): TerminalAgent | null { diff --git a/src/renderer/src/lib/wake-sleeping-agents-live-unmounted-pane.test.ts b/src/renderer/src/lib/wake-sleeping-agents-live-unmounted-pane.test.ts index aa7a77f58bf..baeb2349dde 100644 --- a/src/renderer/src/lib/wake-sleeping-agents-live-unmounted-pane.test.ts +++ b/src/renderer/src/lib/wake-sleeping-agents-live-unmounted-pane.test.ts @@ -2,8 +2,8 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { SleepingAgentSessionRecord } from '../../../shared/agent-session/lifecycle/agent-session-resume' -import type { PtyListedSession } from '../../../shared/pty-listed-session' -import { makePaneKey } from '../../../shared/stable-pane-id' +import type { PtyListedSession } from '../../../shared/terminal/pty/lifecycle/pty-listed-session' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { useAppStore } from '@/store' import type { AppState } from '@/store/types' import { wakeSleepingAgentsForWorktreeInBackground } from './wake-sleeping-agents-in-background' diff --git a/src/renderer/src/lib/web-runtime-worktree-terminal-after-wake.ts b/src/renderer/src/lib/web-runtime-worktree-terminal-after-wake.ts index b65c0d474da..b06dce5ffdc 100644 --- a/src/renderer/src/lib/web-runtime-worktree-terminal-after-wake.ts +++ b/src/renderer/src/lib/web-runtime-worktree-terminal-after-wake.ts @@ -2,7 +2,7 @@ import { useAppStore } from '@/store' import { tabHasLivePty } from '../../../shared/tab-has-live-pty' import { createWebRuntimeSessionTerminal } from '@/runtime/web-runtime-terminal-creation' import { isWebRuntimeSessionActive } from '@/runtime/web-runtime-session-environment' -import { isWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { isWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' import { getLastKnownHostTerminalTabCount } from '@/runtime/web-session-tabs-sync/tracking-lifecycle' import { beginWebRuntimeWakeTerminalRespawn, diff --git a/src/renderer/src/lib/workspace-attachment-observed-origin.ts b/src/renderer/src/lib/workspace-attachment-observed-origin.ts index de408c5d605..8fea8a00fdf 100644 --- a/src/renderer/src/lib/workspace-attachment-observed-origin.ts +++ b/src/renderer/src/lib/workspace-attachment-observed-origin.ts @@ -6,8 +6,8 @@ import { resolveTerminalNotificationOwner } from '@/attention/notification-subject-owner' import type { WorkspaceAttachmentOrigin } from '../../../shared/worktree/types' -import { parsePaneKey } from '../../../shared/stable-pane-id' -import { terminalLayoutContainsLeaf } from '../../../shared/workspace-session-pane-ownership' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' +import { terminalLayoutContainsLeaf } from '../../../shared/workspace-session/workspace-session-pane-ownership' import type { Tab } from '../../../shared/tab-types' export type WorkspaceReferenceTerminalContext = { diff --git a/src/renderer/src/lib/workspace-session-browser-history.test.ts b/src/renderer/src/lib/workspace-session-browser-history.test.ts index 8c6ef564e25..512fee7211b 100644 --- a/src/renderer/src/lib/workspace-session-browser-history.test.ts +++ b/src/renderer/src/lib/workspace-session-browser-history.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import type { BrowserHistoryEntry } from '../../../shared/browser-workspace-types' -import { MAX_BROWSER_HISTORY_ENTRIES } from '../../../shared/workspace-session-browser-history' +import { MAX_BROWSER_HISTORY_ENTRIES } from '../../../shared/workspace-session/workspace-session-browser-history' import { buildWorkspaceSessionPayload, type WorkspaceSessionSnapshot } from './workspace-session' function createSnapshot(browserUrlHistory: BrowserHistoryEntry[]): WorkspaceSessionSnapshot { diff --git a/src/renderer/src/lib/workspace-session-browser-tabs.ts b/src/renderer/src/lib/workspace-session-browser-tabs.ts index f813902103f..2a31c6bad02 100644 --- a/src/renderer/src/lib/workspace-session-browser-tabs.ts +++ b/src/renderer/src/lib/workspace-session-browser-tabs.ts @@ -1,5 +1,5 @@ import type { BrowserPage, BrowserWorkspace } from '../../../shared/browser-workspace-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { RemoteBrowserPageHandle } from '../store/slices/browser' export function buildBrowserSessionData( diff --git a/src/renderer/src/lib/workspace-session-close-intents.ts b/src/renderer/src/lib/workspace-session-close-intents.ts index 951b3a906c6..f792a567aef 100644 --- a/src/renderer/src/lib/workspace-session-close-intents.ts +++ b/src/renderer/src/lib/workspace-session-close-intents.ts @@ -1,4 +1,4 @@ -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' /** The closes this client still owes runtime environments; optional for partial fixtures. */ export type CloseIntentFields = Pick< diff --git a/src/renderer/src/lib/workspace-session-focus-recency.ts b/src/renderer/src/lib/workspace-session-focus-recency.ts index bc1ed783e46..73bb4fa62c1 100644 --- a/src/renderer/src/lib/workspace-session-focus-recency.ts +++ b/src/renderer/src/lib/workspace-session-focus-recency.ts @@ -1,4 +1,4 @@ -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' export function buildLastVisitedAtByWorktreeId(snapshot: { lastVisitedAtByWorktreeId: WorkspaceSessionState['lastVisitedAtByWorktreeId'] diff --git a/src/renderer/src/lib/workspace-session-host-contention.test.ts b/src/renderer/src/lib/workspace-session-host-contention.test.ts index f702a9d8612..5e522de6317 100644 --- a/src/renderer/src/lib/workspace-session-host-contention.test.ts +++ b/src/renderer/src/lib/workspace-session-host-contention.test.ts @@ -1,12 +1,12 @@ /** Bare repoId::path IDs collide across hosts (STA-4343); folding both into local let the last writer permanently erase the other workspace’s tabs. */ import { describe, expect, it, vi, type Mock } from 'vitest' import { getDefaultWorkspaceSession } from '../../../shared/constants' -import type { TerminalTab } from '../../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { ExecutionHostId } from '../../../shared/execution-host' import { folderWorkspaceKey } from '../../../shared/workspace-scope' import './workspace-session-host-contention' -import '../../../shared/workspace-session-contested-primary-host' +import '../../../shared/workspace-session/workspace-session-contested-primary-host' import { fetchWorkspaceSessionWithRuntimeHostOwners } from './workspace-session-host-hydration' import { patchWorkspaceSessionByHost, diff --git a/src/renderer/src/lib/workspace-session-host-contention.ts b/src/renderer/src/lib/workspace-session-host-contention.ts index 422faa2f1e9..d6f1990d54d 100644 --- a/src/renderer/src/lib/workspace-session-host-contention.ts +++ b/src/renderer/src/lib/workspace-session-host-contention.ts @@ -1,16 +1,16 @@ -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { parseExecutionHostId, toRuntimeExecutionHostId, type ExecutionHostId } from '../../../shared/execution-host' import { normalizeWorkspaceSessionKeyToWorkspaceId as normalizeWorkspaceSessionKeyToWorktreeId } from '../../../shared/workspace-scope' -import { WORKSPACE_SESSION_FIELD_OWNERSHIP } from '../../../shared/workspace-session-host-field-ownership' -import { pickPrimaryHostForClaims } from '../../../shared/workspace-session-contested-primary-host' +import { WORKSPACE_SESSION_FIELD_OWNERSHIP } from '../../../shared/workspace-session/workspace-session-host-field-ownership' +import { pickPrimaryHostForClaims } from '../../../shared/workspace-session/workspace-session-contested-primary-host' import { isWorkspaceSessionRecord, type WorkspaceSessionRecord -} from '../../../shared/workspace-session-host-records' +} from '../../../shared/workspace-session/workspace-session-host-records' import type { WorkspaceRuntimeOwnerProjection } from './workspace-runtime-host-ownership' import { mergeWorkspaceSessionsFromHosts, diff --git a/src/renderer/src/lib/workspace-session-host-emptied-fields.test.ts b/src/renderer/src/lib/workspace-session-host-emptied-fields.test.ts index 57e80007563..4cc76824371 100644 --- a/src/renderer/src/lib/workspace-session-host-emptied-fields.test.ts +++ b/src/renderer/src/lib/workspace-session-host-emptied-fields.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest' import { getDefaultWorkspaceSession } from '../../../shared/constants' import { toRuntimeExecutionHostId, type ExecutionHostId } from '../../../shared/execution-host' -import type { WorkspaceSessionPatch } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionPatch } from '../../../shared/workspace-session/workspace-session-state-types' import { patchWorkspaceSessionByHost, type HostPersistenceState diff --git a/src/renderer/src/lib/workspace-session-host-hydration.ts b/src/renderer/src/lib/workspace-session-host-hydration.ts index 63a7d8a4439..3337253b24d 100644 --- a/src/renderer/src/lib/workspace-session-host-hydration.ts +++ b/src/renderer/src/lib/workspace-session-host-hydration.ts @@ -1,5 +1,5 @@ import type { Repo } from '../../../shared/repo-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { getRepoExecutionHostId, LOCAL_EXECUTION_HOST_ID, @@ -14,7 +14,7 @@ import { adoptStrandedHostPartitionSession, partitionRowsTheWriteWontReturn, workspaceIdsNamedByPartition -} from '../../../shared/workspace-session-stranded-partition-adoption' +} from '../../../shared/workspace-session/workspace-session-stranded-partition-adoption' import { mergeWorkspaceSessionsWithHostShadow } from './workspace-session-host-contention' import { nonLocalHostSessionEntries, type HostSessionSlices } from './workspace-session-host-split' diff --git a/src/renderer/src/lib/workspace-session-host-persistence.test.ts b/src/renderer/src/lib/workspace-session-host-persistence.test.ts index 546872fe8fa..3f145420a2a 100644 --- a/src/renderer/src/lib/workspace-session-host-persistence.test.ts +++ b/src/renderer/src/lib/workspace-session-host-persistence.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it, vi } from 'vitest' import { getDefaultWorkspaceSession } from '../../../shared/constants' -import type { TerminalLayoutSnapshot } from '../../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { TerminalLayoutSnapshot } from '../../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { folderWorkspaceKey } from '../../../shared/workspace-scope' import { patchWorkspaceSessionByHost, diff --git a/src/renderer/src/lib/workspace-session-host-persistence.ts b/src/renderer/src/lib/workspace-session-host-persistence.ts index c170f6e03ca..fc9939e933d 100644 --- a/src/renderer/src/lib/workspace-session-host-persistence.ts +++ b/src/renderer/src/lib/workspace-session-host-persistence.ts @@ -2,14 +2,14 @@ import type { Repo } from '../../../shared/repo-types' import type { WorkspaceSessionPatch, WorkspaceSessionState -} from '../../../shared/workspace-session-state-types' +} from '../../../shared/workspace-session/workspace-session-state-types' import { getRepoExecutionHostId, LOCAL_EXECUTION_HOST_ID, parseExecutionHostId, type ExecutionHostId } from '../../../shared/execution-host' -import { workspaceSessionPartitionHostId } from '../../../shared/workspace-session-partition-owner' +import { workspaceSessionPartitionHostId } from '../../../shared/workspace-session/workspace-session-partition-owner' import { parseWorkspaceKey, normalizeWorkspaceSessionKeyToWorkspaceId as normalizeWorkspaceSessionKeyToWorktreeId @@ -25,7 +25,7 @@ import { import { contestedPartitionHosts, pickPrimaryHostForClaims -} from '../../../shared/workspace-session-contested-primary-host' +} from '../../../shared/workspace-session/workspace-session-contested-primary-host' import { nonLocalHostSessionEntries, splitWorkspaceSessionByHost, @@ -40,7 +40,7 @@ import { buildWorktreeIdByTabId, extendWorktreeIdByTabId, type WorkspaceTabOwnerCatalog -} from '../../../shared/workspace-session-host-records' +} from '../../../shared/workspace-session/workspace-session-host-records' export type HostPersistenceState = WorkspaceTabOwnerCatalog & { repos: readonly Pick[] diff --git a/src/renderer/src/lib/workspace-session-host-split.ts b/src/renderer/src/lib/workspace-session-host-split.ts index 2b46d6691f0..f0f4f24dca9 100644 --- a/src/renderer/src/lib/workspace-session-host-split.ts +++ b/src/renderer/src/lib/workspace-session-host-split.ts @@ -1,4 +1,4 @@ -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { LOCAL_EXECUTION_HOST_ID, parseExecutionHostId, @@ -9,7 +9,7 @@ import { GLOBAL_WORKSPACE_SESSION_FIELDS, hostPartitionSliceTemplate, WORKSPACE_SESSION_FIELD_OWNERSHIP -} from '../../../shared/workspace-session-host-field-ownership' +} from '../../../shared/workspace-session/workspace-session-host-field-ownership' import { buildWorktreeIdByFileId, buildWorktreeIdByTabId, @@ -18,7 +18,7 @@ import { mergeWorkspaceSessionRecordField, worktreeIdForPaneKey, type WorkspaceSessionRecord -} from '../../../shared/workspace-session-host-records' +} from '../../../shared/workspace-session/workspace-session-host-records' /** Partition unified renderer sessions by execution host for writes and merge on hydration. FIELD_OWNERSHIP exhaustively classifies fields at compile time, matching workspace-session’s relevant-field gate. */ diff --git a/src/renderer/src/lib/workspace-session-hydration-keys.ts b/src/renderer/src/lib/workspace-session-hydration-keys.ts index f5915eb0137..faf3317d0d4 100644 --- a/src/renderer/src/lib/workspace-session-hydration-keys.ts +++ b/src/renderer/src/lib/workspace-session-hydration-keys.ts @@ -1,9 +1,9 @@ import { readStructuredAgentLaunchRecords } from './agent-session/launch/structured-agent-session-launch-persistence' import { type ExecutionHostId, parseExecutionHostId } from '../../../shared/execution-host' -import type { WorkspaceKey } from '../../../shared/folder-workspaces/folder-workspace-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' -import { parseWorkspaceKey } from '../../../shared/workspace-scope' + +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' +import { type WorkspaceKey, parseWorkspaceKey } from '../../../shared/workspace-scope' import { getRepoIdFromWorktreeId } from '../../../shared/worktree/id' export type WorkspaceSessionHydrationOptions = { diff --git a/src/renderer/src/lib/workspace-session-patch.ts b/src/renderer/src/lib/workspace-session-patch.ts index 61599782ab4..fb1abeef2ab 100644 --- a/src/renderer/src/lib/workspace-session-patch.ts +++ b/src/renderer/src/lib/workspace-session-patch.ts @@ -1,10 +1,10 @@ import type { WorkspaceSessionPatch, WorkspaceSessionState -} from '../../../shared/workspace-session-state-types' -import { pruneLocalTerminalScrollbackBuffers } from '../../../shared/workspace-session-terminal-buffers' -import { normalizeBrowserHistoryEntries } from '../../../shared/workspace-session-browser-history' -import { normalizeWorkspaceDocHistoryEntries } from '../../../shared/workspace-doc-history' +} from '../../../shared/workspace-session/workspace-session-state-types' +import { pruneLocalTerminalScrollbackBuffers } from '../../../shared/workspace-session/workspace-session-terminal-buffers' +import { normalizeBrowserHistoryEntries } from '../../../shared/workspace-session/workspace-session-browser-history' +import { normalizeWorkspaceDocHistoryEntries } from '../../../shared/workspace-session/workspace-doc-history' import { buildActiveConnectionIdsAtShutdown, buildEditorSessionData, diff --git a/src/renderer/src/lib/workspace-session-reconnect-targets.ts b/src/renderer/src/lib/workspace-session-reconnect-targets.ts index 0062825d378..3a5cf5e7e54 100644 --- a/src/renderer/src/lib/workspace-session-reconnect-targets.ts +++ b/src/renderer/src/lib/workspace-session-reconnect-targets.ts @@ -1,4 +1,4 @@ -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { parseAppSshPtyId } from '../../../shared/ssh-pty-id' import { isOwnedSshTargetId } from '../../../shared/execution-host' import type { WorkspaceSessionSnapshot } from './workspace-session' diff --git a/src/renderer/src/lib/workspace-session-sleeping-agents.ts b/src/renderer/src/lib/workspace-session-sleeping-agents.ts index 29ee3d0fe6a..4e663128fb3 100644 --- a/src/renderer/src/lib/workspace-session-sleeping-agents.ts +++ b/src/renderer/src/lib/workspace-session-sleeping-agents.ts @@ -1,4 +1,4 @@ -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' export function buildSleepingAgentSessionData(snapshot: { sleepingAgentSessionsByPaneKey?: WorkspaceSessionState['sleepingAgentSessionsByPaneKey'] diff --git a/src/renderer/src/lib/workspace-session-ssh-partition-attribution.ts b/src/renderer/src/lib/workspace-session-ssh-partition-attribution.ts index ccea496d813..e84d845b545 100644 --- a/src/renderer/src/lib/workspace-session-ssh-partition-attribution.ts +++ b/src/renderer/src/lib/workspace-session-ssh-partition-attribution.ts @@ -1,12 +1,12 @@ import type { Repo } from '../../../shared/repo-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { ExecutionHostId } from '../../../shared/execution-host' import { getRepoIdFromWorktreeId } from '../../../shared/worktree/id' import { createRepoRowExecutionHostLookup, resolveWorktreeExecutionHost } from '../../../shared/worktree-execution-host-resolution' -import { workspaceIdsNamedByPartition } from '../../../shared/workspace-session-stranded-partition-adoption' +import { workspaceIdsNamedByPartition } from '../../../shared/workspace-session/workspace-session-stranded-partition-adoption' /** Contested SSH adoption may gap-fill, never replace: evidence is prior local/runtime rivalry, duplicate SSH partitions, or catalog multi-host repo IDs. Mere local/ssh co-presence is the repair’s input, not collision proof. Foreign means positive catalog reattribution; unknown catalogs prove neither, so unhydrated boot still reunites rows. */ export function sshPartitionCatalogAttribution( diff --git a/src/renderer/src/lib/workspace-session-ssh-partition-ownership.test.ts b/src/renderer/src/lib/workspace-session-ssh-partition-ownership.test.ts index 25b6c515c40..474a2da2d3e 100644 --- a/src/renderer/src/lib/workspace-session-ssh-partition-ownership.test.ts +++ b/src/renderer/src/lib/workspace-session-ssh-partition-ownership.test.ts @@ -2,11 +2,11 @@ import { describe, expect, it } from 'vitest' import { getDefaultWorkspaceSession } from '../../../shared/constants' import { normalizeExecutionHostId, type ExecutionHostId } from '../../../shared/execution-host' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import type { WorkspaceSessionPatch, WorkspaceSessionState -} from '../../../shared/workspace-session-state-types' +} from '../../../shared/workspace-session/workspace-session-state-types' import { fetchWorkspaceSessionWithRuntimeHostOwners } from './workspace-session-host-hydration' import { patchWorkspaceSessionByHost } from './workspace-session-host-persistence' diff --git a/src/renderer/src/lib/workspace-session-ssh-partition-round-trip.test.ts b/src/renderer/src/lib/workspace-session-ssh-partition-round-trip.test.ts index 99608d4f744..c6f2382ba14 100644 --- a/src/renderer/src/lib/workspace-session-ssh-partition-round-trip.test.ts +++ b/src/renderer/src/lib/workspace-session-ssh-partition-round-trip.test.ts @@ -3,8 +3,8 @@ import { describe, expect, it } from 'vitest' import { getDefaultWorkspaceSession } from '../../../shared/constants' import type { ExecutionHostId } from '../../../shared/execution-host' -import type { TerminalTab } from '../../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { shouldAutoCreateInitialTerminal } from '@/components/terminal/initial-terminal' import { fetchWorkspaceSessionWithRuntimeHostOwners } from './workspace-session-host-hydration' import '../../../shared/workspace-scope' diff --git a/src/renderer/src/lib/workspace-session-unified-tabs.ts b/src/renderer/src/lib/workspace-session-unified-tabs.ts index 2af672abf65..5d4cfbea6b9 100644 --- a/src/renderer/src/lib/workspace-session-unified-tabs.ts +++ b/src/renderer/src/lib/workspace-session-unified-tabs.ts @@ -1,6 +1,6 @@ import { structuredLaunchSlotIds } from './agent-session/launch/structured-agent-session-launch-persistence' import type { Tab, TabGroup, TabGroupLayoutNode } from '../../../shared/tab-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { WorkspaceSessionSnapshot } from './workspace-session' type PersistedUnifiedTabSessionData = Pick< diff --git a/src/renderer/src/lib/workspace-session.ts b/src/renderer/src/lib/workspace-session.ts index 870e72e5b24..869db1d110d 100644 --- a/src/renderer/src/lib/workspace-session.ts +++ b/src/renderer/src/lib/workspace-session.ts @@ -3,10 +3,10 @@ import type { WorkspaceVisibleTabType } from '../../../shared/tab-types' import type { PersistedOpenFile, WorkspaceSessionState -} from '../../../shared/workspace-session-state-types' -import { pruneLocalTerminalScrollbackBuffers } from '../../../shared/workspace-session-terminal-buffers' -import { normalizeBrowserHistoryEntries } from '../../../shared/workspace-session-browser-history' -import { normalizeWorkspaceDocHistoryEntries } from '../../../shared/workspace-doc-history' +} from '../../../shared/workspace-session/workspace-session-state-types' +import { pruneLocalTerminalScrollbackBuffers } from '../../../shared/workspace-session/workspace-session-terminal-buffers' +import { normalizeBrowserHistoryEntries } from '../../../shared/workspace-session/workspace-session-browser-history' +import { normalizeWorkspaceDocHistoryEntries } from '../../../shared/workspace-session/workspace-doc-history' import type { AppState } from '../store' import type { OpenFile } from '../store/slices/editor' import { buildPersistedUnifiedTabSessionData } from './workspace-session-unified-tabs' diff --git a/src/renderer/src/lib/workspace-tab-palette-entry-builder.ts b/src/renderer/src/lib/workspace-tab-palette-entry-builder.ts index 3f81dc5aa56..e12031783e9 100644 --- a/src/renderer/src/lib/workspace-tab-palette-entry-builder.ts +++ b/src/renderer/src/lib/workspace-tab-palette-entry-builder.ts @@ -33,7 +33,7 @@ import { isUnifiedTabOwnedByWorktree } from './unified-tab-host-ownership' import type { OpenFile } from '@/store/slices/editor' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import { isWorkspaceTabContentType } from './workspace-tab-palette-content-type' function getActiveUnifiedTabId({ diff --git a/src/renderer/src/lib/workspace-tab-palette-results.ts b/src/renderer/src/lib/workspace-tab-palette-results.ts index 8897ecebf3c..7d6a2daca66 100644 --- a/src/renderer/src/lib/workspace-tab-palette-results.ts +++ b/src/renderer/src/lib/workspace-tab-palette-results.ts @@ -24,7 +24,7 @@ import { type PaletteActivityRank, type PaletteSearchContext } from '../../../shared/palette-match/palette-ranking' -import type { TerminalAgent } from '../../../shared/terminal-agent' +import type { TerminalAgent } from '../../../shared/agent-status/identity/terminal-agent' import { getUnifiedTabPaletteExecutionHostId } from './unified-tab-host-ownership' import type { SearchableWorkspaceTab, diff --git a/src/renderer/src/lib/workspace-tab-palette-search.ts b/src/renderer/src/lib/workspace-tab-palette-search.ts index 2e61a2d7406..cff6b369810 100644 --- a/src/renderer/src/lib/workspace-tab-palette-search.ts +++ b/src/renderer/src/lib/workspace-tab-palette-search.ts @@ -2,8 +2,11 @@ import type { OpenFile } from '@/store/slices/editor' import type { PaletteDocument } from '../../../shared/palette-match/palette-document' import type { Tab, TabGroup, WorkspaceVisibleTabType } from '../../../shared/tab-types' import type { PaneForegroundAgentEntry } from '@/store/slices/pane-foreground-agent' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../shared/terminal-tab-types' -import type { TerminalAgent } from '../../../shared/terminal-agent' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../shared/workspace-layout/terminal-tab-types' +import type { TerminalAgent } from '../../../shared/agent-status/identity/terminal-agent' import type { Worktree } from '../../../shared/worktree/types' import type { ExecutionHostId } from '../../../shared/execution-host' import type { AgentMetadata, WorkspaceTabAgentMetadataState } from './workspace-tab-agent-metadata' diff --git a/src/renderer/src/lib/worktree-activation-pty-inventory.ts b/src/renderer/src/lib/worktree-activation-pty-inventory.ts index 2018f8578a1..db04782c72b 100644 --- a/src/renderer/src/lib/worktree-activation-pty-inventory.ts +++ b/src/renderer/src/lib/worktree-activation-pty-inventory.ts @@ -1,6 +1,9 @@ import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../shared/constants' import { parseExecutionHostId } from '../../../shared/execution-host' -import type { PtyListedSession, PtySessionListScope } from '../../../shared/pty-listed-session' +import type { + PtyListedSession, + PtySessionListScope +} from '../../../shared/terminal/pty/lifecycle/pty-listed-session' import { getRepoIdFromWorktreeId } from '../../../shared/worktree/id' import { runtimeEnvironmentIdOrLocalUnlessTwin } from './worktree-runtime-owner' import { diff --git a/src/renderer/src/lib/worktree-activation-store-contract.ts b/src/renderer/src/lib/worktree-activation-store-contract.ts index 96640041527..479471b7bbd 100644 --- a/src/renderer/src/lib/worktree-activation-store-contract.ts +++ b/src/renderer/src/lib/worktree-activation-store-contract.ts @@ -7,7 +7,7 @@ import type { } from '../../../shared/agent-session/lifecycle/agent-session-resume' import type { WorktreeRuntimeOwnerState } from '@/lib/worktree-runtime-owner-state' import type { AgentStartedTelemetry } from '@/lib/worktree-startup-payload' -import type { ClosedTerminalTabTombstonesByTabId } from '../../../shared/closed-terminal-tab-tombstones' +import type { ClosedTerminalTabTombstonesByTabId } from '../../../shared/workspace-layout/closed-terminal-tab-tombstones' import type { PendingWorktreeCreation } from './pending-worktree-creation' export type WorktreeActivationStore = Partial & { diff --git a/src/renderer/src/lib/worktree-activation-web-runtime.test.ts b/src/renderer/src/lib/worktree-activation-web-runtime.test.ts index 0902fdc045a..b2179a554de 100644 --- a/src/renderer/src/lib/worktree-activation-web-runtime.test.ts +++ b/src/renderer/src/lib/worktree-activation-web-runtime.test.ts @@ -2,8 +2,9 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import '../../../shared/setup-agent-sequencing' import './worktree-activation' import { ensureWorktreeHasInitialTerminal } from './worktree-initial-terminal-seeding' -import type { AppStoreState } from './worktree-activation.test-fixture' + import { + type AppStoreState, createMockStore, registerWorktreeActivationReset } from './worktree-activation.test-fixture' @@ -25,7 +26,7 @@ import { makeFolderWorkspace, makeProjectGroup } from '../components/sidebar/folder-workspace-composer-submit-fixtures' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' registerWorktreeActivationReset() const originalCreateTab = useAppStore.getState().createTab diff --git a/src/renderer/src/lib/worktree-activity-state.ts b/src/renderer/src/lib/worktree-activity-state.ts index 2f141fc0916..840f414ffc3 100644 --- a/src/renderer/src/lib/worktree-activity-state.ts +++ b/src/renderer/src/lib/worktree-activity-state.ts @@ -1,5 +1,5 @@ import { tabHasLivePty } from '../../../shared/tab-has-live-pty' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import { isFreshNonDoneAgentStatus } from '../../../shared/agent-status/contracts/agent-status-freshness' import type { AgentStatusEntry } from '../../../shared/agent-status/contracts/agent-status-types' import { resolveAgentStatusWorktreeId } from '../../../shared/agent-status/identity/agent-status-worktree-attribution' diff --git a/src/renderer/src/lib/worktree-agent-activation-gate.ts b/src/renderer/src/lib/worktree-agent-activation-gate.ts index 8081b8d9cea..043f732e6ba 100644 --- a/src/renderer/src/lib/worktree-agent-activation-gate.ts +++ b/src/renderer/src/lib/worktree-agent-activation-gate.ts @@ -1,7 +1,10 @@ import { useAppStore } from '@/store' -import type { PtyListedSession } from '../../../shared/pty-listed-session' -import { parsePtySessionId, PTY_SESSION_ID_SEPARATOR } from '../../../shared/pty-session-id-format' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import type { PtyListedSession } from '../../../shared/terminal/pty/lifecycle/pty-listed-session' +import { + parsePtySessionId, + PTY_SESSION_ID_SEPARATOR +} from '../../../shared/terminal/pty/lifecycle/pty-session-id-format' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { parseWorkspaceKey } from '../../../shared/workspace-scope' import { worktreeIdsEqual } from '../../../shared/worktree/id' import { listActivationPtySessions } from './worktree-activation-pty-inventory' @@ -14,8 +17,11 @@ import { adoptLiveWorkspacePtySurfaces, type LiveSurfaceAdoptionStore } from './worktree-agent-live-surface-adoption' -import type { LiveTerminalSurfaceOwnerIndex } from './worktree-live-terminal-surface-owners' -import { readWorktreeLiveTerminalSurfaceOwners } from './worktree-live-terminal-surface-owners' + +import { + type LiveTerminalSurfaceOwnerIndex, + readWorktreeLiveTerminalSurfaceOwners +} from './worktree-live-terminal-surface-owners' import { isStructuredAgentSyntheticSleepingRecord } from './structured-agent-synthetic-sleeping-record' import { readWorktreeStructuredActivationInventory, diff --git a/src/renderer/src/lib/worktree-agent-live-surface-adoption-cli-tab.test.ts b/src/renderer/src/lib/worktree-agent-live-surface-adoption-cli-tab.test.ts index f52188b119a..8f74f27d156 100644 --- a/src/renderer/src/lib/worktree-agent-live-surface-adoption-cli-tab.test.ts +++ b/src/renderer/src/lib/worktree-agent-live-surface-adoption-cli-tab.test.ts @@ -1,7 +1,7 @@ /** CLI terminals can look unowned before mount; layout-owner main places/names them, and every finder must show that one tab without asking another adoption. */ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { applyLayoutCommand } from '../../../shared/workspace-layout/workspace-layout-commands' import type { LayoutCommand } from '../../../shared/workspace-layout/workspace-layout-command-types' import { loadWorkspaceLayoutWithoutReport } from '../../../shared/workspace-layout/workspace-layout-load' diff --git a/src/renderer/src/lib/worktree-agent-live-surface-adoption-layout-owner.test.ts b/src/renderer/src/lib/worktree-agent-live-surface-adoption-layout-owner.test.ts index 51c0d6084eb..aa478fa76a1 100644 --- a/src/renderer/src/lib/worktree-agent-live-surface-adoption-layout-owner.test.ts +++ b/src/renderer/src/lib/worktree-agent-live-surface-adoption-layout-owner.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { loadWorkspaceLayoutWithoutReport } from '../../../shared/workspace-layout/workspace-layout-load' import { nameBasedLoadContext } from '../../../shared/workspace-layout/workspace-layout-minted-ids' import { publishWorkspaceLayout } from '../../../shared/workspace-layout/workspace-layout-published' @@ -12,8 +12,11 @@ import { import type { WorkspaceLayoutChangeFrame } from '../../../shared/workspace-layout/workspace-layout-stream-frames' import { bootWindowFromPartitions } from '../app-shell/startup-window-view.test-fixture' import { provideLayoutFrameTerminalPanes } from '../runtime/layout-frame-terminal-panes' -import { openWorkspaceLayoutFrameSync } from '../runtime/workspace-layout-frame-sync' -import type { WorkspaceLayoutFrameSync } from '../runtime/workspace-layout-frame-sync' +import { + openWorkspaceLayoutFrameSync, + type WorkspaceLayoutFrameSync +} from '../runtime/workspace-layout-frame-sync' + import { createStoreSessionMockApi } from '../store/slices/store-session-test-harness' import { createTestStore } from '../store/slices/store-test-helpers' import { adoptLiveWorkspacePtySurfaces } from './worktree-agent-live-surface-adoption' diff --git a/src/renderer/src/lib/worktree-agent-live-surface-adoption.ts b/src/renderer/src/lib/worktree-agent-live-surface-adoption.ts index 486bfaebf2b..282505059ba 100644 --- a/src/renderer/src/lib/worktree-agent-live-surface-adoption.ts +++ b/src/renderer/src/lib/worktree-agent-live-surface-adoption.ts @@ -1,6 +1,6 @@ import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../shared/layout-owner-switch' -import { hasClosedTerminalTabRecord } from '../../../shared/closed-terminal-tab-tombstones' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { hasClosedTerminalTabRecord } from '../../../shared/workspace-layout/closed-terminal-tab-tombstones' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { worktreeIdsEqual } from '../../../shared/worktree/id' import type { useAppStore } from '@/store' import type { WorktreeOperationRouteState } from '@/lib/worktree-operation-route' diff --git a/src/renderer/src/lib/worktree-creation-agent-seeds.ts b/src/renderer/src/lib/worktree-creation-agent-seeds.ts index 7abb659fd6d..de387dd3bd0 100644 --- a/src/renderer/src/lib/worktree-creation-agent-seeds.ts +++ b/src/renderer/src/lib/worktree-creation-agent-seeds.ts @@ -3,7 +3,7 @@ import { seedNativeChatAppliedSessionOptions } from '../../../shared/native-chat import { seedNativeChatLaunchDraftForAgentTab } from '@/lib/agent-launch-prompt-delivery' import { queueHookCommandsForFirstWorktreeTab } from '@/lib/hook-command-delayed-delivery' import { runtimeEnvironmentIdOrLocalUnlessTwin } from '@/lib/worktree-runtime-owner' -import { toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' import type { WorktreeCreationRequest } from '@/lib/pending-worktree-creation' import type { TuiAgent } from '../../../shared/agent-launch/catalog/tui-agent' diff --git a/src/renderer/src/lib/worktree-initial-terminal-seeding.ts b/src/renderer/src/lib/worktree-initial-terminal-seeding.ts index aabff5a6077..68ab59cf1ab 100644 --- a/src/renderer/src/lib/worktree-initial-terminal-seeding.ts +++ b/src/renderer/src/lib/worktree-initial-terminal-seeding.ts @@ -6,7 +6,7 @@ import type { ExecutionHostId } from '../../../shared/execution-host' import type { FolderWorkspace } from '../../../shared/folder-workspaces/folder-workspace-types' import { folderWorkspaceKey } from '../../../shared/workspace-scope' import { shouldAutoCreateInitialTerminal } from '@/components/terminal/initial-terminal' -import { isTerminalWorkspaceEmptiedOnPurpose } from '../../../shared/closed-terminal-tab-tombstones' +import { isTerminalWorkspaceEmptiedOnPurpose } from '../../../shared/workspace-layout/closed-terminal-tab-tombstones' import { shouldSeedWorktreePrimaryTerminal } from '../../../shared/worktree-first-surface' import { createSequencedSetupAgentCommands } from '../../../shared/setup-agent-sequencing' import { getSetupRunnerCommandPlatformForPath } from '../../../shared/setup-runner-command' diff --git a/src/renderer/src/lib/worktree-live-terminal-surface-owners.ts b/src/renderer/src/lib/worktree-live-terminal-surface-owners.ts index 26ae3e2b0e8..f24941ee7d8 100644 --- a/src/renderer/src/lib/worktree-live-terminal-surface-owners.ts +++ b/src/renderer/src/lib/worktree-live-terminal-surface-owners.ts @@ -1,4 +1,8 @@ -import { isTerminalLeafId, makePaneKey, parsePaneKey } from '../../../shared/stable-pane-id' +import { + isTerminalLeafId, + makePaneKey, + parsePaneKey +} from '../../../shared/workspace-layout/stable-pane-id' import type { RuntimeTerminalListHostScope, RuntimeTerminalListResult, diff --git a/src/renderer/src/lib/worktree-reactivation-preserved-pane-replacement.test.ts b/src/renderer/src/lib/worktree-reactivation-preserved-pane-replacement.test.ts index 0b0d0df6f29..fb5b8e3879f 100644 --- a/src/renderer/src/lib/worktree-reactivation-preserved-pane-replacement.test.ts +++ b/src/renderer/src/lib/worktree-reactivation-preserved-pane-replacement.test.ts @@ -5,7 +5,7 @@ import { useAppStore, type AppState } from '@/store' import { activateAndRevealWorktree } from './worktree-activation' import { waitForWorktreeAgentActivationGateForTests } from './worktree-agent-activation-gate' import { makeCreatedAgentWorktree as makeWorktree } from '@/lib/worktree-activation-created-agent.test-fixture' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import type { ExecutionHostId } from '../../../shared/execution-host' import { runtimeEnvironmentIdOrLocalUnlessTwin } from './worktree-runtime-owner' import { diff --git a/src/renderer/src/lib/worktree-status-spinner-launch-agent.test.ts b/src/renderer/src/lib/worktree-status-spinner-launch-agent.test.ts index d12db7326a2..7d899882b11 100644 --- a/src/renderer/src/lib/worktree-status-spinner-launch-agent.test.ts +++ b/src/renderer/src/lib/worktree-status-spinner-launch-agent.test.ts @@ -1,6 +1,9 @@ import { describe, expect, it } from 'vitest' import { buildTitleDerivedAgentRows } from '@/components/sidebar/worktree-title-derived-agent-rows' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../shared/terminal-tab-types' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../shared/workspace-layout/terminal-tab-types' import { getWorktreeStatus } from './worktree-status' const LEAF_ID = '11111111-1111-4111-8111-111111111111' diff --git a/src/renderer/src/lib/worktree-status.test.ts b/src/renderer/src/lib/worktree-status.test.ts index c79a7bea4a4..023cf91e842 100644 --- a/src/renderer/src/lib/worktree-status.test.ts +++ b/src/renderer/src/lib/worktree-status.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { TerminalLayoutSnapshot } from '../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../shared/workspace-layout/terminal-tab-types' import { resolveWorktreeStatus } from './worktree-status' const LEAF_ID_1 = '11111111-1111-4111-8111-111111111111' diff --git a/src/renderer/src/lib/worktree-status.ts b/src/renderer/src/lib/worktree-status.ts index 88866d4083d..1c80c44cc24 100644 --- a/src/renderer/src/lib/worktree-status.ts +++ b/src/renderer/src/lib/worktree-status.ts @@ -13,7 +13,7 @@ import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode, TerminalTab -} from '../../../shared/terminal-tab-types' +} from '../../../shared/workspace-layout/terminal-tab-types' import type { TuiAgent } from '../../../shared/agent-launch/catalog/tui-agent' import type { LiveAgentWorktreeStatus } from './worktree-activity-state' import { rankWorktreeStatus, type WorktreeStatus } from '../../../shared/worktree-status-rollup' diff --git a/src/renderer/src/runtime/agent-sender-alias-projection.ts b/src/renderer/src/runtime/agent-sender-alias-projection.ts index 02f498cb7fd..bd698b7cd28 100644 --- a/src/renderer/src/runtime/agent-sender-alias-projection.ts +++ b/src/renderer/src/runtime/agent-sender-alias-projection.ts @@ -8,10 +8,13 @@ import { structuredAgentSessionPaneKey, structuredAgentSessionTabId } from '../../../shared/agent-session/view/structured-agent-session-projection' -import { isWebTerminalSurfaceTabId, toHostSessionTabId } from '../../../shared/terminal-surface-id' +import { + isWebTerminalSurfaceTabId, + toHostSessionTabId +} from '../../../shared/workspace-layout/terminal-surface-id' import { parseRemoteRuntimePtyId } from '../../../shared/remote-runtime/remote-runtime-pty-id' import { getKnownExecutionHostIdForWorktree } from '@/lib/worktree-runtime-owner' -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' const key = (host: string, address: string) => JSON.stringify([host, address]) diff --git a/src/renderer/src/runtime/client-hosted-browser-close-intents.ts b/src/renderer/src/runtime/client-hosted-browser-close-intents.ts index 00124a91e24..d0f63e519b6 100644 --- a/src/renderer/src/runtime/client-hosted-browser-close-intents.ts +++ b/src/renderer/src/runtime/client-hosted-browser-close-intents.ts @@ -2,7 +2,7 @@ import { CLIENT_HOSTED_BROWSER_CLOSE_INTENT_MAX_AGE_MS, MAX_CLIENT_HOSTED_BROWSER_CLOSE_INTENTS, type ClientHostedBrowserCloseIntent -} from '../../../shared/client-hosted-browser-close-intent' +} from '../../../shared/workspace-session/client-hosted-browser-close-intent' import type { AppState } from '@/store/types' import { appendEnvironmentCloseIntents, diff --git a/src/renderer/src/runtime/close-mirrored-editor-tab.test.ts b/src/renderer/src/runtime/close-mirrored-editor-tab.test.ts index 4f54a00c82d..6fea6350537 100644 --- a/src/renderer/src/runtime/close-mirrored-editor-tab.test.ts +++ b/src/renderer/src/runtime/close-mirrored-editor-tab.test.ts @@ -29,7 +29,7 @@ import { isWebSessionCloseIntentPending, resetWebSessionCloseIntentForTests } from './web-session-close-intent' -import { toHostSessionTabId } from '../../../shared/terminal-surface-id' +import { toHostSessionTabId } from '../../../shared/workspace-layout/terminal-surface-id' type OwnerHost = 'local' | 'runtime:env-1' diff --git a/src/renderer/src/runtime/close-mirrored-editor-tab.ts b/src/renderer/src/runtime/close-mirrored-editor-tab.ts index b6176c0c15b..fc5327039ae 100644 --- a/src/renderer/src/runtime/close-mirrored-editor-tab.ts +++ b/src/renderer/src/runtime/close-mirrored-editor-tab.ts @@ -2,7 +2,7 @@ import { runtimeEnvironmentIdUnlessTwin } from '@/lib/resolve-owner' import type { WorktreeOperationRouteState } from '@/lib/worktree-operation-route' import { recordWebSessionCloseIntent } from './web-session-close-intent' import { isServerFrameDrawnWorkspace } from './web-session-tabs-sync/frame-drawn-server-workspace-set' -import { toHostSessionTabId } from '../../../shared/terminal-surface-id' +import { toHostSessionTabId } from '../../../shared/workspace-layout/terminal-surface-id' import type { OpenFile } from '@/store/slices/editor' import type { Tab } from '../../../shared/tab-types' diff --git a/src/renderer/src/runtime/host-session-mirror-frame-fixtures.ts b/src/renderer/src/runtime/host-session-mirror-frame-fixtures.ts index 4fd9ffb7ac9..0de050fe0bd 100644 --- a/src/renderer/src/runtime/host-session-mirror-frame-fixtures.ts +++ b/src/renderer/src/runtime/host-session-mirror-frame-fixtures.ts @@ -1,9 +1,9 @@ import { vi, type Mock } from 'vitest' import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-types' -import { toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' import type { AppState } from '@/store' import { makeTerminalTab } from '@/store/slices/worktrees-slice-test-fixtures' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' /** Shared with the frame-ordering suites through their `vi.mock` factories, so * this module must stay free of runtime imports that would form a cycle. */ diff --git a/src/renderer/src/runtime/host-session-mirror-frame-ordering-test-harness.ts b/src/renderer/src/runtime/host-session-mirror-frame-ordering-test-harness.ts index 424de9fcf33..72783c51878 100644 --- a/src/renderer/src/runtime/host-session-mirror-frame-ordering-test-harness.ts +++ b/src/renderer/src/runtime/host-session-mirror-frame-ordering-test-harness.ts @@ -1,7 +1,7 @@ import { act, cleanup } from '@testing-library/react' import { afterEach, beforeEach, expect, vi } from 'vitest' import { getDefaultSettings } from '../../../shared/constants' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { resetStaleDocumentVisibilityForTesting } from '@/components/terminal-pane/stale-document-visibility' import { useAppStore } from '@/store' import { diff --git a/src/renderer/src/runtime/host-terminal-scrollback-hydration.test.ts b/src/renderer/src/runtime/host-terminal-scrollback-hydration.test.ts index cf11b517da1..53f5bdbb58d 100644 --- a/src/renderer/src/runtime/host-terminal-scrollback-hydration.test.ts +++ b/src/renderer/src/runtime/host-terminal-scrollback-hydration.test.ts @@ -1,5 +1,5 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { TerminalLayoutSnapshot } from '../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../shared/workspace-layout/terminal-tab-types' import { HOST_TERMINAL_SCROLLBACK_HOLD_MS, resetHostTerminalScrollbackHydrationForTests, diff --git a/src/renderer/src/runtime/host-terminal-scrollback-hydration.ts b/src/renderer/src/runtime/host-terminal-scrollback-hydration.ts index 689f5aa71af..b0fc42d4eef 100644 --- a/src/renderer/src/runtime/host-terminal-scrollback-hydration.ts +++ b/src/renderer/src/runtime/host-terminal-scrollback-hydration.ts @@ -1,4 +1,4 @@ -import type { TerminalLayoutSnapshot } from '../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../shared/workspace-layout/terminal-tab-types' import type { SessionReadTerminalScrollbackResult } from '../../../shared/rpc-contract/session-terminal-scrollback-params' import { SESSION_TERMINAL_SCROLLBACK_READ_RUNTIME_CAPABILITY } from '../../../shared/session-tabs-runtime-capabilities' import { useAppStore } from '@/store' diff --git a/src/renderer/src/runtime/host-unverifiable-agent-row-presentation.test.ts b/src/renderer/src/runtime/host-unverifiable-agent-row-presentation.test.ts index c4bfac13582..cacc7743eba 100644 --- a/src/renderer/src/runtime/host-unverifiable-agent-row-presentation.test.ts +++ b/src/renderer/src/runtime/host-unverifiable-agent-row-presentation.test.ts @@ -5,8 +5,8 @@ */ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-types' -import { makePaneKey } from '../../../shared/stable-pane-id' -import { toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' +import { toWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' import { getDefaultSettings } from '../../../shared/constants' import { createTestStore, makeWorktree, seedStore } from '../store/slices/store-test-helpers' import { applyFreshWebSessionTabsSnapshot } from './web-session-tabs-sync/snapshot-api' diff --git a/src/renderer/src/runtime/layout-owner-pane-intents.ts b/src/renderer/src/runtime/layout-owner-pane-intents.ts index 7f342c15a1d..78622d2984f 100644 --- a/src/renderer/src/runtime/layout-owner-pane-intents.ts +++ b/src/renderer/src/runtime/layout-owner-pane-intents.ts @@ -1,6 +1,6 @@ // Track window pane-close reason, moved-tab selection and in-flight drawn-tree holds while main owns frame structure. Unrequested drops await main’s notice; added panes mount/focus unless a local split requested retained focus. -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' /** Intents outlive their frame only when a tab never mounts again; keep the newest few. */ const MAX_INTENTS = 64 diff --git a/src/renderer/src/runtime/legacy-chat-rename-migration.test.tsx b/src/renderer/src/runtime/legacy-chat-rename-migration.test.tsx index 919d028669c..9e2cae2e60d 100644 --- a/src/renderer/src/runtime/legacy-chat-rename-migration.test.tsx +++ b/src/renderer/src/runtime/legacy-chat-rename-migration.test.tsx @@ -32,13 +32,13 @@ import { } from './structured-chat-name-observation' import { useLiveDashboardSnapshot } from '@/components/dashboard/useLiveDashboardSnapshot' import { useAgentPaneThreads } from '@/components/activity/use-agent-pane-threads' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import type { RuntimeClientTarget } from '../../../shared/runtime-client-target' import { fetchWorkspaceSessionWithRuntimeHostOwners } from '@/lib/workspace-session-host-hydration' import { buildPersistedUnifiedTabSessionData } from '@/lib/workspace-session-unified-tabs' import { persistWorkspaceSessionByHost } from '@/lib/workspace-session-host-persistence' import { sendMessageToAgent } from '@/lib/agent-message-send' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import './web-session-tabs-sync/snapshot-api' import './web-session-tabs-sync/store-patch' diff --git a/src/renderer/src/runtime/local-structured-session-tabs-sync.test.ts b/src/renderer/src/runtime/local-structured-session-tabs-sync.test.ts index ba7512fe45d..3e357eb08c9 100644 --- a/src/renderer/src/runtime/local-structured-session-tabs-sync.test.ts +++ b/src/renderer/src/runtime/local-structured-session-tabs-sync.test.ts @@ -5,7 +5,7 @@ import '../../../shared/constants' import { STRUCTURED_AGENT_SESSION_RUNTIME_CAPABILITY } from '../../../shared/agent-session/agent-session-runtime-capabilities' import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-types' import type { Tab } from '../../../shared/tab-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { buildPersistedUnifiedTabSessionData } from '../lib/workspace-session-unified-tabs' import { buildHydratedTabState } from '../store/slices/tabs-hydration' diff --git a/src/renderer/src/runtime/main-loaded-layout-frames.test-fixture.ts b/src/renderer/src/runtime/main-loaded-layout-frames.test-fixture.ts index c94d3f1ffbf..bfccebc1ef9 100644 --- a/src/renderer/src/runtime/main-loaded-layout-frames.test-fixture.ts +++ b/src/renderer/src/runtime/main-loaded-layout-frames.test-fixture.ts @@ -1,7 +1,7 @@ // Feed switch-on tests main’s loaded partition frames instead of the window’s own restore. import type { ExecutionHostId } from '../../../shared/execution-host' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { loadWorkspaceLayoutWithoutReport } from '../../../shared/workspace-layout/workspace-layout-load' import { nameBasedLoadContext } from '../../../shared/workspace-layout/workspace-layout-minted-ids' import type { WorkspaceLayoutModel } from '../../../shared/workspace-layout/workspace-layout-model' diff --git a/src/renderer/src/runtime/mirrored-agent-status-clock-skew.test.ts b/src/renderer/src/runtime/mirrored-agent-status-clock-skew.test.ts index 8fe40afcd93..01e348713bc 100644 --- a/src/renderer/src/runtime/mirrored-agent-status-clock-skew.test.ts +++ b/src/renderer/src/runtime/mirrored-agent-status-clock-skew.test.ts @@ -2,8 +2,8 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-types' import { AGENT_STATUS_STALE_AFTER_MS } from '../../../shared/agent-status/contracts/agent-status-freshness' -import { makePaneKey } from '../../../shared/stable-pane-id' -import { toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' +import { toWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' import { getDefaultSettings } from '../../../shared/constants' import { isExplicitAgentStatusFresh } from '../lib/pane-agent-evidence' import type { AppState } from '../store/types' diff --git a/src/renderer/src/runtime/paired-agent-row-turn-outcome-arms.test.ts b/src/renderer/src/runtime/paired-agent-row-turn-outcome-arms.test.ts index dba18acb31b..19531e16f29 100644 --- a/src/renderer/src/runtime/paired-agent-row-turn-outcome-arms.test.ts +++ b/src/renderer/src/runtime/paired-agent-row-turn-outcome-arms.test.ts @@ -3,8 +3,8 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-types' import type { AgentTurnOutcome } from '../../../shared/agent-status/lifecycle/agent-turn-outcome' import { agentVerdictDisplayMark } from '../../../shared/agent-status/lifecycle/agent-main-agent-verdict' -import { makePaneKey } from '../../../shared/stable-pane-id' -import { toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' +import { toWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' import { getDefaultSettings } from '../../../shared/constants' import { createTestStore, makeWorktree, seedStore } from '../store/slices/store-test-helpers' import { resetRendererOwnedAgentStatusPanesForTests } from '../components/terminal-pane/renderer-owned-agent-status-registry' diff --git a/src/renderer/src/runtime/paired-reconnect-sidebar-agent-count.test.ts b/src/renderer/src/runtime/paired-reconnect-sidebar-agent-count.test.ts index 7883b597a6a..4ccce1033f4 100644 --- a/src/renderer/src/runtime/paired-reconnect-sidebar-agent-count.test.ts +++ b/src/renderer/src/runtime/paired-reconnect-sidebar-agent-count.test.ts @@ -2,8 +2,8 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-types' import { AGENT_STATUS_STALE_AFTER_MS } from '../../../shared/agent-status/contracts/agent-status-freshness' -import { makePaneKey } from '../../../shared/stable-pane-id' -import { toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' +import { toWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' import { getDefaultSettings } from '../../../shared/constants' import type { AppState } from '../store/types' import { createTestStore, makeWorktree, seedStore } from '../store/slices/store-test-helpers' diff --git a/src/renderer/src/runtime/paired-terminal-tab-close-environment-removal.test.ts b/src/renderer/src/runtime/paired-terminal-tab-close-environment-removal.test.ts index f94a30efc3b..7270a043fb0 100644 --- a/src/renderer/src/runtime/paired-terminal-tab-close-environment-removal.test.ts +++ b/src/renderer/src/runtime/paired-terminal-tab-close-environment-removal.test.ts @@ -2,7 +2,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { PublicKnownRuntimeEnvironment } from '../../../shared/remote-runtime/host-catalog/runtime-environments' import { getDefaultWorkspaceSession } from '../../../shared/constants' -import type { PairedTerminalTabCloseIntent } from '../../../shared/paired-terminal-tab-close-intent' +import type { PairedTerminalTabCloseIntent } from '../../../shared/workspace-layout/paired-terminal-tab-close-intent' import { useAppStore, type AppState } from '@/store' import { resetDeferredPeerChecksForTests } from '@/store/slices/runtime-environment-peer-replacement' diff --git a/src/renderer/src/runtime/paired-terminal-tab-close-intents.ts b/src/renderer/src/runtime/paired-terminal-tab-close-intents.ts index ed121c17e01..49a0a27899a 100644 --- a/src/renderer/src/runtime/paired-terminal-tab-close-intents.ts +++ b/src/renderer/src/runtime/paired-terminal-tab-close-intents.ts @@ -3,7 +3,7 @@ import { PAIRED_TERMINAL_TAB_CLOSE_INTENT_MAX_AGE_MS, pairedTerminalTabCloseIntentKey, type PairedTerminalTabCloseIntent -} from '../../../shared/paired-terminal-tab-close-intent' +} from '../../../shared/workspace-layout/paired-terminal-tab-close-intent' import { appendEnvironmentCloseIntents, removeEnvironmentCloseIntents, diff --git a/src/renderer/src/runtime/paired-terminal-tab-close-reload.test.ts b/src/renderer/src/runtime/paired-terminal-tab-close-reload.test.ts index 14460a027e8..251729ca478 100644 --- a/src/renderer/src/runtime/paired-terminal-tab-close-reload.test.ts +++ b/src/renderer/src/runtime/paired-terminal-tab-close-reload.test.ts @@ -1,8 +1,8 @@ // Persist unheard paired closes across reload or the next host snapshot restores closed tabs forever (STA-6224). import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { getDefaultWorkspaceSession } from '../../../shared/constants' -import { parseWorkspaceSession } from '../../../shared/workspace-session-schema' -import { toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { parseWorkspaceSession } from '../../../shared/workspace-session/workspace-session-schema' +import { toWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' import { useAppStore, type AppState } from '@/store' import { createSessionWriteSubscriber, diff --git a/src/renderer/src/runtime/pending-pane-title-renames.ts b/src/renderer/src/runtime/pending-pane-title-renames.ts index 2eb5b081ce6..3a75556aee4 100644 --- a/src/renderer/src/runtime/pending-pane-title-renames.ts +++ b/src/renderer/src/runtime/pending-pane-title-renames.ts @@ -1,5 +1,5 @@ import { isRemoteRuntimePtyId } from '../../../shared/remote-runtime/remote-runtime-pty-id' -import type { TerminalLayoutSnapshot } from '../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../shared/workspace-layout/terminal-tab-types' // Hold local renames over pre-rename snapshots until host echo/new revision/expiry; unique leaf IDs key the hold. export const PENDING_PANE_TITLE_HOLD_MS = 15_000 diff --git a/src/renderer/src/runtime/remote-agent-row-last-assistant-message.test.ts b/src/renderer/src/runtime/remote-agent-row-last-assistant-message.test.ts index 4b60b78b99b..151e3ba6a3d 100644 --- a/src/renderer/src/runtime/remote-agent-row-last-assistant-message.test.ts +++ b/src/renderer/src/runtime/remote-agent-row-last-assistant-message.test.ts @@ -1,8 +1,8 @@ // Client OSC ownership once discarded mirrored lastAssistantMessage, which only host hooks know (#12906/STA-3596). OSC writes lack that field, so wholesale client precedence blanked every paired row. Drive real mirror/store/sidebar builder and assert entry.lastAssistantMessage, the field both row renderers consume. import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-types' -import { makePaneKey } from '../../../shared/stable-pane-id' -import { toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' +import { toWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' import { getDefaultSettings } from '../../../shared/constants' import type { AppState } from '../store/types' import { createTestStore, makeWorktree, seedStore } from '../store/slices/store-test-helpers' diff --git a/src/renderer/src/runtime/remote-runtime-terminal-multiplexer-types.ts b/src/renderer/src/runtime/remote-runtime-terminal-multiplexer-types.ts index 20e6ae78754..5fd56b86b23 100644 --- a/src/renderer/src/runtime/remote-runtime-terminal-multiplexer-types.ts +++ b/src/renderer/src/runtime/remote-runtime-terminal-multiplexer-types.ts @@ -1,4 +1,4 @@ -import type { TerminalAttachmentLaunchResult } from '../../../shared/terminal-attachment-launch-result' +import type { TerminalAttachmentLaunchResult } from '../../../shared/terminal/pty/lifecycle/terminal-attachment-launch-result' import type { TerminalSnapshotUnavailableReason } from '../../../shared/terminal/replay/terminal-snapshot-unavailability' import type { TerminalStreamEndVerdict } from '../../../shared/terminal/stream/terminal-stream-end-verdict' import type { TerminalInputAckKind } from '../../../shared/terminal/stream/terminal-stream-protocol' diff --git a/src/renderer/src/runtime/remote-runtime-terminal-response-controller.ts b/src/renderer/src/runtime/remote-runtime-terminal-response-controller.ts index 040de8ae9a6..e886f2c1cb4 100644 --- a/src/renderer/src/runtime/remote-runtime-terminal-response-controller.ts +++ b/src/renderer/src/runtime/remote-runtime-terminal-response-controller.ts @@ -1,4 +1,4 @@ -import { parseTerminalAttachmentLaunchResult } from '../../../shared/terminal-attachment-launch-result' +import { parseTerminalAttachmentLaunchResult } from '../../../shared/terminal/pty/lifecycle/terminal-attachment-launch-result' import type { RuntimeRpcResponse } from '../../../shared/runtime-rpc-envelope' import { TERMINAL_MULTIPLEX_STREAM_LIMIT_ERROR } from '../../../shared/terminal/stream/terminal-multiplex-flow-control' import { parseTerminalStreamEndVerdict } from '../../../shared/terminal/stream/terminal-stream-end-verdict' diff --git a/src/renderer/src/runtime/remote-terminal-layout-resolution.ts b/src/renderer/src/runtime/remote-terminal-layout-resolution.ts index 32c9ebaa14d..bf4d74e3a7e 100644 --- a/src/renderer/src/runtime/remote-terminal-layout-resolution.ts +++ b/src/renderer/src/runtime/remote-terminal-layout-resolution.ts @@ -1,4 +1,4 @@ -import type { TerminalPaneLayoutNode } from '../../../shared/terminal-tab-types' +import type { TerminalPaneLayoutNode } from '../../../shared/workspace-layout/terminal-tab-types' // All client ingestion shares host-authoritative layout resolution. Never guess directions for known leaves: resolved trees persist/push back, so guesses destroy real layout on disk. Prune known trees to surviving leaves and graft only genuinely new ones; every invented direction is reported. diff --git a/src/renderer/src/runtime/restored-editor-move-reload.test.ts b/src/renderer/src/runtime/restored-editor-move-reload.test.ts index 1b37f068e52..c394d96ce98 100644 --- a/src/renderer/src/runtime/restored-editor-move-reload.test.ts +++ b/src/renderer/src/runtime/restored-editor-move-reload.test.ts @@ -13,8 +13,8 @@ import { GIT_KEY } from '../../../shared/workspace-layout/workspace-layout-session.test-fixture' import type { WorkspaceLayoutChangeFrame } from '../../../shared/workspace-layout/workspace-layout-stream-frames' -import { ownedEditorFileId } from '../../../shared/workspace-session-pane-ownership' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import { ownedEditorFileId } from '../../../shared/workspace-session/workspace-session-pane-ownership' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { bootWindowFromPartitions } from '../app-shell/startup-window-view.test-fixture' import { createStoreSessionMockApi } from '../store/slices/store-session-test-harness' import { createTestStore } from '../store/slices/store-test-helpers' diff --git a/src/renderer/src/runtime/runtime-host-account-sign-in-client.ts b/src/renderer/src/runtime/runtime-host-account-sign-in-client.ts index 2739c1f8dbe..e8840395745 100644 --- a/src/renderer/src/runtime/runtime-host-account-sign-in-client.ts +++ b/src/renderer/src/runtime/runtime-host-account-sign-in-client.ts @@ -13,7 +13,7 @@ import { import { HOST_ACCOUNT_SIGN_IN_RUNTIME_CAPABILITY } from '../../../shared/account-runtime-capabilities' import { CODEX_LOGIN_CANCELLED_MESSAGE } from '../../../shared/codex-auth-errors' import type { RuntimeClientTarget } from '../../../shared/runtime-client-target' -import { classifyTerminalProcessInspectionFailure } from '../../../shared/terminal-process-inspection' +import { classifyTerminalProcessInspectionFailure } from '../../../shared/terminal/pty/lifecycle/terminal-process-inspection' import { assertRuntimeEnvironmentCapability, callRuntimeRpc } from './runtime-rpc-client' import { captureRuntimeEnvironmentRequestRevision } from './runtime-environment-revision' diff --git a/src/renderer/src/runtime/runtime-terminal-input-recording.ts b/src/renderer/src/runtime/runtime-terminal-input-recording.ts index 0fd6f8fcad2..3d2c7338af7 100644 --- a/src/renderer/src/runtime/runtime-terminal-input-recording.ts +++ b/src/renderer/src/runtime/runtime-terminal-input-recording.ts @@ -1,4 +1,4 @@ -import { makePaneKey, type PaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey, type PaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { useAppStore } from '../store' type TerminalLayoutsByTabId = ReturnType['terminalLayoutsByTabId'] diff --git a/src/renderer/src/runtime/runtime-terminal-inspection.ts b/src/renderer/src/runtime/runtime-terminal-inspection.ts index 9aaabd7d2f4..6e9f75d078c 100644 --- a/src/renderer/src/runtime/runtime-terminal-inspection.ts +++ b/src/renderer/src/runtime/runtime-terminal-inspection.ts @@ -12,13 +12,12 @@ import { classifyTerminalProcessInspectionFailure, clientOnlyUnverifiableInspection, isClientOnlyUnverifiableInspection, - type TerminalProcessInspection -} from '../../../shared/terminal-process-inspection' + type TerminalProcessInspection, + type TerminalProcessInspection as RuntimeTerminalProcessInspection +} from '../../../shared/terminal/pty/lifecycle/terminal-process-inspection' import type { TerminalInputKind } from '../../../shared/terminal/input/terminal-input-kind' -export type RuntimeTerminalProcessInspection = TerminalProcessInspection - const DESKTOP_RUNTIME_CLIENT = { id: 'orca-desktop', type: 'desktop' } as const function isRuntimePtyInputTooLarge(data: string): boolean | Promise { return isTerminalInputTooLargeWithDeferredMeasurement(data) diff --git a/src/renderer/src/runtime/runtime-terminal-verified-input.ts b/src/renderer/src/runtime/runtime-terminal-verified-input.ts index 6b5a8e12b84..56cdd75f2ae 100644 --- a/src/renderer/src/runtime/runtime-terminal-verified-input.ts +++ b/src/renderer/src/runtime/runtime-terminal-verified-input.ts @@ -1,8 +1,8 @@ import type { RuntimeTerminalSend } from '../../../shared/runtime-types' import type { TerminalInputKind } from '../../../shared/terminal/input/terminal-input-kind' import { isTerminalInputTooLargeWithDeferredMeasurement } from '../../../shared/terminal/input/terminal-input' -import { readTerminalSendAcknowledgment } from '../../../shared/terminal-send-acknowledgment' -import { classifyTerminalProcessInspectionFailure } from '../../../shared/terminal-process-inspection' +import { readTerminalSendAcknowledgment } from '../../../shared/terminal/pty/lifecycle/terminal-send-acknowledgment' +import { classifyTerminalProcessInspectionFailure } from '../../../shared/terminal/pty/lifecycle/terminal-process-inspection' import { callRuntimeRpc } from './runtime-rpc-client' import { getRemoteRuntimePtyOwner } from './runtime-terminal-stream' import { recordRuntimeTerminalInputForPtyId } from './runtime-terminal-input-recording' diff --git a/src/renderer/src/runtime/server-held-panes.test.tsx b/src/renderer/src/runtime/server-held-panes.test.tsx index ee9481cc0bd..dafc5dc6a8f 100644 --- a/src/renderer/src/runtime/server-held-panes.test.tsx +++ b/src/renderer/src/runtime/server-held-panes.test.tsx @@ -6,8 +6,8 @@ import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi, type Mock } from 'vitest' import type * as AgentStatusModule from '@/lib/agent-status' import type * as FrameDrawnModule from './web-session-tabs-sync/frame-drawn-server-workspaces' -import { makePaneKey } from '../../../shared/stable-pane-id' -import { toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' +import { toWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' import type { NewerDaemonReopenResult } from '../../../shared/newer-daemon-hold' import type { PaneStartStatus, diff --git a/src/renderer/src/runtime/server-held-panes.ts b/src/renderer/src/runtime/server-held-panes.ts index 656f421feba..3590bff8e90 100644 --- a/src/renderer/src/runtime/server-held-panes.ts +++ b/src/renderer/src/runtime/server-held-panes.ts @@ -1,8 +1,8 @@ // Show server frame status=held in the existing newer-build banner. Reopen asks server main; desktop starts nothing and subsequent cleared/bound frames show recovery. import type { NewerDaemonReopenResult } from '../../../shared/newer-daemon-hold' -import { isTerminalLeafId, makePaneKey } from '../../../shared/stable-pane-id' -import { toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { isTerminalLeafId, makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' +import { toWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' import type { PublishedWorkspaceLayout } from '../../../shared/workspace-layout/workspace-layout-published' import { showServerHeldPanes } from '@/components/terminal-pane/newer-daemon-hold-state' import { callRuntimeRpc } from './runtime-rpc-client' diff --git a/src/renderer/src/runtime/server-layout-apply.test.ts b/src/renderer/src/runtime/server-layout-apply.test.ts index 3b22c60ea70..6ad57582689 100644 --- a/src/renderer/src/runtime/server-layout-apply.test.ts +++ b/src/renderer/src/runtime/server-layout-apply.test.ts @@ -6,8 +6,8 @@ import type * as FrameDrawnModule from './web-session-tabs-sync/frame-drawn-serv import type { RuntimeClientTarget } from '../../../shared/runtime-client-target' import type { LayoutApplyReply } from '../../../shared/workspace-layout/workspace-layout-command-types' import type { PublishedWorkspaceLayout } from '../../../shared/workspace-layout/workspace-layout-published' -import { toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' -import '../../../shared/workspace-session-pane-ownership' +import { toWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' +import '../../../shared/workspace-session/workspace-session-pane-ownership' import { createStoreSessionMockApi } from '../store/slices/store-session-test-harness' import { _resetLayoutFramePositionForTests, diff --git a/src/renderer/src/runtime/server-layout-apply.ts b/src/renderer/src/runtime/server-layout-apply.ts index f047ea48454..560f3868c5b 100644 --- a/src/renderer/src/runtime/server-layout-apply.ts +++ b/src/renderer/src/runtime/server-layout-apply.ts @@ -1,6 +1,6 @@ // Route supported layout intents to paired main under its IDs only when frames draw the workspace and layout.intents.v1 is supported (H5c). Close/start/name RPCs retain server terminal-side effects. Editor opens preserve window-proposed IDs (H5d). -import { isWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { isWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' import type { LayoutApplyReply, diff --git a/src/renderer/src/runtime/server-layout-editor-handover.test.ts b/src/renderer/src/runtime/server-layout-editor-handover.test.ts index 09d7c78f86c..223bce75bf7 100644 --- a/src/renderer/src/runtime/server-layout-editor-handover.test.ts +++ b/src/renderer/src/runtime/server-layout-editor-handover.test.ts @@ -9,7 +9,7 @@ import type { LayoutApplyReply, LayoutCommand } from '../../../shared/workspace-layout/workspace-layout-command-types' -import { ownedEditorFileId } from '../../../shared/workspace-session-pane-ownership' +import { ownedEditorFileId } from '../../../shared/workspace-session/workspace-session-pane-ownership' import { toRuntimeExecutionHostId } from '../../../shared/execution-host' import { getDiskBaselineSignature } from '../../../shared/disk-baseline-signature' import { TEST_REPO, makeWorktree } from '../store/slices/worktrees-slice-test-fixtures' diff --git a/src/renderer/src/runtime/server-layout-frame-ids.test.ts b/src/renderer/src/runtime/server-layout-frame-ids.test.ts index df288f203d2..150c0090c0c 100644 --- a/src/renderer/src/runtime/server-layout-frame-ids.test.ts +++ b/src/renderer/src/runtime/server-layout-frame-ids.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest' import { toRemoteRuntimePtyId } from '../../../shared/remote-runtime/remote-runtime-pty-id' -import '../../../shared/terminal-surface-id' -import { ownedEditorFileId } from '../../../shared/workspace-session-pane-ownership' +import '../../../shared/workspace-layout/terminal-surface-id' +import { ownedEditorFileId } from '../../../shared/workspace-session/workspace-session-pane-ownership' import type { PublishedTab, PublishedWorkspaceLayout diff --git a/src/renderer/src/runtime/server-layout-frame-ids.ts b/src/renderer/src/runtime/server-layout-frame-ids.ts index dbebbb06709..7809000d65f 100644 --- a/src/renderer/src/runtime/server-layout-frame-ids.ts +++ b/src/renderer/src/runtime/server-layout-frame-ids.ts @@ -11,8 +11,8 @@ import { isWebTerminalSurfaceTabId, toHostSessionTabId, toWebTerminalSurfaceTabId -} from '../../../shared/terminal-surface-id' -import { ownedEditorFileId } from '../../../shared/workspace-session-pane-ownership' +} from '../../../shared/workspace-layout/terminal-surface-id' +import { ownedEditorFileId } from '../../../shared/workspace-session/workspace-session-pane-ownership' import type { PublishedEditorFile, PublishedPane, diff --git a/src/renderer/src/runtime/server-layout-frames-handover.test.ts b/src/renderer/src/runtime/server-layout-frames-handover.test.ts index 88f460b6e57..d8834ff5b64 100644 --- a/src/renderer/src/runtime/server-layout-frames-handover.test.ts +++ b/src/renderer/src/runtime/server-layout-frames-handover.test.ts @@ -5,7 +5,7 @@ import type { AppState } from '@/store/types' import { buildWorkspaceSessionPayload } from '@/lib/workspace-session' import { toRuntimeExecutionHostId } from '../../../shared/execution-host' import { toRemoteRuntimePtyId } from '../../../shared/remote-runtime/remote-runtime-pty-id' -import { toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' import { loadWorkspaceLayoutWithoutReport } from '../../../shared/workspace-layout/workspace-layout-load' import { nameBasedLoadContext } from '../../../shared/workspace-layout/workspace-layout-minted-ids' import { diff --git a/src/renderer/src/runtime/server-layout-frames-held-tabs.test.ts b/src/renderer/src/runtime/server-layout-frames-held-tabs.test.ts index c2bc975b4fc..b8b83b6018d 100644 --- a/src/renderer/src/runtime/server-layout-frames-held-tabs.test.ts +++ b/src/renderer/src/runtime/server-layout-frames-held-tabs.test.ts @@ -9,7 +9,7 @@ import type { PublishedTab, PublishedWorkspaceLayout } from '../../../shared/workspace-layout/workspace-layout-published' -import { toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' import { DESKTOP_CREATED_SERVER_TAB_HOLDS, _reloadDesktopCreatedServerTabsForTests, diff --git a/src/renderer/src/runtime/server-layout-frames.test.ts b/src/renderer/src/runtime/server-layout-frames.test.ts index 6a57f546c16..222a0651b3b 100644 --- a/src/renderer/src/runtime/server-layout-frames.test.ts +++ b/src/renderer/src/runtime/server-layout-frames.test.ts @@ -2,7 +2,7 @@ import { afterEach, beforeEach, describe, expect, it, vi, type Mock } from 'vite import type * as AgentStatusModule from '@/lib/agent-status' import type * as FrameDrawnModule from './web-session-tabs-sync/frame-drawn-server-workspaces' import type { AppState } from '@/store/types' -import { toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' import { createStoreSessionMockApi } from '../store/slices/store-session-test-harness' import { _resetLayoutFramePositionForTests, diff --git a/src/renderer/src/runtime/session-tab-rows-main-window-parity.test.ts b/src/renderer/src/runtime/session-tab-rows-main-window-parity.test.ts index c29862d424d..6f2b44bd8d3 100644 --- a/src/renderer/src/runtime/session-tab-rows-main-window-parity.test.ts +++ b/src/renderer/src/runtime/session-tab-rows-main-window-parity.test.ts @@ -12,7 +12,7 @@ import { emptySession, GIT_KEY } from '../../../shared/workspace-layout/workspace-layout-session.test-fixture' -import { ownedEditorFileId } from '../../../shared/workspace-session-pane-ownership' +import { ownedEditorFileId } from '../../../shared/workspace-session/workspace-session-pane-ownership' import type { OpenFile } from '../store/slices/editor' import { layoutEditorViewOfOpenFile } from '../store/slices/editor/tabs/open-file-layout-view' import { buildMobileSessionTabSnapshots } from './sync-runtime-graph/mobile-session-snapshots' diff --git a/src/renderer/src/runtime/structured-chat-host-permission.test.ts b/src/renderer/src/runtime/structured-chat-host-permission.test.ts index ba63102597d..61cca076a72 100644 --- a/src/renderer/src/runtime/structured-chat-host-permission.test.ts +++ b/src/renderer/src/runtime/structured-chat-host-permission.test.ts @@ -13,7 +13,7 @@ vi.mock('./runtime-rpc-client', () => ({ runtimeEnvironmentSupportsCapability: mocks.supportsCapability, callRuntimeRpc: mocks.callRuntimeRpc })) -vi.mock('@/store', () => { +vi.mock('@/store/index', () => { const state = { settings: mocks.settings } const useAppStore = (select: (s: typeof state) => unknown) => select(state) useAppStore.getState = () => state diff --git a/src/renderer/src/runtime/sync-runtime-graph-parked-leaf.test.ts b/src/renderer/src/runtime/sync-runtime-graph-parked-leaf.test.ts index 663a5800cc6..83b638440e3 100644 --- a/src/renderer/src/runtime/sync-runtime-graph-parked-leaf.test.ts +++ b/src/renderer/src/runtime/sync-runtime-graph-parked-leaf.test.ts @@ -3,7 +3,7 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import type { RuntimeSyncWindowGraph } from '../../../shared/runtime-types' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../shared/layout-owner-switch' import type { AppState } from '../store/types' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' vi.mock('@/components/terminal-pane/pty-dispatcher', async (importOriginal) => { const actual = await importOriginal>() diff --git a/src/renderer/src/runtime/sync-runtime-graph-scheduling.test.ts b/src/renderer/src/runtime/sync-runtime-graph-scheduling.test.ts index 6fe3bbf41ae..2305067632d 100644 --- a/src/renderer/src/runtime/sync-runtime-graph-scheduling.test.ts +++ b/src/renderer/src/runtime/sync-runtime-graph-scheduling.test.ts @@ -7,7 +7,7 @@ import { } from './sync-runtime-graph' import { registerRuntimeTerminalTab } from './mounted-terminal-tab-registry' import type { AppState } from '../store/types' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' function makeState(overrides: Partial = {}): AppState { return { diff --git a/src/renderer/src/runtime/sync-runtime-graph/graph-publication.ts b/src/renderer/src/runtime/sync-runtime-graph/graph-publication.ts index 090865e3bfb..0d936584a34 100644 --- a/src/renderer/src/runtime/sync-runtime-graph/graph-publication.ts +++ b/src/renderer/src/runtime/sync-runtime-graph/graph-publication.ts @@ -10,8 +10,8 @@ import type { RuntimeMobileSessionTabsSnapshot, RuntimeRendererSyncWindowGraph } from '../../../../shared/runtime-types' -import { isTerminalLeafId } from '../../../../shared/stable-pane-id' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import { isTerminalLeafId } from '../../../../shared/workspace-layout/stable-pane-id' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { applyNativeChatLaunchDraftResolved } from '../native-chat-launch-draft-runtime-resolution' import { resolveTerminalLayoutRoot } from '../remote-terminal-layout-resolution' import { buildMobileSessionTabSnapshots } from './mobile-session-snapshots' diff --git a/src/renderer/src/runtime/sync-runtime-graph/mirrored-editor-tab-persistence.test.ts b/src/renderer/src/runtime/sync-runtime-graph/mirrored-editor-tab-persistence.test.ts index 6cf1b2bae05..cab872a1d40 100644 --- a/src/renderer/src/runtime/sync-runtime-graph/mirrored-editor-tab-persistence.test.ts +++ b/src/renderer/src/runtime/sync-runtime-graph/mirrored-editor-tab-persistence.test.ts @@ -1,5 +1,5 @@ import { beforeEach, expect, it, vi } from 'vitest' -import { parseWorkspaceSessionSalvaging } from '../../../../shared/workspace-session-salvage' +import { parseWorkspaceSessionSalvaging } from '../../../../shared/workspace-session/workspace-session-salvage' import { UNPUBLISHED_WORKTREE_PUBLICATION_EPOCH } from '../../../../shared/runtime-types' import { buildEditorSessionData } from '../../lib/workspace-session' import { buildHydratedEditorSessionState } from '../../store/slices/editor/actions/hydrated-editor-session-state' diff --git a/src/renderer/src/runtime/sync-runtime-graph/mobile-session-capture.ts b/src/renderer/src/runtime/sync-runtime-graph/mobile-session-capture.ts index 531319fb4b5..edfbda56d1c 100644 --- a/src/renderer/src/runtime/sync-runtime-graph/mobile-session-capture.ts +++ b/src/renderer/src/runtime/sync-runtime-graph/mobile-session-capture.ts @@ -9,7 +9,7 @@ import { findRegisteredTerminalTab, type RegisteredTerminalTab } from '../mounted-terminal-tab-registry' -import { isTerminalLeafId } from '../../../../shared/stable-pane-id' +import { isTerminalLeafId } from '../../../../shared/workspace-layout/stable-pane-id' export function narrowRecordByKeys( source: Record | undefined, diff --git a/src/renderer/src/runtime/sync-runtime-graph/mobile-session-inputs.ts b/src/renderer/src/runtime/sync-runtime-graph/mobile-session-inputs.ts index 3164ff1e646..b5e45fa03d1 100644 --- a/src/renderer/src/runtime/sync-runtime-graph/mobile-session-inputs.ts +++ b/src/renderer/src/runtime/sync-runtime-graph/mobile-session-inputs.ts @@ -1,7 +1,7 @@ import { runtimeEnvironmentIdForWorkspaceOwner } from '@/lib/resolve-owner' import { hostSessionTabIdsByLocalTabForWorktree } from '../web-session-tabs-sync/tracking-mappings' import type { AppState } from '@/store/types' -import { parsePaneKey, makePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey, makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { nativeChatLaunchAgentForLeaf } from '../../components/native-chat/native-chat-leaf-routing' import { getIndexedWorktreesById } from '@/store/worktree-repo-index' import { diff --git a/src/renderer/src/runtime/sync-runtime-graph/mobile-session-surfaces.ts b/src/renderer/src/runtime/sync-runtime-graph/mobile-session-surfaces.ts index 1124e1dfb55..55a7aec51ab 100644 --- a/src/renderer/src/runtime/sync-runtime-graph/mobile-session-surfaces.ts +++ b/src/renderer/src/runtime/sync-runtime-graph/mobile-session-surfaces.ts @@ -1,8 +1,8 @@ import { collectLeafIdsInOrder } from '@/components/terminal-pane/layout-serialization' import type { AppState } from '@/store/types' -import { isTerminalLeafId } from '../../../../shared/stable-pane-id' -import { isWebTerminalSurfaceTabId } from '../../../../shared/terminal-surface-id' +import { isTerminalLeafId } from '../../../../shared/workspace-layout/stable-pane-id' +import { isWebTerminalSurfaceTabId } from '../../../../shared/workspace-layout/terminal-surface-id' import type { Tab } from '../../../../shared/tab-types' import { isRemoteRuntimePtyId } from '../../../../shared/remote-runtime/remote-runtime-pty-id' import { diff --git a/src/renderer/src/runtime/sync-runtime-graph/mobile-session-terminal-tabs.ts b/src/renderer/src/runtime/sync-runtime-graph/mobile-session-terminal-tabs.ts index 11f4a64775c..9d2d130ae64 100644 --- a/src/renderer/src/runtime/sync-runtime-graph/mobile-session-terminal-tabs.ts +++ b/src/renderer/src/runtime/sync-runtime-graph/mobile-session-terminal-tabs.ts @@ -1,15 +1,15 @@ import { normalizeTerminalLayoutSnapshot } from '@/components/terminal-pane/layout-serialization' -import { sanitizeTerminalLayoutPaneTitles } from '../../../../shared/terminal-pane-title-sanitization' +import { sanitizeTerminalLayoutPaneTitles } from '../../../../shared/workspace-layout/terminal-pane-title-sanitization' import type { AppState } from '@/store/types' import type { RuntimeMobileSessionSnapshotTab } from '../../../../shared/runtime-types' -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' import { isNativeChatTabWideFallbackSafe, nativeChatLaunchAgentForLeaf } from '../../components/native-chat/native-chat-leaf-routing' import type { MobileSessionWorktreeInputs } from './types' import { isClaudeManagementTitle } from '../../../../shared/agent-status/title/agent-title-core' -import { isTerminalLeafId, makePaneKey } from '../../../../shared/stable-pane-id' +import { isTerminalLeafId, makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { mobileTerminalSurfaceId, getRuntimeLeafIdsForTerminal, diff --git a/src/renderer/src/runtime/sync-runtime-graph/sync-projections.ts b/src/renderer/src/runtime/sync-runtime-graph/sync-projections.ts index 129c243e45d..b2894b012a0 100644 --- a/src/renderer/src/runtime/sync-runtime-graph/sync-projections.ts +++ b/src/renderer/src/runtime/sync-runtime-graph/sync-projections.ts @@ -1,7 +1,7 @@ import type { AppState } from '@/store/types' import { resolveTerminalTabTitle } from '../../../../shared/tab-title-resolution' import { stableHashString } from './editor-draft-hash' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { getOpenFileIndexes } from './mobile-session-inputs' import { getMobileMarkdownSourceFile, isMobilePublishableOpenFile } from './mobile-session-surfaces' import { diff --git a/src/renderer/src/runtime/sync-runtime-graph/types.ts b/src/renderer/src/runtime/sync-runtime-graph/types.ts index 7fbb6a49950..aa65027a4d7 100644 --- a/src/renderer/src/runtime/sync-runtime-graph/types.ts +++ b/src/renderer/src/runtime/sync-runtime-graph/types.ts @@ -1,7 +1,7 @@ import type { AppState } from '@/store/types' import type { RuntimeMobileTerminalTheme } from '../../../../shared/runtime-types' import type { TabGroupLayoutNode } from '../../../../shared/tab-types' -import type { TerminalPaneLayoutNode } from '../../../../shared/terminal-tab-types' +import type { TerminalPaneLayoutNode } from '../../../../shared/workspace-layout/terminal-tab-types' export type RuntimeMobileSessionSyncKey = { // Reference changes signal layout/title updates without stringifying thousands of tabs. diff --git a/src/renderer/src/runtime/web-runtime-leaf-move.ts b/src/renderer/src/runtime/web-runtime-leaf-move.ts index 34148987ff3..65ff83791a4 100644 --- a/src/renderer/src/runtime/web-runtime-leaf-move.ts +++ b/src/renderer/src/runtime/web-runtime-leaf-move.ts @@ -1,7 +1,7 @@ -import type { TerminalLeafMoveRequest } from '../../../shared/terminal-leaf-move' +import type { TerminalLeafMoveRequest } from '../../../shared/workspace-layout/terminal-leaf-move' import { SESSION_TABS_MOVE_PANE_TO_NEW_TAB_RUNTIME_CAPABILITY } from '../../../shared/session-tabs-runtime-capabilities' -import { toHostSessionTabId } from '../../../shared/terminal-surface-id' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { toHostSessionTabId } from '../../../shared/workspace-layout/terminal-surface-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { isRecoverableRemoteRuntimeConnectionError } from '../../../shared/remote-runtime/remote-runtime-client-error-classification' import { runtimeEnvironmentIdUnlessTwin } from '../lib/resolve-owner' import { useAppStore } from '../store' diff --git a/src/renderer/src/runtime/web-runtime-plain-terminal-create-params.ts b/src/renderer/src/runtime/web-runtime-plain-terminal-create-params.ts index 9050d4090e1..65fa6293d34 100644 --- a/src/renderer/src/runtime/web-runtime-plain-terminal-create-params.ts +++ b/src/renderer/src/runtime/web-runtime-plain-terminal-create-params.ts @@ -1,5 +1,5 @@ import { SESSION_TABS_CREATE_TERMINAL_SHELL_RUNTIME_CAPABILITY } from '../../../shared/session-tabs-runtime-capabilities' -import { toHostSessionTabId } from '../../../shared/terminal-surface-id' +import { toHostSessionTabId } from '../../../shared/workspace-layout/terminal-surface-id' import { runtimeEnvironmentSupportsCapability } from './runtime-rpc-client' import { toRuntimeWorktreeSelector } from './runtime-worktree-selector' import type { CreateWebRuntimeSessionTerminalArgs } from './web-runtime-session-types' diff --git a/src/renderer/src/runtime/web-runtime-session-tab-activate-close.test.ts b/src/renderer/src/runtime/web-runtime-session-tab-activate-close.test.ts index 78eb64ddf92..9f9ea516f69 100644 --- a/src/renderer/src/runtime/web-runtime-session-tab-activate-close.test.ts +++ b/src/renderer/src/runtime/web-runtime-session-tab-activate-close.test.ts @@ -19,7 +19,7 @@ import { resetWebSessionCloseIntentForTests } from './web-session-close-intent' import './web-session-tab-rpc-timeout' -import '../../../shared/terminal-surface-id' +import '../../../shared/workspace-layout/terminal-surface-id' import { ENVIRONMENT_ID, WORKTREE_ID, makeSnapshot } from './web-runtime-session-test-harness' import { stubRuntimeEnvironmentBridge } from './runtime-environment-bridge-fixture' diff --git a/src/renderer/src/runtime/web-runtime-session-tab-lifecycle.ts b/src/renderer/src/runtime/web-runtime-session-tab-lifecycle.ts index bcf4bcecb9f..3b87ff0fcfc 100644 --- a/src/renderer/src/runtime/web-runtime-session-tab-lifecycle.ts +++ b/src/renderer/src/runtime/web-runtime-session-tab-lifecycle.ts @@ -25,7 +25,7 @@ import { recordWebSessionFocusIntent } from './web-session-focus-intent' import { WEB_SESSION_TAB_RPC_TIMEOUT_MS } from './web-session-tab-rpc-timeout' -import { toHostSessionTabId } from '../../../shared/terminal-surface-id' +import { toHostSessionTabId } from '../../../shared/workspace-layout/terminal-surface-id' import { captureRuntimeEnvironmentCall, captureWebSessionIntentOwner, diff --git a/src/renderer/src/runtime/web-runtime-session-tab-move.ts b/src/renderer/src/runtime/web-runtime-session-tab-move.ts index 0c70365ab1a..87d66e03347 100644 --- a/src/renderer/src/runtime/web-runtime-session-tab-move.ts +++ b/src/renderer/src/runtime/web-runtime-session-tab-move.ts @@ -10,7 +10,10 @@ import { clearWebSessionReorderIntent, recordWebSessionReorderIntent } from './web-session-reorder-intent' -import { isWebTerminalSurfaceTabId, toHostSessionTabId } from '../../../shared/terminal-surface-id' +import { + isWebTerminalSurfaceTabId, + toHostSessionTabId +} from '../../../shared/workspace-layout/terminal-surface-id' import { captureRuntimeEnvironmentCall, captureWebSessionIntentOwner, diff --git a/src/renderer/src/runtime/web-runtime-session-terminal-pane-delegation.test.ts b/src/renderer/src/runtime/web-runtime-session-terminal-pane-delegation.test.ts index 38181bc6a67..9b76b352feb 100644 --- a/src/renderer/src/runtime/web-runtime-session-terminal-pane-delegation.test.ts +++ b/src/renderer/src/runtime/web-runtime-session-terminal-pane-delegation.test.ts @@ -5,7 +5,7 @@ import { peekWebSessionFocusIntent, resetWebSessionFocusIntentForTests } from './web-session-focus-intent' -import { toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' import { replaceRuntimeEnvironmentRevisions } from './runtime-environment-revision' import { stubRuntimeEnvironmentBridge } from './runtime-environment-bridge-fixture' diff --git a/src/renderer/src/runtime/web-runtime-split-focus.ts b/src/renderer/src/runtime/web-runtime-split-focus.ts index ad7ecc9ca59..7d96ce76c7e 100644 --- a/src/renderer/src/runtime/web-runtime-split-focus.ts +++ b/src/renderer/src/runtime/web-runtime-split-focus.ts @@ -8,7 +8,10 @@ import { recordWebSessionFocusIntent, resolveWebSessionVisibleTabId } from './web-session-focus-intent' -import { toHostSessionTabId, toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { + toHostSessionTabId, + toWebTerminalSurfaceTabId +} from '../../../shared/workspace-layout/terminal-surface-id' import type { RuntimeTerminalSplit } from '../../../shared/runtime-types' export type WebRuntimeSplitSource = { worktreeId: string; tabId: string; leafId: string } diff --git a/src/renderer/src/runtime/web-runtime-split-source-pty.ts b/src/renderer/src/runtime/web-runtime-split-source-pty.ts index 39a3bfdd1d0..30dcc9ddd84 100644 --- a/src/renderer/src/runtime/web-runtime-split-source-pty.ts +++ b/src/renderer/src/runtime/web-runtime-split-source-pty.ts @@ -1,6 +1,6 @@ import { toast } from 'sonner' import { translate } from '@/i18n/i18n' -import { isWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { isWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' import { parseRemoteRuntimePtyId } from '../../../shared/remote-runtime/remote-runtime-pty-id' import { runtimeEnvironmentIdUnlessTwin } from '../lib/resolve-owner' import { useAppStore } from '../store' diff --git a/src/renderer/src/runtime/web-runtime-terminal-actions.ts b/src/renderer/src/runtime/web-runtime-terminal-actions.ts index 03208889393..4fbb01b794c 100644 --- a/src/renderer/src/runtime/web-runtime-terminal-actions.ts +++ b/src/renderer/src/runtime/web-runtime-terminal-actions.ts @@ -2,13 +2,16 @@ import { toast } from 'sonner' import type { TerminalPaneSplitSource } from '../../../shared/feature-education-telemetry' import type { RuntimeRpcResponse } from '../../../shared/runtime-rpc-envelope' import type { RuntimeTerminalClose, RuntimeTerminalSplit } from '../../../shared/runtime-types' -import type { TerminalPaneLayoutNode } from '../../../shared/terminal-tab-types' +import type { TerminalPaneLayoutNode } from '../../../shared/workspace-layout/terminal-tab-types' import { runtimeEnvironmentIdUnlessTwin } from '../lib/resolve-owner' import { useAppStore } from '../store' import { unwrapRuntimeRpcResult } from './runtime-rpc-result' import { parseRemoteRuntimePtyId } from '../../../shared/remote-runtime/remote-runtime-pty-id' import { toRuntimeWorktreeSelector } from './runtime-worktree-selector' -import { isWebTerminalSurfaceTabId, toHostSessionTabId } from '../../../shared/terminal-surface-id' +import { + isWebTerminalSurfaceTabId, + toHostSessionTabId +} from '../../../shared/workspace-layout/terminal-surface-id' import { captureRuntimeEnvironmentCall, captureWebSessionIntentOwner, diff --git a/src/renderer/src/runtime/web-runtime-terminal-create-operation.ts b/src/renderer/src/runtime/web-runtime-terminal-create-operation.ts index 01184bb175a..443f069fe7e 100644 --- a/src/renderer/src/runtime/web-runtime-terminal-create-operation.ts +++ b/src/renderer/src/runtime/web-runtime-terminal-create-operation.ts @@ -21,7 +21,7 @@ import { recordWebSessionTerminalPlacement, webTerminalPlacementParentTabId } from './web-session-terminal-placement' -import { toHostSessionTabId } from '../../../shared/terminal-surface-id' +import { toHostSessionTabId } from '../../../shared/workspace-layout/terminal-surface-id' import { captureRuntimeEnvironmentCall, captureWebSessionIntentOwner, diff --git a/src/renderer/src/runtime/web-runtime-terminal-creation.ts b/src/renderer/src/runtime/web-runtime-terminal-creation.ts index d99300e2529..b81e8a96b85 100644 --- a/src/renderer/src/runtime/web-runtime-terminal-creation.ts +++ b/src/renderer/src/runtime/web-runtime-terminal-creation.ts @@ -5,7 +5,7 @@ import { } from '../lib/agent-launch-prompt-delivery' import { createWebRuntimeSessionTerminalResult } from './web-runtime-terminal-create-operation' import { notifyWebRuntimeTerminalCreateFailure } from './web-runtime-terminal-create-failure-notice' -import { toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' import { startStoppedWslHostForUserAct, stoppedWslHostMessage } from '../lib/wsl-host-user-start' import type { CreateWebRuntimeSessionTerminalArgs, diff --git a/src/renderer/src/runtime/web-runtime-terminal-identity.ts b/src/renderer/src/runtime/web-runtime-terminal-identity.ts index 66b8db30125..1b3ec342fe9 100644 --- a/src/renderer/src/runtime/web-runtime-terminal-identity.ts +++ b/src/renderer/src/runtime/web-runtime-terminal-identity.ts @@ -1,4 +1,4 @@ -import { parsePaneKey } from '../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import type { CreatedAgentTerminalIdentity } from './web-runtime-session-types' export function createdTerminalLeafId(terminal: CreatedAgentTerminalIdentity): string | undefined { diff --git a/src/renderer/src/runtime/web-runtime-terminal-placement-settlement.ts b/src/renderer/src/runtime/web-runtime-terminal-placement-settlement.ts index e737508de28..ecf193eff1f 100644 --- a/src/renderer/src/runtime/web-runtime-terminal-placement-settlement.ts +++ b/src/renderer/src/runtime/web-runtime-terminal-placement-settlement.ts @@ -8,7 +8,7 @@ import { isWebTerminalSurfaceTabId, toHostSessionTabId, toWebTerminalSurfaceTabId -} from '../../../shared/terminal-surface-id' +} from '../../../shared/workspace-layout/terminal-surface-id' /** Snapshots key mirrored terminals by the parent tab, so an unknown `parent::leaf` anchor resolves to its parent. */ function anchorUnifiedTabId(worktreeId: string, afterTabId: string): string { diff --git a/src/renderer/src/runtime/web-runtime-terminal-rename.ts b/src/renderer/src/runtime/web-runtime-terminal-rename.ts index ba04374175d..f1c7eae6e87 100644 --- a/src/renderer/src/runtime/web-runtime-terminal-rename.ts +++ b/src/renderer/src/runtime/web-runtime-terminal-rename.ts @@ -1,5 +1,8 @@ -import type { TerminalTab, TerminalLayoutSnapshot } from '../../../shared/terminal-tab-types' -import { isWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import type { + TerminalTab, + TerminalLayoutSnapshot +} from '../../../shared/workspace-layout/terminal-tab-types' +import { isWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' import { unwrapRuntimeRpcResult } from './runtime-rpc-result' import { parseRemoteRuntimePtyId } from '../../../shared/remote-runtime/remote-runtime-pty-id' import { isWebRuntimeSessionActive } from './web-runtime-session-environment' diff --git a/src/renderer/src/runtime/web-session-close-replay.test.ts b/src/renderer/src/runtime/web-session-close-replay.test.ts index b3350b15f03..8cbb973de3f 100644 --- a/src/renderer/src/runtime/web-session-close-replay.test.ts +++ b/src/renderer/src/runtime/web-session-close-replay.test.ts @@ -1,7 +1,7 @@ // STA-6224: a user's close the paired host never received must be sent again, not dropped. import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' -import '../../../shared/paired-terminal-tab-close-intent' +import { toWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' +import '../../../shared/workspace-layout/paired-terminal-tab-close-intent' import { holdWebSessionCloseForReplay, diff --git a/src/renderer/src/runtime/web-session-close-replay.ts b/src/renderer/src/runtime/web-session-close-replay.ts index 135b9c92e2d..d07ad80ca4b 100644 --- a/src/renderer/src/runtime/web-session-close-replay.ts +++ b/src/renderer/src/runtime/web-session-close-replay.ts @@ -5,7 +5,7 @@ import { PAIRED_TERMINAL_TAB_CLOSE_INTENT_MAX_AGE_MS, pairedTerminalTabCloseIntentKey, type PairedTerminalTabCloseIntent -} from '../../../shared/paired-terminal-tab-close-intent' +} from '../../../shared/workspace-layout/paired-terminal-tab-close-intent' import type { PairedTerminalTabCloseIntentsByEnvironment } from './paired-terminal-tab-close-intents' import { getRuntimeEnvironmentRevision, diff --git a/src/renderer/src/runtime/web-session-restored-placeholder-identity.test.ts b/src/renderer/src/runtime/web-session-restored-placeholder-identity.test.ts index 741a0a37667..9cab6919456 100644 --- a/src/renderer/src/runtime/web-session-restored-placeholder-identity.test.ts +++ b/src/renderer/src/runtime/web-session-restored-placeholder-identity.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import { applyWebSessionTabsSnapshot } from './web-session-tabs-sync/snapshot-api' import type { WebSessionTabsSyncState } from './web-session-tabs-sync/state' import { diff --git a/src/renderer/src/runtime/web-session-split-pane-retirement-fences.test.ts b/src/renderer/src/runtime/web-session-split-pane-retirement-fences.test.ts index a752bd98710..9e947096690 100644 --- a/src/renderer/src/runtime/web-session-split-pane-retirement-fences.test.ts +++ b/src/renderer/src/runtime/web-session-split-pane-retirement-fences.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-types' -import { collectLeafIds } from '../../../shared/terminal-pane-layout-tree' +import { collectLeafIds } from '../../../shared/workspace-layout/terminal-pane-layout-tree' import { planTerminalLiveLayoutRemovals, selectRetiredPaneIds, diff --git a/src/renderer/src/runtime/web-session-tabs-agent-completion-notifications.test.ts b/src/renderer/src/runtime/web-session-tabs-agent-completion-notifications.test.ts index a1c5b2ac1e5..46ac8c1b4f3 100644 --- a/src/renderer/src/runtime/web-session-tabs-agent-completion-notifications.test.ts +++ b/src/renderer/src/runtime/web-session-tabs-agent-completion-notifications.test.ts @@ -1,8 +1,8 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { AgentStatusChange } from '@/store/slices/agent-status/agent-status-contract' import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-types' -import { makePaneKey } from '../../../shared/stable-pane-id' -import { toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' +import { toWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' const mocks = vi.hoisted(() => ({ observeAgentHookCompletionForNotification: vi.fn() diff --git a/src/renderer/src/runtime/web-session-tabs-retired-epoch-census-repair.test.tsx b/src/renderer/src/runtime/web-session-tabs-retired-epoch-census-repair.test.tsx index bb172199bac..33f88ff225d 100644 --- a/src/renderer/src/runtime/web-session-tabs-retired-epoch-census-repair.test.tsx +++ b/src/renderer/src/runtime/web-session-tabs-retired-epoch-census-repair.test.tsx @@ -2,7 +2,7 @@ import { act, cleanup, renderHook } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-types' const mocks = vi.hoisted(() => ({ diff --git a/src/renderer/src/runtime/web-session-tabs-stream-end-resubscribe.test.tsx b/src/renderer/src/runtime/web-session-tabs-stream-end-resubscribe.test.tsx index b0939f1915e..37888731b4d 100644 --- a/src/renderer/src/runtime/web-session-tabs-stream-end-resubscribe.test.tsx +++ b/src/renderer/src/runtime/web-session-tabs-stream-end-resubscribe.test.tsx @@ -2,7 +2,7 @@ import { act, cleanup, renderHook } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-types' const mocks = vi.hoisted(() => ({ diff --git a/src/renderer/src/runtime/web-session-tabs-sync-agent-handoff.test.ts b/src/renderer/src/runtime/web-session-tabs-sync-agent-handoff.test.ts index a628b40a649..d14b48da346 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync-agent-handoff.test.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync-agent-handoff.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import { confirmWebAgentSessionHandoffAfterCreate, recordWebAgentSessionHandoff diff --git a/src/renderer/src/runtime/web-session-tabs-sync-agent-status.test.ts b/src/renderer/src/runtime/web-session-tabs-sync-agent-status.test.ts index 418365c0c17..c7a506a2701 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync-agent-status.test.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync-agent-status.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { buildWorktreeAgentRows } from '../components/sidebar/worktree-agent-rows' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import * as sessionOrigin from '../../../shared/agent-session/lifecycle/agent-session-start-time' import { buildMirroredAgentStatusPatch } from './web-session-tabs-sync/agent-status-patch' import { applyWebSessionTabsSnapshot } from './web-session-tabs-sync/snapshot-api' diff --git a/src/renderer/src/runtime/web-session-tabs-sync-completion-on-reveal.test.tsx b/src/renderer/src/runtime/web-session-tabs-sync-completion-on-reveal.test.tsx index 8e52b7b9bbf..9649552b76d 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync-completion-on-reveal.test.tsx +++ b/src/renderer/src/runtime/web-session-tabs-sync-completion-on-reveal.test.tsx @@ -34,7 +34,7 @@ vi.mock('./web-runtime-terminal-creation', async (importOriginal) => { }) import { useAppStore } from '@/store' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { resolveTerminalTabActivityStatus } from '../components/tab-bar/terminal-tab-activity-status' import { BG_MIRROR_TAB_ID, diff --git a/src/renderer/src/runtime/web-session-tabs-sync-focus-intent.test.ts b/src/renderer/src/runtime/web-session-tabs-sync-focus-intent.test.ts index cad744e4177..8cc229c8a9f 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync-focus-intent.test.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync-focus-intent.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import { toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' import { recordWebSessionFocusIntent } from './web-session-focus-intent' import { acceptReplayedWebSessionTabsSnapshot } from './web-session-tabs-sync/tracking-lifecycle' diff --git a/src/renderer/src/runtime/web-session-tabs-sync-host-tab-retraction-ghost-rows.test.ts b/src/renderer/src/runtime/web-session-tabs-sync-host-tab-retraction-ghost-rows.test.ts index 6992775d29c..740b91a2b14 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync-host-tab-retraction-ghost-rows.test.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync-host-tab-retraction-ghost-rows.test.ts @@ -4,8 +4,8 @@ import type { RuntimeMobileSessionTabsRemovedResult, RuntimeMobileSessionTabsResult } from '../../../shared/runtime-types' -import { makePaneKey } from '../../../shared/stable-pane-id' -import { toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' +import { toWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' import { getDefaultSettings } from '../../../shared/constants' import type { AppState } from '../store/types' import { createTestStore, makeWorktree, seedStore } from '../store/slices/store-test-helpers' diff --git a/src/renderer/src/runtime/web-session-tabs-sync-mirror-identity.test.ts b/src/renderer/src/runtime/web-session-tabs-sync-mirror-identity.test.ts index 208f8867929..1717ca0487c 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync-mirror-identity.test.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync-mirror-identity.test.ts @@ -2,7 +2,7 @@ import { beforeEach, describe, expect, it } from 'vitest' import { createStore } from 'zustand/vanilla' import 'zustand/shallow' import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-types' -import '../../../shared/terminal-surface-id' +import '../../../shared/workspace-layout/terminal-surface-id' import type { BrowserCertificateFailure } from '../../../shared/browser-workspace-types' import type { RuntimeBrowserPlacement } from '../../../shared/runtime-browser-placement' import { diff --git a/src/renderer/src/runtime/web-session-tabs-sync-remote-main-agent-verdict.test.ts b/src/renderer/src/runtime/web-session-tabs-sync-remote-main-agent-verdict.test.ts index 263299ce25c..68437266831 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync-remote-main-agent-verdict.test.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync-remote-main-agent-verdict.test.ts @@ -2,8 +2,8 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-types' import type { AgentMainAgentStatus } from '../../../shared/agent-status/lifecycle/main-agent-status' -import { makePaneKey } from '../../../shared/stable-pane-id' -import { toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' +import { toWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' import { getDefaultSettings } from '../../../shared/constants' import { createTestStore, makeWorktree, seedStore } from '../store/slices/store-test-helpers' import { resetRendererOwnedAgentStatusPanesForTests } from '../components/terminal-pane/renderer-owned-agent-status-registry' diff --git a/src/renderer/src/runtime/web-session-tabs-sync-remote-status-title-flap.test.ts b/src/renderer/src/runtime/web-session-tabs-sync-remote-status-title-flap.test.ts index b365717b121..941011c0bd3 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync-remote-status-title-flap.test.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync-remote-status-title-flap.test.ts @@ -4,8 +4,8 @@ import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-typ import { AGENT_STATUS_STALE_AFTER_MS } from '../../../shared/agent-status/contracts/agent-status-freshness' import type { AgentStatusEntry } from '../../../shared/agent-status/contracts/agent-status-types' import { isExplicitAgentStatusFresh } from '@/lib/pane-agent-evidence' -import { makePaneKey } from '../../../shared/stable-pane-id' -import { toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' +import { toWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' import { deriveGeneratedTabTitle } from '../../../shared/agent-status/presentation/agent-tab-title' import { getDefaultSettings } from '../../../shared/constants' import type { AppState } from '../store/types' diff --git a/src/renderer/src/runtime/web-session-tabs-sync-sleep-activity.test.ts b/src/renderer/src/runtime/web-session-tabs-sync-sleep-activity.test.ts index 5ad36c95cc6..37bfa939a94 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync-sleep-activity.test.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync-sleep-activity.test.ts @@ -1,5 +1,5 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' import { isInactiveWorkspace } from '../lib/worktree-activity-state' import { clearWorktreeSleepIntent, markWorktreeSleepIntent } from '../lib/worktree-sleep-intent' import { applyWebSessionTabsSnapshot } from './web-session-tabs-sync/snapshot-api' diff --git a/src/renderer/src/runtime/web-session-tabs-sync-stale-spinner.test.ts b/src/renderer/src/runtime/web-session-tabs-sync-stale-spinner.test.ts index 0fe7fe69839..6d9b35056ef 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync-stale-spinner.test.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync-stale-spinner.test.ts @@ -1,14 +1,14 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { RuntimeMobileSessionTerminalClientTab } from '../../../shared/runtime-types' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { resolveTerminalTabActivityStatus } from '../components/tab-bar/terminal-tab-activity-status' import { resetRendererOwnedAgentStatusPanesForTests } from '../components/terminal-pane/renderer-owned-agent-status-registry' import { applyWebSessionTabsSnapshot } from './web-session-tabs-sync/snapshot-api' import type { WebSessionTabsSyncState } from './web-session-tabs-sync/state' import './mounted-terminal-tab-registry' -import { toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' import { ENV, HOST_SURFACE_ID, diff --git a/src/renderer/src/runtime/web-session-tabs-sync-terminal-mirroring.test.ts b/src/renderer/src/runtime/web-session-tabs-sync-terminal-mirroring.test.ts index 10d91ba4095..134715bd8ed 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync-terminal-mirroring.test.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync-terminal-mirroring.test.ts @@ -1,7 +1,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import '../../../shared/stable-pane-id' -import { toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import '../../../shared/workspace-layout/stable-pane-id' +import { toWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import { applyWebSessionTabsSnapshot } from './web-session-tabs-sync/snapshot-api' import { finalizeHostTerminalSnapshot } from './__fixtures__/web-session-terminal-host-finalization' diff --git a/src/renderer/src/runtime/web-session-tabs-sync-tracking-teardown.test.ts b/src/renderer/src/runtime/web-session-tabs-sync-tracking-teardown.test.ts index 5f1d65acbae..fa27d860039 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync-tracking-teardown.test.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync-tracking-teardown.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-types' -import { toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' import { _getWebSessionTabsTrackingCountsForTest, diff --git a/src/renderer/src/runtime/web-session-tabs-sync-visibility-collision.test.tsx b/src/renderer/src/runtime/web-session-tabs-sync-visibility-collision.test.tsx index 550f844d883..4e6df6374ac 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync-visibility-collision.test.tsx +++ b/src/renderer/src/runtime/web-session-tabs-sync-visibility-collision.test.tsx @@ -2,8 +2,8 @@ import { act, cleanup, renderHook } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../../shared/stable-pane-id' -import { toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' +import { toWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-types' import { resetStaleDocumentVisibilityForTesting } from '@/components/terminal-pane/stale-document-visibility' import type * as WebRuntimeTerminalCreationModule from './web-runtime-terminal-creation' diff --git a/src/renderer/src/runtime/web-session-tabs-sync.test.ts b/src/renderer/src/runtime/web-session-tabs-sync.test.ts index 85110526b35..f7841931299 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync.test.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-types' -import { toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' import '../../../shared/agent-session/view/structured-agent-session-projection' import '../../../shared/constants' import { clearWebSessionCloseIntent, recordWebSessionCloseIntent } from './web-session-close-intent' diff --git a/src/renderer/src/runtime/web-session-tabs-sync/agent-status-patch.ts b/src/renderer/src/runtime/web-session-tabs-sync/agent-status-patch.ts index 63370ac735a..ad396710456 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync/agent-status-patch.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync/agent-status-patch.ts @@ -7,8 +7,8 @@ import { normalizeCompatibleAgentStatusEntryForOwner } from '../../../../shared/ import { isWebTerminalSurfaceTabId, toWebTerminalSurfaceTabId -} from '../../../../shared/terminal-surface-id' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +} from '../../../../shared/workspace-layout/terminal-surface-id' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { MirroredTerminalTab, TerminalSurface, diff --git a/src/renderer/src/runtime/web-session-tabs-sync/agent-status-primitives.ts b/src/renderer/src/runtime/web-session-tabs-sync/agent-status-primitives.ts index b5d8b9bd851..74fc2e3ea8c 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync/agent-status-primitives.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync/agent-status-primitives.ts @@ -1,12 +1,19 @@ import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' -import { parsePaneKey, makePaneKey, isTerminalLeafId } from '../../../../shared/stable-pane-id' +import { + parsePaneKey, + makePaneKey, + isTerminalLeafId +} from '../../../../shared/workspace-layout/stable-pane-id' import { isClientAuthoritativeAgentStatusPane } from '@/components/terminal-pane/renderer-owned-agent-status-registry' import { normalizeCompatibleAgentStatusEntryForOwner } from '../../../../shared/agent-status/title/agent-title-owner' import { resolvePaneAgentOwnerRecord } from '../../../../shared/agent-status/identity/pane-agent-owner' -import { toWebTerminalSurfaceTabId } from '../../../../shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../../../shared/workspace-layout/terminal-surface-id' import type { TerminalSurface, WebSessionTabsBatchContext, WebSessionTabsSyncState } from './state' -import type { RetiredTerminalTabSweepState } from '../../store/slices/retired-terminal-tab-state-sweep' -import { buildRetiredTerminalTabStateSweepPatch } from '../../store/slices/retired-terminal-tab-state-sweep' + +import { + type RetiredTerminalTabSweepState, + buildRetiredTerminalTabStateSweepPatch +} from '../../store/slices/retired-terminal-tab-state-sweep' import { isMirroredTerminalSurfaceId } from './terminal-surfaces' import { isAgentStatusFresh } from './state-equality-core' diff --git a/src/renderer/src/runtime/web-session-tabs-sync/apply-preparation-base.ts b/src/renderer/src/runtime/web-session-tabs-sync/apply-preparation-base.ts index 02f59921677..dfee8f642e2 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync/apply-preparation-base.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync/apply-preparation-base.ts @@ -21,7 +21,7 @@ import { clearWebAgentSessionHandoff } from '../web-agent-session-handoff' import { toRemoteRuntimePtyId } from '../../../../shared/remote-runtime/remote-runtime-pty-id' -import { toWebTerminalSurfaceTabId } from '../../../../shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../../../shared/workspace-layout/terminal-surface-id' import { isReadyTerminalTab, isTerminalSurfaceTab, diff --git a/src/renderer/src/runtime/web-session-tabs-sync/apply-preparation-groups.ts b/src/renderer/src/runtime/web-session-tabs-sync/apply-preparation-groups.ts index d73a113b6fe..e0f7124873e 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync/apply-preparation-groups.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync/apply-preparation-groups.ts @@ -1,6 +1,6 @@ import type { TabGroup } from '../../../../shared/tab-types' import type { prepareWebSessionTabsSnapshotUnified } from './apply-preparation-unified' -import { toWebTerminalSurfaceTabId } from '../../../../shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../../../shared/workspace-layout/terminal-surface-id' import { isWebSessionBrowserPlacementGroupReserved, peekWebSessionBrowserPlacementGroup diff --git a/src/renderer/src/runtime/web-session-tabs-sync/apply-preparation-unified.ts b/src/renderer/src/runtime/web-session-tabs-sync/apply-preparation-unified.ts index 91a60847011..0854836be51 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync/apply-preparation-unified.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync/apply-preparation-unified.ts @@ -1,7 +1,7 @@ import type { prepareWebSessionTabsSnapshotBrowser } from './apply-preparation-browser' import { buildTerminalUnifiedTab } from './tab-builders' import { isAgentSessionTab } from './terminal-surfaces' -import { toWebTerminalSurfaceTabId } from '../../../../shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../../../shared/workspace-layout/terminal-surface-id' import { resolveWebSessionSiblingVisibleTabId, resolveWebSessionVisibleTabId diff --git a/src/renderer/src/runtime/web-session-tabs-sync/apply-terminal-records.ts b/src/renderer/src/runtime/web-session-tabs-sync/apply-terminal-records.ts index a857379ca0c..dff381536ed 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync/apply-terminal-records.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync/apply-terminal-records.ts @@ -1,4 +1,4 @@ -import { terminalLayoutEqual } from '../../../../shared/terminal-layout-equality' +import { terminalLayoutEqual } from '../../../../shared/workspace-layout/terminal-layout-equality' import type { prepareWebSessionTabsSnapshotGroups } from './apply-preparation-groups' import { sameStringArray, writableWebSessionTabsRecord } from './state-equality-core' diff --git a/src/renderer/src/runtime/web-session-tabs-sync/frame-drawn-server-workspaces.test.ts b/src/renderer/src/runtime/web-session-tabs-sync/frame-drawn-server-workspaces.test.ts index ae2396f5243..b495daaaac3 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync/frame-drawn-server-workspaces.test.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync/frame-drawn-server-workspaces.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' -import '../../../../shared/terminal-surface-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' +import '../../../../shared/workspace-layout/terminal-surface-id' import type { RuntimeMobileSessionTabsResult } from '../../../../shared/runtime-types' import { ENV, diff --git a/src/renderer/src/runtime/web-session-tabs-sync/frame-drawn-workspace-status-patch.ts b/src/renderer/src/runtime/web-session-tabs-sync/frame-drawn-workspace-status-patch.ts index 435f8e622d6..66c2268bbc2 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync/frame-drawn-workspace-status-patch.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync/frame-drawn-workspace-status-patch.ts @@ -1,5 +1,5 @@ import type { RuntimeMobileSessionTabsResult } from '../../../../shared/runtime-types' -import { toWebTerminalSurfaceTabId } from '../../../../shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../../../shared/workspace-layout/terminal-surface-id' import { buildMirroredAgentStatusPatch } from './agent-status-patch' import { buildRemirroredClosedTabMarkerLiftPatch, diff --git a/src/renderer/src/runtime/web-session-tabs-sync/host-retired-terminal-rows.ts b/src/renderer/src/runtime/web-session-tabs-sync/host-retired-terminal-rows.ts index 0774df32fc2..2e4ffc9dc3c 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync/host-retired-terminal-rows.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync/host-retired-terminal-rows.ts @@ -1,5 +1,8 @@ import type { RuntimeMobileSessionTabsResult } from '../../../../shared/runtime-types' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../../shared/workspace-layout/terminal-tab-types' import { toRemoteRuntimePtyId } from '../../../../shared/remote-runtime/remote-runtime-pty-id' import { terminalLayoutLeafIds } from '../web-session-terminal-orphan-recovery-surface-index' import { isMirroredTerminalSurfaceId } from './terminal-surfaces' diff --git a/src/renderer/src/runtime/web-session-tabs-sync/layout-groups.ts b/src/renderer/src/runtime/web-session-tabs-sync/layout-groups.ts index 78b4f54d913..8c5387b707d 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync/layout-groups.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync/layout-groups.ts @@ -1,13 +1,13 @@ import type { RuntimeMobileSessionTabGroup } from '../../../../shared/runtime-types' import type { TabGroup } from '../../../../shared/tab-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { MirroredAgentTab, MirroredBrowserTab, MirroredEditorTab, TerminalSurface } from './state' -import { toWebTerminalSurfaceTabId } from '../../../../shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../../../shared/workspace-layout/terminal-surface-id' import { clearHostSessionTabIdMappings, setHostSessionTabIdMapping } from './tracking-mappings' import { isWebSessionBrowserPlacementGroupReserved } from '../web-session-browser-placement' import { resolveWebSessionReorderedOrder } from '../web-session-reorder-intent' diff --git a/src/renderer/src/runtime/web-session-tabs-sync/mirror-row-ownership.ts b/src/renderer/src/runtime/web-session-tabs-sync/mirror-row-ownership.ts index 2d2347fe99e..13e515128da 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync/mirror-row-ownership.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync/mirror-row-ownership.ts @@ -1,7 +1,7 @@ // Shared workspaces mirror multiple runtimes; each frame can retire only its own rows (#31983). import type { AppState } from '@/store/types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { Tab } from '../../../../shared/tab-types' import { parseExecutionHostId } from '../../../../shared/execution-host' import { getRemoteRuntimePtyEnvironmentId } from '../runtime-terminal-stream' diff --git a/src/renderer/src/runtime/web-session-tabs-sync/mirrored-status-tab-retractions.ts b/src/renderer/src/runtime/web-session-tabs-sync/mirrored-status-tab-retractions.ts index bc956b9fbfc..e58b5d27ecc 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync/mirrored-status-tab-retractions.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync/mirrored-status-tab-retractions.ts @@ -1,5 +1,5 @@ -import { parsePaneKey } from '../../../../shared/stable-pane-id' -import { isWebTerminalSurfaceTabId } from '../../../../shared/terminal-surface-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' +import { isWebTerminalSurfaceTabId } from '../../../../shared/workspace-layout/terminal-surface-id' import type { WebSessionTabsBatchContext, WebSessionTabsSyncState } from './state' import { batchAgentPaneKeysForTabs } from './agent-status-primitives' import { hostSessionTabIdsByLocalTabForWorktree } from './tracking-mappings' diff --git a/src/renderer/src/runtime/web-session-tabs-sync/mirrored-terminal-handle-index.ts b/src/renderer/src/runtime/web-session-tabs-sync/mirrored-terminal-handle-index.ts index 4aadf0173a3..f961c1cc82c 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync/mirrored-terminal-handle-index.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync/mirrored-terminal-handle-index.ts @@ -1,5 +1,5 @@ import type { RuntimeMobileSessionTabsResult } from '../../../../shared/runtime-types' -import { toWebTerminalSurfaceTabId } from '../../../../shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../../../shared/workspace-layout/terminal-surface-id' import { sessionTabsFreshnessKey } from './state' import { isReadyTerminalTab, isTerminalSurfaceTab } from './terminal-surfaces' import { isWebSessionTabsWorktreeRemovalFrame } from './session-tabs-inventory-absence' diff --git a/src/renderer/src/runtime/web-session-tabs-sync/retraction-pane-ownership.test.ts b/src/renderer/src/runtime/web-session-tabs-sync/retraction-pane-ownership.test.ts index 66152ca0faf..ce03dfb2c6e 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync/retraction-pane-ownership.test.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync/retraction-pane-ownership.test.ts @@ -1,6 +1,6 @@ import { beforeEach, expect, it } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' -import { toWebTerminalSurfaceTabId } from '../../../../shared/terminal-surface-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' +import { toWebTerminalSurfaceTabId } from '../../../../shared/workspace-layout/terminal-surface-id' import { makeState, LEAF_ID, diff --git a/src/renderer/src/runtime/web-session-tabs-sync/retraction-pane-ownership.ts b/src/renderer/src/runtime/web-session-tabs-sync/retraction-pane-ownership.ts index b7eb014a5a4..49962d152eb 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync/retraction-pane-ownership.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync/retraction-pane-ownership.ts @@ -1,4 +1,4 @@ -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { batchAgentPaneKeysForTabs, isMirroredAgentStatusOwnedBy } from './agent-status-primitives' import { isMirroredTerminalSurfaceId } from './terminal-surfaces' import type { WebSessionTabsBatchContext, WebSessionTabsSyncState } from './state' diff --git a/src/renderer/src/runtime/web-session-tabs-sync/runtime-pane-title-patch.ts b/src/renderer/src/runtime/web-session-tabs-sync/runtime-pane-title-patch.ts index 160f81148e7..34928b86c97 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync/runtime-pane-title-patch.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync/runtime-pane-title-patch.ts @@ -5,7 +5,7 @@ import { resolveRuntimePaneTitleLeafIdFromSparseSlots } from '../../../../shared/runtime-pane-title-leaf-id' import { FIRST_PANE_ID } from '../../../../shared/pane-key' -import { isTerminalLeafId, makePaneKey } from '../../../../shared/stable-pane-id' +import { isTerminalLeafId, makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { normalizeCompatibleAgentTitleForOwner } from '../../../../shared/agent-status/title/agent-title-owner' import { resolvePaneAgentOwnerRecord } from '../../../../shared/agent-status/identity/pane-agent-owner' import { findRegisteredTerminalTab } from '../mounted-terminal-tab-registry' diff --git a/src/renderer/src/runtime/web-session-tabs-sync/state-equality-tabs.ts b/src/renderer/src/runtime/web-session-tabs-sync/state-equality-tabs.ts index 929c1d661ce..a8f9e24375e 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync/state-equality-tabs.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync/state-equality-tabs.ts @@ -3,9 +3,12 @@ import type { BrowserPage, BrowserWorkspace } from '../../../../shared/browser-workspace-types' -import type { RuntimeBrowserPlacement } from '../../../../shared/runtime-browser-placement' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' -import { sameRuntimeBrowserPlacement } from '../../../../shared/runtime-browser-placement' + +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' +import { + type RuntimeBrowserPlacement, + sameRuntimeBrowserPlacement +} from '../../../../shared/runtime-browser-placement' import { sameStringArray } from './state-equality-core' export function terminalTabEqual(a: TerminalTab, b: TerminalTab): boolean { diff --git a/src/renderer/src/runtime/web-session-tabs-sync/state.ts b/src/renderer/src/runtime/web-session-tabs-sync/state.ts index 7a3918e1817..ab176aa4623 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync/state.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync/state.ts @@ -16,7 +16,10 @@ import type { BrowserWorkspace } from '../../../../shared/browser-workspace-types' import type { Tab } from '../../../../shared/tab-types' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../../shared/workspace-layout/terminal-tab-types' import type { OpenFile } from '../../store/slices/editor' import type { RuntimeBrowserPlacement } from '../../../../shared/runtime-browser-placement' diff --git a/src/renderer/src/runtime/web-session-tabs-sync/tab-builders.ts b/src/renderer/src/runtime/web-session-tabs-sync/tab-builders.ts index 71d5c4a868d..43f31380f49 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync/tab-builders.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync/tab-builders.ts @@ -4,7 +4,7 @@ import type { } from '../../../../shared/runtime-types' import type { BrowserWorkspace } from '../../../../shared/browser-workspace-types' import type { Tab } from '../../../../shared/tab-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { OpenFile } from '../../store/slices/editor' import { toRuntimeExecutionHostId } from '../../../../shared/execution-host' import type { ReadyEditorSurface, MirroredEditorTab } from './state' diff --git a/src/renderer/src/runtime/web-session-tabs-sync/terminal-build.ts b/src/renderer/src/runtime/web-session-tabs-sync/terminal-build.ts index 47708e3a8ea..f902c864a88 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync/terminal-build.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync/terminal-build.ts @@ -1,11 +1,14 @@ import type { RuntimeMobileSessionTabsResult } from '../../../../shared/runtime-types' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' -import { normalizeTerminalLayoutPtyOwnership } from '../../../../shared/terminal-layout-pty-ownership' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../../shared/workspace-layout/terminal-tab-types' +import { normalizeTerminalLayoutPtyOwnership } from '../../../../shared/workspace-layout/terminal-layout-pty-ownership' import { resolvePaneAgentOwnerRecord } from '../../../../shared/agent-status/identity/pane-agent-owner' import { normalizeCompatibleAgentTitleForOwner } from '../../../../shared/agent-status/title/agent-title-owner' import { getRemoteRuntimePtyEnvironmentId } from '../runtime-terminal-stream' import { toRemoteRuntimePtyId } from '../../../../shared/remote-runtime/remote-runtime-pty-id' -import { toWebTerminalSurfaceTabId } from '../../../../shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../../../shared/workspace-layout/terminal-surface-id' import type { MirroredTerminalTab, TerminalSurface, ReadyTerminalSurface } from './state' import { chooseRemoteTerminalLayout, isTerminalSurfaceTab } from './terminal-surfaces' diff --git a/src/renderer/src/runtime/web-session-tabs-sync/terminal-surfaces.ts b/src/renderer/src/runtime/web-session-tabs-sync/terminal-surfaces.ts index 5a85b08bb1c..b74169affa1 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync/terminal-surfaces.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync/terminal-surfaces.ts @@ -3,9 +3,12 @@ import type { RuntimeMobileSessionTabsResult, RuntimeMobileSessionAgentTab } from '../../../../shared/runtime-types' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../../shared/workspace-layout/terminal-tab-types' import { defaultAgentChatLabel } from '../../../../shared/agent-session/agent-session-chat-label' -import { sanitizeTerminalLayoutPaneTitlesForLabels } from '../../../../shared/terminal-pane-title-sanitization' +import { sanitizeTerminalLayoutPaneTitlesForLabels } from '../../../../shared/workspace-layout/terminal-pane-title-sanitization' import { resolveTerminalLayoutRoot } from '../remote-terminal-layout-resolution' import { retainLocalScrollbackInRemoteLayout } from '@/components/terminal-pane/remote-layout-scrollback-retention' import { getRemoteRuntimePtyEnvironmentId } from '../runtime-terminal-stream' @@ -13,7 +16,7 @@ import { HOST_TERMINAL_SURFACE_SEPARATOR, WEB_TERMINAL_SURFACE_TAB_PREFIX, toWebTerminalSurfaceTabId -} from '../../../../shared/terminal-surface-id' +} from '../../../../shared/workspace-layout/terminal-surface-id' import type { ReadyBrowserSurface, ReadyEditorSurface, diff --git a/src/renderer/src/runtime/web-session-terminal-orphan-recovery-options.ts b/src/renderer/src/runtime/web-session-terminal-orphan-recovery-options.ts new file mode 100644 index 00000000000..98726574e52 --- /dev/null +++ b/src/renderer/src/runtime/web-session-terminal-orphan-recovery-options.ts @@ -0,0 +1,10 @@ +import type { TerminalOrphanRecoveryCall } from './web-session-terminal-orphan-recovery-adoption' +import type { TerminalOrphanRecoveryState } from './web-session-terminal-orphan-recovery-surface' + +export type TerminalOrphanRecoveryOptions = { + expectedEnvironmentPairingRevision?: number + expectedRuntimeId?: string + call?: TerminalOrphanRecoveryCall + /** Reads live renderer topology so an RPC cannot apply a stale local claim. */ + getCurrentState?: () => TerminalOrphanRecoveryState +} diff --git a/src/renderer/src/runtime/web-session-terminal-orphan-recovery-pane.ts b/src/renderer/src/runtime/web-session-terminal-orphan-recovery-pane.ts index 59edd27e84d..32123172bd0 100644 --- a/src/renderer/src/runtime/web-session-terminal-orphan-recovery-pane.ts +++ b/src/renderer/src/runtime/web-session-terminal-orphan-recovery-pane.ts @@ -3,7 +3,7 @@ import type { RuntimeTerminalResolvePane } from '../../../shared/runtime-types' import type { RuntimeRpcResponse } from '../../../shared/runtime-rpc-envelope' -import { makePaneKey } from '../../../shared/stable-pane-id' +import { makePaneKey } from '../../../shared/workspace-layout/stable-pane-id' import { runInTerminalRecoveryRpcLane } from './web-session-terminal-orphan-recovery-rpc-lane' import { cacheStablePaneResolutionFailure, diff --git a/src/renderer/src/runtime/web-session-terminal-orphan-recovery-sleep.test.ts b/src/renderer/src/runtime/web-session-terminal-orphan-recovery-sleep.test.ts index 91cb7aaeedd..658b1e3e479 100644 --- a/src/renderer/src/runtime/web-session-terminal-orphan-recovery-sleep.test.ts +++ b/src/renderer/src/runtime/web-session-terminal-orphan-recovery-sleep.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-types' import type { RuntimeRpcResponse } from '../../../shared/runtime-rpc-envelope' -import { toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' import { isInactiveWorkspace } from '../lib/worktree-activity-state' import { clearWorktreeSleepIntent, markWorktreeSleepIntent } from '../lib/worktree-sleep-intent' import { listResult } from './__fixtures__/web-session-terminal-orphan-recovery-regression-fixtures' diff --git a/src/renderer/src/runtime/web-session-terminal-orphan-recovery-surface-index.ts b/src/renderer/src/runtime/web-session-terminal-orphan-recovery-surface-index.ts index 986495b4cfb..c997e47ef16 100644 --- a/src/renderer/src/runtime/web-session-terminal-orphan-recovery-surface-index.ts +++ b/src/renderer/src/runtime/web-session-terminal-orphan-recovery-surface-index.ts @@ -5,7 +5,7 @@ import type { import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode -} from '../../../shared/terminal-tab-types' +} from '../../../shared/workspace-layout/terminal-tab-types' import { resolveRootlessTerminalLayoutLeafId } from '../../../shared/workspace-layout/terminal-pane-tree' export function surfaceKey(tabId: string, leafId: string): string { diff --git a/src/renderer/src/runtime/web-session-terminal-orphan-recovery-surface.ts b/src/renderer/src/runtime/web-session-terminal-orphan-recovery-surface.ts index 5f7c75a6f52..f24186252ac 100644 --- a/src/renderer/src/runtime/web-session-terminal-orphan-recovery-surface.ts +++ b/src/renderer/src/runtime/web-session-terminal-orphan-recovery-surface.ts @@ -5,9 +5,12 @@ import type { RuntimeTerminalListResult, RuntimeTerminalOrphanAdoptionClaim } from '../../../shared/runtime-types' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import { parseRemoteRuntimePtyId } from '../../../shared/remote-runtime/remote-runtime-pty-id' -import { isWebTerminalSurfaceTabId, toHostSessionTabId } from '../../../shared/terminal-surface-id' +import { + isWebTerminalSurfaceTabId, + toHostSessionTabId +} from '../../../shared/workspace-layout/terminal-surface-id' import { hasTerminalHandleRetirementProof, isRemovedSnapshot, diff --git a/src/renderer/src/runtime/web-session-terminal-orphan-recovery.ts b/src/renderer/src/runtime/web-session-terminal-orphan-recovery.ts index 3d976e791a5..9060714fab4 100644 --- a/src/renderer/src/runtime/web-session-terminal-orphan-recovery.ts +++ b/src/renderer/src/runtime/web-session-terminal-orphan-recovery.ts @@ -1,3 +1,4 @@ +import type { TerminalOrphanRecoveryOptions } from './web-session-terminal-orphan-recovery-options' import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-types' import type { RuntimeRpcResponse } from '../../../shared/runtime-rpc-envelope' import { callRuntimeEnvironmentWithRevision } from './runtime-rpc-environment-call' @@ -45,21 +46,16 @@ import { clearTerminalRecoveryRpcLaneForTests, runInTerminalRecoveryRpcLane } from './web-session-terminal-orphan-recovery-rpc-lane' -import { isWebTerminalSurfaceTabId, toHostSessionTabId } from '../../../shared/terminal-surface-id' +import { + isWebTerminalSurfaceTabId, + toHostSessionTabId +} from '../../../shared/workspace-layout/terminal-surface-id' import { buildWebTerminalOrphanTopologyProposal } from './web-session-terminal-orphan-topology' import { clearRetainedTerminalRetirementProofsForTests, mergeRetainedTerminalRetirementProofs } from './web-session-terminal-retirement-proof-ledger' -export type TerminalOrphanRecoveryOptions = { - expectedEnvironmentPairingRevision?: number - expectedRuntimeId?: string - call?: TerminalOrphanRecoveryCall - /** Reads live renderer topology so an RPC cannot apply a stale local claim. */ - getCurrentState?: () => TerminalOrphanRecoveryState -} - function recoveryKey( environmentId: string, worktreeId: string, diff --git a/src/renderer/src/runtime/web-session-terminal-orphan-topology.ts b/src/renderer/src/runtime/web-session-terminal-orphan-topology.ts index ad259da2c65..28975956c37 100644 --- a/src/renderer/src/runtime/web-session-terminal-orphan-topology.ts +++ b/src/renderer/src/runtime/web-session-terminal-orphan-topology.ts @@ -4,8 +4,8 @@ import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode, TerminalTab -} from '../../../shared/terminal-tab-types' -import { toHostSessionTabId } from '../../../shared/terminal-surface-id' +} from '../../../shared/workspace-layout/terminal-tab-types' +import { toHostSessionTabId } from '../../../shared/workspace-layout/terminal-surface-id' export type WebTerminalOrphanTopologyState = { terminalLayoutsByTabId: Record diff --git a/src/renderer/src/runtime/web-session-terminal-recovery-snapshot-validation.ts b/src/renderer/src/runtime/web-session-terminal-recovery-snapshot-validation.ts index 897b3e9a281..5b7bc720eb7 100644 --- a/src/renderer/src/runtime/web-session-terminal-recovery-snapshot-validation.ts +++ b/src/renderer/src/runtime/web-session-terminal-recovery-snapshot-validation.ts @@ -1,7 +1,7 @@ import { z } from 'zod' import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-session-contracts' import type { TabGroupLayoutNode } from '../../../shared/tab-types' -import type { TerminalPaneLayoutNode } from '../../../shared/terminal-tab-types' +import type { TerminalPaneLayoutNode } from '../../../shared/workspace-layout/terminal-tab-types' // Wire-compat Rule 3: receive-side validation pins only recovery/mirror coordinates. Keep label enums open and additive fields at every depth untouched. const identity = z.string().regex(/\S/) diff --git a/src/renderer/src/runtime/web-session-terminal-retirement-proof-ledger.ts b/src/renderer/src/runtime/web-session-terminal-retirement-proof-ledger.ts index a04d1473006..0cb661ff483 100644 --- a/src/renderer/src/runtime/web-session-terminal-retirement-proof-ledger.ts +++ b/src/renderer/src/runtime/web-session-terminal-retirement-proof-ledger.ts @@ -2,7 +2,7 @@ import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-typ import { appendRetiredTerminalSurfaceProofs, dropRetirementProofsForLiveSurfaces -} from '../../../shared/terminal-retirement-proof-ledger' +} from '../../../shared/workspace-layout/terminal-retirement-proof-ledger' import { getRuntimeEnvironmentConnectionGeneration } from '@/store/slices/runtime-status' import { isRemovedSnapshot } from './web-session-terminal-orphan-recovery-surface-index' diff --git a/src/renderer/src/runtime/web-session-visible-tab-pick-report.test.ts b/src/renderer/src/runtime/web-session-visible-tab-pick-report.test.ts index 69e6fe3561f..a55027e4862 100644 --- a/src/renderer/src/runtime/web-session-visible-tab-pick-report.test.ts +++ b/src/renderer/src/runtime/web-session-visible-tab-pick-report.test.ts @@ -1,6 +1,6 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-types' -import { toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../../shared/workspace-layout/terminal-surface-id' const WT = 'repo::/srv/project' const ENV = 'env-1' diff --git a/src/renderer/src/runtime/web-session-visible-tab-pick-report.ts b/src/renderer/src/runtime/web-session-visible-tab-pick-report.ts index d1a9cd97f9a..889b85cb856 100644 --- a/src/renderer/src/runtime/web-session-visible-tab-pick-report.ts +++ b/src/renderer/src/runtime/web-session-visible-tab-pick-report.ts @@ -2,7 +2,10 @@ import { CLIENT_NAVIGATION_PUBLICATION_EPOCH_SUFFIX, type RuntimeMobileSessionTabsResult } from '../../../shared/runtime-types' -import { isWebTerminalSurfaceTabId, toHostSessionTabId } from '../../../shared/terminal-surface-id' +import { + isWebTerminalSurfaceTabId, + toHostSessionTabId +} from '../../../shared/workspace-layout/terminal-surface-id' import { useAppStore } from '../store' import { getRuntimeEnvironmentConnectionGeneration } from '../store/slices/runtime-status-connection-generation' import { runtimeEnvironmentIdOrLocalUnlessTwin } from '../lib/worktree-runtime-owner' diff --git a/src/renderer/src/runtime/workspace-layout-frame-apply-observer.ts b/src/renderer/src/runtime/workspace-layout-frame-apply-observer.ts index 38a5deb395f..5b3bf3d440c 100644 --- a/src/renderer/src/runtime/workspace-layout-frame-apply-observer.ts +++ b/src/renderer/src/runtime/workspace-layout-frame-apply-observer.ts @@ -3,7 +3,7 @@ import type { AppState } from '@/store/types' import type { WorkspaceLayoutCache } from '@/store/workspace-layout-cache' import type { HeldDrawnTabs } from '@/store/workspace-layout-frame-held-tabs' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' export type LayoutFrameApplyObservation = { before: AppState diff --git a/src/renderer/src/runtime/workspace-layout-frame-binding.test.ts b/src/renderer/src/runtime/workspace-layout-frame-binding.test.ts index f3cf89b9889..b0af60aedd8 100644 --- a/src/renderer/src/runtime/workspace-layout-frame-binding.test.ts +++ b/src/renderer/src/runtime/workspace-layout-frame-binding.test.ts @@ -1,6 +1,6 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type * as AgentStatusModule from '@/lib/agent-status' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { loadWorkspaceLayoutWithoutReport } from '../../../shared/workspace-layout/workspace-layout-load' import { nameBasedLoadContext } from '../../../shared/workspace-layout/workspace-layout-minted-ids' import { localDesktopSession } from '../../../shared/workspace-layout/workspace-layout-profile.test-fixture' diff --git a/src/renderer/src/runtime/workspace-layout-frame-builds.ts b/src/renderer/src/runtime/workspace-layout-frame-builds.ts index ab94245e10e..7e56a60651f 100644 --- a/src/renderer/src/runtime/workspace-layout-frame-builds.ts +++ b/src/renderer/src/runtime/workspace-layout-frame-builds.ts @@ -1,7 +1,7 @@ // Full builds read window view/facts through save/Loader; workspace builds use store records. Both run restore builders only for named workspaces, merging records via workspace-layout-frame-store-patch. import type { AppState } from '@/store/types' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import type { WorkspaceLayoutCache } from '@/store/workspace-layout-cache' import { buildLayoutFrameSlices } from '@/store/workspace-layout-frame-slices' import { diff --git a/src/renderer/src/runtime/workspace-layout-frame-held-tabs.test.ts b/src/renderer/src/runtime/workspace-layout-frame-held-tabs.test.ts index 85d1e5570f2..658760d09b7 100644 --- a/src/renderer/src/runtime/workspace-layout-frame-held-tabs.test.ts +++ b/src/renderer/src/runtime/workspace-layout-frame-held-tabs.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type * as AgentStatusModule from '@/lib/agent-status' import type { Tab } from '../../../shared/tab-types' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import type { LayoutApplyReply } from '../../../shared/workspace-layout/workspace-layout-command-types' import { loadWorkspaceLayoutWithoutReport } from '../../../shared/workspace-layout/workspace-layout-load' import { nameBasedLoadContext } from '../../../shared/workspace-layout/workspace-layout-minted-ids' @@ -11,7 +11,7 @@ import { type PublishedWorkspaceLayout } from '../../../shared/workspace-layout/workspace-layout-published' import type { WorkspaceLayoutChangeFrame } from '../../../shared/workspace-layout/workspace-layout-stream-frames' -import '../../../shared/stable-pane-id' +import '../../../shared/workspace-layout/stable-pane-id' import { GIT_KEY } from '../../../shared/workspace-layout/workspace-layout-session.test-fixture' import { bootWindowFromPartitions } from '../app-shell/startup-window-view.test-fixture' import { buildWorkspaceSessionPayload } from '../lib/workspace-session' diff --git a/src/renderer/src/runtime/workspace-layout-frame-records.test.ts b/src/renderer/src/runtime/workspace-layout-frame-records.test.ts index 3352f904290..ac9a97fd8ac 100644 --- a/src/renderer/src/runtime/workspace-layout-frame-records.test.ts +++ b/src/renderer/src/runtime/workspace-layout-frame-records.test.ts @@ -3,7 +3,7 @@ import type * as AgentStatusModule from '@/lib/agent-status' import type * as WorkspaceSessionModule from '@/lib/workspace-session' import type * as WorkspaceLayoutLoadModule from '../../../shared/workspace-layout/workspace-layout-load' import { buildWorkspaceSessionPayload } from '@/lib/workspace-session' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { loadWorkspaceLayoutWithoutReport } from '../../../shared/workspace-layout/workspace-layout-load' import { nameBasedLoadContext } from '../../../shared/workspace-layout/workspace-layout-minted-ids' import { diff --git a/src/renderer/src/runtime/workspace-layout-frame-sync.test.ts b/src/renderer/src/runtime/workspace-layout-frame-sync.test.ts index b191cdc7273..6fb65eeda1e 100644 --- a/src/renderer/src/runtime/workspace-layout-frame-sync.test.ts +++ b/src/renderer/src/runtime/workspace-layout-frame-sync.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type * as AgentStatusModule from '@/lib/agent-status' import type { ExecutionHostId } from '../../../shared/execution-host' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { LEGACY_WORKSPACE_LAYOUT_PROFILES } from '../../../shared/workspace-layout/workspace-layout-legacy-profile.test-fixture' import { localDesktopSession, diff --git a/src/renderer/src/runtime/workspace-layout-frame-sync.ts b/src/renderer/src/runtime/workspace-layout-frame-sync.ts index 732135297af..4a3903f7277 100644 --- a/src/renderer/src/runtime/workspace-layout-frame-sync.ts +++ b/src/renderer/src/runtime/workspace-layout-frame-sync.ts @@ -3,9 +3,13 @@ import { showFramePatch, withMovedTabsSelected } from '@/store/slices/tabs/moved-tab-selection' import { useAppStore } from '@/store' import type { AppState } from '@/store/types' -import type { TerminalTab } from '../../../shared/terminal-tab-types' -import { applyLayoutFrame, EMPTY_WORKSPACE_LAYOUT_CACHE } from '@/store/workspace-layout-cache' -import type { WorkspaceLayoutCache } from '@/store/workspace-layout-cache' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' +import { + applyLayoutFrame, + EMPTY_WORKSPACE_LAYOUT_CACHE, + type WorkspaceLayoutCache +} from '@/store/workspace-layout-cache' + import { terminalLayoutsPatch } from '@/store/workspace-layout-frame-store-patch' import { layoutHoldsBoundPane, diff --git a/src/renderer/src/runtime/workspace-layout-frame-tab-props.test.ts b/src/renderer/src/runtime/workspace-layout-frame-tab-props.test.ts index 5cdd7e72d54..e5fa1240252 100644 --- a/src/renderer/src/runtime/workspace-layout-frame-tab-props.test.ts +++ b/src/renderer/src/runtime/workspace-layout-frame-tab-props.test.ts @@ -2,7 +2,7 @@ import { afterEach, beforeEach, describe, expect, it, onTestFinished, vi } from 'vitest' import type * as AgentStatusModule from '@/lib/agent-status' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { applyLayoutCommand } from '../../../shared/workspace-layout/workspace-layout-commands' import type { LayoutCommand } from '../../../shared/workspace-layout/workspace-layout-command-types' import { testContext } from '../../../shared/workspace-layout/workspace-layout-command.test-fixture' diff --git a/src/renderer/src/store/always-mounted-selector-scan-cost.test.ts b/src/renderer/src/store/always-mounted-selector-scan-cost.test.ts index d73d6ed75ce..45a522b95cc 100644 --- a/src/renderer/src/store/always-mounted-selector-scan-cost.test.ts +++ b/src/renderer/src/store/always-mounted-selector-scan-cost.test.ts @@ -1,9 +1,10 @@ // Zustand reruns all selectors on every write. Count row reads to require one shared index per input snapshot instead of O(N) scans per idle/typing write. import { describe, expect, it } from 'vitest' import type { Repo } from '../../../shared/repo-types' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import type { Worktree } from '../../../shared/worktree/types' -import { WORKTREE_ID_SEPARATOR } from '../../../shared/worktree/id' +import '../../../shared/worktree/id' +import { WORKTREE_ID_SEPARATOR } from '../../../shared/terminal/pty/lifecycle/pty-session-id-format' import { getLocalPreflightContext } from '../lib/local-preflight-context' import { getProjectRuntimeSessionSummary } from '../components/settings/repository/execution/repository-runtime-session-summary' import type { AppState } from './types' diff --git a/src/renderer/src/store/editor-buffer-record-lifecycle.test.ts b/src/renderer/src/store/editor-buffer-record-lifecycle.test.ts index f245040e8f7..660dde15f95 100644 --- a/src/renderer/src/store/editor-buffer-record-lifecycle.test.ts +++ b/src/renderer/src/store/editor-buffer-record-lifecycle.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import 'zustand' -import { useAppStore } from '@/store' +import { useAppStore } from '@/store/index' import './slices/editor/buffers/editor-buffer-record' import './slices/editor/buffers/editor-buffer-views' diff --git a/src/renderer/src/store/floating-workspace-panel-selector.ts b/src/renderer/src/store/floating-workspace-panel-selector.ts index 32297a211c9..e18b3052002 100644 --- a/src/renderer/src/store/floating-workspace-panel-selector.ts +++ b/src/renderer/src/store/floating-workspace-panel-selector.ts @@ -1,5 +1,5 @@ import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../shared/constants' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import type { AppState } from './types' export type FloatingWorkspacePanelVisibilityState = Pick< diff --git a/src/renderer/src/store/repos/repo-removal-host-twin-attribution.ts b/src/renderer/src/store/repos/repo-removal-host-twin-attribution.ts index 138aab3a081..5cd6fc2a90c 100644 --- a/src/renderer/src/store/repos/repo-removal-host-twin-attribution.ts +++ b/src/renderer/src/store/repos/repo-removal-host-twin-attribution.ts @@ -4,7 +4,7 @@ import { toRuntimeExecutionHostId, type ExecutionHostId } from '../../../../shared/execution-host' -import { getPtyExecutionHost } from '../../../../shared/terminal-execution-host' +import { getPtyExecutionHost } from '../../../../shared/terminal/pty/lifecycle/terminal-execution-host' import { collectPtyIdsForTab } from '../slices/terminal-tab-retirement' import { toVisibleTabType } from '../../../../shared/tab-types' import { isExecutionHostAliasForWorktree } from '@/lib/worktree-execution-host-alias' diff --git a/src/renderer/src/store/repos/wsl-moved-local-session-rows.test.ts b/src/renderer/src/store/repos/wsl-moved-local-session-rows.test.ts index 13634139089..2f35959c9f8 100644 --- a/src/renderer/src/store/repos/wsl-moved-local-session-rows.test.ts +++ b/src/renderer/src/store/repos/wsl-moved-local-session-rows.test.ts @@ -2,8 +2,8 @@ import { describe, expect, it, vi } from 'vitest' import { getDefaultWorkspaceSession } from '../../../../shared/constants' import type { ExecutionHostId } from '../../../../shared/execution-host' import type { Tab, TabGroup } from '../../../../shared/tab-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import type { WslMovedProject } from '../../../../shared/wsl-move/wsl-moved-project' import { fetchWorkspaceSessionWithRuntimeHostOwners } from '@/lib/workspace-session-host-hydration' import { wslMovedSessionReadApi } from './wsl-moved-local-session-rows' diff --git a/src/renderer/src/store/repos/wsl-moved-local-session-rows.ts b/src/renderer/src/store/repos/wsl-moved-local-session-rows.ts index fe9ae78c4f2..44ab5649218 100644 --- a/src/renderer/src/store/repos/wsl-moved-local-session-rows.ts +++ b/src/renderer/src/store/repos/wsl-moved-local-session-rows.ts @@ -4,16 +4,16 @@ * browser tabs are retained on disk for a downgrade, but the host's partition now holds the live * copies under the same tab ids, so they must leave before the host partitions merge in. */ -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import type { ExecutionHostId } from '../../../../shared/execution-host' import { normalizeWorkspaceSessionKeyToWorkspaceId } from '../../../../shared/workspace-scope' import { filterWorkspaceRows, workspaceIdsNamedByPartition -} from '../../../../shared/workspace-session-stranded-partition-adoption' -import { filterWorkspaceSessionTabs } from '../../../../shared/workspace-session-tab-filter' +} from '../../../../shared/workspace-session/workspace-session-stranded-partition-adoption' +import { filterWorkspaceSessionTabs } from '../../../../shared/workspace-session/workspace-session-tab-filter' import type { WslMovedProject } from '../../../../shared/wsl-move/wsl-moved-project' -import { mergeWorkspaceSessionRecordField } from '../../../../shared/workspace-session-host-records' +import { mergeWorkspaceSessionRecordField } from '../../../../shared/workspace-session/workspace-session-host-records' import { isWslMovedChatTab, movedProjectForKey } from './wsl-moved-projects' // The tab bar alone: hydration picks a chat-only workspace's focus from its groups. diff --git a/src/renderer/src/store/repos/wsl-moved-projects.ts b/src/renderer/src/store/repos/wsl-moved-projects.ts index 8c0603d8f98..6f848c57288 100644 --- a/src/renderer/src/store/repos/wsl-moved-projects.ts +++ b/src/renderer/src/store/repos/wsl-moved-projects.ts @@ -9,10 +9,10 @@ import type { StateCreator } from 'zustand' import type { AppState } from '../types' import type { Tab } from '../../../../shared/tab-types' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import type { WslMovedProject } from '../../../../shared/wsl-move/wsl-moved-project' -import type { ExecutionHostId } from '../../../../shared/execution-host' -import { parseExecutionHostId } from '../../../../shared/execution-host' + +import { type ExecutionHostId, parseExecutionHostId } from '../../../../shared/execution-host' import { parseWorkspaceKey } from '../../../../shared/workspace-scope' import { getRepoIdFromWorktreeId, diff --git a/src/renderer/src/store/selectors.test.ts b/src/renderer/src/store/selectors.test.ts index 8f95b54b91d..d229c35fad1 100644 --- a/src/renderer/src/store/selectors.test.ts +++ b/src/renderer/src/store/selectors.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it } from 'vitest' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../shared/constants' import '../../../shared/execution-host' diff --git a/src/renderer/src/store/selectors.ts b/src/renderer/src/store/selectors.ts index a342a4c5ec9..ae8d9fc2ce3 100644 --- a/src/renderer/src/store/selectors.ts +++ b/src/renderer/src/store/selectors.ts @@ -1,7 +1,7 @@ import { useAppStore } from './index' import { useShallow } from 'zustand/react/shallow' import type { Repo } from '../../../shared/repo-types' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import type { Worktree } from '../../../shared/worktree/types' import type { AppState } from './types' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../shared/constants' diff --git a/src/renderer/src/store/slices/active-tab-owner-worktree.ts b/src/renderer/src/store/slices/active-tab-owner-worktree.ts index fce40aebf75..9fd76c76400 100644 --- a/src/renderer/src/store/slices/active-tab-owner-worktree.ts +++ b/src/renderer/src/store/slices/active-tab-owner-worktree.ts @@ -1,4 +1,4 @@ -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { recordRendererCrashBreadcrumb } from '../../lib/crash-breadcrumb-recorder' const reportedDuplicateTabVerdicts = new Set() diff --git a/src/renderer/src/store/slices/agent-generated-tab-title.test.ts b/src/renderer/src/store/slices/agent-generated-tab-title.test.ts index 6994dac27ca..79d851bd165 100644 --- a/src/renderer/src/store/slices/agent-generated-tab-title.test.ts +++ b/src/renderer/src/store/slices/agent-generated-tab-title.test.ts @@ -2,7 +2,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { GENERATED_TAB_TITLE_SOURCE_SCAN_LIMIT } from '../../../../shared/agent-status/presentation/agent-tab-title' import { getDefaultSettings } from '../../../../shared/constants' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../../shared/layout-owner-switch' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import '../../../../shared/tab-title-resolution' import { createTestStore, makeWorktree, seedStore } from './store-test-helpers' import { layoutApplyTestTransport } from '@/runtime/layout-apply-test-transport.test-fixture' diff --git a/src/renderer/src/store/slices/agent-pane-authority.test.ts b/src/renderer/src/store/slices/agent-pane-authority.test.ts index 6938eeeae26..a2521a996dd 100644 --- a/src/renderer/src/store/slices/agent-pane-authority.test.ts +++ b/src/renderer/src/store/slices/agent-pane-authority.test.ts @@ -1,5 +1,5 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { countAgentPaneAuthorityAliasesForTests, forgetAgentPaneAuthorityAliasesByTabIds, diff --git a/src/renderer/src/store/slices/agent-pane-authority.ts b/src/renderer/src/store/slices/agent-pane-authority.ts index 9328d33d1c6..0044637c51b 100644 --- a/src/renderer/src/store/slices/agent-pane-authority.ts +++ b/src/renderer/src/store/slices/agent-pane-authority.ts @@ -1,4 +1,4 @@ -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' type AgentPaneAuthorityAlias = { ownerPaneKey: string diff --git a/src/renderer/src/store/slices/agent-status/agent-status-capacity-eviction.ts b/src/renderer/src/store/slices/agent-status/agent-status-capacity-eviction.ts index d02b68a6233..327042bf02c 100644 --- a/src/renderer/src/store/slices/agent-status/agent-status-capacity-eviction.ts +++ b/src/renderer/src/store/slices/agent-status/agent-status-capacity-eviction.ts @@ -1,6 +1,6 @@ import type { AppState } from '../../types' import type { AgentStatusEntry } from '../../../../../shared/agent-status/contracts/agent-status-types' -import type { TerminalPaneLayoutNode } from '../../../../../shared/terminal-tab-types' +import type { TerminalPaneLayoutNode } from '../../../../../shared/workspace-layout/terminal-tab-types' import type { RetainedAgentEntry } from './agent-status-contract' import '../../../../../shared/agent-status/contracts/agent-status-types' import { AGENT_STATUS_STALE_AFTER_MS } from '../../../../../shared/agent-status/contracts/agent-status-freshness' diff --git a/src/renderer/src/store/slices/agent-status/agent-status-contract.ts b/src/renderer/src/store/slices/agent-status/agent-status-contract.ts index c18cdba0f99..cc1a993eebe 100644 --- a/src/renderer/src/store/slices/agent-status/agent-status-contract.ts +++ b/src/renderer/src/store/slices/agent-status/agent-status-contract.ts @@ -13,7 +13,7 @@ import type { ResumableTuiAgent, SleepingAgentLaunchConfig } from '../../../../../shared/agent-session/lifecycle/agent-session-resume' -import type { TerminalTab } from '../../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../../shared/workspace-layout/terminal-tab-types' export type RetainedAgentEntry = { entry: AgentStatusEntry diff --git a/src/renderer/src/store/slices/agent-status/agent-status-pane-key-tab-binding.ts b/src/renderer/src/store/slices/agent-status/agent-status-pane-key-tab-binding.ts index ee27201fc41..231823730fb 100644 --- a/src/renderer/src/store/slices/agent-status/agent-status-pane-key-tab-binding.ts +++ b/src/renderer/src/store/slices/agent-status/agent-status-pane-key-tab-binding.ts @@ -5,7 +5,7 @@ import type { AgentType, ParsedAgentStatusPayload } from '../../../../../shared/agent-status/contracts/agent-status-types' -import type { TerminalTab } from '../../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../../shared/workspace-layout/terminal-tab-types' import { tabHasProtectedTitle } from '../../../../../shared/agent-status/presentation/agent-generated-tab-title-rules' import type { DropAgentStatusByWorktreeOptions, RetainedAgentEntry } from './agent-status-contract' import type { AgentStatusTabPrefixDropState } from './agent-status-drop-reducer' diff --git a/src/renderer/src/store/slices/agent-status/agent-status-provider-session.test.ts b/src/renderer/src/store/slices/agent-status/agent-status-provider-session.test.ts index 384a1a51708..51d80a5446d 100644 --- a/src/renderer/src/store/slices/agent-status/agent-status-provider-session.test.ts +++ b/src/renderer/src/store/slices/agent-status/agent-status-provider-session.test.ts @@ -7,7 +7,7 @@ import type { AppState } from '../../types' import '../../../../../shared/sleeping-record-legacy-pane-key' import { createTestStore, seedStore } from '../store-test-helpers' import { makeTab } from '../store-session-test-harness' -import '../../../../../shared/stable-pane-id' +import '../../../../../shared/workspace-layout/stable-pane-id' const PI_COMPATIBLE_CASES = [ { agent: 'pi' as const, label: 'Pi' }, diff --git a/src/renderer/src/store/slices/agent-status/agent-status-row-order-origin.test.ts b/src/renderer/src/store/slices/agent-status/agent-status-row-order-origin.test.ts index 20c27aa7d78..416258581b4 100644 --- a/src/renderer/src/store/slices/agent-status/agent-status-row-order-origin.test.ts +++ b/src/renderer/src/store/slices/agent-status/agent-status-row-order-origin.test.ts @@ -4,7 +4,7 @@ import { wslHookRelayConnectionId } from '../../../../../shared/wsl-hook-relay-c import { createTestStore } from '../store-test-helpers' import { buildWorktreeAgentRows } from '@/components/sidebar/worktree-agent-rows' import { AGENT_STATE_HISTORY_MAX } from '../../../../../shared/agent-status/lifecycle/agent-state-history' -import { makePaneKey, parsePaneKey } from '../../../../../shared/stable-pane-id' +import { makePaneKey, parsePaneKey } from '../../../../../shared/workspace-layout/stable-pane-id' import type { AgentStatusTiming } from './agent-status-contract' import { retainedAgentEntryFromLive } from './agent-status-pane-key-tab-binding' import { applyWebSessionTabsSnapshot } from '@/runtime/web-session-tabs-sync/snapshot-api' diff --git a/src/renderer/src/store/slices/agent-status/agent-status-sleeping-records.ts b/src/renderer/src/store/slices/agent-status/agent-status-sleeping-records.ts index 13820a24f7e..8a243b5c850 100644 --- a/src/renderer/src/store/slices/agent-status/agent-status-sleeping-records.ts +++ b/src/renderer/src/store/slices/agent-status/agent-status-sleeping-records.ts @@ -6,7 +6,7 @@ import type { SleepingAgentSessionRecord } from '../../../../../shared/agent-session/lifecycle/agent-session-resume' import { resumeRecordFromStatus } from '../../../../../shared/agent-session/lifecycle/agent-resume-record-from-status' -import type { TerminalTab } from '../../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../../shared/workspace-layout/terminal-tab-types' import { findTabForAgentEntry } from './agent-status-pane-key-tab-binding' export function sleepingRecordFromEntry(args: { diff --git a/src/renderer/src/store/slices/agent-status/agent-status-verdict-copies.test.ts b/src/renderer/src/store/slices/agent-status/agent-status-verdict-copies.test.ts index 7b5e9324406..ccc9cd83690 100644 --- a/src/renderer/src/store/slices/agent-status/agent-status-verdict-copies.test.ts +++ b/src/renderer/src/store/slices/agent-status/agent-status-verdict-copies.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest' import type { AgentStatusEntry } from '../../../../../shared/agent-status/contracts/agent-status-types' -import { parseWorkspaceSession } from '../../../../../shared/workspace-session-schema' +import { parseWorkspaceSession } from '../../../../../shared/workspace-session/workspace-session-schema' import { buildPaneActivityEvents } from '@/components/activity/activity-pane-events' import { makeTab, makeWorktree } from '@/components/activity/ActivityPrototypePage-test-fixtures' import type { AppState } from '../../types' diff --git a/src/renderer/src/store/slices/agent-status/agent-status-worktree-purge-leak.test.ts b/src/renderer/src/store/slices/agent-status/agent-status-worktree-purge-leak.test.ts index 347d3056b1a..31efa8e16f6 100644 --- a/src/renderer/src/store/slices/agent-status/agent-status-worktree-purge-leak.test.ts +++ b/src/renderer/src/store/slices/agent-status/agent-status-worktree-purge-leak.test.ts @@ -35,7 +35,7 @@ globalThis.window = { api: mockApi } import { createTestStore, seedStore } from '../store-test-helpers' import { makeWorktree } from '../worktrees-slice-test-fixtures' import { makeTab } from '../store-session-test-harness' -import { makePaneKey } from '../../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../../shared/workspace-layout/stable-pane-id' import { countAgentPaneAuthorityAliasesForTests, resetAgentPaneAuthorityAliasesForTests, diff --git a/src/renderer/src/store/slices/agent-status/agent-status.test.ts b/src/renderer/src/store/slices/agent-status/agent-status.test.ts index 9eaeb3bd36f..2e0ac44afb9 100644 --- a/src/renderer/src/store/slices/agent-status/agent-status.test.ts +++ b/src/renderer/src/store/slices/agent-status/agent-status.test.ts @@ -9,7 +9,7 @@ import { makeUnifiedTab, createStoreSessionMockApi } from '../store-session-test-harness' -import type { TerminalTab } from '../../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../../shared/workspace-layout/terminal-tab-types' import type { RetainedAgentEntry } from './agent-status-contract' import { structuredAgentSessionPaneKey, diff --git a/src/renderer/src/store/slices/browser-page-conversion.test.ts b/src/renderer/src/store/slices/browser-page-conversion.test.ts index 89c59d65741..622fa4ecf0c 100644 --- a/src/renderer/src/store/slices/browser-page-conversion.test.ts +++ b/src/renderer/src/store/slices/browser-page-conversion.test.ts @@ -2,7 +2,7 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import type * as AgentStatusModule from '@/lib/agent-status' import type * as RuntimeRpcClientModule from '@/runtime/runtime-rpc-client' import '../../../../shared/constants' -import { browserPageSchema } from '../../../../shared/workspace-session-browser-schema' +import { browserPageSchema } from '../../../../shared/workspace-session/workspace-session-browser-schema' import { createTestStore, makeWorktree } from './store-test-helpers' import { drawTabsFromMain, type TabsDrawnFromMain } from './tabs-drawn-from-main.test-fixture' diff --git a/src/renderer/src/store/slices/browser-workspace-doc-location.test.ts b/src/renderer/src/store/slices/browser-workspace-doc-location.test.ts index 19d4d101a0f..2eb865d7762 100644 --- a/src/renderer/src/store/slices/browser-workspace-doc-location.test.ts +++ b/src/renderer/src/store/slices/browser-workspace-doc-location.test.ts @@ -2,7 +2,7 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import type * as AgentStatusModule from '@/lib/agent-status' import { ORCA_BROWSER_BLANK_URL } from '../../../../shared/constants' import { buildBrowserSessionData } from '@/lib/workspace-session-browser-tabs' -import { browserPageSchema } from '../../../../shared/workspace-session-browser-schema' +import { browserPageSchema } from '../../../../shared/workspace-session/workspace-session-browser-schema' import { createTestStore, makeWorktree } from './store-test-helpers' import { drawTabsFromMain, type TabsDrawnFromMain } from './tabs-drawn-from-main.test-fixture' diff --git a/src/renderer/src/store/slices/browser/browser-history-actions.ts b/src/renderer/src/store/slices/browser/browser-history-actions.ts index 9f64b172599..276e790f671 100644 --- a/src/renderer/src/store/slices/browser/browser-history-actions.ts +++ b/src/renderer/src/store/slices/browser/browser-history-actions.ts @@ -5,18 +5,19 @@ import type { BrowserSliceSet, RemovedBrowserHistory } from './browser-slice-contract' -import type { WorkspaceDocHistoryEntry } from '../../../../../shared/workspace-doc-history' + import { redactKagiSessionToken } from '../../../../../shared/browser-url' import { MAX_BROWSER_HISTORY_ENTRIES, normalizeBrowserHistoryUrl -} from '../../../../../shared/workspace-session-browser-history' +} from '../../../../../shared/workspace-session/workspace-session-browser-history' import { + type WorkspaceDocHistoryEntry, MAX_WORKSPACE_DOC_HISTORY_ENTRIES, normalizeWorkspaceDocHistoryEntries, normalizeWorkspaceDocHistoryTitle, workspaceDocHistoryEntriesEqual -} from '../../../../../shared/workspace-doc-history' +} from '../../../../../shared/workspace-session/workspace-doc-history' import { browserPageDocLocationsEqual } from '../../../../../shared/browser-page-doc-location' import { ORCA_BROWSER_BLANK_URL } from '../../../../../shared/constants' diff --git a/src/renderer/src/store/slices/browser/browser-hydration-state.ts b/src/renderer/src/store/slices/browser/browser-hydration-state.ts index f1753aa83cb..124122647ea 100644 --- a/src/renderer/src/store/slices/browser/browser-hydration-state.ts +++ b/src/renderer/src/store/slices/browser/browser-hydration-state.ts @@ -2,9 +2,9 @@ import type { BrowserPage, BrowserWorkspace } from '../../../../../shared/browse import { createBrowserUuid } from '@/lib/browser-uuid' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../../../shared/layout-owner-switch' import { ORCA_BROWSER_BLANK_URL } from '../../../../../shared/constants' -import type { WorkspaceSessionState } from '../../../../../shared/workspace-session-state-types' -import { normalizeBrowserHistoryEntries } from '../../../../../shared/workspace-session-browser-history' -import { normalizeWorkspaceDocHistoryEntries } from '../../../../../shared/workspace-doc-history' +import type { WorkspaceSessionState } from '../../../../../shared/workspace-session/workspace-session-state-types' +import { normalizeBrowserHistoryEntries } from '../../../../../shared/workspace-session/workspace-session-browser-history' +import { normalizeWorkspaceDocHistoryEntries } from '../../../../../shared/workspace-session/workspace-doc-history' import type { AppState } from '../../types' import { mirrorWorkspaceFromActivePage, normalizeUrl } from '../browser-page-records' import { diff --git a/src/renderer/src/store/slices/browser/browser-page-state-actions.ts b/src/renderer/src/store/slices/browser/browser-page-state-actions.ts index b6442f717bf..fa86e76ac2e 100644 --- a/src/renderer/src/store/slices/browser/browser-page-state-actions.ts +++ b/src/renderer/src/store/slices/browser/browser-page-state-actions.ts @@ -9,7 +9,7 @@ import { normalizeBrowserTitle, normalizeUrl } from '../browser-page-records' -import { normalizeBrowserHistoryUrl } from '../../../../../shared/workspace-session-browser-history' +import { normalizeBrowserHistoryUrl } from '../../../../../shared/workspace-session/workspace-session-browser-history' export function createBrowserPageStateActions( set: BrowserSliceSet, diff --git a/src/renderer/src/store/slices/browser/browser-slice-contract.ts b/src/renderer/src/store/slices/browser/browser-slice-contract.ts index b9d12862ed6..18ab281cb84 100644 --- a/src/renderer/src/store/slices/browser/browser-slice-contract.ts +++ b/src/renderer/src/store/slices/browser/browser-slice-contract.ts @@ -16,8 +16,8 @@ import type { BrowserViewportPresetId, BrowserWorkspace } from '../../../../../shared/browser-workspace-types' -import type { WorkspaceSessionState } from '../../../../../shared/workspace-session-state-types' -import type { WorkspaceDocHistoryEntry } from '../../../../../shared/workspace-doc-history' +import type { WorkspaceSessionState } from '../../../../../shared/workspace-session/workspace-session-state-types' +import type { WorkspaceDocHistoryEntry } from '../../../../../shared/workspace-session/workspace-doc-history' import type { BrowserPageAnnotation } from '../../../../../shared/browser-grab-types' import type { BrowserPageConversionLeg, diff --git a/src/renderer/src/store/slices/degraded-repo-hydration.test.ts b/src/renderer/src/store/slices/degraded-repo-hydration.test.ts index c0f7f0eea85..83044e795cf 100644 --- a/src/renderer/src/store/slices/degraded-repo-hydration.test.ts +++ b/src/renderer/src/store/slices/degraded-repo-hydration.test.ts @@ -1,7 +1,7 @@ import { expect, it, vi } from 'vitest' import type * as AgentStatusModule from '@/lib/agent-status' import type { BrowserTab } from '../../../../shared/browser-workspace-types' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import { getDefaultWorkspaceSession } from '../../../../shared/constants' vi.mock('sonner', () => ({ toast: { info: vi.fn(), success: vi.fn(), error: vi.fn() } })) diff --git a/src/renderer/src/store/slices/editor-hydration-scaling.test.ts b/src/renderer/src/store/slices/editor-hydration-scaling.test.ts index 2dd98a8ccf2..87d708f2738 100644 --- a/src/renderer/src/store/slices/editor-hydration-scaling.test.ts +++ b/src/renderer/src/store/slices/editor-hydration-scaling.test.ts @@ -1,6 +1,6 @@ import { expect, it, vi } from 'vitest' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../../shared/constants' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import { createTestStore } from './store-test-helpers' import { createStoreSessionMockApi } from './store-session-test-harness' diff --git a/src/renderer/src/store/slices/editor-session-duplicate-restore.test.ts b/src/renderer/src/store/slices/editor-session-duplicate-restore.test.ts index 2356af4638c..7712a65d447 100644 --- a/src/renderer/src/store/slices/editor-session-duplicate-restore.test.ts +++ b/src/renderer/src/store/slices/editor-session-duplicate-restore.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type * as AgentStatusModule from '@/lib/agent-status' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import { folderWorkspaceKey } from '../../../../shared/workspace-scope' import { buildWorkspaceSessionPayload } from '../../lib/workspace-session' import { createStoreSessionMockApi } from './store-session-test-harness' diff --git a/src/renderer/src/store/slices/editor/actions/hydrated-editor-session-state.ts b/src/renderer/src/store/slices/editor/actions/hydrated-editor-session-state.ts index 4d2958b8740..68090730b9e 100644 --- a/src/renderer/src/store/slices/editor/actions/hydrated-editor-session-state.ts +++ b/src/renderer/src/store/slices/editor/actions/hydrated-editor-session-state.ts @@ -1,6 +1,6 @@ import { detectLanguage } from '@/lib/language-detect' import type { WorkspaceVisibleTabType } from '../../../../../../shared/tab-types' -import type { WorkspaceSessionState } from '../../../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../../../shared/workspace-session/workspace-session-state-types' import type { AppState } from '../../../types' import type { OpenFile } from '../types/open-file' import { reconcileEditorBufferMembership } from '../buffers/editor-buffer-record' diff --git a/src/renderer/src/store/slices/editor/file-ids/hydrated-editor-file-ids.ts b/src/renderer/src/store/slices/editor/file-ids/hydrated-editor-file-ids.ts index 35f2933d788..314e02a53f2 100644 --- a/src/renderer/src/store/slices/editor/file-ids/hydrated-editor-file-ids.ts +++ b/src/renderer/src/store/slices/editor/file-ids/hydrated-editor-file-ids.ts @@ -1,6 +1,6 @@ import type { AppState } from '../../../types' import type { Tab, TabGroup } from '../../../../../../shared/tab-types' -import type { PersistedOpenFile } from '../../../../../../shared/workspace-session-state-types' +import type { PersistedOpenFile } from '../../../../../../shared/workspace-session/workspace-session-state-types' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../../../../shared/constants' import type { OpenFile } from '../types/open-file' import { isEditorTabContentType } from '../tabs/editor-tab-content-type' diff --git a/src/renderer/src/store/slices/editor/types/editor-git-slice.ts b/src/renderer/src/store/slices/editor/types/editor-git-slice.ts index 909f351baf4..2edf4826376 100644 --- a/src/renderer/src/store/slices/editor/types/editor-git-slice.ts +++ b/src/renderer/src/store/slices/editor/types/editor-git-slice.ts @@ -12,7 +12,7 @@ import type { GitStatusResult, GitUpstreamStatus } from '../../../../../../shared/git/status/git-status-types' -import type { WorkspaceSessionState } from '../../../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../../../shared/workspace-session/workspace-session-state-types' import type { GitPushTarget } from '../../../../../../shared/worktree/types' import type { PendingEditorFocusRequest, PendingEditorReveal } from './pending-editor-reveal' import type { FileSearchWorktreeState } from './file-search-worktree-state' diff --git a/src/renderer/src/store/slices/layout-owner-written-session-hydration.test.ts b/src/renderer/src/store/slices/layout-owner-written-session-hydration.test.ts index affc12a711b..9068b4c284e 100644 --- a/src/renderer/src/store/slices/layout-owner-written-session-hydration.test.ts +++ b/src/renderer/src/store/slices/layout-owner-written-session-hydration.test.ts @@ -8,7 +8,7 @@ import { } from '../../../../shared/__fixtures__/layout-owner-written-session-golden-paths' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../../shared/layout-owner-switch' import { collectLayoutLeafIdsInOrder } from '../../../../shared/workspace-layout/terminal-pane-tree' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import { createTestStore, makeWorktree } from './store-test-helpers' import { createStoreSessionMockApi } from './store-session-test-harness' diff --git a/src/renderer/src/store/slices/local-detected-agent-store-state.ts b/src/renderer/src/store/slices/local-detected-agent-store-state.ts index 4ecf5a8e8d5..d4215955cde 100644 --- a/src/renderer/src/store/slices/local-detected-agent-store-state.ts +++ b/src/renderer/src/store/slices/local-detected-agent-store-state.ts @@ -2,7 +2,7 @@ import type { AppState } from '../types' import type { PathSource, ShellHydrationFailureReason -} from '../../../../shared/shell-path-hydration-types' +} from '../../../../shared/shell/launch/shell-path-hydration-types' import type { TuiAgent } from '../../../../shared/agent-launch/catalog/tui-agent' /** `wakeWslDistro`: a user act (a click, a runtime choice) that may start a stopped WSL distro. */ diff --git a/src/renderer/src/store/slices/pane-foreground-agent.ts b/src/renderer/src/store/slices/pane-foreground-agent.ts index 2a955997fc1..a0e16ec7503 100644 --- a/src/renderer/src/store/slices/pane-foreground-agent.ts +++ b/src/renderer/src/store/slices/pane-foreground-agent.ts @@ -1,6 +1,6 @@ import type { StateCreator } from 'zustand' import type { AppState } from '../types' -import type { TerminalAgent } from '../../../../shared/terminal-agent' +import type { TerminalAgent } from '../../../../shared/agent-status/identity/terminal-agent' /** 'launch-record': the daemon's launch identity on reattach, which can outlive the process. */ export type PaneForegroundAgentEvidence = 'process-read' | 'launch-record' diff --git a/src/renderer/src/store/slices/repos-stale-fetch.spec.ts b/src/renderer/src/store/slices/repos-stale-fetch.spec.ts index e7cbcace385..fe8d85de947 100644 --- a/src/renderer/src/store/slices/repos-stale-fetch.spec.ts +++ b/src/renderer/src/store/slices/repos-stale-fetch.spec.ts @@ -1,7 +1,7 @@ import { describe, expect, it, vi, beforeEach } from 'vitest' import { createTestStore, makeLayout, makeTab } from './store-test-helpers' import type { Repo } from '../../../../shared/repo-types' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import { getDefaultWorkspaceSession } from '../../../../shared/constants' import { clearRuntimeCompatibilityCacheForTests } from '../../runtime/runtime-rpc-client' diff --git a/src/renderer/src/store/slices/restored-editor-owner-reparent.test.ts b/src/renderer/src/store/slices/restored-editor-owner-reparent.test.ts index 8d92e5bbc7c..ed10ded9a22 100644 --- a/src/renderer/src/store/slices/restored-editor-owner-reparent.test.ts +++ b/src/renderer/src/store/slices/restored-editor-owner-reparent.test.ts @@ -16,7 +16,7 @@ import { getEditorFileOperationContext } from '@/lib/editor-file-operation-owner' import type { AppState } from '@/store/types' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import { drawTabsFromMain, type TabsDrawnFromMain } from './tabs-drawn-from-main.test-fixture' import '../../../../shared/layout-owner-switch' diff --git a/src/renderer/src/store/slices/runtime-host-purge-session-partition-split.test.ts b/src/renderer/src/store/slices/runtime-host-purge-session-partition-split.test.ts index 2468b2f5bdf..c95e4e007cb 100644 --- a/src/renderer/src/store/slices/runtime-host-purge-session-partition-split.test.ts +++ b/src/renderer/src/store/slices/runtime-host-purge-session-partition-split.test.ts @@ -1,7 +1,7 @@ /** After removed-runtime purge, host lookup falls back to local and session writes must stop targeting the retired partition (#8881). */ import { describe, it, expect, vi } from 'vitest' import { toRuntimeExecutionHostId } from '../../../../shared/execution-host' -import type { WorkspaceSessionPatch } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionPatch } from '../../../../shared/workspace-session/workspace-session-state-types' import { patchWorkspaceSessionByHost } from '@/lib/workspace-session-host-persistence' vi.mock('sonner', () => ({ diff --git a/src/renderer/src/store/slices/server-editor-file-restart-identity.test.ts b/src/renderer/src/store/slices/server-editor-file-restart-identity.test.ts index 12ff34dd96e..3c631e02012 100644 --- a/src/renderer/src/store/slices/server-editor-file-restart-identity.test.ts +++ b/src/renderer/src/store/slices/server-editor-file-restart-identity.test.ts @@ -1,7 +1,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type * as AgentStatusModule from '@/lib/agent-status' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import { buildWorkspaceSessionPayload } from '../../lib/workspace-session' import '../../runtime/web-session-tabs-sync/mirrored-editor-file-identity' import { buildHydratedEditorSessionState } from './editor/actions/hydrated-editor-session-state' diff --git a/src/renderer/src/store/slices/store-session-terminal-reconnect.test.ts b/src/renderer/src/store/slices/store-session-terminal-reconnect.test.ts index f8ac7f55c9b..8a65565e651 100644 --- a/src/renderer/src/store/slices/store-session-terminal-reconnect.test.ts +++ b/src/renderer/src/store/slices/store-session-terminal-reconnect.test.ts @@ -1,6 +1,6 @@ import { describe, it, expect, vi, beforeEach } from 'vitest' import type * as AgentStatusModule from '@/lib/agent-status' -import { isTerminalLeafId } from '../../../../shared/stable-pane-id' +import { isTerminalLeafId } from '../../../../shared/workspace-layout/stable-pane-id' import { createTestStore, makeWorktree, makeTab, makeLayout } from './store-test-helpers' import { computeVisibleWorktreeIds } from '@/components/sidebar/visible-worktrees' import { LOCAL_EXECUTION_HOST_ID } from '../../../../shared/execution-host' diff --git a/src/renderer/src/store/slices/store-session-test-harness.ts b/src/renderer/src/store/slices/store-session-test-harness.ts index 82294872e14..783d6d9dff2 100644 --- a/src/renderer/src/store/slices/store-session-test-harness.ts +++ b/src/renderer/src/store/slices/store-session-test-harness.ts @@ -2,7 +2,10 @@ import type { admitStructuredAgentSession } from '@/lib/agent-session/structured import { vi, type Mock } from 'vitest' import type { BrowserTab } from '../../../../shared/browser-workspace-types' import type { Tab, TabGroup } from '../../../../shared/tab-types' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../../shared/workspace-layout/terminal-tab-types' import type { OpenFile } from './editor' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/store/slices/tab-group-state.ts b/src/renderer/src/store/slices/tab-group-state.ts index 3e59f29a84c..58e4367ba28 100644 --- a/src/renderer/src/store/slices/tab-group-state.ts +++ b/src/renderer/src/store/slices/tab-group-state.ts @@ -1,5 +1,5 @@ import type { Tab, TabGroup } from '../../../../shared/tab-types' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import { createBrowserUuid } from '@/lib/browser-uuid' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../../shared/layout-owner-switch' import { workspaceRootGroupId } from '../../../../shared/workspace-layout/workspace-layout-minted-ids' diff --git a/src/renderer/src/store/slices/tabs-hydration-group-validation.test.ts b/src/renderer/src/store/slices/tabs-hydration-group-validation.test.ts index 95d2d3b40d9..eadf7a1030d 100644 --- a/src/renderer/src/store/slices/tabs-hydration-group-validation.test.ts +++ b/src/renderer/src/store/slices/tabs-hydration-group-validation.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import { buildHydratedTabState } from './tabs-hydration' function makeBaseSession(): WorkspaceSessionState { diff --git a/src/renderer/src/store/slices/tabs-hydration-main-load-drop.test.ts b/src/renderer/src/store/slices/tabs-hydration-main-load-drop.test.ts index 97f77a3b7af..7c45a9c6cf0 100644 --- a/src/renderer/src/store/slices/tabs-hydration-main-load-drop.test.ts +++ b/src/renderer/src/store/slices/tabs-hydration-main-load-drop.test.ts @@ -4,7 +4,7 @@ import { describe, expect, it, vi } from 'vitest' import { getDefaultWorkspaceSession } from '../../../../shared/constants' import { LOCAL_EXECUTION_HOST_ID } from '../../../../shared/execution-host' import type { Tab, TabContentType } from '../../../../shared/tab-types' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import { loadWorkspaceLayout } from '../../../../shared/workspace-layout/workspace-layout-load' import { nameBasedLoadContext } from '../../../../shared/workspace-layout/workspace-layout-minted-ids' import { saveWorkspaceLayout } from '../../../../shared/workspace-layout/workspace-layout-save' diff --git a/src/renderer/src/store/slices/tabs-hydration.test.ts b/src/renderer/src/store/slices/tabs-hydration.test.ts index 732485029c2..6e2135faa14 100644 --- a/src/renderer/src/store/slices/tabs-hydration.test.ts +++ b/src/renderer/src/store/slices/tabs-hydration.test.ts @@ -1,5 +1,5 @@ import { describe, it, expect, vi } from 'vitest' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import { buildHydratedTabState } from './tabs-hydration' vi.stubGlobal('crypto', { randomUUID: () => `uuid-${Math.random().toString(36).slice(2, 8)}` }) diff --git a/src/renderer/src/store/slices/tabs-hydration.ts b/src/renderer/src/store/slices/tabs-hydration.ts index 59ea5ca5380..ae4faede768 100644 --- a/src/renderer/src/store/slices/tabs-hydration.ts +++ b/src/renderer/src/store/slices/tabs-hydration.ts @@ -1,7 +1,7 @@ import { structuredLaunchSlotIds } from '@/lib/agent-session/launch/structured-agent-session-launch-persistence' import type { Tab, TabGroup, TabGroupLayoutNode } from '../../../../shared/tab-types' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' -import { isValidTerminalTabId } from '../../../../shared/terminal-tab-id' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' +import { isValidTerminalTabId } from '../../../../shared/workspace-layout/terminal-tab-id' import { resolveTabGroupOwners } from '../../../../shared/workspace-layout/tab-group-owners' import { adoptGrouplessTabs, diff --git a/src/renderer/src/store/slices/tabs/hydrated-workspace-reconciliation-fixture.ts b/src/renderer/src/store/slices/tabs/hydrated-workspace-reconciliation-fixture.ts index 600f65d4930..43ff29d502d 100644 --- a/src/renderer/src/store/slices/tabs/hydrated-workspace-reconciliation-fixture.ts +++ b/src/renderer/src/store/slices/tabs/hydrated-workspace-reconciliation-fixture.ts @@ -1,6 +1,6 @@ import type { AppState } from '../../types' import type { Tab, TabGroup } from '../../../../../shared/tab-types' -import type { TerminalTab } from '../../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../../shared/workspace-layout/terminal-tab-types' import type { OpenFile } from '../editor' /** Model a measured 193-workspace/382-tab profile across no-op, drop, legacy restore, orphan and editor paths, exercising workspace and global maps. */ diff --git a/src/renderer/src/store/slices/tabs/tabs-host-mirroring.ts b/src/renderer/src/store/slices/tabs/tabs-host-mirroring.ts index 2b1e3ba1689..040c0c20175 100644 --- a/src/renderer/src/store/slices/tabs/tabs-host-mirroring.ts +++ b/src/renderer/src/store/slices/tabs/tabs-host-mirroring.ts @@ -1,5 +1,5 @@ import type { AppState } from '../../types' -import type { TerminalTab } from '../../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../../shared/workspace-layout/terminal-tab-types' import { findTabAndWorktree } from '../tab-group-state' import { runtimeEnvironmentIdOrLocalUnlessTwin } from '@/lib/worktree-runtime-owner' import { locateTerminalTab } from '../../terminals/terminal-tab-location' diff --git a/src/renderer/src/store/slices/tabs/tabs-slice-contract.ts b/src/renderer/src/store/slices/tabs/tabs-slice-contract.ts index b6ae430ac17..edbad704af0 100644 --- a/src/renderer/src/store/slices/tabs/tabs-slice-contract.ts +++ b/src/renderer/src/store/slices/tabs/tabs-slice-contract.ts @@ -6,7 +6,7 @@ import type { TabGroup, TabGroupLayoutNode } from '../../../../../shared/tab-types' -import type { WorkspaceSessionState } from '../../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../../shared/workspace-session/workspace-session-state-types' import type { WorkspaceSessionHydrationOptions } from '@/lib/workspace-session-hydration-keys' export type TabSplitDirection = 'left' | 'right' | 'up' | 'down' diff --git a/src/renderer/src/store/slices/tabs/worktree-layout-lifecycle.ts b/src/renderer/src/store/slices/tabs/worktree-layout-lifecycle.ts index 5f1af18b12e..6ef7c106df5 100644 --- a/src/renderer/src/store/slices/tabs/worktree-layout-lifecycle.ts +++ b/src/renderer/src/store/slices/tabs/worktree-layout-lifecycle.ts @@ -1,6 +1,6 @@ import type { AppState } from '../../types' import type { BrowserWorkspace } from '../../../../../shared/browser-workspace-types' -import type { TerminalTab } from '../../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../../shared/workspace-layout/terminal-tab-types' import { omitRecordKeys } from '../worktrees/teardown/record-key-omission' import { getTerminalActivationSpawnSuppression } from '../terminal-activation-spawn-suppression' import { collapseGroupLayout } from '../../../../../shared/workspace-layout/tab-group-layout-tree' diff --git a/src/renderer/src/store/slices/terminal-activation-spawn-suppression.ts b/src/renderer/src/store/slices/terminal-activation-spawn-suppression.ts index 500b2f4cf35..1e892bbcf9a 100644 --- a/src/renderer/src/store/slices/terminal-activation-spawn-suppression.ts +++ b/src/renderer/src/store/slices/terminal-activation-spawn-suppression.ts @@ -1,7 +1,7 @@ import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode -} from '../../../../shared/terminal-tab-types' +} from '../../../../shared/workspace-layout/terminal-tab-types' function countTerminalLayoutLeaves(node: TerminalPaneLayoutNode | null | undefined): number { if (!node) { diff --git a/src/renderer/src/store/slices/terminal-helpers.ts b/src/renderer/src/store/slices/terminal-helpers.ts index 7a0de13fe1d..a25f81954c9 100644 --- a/src/renderer/src/store/slices/terminal-helpers.ts +++ b/src/renderer/src/store/slices/terminal-helpers.ts @@ -1,4 +1,7 @@ -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../../shared/workspace-layout/terminal-tab-types' import { classifyTitleActivity } from '@/lib/pane-agent-evidence' export function singlePaneLayoutSnapshot( diff --git a/src/renderer/src/store/slices/terminal-layout-pty-ownership.test.ts b/src/renderer/src/store/slices/terminal-layout-pty-ownership.test.ts index b9c32c0c67d..8c0c0f751b7 100644 --- a/src/renderer/src/store/slices/terminal-layout-pty-ownership.test.ts +++ b/src/renderer/src/store/slices/terminal-layout-pty-ownership.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import '../../../../shared/constants' import { resetAgentPaneAuthorityAliasesForTests, diff --git a/src/renderer/src/store/slices/terminal-pane-detach-agent-retention.test.ts b/src/renderer/src/store/slices/terminal-pane-detach-agent-retention.test.ts index 88900a56936..f16a6c561f3 100644 --- a/src/renderer/src/store/slices/terminal-pane-detach-agent-retention.test.ts +++ b/src/renderer/src/store/slices/terminal-pane-detach-agent-retention.test.ts @@ -1,5 +1,5 @@ import { afterEach, beforeEach, describe, expect, it } from 'vitest' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { collectRetainedAgentsOnDisappear } from '@/components/dashboard/useRetainedAgents' import { resetAgentPaneAuthorityAliasesForTests, @@ -7,7 +7,7 @@ import { } from './agent-pane-authority' import { createTestStore, makeTab, makeWorktree, seedStore } from './store-test-helpers' import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { DashboardAgentRow } from '@/components/dashboard/useDashboardData' const WORKTREE_ID = 'repo::/repo/worktree' diff --git a/src/renderer/src/store/slices/terminal-pty-identity-replacement.test.ts b/src/renderer/src/store/slices/terminal-pty-identity-replacement.test.ts index 38f32a70141..cdf0960df6c 100644 --- a/src/renderer/src/store/slices/terminal-pty-identity-replacement.test.ts +++ b/src/renderer/src/store/slices/terminal-pty-identity-replacement.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import { createTestStore, makeTab, seedStore } from './store-test-helpers' -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' { describe('terminal PTY identity replacement', () => { diff --git a/src/renderer/src/store/slices/terminal-session-row-hydration.ts b/src/renderer/src/store/slices/terminal-session-row-hydration.ts index 34183a4cf31..43518174741 100644 --- a/src/renderer/src/store/slices/terminal-session-row-hydration.ts +++ b/src/renderer/src/store/slices/terminal-session-row-hydration.ts @@ -1,7 +1,10 @@ -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import type { AiVaultSessionTitle } from '../../../../shared/ai-vault/contracts/ai-vault-session-title' -import { isValidTerminalTabId } from '../../../../shared/terminal-tab-id' +import { isValidTerminalTabId } from '../../../../shared/workspace-layout/terminal-tab-id' import { readCanonicalPtyOwners, resolveCanonicalPtyClaim, diff --git a/src/renderer/src/store/slices/terminal-tab-title-batch.test.ts b/src/renderer/src/store/slices/terminal-tab-title-batch.test.ts index 1bd538b2e52..a7e99e6f714 100644 --- a/src/renderer/src/store/slices/terminal-tab-title-batch.test.ts +++ b/src/renderer/src/store/slices/terminal-tab-title-batch.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from 'vitest' import { getDefaultSettings } from '../../../../shared/constants' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../../shared/layout-owner-switch' import { layoutApplyTestDouble } from '@/runtime/layout-apply-test-double' diff --git a/src/renderer/src/store/slices/terminal-tab-title-batch.ts b/src/renderer/src/store/slices/terminal-tab-title-batch.ts index be4663a85e6..5848c51b4bc 100644 --- a/src/renderer/src/store/slices/terminal-tab-title-batch.ts +++ b/src/renderer/src/store/slices/terminal-tab-title-batch.ts @@ -1,9 +1,12 @@ import { deriveGeneratedTabTitle } from '../../../../shared/agent-status/presentation/agent-tab-title' import { tabHasProtectedTitle } from '../../../../shared/agent-status/presentation/agent-generated-tab-title-rules' import { isDecorativeAgentTitleFrameChange } from '../../../../shared/agent-status/title/agent-decorative-title-signature' -import { parseLegacyNumericPaneKey, parsePaneKey } from '../../../../shared/stable-pane-id' +import { + parseLegacyNumericPaneKey, + parsePaneKey +} from '../../../../shared/workspace-layout/stable-pane-id' import type { Tab } from '../../../../shared/tab-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { AppState } from '../types' import { adoptTerminalTabOwnerMetadataOnlyBuckets, diff --git a/src/renderer/src/store/slices/terminals-hydration-canonical-pty-overlap.test.ts b/src/renderer/src/store/slices/terminals-hydration-canonical-pty-overlap.test.ts index 817bcd708fa..77d695c26d1 100644 --- a/src/renderer/src/store/slices/terminals-hydration-canonical-pty-overlap.test.ts +++ b/src/renderer/src/store/slices/terminals-hydration-canonical-pty-overlap.test.ts @@ -4,8 +4,8 @@ import { describe, expect, it, vi } from 'vitest' import { getOrphanTerminalIds } from './terminal-orphan-helpers' import type { Tab } from '../../../../shared/tab-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import { getDefaultWorkspaceSession } from '../../../../shared/constants' import '@/lib/workspace-session' import { createTestStore, makeLayout, makeTab, makeWorktree, seedStore } from './store-test-helpers' diff --git a/src/renderer/src/store/slices/terminals-hydration-canonical-rows.test.ts b/src/renderer/src/store/slices/terminals-hydration-canonical-rows.test.ts index a5167f59bbe..4172a0e9021 100644 --- a/src/renderer/src/store/slices/terminals-hydration-canonical-rows.test.ts +++ b/src/renderer/src/store/slices/terminals-hydration-canonical-rows.test.ts @@ -1,7 +1,7 @@ import './terminal-hydration-store-test-bootstrap' import { describe, expect, it, vi } from 'vitest' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import { getDefaultWorkspaceSession } from '../../../../shared/constants' import { buildWorkspaceSessionPayload } from '@/lib/workspace-session' import { createTestStore, makeLayout, makeTab, makeWorktree, seedStore } from './store-test-helpers' diff --git a/src/renderer/src/store/slices/terminals-hydration.test.ts b/src/renderer/src/store/slices/terminals-hydration.test.ts index 53af4161d69..423642d728e 100644 --- a/src/renderer/src/store/slices/terminals-hydration.test.ts +++ b/src/renderer/src/store/slices/terminals-hydration.test.ts @@ -90,7 +90,7 @@ const mockApi = { // @ts-expect-error -- mocked browser preload API globalThis.window = { api: mockApi } -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import '../../../../shared/constants' import '../../../../shared/workspace-scope' import { createTestStore, makeLayout, makeTab, makeWorktree, seedStore } from './store-test-helpers' diff --git a/src/renderer/src/store/slices/ui-agent-send-target.test.ts b/src/renderer/src/store/slices/ui-agent-send-target.test.ts index a9b227e01d7..6bbeb79732c 100644 --- a/src/renderer/src/store/slices/ui-agent-send-target.test.ts +++ b/src/renderer/src/store/slices/ui-agent-send-target.test.ts @@ -1,8 +1,8 @@ import type { StoreApi } from 'zustand/vanilla' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { AgentStatusEntry } from '../../../../shared/agent-status/contracts/agent-status-types' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import '../../../../shared/agent-session/view/structured-agent-session-projection' import { buildAgentNotificationId } from '../../../../shared/agent-notification-id' import type { AppState } from '../types' diff --git a/src/renderer/src/store/slices/ui/ui-slice-agent-notification-acknowledgement.ts b/src/renderer/src/store/slices/ui/ui-slice-agent-notification-acknowledgement.ts index d99444baa73..a1b63b573ef 100644 --- a/src/renderer/src/store/slices/ui/ui-slice-agent-notification-acknowledgement.ts +++ b/src/renderer/src/store/slices/ui/ui-slice-agent-notification-acknowledgement.ts @@ -1,6 +1,6 @@ import type { AppState } from '../../types' import { buildAgentNotificationId } from '../../../../../shared/agent-notification-id' -import { parsePaneKey } from '../../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../../shared/workspace-layout/stable-pane-id' import { resolveTerminalNotificationOwner } from '@/attention/notification-subject-owner' import { notificationExecutionHostForOwner } from '../../../../../shared/notification-source' import { notificationDeliveryId } from '../../../../../shared/notification-delivery-id' diff --git a/src/renderer/src/store/slices/workspace-attention/attention-removal-follow-up.ts b/src/renderer/src/store/slices/workspace-attention/attention-removal-follow-up.ts index 59459409b34..c992832adf8 100644 --- a/src/renderer/src/store/slices/workspace-attention/attention-removal-follow-up.ts +++ b/src/renderer/src/store/slices/workspace-attention/attention-removal-follow-up.ts @@ -1,6 +1,9 @@ -import { isTerminalLeafId, makePaneKey } from '../../../../../shared/stable-pane-id' +import { + isTerminalLeafId, + makePaneKey +} from '../../../../../shared/workspace-layout/stable-pane-id' import { structuredAgentSessionPaneKey } from '../../../../../shared/agent-session/view/structured-agent-session-projection' -import { collectLeafIds } from '../../../../../shared/terminal-pane-layout-tree' +import { collectLeafIds } from '../../../../../shared/workspace-layout/terminal-pane-layout-tree' import type { AppState } from '../../types' import type { WorkspaceAttentionGet, WorkspaceAttentionSet } from './workspace-attention-contract' import { settleWorkspaceUnreadFlag } from './workspace-unread-flag' diff --git a/src/renderer/src/store/slices/workspace-attention/workspace-live-markers.ts b/src/renderer/src/store/slices/workspace-attention/workspace-live-markers.ts index a555ac8c849..545c3adee74 100644 --- a/src/renderer/src/store/slices/workspace-attention/workspace-live-markers.ts +++ b/src/renderer/src/store/slices/workspace-attention/workspace-live-markers.ts @@ -1,6 +1,6 @@ import type { StoredAgentAttentionUnread } from '@/attention/agent-attention-contract' import { structuredAgentSessionPaneKey } from '../../../../../shared/agent-session/view/structured-agent-session-projection' -import type { TerminalTab } from '../../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../../shared/workspace-layout/terminal-tab-types' import type { Tab } from '../../../../../shared/tab-types' // Only markers owned by live tabs count; closed tabs and superseded sessions cannot light or hold workspace dots. diff --git a/src/renderer/src/store/slices/workspace-cleanup-agent-evidence.ts b/src/renderer/src/store/slices/workspace-cleanup-agent-evidence.ts index 80a807688da..f28e9cf8e3c 100644 --- a/src/renderer/src/store/slices/workspace-cleanup-agent-evidence.ts +++ b/src/renderer/src/store/slices/workspace-cleanup-agent-evidence.ts @@ -1,7 +1,7 @@ import { getStructuredAgentSessionTabsByPaneKey } from '@/components/native-chat/structured-agent-session-tabs' import type { AppState } from '../types' import type { WorkspaceCleanupCandidate } from '../../../../shared/workspace-cleanup/workspace-cleanup' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { getWorkspaceCleanupCandidateIdentity, resolveWorkspaceCleanupRemovalHostId diff --git a/src/renderer/src/store/slices/workspace-document-title-refresh.test.ts b/src/renderer/src/store/slices/workspace-document-title-refresh.test.ts index 4330c9cf75c..3660cac9f40 100644 --- a/src/renderer/src/store/slices/workspace-document-title-refresh.test.ts +++ b/src/renderer/src/store/slices/workspace-document-title-refresh.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it, vi } from 'vitest' import { createTestStore } from './store-test-helpers' import { createStoreCascadesMockApi } from './store-cascades-test-harness' -import '../../../../shared/workspace-doc-history' +import '../../../../shared/workspace-session/workspace-doc-history' createStoreCascadesMockApi() const WT = 'repo1::/path/wt1' diff --git a/src/renderer/src/store/slices/worktree-helpers.ts b/src/renderer/src/store/slices/worktree-helpers.ts index f7713e602fa..9523dc9251b 100644 --- a/src/renderer/src/store/slices/worktree-helpers.ts +++ b/src/renderer/src/store/slices/worktree-helpers.ts @@ -6,7 +6,7 @@ import type { CreatedWorktreeResult } from './worktrees/create/worktree-create-payload' import type { WorktreeCatalogVersion } from '../../../../shared/worktree/catalog-version' -import type { WorkspaceKey } from '../../../../shared/folder-workspaces/folder-workspace-types' +import type { WorkspaceKey } from '../../../../shared/workspace-scope' import type { TuiAgent } from '../../../../shared/agent-launch/catalog/tui-agent' import type { WorkspaceSource as WorkspaceCreateTelemetrySource } from '../../../../shared/workspace-source' import type { @@ -31,7 +31,7 @@ import type { import type { WorktreeRemovalTarget } from '../../../../shared/worktree/removal' import type { TerminalGitHubPRLink } from '../../../../shared/terminal/links/terminal-github-pr-link-detector' import type { ExecutionHostId } from '../../../../shared/execution-host' -import type { TerminalPaneRecoveryOutcome } from '../../../../shared/terminal-tab-types' +import type { TerminalPaneRecoveryOutcome } from '../../../../shared/workspace-layout/terminal-tab-types' import type { TerminalRecoveryRemountRequest, TerminalRecoveryRemountResult diff --git a/src/renderer/src/store/slices/worktrees-slice-test-fixtures.ts b/src/renderer/src/store/slices/worktrees-slice-test-fixtures.ts index e99c7e52bbb..92756f15235 100644 --- a/src/renderer/src/store/slices/worktrees-slice-test-fixtures.ts +++ b/src/renderer/src/store/slices/worktrees-slice-test-fixtures.ts @@ -1,6 +1,6 @@ import { vi } from 'vitest' import type { FolderWorkspace } from '../../../../shared/folder-workspaces/folder-workspace-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { WorkspaceLineage, WorktreeLineage } from '../../../../shared/worktree/lineage-types' import type { Worktree } from '../../../../shared/worktree/types' diff --git a/src/renderer/src/store/slices/worktrees-terminal-reference-admission.test.ts b/src/renderer/src/store/slices/worktrees-terminal-reference-admission.test.ts index 95060829484..bcceb6d6b9d 100644 --- a/src/renderer/src/store/slices/worktrees-terminal-reference-admission.test.ts +++ b/src/renderer/src/store/slices/worktrees-terminal-reference-admission.test.ts @@ -2,7 +2,7 @@ import { beforeEach, expect, it, vi } from 'vitest' import type { GitHubWorkItem } from '../../../../shared/github/work-item-types' import { createTerminalGitHubPRLinkDetector } from '../../../../shared/terminal/links/terminal-github-pr-link-detector' import { getWorkspaceAttachments } from '../../../../shared/workspace-attachments/workspace-attachments' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { singlePaneLayoutSnapshot } from './terminal-helpers' import { makeTerminalTab, makeWorktree } from './worktrees-slice-test-fixtures' import { diff --git a/src/renderer/src/store/slices/worktrees-terminal-reference-origins.test.ts b/src/renderer/src/store/slices/worktrees-terminal-reference-origins.test.ts index 2ab7440a6ad..3d2ba18fcd7 100644 --- a/src/renderer/src/store/slices/worktrees-terminal-reference-origins.test.ts +++ b/src/renderer/src/store/slices/worktrees-terminal-reference-origins.test.ts @@ -11,7 +11,7 @@ import { resetWorktreeSliceModuleMemory } from './worktrees-slice-test-harness' import { getWorkspaceAttachments } from '../../../../shared/workspace-attachments/workspace-attachments' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' function installReviewRead() { const read = vi.fn<(args: HostedReviewForBranchArgs) => Promise>() diff --git a/src/renderer/src/store/slices/worktrees/create/worktree-create-parent-pick.ts b/src/renderer/src/store/slices/worktrees/create/worktree-create-parent-pick.ts index ce00278be61..60230db5fa9 100644 --- a/src/renderer/src/store/slices/worktrees/create/worktree-create-parent-pick.ts +++ b/src/renderer/src/store/slices/worktrees/create/worktree-create-parent-pick.ts @@ -1,9 +1,10 @@ import type { AppState } from '../../../types' -import type { WorkspaceKey } from '../../../../../../shared/folder-workspaces/folder-workspace-types' + import { toast } from 'sonner' import { translate } from '@/i18n/i18n' import { resolveWorktreeDisplayName } from '@/lib/worktree-default-display-name' import { + type WorkspaceKey, folderWorkspaceKey, parseWorkspaceKey, worktreeWorkspaceKey diff --git a/src/renderer/src/store/slices/worktrees/create/worktree-create-payload.ts b/src/renderer/src/store/slices/worktrees/create/worktree-create-payload.ts index 99e040ee926..9aa1e56f707 100644 --- a/src/renderer/src/store/slices/worktrees/create/worktree-create-payload.ts +++ b/src/renderer/src/store/slices/worktrees/create/worktree-create-payload.ts @@ -5,7 +5,7 @@ import type { CreateWorktreeResult } from '../../../../../../shared/worktree/create-types' import type { ExecutionHostId } from '../../../../../../shared/execution-host' -import type { WorkspaceKey } from '../../../../../../shared/folder-workspaces/folder-workspace-types' +import type { WorkspaceKey } from '../../../../../../shared/workspace-scope' import type { TaskSourceContext } from '../../../../../../shared/task-source-context' import type { ClientAutomationWorkspaceProvenance, diff --git a/src/renderer/src/store/slices/worktrees/teardown/purged-structured-launch-retirement.ts b/src/renderer/src/store/slices/worktrees/teardown/purged-structured-launch-retirement.ts index e2bbd583bdf..feaca2d6659 100644 --- a/src/renderer/src/store/slices/worktrees/teardown/purged-structured-launch-retirement.ts +++ b/src/renderer/src/store/slices/worktrees/teardown/purged-structured-launch-retirement.ts @@ -1,6 +1,6 @@ import { markStructuredAgentSessionLaunchCancelledSilently } from '@/lib/agent-session/launch/structured-agent-session-launch-cancel' import type { ExecutionHostId } from '../../../../../../shared/execution-host' -import type { TerminalTab } from '../../../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../../../shared/workspace-layout/terminal-tab-types' import type { Tab } from '../../../../../../shared/tab-types' import type { AppState } from '../../../types' import { forgetStructuredSessionSelection } from '@/lib/structured-agent-session-selection-controller' diff --git a/src/renderer/src/store/slices/wsl-moved-project-chat-hydration.test.ts b/src/renderer/src/store/slices/wsl-moved-project-chat-hydration.test.ts index fce46e68a98..839ccb6e012 100644 --- a/src/renderer/src/store/slices/wsl-moved-project-chat-hydration.test.ts +++ b/src/renderer/src/store/slices/wsl-moved-project-chat-hydration.test.ts @@ -1,7 +1,7 @@ import { expect, it, vi } from 'vitest' import type * as AgentStatusModule from '@/lib/agent-status' import type { Tab } from '../../../../shared/tab-types' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import type { WslMovedProject } from '../../../../shared/wsl-move/wsl-moved-project' import { getDefaultWorkspaceSession } from '../../../../shared/constants' diff --git a/src/renderer/src/store/terminals/paired-terminal-tab-close-intent-actions.ts b/src/renderer/src/store/terminals/paired-terminal-tab-close-intent-actions.ts index 89d35c1fb90..b35d08e3316 100644 --- a/src/renderer/src/store/terminals/paired-terminal-tab-close-intent-actions.ts +++ b/src/renderer/src/store/terminals/paired-terminal-tab-close-intent-actions.ts @@ -1,4 +1,4 @@ -import type { PairedTerminalTabCloseIntent } from '../../../../shared/paired-terminal-tab-close-intent' +import type { PairedTerminalTabCloseIntent } from '../../../../shared/workspace-layout/paired-terminal-tab-close-intent' import { clearPairedTerminalTabCloseIntents, recordPairedTerminalTabCloseIntent, diff --git a/src/renderer/src/store/terminals/restored-relay-session-identity.test.ts b/src/renderer/src/store/terminals/restored-relay-session-identity.test.ts index 950fefd615f..d5d3eae3052 100644 --- a/src/renderer/src/store/terminals/restored-relay-session-identity.test.ts +++ b/src/renderer/src/store/terminals/restored-relay-session-identity.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import { buildWorkspaceSessionPayload } from '@/lib/workspace-session' import '../slices/terminal-orphan-helpers' import { createTestStore, makeTab, makeWorktree } from '../slices/store-test-helpers' diff --git a/src/renderer/src/store/terminals/restored-terminal-rebind-restarts.test.ts b/src/renderer/src/store/terminals/restored-terminal-rebind-restarts.test.ts index ae9aeafa871..b7e4dcbe266 100644 --- a/src/renderer/src/store/terminals/restored-terminal-rebind-restarts.test.ts +++ b/src/renderer/src/store/terminals/restored-terminal-rebind-restarts.test.ts @@ -9,7 +9,7 @@ import { toSshExecutionHostId, type ExecutionHostId } from '../../../../shared/execution-host' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import { loadWorkspaceLayoutWithoutReport } from '../../../../shared/workspace-layout/workspace-layout-load' import { nameBasedLoadContext } from '../../../../shared/workspace-layout/workspace-layout-minted-ids' import { publishWorkspaceLayout } from '../../../../shared/workspace-layout/workspace-layout-published' diff --git a/src/renderer/src/store/terminals/terminal-actions.ts b/src/renderer/src/store/terminals/terminal-actions.ts index 274760cdbd1..9b847f1b1b2 100644 --- a/src/renderer/src/store/terminals/terminal-actions.ts +++ b/src/renderer/src/store/terminals/terminal-actions.ts @@ -1,9 +1,12 @@ import type { TerminalState } from './terminal-state' import type { Tab } from '../../../../shared/tab-types' import type { TabSplitTarget } from '../slices/tabs/tabs-slice-contract' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../../shared/workspace-layout/terminal-tab-types' import type { TuiAgent } from '../../../../shared/agent-launch/catalog/tui-agent' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import type { AgentProviderSessionMetadata, SleepingAgentLaunchConfig, diff --git a/src/renderer/src/store/terminals/terminal-chat-pane-layout-owner.ts b/src/renderer/src/store/terminals/terminal-chat-pane-layout-owner.ts index 993f5012235..bcfde5f5cae 100644 --- a/src/renderer/src/store/terminals/terminal-chat-pane-layout-owner.ts +++ b/src/renderer/src/store/terminals/terminal-chat-pane-layout-owner.ts @@ -1,7 +1,7 @@ // Record window-picked chat panes in main so saves cannot change them; frames bypass setTabLayout, so its chat moves are window choices. import { recordLayoutApply } from '@/runtime/layout-apply-send' -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' import type { AppState } from '../types' export function recordChatPaneInLayoutOwner( diff --git a/src/renderer/src/store/terminals/terminal-exited-pane-liveness.test.ts b/src/renderer/src/store/terminals/terminal-exited-pane-liveness.test.ts index 36219e5e868..167859c6b21 100644 --- a/src/renderer/src/store/terminals/terminal-exited-pane-liveness.test.ts +++ b/src/renderer/src/store/terminals/terminal-exited-pane-liveness.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from 'vitest' -import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../../shared/workspace-layout/terminal-tab-types' import { tabHasLivePty } from '../../../../shared/tab-has-live-pty' import { createTestStore, makeTab, makeWorktree } from '../slices/store-test-helpers' import { createStoreSessionMockApi } from '../slices/store-session-test-harness' diff --git a/src/renderer/src/store/terminals/terminal-layout-state.ts b/src/renderer/src/store/terminals/terminal-layout-state.ts index 82ff36acadd..340eac86af4 100644 --- a/src/renderer/src/store/terminals/terminal-layout-state.ts +++ b/src/renderer/src/store/terminals/terminal-layout-state.ts @@ -1,10 +1,10 @@ import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../../shared/layout-owner-switch' -import { makePaneKey } from '../../../../shared/stable-pane-id' -import { terminalLayoutEqual } from '../../../../shared/terminal-layout-equality' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' +import { terminalLayoutEqual } from '../../../../shared/workspace-layout/terminal-layout-equality' import { normalizeTerminalLayoutPtyOwnership, resolveTerminalLayoutPtyOwnershipTransfers -} from '../../../../shared/terminal-layout-pty-ownership' +} from '../../../../shared/workspace-layout/terminal-layout-pty-ownership' import type { TerminalSlice, TerminalStoreGet, TerminalStoreSet } from './terminal-state' import { resolvePrimaryLayoutPtyId, diff --git a/src/renderer/src/store/terminals/terminal-pane-hibernation.ts b/src/renderer/src/store/terminals/terminal-pane-hibernation.ts index 40f0b15f403..8a317436bad 100644 --- a/src/renderer/src/store/terminals/terminal-pane-hibernation.ts +++ b/src/renderer/src/store/terminals/terminal-pane-hibernation.ts @@ -1,5 +1,5 @@ import { isRemoteRuntimePtyId } from '../../../../shared/remote-runtime/remote-runtime-pty-id' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { restorePtyDataHandlersAfterFailedShutdown, unregisterPtyDataHandlers diff --git a/src/renderer/src/store/terminals/terminal-pty-identities.ts b/src/renderer/src/store/terminals/terminal-pty-identities.ts index 1d477869402..a2649d76a2e 100644 --- a/src/renderer/src/store/terminals/terminal-pty-identities.ts +++ b/src/renderer/src/store/terminals/terminal-pty-identities.ts @@ -1,5 +1,11 @@ -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' -import { parseLegacyNumericPaneKey, parsePaneKey } from '../../../../shared/stable-pane-id' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../../shared/workspace-layout/terminal-tab-types' +import { + parseLegacyNumericPaneKey, + parsePaneKey +} from '../../../../shared/workspace-layout/stable-pane-id' export function getPendingActivationSpawnCount(value: boolean | number | undefined): number { if (value === true) { diff --git a/src/renderer/src/store/terminals/terminal-shutdown-guards.ts b/src/renderer/src/store/terminals/terminal-shutdown-guards.ts index c3087a7685e..c223a2e19d7 100644 --- a/src/renderer/src/store/terminals/terminal-shutdown-guards.ts +++ b/src/renderer/src/store/terminals/terminal-shutdown-guards.ts @@ -1,5 +1,5 @@ import { isRemoteRuntimePtyId } from '../../../../shared/remote-runtime/remote-runtime-pty-id' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { restorePtyDataHandlersAfterFailedShutdown, unregisterPtyDataHandlers diff --git a/src/renderer/src/store/terminals/terminal-shutdown-state.ts b/src/renderer/src/store/terminals/terminal-shutdown-state.ts index cf32cd90974..e4ca45e9609 100644 --- a/src/renderer/src/store/terminals/terminal-shutdown-state.ts +++ b/src/renderer/src/store/terminals/terminal-shutdown-state.ts @@ -1,4 +1,4 @@ -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { SleepingAgentSessionRecord } from '../../../../shared/agent-session/lifecycle/agent-session-resume' import { clearTransientTerminalState } from '../slices/terminal-helpers' import { diff --git a/src/renderer/src/store/terminals/terminal-sleep-layout-owner.ts b/src/renderer/src/store/terminals/terminal-sleep-layout-owner.ts index 4605cd1a88e..aced49e7f3e 100644 --- a/src/renderer/src/store/terminals/terminal-sleep-layout-owner.ts +++ b/src/renderer/src/store/terminals/terminal-sleep-layout-owner.ts @@ -1,5 +1,5 @@ import type { SleepingAgentSessionRecord } from '../../../../shared/agent-session/lifecycle/agent-session-resume' -import { parsePaneKey } from '../../../../shared/stable-pane-id' +import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { isWorkspaceSleepRecord } from '../../../../shared/workspace-sleep' import type { WorktreeRuntimeOwnerState } from '@/lib/worktree-runtime-owner-state' import { recordLayoutApply } from '@/runtime/layout-apply-send' diff --git a/src/renderer/src/store/terminals/terminal-startup-queue-restart.test.ts b/src/renderer/src/store/terminals/terminal-startup-queue-restart.test.ts index 059dea86d7a..bfb183b402f 100644 --- a/src/renderer/src/store/terminals/terminal-startup-queue-restart.test.ts +++ b/src/renderer/src/store/terminals/terminal-startup-queue-restart.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import { parseWorkspaceSession } from '../../../../shared/workspace-session-schema' +import { parseWorkspaceSession } from '../../../../shared/workspace-session/workspace-session-schema' import { buildWorkspaceSessionPayload } from '@/lib/workspace-session' import { createTestStore, makeWorktree, seedStore } from '@/store/slices/store-test-helpers' diff --git a/src/renderer/src/store/terminals/terminal-state.ts b/src/renderer/src/store/terminals/terminal-state.ts index 02257b03889..502521942d8 100644 --- a/src/renderer/src/store/terminals/terminal-state.ts +++ b/src/renderer/src/store/terminals/terminal-state.ts @@ -1,5 +1,8 @@ -import type { ClosedTerminalTabTombstonesByTabId } from '../../../../shared/closed-terminal-tab-tombstones' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' +import type { ClosedTerminalTabTombstonesByTabId } from '../../../../shared/workspace-layout/closed-terminal-tab-tombstones' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../../shared/workspace-layout/terminal-tab-types' import type { PaneResumeOutcome, PaneStartStatus diff --git a/src/renderer/src/store/terminals/terminal-surface-close-intent.ts b/src/renderer/src/store/terminals/terminal-surface-close-intent.ts index 25393aa8129..cc6443db45e 100644 --- a/src/renderer/src/store/terminals/terminal-surface-close-intent.ts +++ b/src/renderer/src/store/terminals/terminal-surface-close-intent.ts @@ -1,4 +1,4 @@ -import type { TerminalSurfaceCloseTarget } from '../../../../shared/terminal-surface-close-target' +import type { TerminalSurfaceCloseTarget } from '../../../../shared/workspace-layout/terminal-surface-close-target' /** Commits a terminal tab or split-pane close in main, which owns membership: a renderer save * cannot shrink it, so without this the close would ride on the PTY exit. */ diff --git a/src/renderer/src/store/terminals/terminal-tab-agent-launch-pane.ts b/src/renderer/src/store/terminals/terminal-tab-agent-launch-pane.ts index 03c721c8875..9a2faab2446 100644 --- a/src/renderer/src/store/terminals/terminal-tab-agent-launch-pane.ts +++ b/src/renderer/src/store/terminals/terminal-tab-agent-launch-pane.ts @@ -1,4 +1,4 @@ -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { TerminalSlice, TerminalStoreSet } from './terminal-state' export function createTerminalTabAgentLaunchPaneActions( diff --git a/src/renderer/src/store/terminals/terminal-tab-close.ts b/src/renderer/src/store/terminals/terminal-tab-close.ts index 217a73f82f7..9af7ad1f334 100644 --- a/src/renderer/src/store/terminals/terminal-tab-close.ts +++ b/src/renderer/src/store/terminals/terminal-tab-close.ts @@ -1,4 +1,4 @@ -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { sweepRetiredTerminalTabState } from '../slices/retired-terminal-tab-state-sweep' import { getRecentlyClosedTabPosition, diff --git a/src/renderer/src/store/terminals/terminal-tab-create-through-layout-owner.ts b/src/renderer/src/store/terminals/terminal-tab-create-through-layout-owner.ts index 37b36441d67..c54cf711022 100644 --- a/src/renderer/src/store/terminals/terminal-tab-create-through-layout-owner.ts +++ b/src/renderer/src/store/terminals/terminal-tab-create-through-layout-owner.ts @@ -8,14 +8,14 @@ import { sendLayoutApply } from '@/runtime/layout-apply-send' import { newGroupSplitOf } from '@/runtime/layout-owner-new-group-split' import { callRuntimeRpc } from '@/runtime/runtime-rpc-client' import { layoutFrameTerminalTab } from '@/runtime/layout-frame-terminal-panes' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { pickStoredFields } from '../../../../shared/workspace-layout/stored-record-fields' import type { CommandOf, LayoutApplyReply } from '../../../../shared/workspace-layout/workspace-layout-command-types' import type { AppState } from '../types' -import { makePaneKey } from '../../../../shared/stable-pane-id' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { clearWindowTabMark, markWindowTabStarting, diff --git a/src/renderer/src/store/terminals/terminal-tab-creation.ts b/src/renderer/src/store/terminals/terminal-tab-creation.ts index a4664a5c1da..af2c8720254 100644 --- a/src/renderer/src/store/terminals/terminal-tab-creation.ts +++ b/src/renderer/src/store/terminals/terminal-tab-creation.ts @@ -1,14 +1,14 @@ import { resolveTerminalCreatedShell } from './terminal-created-shell' import { warnIfZCodeCannotOpenSession } from '@/components/terminal-pane/zcode-missing-tui-notice' import { clearWorktreeSleepIntent } from '@/lib/worktree-sleep-intent' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { isValidHostTerminalTabId, isValidMirroredHostTerminalTabId -} from '../../../../shared/terminal-tab-id' +} from '../../../../shared/workspace-layout/terminal-tab-id' import { getNextTerminalOrdinal } from '../../../../shared/workspace-layout/terminal-tab-ordinal' import { singlePaneLayoutSnapshot } from '../slices/terminal-helpers' -import { isTerminalLeafId } from '../../../../shared/stable-pane-id' +import { isTerminalLeafId } from '../../../../shared/workspace-layout/stable-pane-id' import { buildOrphanTerminalCleanupPatch, getOrphanTerminalIds diff --git a/src/renderer/src/store/terminals/terminal-tab-location.ts b/src/renderer/src/store/terminals/terminal-tab-location.ts index 0afc617aa88..da0d549c27c 100644 --- a/src/renderer/src/store/terminals/terminal-tab-location.ts +++ b/src/renderer/src/store/terminals/terminal-tab-location.ts @@ -1,4 +1,4 @@ -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' /** Recovery/remount/budget/native-chat guards must all use terminal rows; unified-index gaps previously erased each remount’s budget and defeated its cap (b5cfc6ca). */ export function locateTerminalTab( diff --git a/src/renderer/src/store/terminals/terminal-tab-recovery-ledger.ts b/src/renderer/src/store/terminals/terminal-tab-recovery-ledger.ts index f463b2be1e2..72332ea4c6f 100644 --- a/src/renderer/src/store/terminals/terminal-tab-recovery-ledger.ts +++ b/src/renderer/src/store/terminals/terminal-tab-recovery-ledger.ts @@ -3,7 +3,7 @@ import type { TerminalPaneRecoveryReason, TerminalTab, TerminalTabRecoveryLedger -} from '../../../../shared/terminal-tab-types' +} from '../../../../shared/workspace-layout/terminal-tab-types' // Row-owned recovery survives remount disposal that erased module-map budgets (b5cfc6ca). Pending attempts block repeats; observed failure refuses the same reason until a new trigger. diff --git a/src/renderer/src/store/terminals/window-tab-start-in-main.ts b/src/renderer/src/store/terminals/window-tab-start-in-main.ts index 8d386361452..4bad0f27793 100644 --- a/src/renderer/src/store/terminals/window-tab-start-in-main.ts +++ b/src/renderer/src/store/terminals/window-tab-start-in-main.ts @@ -1,9 +1,9 @@ // Main starts window-drawn tabs under their IDs after recording them; panes wait (D1b-1). Inputs main cannot carry retain window spawn (L252). import { callRuntimeRpc } from '@/runtime/runtime-rpc-client' -import { makePaneKey } from '../../../../shared/stable-pane-id' -import { collectLeafIds } from '../../../../shared/terminal-pane-layout-tree' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import { makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' +import { collectLeafIds } from '../../../../shared/workspace-layout/terminal-pane-layout-tree' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { isSupportedWindowsShellOverride } from '../../../../shared/windows-terminal-shell' import type { AppState } from '../types' import type { TerminalPaneStart } from './terminal-state' diff --git a/src/renderer/src/store/terminals/workspace-terminal-active-tabs.ts b/src/renderer/src/store/terminals/workspace-terminal-active-tabs.ts index ce0e160bc40..4550b96492c 100644 --- a/src/renderer/src/store/terminals/workspace-terminal-active-tabs.ts +++ b/src/renderer/src/store/terminals/workspace-terminal-active-tabs.ts @@ -1,5 +1,5 @@ -import type { TerminalTab } from '../../../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' /** Restore per-worktree active tab; validate ids when the map exists, else derive for legacy sessions. */ export function restoreActiveTabIdByWorktree({ diff --git a/src/renderer/src/store/terminals/workspace-terminal-hydration-patch.ts b/src/renderer/src/store/terminals/workspace-terminal-hydration-patch.ts index f6865d59ecb..bb1772bd80e 100644 --- a/src/renderer/src/store/terminals/workspace-terminal-hydration-patch.ts +++ b/src/renderer/src/store/terminals/workspace-terminal-hydration-patch.ts @@ -1,6 +1,10 @@ import type { AppState } from '../types' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' -import { isTerminalLeafId, makePaneKey, parsePaneKey } from '../../../../shared/stable-pane-id' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' +import { + isTerminalLeafId, + makePaneKey, + parsePaneKey +} from '../../../../shared/workspace-layout/stable-pane-id' import { resolveAgentPaneAuthorityKey } from '../slices/agent-pane-authority' import type { HydrateWorkspaceSessionOptions } from './terminal-contracts' import { omitUnverifiedPtyLossTabIds } from './terminal-unverified-pty-loss' diff --git a/src/renderer/src/store/terminals/workspace-terminal-hydration.ts b/src/renderer/src/store/terminals/workspace-terminal-hydration.ts index daaba2088d5..e6e41a991fc 100644 --- a/src/renderer/src/store/terminals/workspace-terminal-hydration.ts +++ b/src/renderer/src/store/terminals/workspace-terminal-hydration.ts @@ -1,6 +1,6 @@ -import type { WorkspaceKey } from '../../../../shared/folder-workspaces/folder-workspace-types' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../../shared/constants' import { + type WorkspaceKey, folderWorkspaceKey, isWorkspaceKey, worktreeWorkspaceKey diff --git a/src/renderer/src/store/terminals/workspace-terminal-layout-plan.ts b/src/renderer/src/store/terminals/workspace-terminal-layout-plan.ts index 653e502027b..95ee1c36584 100644 --- a/src/renderer/src/store/terminals/workspace-terminal-layout-plan.ts +++ b/src/renderer/src/store/terminals/workspace-terminal-layout-plan.ts @@ -1,12 +1,15 @@ -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { + TerminalLayoutSnapshot, + TerminalTab +} from '../../../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import { releaseTerminalLayoutPtyIds } from '../slices/terminal-session-row-hydration' import { normalizeTerminalLayoutSnapshot, resolvePtyBoundActiveLeafId } from '@/components/terminal-pane/terminal-layout-leaf-ids' -import { resolveTerminalLayoutPtyOwnershipTransfers } from '../../../../shared/terminal-layout-pty-ownership' -import { sanitizeTerminalLayoutPaneTitles } from '../../../../shared/terminal-pane-title-sanitization' +import { resolveTerminalLayoutPtyOwnershipTransfers } from '../../../../shared/workspace-layout/terminal-layout-pty-ownership' +import { sanitizeTerminalLayoutPaneTitles } from '../../../../shared/workspace-layout/terminal-pane-title-sanitization' import type { TerminalLayoutPtyOwnershipTransfer } from './workspace-terminal-hydration-patch' export function buildWorkspaceTerminalLayoutPlan({ diff --git a/src/renderer/src/store/terminals/workspace-terminal-reconnect-plan.ts b/src/renderer/src/store/terminals/workspace-terminal-reconnect-plan.ts index 86a7d9b6b31..8e9913faa87 100644 --- a/src/renderer/src/store/terminals/workspace-terminal-reconnect-plan.ts +++ b/src/renderer/src/store/terminals/workspace-terminal-reconnect-plan.ts @@ -1,6 +1,6 @@ import type { Repo } from '../../../../shared/repo-types' import type { Worktree } from '../../../../shared/worktree/types' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' import { buildByIdIndex, buildWorktreeByIdIndex } from '../slices/worktree-by-id-index' export type WorkspaceTerminalReconnectPlan = { diff --git a/src/renderer/src/store/terminals/workspace-terminal-reconnect.ts b/src/renderer/src/store/terminals/workspace-terminal-reconnect.ts index c061e280934..fc76fbabfc4 100644 --- a/src/renderer/src/store/terminals/workspace-terminal-reconnect.ts +++ b/src/renderer/src/store/terminals/workspace-terminal-reconnect.ts @@ -1,4 +1,4 @@ -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import { buildByIdIndex, buildWorktreeByIdIndex } from '../slices/worktree-by-id-index' import { getRepoIdFromWorktreeId } from '../../../../shared/worktree/id' import type { TerminalSlice, TerminalStoreGet, TerminalStoreSet } from './terminal-state' diff --git a/src/renderer/src/store/terminals/workspace-terminal-row-plan.ts b/src/renderer/src/store/terminals/workspace-terminal-row-plan.ts index c3fe6380fb6..8428cdbe77f 100644 --- a/src/renderer/src/store/terminals/workspace-terminal-row-plan.ts +++ b/src/renderer/src/store/terminals/workspace-terminal-row-plan.ts @@ -1,7 +1,7 @@ import type { SleepingAgentSessionRecord } from '../../../../shared/agent-session/lifecycle/agent-session-resume' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' -import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' -import { isTerminalLeafId, makePaneKey } from '../../../../shared/stable-pane-id' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session/workspace-session-state-types' +import { isTerminalLeafId, makePaneKey } from '../../../../shared/workspace-layout/stable-pane-id' import { collectReleasedLeafIds, hydrateWorkspaceTerminalRows diff --git a/src/renderer/src/store/terminals/workspace-terminal-ssh-placeholders.ts b/src/renderer/src/store/terminals/workspace-terminal-ssh-placeholders.ts index 5dcfc154912..ed5ab7f8fc0 100644 --- a/src/renderer/src/store/terminals/workspace-terminal-ssh-placeholders.ts +++ b/src/renderer/src/store/terminals/workspace-terminal-ssh-placeholders.ts @@ -1,5 +1,5 @@ import type { Repo } from '../../../../shared/repo-types' -import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../../shared/workspace-layout/terminal-tab-types' import type { Worktree } from '../../../../shared/worktree/types' import { getRepoIdFromWorktreeId, diff --git a/src/renderer/src/store/workspace-layout-frame-slices.ts b/src/renderer/src/store/workspace-layout-frame-slices.ts index 345af7c34f2..58c808ababd 100644 --- a/src/renderer/src/store/workspace-layout-frame-slices.ts +++ b/src/renderer/src/store/workspace-layout-frame-slices.ts @@ -13,7 +13,7 @@ import type { PublishedWorkspaceLayout } from '../../../shared/workspace-layout/workspace-layout-published' import { saveWorkspaceLayout } from '../../../shared/workspace-layout/workspace-layout-save' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { projectHydratedBrowserSession } from './slices/browser/browser-hydration-state' import { buildHydratedEditorSessionState } from './slices/editor/actions/hydrated-editor-session-state' import { openFileOfLayoutEditorView } from './slices/editor/tabs/open-file-layout-view' diff --git a/src/renderer/src/store/workspace-layout-frame-store-patch.test.ts b/src/renderer/src/store/workspace-layout-frame-store-patch.test.ts index af135b9c3d0..7137681fad1 100644 --- a/src/renderer/src/store/workspace-layout-frame-store-patch.test.ts +++ b/src/renderer/src/store/workspace-layout-frame-store-patch.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from 'vitest' import type * as AgentStatusModule from '@/lib/agent-status' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' import { loadWorkspaceLayoutWithoutReport } from '../../../shared/workspace-layout/workspace-layout-load' import { nameBasedLoadContext } from '../../../shared/workspace-layout/workspace-layout-minted-ids' import { localDesktopSession } from '../../../shared/workspace-layout/workspace-layout-profile.test-fixture' diff --git a/src/renderer/src/store/workspace-layout-frame-store-patch.ts b/src/renderer/src/store/workspace-layout-frame-store-patch.ts index 21cc984c124..3db7cf612d2 100644 --- a/src/renderer/src/store/workspace-layout-frame-store-patch.ts +++ b/src/renderer/src/store/workspace-layout-frame-store-patch.ts @@ -2,7 +2,7 @@ import { BROWSER_TAB_LAYOUT_FIELDS } from '../../../shared/workspace-layout/workspace-layout-beside' import { stableJson } from '../../../shared/workspace-layout/workspace-layout-load-report' -import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types' import { isEditorTabContentType } from './slices/editor/tabs/editor-tab-content-type' import type { AppState } from './types' import type { LayoutFrameSlices } from './workspace-layout-frame-slices' diff --git a/src/renderer/src/store/workspace-layout-frame-store-view.ts b/src/renderer/src/store/workspace-layout-frame-store-view.ts index e190a75f005..43cd5ceff5c 100644 --- a/src/renderer/src/store/workspace-layout-frame-store-view.ts +++ b/src/renderer/src/store/workspace-layout-frame-store-view.ts @@ -1,6 +1,6 @@ // Read frame view/facts directly from scoped store records instead of serializing the session (E2a); reuse save trimming for editor, group, browser and scrollback state. -import type { TerminalLayoutSnapshot } from '../../../shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../../shared/workspace-layout/terminal-tab-types' import { BROWSER_TAB_LAYOUT_FIELDS, BROWSER_TAB_WORKSPACE_FIELDS, @@ -12,7 +12,7 @@ import { omitStoredFields, pickStoredFields } from '../../../shared/workspace-layout/stored-record-fields' -import { pruneLocalTerminalScrollbackBuffers } from '../../../shared/workspace-session-terminal-buffers' +import { pruneLocalTerminalScrollbackBuffers } from '../../../shared/workspace-session/workspace-session-terminal-buffers' import { buildPersistedBrowserPagesByWorkspace, buildPersistedBrowserTabsByWorktree diff --git a/src/renderer/src/web/preload-api/web-terminal-api.ts b/src/renderer/src/web/preload-api/web-terminal-api.ts index cf4e881ea2e..4f6cfa0fe88 100644 --- a/src/renderer/src/web/preload-api/web-terminal-api.ts +++ b/src/renderer/src/web/preload-api/web-terminal-api.ts @@ -1,5 +1,5 @@ import type { PreloadApi } from '../../../../preload/api-types' -import { EMPTY_PTY_MAIN_DELIVERY_DIAGNOSTICS } from '../../../../shared/pty-delivery-diagnostics' +import { EMPTY_PTY_MAIN_DELIVERY_DIAGNOSTICS } from '../../../../shared/terminal/pty/diagnostics/pty-delivery-diagnostics' import type { SshConnectionState, SshTarget } from '../../../../shared/ssh-types' import { translate } from '@/i18n/i18n' import { callRuntimeResult } from './web-runtime-calls' diff --git a/src/renderer/src/web/preload-api/web-workspace-session-api.ts b/src/renderer/src/web/preload-api/web-workspace-session-api.ts index 411ae817a75..806d026352a 100644 --- a/src/renderer/src/web/preload-api/web-workspace-session-api.ts +++ b/src/renderer/src/web/preload-api/web-workspace-session-api.ts @@ -8,7 +8,7 @@ import { import type { WorkspaceSessionPatch, WorkspaceSessionState -} from '../../../../shared/workspace-session-state-types' +} from '../../../../shared/workspace-session/workspace-session-state-types' import { sanitizeWebRuntimeWorkspaceSession } from '../web-workspace-session' import { readLocalWebUIState } from './web-preferences-store' import { requireActiveEnvironmentOrNull } from './web-runtime-session' diff --git a/src/renderer/src/web/web-workspace-session.ts b/src/renderer/src/web/web-workspace-session.ts index d133679d598..93c0c53b29a 100644 --- a/src/renderer/src/web/web-workspace-session.ts +++ b/src/renderer/src/web/web-workspace-session.ts @@ -1,5 +1,5 @@ import { getDefaultWorkspaceSession } from '../../../shared/constants' -import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session/workspace-session-state-types' export function sanitizeWebRuntimeWorkspaceSession( session: WorkspaceSessionState diff --git a/src/shared/agent-hook-listener/hook-envelope.ts b/src/shared/agent-hook-listener/hook-envelope.ts index 72025228bba..6d2d387b701 100644 --- a/src/shared/agent-hook-listener/hook-envelope.ts +++ b/src/shared/agent-hook-listener/hook-envelope.ts @@ -2,7 +2,7 @@ import { Buffer } from 'node:buffer' import type { IncomingHttpHeaders } from 'node:http' import type { AgentHookSource } from './transport/agent-hook-relay' -import { parsePaneKey } from '../stable-pane-id' +import { parsePaneKey } from '../workspace-layout/stable-pane-id' import { MAX_PANE_KEY_LEN, warnOnHookEnvOrVersionMismatch } from './listener-limits' import type { HookListenerState } from './listener-state' import { parseAgentHookJson } from './request-body' diff --git a/src/shared/agent-hook-listener/normalization/agent-hook-listener-claude-elicitation.test.ts b/src/shared/agent-hook-listener/normalization/agent-hook-listener-claude-elicitation.test.ts index f5adca8f13a..a1c40d7aba4 100644 --- a/src/shared/agent-hook-listener/normalization/agent-hook-listener-claude-elicitation.test.ts +++ b/src/shared/agent-hook-listener/normalization/agent-hook-listener-claude-elicitation.test.ts @@ -1,7 +1,7 @@ import { beforeEach, describe, expect, it } from 'vitest' import { normalizeHookPayload } from './normalize-hook-payload' import { createHookListenerState, type HookListenerState } from '../listener-state' -import { makePaneKey } from '../../stable-pane-id' +import { makePaneKey } from '../../workspace-layout/stable-pane-id' const PANE_KEY = makePaneKey('claude-elicitation', '11111111-1111-4111-8111-111111111111') diff --git a/src/shared/agent-hook-listener/normalization/agent-hook-listener-claude-subagents.test.ts b/src/shared/agent-hook-listener/normalization/agent-hook-listener-claude-subagents.test.ts index 8959af23022..1c9bfcf2061 100644 --- a/src/shared/agent-hook-listener/normalization/agent-hook-listener-claude-subagents.test.ts +++ b/src/shared/agent-hook-listener/normalization/agent-hook-listener-claude-subagents.test.ts @@ -6,7 +6,7 @@ import { import { createHookListenerState, type HookListenerState } from '../listener-state' import { normalizeHookPayload } from './normalize-hook-payload' import { clearGrokSessionPathLookupCacheForTests } from '../../grok-session-paths' -import '../../stable-pane-id' +import '../../workspace-layout/stable-pane-id' import { PANE_KEY } from './agent-hook-listener-test-harness' describe('shared agent-hook-listener', () => { diff --git a/src/shared/agent-hook-listener/normalization/agent-hook-listener-claude-task-notification.test.ts b/src/shared/agent-hook-listener/normalization/agent-hook-listener-claude-task-notification.test.ts index 16c0129e606..36d4a3ccbb6 100644 --- a/src/shared/agent-hook-listener/normalization/agent-hook-listener-claude-task-notification.test.ts +++ b/src/shared/agent-hook-listener/normalization/agent-hook-listener-claude-task-notification.test.ts @@ -8,7 +8,7 @@ import { cacheRelayLegacyAgentStatus } from '../../agent-status/transport/agent- import { markClaudeLeadTurnInterrupted } from '../providers/claude-roster-state' import { ClaudeOwedNotificationExpiryTimers } from '../providers/claude-owed-notification-expiry-timers' import { CLAUDE_OWED_TASK_NOTIFICATION_LEASE_MS } from '../providers/claude-owed-task-notifications' -import { makePaneKey } from '../../stable-pane-id' +import { makePaneKey } from '../../workspace-layout/stable-pane-id' const PANE_KEY = makePaneKey('tab-1', '11111111-1111-4111-8111-111111111111') diff --git a/src/shared/agent-hook-listener/normalization/agent-hook-listener-claude-turn-state.test.ts b/src/shared/agent-hook-listener/normalization/agent-hook-listener-claude-turn-state.test.ts index 3b1d45b6999..b5d15af7f17 100644 --- a/src/shared/agent-hook-listener/normalization/agent-hook-listener-claude-turn-state.test.ts +++ b/src/shared/agent-hook-listener/normalization/agent-hook-listener-claude-turn-state.test.ts @@ -9,7 +9,7 @@ import { normalizeAndAccept, PANE_KEY } from './agent-hook-listener-test-harness' -import '../../stable-pane-id' +import '../../workspace-layout/stable-pane-id' describe('shared agent-hook-listener', () => { let state: HookListenerState diff --git a/src/shared/agent-hook-listener/normalization/agent-hook-listener-startless-child-lifecycle.test.ts b/src/shared/agent-hook-listener/normalization/agent-hook-listener-startless-child-lifecycle.test.ts index a71d9154cdd..f636116750c 100644 --- a/src/shared/agent-hook-listener/normalization/agent-hook-listener-startless-child-lifecycle.test.ts +++ b/src/shared/agent-hook-listener/normalization/agent-hook-listener-startless-child-lifecycle.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest' import { createHookListenerState, type HookListenerState } from '../listener-state' import { normalizeHookPayload } from './normalize-hook-payload' -import { makePaneKey } from '../../stable-pane-id' +import { makePaneKey } from '../../workspace-layout/stable-pane-id' const LEAF_ID = '22222222-2222-4222-8222-222222222222' diff --git a/src/shared/agent-hook-listener/normalization/agent-hook-listener-test-harness.ts b/src/shared/agent-hook-listener/normalization/agent-hook-listener-test-harness.ts index 38f3fccd5a8..cfa104bb293 100644 --- a/src/shared/agent-hook-listener/normalization/agent-hook-listener-test-harness.ts +++ b/src/shared/agent-hook-listener/normalization/agent-hook-listener-test-harness.ts @@ -1,6 +1,6 @@ import { normalizeHookPayload } from './normalize-hook-payload' import { seedLegacyAgentStatusForTests, type HookListenerState } from '../listener-state' -import { makePaneKey } from '../../stable-pane-id' +import { makePaneKey } from '../../workspace-layout/stable-pane-id' const LEAF_ID = '11111111-1111-4111-8111-111111111111' export const PANE_KEY = makePaneKey('tab-1', LEAF_ID) diff --git a/src/shared/agent-hook-listener/opencode-session-registry.ts b/src/shared/agent-hook-listener/opencode-session-registry.ts index 35baeff717f..4474ab4e036 100644 --- a/src/shared/agent-hook-listener/opencode-session-registry.ts +++ b/src/shared/agent-hook-listener/opencode-session-registry.ts @@ -1,4 +1,4 @@ -import { parsePaneKey } from '../stable-pane-id' +import { parsePaneKey } from '../workspace-layout/stable-pane-id' import type { AgentHookSource } from './transport/agent-hook-relay' import type { HookListenerState } from './listener-state' diff --git a/src/shared/agent-hook-listener/presence/hook-process-root-evidence.ts b/src/shared/agent-hook-listener/presence/hook-process-root-evidence.ts index 59544967743..b395a9593c0 100644 --- a/src/shared/agent-hook-listener/presence/hook-process-root-evidence.ts +++ b/src/shared/agent-hook-listener/presence/hook-process-root-evidence.ts @@ -9,7 +9,7 @@ import type { } from '../../agent-status/process/agent-process-presence' import { hasControllingTty } from '../../posix-controlling-terminal' import { unreadableArgvName, type ProcessTableRow } from '../../process-table-snapshot' -import { isShellProcess } from '../../shell-process-detection' +import { isShellProcess } from '../../agent-status/process/shell-process-detection' import type { TmuxHookPane } from '../../tmux-client-attachment' /** What the execution host can prove about a hook's process relative to the pane it names. diff --git a/src/shared/agent-hook-listener/state/agent-hook-session-binding.test-fixture.ts b/src/shared/agent-hook-listener/state/agent-hook-session-binding.test-fixture.ts index 1fb5f3b279a..0980060d244 100644 --- a/src/shared/agent-hook-listener/state/agent-hook-session-binding.test-fixture.ts +++ b/src/shared/agent-hook-listener/state/agent-hook-session-binding.test-fixture.ts @@ -1,5 +1,5 @@ import type { AgentStatusIpcPayload } from '../../agent-status/contracts/agent-status-ipc-payload' -import type { TerminalTab } from '../../terminal-tab-types' +import type { TerminalTab } from '../../workspace-layout/terminal-tab-types' export type HookSessionBindingRendererFixture = { expectReturnedRenderer: ( diff --git a/src/shared/agent-launch/startup/agent-prompt-injection.ts b/src/shared/agent-launch/startup/agent-prompt-injection.ts index 4b71a233377..075ad58c5dd 100644 --- a/src/shared/agent-launch/startup/agent-prompt-injection.ts +++ b/src/shared/agent-launch/startup/agent-prompt-injection.ts @@ -4,7 +4,7 @@ import { iterateTerminalInputChunks, TERMINAL_INPUT_CHUNK_MAX_BYTES } from '../../terminal/input/terminal-input' -import type { TerminalAgent } from '../../terminal-agent' +import type { TerminalAgent } from '../../agent-status/identity/terminal-agent' import { isTuiAgent, TUI_AGENT_CONFIG } from '../catalog/tui-agent-config' export const AGENT_PROMPT_BRACKETED_PASTE_START = '\x1b[200~' diff --git a/src/shared/agent-launch/startup/tui-agent-startup.ts b/src/shared/agent-launch/startup/tui-agent-startup.ts index ebfea2a5b7d..47db30d8a20 100644 --- a/src/shared/agent-launch/startup/tui-agent-startup.ts +++ b/src/shared/agent-launch/startup/tui-agent-startup.ts @@ -1,6 +1,6 @@ import { withFreshOmpLaunch, isFreshOmpLaunchCommand } from './omp-fresh-launch' import { withOmpDraftCleanup } from './omp-draft-launch' -import '../../shell-process-detection' +import '../../agent-status/process/shell-process-detection' import type { SleepingAgentLaunchConfig } from '../../agent-session/lifecycle/agent-session-resume' import { clearEnvCommand, diff --git a/src/shared/agent-session/agent-session-host-authority.ts b/src/shared/agent-session/agent-session-host-authority.ts index 7e07716bc47..54c12f15c3d 100644 --- a/src/shared/agent-session/agent-session-host-authority.ts +++ b/src/shared/agent-session/agent-session-host-authority.ts @@ -6,8 +6,8 @@ import { } from './lifecycle/agent-session-resume' import type { RuntimeTerminalCreate } from '../runtime-terminal-create-contract' import type { RuntimeTerminalPresentation } from '../runtime-terminal-contracts' -import { isTerminalLeafId } from '../stable-pane-id' -import { isValidTerminalTabId } from '../terminal-tab-id' +import { isTerminalLeafId } from '../workspace-layout/stable-pane-id' +import { isValidTerminalTabId } from '../workspace-layout/terminal-tab-id' import type { TuiAgent } from '../agent-launch/catalog/tui-agent' import type { SpawnIntent } from '../host-spawn-admission' diff --git a/src/shared/agent-session/view/agent-session-surface-tab-id.ts b/src/shared/agent-session/view/agent-session-surface-tab-id.ts index a1dfafc2574..c30d5aca97f 100644 --- a/src/shared/agent-session/view/agent-session-surface-tab-id.ts +++ b/src/shared/agent-session/view/agent-session-surface-tab-id.ts @@ -1,4 +1,4 @@ -import { isValidHostTerminalTabId } from '../../terminal-tab-id' +import { isValidHostTerminalTabId } from '../../workspace-layout/terminal-tab-id' const MAX_SURFACE_TAB_ID_LENGTH = 512 diff --git a/src/shared/agent-status/contracts/agent-status-types.ts b/src/shared/agent-status/contracts/agent-status-types.ts index bb303a980a5..b151cf9c9b8 100644 --- a/src/shared/agent-status/contracts/agent-status-types.ts +++ b/src/shared/agent-status/contracts/agent-status-types.ts @@ -8,7 +8,7 @@ import { isAgentTurnOutcome } from '../lifecycle/agent-turn-outcome' import type { OrchestrationFleetAttention } from '../../orchestration-fleet-attention' import type { AgentStatusRowFacets } from './agent-status-observation' import type { AgentChildWorkView } from '../child-work/agent-status-child-work-view' -import type { TerminalAgent } from '../../terminal-agent' +import type { TerminalAgent } from '../identity/terminal-agent' import { AGENT_MODEL_MAX_LENGTH, AGENT_STATUS_TOOL_INPUT_MAX_LENGTH, diff --git a/src/shared/agent-status/identity/agent-status-worktree-attribution.ts b/src/shared/agent-status/identity/agent-status-worktree-attribution.ts index 84ca8a26322..b3a30d37165 100644 --- a/src/shared/agent-status/identity/agent-status-worktree-attribution.ts +++ b/src/shared/agent-status/identity/agent-status-worktree-attribution.ts @@ -4,8 +4,8 @@ import type { AgentStatusEntry, AgentStatusOrchestrationContext } from '../contracts/agent-status-types' -import { isWebTerminalSurfaceTabId } from '../../terminal-surface-id' -import { parseLegacyNumericPaneKey, parsePaneKey } from '../../stable-pane-id' +import { isWebTerminalSurfaceTabId } from '../../workspace-layout/terminal-surface-id' +import { parseLegacyNumericPaneKey, parsePaneKey } from '../../workspace-layout/stable-pane-id' export type AgentStatusPaneIdentity = { tabId: string; paneId: string } diff --git a/src/shared/agent-status/identity/pane-agent-identity-adapter.ts b/src/shared/agent-status/identity/pane-agent-identity-adapter.ts index fcccebcad8b..c76e472d965 100644 --- a/src/shared/agent-status/identity/pane-agent-identity-adapter.ts +++ b/src/shared/agent-status/identity/pane-agent-identity-adapter.ts @@ -1,13 +1,16 @@ import { collectAgentTitleEvidence } from '../title/agent-title-evidence' -import { PANE_AGENT_EVIDENCE_SOURCES } from './pane-agent-evidence-sources' +import { + PANE_AGENT_EVIDENCE_SOURCES, + type PaneAgentEvidenceSource +} from './pane-agent-evidence-sources' import type { PaneAgentEvidence, PaneAgentIdentity, PaneAgentIdentityInput, PaneAgentRunKey } from './pane-agent-identity-resolver' -import type { PaneAgentEvidenceSource } from './pane-agent-evidence-sources' -import type { TerminalAgent } from '../../terminal-agent' + +import type { TerminalAgent } from './terminal-agent' import type { TuiAgent } from '../../agent-launch/catalog/tui-agent' /** All adapters delegate here so ranking, ambiguity and run eligibility cannot drift. */ diff --git a/src/shared/agent-status/identity/pane-agent-identity-resolver.ts b/src/shared/agent-status/identity/pane-agent-identity-resolver.ts index 4c5262972cd..a95a442bfc2 100644 --- a/src/shared/agent-status/identity/pane-agent-identity-resolver.ts +++ b/src/shared/agent-status/identity/pane-agent-identity-resolver.ts @@ -1,6 +1,6 @@ import { resolveCanonicalPaneAgentEvidence } from './pane-agent-identity-adapter' import type { PaneAgentEvidenceSource } from './pane-agent-evidence-sources' -import type { TerminalAgent } from '../../terminal-agent' +import type { TerminalAgent } from './terminal-agent' /** Rank identity by direct process evidence, with titles last. Discard superseded runs rather than merely ranking them lower: * completed-hook A/title B means stale title in the current run, but legitimate reclaim when A belongs to a replaced run. diff --git a/src/shared/terminal-agent.ts b/src/shared/agent-status/identity/terminal-agent.ts similarity index 64% rename from src/shared/terminal-agent.ts rename to src/shared/agent-status/identity/terminal-agent.ts index f1e9c33cbf8..4ac19c5a61a 100644 --- a/src/shared/terminal-agent.ts +++ b/src/shared/agent-status/identity/terminal-agent.ts @@ -1,4 +1,4 @@ -import type { TuiAgent } from './agent-launch/catalog/tui-agent' +import type { TuiAgent } from '../../agent-launch/catalog/tui-agent' // Why: recognizing a manually started agent must not register an Orca launcher. export type TerminalAgent = TuiAgent | 'dsb' diff --git a/src/shared/agent-status/presentation/agent-row-conversation-name.ts b/src/shared/agent-status/presentation/agent-row-conversation-name.ts index 4c7af17797c..71a86f8eec6 100644 --- a/src/shared/agent-status/presentation/agent-row-conversation-name.ts +++ b/src/shared/agent-status/presentation/agent-row-conversation-name.ts @@ -6,7 +6,7 @@ import { formatAgentTypeLabel } from './agent-type-label' import { isJcodeIdentityTerminalTitle } from '../title/providers/jcode-terminal-title' import { isMeaningfulOpenCodeTerminalTitle } from '../title/providers/opencode-terminal-title' import { SYNTHETIC_AGENT_TITLE_PROFILES } from '../title/synthetic-agent-title' -import type { TerminalTab } from '../../terminal-tab-types' +import type { TerminalTab } from '../../workspace-layout/terminal-tab-types' export type ConversationNameTab = Pick< TerminalTab, diff --git a/src/shared/agent-status/presentation/agent-type-icon-agent.ts b/src/shared/agent-status/presentation/agent-type-icon-agent.ts index 2823e398af2..795915e62a2 100644 --- a/src/shared/agent-status/presentation/agent-type-icon-agent.ts +++ b/src/shared/agent-status/presentation/agent-type-icon-agent.ts @@ -1,5 +1,5 @@ import type { AgentType } from '../contracts/agent-status-types' -import type { TerminalAgent } from '../../terminal-agent' +import type { TerminalAgent } from '../identity/terminal-agent' import { isTuiAgent } from '../../agent-launch/catalog/tui-agent-config' const ICONABLE_AGENT_TYPES: Record = { diff --git a/src/shared/agent-status/process/agent-headless-command.ts b/src/shared/agent-status/process/agent-headless-command.ts index 399be4eede6..e8cfa96a7b2 100644 --- a/src/shared/agent-status/process/agent-headless-command.ts +++ b/src/shared/agent-status/process/agent-headless-command.ts @@ -7,7 +7,7 @@ import { isDsbHeadlessOneShotCommand } from './dsb-headless-command' import { isZCodeHeadlessOneShotCommand } from './zcode-headless-command' import { isPrimeAgentHeadlessOneShotCommand } from './prime-agent-headless-command' import { isPrintModeHeadlessOneShotCommand } from './print-mode-headless-command' -import type { TerminalAgent } from '../../terminal-agent' +import type { TerminalAgent } from '../identity/terminal-agent' // Agent-specific one-shot forms cannot accept pane prompts; DSH server/JSON-RPC modes must be excluded too. const HEADLESS_ONE_SHOT_MATCHERS: Partial< diff --git a/src/shared/agent-status/process/agent-process-recognition.ts b/src/shared/agent-status/process/agent-process-recognition.ts index 4433b7e1282..88b836d7706 100644 --- a/src/shared/agent-status/process/agent-process-recognition.ts +++ b/src/shared/agent-status/process/agent-process-recognition.ts @@ -6,7 +6,7 @@ import { import { EXACT_NODE_ENTRYPOINT_IDENTITIES } from './agent-node-entrypoint-identities' import { NODE_PACKAGE_SCRIPT_ENTRYPOINTS } from './agent-node-package-entrypoints' import type { AgentType } from '../contracts/agent-status-types' -import type { TerminalAgent } from '../../terminal-agent' +import type { TerminalAgent } from '../identity/terminal-agent' import { filterHeadlessOneShotAgentCommand } from './agent-headless-command' import { getFirstCommandToken } from '../../command-token-scanner' import { diff --git a/src/shared/shell-process-detection.test.ts b/src/shared/agent-status/process/shell-process-detection.test.ts similarity index 100% rename from src/shared/shell-process-detection.test.ts rename to src/shared/agent-status/process/shell-process-detection.test.ts diff --git a/src/shared/shell-process-detection.ts b/src/shared/agent-status/process/shell-process-detection.ts similarity index 100% rename from src/shared/shell-process-detection.ts rename to src/shared/agent-status/process/shell-process-detection.ts diff --git a/src/shared/agent-status/title/agent-title-core.ts b/src/shared/agent-status/title/agent-title-core.ts index c565615dbb2..1238646f2d6 100644 --- a/src/shared/agent-status/title/agent-title-core.ts +++ b/src/shared/agent-status/title/agent-title-core.ts @@ -19,8 +19,8 @@ import { } from './agent-name-token-match' import { stripLeadingAgentTitleDecorationOrEmpty } from './agent-title-decoration' import { isLegacyPiCompatibleTitle } from './providers/pi-compatible-synthetic-title' -import { memoizeTitleClassification } from '../../terminal-title-classification-memo' -import { getWrapperTitleSegments } from '../../terminal-title-wrapper-segments' +import { memoizeTitleClassification } from './terminal-title-classification-memo' +import { getWrapperTitleSegments } from './terminal-title-wrapper-segments' export type AgentStatus = 'working' | 'permission' | 'idle' diff --git a/src/shared/agent-status/title/agent-title-evidence.ts b/src/shared/agent-status/title/agent-title-evidence.ts index 3024b7f415c..3ab626f3ef5 100644 --- a/src/shared/agent-status/title/agent-title-evidence.ts +++ b/src/shared/agent-status/title/agent-title-evidence.ts @@ -34,7 +34,7 @@ import { SYNTHETIC_AGENT_TITLE_AGENTS, SYNTHETIC_AGENT_TITLE_PROFILES } from './synthetic-agent-title' -import type { TerminalAgent } from '../../terminal-agent' +import type { TerminalAgent } from '../identity/terminal-agent' import { agentForNativeFrame, agentForNamedTitlePrefix, diff --git a/src/shared/agent-status/title/agent-title-identity.ts b/src/shared/agent-status/title/agent-title-identity.ts index ceef33d2f34..706e9045106 100644 --- a/src/shared/agent-status/title/agent-title-identity.ts +++ b/src/shared/agent-status/title/agent-title-identity.ts @@ -19,7 +19,7 @@ import { getPiCompatibleSyntheticAgentLabel, getPiCompatibleTitleBrand } from './providers/pi-compatible-synthetic-title' -import { memoizeTitleClassification } from '../../terminal-title-classification-memo' +import { memoizeTitleClassification } from './terminal-title-classification-memo' /** Scope prompt-cache timers to Claude title conventions. */ function computeIsClaudeAgent(title: string): boolean { diff --git a/src/shared/agent-status/title/agent-title-name-anchoring.ts b/src/shared/agent-status/title/agent-title-name-anchoring.ts index 1c0637cf643..795a900dd78 100644 --- a/src/shared/agent-status/title/agent-title-name-anchoring.ts +++ b/src/shared/agent-status/title/agent-title-name-anchoring.ts @@ -6,7 +6,7 @@ import { } from './agent-name-token-match' import { isCursorAgentTitle } from './agent-title-core' import { stripLeadingAgentTitleDecorationOrEmpty } from './agent-title-decoration' -import type { TerminalAgent } from '../../terminal-agent' +import type { TerminalAgent } from '../identity/terminal-agent' import { TUI_AGENT_DISPLAY_NAMES } from '../../agent-launch/catalog/tui-agent-display-names' /** Names matched as whole tokens, paired with the agent each identifies. */ diff --git a/src/shared/agent-status/title/agent-title-owner.ts b/src/shared/agent-status/title/agent-title-owner.ts index 0c95e26a732..b3e807b9fde 100644 --- a/src/shared/agent-status/title/agent-title-owner.ts +++ b/src/shared/agent-status/title/agent-title-owner.ts @@ -12,7 +12,7 @@ import { isLegacyPiCompatibleTitle, rebrandPiCompatibleTitle } from './providers/pi-compatible-synthetic-title' -import { getWrapperTitleSegments } from '../../terminal-title-wrapper-segments' +import { getWrapperTitleSegments } from './terminal-title-wrapper-segments' type TitleProfileMatch = { profile: SyntheticAgentTitleProfile diff --git a/src/shared/agent-status/title/agent-title-status.ts b/src/shared/agent-status/title/agent-title-status.ts index a1f93b6603d..9a556fd591e 100644 --- a/src/shared/agent-status/title/agent-title-status.ts +++ b/src/shared/agent-status/title/agent-title-status.ts @@ -26,19 +26,20 @@ import { isPiAgentTitle, isPiTerminalTitle, isGeminiTerminalTitle, - isGrokRotatingWorkingTitle + isGrokRotatingWorkingTitle, + type AgentStatus } from './agent-title-core' import { isDshTerminalTitle } from './providers/dsh-terminal-title' -import type { AgentStatus } from './agent-title-core' + import { isOpenCodeNativeTitle } from './providers/opencode-terminal-title' import { getPiCompatibleTitleSeparatorStatus, getPiCompatibleSyntheticAgentStatus } from './providers/pi-compatible-synthetic-title' import { getPiStateTitleStatus } from './providers/pi-state-title-marker' -import { getWrapperTitleSegments } from '../../terminal-title-wrapper-segments' -import { resolveExplicitTerminalTitleAgentType } from '../../terminal-title-agent-type' -import { memoizeTitleClassification } from '../../terminal-title-classification-memo' +import { getWrapperTitleSegments } from './terminal-title-wrapper-segments' +import { resolveExplicitTerminalTitleAgentType } from './terminal-title-agent-type' +import { memoizeTitleClassification } from './terminal-title-classification-memo' /** Where a working agent settled: at rest, or on a prompt that needs the user. */ export type AgentIdleStatus = Exclude diff --git a/src/shared/agent-status/title/providers/dsb-terminal-title.ts b/src/shared/agent-status/title/providers/dsb-terminal-title.ts index 2a3a7b0691a..8d0a30e2df9 100644 --- a/src/shared/agent-status/title/providers/dsb-terminal-title.ts +++ b/src/shared/agent-status/title/providers/dsb-terminal-title.ts @@ -8,7 +8,7 @@ import { } from '../agent-title-glyphs' import { isDshTerminalTitle } from './dsh-terminal-title' import type { AgentStatus } from '../agent-title-core' -import { getWrapperTitleSegments } from '../../../terminal-title-wrapper-segments' +import { getWrapperTitleSegments } from '../terminal-title-wrapper-segments' const DSB_TITLE_RE = /(?:^| - )deepseek build$/i // Why: DSB separates its spinner with " - "; a Claude task can end on the same suffix. diff --git a/src/shared/terminal-title-agent-type.test.ts b/src/shared/agent-status/title/terminal-title-agent-type.test.ts similarity index 97% rename from src/shared/terminal-title-agent-type.test.ts rename to src/shared/agent-status/title/terminal-title-agent-type.test.ts index 0fef58974f9..d0b1ff3a234 100644 --- a/src/shared/terminal-title-agent-type.test.ts +++ b/src/shared/agent-status/title/terminal-title-agent-type.test.ts @@ -1,11 +1,8 @@ import { describe, expect, it } from 'vitest' -import { getAgentLabel as getSharedAgentLabel } from './agent-status/title/agent-title-identity' -import { resolveTabAgentFromSignals } from './tab-agent-from-signals' -import { isOpenCodeNativeTitle } from './agent-status/title/providers/opencode-terminal-title' -import { - isClaudeIdentityFrameTitle, - isGrokRotatingWorkingTitle -} from './agent-status/title/agent-title-core' +import { getAgentLabel as getSharedAgentLabel } from './agent-title-identity' +import { resolveTabAgentFromSignals } from '../../tab-agent-from-signals' +import { isOpenCodeNativeTitle } from './providers/opencode-terminal-title' +import { isClaudeIdentityFrameTitle, isGrokRotatingWorkingTitle } from './agent-title-core' import { resolveExplicitTerminalTitleAgentType, resolveTerminalTitleAgentType, diff --git a/src/shared/terminal-title-agent-type.ts b/src/shared/agent-status/title/terminal-title-agent-type.ts similarity index 91% rename from src/shared/terminal-title-agent-type.ts rename to src/shared/agent-status/title/terminal-title-agent-type.ts index 2beafc8f812..59518d183c5 100644 --- a/src/shared/terminal-title-agent-type.ts +++ b/src/shared/agent-status/title/terminal-title-agent-type.ts @@ -1,25 +1,25 @@ -import { collectExplicitAgentTitleEvidence } from './agent-status/title/agent-title-evidence' -import { isQoderTerminalTitle } from './agent-status/title/providers/qoder-terminal-title' +import { collectExplicitAgentTitleEvidence } from './agent-title-evidence' +import { isQoderTerminalTitle } from './providers/qoder-terminal-title' import { AGY_AGENT_NAME_RE, DROID_AGENT_NAME_RE, HERMES_AGENT_NAME_RE, titleHasAgentName -} from './agent-status/title/agent-name-token-match' -import { containsAgentSpinnerGlyph } from './agent-status/title/agent-title-glyphs' -import { isCursorAgentTitle } from './agent-status/title/agent-title-core' -import { isDshTerminalTitle } from './agent-status/title/providers/dsh-terminal-title' -import { isDeepSeekBuildTerminalTitle } from './agent-status/title/providers/dsb-terminal-title' +} from './agent-name-token-match' +import { containsAgentSpinnerGlyph } from './agent-title-glyphs' +import { isCursorAgentTitle } from './agent-title-core' +import { isDshTerminalTitle } from './providers/dsh-terminal-title' +import { isDeepSeekBuildTerminalTitle } from './providers/dsb-terminal-title' -import { isOpenCodeNativeTitle } from './agent-status/title/providers/opencode-terminal-title' +import { isOpenCodeNativeTitle } from './providers/opencode-terminal-title' import { getPiCompatibleSyntheticAgentLabel, getPiCompatibleTitleBrand, isLegacyPiCompatibleTitle -} from './agent-status/title/providers/pi-compatible-synthetic-title' -import { resolveCanonicalPaneAgentIdentity } from './agent-status/identity/pane-agent-identity-adapter' +} from './providers/pi-compatible-synthetic-title' +import { resolveCanonicalPaneAgentIdentity } from '../identity/pane-agent-identity-adapter' import { memoizeTitleClassification } from './terminal-title-classification-memo' -import type { TerminalAgent } from './terminal-agent' +import type { TerminalAgent } from '../identity/terminal-agent' export const CLAUDE_IDLE = '\u2733' // ✳ (eight-spoked asterisk — Claude Code idle prefix) const CLAUDE_MANAGEMENT_TITLE_RE = diff --git a/src/shared/terminal-title-classification-corpus.ts b/src/shared/agent-status/title/terminal-title-classification-corpus.ts similarity index 100% rename from src/shared/terminal-title-classification-corpus.ts rename to src/shared/agent-status/title/terminal-title-classification-corpus.ts diff --git a/src/shared/terminal-title-classification-memo.ts b/src/shared/agent-status/title/terminal-title-classification-memo.ts similarity index 87% rename from src/shared/terminal-title-classification-memo.ts rename to src/shared/agent-status/title/terminal-title-classification-memo.ts index dbbc16349c4..d7012f23170 100644 --- a/src/shared/terminal-title-classification-memo.ts +++ b/src/shared/agent-status/title/terminal-title-classification-memo.ts @@ -1,5 +1,5 @@ /** Pure title classifiers can reuse verdicts across unrelated store writes; changed titles become new keys, so no invalidation signal is needed. */ -import { memoizeStringResult } from './string-result-cache' +import { memoizeStringResult } from '../../string-result-cache' /** Bound growth across session length while keeping the live pane/title working set cached. */ const MAX_MEMOIZED_TITLES = 1024 diff --git a/src/shared/terminal-title-wrapper-segments.ts b/src/shared/agent-status/title/terminal-title-wrapper-segments.ts similarity index 100% rename from src/shared/terminal-title-wrapper-segments.ts rename to src/shared/agent-status/title/terminal-title-wrapper-segments.ts diff --git a/src/shared/ai-vault/resume/ai-vault-resume-command.ts b/src/shared/ai-vault/resume/ai-vault-resume-command.ts index a5275f73a86..d417c91b0f5 100644 --- a/src/shared/ai-vault/resume/ai-vault-resume-command.ts +++ b/src/shared/ai-vault/resume/ai-vault-resume-command.ts @@ -1,5 +1,5 @@ // Build history resume lines for the execution platform and actual shell. -import { quoteCmdDoubleQuoted } from '../../shell-argument-quoting' +import { quoteCmdDoubleQuoted } from '../../shell/launch/shell-argument-quoting' import { isAntigravityReferenceSession, antigravityTranscriptReferencePrompt diff --git a/src/shared/claimed-agent-pty-owner.ts b/src/shared/claimed-agent-pty-owner.ts index 5be637d9b69..014f478d926 100644 --- a/src/shared/claimed-agent-pty-owner.ts +++ b/src/shared/claimed-agent-pty-owner.ts @@ -1,5 +1,5 @@ -import type { PtyCreationDisposition } from './pty-creation-disposition' -export type { PtyCreationDisposition } from './pty-creation-disposition' +import type { PtyCreationDisposition } from './terminal/pty/lifecycle/pty-creation-disposition' + import { randomUUID } from 'node:crypto' import type { AgentSessionClaimedSpawnResult, diff --git a/src/shared/claude-background-task-status.test.ts b/src/shared/claude-background-task-status.test.ts index fda30650410..737793ba481 100644 --- a/src/shared/claude-background-task-status.test.ts +++ b/src/shared/claude-background-task-status.test.ts @@ -12,7 +12,7 @@ import { } from './agent-hook-listener/providers/claude-roster-state' import { normalizeHookPayload } from './agent-hook-listener/normalization/normalize-hook-payload' import { readClaudeBackgroundAgentTasks } from './claude-background-task-inventory' -import { makePaneKey } from './stable-pane-id' +import { makePaneKey } from './workspace-layout/stable-pane-id' const SOURCE_PANE = makePaneKey('tab-source', '11111111-1111-4111-8111-111111111111') const TARGET_PANE = makePaneKey('tab-target', '22222222-2222-4222-8222-222222222222') diff --git a/src/shared/claude-subagent-row-lifecycle.test.ts b/src/shared/claude-subagent-row-lifecycle.test.ts index 2238251cc43..7521698a73e 100644 --- a/src/shared/claude-subagent-row-lifecycle.test.ts +++ b/src/shared/claude-subagent-row-lifecycle.test.ts @@ -5,7 +5,7 @@ import { type HookListenerState } from './agent-hook-listener/listener-state' import { normalizeHookPayload } from './agent-hook-listener/normalization/normalize-hook-payload' -import { makePaneKey } from './stable-pane-id' +import { makePaneKey } from './workspace-layout/stable-pane-id' const LEAF_ID = '11111111-1111-4111-8111-111111111111' const PANE_KEY = makePaneKey('tab-1', LEAF_ID) diff --git a/src/shared/codex-subagent-rollout-lifecycle.test.ts b/src/shared/codex-subagent-rollout-lifecycle.test.ts index a9afda512b7..1702800b0d9 100644 --- a/src/shared/codex-subagent-rollout-lifecycle.test.ts +++ b/src/shared/codex-subagent-rollout-lifecycle.test.ts @@ -5,7 +5,7 @@ import { join } from 'node:path' import { createHookListenerState } from './agent-hook-listener/listener-state' import { normalizeHookPayload } from './agent-hook-listener/normalization/normalize-hook-payload' -import { makePaneKey } from './stable-pane-id' +import { makePaneKey } from './workspace-layout/stable-pane-id' const PANE_KEY = makePaneKey('tab-1', '11111111-1111-4111-8111-111111111111') const CHILD_ID = '019fa65f-3144-7151-9c02-cff7a28f316f' diff --git a/src/shared/constants.ts b/src/shared/constants.ts index 5d93985238f..9ef31b5abf1 100644 --- a/src/shared/constants.ts +++ b/src/shared/constants.ts @@ -3,7 +3,7 @@ import type { RepoHookSettings } from './orca-yaml-hook-types' import type { PersistedState } from './persisted-state-types' import type { PersistedUIState } from './persisted-ui-state-types' import type { AgentActivityDisplayMode } from './ui-chrome-types' -import type { WorkspaceSessionState } from './workspace-session-state-types' +import type { WorkspaceSessionState } from './workspace-session/workspace-session-state-types' import { EMPTY_CODEX_RESET_CREDIT_ATTEMPT_LEDGER } from './codex-reset-credit-attempt-ledger' import { DEFAULT_STATUS_BAR_ITEMS } from './status-bar-defaults' import type { VoiceSettings } from './speech-types' diff --git a/src/shared/ephemeral-vm-recipe-process.ts b/src/shared/ephemeral-vm-recipe-process.ts index bdda6e69502..320a72cfca9 100644 --- a/src/shared/ephemeral-vm-recipe-process.ts +++ b/src/shared/ephemeral-vm-recipe-process.ts @@ -1,4 +1,4 @@ -import { quoteCmdDoubleQuoted, quotePosixShell } from './shell-argument-quoting' +import { quoteCmdDoubleQuoted, quotePosixShell } from './shell/launch/shell-argument-quoting' import { spawn, type ChildProcessWithoutNullStreams } from 'node:child_process' import { StringDecoder } from 'node:string_decoder' import type { EphemeralVmRecipeContext } from './ephemeral-vm-recipe-runner' diff --git a/src/shared/fish-query-reply-child-stdin.node-pty.test.ts b/src/shared/fish-query-reply-child-stdin.node-pty.test.ts index 3d7aea61fd7..d6db812ea9f 100644 --- a/src/shared/fish-query-reply-child-stdin.node-pty.test.ts +++ b/src/shared/fish-query-reply-child-stdin.node-pty.test.ts @@ -6,7 +6,7 @@ import { tmpdir } from 'node:os' import path from 'node:path' import { afterEach, describe, expect, it } from 'vitest' import { fishRequirementViolation, resolveFishBinary } from './fish-binary-requirement' -import { PtyStartupIngress } from './pty-startup-ingress' +import { PtyStartupIngress } from './terminal/pty/ingress/pty-startup-ingress' // Why fish 4: the DA1-sentinel handoff this measures lives in the 4.0 Rust tty_handoff. const FISH = resolveFishBinary(4) diff --git a/src/shared/folder-workspaces/folder-workspace-types.ts b/src/shared/folder-workspaces/folder-workspace-types.ts index c2e3d8f7c37..8b47cffe8e9 100644 --- a/src/shared/folder-workspaces/folder-workspace-types.ts +++ b/src/shared/folder-workspaces/folder-workspace-types.ts @@ -12,12 +12,6 @@ import type { WorkspaceStatus } from '../worktree/types' -export type WorkspaceScope = - | { type: 'worktree'; worktreeId: string } - | { type: 'folder'; folderWorkspaceId: string } - -export type WorkspaceKey = `worktree:${string}` | `folder:${string}` - export type FolderWorkspace = { id: string projectGroupId: string diff --git a/src/shared/git/commands/git-ssh-policy-env.test.ts b/src/shared/git/commands/git-ssh-policy-env.test.ts index f5d8fafc7fa..771c7481c1a 100644 --- a/src/shared/git/commands/git-ssh-policy-env.test.ts +++ b/src/shared/git/commands/git-ssh-policy-env.test.ts @@ -2,7 +2,7 @@ import { chmod, mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises' import { tmpdir } from 'node:os' import path from 'node:path' import { runProcess } from '@orca/process-host' -import { quotePosixShell } from '../../shell-argument-quoting' +import { quotePosixShell } from '../../shell/launch/shell-argument-quoting' import { describe, expect, it } from 'vitest' import { buildGitSshPolicyEnv, parseGitSshConfig } from './git-ssh-policy-env' diff --git a/src/shared/git/commands/git-ssh-policy-env.ts b/src/shared/git/commands/git-ssh-policy-env.ts index f68d77ad969..347644a0730 100644 --- a/src/shared/git/commands/git-ssh-policy-env.ts +++ b/src/shared/git/commands/git-ssh-policy-env.ts @@ -1,5 +1,5 @@ import { isWindowsAbsolutePathLike } from '../../cross-platform-path' -import { quotePosixShell } from '../../shell-argument-quoting' +import { quotePosixShell } from '../../shell/launch/shell-argument-quoting' export type GitSshPolicyMode = | 'default' diff --git a/src/shared/image-path-paste.ts b/src/shared/image-path-paste.ts index 83c59e98169..062f8e34361 100644 --- a/src/shared/image-path-paste.ts +++ b/src/shared/image-path-paste.ts @@ -1,6 +1,6 @@ import { isWindowsAbsolutePathLike } from './cross-platform-path' import { IMAGE_FILE_EXTENSIONS } from './image-file-extensions' -import { shellEscapePath } from './shell-path-quoting' +import { shellEscapePath } from './shell/launch/shell-path-quoting' import { isWslUncPath } from './wsl-paths' type TerminalTargetShell = 'posix' | 'windows' diff --git a/src/shared/notification-attention-acknowledgement.ts b/src/shared/notification-attention-acknowledgement.ts index 35530b72e08..d0a4ebee7ee 100644 --- a/src/shared/notification-attention-acknowledgement.ts +++ b/src/shared/notification-attention-acknowledgement.ts @@ -7,7 +7,7 @@ import type { NotificationAttentionAcknowledgement, NotificationDispatchRequest } from './notification-settings-types' -import { toHostSessionPaneKey } from './terminal-surface-id' +import { toHostSessionPaneKey } from './workspace-layout/terminal-surface-id' type Announcement = Pick< NotificationDispatchRequest, diff --git a/src/shared/orcad-migration/orcad-migration-client-state-parsing.ts b/src/shared/orcad-migration/orcad-migration-client-state-parsing.ts index 31b10c3b4fa..30cdbc9effa 100644 --- a/src/shared/orcad-migration/orcad-migration-client-state-parsing.ts +++ b/src/shared/orcad-migration/orcad-migration-client-state-parsing.ts @@ -1,8 +1,5 @@ import { parseHostStableKey } from '../automation-owner-key' -import { - MAX_CLIENT_HOSTED_BROWSER_CLOSE_INTENTS, - type ClientHostedBrowserCloseIntent -} from '../client-hosted-browser-close-intent' +import { MAX_CLIENT_HOSTED_BROWSER_CLOSE_INTENTS as MAX_ORCAD_MIGRATION_CLIENT_HOSTED_BROWSER_CLOSE_INTENTS } from '../workspace-session/client-hosted-browser-close-intent' import type { OrcadMigrationClientHostedBrowserCloseIntent, OrcadMigrationUiRoutingState @@ -23,8 +20,6 @@ import { requiredRecord } from './orcad-migration-dormant-value-validation' export const MAX_ORCAD_MIGRATION_CLIENT_SELECTIONS = 4_096 export const MAX_ORCAD_MIGRATION_CLIENT_ROUTING_ENTRIES = 16_384 export const MAX_ORCAD_MIGRATION_SAVED_PORT_FORWARDS = 256 -export const MAX_ORCAD_MIGRATION_CLIENT_HOSTED_BROWSER_CLOSE_INTENTS = - MAX_CLIENT_HOSTED_BROWSER_CLOSE_INTENTS export function parseClientHostedBrowserCloseIntents( value: unknown @@ -250,5 +245,3 @@ export function parseUiRouting(value: unknown): OrcadMigrationUiRoutingState { export function parseSavedPortForwards(value: unknown): SavedPortForward[] { return parseSavedPortForwardsValue(value, MAX_ORCAD_MIGRATION_SAVED_PORT_FORWARDS) } - -export type { ClientHostedBrowserCloseIntent } diff --git a/src/shared/orcad-migration/orcad-migration-client-state.ts b/src/shared/orcad-migration/orcad-migration-client-state.ts index 283011dc10c..3e6535984bc 100644 --- a/src/shared/orcad-migration/orcad-migration-client-state.ts +++ b/src/shared/orcad-migration/orcad-migration-client-state.ts @@ -15,7 +15,7 @@ import { } from './orcad-migration-client-state-parsing' import { isWorkspaceHostId } from './orcad-migration-client-state-value-validation' import { isRecord } from './orcad-migration-manifest-fields' -import type { ClientHostedBrowserCloseIntent } from '../client-hosted-browser-close-intent' +import type { ClientHostedBrowserCloseIntent } from '../workspace-session/client-hosted-browser-close-intent' export type OrcadMigrationUiRoutingState = { lastActiveRepoId?: string | null diff --git a/src/shared/orcad-migration/orcad-migration-dormant-session-validation.test.ts b/src/shared/orcad-migration/orcad-migration-dormant-session-validation.test.ts index 0215ee38815..94accf19902 100644 --- a/src/shared/orcad-migration/orcad-migration-dormant-session-validation.test.ts +++ b/src/shared/orcad-migration/orcad-migration-dormant-session-validation.test.ts @@ -3,11 +3,11 @@ import { getDefaultWorkspaceSession } from '../constants' import { CLIENT_HOSTED_BROWSER_PAGE_RECORD_VERSION, type PersistedClientHostedBrowserPage -} from '../client-hosted-browser-page-record' +} from '../workspace-session/client-hosted-browser-page-record' import type { BrowserWorkspace } from '../browser-workspace-types' import { assertOrcadMigrationDormantWorkspaceSessionReferences } from './orcad-migration-dormant-session-validation' import { parseOrcadMigrationClientState } from './orcad-migration-client-state' -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' const OWNER = 'repo-1::/srv/worktree' const BROWSER_WORKSPACE_ID = 'browser-workspace-1' diff --git a/src/shared/orcad-migration/orcad-migration-dormant-session-validation.ts b/src/shared/orcad-migration/orcad-migration-dormant-session-validation.ts index 2b7aeddb3b2..052b853c7e1 100644 --- a/src/shared/orcad-migration/orcad-migration-dormant-session-validation.ts +++ b/src/shared/orcad-migration/orcad-migration-dormant-session-validation.ts @@ -1,6 +1,9 @@ -import type { WorkspaceSessionState } from '../workspace-session-state-types' -import { parseWorkspaceSession } from '../workspace-session-schema' -import { ownedEditorFileId, paneBelongsToTerminalLayout } from '../workspace-session-pane-ownership' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' +import { parseWorkspaceSession } from '../workspace-session/workspace-session-schema' +import { + ownedEditorFileId, + paneBelongsToTerminalLayout +} from '../workspace-session/workspace-session-pane-ownership' export function parseOrcadMigrationDormantWorkspaceSession(value: unknown): WorkspaceSessionState { const parsed = parseWorkspaceSession(value) diff --git a/src/shared/orcad-migration/orcad-migration-manifest.ts b/src/shared/orcad-migration/orcad-migration-manifest.ts index 4a45053e6d8..24622b0dc1e 100644 --- a/src/shared/orcad-migration/orcad-migration-manifest.ts +++ b/src/shared/orcad-migration/orcad-migration-manifest.ts @@ -7,7 +7,7 @@ import type { SparsePreset } from '../worktree/create-types' import type { WorkspaceLineage, WorktreeLineage } from '../worktree/lineage-types' import type { WorktreeMeta } from '../worktree/meta-types' import type { RetiredNameRegistry } from '../worktree/retired-name-registry' -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' import type { OrcadMigrationClientStatePayload } from './orcad-migration-client-state' import type { OrcadMigrationSnapshotUploadState, diff --git a/src/shared/orcad-migration/orcad-migration-scrollback.ts b/src/shared/orcad-migration/orcad-migration-scrollback.ts index 5bf52eaef12..240e40b0f4f 100644 --- a/src/shared/orcad-migration/orcad-migration-scrollback.ts +++ b/src/shared/orcad-migration/orcad-migration-scrollback.ts @@ -1,6 +1,6 @@ import { z } from 'zod' import { TERMINAL_SCROLLBACK_STORE_BYTE_LIMIT } from '../terminal/replay/terminal-scrollback-limits' -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' import { assertUnique, boundedArray, diff --git a/src/shared/orcad-migration/orcad-migration-terminal-history.ts b/src/shared/orcad-migration/orcad-migration-terminal-history.ts index 271f6185146..2070b883c0c 100644 --- a/src/shared/orcad-migration/orcad-migration-terminal-history.ts +++ b/src/shared/orcad-migration/orcad-migration-terminal-history.ts @@ -5,8 +5,8 @@ */ import { z } from 'zod' import { MAX_PANE_KEY_LEN } from '../agent-hook-listener/listener-limits' -import { PTY_SESSION_ID_SEPARATOR } from '../pty-session-id-format' -import { parsePaneKey } from '../stable-pane-id' +import { PTY_SESSION_ID_SEPARATOR } from '../terminal/pty/lifecycle/pty-session-id-format' +import { parsePaneKey } from '../workspace-layout/stable-pane-id' import { isOrcadMigrationTerminalRestoreHintCwd } from './orcad-migration-terminal-restore-hints' export const ORCAD_MIGRATION_TERMINAL_HISTORY_VERSION = 1 diff --git a/src/shared/orcad-migration/orcad-migration-terminal-restore-hints.ts b/src/shared/orcad-migration/orcad-migration-terminal-restore-hints.ts index 8cd91ececbb..80f6ffc738d 100644 --- a/src/shared/orcad-migration/orcad-migration-terminal-restore-hints.ts +++ b/src/shared/orcad-migration/orcad-migration-terminal-restore-hints.ts @@ -2,7 +2,7 @@ import { z } from 'zod' import { MAX_PANE_KEY_LEN } from '../agent-hook-listener/listener-limits' import { ORCAD_MIGRATION_BLOB_KIND_CONTRACTS } from './orcad-migration-blob-transfer' -import { parsePaneKey } from '../stable-pane-id' +import { parsePaneKey } from '../workspace-layout/stable-pane-id' export const ORCAD_MIGRATION_TERMINAL_RESTORE_HINTS_VERSION = 1 export const ORCAD_MIGRATION_TERMINAL_RESTORE_HINTS_KEY = 'migration' diff --git a/src/shared/orcad-stale-lock-reclaim.ts b/src/shared/orcad-stale-lock-reclaim.ts index d350c919a47..a57e9dbed4c 100644 --- a/src/shared/orcad-stale-lock-reclaim.ts +++ b/src/shared/orcad-stale-lock-reclaim.ts @@ -1,6 +1,6 @@ /** Explicit lock recovery for cases automatic startup cannot judge, such as shared-home reboot (#32177). * Dependency-free so clients, CLI and launcher share the command/result. */ -import { quotePosixShellUnlessPlain } from './shell-argument-quoting' +import { quotePosixShellUnlessPlain } from './shell/launch/shell-argument-quoting' export const ORCAD_RECLAIM_STALE_LOCK_FLAG = '--reclaim-stale-lock' export const ORCAD_STALE_LOCK_DATA_ROOT_FLAG = '--data-root' diff --git a/src/shared/orchestration-worker-output.ts b/src/shared/orchestration-worker-output.ts index bde0a845b08..6fecd9e3974 100644 --- a/src/shared/orchestration-worker-output.ts +++ b/src/shared/orchestration-worker-output.ts @@ -3,7 +3,7 @@ import type { AgentType } from './agent-status/contracts/agent-status-types' import type { NativeChatMessage } from './native-chat/native-chat-types' import type { OrchestrationFleetWorker } from './orchestration-fleet-projection' import type { RuntimeTerminalRead, RuntimeTerminalState } from './runtime-types' -import type { PtyLivenessVerdict } from './pty-liveness-verdict' +import type { PtyLivenessVerdict } from './terminal/pty/lifecycle/pty-liveness-verdict' export const ORCHESTRATION_WORKER_READ_SOURCES = ['auto', 'transcript', 'terminal'] as const export type OrchestrationWorkerReadSource = (typeof ORCHESTRATION_WORKER_READ_SOURCES)[number] diff --git a/src/shared/pane-key-alias.test.ts b/src/shared/pane-key-alias.test.ts index 01ae50b49bd..c4ad80fe6f8 100644 --- a/src/shared/pane-key-alias.test.ts +++ b/src/shared/pane-key-alias.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import { makePaneKey } from './stable-pane-id' +import { makePaneKey } from './workspace-layout/stable-pane-id' import { canRegisterPaneKeyAlias, isOpaqueRemintedPaneKey } from './pane-key-alias' const CANONICAL = makePaneKey('tab-1', '11111111-1111-4111-8111-111111111111') diff --git a/src/shared/pane-key-alias.ts b/src/shared/pane-key-alias.ts index 11b1091e171..43818c09755 100644 --- a/src/shared/pane-key-alias.ts +++ b/src/shared/pane-key-alias.ts @@ -1,5 +1,5 @@ import { MAX_PANE_KEY_LEN } from './agent-hook-listener/listener-limits' -import { parseLegacyNumericPaneKey, parsePaneKey } from './stable-pane-id' +import { parseLegacyNumericPaneKey, parsePaneKey } from './workspace-layout/stable-pane-id' // Only exact opaque remint tokens ($$:L$$) may alias physical pane keys; hook ingress expects tabId:leafUuid. const OPAQUE_REMINTED_PANE_KEY_RE = /^\$\$[A-Za-z2-7]{8,64}:L\$\$$/ diff --git a/src/shared/persisted-state-types.ts b/src/shared/persisted-state-types.ts index 18adce67eab..5d290f53f7b 100644 --- a/src/shared/persisted-state-types.ts +++ b/src/shared/persisted-state-types.ts @@ -11,7 +11,8 @@ import type { FeatureInteractionTelemetryBucketState } from './feature-interacti import type { CodexResetCreditAttemptLedger } from './codex-reset-credit-attempt-ledger' import type { ChatUiLaunchTipAudience } from './native-chat/chat-ui-launch-tip-audience' import type { DiffComment } from './diff-comment-types' -import type { FolderWorkspace, WorkspaceKey } from './folder-workspaces/folder-workspace-types' +import type { FolderWorkspace } from './folder-workspaces/folder-workspace-types' +import type { WorkspaceKey } from './workspace-scope' import type { GlobalSettings } from './global-settings-types' import type { IssueInfo, PRInfo } from './github/pull-request-types' import type { OnboardingState } from './onboarding-state-types' @@ -25,7 +26,7 @@ import type { SparsePreset } from './worktree/create-types' import type { RetiredNameRegistry } from './worktree/retired-name-registry' import type { WorkspaceLineage, WorktreeLineage } from './worktree/lineage-types' import type { WorktreeMeta } from './worktree/meta-types' -import type { WorkspaceSessionState } from './workspace-session-state-types' +import type { WorkspaceSessionState } from './workspace-session/workspace-session-state-types' import type { OrcadMigrationEvictedReceipt } from './orcad-migration/orcad-migration-evicted-receipts' import type { OrcadMigrationImportReceipt, diff --git a/src/shared/posix-command-path-lookup.ts b/src/shared/posix-command-path-lookup.ts index 442b054a4eb..95f3064016b 100644 --- a/src/shared/posix-command-path-lookup.ts +++ b/src/shared/posix-command-path-lookup.ts @@ -1,4 +1,4 @@ -import { quotePosixShell } from './shell-argument-quoting' +import { quotePosixShell } from './shell/launch/shell-argument-quoting' export type PosixCommandPathLookupTarget = | { kind: 'literal'; value: string } diff --git a/src/shared/terminal-agent-status-processor.test.ts b/src/shared/program-status/terminal-agent-status-processor.test.ts similarity index 100% rename from src/shared/terminal-agent-status-processor.test.ts rename to src/shared/program-status/terminal-agent-status-processor.test.ts diff --git a/src/shared/terminal-agent-status-processor.ts b/src/shared/program-status/terminal-agent-status-processor.ts similarity index 87% rename from src/shared/terminal-agent-status-processor.ts rename to src/shared/program-status/terminal-agent-status-processor.ts index b0523cb8ec6..b78a0e5ebce 100644 --- a/src/shared/terminal-agent-status-processor.ts +++ b/src/shared/program-status/terminal-agent-status-processor.ts @@ -1,16 +1,13 @@ -import type { AgentStatus } from './agent-status/title/agent-title-core' -import type { ParsedAgentStatusPayload } from './agent-status/contracts/agent-status-types' +import type { AgentStatus } from '../agent-status/title/agent-title-core' +import type { ParsedAgentStatusPayload } from '../agent-status/contracts/agent-status-types' import { createAgentStatusOscProcessor, type ProcessedAgentStatusChunk, type ProgramActivityChange -} from './agent-status/transport/agent-status-osc' -import { programStatusActivity } from './program-status/activity' -import { - createProgramStatusProjector, - type ProgramStatusPayload -} from './program-status/agent-status-projector' -import type { ProgramStatusFacet } from './program-status/facet' +} from '../agent-status/transport/agent-status-osc' +import { programStatusActivity } from './activity' +import { createProgramStatusProjector, type ProgramStatusPayload } from './agent-status-projector' +import type { ProgramStatusFacet } from './facet' type OffsetPayload = { payload: ParsedAgentStatusPayload; offset: number } diff --git a/src/shared/published-pane-agent-identity.ts b/src/shared/published-pane-agent-identity.ts index ce231fac214..d1e2268239b 100644 --- a/src/shared/published-pane-agent-identity.ts +++ b/src/shared/published-pane-agent-identity.ts @@ -1,6 +1,6 @@ import { collectAgentTitleEvidence } from './agent-status/title/agent-title-evidence' import { resolvePaneAgentIdentity } from './agent-status/identity/pane-agent-identity-resolver' -import type { TerminalAgent } from './terminal-agent' +import type { TerminalAgent } from './agent-status/identity/terminal-agent' import type { TuiAgent } from './agent-launch/catalog/tui-agent' /** Publish one host identity decision for routing/delivery/UI. Live hooks identify launcher-, shell- and resume-started agents. diff --git a/src/shared/remote-runtime/remote-runtime-pty-id.test.ts b/src/shared/remote-runtime/remote-runtime-pty-id.test.ts index ac03a176041..e0e51847d0e 100644 --- a/src/shared/remote-runtime/remote-runtime-pty-id.test.ts +++ b/src/shared/remote-runtime/remote-runtime-pty-id.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import { isRemoteRuntimePtyId, parseRemoteRuntimePtyId } from './remote-runtime-pty-id' -import { getPtyExecutionHost } from '../terminal-execution-host' +import { getPtyExecutionHost } from '../terminal/pty/lifecycle/terminal-execution-host' describe('isRemoteRuntimePtyId', () => { // Pins the merge of the prefix-only and parse-based copies: an unparseable `remote:` id still diff --git a/src/shared/rpc-contract/agent-launch-params.pre-observation.test-fixture.ts b/src/shared/rpc-contract/agent-launch-params.pre-observation.test-fixture.ts index 0ffa20e5ff7..fbfee108990 100644 --- a/src/shared/rpc-contract/agent-launch-params.pre-observation.test-fixture.ts +++ b/src/shared/rpc-contract/agent-launch-params.pre-observation.test-fixture.ts @@ -6,8 +6,8 @@ import { AGENT_LAUNCH_SURFACES } from '../agent-launch/contracts/agent-launch-su import { z } from 'zod' import { isAgentSessionOptions } from '../agent-session/lifecycle/agent-session-record' import { parseAgentSessionOperationTimestamp } from '../agent-session/agent-session-host-authority' -import { parsePaneKey } from '../stable-pane-id' -import { isValidHostTerminalTabId } from '../terminal-tab-id' +import { parsePaneKey } from '../workspace-layout/stable-pane-id' +import { isValidHostTerminalTabId } from '../workspace-layout/terminal-tab-id' import { isTuiAgent } from '../agent-launch/catalog/tui-agent-config' import type { TuiAgent } from '../agent-launch/catalog/tui-agent' import { WorktreeCreate } from './worktree-create-params.pre-observation.test-fixture' diff --git a/src/shared/rpc-contract/agent-launch-params.ts b/src/shared/rpc-contract/agent-launch-params.ts index 1d5d11e0def..d518de757e0 100644 --- a/src/shared/rpc-contract/agent-launch-params.ts +++ b/src/shared/rpc-contract/agent-launch-params.ts @@ -5,8 +5,8 @@ import { AGENT_LAUNCH_SURFACES } from '../agent-launch/contracts/agent-launch-su import { z } from 'zod' import { isAgentSessionOptions } from '../agent-session/lifecycle/agent-session-record' import { parseAgentSessionOperationTimestamp } from '../agent-session/agent-session-host-authority' -import { parsePaneKey } from '../stable-pane-id' -import { isValidHostTerminalTabId } from '../terminal-tab-id' +import { parsePaneKey } from '../workspace-layout/stable-pane-id' +import { isValidHostTerminalTabId } from '../workspace-layout/terminal-tab-id' import { isTuiAgent } from '../agent-launch/catalog/tui-agent-config' import type { TuiAgent } from '../agent-launch/catalog/tui-agent' import { WorktreeCreate } from './worktree-create-params' diff --git a/src/shared/rpc-contract/agent-session-params.ts b/src/shared/rpc-contract/agent-session-params.ts index 4f3e6058901..4c4455bda19 100644 --- a/src/shared/rpc-contract/agent-session-params.ts +++ b/src/shared/rpc-contract/agent-session-params.ts @@ -1,5 +1,5 @@ import { z } from 'zod' -import { isValidTerminalTabId } from '../terminal-tab-id' +import { isValidTerminalTabId } from '../workspace-layout/terminal-tab-id' import { RESUMABLE_TUI_AGENTS, hasUnsafeProviderSessionIdChars diff --git a/src/shared/rpc-contract/session-tabs-schemas-params.ts b/src/shared/rpc-contract/session-tabs-schemas-params.ts index de69f658953..72d75a1dc0f 100644 --- a/src/shared/rpc-contract/session-tabs-schemas-params.ts +++ b/src/shared/rpc-contract/session-tabs-schemas-params.ts @@ -2,7 +2,7 @@ import { z } from 'zod' import { RUNTIME_NAVIGATION_TARGETS } from '../runtime-navigation' import { TAB_ACTIVATION_INTENTS } from '../tab-activation-intent' import { OptionalBoolean } from './rpc-param-primitives' -import { sleepingAgentLaunchConfigSchema } from '../workspace-session-sleeping-agents' +import { sleepingAgentLaunchConfigSchema } from '../workspace-session/workspace-session-sleeping-agents' import type { TuiAgent } from '../agent-launch/catalog/tui-agent' import { isTuiAgent } from '../agent-launch/catalog/tui-agent-config' import { LEGACY_MAX_QUICK_COMMAND_AGENT_PROMPT_LENGTH } from '../terminal/quick-commands/terminal-quick-command-prompt-limit' diff --git a/src/shared/rpc-contract/terminal-orphan-params.ts b/src/shared/rpc-contract/terminal-orphan-params.ts index 2a14c2b72c3..636198c2d4d 100644 --- a/src/shared/rpc-contract/terminal-orphan-params.ts +++ b/src/shared/rpc-contract/terminal-orphan-params.ts @@ -2,8 +2,10 @@ import { z } from 'zod' import type { TabGroupLayoutNode } from '../tab-types' import { OptionalString, requiredString } from './rpc-param-primitives' import { TerminalPaneLayoutNodeSchema } from './session-tabs-schemas-params' -import { isPtyIncarnationId } from '../pty-incarnation' -import type { PtyIncarnationId } from '../pty-incarnation' +import { + isPtyIncarnationId, + type PtyIncarnationId +} from '../terminal/pty/lifecycle/pty-incarnation' export function parseOrphanGroupLayout(value: unknown): TabGroupLayoutNode | null { const stack: { value: unknown; depth: number }[] = [{ value, depth: 0 }] diff --git a/src/shared/rpc-contract/workspace-layout-params.ts b/src/shared/rpc-contract/workspace-layout-params.ts index c1c096fede8..3864d51dfa6 100644 --- a/src/shared/rpc-contract/workspace-layout-params.ts +++ b/src/shared/rpc-contract/workspace-layout-params.ts @@ -1,5 +1,5 @@ import { z } from 'zod' -import { isTerminalLeafId } from '../stable-pane-id' +import { isTerminalLeafId } from '../workspace-layout/stable-pane-id' import { SleepCommand, StartPaneCommand, WakeCommand } from './workspace-layout-sleep-wake-params' import { RenameTabsCommand } from './workspace-layout-rename-tabs-params' import { EditorFileRecord, EditorViewRecord } from './workspace-layout-editor-file-params' diff --git a/src/shared/rpc-contract/workspace-layout-sleep-wake-params.ts b/src/shared/rpc-contract/workspace-layout-sleep-wake-params.ts index a9e3b639454..fb26e0bb9d0 100644 --- a/src/shared/rpc-contract/workspace-layout-sleep-wake-params.ts +++ b/src/shared/rpc-contract/workspace-layout-sleep-wake-params.ts @@ -1,6 +1,6 @@ import { z } from 'zod' -import { parsePaneKey } from '../stable-pane-id' -import { sleepingAgentSessionRecordSchema } from '../workspace-session-sleeping-agents' +import { parsePaneKey } from '../workspace-layout/stable-pane-id' +import { sleepingAgentSessionRecordSchema } from '../workspace-session/workspace-session-sleeping-agents' // copied, not imported: import cycle const OnTab = { workspace: z.string().min(1), tabId: z.string().min(1) } diff --git a/src/shared/rpc-contract/workspace-layout-terminal-tab-params.ts b/src/shared/rpc-contract/workspace-layout-terminal-tab-params.ts index 5784b52ec75..35c03102497 100644 --- a/src/shared/rpc-contract/workspace-layout-terminal-tab-params.ts +++ b/src/shared/rpc-contract/workspace-layout-terminal-tab-params.ts @@ -1,6 +1,6 @@ import { z } from 'zod' -import { isTerminalLeafId } from '../stable-pane-id' -import { isValidHostTerminalTabId } from '../terminal-tab-id' +import { isTerminalLeafId } from '../workspace-layout/stable-pane-id' +import { isValidHostTerminalTabId } from '../workspace-layout/terminal-tab-id' import type { TuiAgent } from '../agent-launch/catalog/tui-agent' import { isTuiAgent } from '../agent-launch/catalog/tui-agent-config' diff --git a/src/shared/rpc-contract/worktree-create-params.pre-observation.test-fixture.ts b/src/shared/rpc-contract/worktree-create-params.pre-observation.test-fixture.ts index 99845a374f2..21b49afa897 100644 --- a/src/shared/rpc-contract/worktree-create-params.pre-observation.test-fixture.ts +++ b/src/shared/rpc-contract/worktree-create-params.pre-observation.test-fixture.ts @@ -5,7 +5,7 @@ import { WorkspaceLinkedItemSchema } from '../workspace-attachments/workspace-li import { TaskSourceContextSchema } from '../task-source-context-schema' import { workspaceSourceSchema } from '../telemetry-events' import { RUNTIME_NAVIGATION_TARGETS } from '../runtime-navigation' -import { sleepingAgentLaunchConfigSchema } from '../workspace-session-sleeping-agents' +import { sleepingAgentLaunchConfigSchema } from '../workspace-session/workspace-session-sleeping-agents' import { isTuiAgent } from '../agent-launch/catalog/tui-agent-config' import { LaunchSourceParam } from './launch-source-param' import { diff --git a/src/shared/rpc-contract/worktree-create-params.ts b/src/shared/rpc-contract/worktree-create-params.ts index 03e915da364..c560e884dce 100644 --- a/src/shared/rpc-contract/worktree-create-params.ts +++ b/src/shared/rpc-contract/worktree-create-params.ts @@ -4,7 +4,7 @@ import { WorkspaceLinkedItemSchema } from '../workspace-attachments/workspace-li import { TaskSourceContextSchema } from '../task-source-context-schema' import { workspaceSourceSchema } from '../telemetry-events' import { RUNTIME_NAVIGATION_TARGETS } from '../runtime-navigation' -import { sleepingAgentLaunchConfigSchema } from '../workspace-session-sleeping-agents' +import { sleepingAgentLaunchConfigSchema } from '../workspace-session/workspace-session-sleeping-agents' import { isTuiAgent } from '../agent-launch/catalog/tui-agent-config' import { LaunchSourceParam } from './launch-source-param' import { diff --git a/src/shared/runtime-mobile-session-tab-contracts.ts b/src/shared/runtime-mobile-session-tab-contracts.ts index a6b7a1d4552..3a64709ee26 100644 --- a/src/shared/runtime-mobile-session-tab-contracts.ts +++ b/src/shared/runtime-mobile-session-tab-contracts.ts @@ -2,7 +2,7 @@ import type { AgentStatusEntry } from './agent-status/contracts/agent-status-typ import type { BrowserCertificateFailure, BrowserLoadError } from './browser-workspace-types' import type { RuntimeBrowserPlacement } from './runtime-browser-placement' import type { TerminalColorOverrides } from './terminal-themes/terminal-color-overrides' -import type { TerminalLayoutSnapshot, TerminalTab } from './terminal-tab-types' +import type { TerminalLayoutSnapshot, TerminalTab } from './workspace-layout/terminal-tab-types' import type { TuiAgent } from './agent-launch/catalog/tui-agent' import type { StructuredAgentId } from './agent-session/lifecycle/agent-session-provider-handle' diff --git a/src/shared/runtime-pane-title-leaf-id.test.ts b/src/shared/runtime-pane-title-leaf-id.test.ts index 920bc18f79d..787769880fd 100644 --- a/src/shared/runtime-pane-title-leaf-id.test.ts +++ b/src/shared/runtime-pane-title-leaf-id.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { TerminalLayoutSnapshot } from './terminal-tab-types' +import type { TerminalLayoutSnapshot } from './workspace-layout/terminal-tab-types' import { isRuntimePaneTitleOrphan, resolveRuntimePaneTitleForLeaf, diff --git a/src/shared/runtime-pane-title-leaf-id.ts b/src/shared/runtime-pane-title-leaf-id.ts index f6cc8b12c64..744c85b6f32 100644 --- a/src/shared/runtime-pane-title-leaf-id.ts +++ b/src/shared/runtime-pane-title-leaf-id.ts @@ -1,6 +1,9 @@ import { FIRST_PANE_ID } from './pane-key' -import { isTerminalLeafId } from './stable-pane-id' -import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode } from './terminal-tab-types' +import { isTerminalLeafId } from './workspace-layout/stable-pane-id' +import type { + TerminalLayoutSnapshot, + TerminalPaneLayoutNode +} from './workspace-layout/terminal-tab-types' export type RuntimePaneTitleLeafResolution = { title: string | null diff --git a/src/shared/runtime-reference-contracts.ts b/src/shared/runtime-reference-contracts.ts index 93a3d25a8cd..4a9b1ed68b7 100644 --- a/src/shared/runtime-reference-contracts.ts +++ b/src/shared/runtime-reference-contracts.ts @@ -1,6 +1,6 @@ import type { WorkspaceAttachment, Worktree } from './worktree/types' import type { ExecutionHostId } from './execution-host' -import type { PtyLivenessVerdict } from './pty-liveness-verdict' +import type { PtyLivenessVerdict } from './terminal/pty/lifecycle/pty-liveness-verdict' export type ReferenceWorkspace = Worktree & { kind: 'worktree' | 'folder' diff --git a/src/shared/runtime-session-contracts.ts b/src/shared/runtime-session-contracts.ts index 8212ff82dc7..52051af4245 100644 --- a/src/shared/runtime-session-contracts.ts +++ b/src/shared/runtime-session-contracts.ts @@ -10,7 +10,7 @@ import type { RuntimeDegradation } from './runtime-capability-degradation' import type { TabGroupLayoutNode } from './tab-types' -import type { TerminalPaneLayoutNode } from './terminal-tab-types' +import type { TerminalPaneLayoutNode } from './workspace-layout/terminal-tab-types' import type { RuntimeMobileSessionClientTab, RuntimeMobileSessionSnapshotTab, diff --git a/src/shared/runtime-terminal-contracts.ts b/src/shared/runtime-terminal-contracts.ts index 699373e9536..bd55ac2f07b 100644 --- a/src/shared/runtime-terminal-contracts.ts +++ b/src/shared/runtime-terminal-contracts.ts @@ -2,14 +2,14 @@ import type { TerminalLaunchResult } from './agent-session/lifecycle/agent-sessi import type * as AgentSessionResume from './agent-session/lifecycle/agent-session-resume' import type { StartupCommandDelivery } from './agent-launch/startup/codex-startup-delivery' import type { ExecutionHostId } from './execution-host' -import type { PtyIncarnationId } from './pty-incarnation' -import type { PtyLivenessVerdict } from './pty-liveness-verdict' +import type { PtyIncarnationId } from './terminal/pty/lifecycle/pty-incarnation' +import type { PtyLivenessVerdict } from './terminal/pty/lifecycle/pty-liveness-verdict' import type { RuntimeListingHostScope } from './runtime-listing-host-scope' import type { RuntimeMobileSessionTabsResult } from './runtime-session-contracts' import type { TabGroupLayoutNode } from './tab-types' -import type { TerminalExitCause } from './terminal-exit-cause' -import type { TerminalPaneLayoutNode } from './terminal-tab-types' -import type { TerminalAgent } from './terminal-agent' +import type { TerminalExitCause } from './terminal/pty/lifecycle/terminal-exit-cause' +import type { TerminalPaneLayoutNode } from './workspace-layout/terminal-tab-types' +import type { TerminalAgent } from './agent-status/identity/terminal-agent' import type { TuiAgent } from './agent-launch/catalog/tui-agent' export type { RuntimeTerminalSend, diff --git a/src/shared/runtime-terminal-send-contract.ts b/src/shared/runtime-terminal-send-contract.ts index c65c0c82291..eaa322d2857 100644 --- a/src/shared/runtime-terminal-send-contract.ts +++ b/src/shared/runtime-terminal-send-contract.ts @@ -1,4 +1,4 @@ -import type { WriteSettlement } from './pty-write-settlement' +import type { WriteSettlement } from './terminal/pty/lifecycle/pty-write-settlement' export type RuntimeTerminalSend = { handle: string diff --git a/src/shared/setup-agent-sequencing.ts b/src/shared/setup-agent-sequencing.ts index 0225e4d10db..5e4d1113104 100644 --- a/src/shared/setup-agent-sequencing.ts +++ b/src/shared/setup-agent-sequencing.ts @@ -1,4 +1,4 @@ -import { quotePosixShellUnlessPlainNoAt } from './shell-argument-quoting' +import { quotePosixShellUnlessPlainNoAt } from './shell/launch/shell-argument-quoting' import { encodePowerShellCommand } from './powershell-command-encoding' import { getPosixCodexShellLaunchPreflight } from './codex-shell-function' import { getPosixClaudeShellFunction } from './claude-shell-function' diff --git a/src/shared/setup-runner-command.ts b/src/shared/setup-runner-command.ts index 6a050bac6f5..03f1f5d0083 100644 --- a/src/shared/setup-runner-command.ts +++ b/src/shared/setup-runner-command.ts @@ -1,4 +1,7 @@ -import { quoteCmdDoubleQuoted, quotePosixShellUnlessPlainNoAt } from './shell-argument-quoting' +import { + quoteCmdDoubleQuoted, + quotePosixShellUnlessPlainNoAt +} from './shell/launch/shell-argument-quoting' import { isWindowsAbsolutePathLike } from './cross-platform-path' import { buildWindowsCmdRunnerDelayedLaunchCommand, diff --git a/src/shared/shell-argument-quoting.ts b/src/shared/shell/launch/shell-argument-quoting.ts similarity index 100% rename from src/shared/shell-argument-quoting.ts rename to src/shared/shell/launch/shell-argument-quoting.ts diff --git a/src/shared/shell-path-hydration-types.ts b/src/shared/shell/launch/shell-path-hydration-types.ts similarity index 100% rename from src/shared/shell-path-hydration-types.ts rename to src/shared/shell/launch/shell-path-hydration-types.ts diff --git a/src/shared/shell-path-quoting.ts b/src/shared/shell/launch/shell-path-quoting.ts similarity index 100% rename from src/shared/shell-path-quoting.ts rename to src/shared/shell/launch/shell-path-quoting.ts diff --git a/src/shared/terminal-default-shell.ts b/src/shared/shell/launch/terminal-default-shell.ts similarity index 100% rename from src/shared/terminal-default-shell.ts rename to src/shared/shell/launch/terminal-default-shell.ts diff --git a/src/shared/terminal-git-credential-guard.ts b/src/shared/shell/launch/terminal-git-credential-guard.ts similarity index 89% rename from src/shared/terminal-git-credential-guard.ts rename to src/shared/shell/launch/terminal-git-credential-guard.ts index 9c13e6f7f3c..4856737305d 100644 --- a/src/shared/terminal-git-credential-guard.ts +++ b/src/shared/shell/launch/terminal-git-credential-guard.ts @@ -1,5 +1,5 @@ -import { recognizeAgentLaunchCommand } from './agent-launch/startup/agent-command-line-intent' -import { gitCredentialPromptGuardEnv } from './git/commands/git-credential-prompt-env' +import { recognizeAgentLaunchCommand } from '../../agent-launch/startup/agent-command-line-intent' +import { gitCredentialPromptGuardEnv } from '../../git/commands/git-credential-prompt-env' const GIT_CONFIG_PROTOCOL_KEY_RE = /^GIT_CONFIG_(?:COUNT|KEY_\d+|VALUE_\d+)$/ diff --git a/src/shared/terminal-startup-cwd.test.ts b/src/shared/shell/launch/terminal-startup-cwd.test.ts similarity index 98% rename from src/shared/terminal-startup-cwd.test.ts rename to src/shared/shell/launch/terminal-startup-cwd.test.ts index b6a752c1782..1cad88faa14 100644 --- a/src/shared/terminal-startup-cwd.test.ts +++ b/src/shared/shell/launch/terminal-startup-cwd.test.ts @@ -1,12 +1,12 @@ import { describe, expect, it, vi } from 'vitest' -import { FLOATING_TERMINAL_WORKTREE_ID } from './constants' +import { FLOATING_TERMINAL_WORKTREE_ID } from '../../constants' import { requestsCwdOutsideWorkspaceRoot, requestsCwdOutsideWorkspaceRootForWorkspace, resolveTerminalStartupCwd, resolveTerminalStartupCwdForWorkspace } from './terminal-startup-cwd' -import { folderWorkspaceKey } from './workspace-scope' +import { folderWorkspaceKey } from '../../workspace-scope' describe('resolveTerminalStartupCwd', () => { it('falls back to the provider default when no workspace root is resolvable', () => { diff --git a/src/shared/terminal-startup-cwd.ts b/src/shared/shell/launch/terminal-startup-cwd.ts similarity index 94% rename from src/shared/terminal-startup-cwd.ts rename to src/shared/shell/launch/terminal-startup-cwd.ts index a707c69cdb3..6313ea6d54c 100644 --- a/src/shared/terminal-startup-cwd.ts +++ b/src/shared/shell/launch/terminal-startup-cwd.ts @@ -1,12 +1,12 @@ -import { FLOATING_TERMINAL_WORKTREE_ID } from './constants' +import { FLOATING_TERMINAL_WORKTREE_ID } from '../../constants' import { isWslUncPathForCallerLinuxPath, normalizeRuntimePathForComparison, resolveRuntimePath -} from './cross-platform-path' -import { parseWorkspaceKey } from './workspace-scope' -import { parseWslUncPath } from './wsl-paths' -import { splitWorktreeIdForFilesystem } from './worktree/id' +} from '../../cross-platform-path' +import { parseWorkspaceKey } from '../../workspace-scope' +import { parseWslUncPath } from '../../wsl-paths' +import { splitWorktreeIdForFilesystem } from '../../worktree/id' export type TerminalStartupCwdMissingDirFallback = { // Inject existence checks: only the execution host can probe SSH/remote paths. diff --git a/src/shared/shell-open-types.ts b/src/shared/shell/opening/shell-open-types.ts similarity index 94% rename from src/shared/shell-open-types.ts rename to src/shared/shell/opening/shell-open-types.ts index 71b5615179c..ebec6d5f8c9 100644 --- a/src/shared/shell-open-types.ts +++ b/src/shared/shell/opening/shell-open-types.ts @@ -1,4 +1,4 @@ -import type { ExecutionHostId } from './execution-host' +import type { ExecutionHostId } from '../../execution-host' export type ShellOpenExternalEditorRequest = { path: string diff --git a/src/shared/sidebar-list/paired-server-activity-facts.test.ts b/src/shared/sidebar-list/paired-server-activity-facts.test.ts index ba78e772d65..577f33ef29b 100644 --- a/src/shared/sidebar-list/paired-server-activity-facts.test.ts +++ b/src/shared/sidebar-list/paired-server-activity-facts.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import type { ExecutionHostId } from '../execution-host' -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' import { buildPairedServerActivityFacts } from './paired-server-activity-facts' import { normalizePairedServerRow, type PairedServerWorkspaceRow } from './paired-server-rows' import { composeWorktreeHostIdentity } from '../worktree/host-qualified-identity' diff --git a/src/shared/sidebar-list/paired-server-activity-facts.ts b/src/shared/sidebar-list/paired-server-activity-facts.ts index 6296328376d..b5ef7e676ea 100644 --- a/src/shared/sidebar-list/paired-server-activity-facts.ts +++ b/src/shared/sidebar-list/paired-server-activity-facts.ts @@ -3,8 +3,8 @@ import { toRuntimeExecutionHostId, type ExecutionHostId } from '../execution-host' -import type { WorkspaceSessionState } from '../workspace-session-state-types' -import { getWorkspaceSessionTabActivity } from '../workspace-session-tab-activity' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' +import { getWorkspaceSessionTabActivity } from '../workspace-session/workspace-session-tab-activity' import { composeWorktreeHostIdentity, type HostScopedWorktreeKey diff --git a/src/shared/sidebar-list/smart-attention.test.ts b/src/shared/sidebar-list/smart-attention.test.ts index 9c45f6d5b45..7c550c7c87a 100644 --- a/src/shared/sidebar-list/smart-attention.test.ts +++ b/src/shared/sidebar-list/smart-attention.test.ts @@ -9,7 +9,7 @@ import { resolveAttention, type PaneInput } from './smart-attention' -import type { TerminalLayoutSnapshot, TerminalTab } from '../terminal-tab-types' +import type { TerminalLayoutSnapshot, TerminalTab } from '../workspace-layout/terminal-tab-types' import type { Worktree } from '../worktree/types' function hookPane(entry: AgentStatusEntry, hasLivePty = false): PaneInput { diff --git a/src/shared/sidebar-list/smart-attention.ts b/src/shared/sidebar-list/smart-attention.ts index 160d64e995c..855692ebf9d 100644 --- a/src/shared/sidebar-list/smart-attention.ts +++ b/src/shared/sidebar-list/smart-attention.ts @@ -12,13 +12,13 @@ import { tabHasLivePty } from '../tab-has-live-pty' import { isSyntheticAgentPermissionTitle } from '../agent-status/title/synthetic-agent-title' import { resolveRuntimePaneTitleLeafId } from '../runtime-pane-title-leaf-id' import type { AgentStatus } from '../agent-status/title/agent-title-core' -import type { TerminalLayoutSnapshot, TerminalTab } from '../terminal-tab-types' +import type { TerminalLayoutSnapshot, TerminalTab } from '../workspace-layout/terminal-tab-types' import type { Worktree } from '../worktree/types' import type { AgentStateHistoryEntry } from '../agent-status/lifecycle/agent-state-history' import type { AgentStatusEntry } from '../agent-status/contracts/agent-status-types' import type { MigrationUnsupportedPtyEntry } from '../agent-status/contracts/agent-status-ipc-payload' -import { parsePaneKey } from '../stable-pane-id' +import { parsePaneKey } from '../workspace-layout/stable-pane-id' /** Attention priority: 1 Needs you; 2 recent unrequested Done; 3 Working; 4 stale evidence with a live PTY; * 5 Idle (including stopped/aged Done or stale without live PTY). Lower wins; ties use attention timestamps. diff --git a/src/shared/sidebar-list/smart-sort.test.ts b/src/shared/sidebar-list/smart-sort.test.ts index bb87828f69a..0598627c12d 100644 --- a/src/shared/sidebar-list/smart-sort.test.ts +++ b/src/shared/sidebar-list/smart-sort.test.ts @@ -1,13 +1,13 @@ import { describe, expect, it } from 'vitest' import type { Repo } from '../repo-types' -import type { TerminalTab } from '../terminal-tab-types' +import type { TerminalTab } from '../workspace-layout/terminal-tab-types' import type { Worktree } from '../worktree/types' import { buildWorktreeComparator, CREATE_GRACE_MS, sortWorktreesSmart } from './smart-sort' import { buildAttentionByWorktree } from './smart-attention' import { AGENT_STATUS_STALE_AFTER_MS } from '../agent-status/contracts/agent-status-freshness' import type { AgentStateHistoryEntry } from '../agent-status/lifecycle/agent-state-history' import type { AgentStatusEntry } from '../agent-status/contracts/agent-status-types' -import { makePaneKey } from '../stable-pane-id' +import { makePaneKey } from '../workspace-layout/stable-pane-id' const NOW = new Date('2026-03-27T12:00:00.000Z').getTime() const LEAF_ID_1 = '11111111-1111-4111-8111-111111111111' diff --git a/src/shared/sidebar-list/smart-sort.ts b/src/shared/sidebar-list/smart-sort.ts index ce8287c86f9..3eb941fb6b8 100644 --- a/src/shared/sidebar-list/smart-sort.ts +++ b/src/shared/sidebar-list/smart-sort.ts @@ -1,5 +1,5 @@ import type { Repo } from '../repo-types' -import type { TerminalLayoutSnapshot, TerminalTab } from '../terminal-tab-types' +import type { TerminalLayoutSnapshot, TerminalTab } from '../workspace-layout/terminal-tab-types' import type { Worktree } from '../worktree/types' import type { AgentStatusEntry } from '../agent-status/contracts/agent-status-types' import type { MigrationUnsupportedPtyEntry } from '../agent-status/contracts/agent-status-ipc-payload' diff --git a/src/shared/sleeping-record-legacy-pane-key.ts b/src/shared/sleeping-record-legacy-pane-key.ts index 83856bd23bb..314b667da8c 100644 --- a/src/shared/sleeping-record-legacy-pane-key.ts +++ b/src/shared/sleeping-record-legacy-pane-key.ts @@ -1,7 +1,7 @@ // Pre-stable-ID panes still persist numbered keys (tab:2) until their old panes retire. import type { SleepingAgentSessionRecord } from './agent-session/lifecycle/agent-session-resume' -import { parseLegacyNumericPaneKey } from './stable-pane-id' +import { parseLegacyNumericPaneKey } from './workspace-layout/stable-pane-id' /** One provider conversation in a workspace; aliases of one conversation share it. */ export function getProviderSessionClaimKey(record: SleepingAgentSessionRecord): string { diff --git a/src/shared/structured-session-notification-pane.ts b/src/shared/structured-session-notification-pane.ts index 8f192d2d8df..44ddd1f9fb0 100644 --- a/src/shared/structured-session-notification-pane.ts +++ b/src/shared/structured-session-notification-pane.ts @@ -1,4 +1,4 @@ -import { parsePaneKey } from './stable-pane-id' +import { parsePaneKey } from './workspace-layout/stable-pane-id' import { structuredAgentSessionPaneKey, structuredAgentSessionTabId diff --git a/src/shared/tab-agent-from-signals.ts b/src/shared/tab-agent-from-signals.ts index a9a5afb4efa..a6594ef6e33 100644 --- a/src/shared/tab-agent-from-signals.ts +++ b/src/shared/tab-agent-from-signals.ts @@ -1,12 +1,12 @@ -import { titleShowsNoAgent } from './shell-process-detection' -import { resolveExplicitTerminalTitleAgentType } from './terminal-title-agent-type' +import { titleShowsNoAgent } from './agent-status/process/shell-process-detection' +import { resolveExplicitTerminalTitleAgentType } from './agent-status/title/terminal-title-agent-type' import { resolveCompatibleAgentTypeForOwner, shareCompatibleTitleIdentityGroup } from './agent-status/title/agent-title-owner' import { isOpenCodeNativeTitle } from './agent-status/title/providers/opencode-terminal-title' import { resolvePaneAgentOwnerRecord } from './agent-status/identity/pane-agent-owner' -import type { TerminalAgent } from './terminal-agent' +import type { TerminalAgent } from './agent-status/identity/terminal-agent' import type { TuiAgent } from './agent-launch/catalog/tui-agent' import { agentTypeToIconAgent } from './agent-status/presentation/agent-type-icon-agent' diff --git a/src/shared/tab-title-resolution.ts b/src/shared/tab-title-resolution.ts index 851a2020266..fc345259243 100644 --- a/src/shared/tab-title-resolution.ts +++ b/src/shared/tab-title-resolution.ts @@ -1,5 +1,5 @@ import type { Tab } from './tab-types' -import type { TerminalTab } from './terminal-tab-types' +import type { TerminalTab } from './workspace-layout/terminal-tab-types' import { isMeaningfulOpenCodeTerminalTitle } from './agent-status/title/providers/opencode-terminal-title' export function resolveTerminalTabTitle( diff --git a/src/shared/telemetry-onboarding-event-schemas.ts b/src/shared/telemetry-onboarding-event-schemas.ts index bc44b100f6f..0e5f7d85b8c 100644 --- a/src/shared/telemetry-onboarding-event-schemas.ts +++ b/src/shared/telemetry-onboarding-event-schemas.ts @@ -1,7 +1,10 @@ import { z } from 'zod' import { FEATURE_WALL_MAX_DWELL_MS } from './feature-wall-telemetry' import type { DiscoveryStatusEmitted } from './onboarding-state-types' -import type { PathSource, ShellHydrationFailureReason } from './shell-path-hydration-types' +import type { + PathSource, + ShellHydrationFailureReason +} from './shell/launch/shell-path-hydration-types' import { agentKindSchema, featureWallTourDepthStepSchema } from './telemetry-property-schemas' import { cohortSchema, diff --git a/src/shared/terminal/protocol/queries/terminal-query-reply.test.ts b/src/shared/terminal/protocol/queries/terminal-query-reply.test.ts index 3d25e6438ae..489a514bd23 100644 --- a/src/shared/terminal/protocol/queries/terminal-query-reply.test.ts +++ b/src/shared/terminal/protocol/queries/terminal-query-reply.test.ts @@ -6,7 +6,7 @@ import { isTerminalQueryReply, needsCookedEchoSafeQueryReply } from './terminal-query-reply' -import { PtyStartupIngress } from '../../../pty-startup-ingress' +import { PtyStartupIngress } from '../../pty/ingress/pty-startup-ingress' describe('isTerminalQueryReply', () => { it('routes complete Kitty graphics acknowledgements as replies', () => { diff --git a/src/shared/pty-delivery-diagnostics.test.ts b/src/shared/terminal/pty/diagnostics/pty-delivery-diagnostics.test.ts similarity index 100% rename from src/shared/pty-delivery-diagnostics.test.ts rename to src/shared/terminal/pty/diagnostics/pty-delivery-diagnostics.test.ts diff --git a/src/shared/pty-delivery-diagnostics.ts b/src/shared/terminal/pty/diagnostics/pty-delivery-diagnostics.ts similarity index 100% rename from src/shared/pty-delivery-diagnostics.ts rename to src/shared/terminal/pty/diagnostics/pty-delivery-diagnostics.ts diff --git a/src/shared/pty-renderer-delivery-health.ts b/src/shared/terminal/pty/diagnostics/pty-renderer-delivery-health.ts similarity index 100% rename from src/shared/pty-renderer-delivery-health.ts rename to src/shared/terminal/pty/diagnostics/pty-renderer-delivery-health.ts diff --git a/src/shared/pty-owner-color-query-colors.test.ts b/src/shared/terminal/pty/ingress/pty-owner-color-query-colors.test.ts similarity index 100% rename from src/shared/pty-owner-color-query-colors.test.ts rename to src/shared/terminal/pty/ingress/pty-owner-color-query-colors.test.ts diff --git a/src/shared/pty-owner-color-query-colors.ts b/src/shared/terminal/pty/ingress/pty-owner-color-query-colors.ts similarity index 94% rename from src/shared/pty-owner-color-query-colors.ts rename to src/shared/terminal/pty/ingress/pty-owner-color-query-colors.ts index bf09c186ceb..d0e7615e221 100644 --- a/src/shared/pty-owner-color-query-colors.ts +++ b/src/shared/terminal/pty/ingress/pty-owner-color-query-colors.ts @@ -1,8 +1,8 @@ import { terminalOscColorQueryReplies, type TerminalOscColorQueryReplyColors -} from './terminal/protocol/queries/terminal-osc-color-reply' -import { resolveConfiguredTerminalColors } from './terminal-themes/terminal-theme-selection' +} from '../../protocol/queries/terminal-osc-color-reply' +import { resolveConfiguredTerminalColors } from '../../../terminal-themes/terminal-theme-selection' // Last resort before this process is told anything: Orca's default dark terminal theme. export const ORCA_DEFAULT_COLOR_QUERY_REPLY_COLORS: TerminalOscColorQueryReplyColors = diff --git a/src/shared/pty-owner-color-query-replies.ts b/src/shared/terminal/pty/ingress/pty-owner-color-query-replies.ts similarity index 95% rename from src/shared/pty-owner-color-query-replies.ts rename to src/shared/terminal/pty/ingress/pty-owner-color-query-replies.ts index 611f850b47e..1bb7cac54e2 100644 --- a/src/shared/pty-owner-color-query-replies.ts +++ b/src/shared/terminal/pty/ingress/pty-owner-color-query-replies.ts @@ -4,24 +4,24 @@ import { } from './pty-owner-color-query-colors' import type { PtyStartupIngressIntent } from './pty-startup-ingress-intent' import { COLOR_SCHEME_QUERY, type PtyStartupQuery } from './pty-startup-query' -import { TerminalOscColorOverrideTracker } from './terminal/protocol/queries/terminal-osc-color-override-tracker' +import { TerminalOscColorOverrideTracker } from '../../protocol/queries/terminal-osc-color-override-tracker' import { cssColorToOscRgb, terminalOscColorQueryReplies, type TerminalOscColorQueryReplyColors, type TerminalOscColorQuerySlot -} from './terminal/protocol/queries/terminal-osc-color-reply' +} from '../../protocol/queries/terminal-osc-color-reply' import { MAX_APPEARANCE_OSC_BODY_CHARS, SPECIAL_COLOR_IDENTS, terminalOscAppearanceSets, type TerminalOscAppearanceEntry -} from './terminal/protocol/queries/terminal-osc-appearance-query' +} from '../../protocol/queries/terminal-osc-appearance-query' import { formatXColorRgbSpec, parseXColorSpec, terminalColorSchemeReport -} from './terminal/protocol/queries/terminal-view-attributes' +} from '../../protocol/queries/terminal-view-attributes' const MAX_QUERY_CANDIDATE_CHARS = 64 // Room for the `ESC ] 4 ;` prefix and terminator around the longest palette body. diff --git a/src/shared/pty-reply-echo-shapes.node-pty.test.ts b/src/shared/terminal/pty/ingress/pty-reply-echo-shapes.node-pty.test.ts similarity index 97% rename from src/shared/pty-reply-echo-shapes.node-pty.test.ts rename to src/shared/terminal/pty/ingress/pty-reply-echo-shapes.node-pty.test.ts index 72b1c594b04..ba364e3a9d4 100644 --- a/src/shared/pty-reply-echo-shapes.node-pty.test.ts +++ b/src/shared/terminal/pty/ingress/pty-reply-echo-shapes.node-pty.test.ts @@ -3,7 +3,7 @@ import { existsSync } from 'node:fs' import { afterEach, describe, expect, it } from 'vitest' import { locateEcho, replyEchoProjections } from './pty-startup-reply-echo-shapes' -import { mode2031SequenceFor } from './terminal/protocol/queries/terminal-color-scheme-protocol' +import { mode2031SequenceFor } from '../../protocol/queries/terminal-color-scheme-protocol' const BASH = '/bin/bash' const itWithBash = process.platform !== 'win32' && existsSync(BASH) ? it : it.skip diff --git a/src/shared/pty-startup-ingress-contract.ts b/src/shared/terminal/pty/ingress/pty-startup-ingress-contract.ts similarity index 89% rename from src/shared/pty-startup-ingress-contract.ts rename to src/shared/terminal/pty/ingress/pty-startup-ingress-contract.ts index bef209bf5ab..b94ddb950cf 100644 --- a/src/shared/pty-startup-ingress-contract.ts +++ b/src/shared/terminal/pty/ingress/pty-startup-ingress-contract.ts @@ -1,6 +1,6 @@ -import type { PtyOwnerBackend } from './pty-owner-backend' +import type { PtyOwnerBackend } from '../lifecycle/pty-owner-backend' import type { PtyStartupIngressIntent } from './pty-startup-ingress-intent' -import type { TerminalOscColorQueryReplyColors } from './terminal/protocol/queries/terminal-osc-color-reply' +import type { TerminalOscColorQueryReplyColors } from '../../protocol/queries/terminal-osc-color-reply' export type PtyIngressEmission = { data: string diff --git a/src/shared/pty-startup-ingress-intent.ts b/src/shared/terminal/pty/ingress/pty-startup-ingress-intent.ts similarity index 95% rename from src/shared/pty-startup-ingress-intent.ts rename to src/shared/terminal/pty/ingress/pty-startup-ingress-intent.ts index 4319755aa5d..226fe0c913e 100644 --- a/src/shared/pty-startup-ingress-intent.ts +++ b/src/shared/terminal/pty/ingress/pty-startup-ingress-intent.ts @@ -1,12 +1,12 @@ import { terminalOscColorQueryReplies, type TerminalOscColorQueryReplyColors -} from './terminal/protocol/queries/terminal-osc-color-reply' +} from '../../protocol/queries/terminal-osc-color-reply' import { normalizeColorQueryReplyColors } from './pty-owner-color-query-colors' import { validateTerminalViewAttributes, type TerminalViewAttributes -} from './terminal/protocol/queries/terminal-view-attributes' +} from '../../protocol/queries/terminal-view-attributes' export type PtyStartupIngressIntent = { colors: TerminalOscColorQueryReplyColors diff --git a/src/shared/pty-startup-ingress-kitty.test.ts b/src/shared/terminal/pty/ingress/pty-startup-ingress-kitty.test.ts similarity index 96% rename from src/shared/pty-startup-ingress-kitty.test.ts rename to src/shared/terminal/pty/ingress/pty-startup-ingress-kitty.test.ts index a42d11b11c8..f8510338914 100644 --- a/src/shared/pty-startup-ingress-kitty.test.ts +++ b/src/shared/terminal/pty/ingress/pty-startup-ingress-kitty.test.ts @@ -1,9 +1,7 @@ import { afterEach, expect, it, vi } from 'vitest' -import { - PtyStartupIngress, - parsePtyStartupIngressIntent, - type PtyIngressEmission -} from './pty-startup-ingress' +import { PtyStartupIngress } from './pty-startup-ingress' +import { parsePtyStartupIngressIntent } from './pty-startup-ingress-intent' +import type { PtyIngressEmission } from './pty-startup-ingress-contract' const colors = { foreground: '#ffffff', background: '#000000' } afterEach(() => vi.useRealTimers()) diff --git a/src/shared/pty-startup-ingress-launcher-appearance.test.ts b/src/shared/terminal/pty/ingress/pty-startup-ingress-launcher-appearance.test.ts similarity index 97% rename from src/shared/pty-startup-ingress-launcher-appearance.test.ts rename to src/shared/terminal/pty/ingress/pty-startup-ingress-launcher-appearance.test.ts index 3176ca4a972..8f4d1f56ac1 100644 --- a/src/shared/pty-startup-ingress-launcher-appearance.test.ts +++ b/src/shared/terminal/pty/ingress/pty-startup-ingress-launcher-appearance.test.ts @@ -1,10 +1,11 @@ import { describe, expect, it } from 'vitest' -import { PtyStartupIngress, type PtyIngressEmission } from './pty-startup-ingress' +import { PtyStartupIngress } from './pty-startup-ingress' +import type { PtyIngressEmission } from './pty-startup-ingress-contract' import { parsePtyStartupIngressIntent } from './pty-startup-ingress-intent' import type { TerminalViewAttributes, TerminalViewRgb -} from './terminal/protocol/queries/terminal-view-attributes' +} from '../../protocol/queries/terminal-view-attributes' // The host window is dark; the remote client that launched the PTY is light (#34340). const HOST = { foreground: '#ffffff', background: '#000000' } diff --git a/src/shared/pty-startup-ingress-lifetime-colors.test.ts b/src/shared/terminal/pty/ingress/pty-startup-ingress-lifetime-colors.test.ts similarity index 96% rename from src/shared/pty-startup-ingress-lifetime-colors.test.ts rename to src/shared/terminal/pty/ingress/pty-startup-ingress-lifetime-colors.test.ts index df7ef8b13ac..8b62d9599b2 100644 --- a/src/shared/pty-startup-ingress-lifetime-colors.test.ts +++ b/src/shared/terminal/pty/ingress/pty-startup-ingress-lifetime-colors.test.ts @@ -1,5 +1,6 @@ import { afterEach, describe, expect, it, vi } from 'vitest' -import { PtyStartupIngress, type PtyIngressEmission } from './pty-startup-ingress' +import { PtyStartupIngress } from './pty-startup-ingress' +import type { PtyIngressEmission } from './pty-startup-ingress-contract' import type { PtyStartupIngressIntent } from './pty-startup-ingress-intent' const HOST = { foreground: '#ffffff', background: '#000000' } diff --git a/src/shared/pty-startup-ingress-live-query-reply.test.ts b/src/shared/terminal/pty/ingress/pty-startup-ingress-live-query-reply.test.ts similarity index 97% rename from src/shared/pty-startup-ingress-live-query-reply.test.ts rename to src/shared/terminal/pty/ingress/pty-startup-ingress-live-query-reply.test.ts index 7cd20f920d2..97530028616 100644 --- a/src/shared/pty-startup-ingress-live-query-reply.test.ts +++ b/src/shared/terminal/pty/ingress/pty-startup-ingress-live-query-reply.test.ts @@ -1,11 +1,12 @@ // Write live replies synchronously in call order; deferral let replies overtake and enter later programs’ stdin (#15559). import { describe, expect, it } from 'vitest' -import { PtyStartupIngress, type PtyIngressEmission } from './pty-startup-ingress' -import { mode2031SequenceFor } from './terminal/protocol/queries/terminal-color-scheme-protocol' +import { PtyStartupIngress } from './pty-startup-ingress' +import type { PtyIngressEmission } from './pty-startup-ingress-contract' +import { mode2031SequenceFor } from '../../protocol/queries/terminal-color-scheme-protocol' import { extractOnlyCookedEchoSafeQueryReplies, needsCookedEchoSafeQueryReply -} from './terminal/protocol/queries/terminal-query-reply' +} from '../../protocol/queries/terminal-query-reply' const COLOR_SCHEME_REPLY = mode2031SequenceFor('dark') const OSC_COLOR_REPLY = '\x1b]11;rgb:00/00/00\x07' diff --git a/src/shared/pty-startup-ingress.test.ts b/src/shared/terminal/pty/ingress/pty-startup-ingress.test.ts similarity index 99% rename from src/shared/pty-startup-ingress.test.ts rename to src/shared/terminal/pty/ingress/pty-startup-ingress.test.ts index 149845e8132..dd3a7f9141b 100644 --- a/src/shared/pty-startup-ingress.test.ts +++ b/src/shared/terminal/pty/ingress/pty-startup-ingress.test.ts @@ -1,9 +1,7 @@ import { afterEach, describe, expect, it, vi } from 'vitest' -import { - PtyStartupIngress, - parsePtyStartupIngressIntent, - type PtyIngressEmission -} from './pty-startup-ingress' +import { PtyStartupIngress } from './pty-startup-ingress' +import { parsePtyStartupIngressIntent } from './pty-startup-ingress-intent' +import type { PtyIngressEmission } from './pty-startup-ingress-contract' const COLORS = { foreground: '#2e3434', background: '#ffffff' } const FOREGROUND_REPLY = '\x1b]10;rgb:2e2e/3434/3434\x1b\\' diff --git a/src/shared/pty-startup-ingress.ts b/src/shared/terminal/pty/ingress/pty-startup-ingress.ts similarity index 96% rename from src/shared/pty-startup-ingress.ts rename to src/shared/terminal/pty/ingress/pty-startup-ingress.ts index 065a309be2d..0f717ce061b 100644 --- a/src/shared/pty-startup-ingress.ts +++ b/src/shared/terminal/pty/ingress/pty-startup-ingress.ts @@ -1,7 +1,7 @@ import { nextQueryCandidate, parsePtyStartupQuery } from './pty-startup-query' import { PtyOwnerColorQueryReplies } from './pty-owner-color-query-replies' -import { TerminalKittyKeyboardModeTracker } from './terminal/protocol/input-modes/terminal-kitty-keyboard-mode-tracker' -import type { PtyOwnerBackend } from './pty-owner-backend' +import { TerminalKittyKeyboardModeTracker } from '../../protocol/input-modes/terminal-kitty-keyboard-mode-tracker' +import type { PtyOwnerBackend } from '../lifecycle/pty-owner-backend' import { PtyStartupReplyDelivery } from './pty-startup-reply-delivery' import { deliverTerminalQueryReplyPayload } from './terminal-query-reply-delivery' import { @@ -13,12 +13,7 @@ import { type PtyStartupIngressOptions } from './pty-startup-ingress-contract' -export { - PTY_STARTUP_INGRESS_VERSION, - parsePtyStartupIngressIntent -} from './pty-startup-ingress-intent' -export type { PtyStartupIngressIntent } from './pty-startup-ingress-intent' -export type { PtyIngressEmission, PtyStartupIngressOptions } from './pty-startup-ingress-contract' +import './pty-startup-ingress-intent' // Allow relay jitter before releasing torn echoes raw (#12112). Next reads/snapshot barriers usually end the wait; // only one projection’s echo-shaped bytes on an idle pane are exposed to this guess. diff --git a/src/shared/pty-startup-query.ts b/src/shared/terminal/pty/ingress/pty-startup-query.ts similarity index 95% rename from src/shared/pty-startup-query.ts rename to src/shared/terminal/pty/ingress/pty-startup-query.ts index 4fed5ae836e..4e482dd4f47 100644 --- a/src/shared/pty-startup-query.ts +++ b/src/shared/terminal/pty/ingress/pty-startup-query.ts @@ -1,11 +1,11 @@ import { parseTerminalOscColorQuery, type TerminalOscColorQueryParseResult -} from './terminal/protocol/queries/terminal-osc-color-reply' +} from '../../protocol/queries/terminal-osc-color-reply' import { parseTerminalOscAppearanceQuery, type TerminalOscAppearanceQueryParseResult -} from './terminal/protocol/queries/terminal-osc-appearance-query' +} from '../../protocol/queries/terminal-osc-appearance-query' const KITTY_QUERY = '\x1b[?u' export const COLOR_SCHEME_QUERY = '\x1b[?996n' diff --git a/src/shared/pty-startup-reply-delivery.ts b/src/shared/terminal/pty/ingress/pty-startup-reply-delivery.ts similarity index 97% rename from src/shared/pty-startup-reply-delivery.ts rename to src/shared/terminal/pty/ingress/pty-startup-reply-delivery.ts index 04523dc6473..9d4cd9657ab 100644 --- a/src/shared/pty-startup-reply-delivery.ts +++ b/src/shared/terminal/pty/ingress/pty-startup-reply-delivery.ts @@ -1,4 +1,4 @@ -import type { PtyOwnerBackend } from './pty-owner-backend' +import type { PtyOwnerBackend } from '../lifecycle/pty-owner-backend' import { isBetterEchoMatch, locateEcho, @@ -7,8 +7,6 @@ import { type PtyStartupReplyEchoMatch } from './pty-startup-reply-echo-shapes' -export type { PtyStartupReplyEchoMatch } from './pty-startup-reply-echo-shapes' - // Master writes echo through ConPTY ESC-stripping, cooked kernel line discipline or raw readline software (#12112). // Write synchronously in call order: waiting for ECHO-clear reordered replies into later programs’ stdin (#15559) without removing echoes. // Always arm both kernel (ECHOCTL or verbatim) and software readline projections; ECHO-clear cannot predict readline echoes. diff --git a/src/shared/pty-startup-reply-echo-shapes.test.ts b/src/shared/terminal/pty/ingress/pty-startup-reply-echo-shapes.test.ts similarity index 100% rename from src/shared/pty-startup-reply-echo-shapes.test.ts rename to src/shared/terminal/pty/ingress/pty-startup-reply-echo-shapes.test.ts diff --git a/src/shared/pty-startup-reply-echo-shapes.ts b/src/shared/terminal/pty/ingress/pty-startup-reply-echo-shapes.ts similarity index 98% rename from src/shared/pty-startup-reply-echo-shapes.ts rename to src/shared/terminal/pty/ingress/pty-startup-reply-echo-shapes.ts index 9071b5bbc3c..7126bf85e10 100644 --- a/src/shared/pty-startup-reply-echo-shapes.ts +++ b/src/shared/terminal/pty/ingress/pty-startup-reply-echo-shapes.ts @@ -1,4 +1,4 @@ -import type { PtyOwnerBackend } from './pty-owner-backend' +import type { PtyOwnerBackend } from '../lifecycle/pty-owner-backend' // Echo shapes are independent of the writer; match them within coalesced output (#12112, #13137). diff --git a/src/shared/terminal-query-reply-delivery.ts b/src/shared/terminal/pty/ingress/terminal-query-reply-delivery.ts similarity index 93% rename from src/shared/terminal-query-reply-delivery.ts rename to src/shared/terminal/pty/ingress/terminal-query-reply-delivery.ts index a9be3da558e..5cd0bfd24ae 100644 --- a/src/shared/terminal-query-reply-delivery.ts +++ b/src/shared/terminal/pty/ingress/terminal-query-reply-delivery.ts @@ -2,7 +2,7 @@ import type { PtyStartupReplyDelivery } from './pty-startup-reply-delivery' import { extractOnlyTerminalQueryReplies, needsCookedEchoSafeQueryReply -} from './terminal/protocol/queries/terminal-query-reply' +} from '../../protocol/queries/terminal-query-reply' /** Return true only after writing the whole payload. Cooked-echo-risk-only replies arm echo protection and bypass startup gating. * Keep CPR/DA/mixed payloads on the host’s ordered path so replies cannot splice into buffered startup commands; accepted writes retain caller order. */ diff --git a/src/shared/pty-consumer-session-contract.ts b/src/shared/terminal/pty/lifecycle/pty-consumer-session-contract.ts similarity index 100% rename from src/shared/pty-consumer-session-contract.ts rename to src/shared/terminal/pty/lifecycle/pty-consumer-session-contract.ts diff --git a/src/shared/pty-creation-disposition.ts b/src/shared/terminal/pty/lifecycle/pty-creation-disposition.ts similarity index 100% rename from src/shared/pty-creation-disposition.ts rename to src/shared/terminal/pty/lifecycle/pty-creation-disposition.ts diff --git a/src/shared/pty-fenced-termination.ts b/src/shared/terminal/pty/lifecycle/pty-fenced-termination.ts similarity index 100% rename from src/shared/pty-fenced-termination.ts rename to src/shared/terminal/pty/lifecycle/pty-fenced-termination.ts diff --git a/src/shared/pty-incarnation.ts b/src/shared/terminal/pty/lifecycle/pty-incarnation.ts similarity index 100% rename from src/shared/pty-incarnation.ts rename to src/shared/terminal/pty/lifecycle/pty-incarnation.ts diff --git a/src/shared/pty-listed-session.ts b/src/shared/terminal/pty/lifecycle/pty-listed-session.ts similarity index 100% rename from src/shared/pty-listed-session.ts rename to src/shared/terminal/pty/lifecycle/pty-listed-session.ts diff --git a/src/shared/pty-liveness-verdict.test.ts b/src/shared/terminal/pty/lifecycle/pty-liveness-verdict.test.ts similarity index 100% rename from src/shared/pty-liveness-verdict.test.ts rename to src/shared/terminal/pty/lifecycle/pty-liveness-verdict.test.ts diff --git a/src/shared/pty-liveness-verdict.ts b/src/shared/terminal/pty/lifecycle/pty-liveness-verdict.ts similarity index 100% rename from src/shared/pty-liveness-verdict.ts rename to src/shared/terminal/pty/lifecycle/pty-liveness-verdict.ts diff --git a/src/shared/pty-owner-backend.test.ts b/src/shared/terminal/pty/lifecycle/pty-owner-backend.test.ts similarity index 100% rename from src/shared/pty-owner-backend.test.ts rename to src/shared/terminal/pty/lifecycle/pty-owner-backend.test.ts diff --git a/src/shared/pty-owner-backend.ts b/src/shared/terminal/pty/lifecycle/pty-owner-backend.ts similarity index 100% rename from src/shared/pty-owner-backend.ts rename to src/shared/terminal/pty/lifecycle/pty-owner-backend.ts diff --git a/src/shared/pty-running-work-probe.test.ts b/src/shared/terminal/pty/lifecycle/pty-running-work-probe.test.ts similarity index 100% rename from src/shared/pty-running-work-probe.test.ts rename to src/shared/terminal/pty/lifecycle/pty-running-work-probe.test.ts diff --git a/src/shared/pty-running-work-probe.ts b/src/shared/terminal/pty/lifecycle/pty-running-work-probe.ts similarity index 97% rename from src/shared/pty-running-work-probe.ts rename to src/shared/terminal/pty/lifecycle/pty-running-work-probe.ts index bae08e537fd..782ef3d84c9 100644 --- a/src/shared/pty-running-work-probe.ts +++ b/src/shared/terminal/pty/lifecycle/pty-running-work-probe.ts @@ -1,4 +1,4 @@ -import { isRemoteExecutionHostPtyId } from './remote-execution-host-pty-id' +import { isRemoteExecutionHostPtyId } from '../../../remote-execution-host-pty-id' import { isClientOnlyUnverifiableInspection, type TerminalProcessInspection diff --git a/src/shared/pty-session-id-format.ts b/src/shared/terminal/pty/lifecycle/pty-session-id-format.ts similarity index 95% rename from src/shared/pty-session-id-format.ts rename to src/shared/terminal/pty/lifecycle/pty-session-id-format.ts index 5701237e36f..44c8eef9163 100644 --- a/src/shared/pty-session-id-format.ts +++ b/src/shared/terminal/pty/lifecycle/pty-session-id-format.ts @@ -1,6 +1,6 @@ /** Share minted-session parsing across main/renderer hydration and memory attribution; divergent copies caused REMOTE mislabels. */ -import { parseWorkspaceKey } from './workspace-scope' +import { parseWorkspaceKey } from '../../../workspace-scope' export const PTY_SESSION_ID_SEPARATOR = '@@' export const WORKTREE_ID_SEPARATOR = '::' diff --git a/src/shared/pty-write-settlement.ts b/src/shared/terminal/pty/lifecycle/pty-write-settlement.ts similarity index 100% rename from src/shared/pty-write-settlement.ts rename to src/shared/terminal/pty/lifecycle/pty-write-settlement.ts diff --git a/src/shared/terminal-attach-result.ts b/src/shared/terminal/pty/lifecycle/terminal-attach-result.ts similarity index 100% rename from src/shared/terminal-attach-result.ts rename to src/shared/terminal/pty/lifecycle/terminal-attach-result.ts diff --git a/src/shared/terminal-attachment-launch-result.ts b/src/shared/terminal/pty/lifecycle/terminal-attachment-launch-result.ts similarity index 82% rename from src/shared/terminal-attachment-launch-result.ts rename to src/shared/terminal/pty/lifecycle/terminal-attachment-launch-result.ts index c68e5562411..ed9d317dc66 100644 --- a/src/shared/terminal-attachment-launch-result.ts +++ b/src/shared/terminal/pty/lifecycle/terminal-attachment-launch-result.ts @@ -2,11 +2,11 @@ import { z } from 'zod' import type { SleepingAgentLaunchConfig, TerminalLaunchResult -} from './agent-session/lifecycle/agent-session-resume' -import { isTuiAgent } from './agent-launch/catalog/tui-agent-config' -import type { TuiAgent } from './agent-launch/catalog/tui-agent' -import { ResumeProviderSessionParam } from './rpc-contract/terminal-unary-params' -import { sleepingAgentLaunchConfigBaseSchema } from './workspace-session-sleeping-agents' +} from '../../../agent-session/lifecycle/agent-session-resume' +import { isTuiAgent } from '../../../agent-launch/catalog/tui-agent-config' +import type { TuiAgent } from '../../../agent-launch/catalog/tui-agent' +import { ResumeProviderSessionParam } from '../../../rpc-contract/terminal-unary-params' +import { sleepingAgentLaunchConfigBaseSchema } from '../../../workspace-session/workspace-session-sleeping-agents' /** A launch recipe for a pane the window was not shown; the reveal otherwise carries it. */ export type PaneLaunchRecipe = Pick & { diff --git a/src/shared/terminal-execution-host.ts b/src/shared/terminal/pty/lifecycle/terminal-execution-host.ts similarity index 88% rename from src/shared/terminal-execution-host.ts rename to src/shared/terminal/pty/lifecycle/terminal-execution-host.ts index 1ef3f6247b9..75ed99625f2 100644 --- a/src/shared/terminal-execution-host.ts +++ b/src/shared/terminal/pty/lifecycle/terminal-execution-host.ts @@ -2,12 +2,12 @@ import { toRuntimeExecutionHostId, toSshExecutionHostId, type ExecutionHostId -} from './execution-host' +} from '../../../execution-host' import { parseRemoteRuntimePtyId, isRemoteRuntimePtyId -} from './remote-runtime/remote-runtime-pty-id' -import { parseAppSshPtyId } from './ssh-pty-id' +} from '../../../remote-runtime/remote-runtime-pty-id' +import { parseAppSshPtyId } from '../../../ssh-pty-id' /** 'foreign' = the id proves the PTY runs off this host but cannot name where. */ export type PtyExecutionHost = ExecutionHostId | 'foreign' | null diff --git a/src/shared/terminal-exit-cause.test.ts b/src/shared/terminal/pty/lifecycle/terminal-exit-cause.test.ts similarity index 100% rename from src/shared/terminal-exit-cause.test.ts rename to src/shared/terminal/pty/lifecycle/terminal-exit-cause.test.ts diff --git a/src/shared/terminal-exit-cause.ts b/src/shared/terminal/pty/lifecycle/terminal-exit-cause.ts similarity index 100% rename from src/shared/terminal-exit-cause.ts rename to src/shared/terminal/pty/lifecycle/terminal-exit-cause.ts diff --git a/src/shared/terminal-foreground-observation.ts b/src/shared/terminal/pty/lifecycle/terminal-foreground-observation.ts similarity index 100% rename from src/shared/terminal-foreground-observation.ts rename to src/shared/terminal/pty/lifecycle/terminal-foreground-observation.ts diff --git a/src/shared/terminal-owner.ts b/src/shared/terminal/pty/lifecycle/terminal-owner.ts similarity index 100% rename from src/shared/terminal-owner.ts rename to src/shared/terminal/pty/lifecycle/terminal-owner.ts diff --git a/src/shared/terminal-process-inspection.ts b/src/shared/terminal/pty/lifecycle/terminal-process-inspection.ts similarity index 97% rename from src/shared/terminal-process-inspection.ts rename to src/shared/terminal/pty/lifecycle/terminal-process-inspection.ts index a5bd5d2e074..7dde54d4864 100644 --- a/src/shared/terminal-process-inspection.ts +++ b/src/shared/terminal/pty/lifecycle/terminal-process-inspection.ts @@ -1,5 +1,5 @@ import type { TerminalForegroundObservation } from './terminal-foreground-observation' -import type { RemoteForegroundEvidence } from './foreground-process-evidence' +import type { RemoteForegroundEvidence } from '../../../foreground-process-evidence' /** Keep unverifiable distinct from no-children; legacy booleans collapsed failed inspection and Windows relay defaults into false, bypassing close guards. */ export type PtyChildProcessVerdict = 'children' | 'no-children' | 'unverifiable' diff --git a/src/shared/terminal-send-acknowledgment.ts b/src/shared/terminal/pty/lifecycle/terminal-send-acknowledgment.ts similarity index 100% rename from src/shared/terminal-send-acknowledgment.ts rename to src/shared/terminal/pty/lifecycle/terminal-send-acknowledgment.ts diff --git a/src/shared/terminal-spawn-error-copy.ts b/src/shared/terminal/pty/lifecycle/terminal-spawn-error-copy.ts similarity index 100% rename from src/shared/terminal-spawn-error-copy.ts rename to src/shared/terminal/pty/lifecycle/terminal-spawn-error-copy.ts diff --git a/src/shared/terminal-spawn-resource-error.ts b/src/shared/terminal/pty/lifecycle/terminal-spawn-resource-error.ts similarity index 100% rename from src/shared/terminal-spawn-resource-error.ts rename to src/shared/terminal/pty/lifecycle/terminal-spawn-resource-error.ts diff --git a/src/shared/terminal-spawn-response.ts b/src/shared/terminal/pty/lifecycle/terminal-spawn-response.ts similarity index 100% rename from src/shared/terminal-spawn-response.ts rename to src/shared/terminal/pty/lifecycle/terminal-spawn-response.ts diff --git a/src/shared/terminal-start-failure.test.ts b/src/shared/terminal/pty/lifecycle/terminal-start-failure.test.ts similarity index 100% rename from src/shared/terminal-start-failure.test.ts rename to src/shared/terminal/pty/lifecycle/terminal-start-failure.test.ts diff --git a/src/shared/terminal-start-failure.ts b/src/shared/terminal/pty/lifecycle/terminal-start-failure.ts similarity index 100% rename from src/shared/terminal-start-failure.ts rename to src/shared/terminal/pty/lifecycle/terminal-start-failure.ts diff --git a/src/shared/pty-process-ceiling-state.ts b/src/shared/terminal/pty/native-process/pty-process-ceiling-state.ts similarity index 100% rename from src/shared/pty-process-ceiling-state.ts rename to src/shared/terminal/pty/native-process/pty-process-ceiling-state.ts diff --git a/src/shared/pty-slave-line-discipline-echo.test.ts b/src/shared/terminal/pty/native-process/pty-slave-line-discipline-echo.test.ts similarity index 100% rename from src/shared/pty-slave-line-discipline-echo.test.ts rename to src/shared/terminal/pty/native-process/pty-slave-line-discipline-echo.test.ts diff --git a/src/shared/pty-slave-line-discipline-echo.ts b/src/shared/terminal/pty/native-process/pty-slave-line-discipline-echo.ts similarity index 100% rename from src/shared/pty-slave-line-discipline-echo.ts rename to src/shared/terminal/pty/native-process/pty-slave-line-discipline-echo.ts diff --git a/src/shared/shell-process-readiness.test.ts b/src/shared/terminal/pty/native-process/shell-process-readiness.test.ts similarity index 100% rename from src/shared/shell-process-readiness.test.ts rename to src/shared/terminal/pty/native-process/shell-process-readiness.test.ts diff --git a/src/shared/shell-process-readiness.ts b/src/shared/terminal/pty/native-process/shell-process-readiness.ts similarity index 94% rename from src/shared/shell-process-readiness.ts rename to src/shared/terminal/pty/native-process/shell-process-readiness.ts index 165059055ac..17160771822 100644 --- a/src/shared/shell-process-readiness.ts +++ b/src/shared/terminal/pty/native-process/shell-process-readiness.ts @@ -4,10 +4,10 @@ import { access, readlink, realpath, stat } from 'node:fs/promises' import { delimiter, isAbsolute, resolve } from 'node:path' import { promisify } from 'node:util' import { runProcess } from '@orca/process-host' -import { LSOF_NONBLOCKING_ARGS } from './lsof-nonblocking-args' -import { readLibprocProcessFilePath } from './libproc-addon' -import { readPsStdoutInProcess } from './libproc-process-table' -import { PS_MAX_BUFFER_BYTES } from './process-table-snapshot' +import { LSOF_NONBLOCKING_ARGS } from '../../../lsof-nonblocking-args' +import { readLibprocProcessFilePath } from '../../../libproc-addon' +import { readPsStdoutInProcess } from '../../../libproc-process-table' +import { PS_MAX_BUFFER_BYTES } from '../../../process-table-snapshot' const execFile = promisify(execFileCallback) const PROCESS_READINESS_TIMEOUT_MS = 3000 diff --git a/src/shared/twin-repo-host-routing.test-fixture.ts b/src/shared/twin-repo-host-routing.test-fixture.ts index 1f39b1be566..ce5a31cae41 100644 --- a/src/shared/twin-repo-host-routing.test-fixture.ts +++ b/src/shared/twin-repo-host-routing.test-fixture.ts @@ -2,7 +2,7 @@ import { getDefaultWorkspaceSession } from './constants' import type { ExecutionHostId } from './execution-host' import type { Repo } from './repo-types' -import type { WorkspaceSessionState } from './workspace-session-state-types' +import type { WorkspaceSessionState } from './workspace-session/workspace-session-state-types' export const TWIN_WORKTREE_ID = 'repo::/work/orca' diff --git a/src/shared/closed-terminal-panes.ts b/src/shared/workspace-layout/closed-terminal-panes.ts similarity index 100% rename from src/shared/closed-terminal-panes.ts rename to src/shared/workspace-layout/closed-terminal-panes.ts diff --git a/src/shared/closed-terminal-tab-tombstones.test.ts b/src/shared/workspace-layout/closed-terminal-tab-tombstones.test.ts similarity index 100% rename from src/shared/closed-terminal-tab-tombstones.test.ts rename to src/shared/workspace-layout/closed-terminal-tab-tombstones.test.ts diff --git a/src/shared/closed-terminal-tab-tombstones.ts b/src/shared/workspace-layout/closed-terminal-tab-tombstones.ts similarity index 97% rename from src/shared/closed-terminal-tab-tombstones.ts rename to src/shared/workspace-layout/closed-terminal-tab-tombstones.ts index 5e55715cf31..20ecccbda98 100644 --- a/src/shared/closed-terminal-tab-tombstones.ts +++ b/src/shared/workspace-layout/closed-terminal-tab-tombstones.ts @@ -1,5 +1,5 @@ import { z } from 'zod' -import type { RuntimeSessionTabCloseReason } from './runtime-session-contracts' +import type { RuntimeSessionTabCloseReason } from '../runtime-session-contracts' const TERMINAL_TAB_CLOSE_REASONS = [ 'user', diff --git a/src/shared/workspace-layout/headless-phone-layout.test-fixture.ts b/src/shared/workspace-layout/headless-phone-layout.test-fixture.ts index 80453925196..19161021c7f 100644 --- a/src/shared/workspace-layout/headless-phone-layout.test-fixture.ts +++ b/src/shared/workspace-layout/headless-phone-layout.test-fixture.ts @@ -1,6 +1,6 @@ // Compare headless phone publication with desktop startup using separate workspaces per case to isolate effects. -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' import { LEGACY_WORKSPACE_LAYOUT_PROFILES } from './workspace-layout-legacy-profile.test-fixture' import { addWorkspace, emptySession, GIT_KEY, leaf } from './workspace-layout-session.test-fixture' diff --git a/src/shared/workspace-layout/legacy-terminal-row-claims.ts b/src/shared/workspace-layout/legacy-terminal-row-claims.ts index 92f26a99bd4..a4fe08eb0c2 100644 --- a/src/shared/workspace-layout/legacy-terminal-row-claims.ts +++ b/src/shared/workspace-layout/legacy-terminal-row-claims.ts @@ -1,8 +1,8 @@ // Share stored-row ownership between startup hydration and Loader: sessions duplicate terminals in tab-bar entries and legacy workspace rows. -import { isValidTerminalTabId } from '../terminal-tab-id' -import type { TerminalTab } from '../terminal-tab-types' -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import { isValidTerminalTabId } from './terminal-tab-id' +import type { TerminalTab } from './terminal-tab-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' import { collectLayoutLeafIdsInOrder } from './terminal-pane-tree' export type CanonicalPtyOwners = { diff --git a/src/shared/workspace-layout/old-client/old-client-method-translation.ts b/src/shared/workspace-layout/old-client/old-client-method-translation.ts index d944a9f2862..7dd79e187c7 100644 --- a/src/shared/workspace-layout/old-client/old-client-method-translation.ts +++ b/src/shared/workspace-layout/old-client/old-client-method-translation.ts @@ -1,9 +1,9 @@ // Translate old method params to pure layout commands; handlers resolve selectors/handles, apply changes and shape compatible replies. import type { RuntimeMobileSessionTabMove } from '../../runtime-session-contracts' -import { isTerminalLeafId } from '../../stable-pane-id' -import { isValidHostTerminalTabId } from '../../terminal-tab-id' -import type { TerminalPaneSplitDirection } from '../../terminal-tab-types' +import { isTerminalLeafId } from '../stable-pane-id' +import { isValidHostTerminalTabId } from '../terminal-tab-id' +import type { TerminalPaneSplitDirection } from '../terminal-tab-types' import { resolveSessionTabRow } from './old-client-session-tab-rows' import { tabOrderAnchor } from '../tab-order' import { collectLayoutLeafIdsInOrder, layoutContainsLeafId } from '../terminal-pane-tree' diff --git a/src/shared/workspace-layout/old-client/old-client-pane-layout-translation.test.ts b/src/shared/workspace-layout/old-client/old-client-pane-layout-translation.test.ts index 51e99430f18..555cce45f92 100644 --- a/src/shared/workspace-layout/old-client/old-client-pane-layout-translation.test.ts +++ b/src/shared/workspace-layout/old-client/old-client-pane-layout-translation.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import { UpdatePaneLayout } from '../../rpc-contract/session-tabs-schemas-params' -import type { TerminalPaneLayoutNode } from '../../terminal-tab-types' +import type { TerminalPaneLayoutNode } from '../terminal-tab-types' import { translateUpdatePaneLayout } from './old-client-pane-layout-translation' import { build, terminalTab, testContext, WS } from '../workspace-layout-command.test-fixture' import type { WorkspaceLayoutModel } from '../workspace-layout-model' diff --git a/src/shared/workspace-layout/old-client/old-client-pane-layout-translation.ts b/src/shared/workspace-layout/old-client/old-client-pane-layout-translation.ts index 1e6a3d78231..0e836588968 100644 --- a/src/shared/workspace-layout/old-client/old-client-pane-layout-translation.ts +++ b/src/shared/workspace-layout/old-client/old-client-pane-layout-translation.ts @@ -1,6 +1,6 @@ // Translate an older desktop’s whole pane tree to commands against owner order. Refuse structures no single command reaches while retaining title/chat updates. -import type { TerminalPaneLayoutNode } from '../../terminal-tab-types' +import type { TerminalPaneLayoutNode } from '../terminal-tab-types' import { collectLayoutLeafIdsInOrder, insertLeafBeside, diff --git a/src/shared/workspace-layout/old-client/old-client-session-tabs-projection-owned-editor.test.ts b/src/shared/workspace-layout/old-client/old-client-session-tabs-projection-owned-editor.test.ts index 194ca3f9a73..a00800a27dd 100644 --- a/src/shared/workspace-layout/old-client/old-client-session-tabs-projection-owned-editor.test.ts +++ b/src/shared/workspace-layout/old-client/old-client-session-tabs-projection-owned-editor.test.ts @@ -2,7 +2,7 @@ // gets a row in the phone and old-client tab lists. import { beforeEach, describe, expect, it, vi } from 'vitest' -import { ownedEditorFileId } from '../../workspace-session-pane-ownership' +import { ownedEditorFileId } from '../../workspace-session/workspace-session-pane-ownership' import { editorFileKey } from '../workspace-layout-editor-tab-file' import { projectSessionTabs, type SessionTabsFacts } from './old-client-session-tabs-projection' import { build, testContext, WS } from '../workspace-layout-command.test-fixture' diff --git a/src/shared/workspace-layout/old-client/old-client-session-tabs-projection.ts b/src/shared/workspace-layout/old-client/old-client-session-tabs-projection.ts index 0fd0c283c8e..1a9eda3592b 100644 --- a/src/shared/workspace-layout/old-client/old-client-session-tabs-projection.ts +++ b/src/shared/workspace-layout/old-client/old-client-session-tabs-projection.ts @@ -12,8 +12,8 @@ import type { RuntimeMobileSessionTabGroup, RuntimeMobileSessionTabsSnapshot } from '../../runtime-session-contracts' -import type { TerminalLayoutSnapshot } from '../../terminal-tab-types' -import { pruneGroupLayout } from '../../workspace-session-terminal-tab-close' +import type { TerminalLayoutSnapshot } from '../terminal-tab-types' +import { pruneGroupLayout } from '../../workspace-session/workspace-session-terminal-tab-close' import { diffTabRow, editorTabRow } from './old-client-session-editor-rows' import { agentSessionRowId, publishedTabOrderId, terminalRowId } from './old-client-session-row-ids' import { collectLayoutLeafIdsInOrder } from '../terminal-pane-tree' diff --git a/src/shared/paired-terminal-tab-close-intent.ts b/src/shared/workspace-layout/paired-terminal-tab-close-intent.ts similarity index 100% rename from src/shared/paired-terminal-tab-close-intent.ts rename to src/shared/workspace-layout/paired-terminal-tab-close-intent.ts diff --git a/src/shared/workspace-layout/split-ratio-intents.ts b/src/shared/workspace-layout/split-ratio-intents.ts index f2a52077bc4..73a648cb8e0 100644 --- a/src/shared/workspace-layout/split-ratio-intents.ts +++ b/src/shared/workspace-layout/split-ratio-intents.ts @@ -1,7 +1,7 @@ // Send divider path/ratio with split identity so main changes only the intended split in its own tree; a mismatching path must refuse. import type { TabGroupLayoutNode } from '../tab-types' -import type { TerminalPaneLayoutNode } from '../terminal-tab-types' +import type { TerminalPaneLayoutNode } from './terminal-tab-types' import { SPLIT_RATIO_TOLERANCE } from './terminal-pane-tree' /** A split by its direction and the first pane (or group) on each side. */ diff --git a/src/shared/stable-pane-id.test.ts b/src/shared/workspace-layout/stable-pane-id.test.ts similarity index 100% rename from src/shared/stable-pane-id.test.ts rename to src/shared/workspace-layout/stable-pane-id.test.ts diff --git a/src/shared/stable-pane-id.ts b/src/shared/workspace-layout/stable-pane-id.ts similarity index 100% rename from src/shared/stable-pane-id.ts rename to src/shared/workspace-layout/stable-pane-id.ts diff --git a/src/shared/terminal-layout-equality.ts b/src/shared/workspace-layout/terminal-layout-equality.ts similarity index 100% rename from src/shared/terminal-layout-equality.ts rename to src/shared/workspace-layout/terminal-layout-equality.ts diff --git a/src/shared/terminal-layout-leaf-retirement.ts b/src/shared/workspace-layout/terminal-layout-leaf-retirement.ts similarity index 100% rename from src/shared/terminal-layout-leaf-retirement.ts rename to src/shared/workspace-layout/terminal-layout-leaf-retirement.ts diff --git a/src/shared/terminal-layout-pty-ownership.ts b/src/shared/workspace-layout/terminal-layout-pty-ownership.ts similarity index 100% rename from src/shared/terminal-layout-pty-ownership.ts rename to src/shared/workspace-layout/terminal-layout-pty-ownership.ts diff --git a/src/shared/terminal-layout-snapshot-schema.ts b/src/shared/workspace-layout/terminal-layout-snapshot-schema.ts similarity index 95% rename from src/shared/terminal-layout-snapshot-schema.ts rename to src/shared/workspace-layout/terminal-layout-snapshot-schema.ts index 0d71d12988e..22337b6727c 100644 --- a/src/shared/terminal-layout-snapshot-schema.ts +++ b/src/shared/workspace-layout/terminal-layout-snapshot-schema.ts @@ -1,6 +1,6 @@ import { z } from 'zod' import type { TerminalPaneLayoutNode } from './terminal-tab-types' -import { salvagedOptional, salvagingRecord } from './zod-salvage' +import { salvagedOptional, salvagingRecord } from '../zod-salvage' const terminalPaneSplitDirectionSchema = z.enum(['vertical', 'horizontal']) diff --git a/src/shared/terminal-leaf-move.test.ts b/src/shared/workspace-layout/terminal-leaf-move.test.ts similarity index 100% rename from src/shared/terminal-leaf-move.test.ts rename to src/shared/workspace-layout/terminal-leaf-move.test.ts diff --git a/src/shared/terminal-leaf-move.ts b/src/shared/workspace-layout/terminal-leaf-move.ts similarity index 100% rename from src/shared/terminal-leaf-move.ts rename to src/shared/workspace-layout/terminal-leaf-move.ts diff --git a/src/shared/workspace-layout/terminal-owner-invariants.ts b/src/shared/workspace-layout/terminal-owner-invariants.ts index 4f1de868643..78fa4d86e14 100644 --- a/src/shared/workspace-layout/terminal-owner-invariants.ts +++ b/src/shared/workspace-layout/terminal-owner-invariants.ts @@ -1,8 +1,8 @@ import { parseExecutionHostId, type ExecutionHostId } from '../execution-host' import { parseAppSshPtyId } from '../ssh-pty-id' -import { isTerminalLeafId } from '../stable-pane-id' -import type { TerminalTab } from '../terminal-tab-types' -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import { isTerminalLeafId } from './stable-pane-id' +import type { TerminalTab } from './terminal-tab-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' import { collectLayoutLeafIdsInOrder } from './terminal-pane-tree' // Require one leaf per terminal and one tab per leaf ID; binding writes report breaches without removing them. diff --git a/src/shared/terminal-pane-layout-tree.ts b/src/shared/workspace-layout/terminal-pane-layout-tree.ts similarity index 100% rename from src/shared/terminal-pane-layout-tree.ts rename to src/shared/workspace-layout/terminal-pane-layout-tree.ts diff --git a/src/shared/terminal-pane-placement.test.ts b/src/shared/workspace-layout/terminal-pane-placement.test.ts similarity index 100% rename from src/shared/terminal-pane-placement.test.ts rename to src/shared/workspace-layout/terminal-pane-placement.test.ts diff --git a/src/shared/terminal-pane-placement.ts b/src/shared/workspace-layout/terminal-pane-placement.ts similarity index 91% rename from src/shared/terminal-pane-placement.ts rename to src/shared/workspace-layout/terminal-pane-placement.ts index 91dbe233f5c..517f1558215 100644 --- a/src/shared/terminal-pane-placement.ts +++ b/src/shared/workspace-layout/terminal-pane-placement.ts @@ -1,6 +1,7 @@ import { z } from 'zod' import { isTerminalLeafId } from './stable-pane-id' -import { terminalPaneLayoutNodeSchema, terminalTabSchema } from './workspace-session-schema' +import { terminalTabSchema } from '../workspace-session/workspace-session-schema' +import { terminalPaneLayoutNodeSchema } from './terminal-layout-snapshot-schema' // The creation fields of the tab the renderer made, so main need not wait for its save. const NewTabRow = terminalTabSchema diff --git a/src/shared/terminal-pane-reveal.ts b/src/shared/workspace-layout/terminal-pane-reveal.ts similarity index 91% rename from src/shared/terminal-pane-reveal.ts rename to src/shared/workspace-layout/terminal-pane-reveal.ts index f3f14f70859..deba17bf0f5 100644 --- a/src/shared/terminal-pane-reveal.ts +++ b/src/shared/workspace-layout/terminal-pane-reveal.ts @@ -1,4 +1,4 @@ -import type { ExecutionHostId } from './execution-host' +import type { ExecutionHostId } from '../execution-host' /** Use stable pane IDs: paired-server handles exist only on that server. */ export type TerminalPaneRevealTarget = { diff --git a/src/shared/terminal-pane-title-reset.test.ts b/src/shared/workspace-layout/terminal-pane-title-reset.test.ts similarity index 100% rename from src/shared/terminal-pane-title-reset.test.ts rename to src/shared/workspace-layout/terminal-pane-title-reset.test.ts diff --git a/src/shared/terminal-pane-title-reset.ts b/src/shared/workspace-layout/terminal-pane-title-reset.ts similarity index 89% rename from src/shared/terminal-pane-title-reset.ts rename to src/shared/workspace-layout/terminal-pane-title-reset.ts index 8a2841cc806..c8e7f7e7cec 100644 --- a/src/shared/terminal-pane-title-reset.ts +++ b/src/shared/workspace-layout/terminal-pane-title-reset.ts @@ -1,6 +1,6 @@ // CLIs can leave agent names/spinners after exit; replace them only when the agent is known gone. -import { resolveTerminalTitlePolicyAgentType } from './terminal-title-agent-type' +import { resolveTerminalTitlePolicyAgentType } from '../agent-status/title/terminal-title-agent-type' export function neutralTerminalTitle(defaultTitle: string | null | undefined): string { return defaultTitle?.trim() || 'Terminal' diff --git a/src/shared/terminal-pane-title-sanitization.test.ts b/src/shared/workspace-layout/terminal-pane-title-sanitization.test.ts similarity index 100% rename from src/shared/terminal-pane-title-sanitization.test.ts rename to src/shared/workspace-layout/terminal-pane-title-sanitization.test.ts diff --git a/src/shared/terminal-pane-title-sanitization.ts b/src/shared/workspace-layout/terminal-pane-title-sanitization.ts similarity index 100% rename from src/shared/terminal-pane-title-sanitization.ts rename to src/shared/workspace-layout/terminal-pane-title-sanitization.ts diff --git a/src/shared/workspace-layout/terminal-pane-tree.ts b/src/shared/workspace-layout/terminal-pane-tree.ts index c28f36cb36f..ab6bbd89b8b 100644 --- a/src/shared/workspace-layout/terminal-pane-tree.ts +++ b/src/shared/workspace-layout/terminal-pane-tree.ts @@ -1,5 +1,5 @@ -import { isTerminalLeafId } from '../stable-pane-id' -import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode } from '../terminal-tab-types' +import { isTerminalLeafId } from './stable-pane-id' +import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode } from './terminal-tab-types' /** The pane a rootless layout names: its active leaf, else its only bound leaf. */ export function resolveRootlessTerminalLayoutLeafId( diff --git a/src/shared/terminal-retirement-proof-ledger.ts b/src/shared/workspace-layout/terminal-retirement-proof-ledger.ts similarity index 98% rename from src/shared/terminal-retirement-proof-ledger.ts rename to src/shared/workspace-layout/terminal-retirement-proof-ledger.ts index 4d570497f67..d2accad7d0d 100644 --- a/src/shared/terminal-retirement-proof-ledger.ts +++ b/src/shared/workspace-layout/terminal-retirement-proof-ledger.ts @@ -1,4 +1,4 @@ -import type { RuntimeMobileSessionRetiredTerminalSurface } from './runtime-session-contracts' +import type { RuntimeMobileSessionRetiredTerminalSurface } from '../runtime-session-contracts' /** Bound shared by the host's stored list and a client's retained copy of it. */ export const MAX_RETIRED_TERMINAL_SURFACE_PROOFS = 64 diff --git a/src/shared/terminal-reveal-identity.ts b/src/shared/workspace-layout/terminal-reveal-identity.ts similarity index 100% rename from src/shared/terminal-reveal-identity.ts rename to src/shared/workspace-layout/terminal-reveal-identity.ts diff --git a/src/shared/workspace-layout/terminal-row-order.test.ts b/src/shared/workspace-layout/terminal-row-order.test.ts index a1e326e5fa3..59943a27879 100644 --- a/src/shared/workspace-layout/terminal-row-order.test.ts +++ b/src/shared/workspace-layout/terminal-row-order.test.ts @@ -1,8 +1,8 @@ import { describe, expect, it } from 'vitest' import { getDefaultWorkspaceSession } from '../constants' import type { Tab } from '../tab-types' -import type { TerminalTab } from '../terminal-tab-types' -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import type { TerminalTab } from './terminal-tab-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' import { orderTerminalRowsByTabGroups } from './terminal-row-order' const WT = 'repo-1::/Users/dev/orca' diff --git a/src/shared/workspace-layout/terminal-row-order.ts b/src/shared/workspace-layout/terminal-row-order.ts index 3437efc48cb..6e2b1536b8c 100644 --- a/src/shared/workspace-layout/terminal-row-order.ts +++ b/src/shared/workspace-layout/terminal-row-order.ts @@ -1,4 +1,4 @@ -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' /** Group tab orders are authoritative; unlisted rows retain order afterwards. Return the same session when already ordered. */ export function orderTerminalRowsByTabGroups( diff --git a/src/shared/terminal-split-outcome.ts b/src/shared/workspace-layout/terminal-split-outcome.ts similarity index 100% rename from src/shared/terminal-split-outcome.ts rename to src/shared/workspace-layout/terminal-split-outcome.ts diff --git a/src/shared/terminal-surface-close-target.test.ts b/src/shared/workspace-layout/terminal-surface-close-target.test.ts similarity index 100% rename from src/shared/terminal-surface-close-target.test.ts rename to src/shared/workspace-layout/terminal-surface-close-target.test.ts diff --git a/src/shared/terminal-surface-close-target.ts b/src/shared/workspace-layout/terminal-surface-close-target.ts similarity index 100% rename from src/shared/terminal-surface-close-target.ts rename to src/shared/workspace-layout/terminal-surface-close-target.ts diff --git a/src/shared/terminal-surface-id.ts b/src/shared/workspace-layout/terminal-surface-id.ts similarity index 100% rename from src/shared/terminal-surface-id.ts rename to src/shared/workspace-layout/terminal-surface-id.ts diff --git a/src/shared/terminal-surface-tombstone-schema.ts b/src/shared/workspace-layout/terminal-surface-tombstone-schema.ts similarity index 100% rename from src/shared/terminal-surface-tombstone-schema.ts rename to src/shared/workspace-layout/terminal-surface-tombstone-schema.ts diff --git a/src/shared/terminal-tab-close.ts b/src/shared/workspace-layout/terminal-tab-close.ts similarity index 95% rename from src/shared/terminal-tab-close.ts rename to src/shared/workspace-layout/terminal-tab-close.ts index 61f33b35ffe..4d5b2a96392 100644 --- a/src/shared/terminal-tab-close.ts +++ b/src/shared/workspace-layout/terminal-tab-close.ts @@ -1,5 +1,5 @@ -import type { ExecutionHostId } from './execution-host' -import type { WorkspaceSessionState } from './workspace-session-state-types' +import type { ExecutionHostId } from '../execution-host' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' import type { TerminalPaneLayoutNode } from './terminal-tab-types' export type TerminalTabCloseRequest = { diff --git a/src/shared/terminal-tab-id-schema.ts b/src/shared/workspace-layout/terminal-tab-id-schema.ts similarity index 100% rename from src/shared/terminal-tab-id-schema.ts rename to src/shared/workspace-layout/terminal-tab-id-schema.ts diff --git a/src/shared/terminal-tab-id.ts b/src/shared/workspace-layout/terminal-tab-id.ts similarity index 100% rename from src/shared/terminal-tab-id.ts rename to src/shared/workspace-layout/terminal-tab-id.ts diff --git a/src/shared/workspace-layout/terminal-tab-ordinal.ts b/src/shared/workspace-layout/terminal-tab-ordinal.ts index 03fd2c61ada..466811b733b 100644 --- a/src/shared/workspace-layout/terminal-tab-ordinal.ts +++ b/src/shared/workspace-layout/terminal-tab-ordinal.ts @@ -1,4 +1,4 @@ -import type { TerminalTab } from '../terminal-tab-types' +import type { TerminalTab } from './terminal-tab-types' /** The lowest free "Terminal N", so a fresh terminal is "Terminal 1" again after older tabs close. */ export function getNextTerminalOrdinal( diff --git a/src/shared/terminal-tab-types.ts b/src/shared/workspace-layout/terminal-tab-types.ts similarity index 95% rename from src/shared/terminal-tab-types.ts rename to src/shared/workspace-layout/terminal-tab-types.ts index c53f8f2c499..8a8147d9089 100644 --- a/src/shared/terminal-tab-types.ts +++ b/src/shared/workspace-layout/terminal-tab-types.ts @@ -1,6 +1,6 @@ -import type { AiVaultSessionTitle } from './ai-vault/contracts/ai-vault-session-title' -import type { TuiAgent } from './agent-launch/catalog/tui-agent' -import type { AgentLaunchPaneOutcome } from './agent-launch/contracts/agent-launch-pane-verdict' +import type { AiVaultSessionTitle } from '../ai-vault/contracts/ai-vault-session-title' +import type { TuiAgent } from '../agent-launch/catalog/tui-agent' +import type { AgentLaunchPaneOutcome } from '../agent-launch/contracts/agent-launch-pane-verdict' /** The tab row owns the recovery ledger, including the last reason it acted on. */ export type TerminalPaneRecoveryReason = diff --git a/src/shared/workspace-layout/unattached-terminal-row-sweep.ts b/src/shared/workspace-layout/unattached-terminal-row-sweep.ts index e6b773afb17..62694c1d18d 100644 --- a/src/shared/workspace-layout/unattached-terminal-row-sweep.ts +++ b/src/shared/workspace-layout/unattached-terminal-row-sweep.ts @@ -1,8 +1,8 @@ // Mirror the window’s stored-row startup reconnect/orphan sweep in main load before main owns layout: retain only rows whose reconnect plan names a terminal. -import { isValidTerminalTabId } from '../terminal-tab-id' -import type { TerminalTab } from '../terminal-tab-types' -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import { isValidTerminalTabId } from './terminal-tab-id' +import type { TerminalTab } from './terminal-tab-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' import { readCanonicalPtyOwners, resolveCanonicalPtyClaim } from './legacy-terminal-row-claims' /** Apply shutdown-list/fallback-terminal evidence per host partition; each partition lists only its own workspaces. */ diff --git a/src/shared/workspace-layout/workspace-layout-beside.ts b/src/shared/workspace-layout/workspace-layout-beside.ts index cb2d370ae3e..39ac59e59f1 100644 --- a/src/shared/workspace-layout/workspace-layout-beside.ts +++ b/src/shared/workspace-layout/workspace-layout-beside.ts @@ -2,10 +2,13 @@ import type { SleepingAgentSessionRecord } from '../agent-session/lifecycle/agent-session-resume' import type { BrowserWorkspace } from '../browser-workspace-types' -import type { ClosedTerminalTabTombstonesByTabId } from '../closed-terminal-tab-tombstones' +import type { ClosedTerminalTabTombstonesByTabId } from './closed-terminal-tab-tombstones' import type { TabGroup } from '../tab-types' -import type { TerminalLayoutSnapshot, TerminalTab } from '../terminal-tab-types' -import type { PersistedOpenFile, WorkspaceSessionState } from '../workspace-session-state-types' +import type { TerminalLayoutSnapshot, TerminalTab } from './terminal-tab-types' +import type { + PersistedOpenFile, + WorkspaceSessionState +} from '../workspace-session/workspace-session-state-types' type SessionFieldOwner = 'layout' | 'view' | 'fact' | 'carried' | 'legacy' diff --git a/src/shared/workspace-layout/workspace-layout-cold-local.test-fixture.ts b/src/shared/workspace-layout/workspace-layout-cold-local.test-fixture.ts index 2afdc1e327a..3704c1779ba 100644 --- a/src/shared/workspace-layout/workspace-layout-cold-local.test-fixture.ts +++ b/src/shared/workspace-layout/workspace-layout-cold-local.test-fixture.ts @@ -1,5 +1,5 @@ -import type { WorkspaceSessionState } from '../workspace-session-state-types' -import { recordClosedTerminalTabTombstone } from '../closed-terminal-tab-tombstones' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' +import { recordClosedTerminalTabTombstone } from './closed-terminal-tab-tombstones' import { addWorkspace, emptySession, diff --git a/src/shared/workspace-layout/workspace-layout-command-persistence.test.ts b/src/shared/workspace-layout/workspace-layout-command-persistence.test.ts index d1df8cf9348..08a381e6152 100644 --- a/src/shared/workspace-layout/workspace-layout-command-persistence.test.ts +++ b/src/shared/workspace-layout/workspace-layout-command-persistence.test.ts @@ -9,7 +9,7 @@ import type { WorkspaceLayoutModel } from './workspace-layout-model' import { localDesktopSession } from './workspace-layout-profile.test-fixture' import { saveWorkspaceLayout } from './workspace-layout-save' import { GIT_KEY, leaf } from './workspace-layout-session.test-fixture' -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' function reload(session: WorkspaceSessionState) { let next = 0 diff --git a/src/shared/workspace-layout/workspace-layout-command-types.ts b/src/shared/workspace-layout/workspace-layout-command-types.ts index 87da14fd3bd..4133ab37c81 100644 --- a/src/shared/workspace-layout/workspace-layout-command-types.ts +++ b/src/shared/workspace-layout/workspace-layout-command-types.ts @@ -9,7 +9,7 @@ import type { TerminalGrid, TerminalPaneLayoutNode, TerminalPaneSplitDirection -} from '../terminal-tab-types' +} from './terminal-tab-types' import type { PaneSide } from './terminal-pane-tree' import type { SplitRatioIntent } from './split-ratio-intents' import type { PaneOutcomeChanges } from './workspace-layout-pane-outcomes' diff --git a/src/shared/workspace-layout/workspace-layout-disk-fields.ts b/src/shared/workspace-layout/workspace-layout-disk-fields.ts index 4452138d838..ca46899b1a4 100644 --- a/src/shared/workspace-layout/workspace-layout-disk-fields.ts +++ b/src/shared/workspace-layout/workspace-layout-disk-fields.ts @@ -2,10 +2,10 @@ import type { SleepingAgentSessionRecord } from '../agent-session/lifecycle/agent-session-resume' import type { BrowserWorkspace } from '../browser-workspace-types' -import type { ClosedTerminalTabTombstone } from '../closed-terminal-tab-tombstones' +import type { ClosedTerminalTabTombstone } from './closed-terminal-tab-tombstones' import type { Tab, TabGroup } from '../tab-types' -import type { TerminalLayoutSnapshot, TerminalTab } from '../terminal-tab-types' -import type { PersistedOpenFile } from '../workspace-session-state-types' +import type { TerminalLayoutSnapshot, TerminalTab } from './terminal-tab-types' +import type { PersistedOpenFile } from '../workspace-session/workspace-session-state-types' import { SESSION_FIELD_OWNERS, type BrowserTabLiveState, diff --git a/src/shared/workspace-layout/workspace-layout-dropped-leaves.ts b/src/shared/workspace-layout/workspace-layout-dropped-leaves.ts index a10632ff376..ce3075c91f5 100644 --- a/src/shared/workspace-layout/workspace-layout-dropped-leaves.ts +++ b/src/shared/workspace-layout/workspace-layout-dropped-leaves.ts @@ -1,5 +1,5 @@ // Every owner-build commit handles dropped panes centrally so phone/CLI/window/headless closes share retirement semantics. -import { recordClosedTerminalPanes, type ClosedTerminalPane } from '../closed-terminal-panes' +import { recordClosedTerminalPanes, type ClosedTerminalPane } from './closed-terminal-panes' import type { ExecutionHostId } from '../execution-host' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../layout-owner-switch' import type { DroppedLeafReason } from './workspace-layout-command-types' diff --git a/src/shared/workspace-layout/workspace-layout-editor-duplicates.test.ts b/src/shared/workspace-layout/workspace-layout-editor-duplicates.test.ts index 8022df7d627..04434c9bb7d 100644 --- a/src/shared/workspace-layout/workspace-layout-editor-duplicates.test.ts +++ b/src/shared/workspace-layout/workspace-layout-editor-duplicates.test.ts @@ -2,7 +2,7 @@ import { describe, expect, it } from 'vitest' import { LOCAL_EXECUTION_HOST_ID } from '../execution-host' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../layout-owner-switch' -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' import { applyLayoutCommand } from './workspace-layout-commands' import { build, testContext, WS } from './workspace-layout-command.test-fixture' import { loadWorkspaceLayout } from './workspace-layout-load' diff --git a/src/shared/workspace-layout/workspace-layout-editor-file-owner.test.ts b/src/shared/workspace-layout/workspace-layout-editor-file-owner.test.ts index 76d2f914e6d..58dcf86068b 100644 --- a/src/shared/workspace-layout/workspace-layout-editor-file-owner.test.ts +++ b/src/shared/workspace-layout/workspace-layout-editor-file-owner.test.ts @@ -4,8 +4,11 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { FLOATING_TERMINAL_WORKTREE_ID } from '../constants' import { LOCAL_EXECUTION_HOST_ID } from '../execution-host' -import { ownedEditorFileId } from '../workspace-session-pane-ownership' -import type { PersistedOpenFile, WorkspaceSessionState } from '../workspace-session-state-types' +import { ownedEditorFileId } from '../workspace-session/workspace-session-pane-ownership' +import type { + PersistedOpenFile, + WorkspaceSessionState +} from '../workspace-session/workspace-session-state-types' import { applyLayoutCommand } from './workspace-layout-commands' import type { CommandOf } from './workspace-layout-command-types' import { build, testContext } from './workspace-layout-command.test-fixture' diff --git a/src/shared/workspace-layout/workspace-layout-editor-open-file-id.test.ts b/src/shared/workspace-layout/workspace-layout-editor-open-file-id.test.ts index 8a198b1d8cf..3a033c60ec9 100644 --- a/src/shared/workspace-layout/workspace-layout-editor-open-file-id.test.ts +++ b/src/shared/workspace-layout/workspace-layout-editor-open-file-id.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from 'vitest' -import { ownedEditorFileId } from '../workspace-session-pane-ownership' +import { ownedEditorFileId } from '../workspace-session/workspace-session-pane-ownership' import { build, emptyModel, testContext, WS } from './workspace-layout-command.test-fixture' import { applyLayoutCommand } from './workspace-layout-commands' import { editorOpenFileId } from './workspace-layout-editor-open-file-id' diff --git a/src/shared/workspace-layout/workspace-layout-editor-open-file-id.ts b/src/shared/workspace-layout/workspace-layout-editor-open-file-id.ts index 2623bb417b6..43f0462d3c4 100644 --- a/src/shared/workspace-layout/workspace-layout-editor-open-file-id.ts +++ b/src/shared/workspace-layout/workspace-layout-editor-open-file-id.ts @@ -1,4 +1,4 @@ -import { ownedEditorFileId } from '../workspace-session-pane-ownership' +import { ownedEditorFileId } from '../workspace-session/workspace-session-pane-ownership' import { editorTabFile, sameEditorFile } from './workspace-layout-editor-tab-file' import type { LayoutEditorFile, WorkspaceLayout } from './workspace-layout-model' diff --git a/src/shared/workspace-layout/workspace-layout-editor-tab-file.ts b/src/shared/workspace-layout/workspace-layout-editor-tab-file.ts index d36a9a1e5af..b71efc08872 100644 --- a/src/shared/workspace-layout/workspace-layout-editor-tab-file.ts +++ b/src/shared/workspace-layout/workspace-layout-editor-tab-file.ts @@ -1,7 +1,7 @@ // The window uses bare file paths or owner-qualified IDs for contested, floating or moved files. import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../layout-owner-switch' -import { ownedEditorFileId } from '../workspace-session-pane-ownership' +import { ownedEditorFileId } from '../workspace-session/workspace-session-pane-ownership' import type { LayoutEditorFile } from './workspace-layout-model' type FileOwner = Pick diff --git a/src/shared/workspace-layout/workspace-layout-fact-locations.test.ts b/src/shared/workspace-layout/workspace-layout-fact-locations.test.ts index fe7a2e1d867..876983db74c 100644 --- a/src/shared/workspace-layout/workspace-layout-fact-locations.test.ts +++ b/src/shared/workspace-layout/workspace-layout-fact-locations.test.ts @@ -15,7 +15,7 @@ import type { LayoutSleepingRecord } from './workspace-layout-model' import { localDesktopSession } from './workspace-layout-profile.test-fixture' import { saveWorkspaceLayout } from './workspace-layout-save' import { addWorkspace, GIT_KEY, leaf } from './workspace-layout-session.test-fixture' -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' /** Do not mutate identity fields: broken references would test integrity rather than fact ownership. */ const IDENTITY_SOURCES = new Set([ diff --git a/src/shared/workspace-layout/workspace-layout-folded-rows.ts b/src/shared/workspace-layout/workspace-layout-folded-rows.ts index f8546bdf676..4368c90a2f0 100644 --- a/src/shared/workspace-layout/workspace-layout-folded-rows.ts +++ b/src/shared/workspace-layout/workspace-layout-folded-rows.ts @@ -1,7 +1,7 @@ // Persist touched legacy duplicates in their loaded form; otherwise closing/moving the canonical claimant can resurrect stale stored rows on the next load. -import type { TerminalTab } from '../terminal-tab-types' -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import type { TerminalTab } from './terminal-tab-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' import { readCanonicalPtyOwners, readPersistedTerminalPtyIds, diff --git a/src/shared/workspace-layout/workspace-layout-legacy-profile.test-fixture.ts b/src/shared/workspace-layout/workspace-layout-legacy-profile.test-fixture.ts index 67e347a999c..cc1b434be01 100644 --- a/src/shared/workspace-layout/workspace-layout-legacy-profile.test-fixture.ts +++ b/src/shared/workspace-layout/workspace-layout-legacy-profile.test-fixture.ts @@ -1,7 +1,7 @@ // Legacy inconsistencies for comparing window restore against the Loader’s repairs. import { LOCAL_EXECUTION_HOST_ID } from '../execution-host' -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' import { sleepingRecord, type WorkspaceLayoutProfile diff --git a/src/shared/workspace-layout/workspace-layout-load-bindings.ts b/src/shared/workspace-layout/workspace-layout-load-bindings.ts index 2f6575a70f1..d695fc71c64 100644 --- a/src/shared/workspace-layout/workspace-layout-load-bindings.ts +++ b/src/shared/workspace-layout/workspace-layout-load-bindings.ts @@ -4,8 +4,8 @@ import { isPaneSleepRecord, type SleepingAgentSessionRecord } from '../agent-session/lifecycle/agent-session-resume' -import type { TerminalLayoutSnapshot } from '../terminal-tab-types' -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import type { TerminalLayoutSnapshot } from './terminal-tab-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' import { omitStoredFields } from './stored-record-fields' import type { CarriedSessionFields, diff --git a/src/shared/workspace-layout/workspace-layout-load-browser-repair.test.ts b/src/shared/workspace-layout/workspace-layout-load-browser-repair.test.ts index 4c5a285feb3..9d11c48d2d8 100644 --- a/src/shared/workspace-layout/workspace-layout-load-browser-repair.test.ts +++ b/src/shared/workspace-layout/workspace-layout-load-browser-repair.test.ts @@ -4,7 +4,7 @@ import { describe, expect, it, vi } from 'vitest' import { getDefaultWorkspaceSession } from '../constants' import { LOCAL_EXECUTION_HOST_ID, type ExecutionHostId } from '../execution-host' import type { Tab } from '../tab-types' -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' import { resolveSessionTabRow } from './old-client/old-client-session-tab-rows' import { loadWorkspaceLayout } from './workspace-layout-load' import { nameBasedLoadContext } from './workspace-layout-minted-ids' diff --git a/src/shared/workspace-layout/workspace-layout-load-duplicate-pty.test.ts b/src/shared/workspace-layout/workspace-layout-load-duplicate-pty.test.ts index bd1fd7d5b4c..29623b83167 100644 --- a/src/shared/workspace-layout/workspace-layout-load-duplicate-pty.test.ts +++ b/src/shared/workspace-layout/workspace-layout-load-duplicate-pty.test.ts @@ -2,7 +2,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { LOCAL_EXECUTION_HOST_ID, type ExecutionHostId } from '../execution-host' -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' import { loadWorkspaceLayout } from './workspace-layout-load' import { checkLayoutRoundTrip } from './workspace-layout-round-trip-check' import { diff --git a/src/shared/workspace-layout/workspace-layout-load-normalization.test.ts b/src/shared/workspace-layout/workspace-layout-load-normalization.test.ts index b3dd4b42fa7..ab49b08980e 100644 --- a/src/shared/workspace-layout/workspace-layout-load-normalization.test.ts +++ b/src/shared/workspace-layout/workspace-layout-load-normalization.test.ts @@ -2,7 +2,7 @@ import { describe, expect, it } from 'vitest' import { LOCAL_EXECUTION_HOST_ID, type ExecutionHostId } from '../execution-host' -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' import { loadWorkspaceLayout } from './workspace-layout-load' import { checkWorkspaceLayoutModelRules } from './workspace-layout-model-rules' import { checkWorkspaceLayoutRules } from './workspace-layout-rules' diff --git a/src/shared/workspace-layout/workspace-layout-load-report.ts b/src/shared/workspace-layout/workspace-layout-load-report.ts index 4d36468dd82..be9dd4c5fb6 100644 --- a/src/shared/workspace-layout/workspace-layout-load-report.ts +++ b/src/shared/workspace-layout/workspace-layout-load-report.ts @@ -1,6 +1,6 @@ // Report stored-to-next-save differences field by field using the disk-field tables. -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' import type { DiskTable } from './workspace-layout-disk-fields' import { editorFileKey } from './workspace-layout-editor-tab-file' import { collectLayoutLeafIdsInOrder } from './terminal-pane-tree' diff --git a/src/shared/workspace-layout/workspace-layout-load-retirement.ts b/src/shared/workspace-layout/workspace-layout-load-retirement.ts index b3175b547e3..a46502e3c7a 100644 --- a/src/shared/workspace-layout/workspace-layout-load-retirement.ts +++ b/src/shared/workspace-layout/workspace-layout-load-retirement.ts @@ -1,5 +1,5 @@ -import type { TerminalPaneLayoutNode } from '../terminal-tab-types' -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import type { TerminalPaneLayoutNode } from './terminal-tab-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' import type { CarriedSessionFields } from './workspace-layout-beside' import { RetiringGroupLayout } from './workspace-layout-retiring-group-layout' import { updateLegacyPersistence } from './workspace-layout-legacy-persistence' diff --git a/src/shared/workspace-layout/workspace-layout-load-synthetic-pane-title.test.ts b/src/shared/workspace-layout/workspace-layout-load-synthetic-pane-title.test.ts index 41d545d6094..ca3f844a5ad 100644 --- a/src/shared/workspace-layout/workspace-layout-load-synthetic-pane-title.test.ts +++ b/src/shared/workspace-layout/workspace-layout-load-synthetic-pane-title.test.ts @@ -3,8 +3,8 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { LOCAL_EXECUTION_HOST_ID, type ExecutionHostId } from '../execution-host' import type { Tab } from '../tab-types' -import type { TerminalLayoutSnapshot } from '../terminal-tab-types' -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import type { TerminalLayoutSnapshot } from './terminal-tab-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' import { loadWorkspaceLayout } from './workspace-layout-load' import { checkLayoutRoundTrip } from './workspace-layout-round-trip-check' import { diff --git a/src/shared/workspace-layout/workspace-layout-load-tabs.ts b/src/shared/workspace-layout/workspace-layout-load-tabs.ts index aa5094491aa..e8e5696c710 100644 --- a/src/shared/workspace-layout/workspace-layout-load-tabs.ts +++ b/src/shared/workspace-layout/workspace-layout-load-tabs.ts @@ -1,5 +1,5 @@ import type { Tab } from '../tab-types' -import type { TerminalTab } from '../terminal-tab-types' +import type { TerminalTab } from './terminal-tab-types' import type { LayoutContentTab, LayoutTerminalCreation, diff --git a/src/shared/workspace-layout/workspace-layout-load-types.ts b/src/shared/workspace-layout/workspace-layout-load-types.ts index 62bb27ffeb0..6c8d03f1844 100644 --- a/src/shared/workspace-layout/workspace-layout-load-types.ts +++ b/src/shared/workspace-layout/workspace-layout-load-types.ts @@ -1,6 +1,6 @@ import type { ExecutionHostId } from '../execution-host' -import type { TerminalLayoutSnapshot } from '../terminal-tab-types' -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import type { TerminalLayoutSnapshot } from './terminal-tab-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' import type { CarriedSessionFields, DesktopLayoutView, diff --git a/src/shared/workspace-layout/workspace-layout-load-view-less-tabs.test.ts b/src/shared/workspace-layout/workspace-layout-load-view-less-tabs.test.ts index 54b221d21d4..8f1ca954e4b 100644 --- a/src/shared/workspace-layout/workspace-layout-load-view-less-tabs.test.ts +++ b/src/shared/workspace-layout/workspace-layout-load-view-less-tabs.test.ts @@ -3,7 +3,7 @@ import { describe, expect, it, vi } from 'vitest' import { LOCAL_EXECUTION_HOST_ID } from '../execution-host' import type { Tab, TabContentType } from '../tab-types' -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' import { getDefaultWorkspaceSession } from '../constants' import { translateSessionTabMove } from './old-client/old-client-method-translation' import { loadWorkspaceLayout } from './workspace-layout-load' diff --git a/src/shared/workspace-layout/workspace-layout-load-workspace.ts b/src/shared/workspace-layout/workspace-layout-load-workspace.ts index 9b3e339a8e9..f10b80c1c16 100644 --- a/src/shared/workspace-layout/workspace-layout-load-workspace.ts +++ b/src/shared/workspace-layout/workspace-layout-load-workspace.ts @@ -1,10 +1,10 @@ import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../layout-owner-switch' import { checkRunDetailsOwnerScope } from '../source-control/checks/check-run-details-owner-scope' import type { Tab } from '../tab-types' -import { normalizeTerminalLayoutPtyOwnership } from '../terminal-layout-pty-ownership' -import { sanitizeTerminalLayoutPaneTitles } from '../terminal-pane-title-sanitization' -import type { TerminalLayoutSnapshot, TerminalTab } from '../terminal-tab-types' -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import { normalizeTerminalLayoutPtyOwnership } from './terminal-layout-pty-ownership' +import { sanitizeTerminalLayoutPaneTitles } from './terminal-pane-title-sanitization' +import type { TerminalLayoutSnapshot, TerminalTab } from './terminal-tab-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' import { childRecord, pickStoredFields } from './stored-record-fields' import { readCanonicalPtyOwners, resolveCanonicalPtyClaim } from './legacy-terminal-row-claims' import { resolveGroupOrder, type OrderCandidate } from './workspace-layout-load-order' @@ -22,7 +22,7 @@ import { import type { WorkspaceLoadArgs } from './workspace-layout-load-types' import { restoresSavedContentTab } from './saved-editor-tab-restore' import type { LayoutTab, LayoutTerminalTab, WorkspaceLayout } from './workspace-layout-model' -import { pruneGroupLayout } from '../workspace-session-terminal-tab-close' +import { pruneGroupLayout } from '../workspace-session/workspace-session-terminal-tab-close' function takeRows({ session, key, terminalHomes }: WorkspaceLoadArgs) { const rows: TerminalTab[] = [] diff --git a/src/shared/workspace-layout/workspace-layout-load.ts b/src/shared/workspace-layout/workspace-layout-load.ts index 8e9a41c551f..09b1e165e58 100644 --- a/src/shared/workspace-layout/workspace-layout-load.ts +++ b/src/shared/workspace-layout/workspace-layout-load.ts @@ -1,8 +1,8 @@ // Load one session partition after Store pane-identity normalization. Reapply fixed precedence on every load because older builds may rewrite the documents; do not merge disagreements. import type { ExecutionHostId } from '../execution-host' -import type { TerminalLayoutSnapshot } from '../terminal-tab-types' -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import type { TerminalLayoutSnapshot } from './terminal-tab-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' import { CARRIED_SESSION_FIELDS, FACT_SESSION_FIELDS, diff --git a/src/shared/workspace-layout/workspace-layout-minted-ids.test.ts b/src/shared/workspace-layout/workspace-layout-minted-ids.test.ts index 96d1cdb8538..e11d4168055 100644 --- a/src/shared/workspace-layout/workspace-layout-minted-ids.test.ts +++ b/src/shared/workspace-layout/workspace-layout-minted-ids.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import { isTerminalLeafId } from '../stable-pane-id' +import { isTerminalLeafId } from './stable-pane-id' import { nameBasedUuid } from './workspace-layout-minted-ids' describe('nameBasedUuid', () => { diff --git a/src/shared/workspace-layout/workspace-layout-model.ts b/src/shared/workspace-layout/workspace-layout-model.ts index 7eada47b78d..9be0b7109c3 100644 --- a/src/shared/workspace-layout/workspace-layout-model.ts +++ b/src/shared/workspace-layout/workspace-layout-model.ts @@ -3,13 +3,13 @@ import type { SleepingAgentSessionRecord } from '../agent-session/lifecycle/agent-session-resume' import type { AgentType } from '../agent-status/contracts/agent-status-types' import type { AiVaultSessionTitle } from '../ai-vault/contracts/ai-vault-session-title' -import type { PersistedClientHostedBrowserPage } from '../client-hosted-browser-page-record' -import type { ClosedTerminalPanesByPaneKey } from '../closed-terminal-panes' -import type { ClosedTerminalTabTombstone } from '../closed-terminal-tab-tombstones' +import type { PersistedClientHostedBrowserPage } from '../workspace-session/client-hosted-browser-page-record' +import type { ClosedTerminalPanesByPaneKey } from './closed-terminal-panes' +import type { ClosedTerminalTabTombstone } from './closed-terminal-tab-tombstones' import type { ExecutionHostId } from '../execution-host' import type { TabContentType, TabGroupLayoutNode } from '../tab-types' -import type { TerminalGrid, TerminalPaneLayoutNode, TerminalTab } from '../terminal-tab-types' -import type { PersistedOpenFile } from '../workspace-session-state-types' +import type { TerminalGrid, TerminalPaneLayoutNode, TerminalTab } from './terminal-tab-types' +import type { PersistedOpenFile } from '../workspace-session/workspace-session-state-types' import type { BrowserWorkspace } from '../browser-workspace-types' import type { LayoutEditorView } from './layout-editor-view' diff --git a/src/shared/workspace-layout/workspace-layout-owned-editor-id.test.ts b/src/shared/workspace-layout/workspace-layout-owned-editor-id.test.ts index 05b6210ee1f..b17d3ac9437 100644 --- a/src/shared/workspace-layout/workspace-layout-owned-editor-id.test.ts +++ b/src/shared/workspace-layout/workspace-layout-owned-editor-id.test.ts @@ -3,8 +3,8 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { FLOATING_TERMINAL_WORKTREE_ID } from '../constants' import { LOCAL_EXECUTION_HOST_ID } from '../execution-host' -import { ownedEditorFileId } from '../workspace-session-pane-ownership' -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import { ownedEditorFileId } from '../workspace-session/workspace-session-pane-ownership' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' import { applyLayoutCommand } from './workspace-layout-commands' import { loadWorkspaceLayout } from './workspace-layout-load' import { saveWorkspaceLayout } from './workspace-layout-save' diff --git a/src/shared/workspace-layout/workspace-layout-process-exit.ts b/src/shared/workspace-layout/workspace-layout-process-exit.ts index 6c843873ef4..9ba6e4cb306 100644 --- a/src/shared/workspace-layout/workspace-layout-process-exit.ts +++ b/src/shared/workspace-layout/workspace-layout-process-exit.ts @@ -1,6 +1,6 @@ // Retire proven exits unless the failure must remain visible. Negative codes and attach absence only unbind; neither proves process exit. -import { isProvenProcessExit } from '../terminal-exit-cause' +import { isProvenProcessExit } from '../terminal/pty/lifecycle/terminal-exit-cause' import { omitStoredFields } from './stored-record-fields' import { applied, leafIdsOf, setLeaf, type Applied } from './workspace-layout-command-steps' import { updateLegacyPersistence } from './workspace-layout-legacy-persistence' diff --git a/src/shared/workspace-layout/workspace-layout-profile.test-fixture.ts b/src/shared/workspace-layout/workspace-layout-profile.test-fixture.ts index 92621e3a593..9e4ceaeb279 100644 --- a/src/shared/workspace-layout/workspace-layout-profile.test-fixture.ts +++ b/src/shared/workspace-layout/workspace-layout-profile.test-fixture.ts @@ -10,7 +10,7 @@ import { } from '../execution-host' import { toRemoteRuntimePtyId } from '../remote-runtime/remote-runtime-pty-id' import { toAppSshPtyId } from '../ssh-pty-id' -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' import { addWorkspace, emptySession, diff --git a/src/shared/workspace-layout/workspace-layout-published.ts b/src/shared/workspace-layout/workspace-layout-published.ts index a89bdcb51d4..fb236656829 100644 --- a/src/shared/workspace-layout/workspace-layout-published.ts +++ b/src/shared/workspace-layout/workspace-layout-published.ts @@ -4,7 +4,7 @@ import type { AgentType } from '../agent-status/contracts/agent-status-types' import type { AiVaultSessionTitle } from '../ai-vault/contracts/ai-vault-session-title' import type { ExecutionHostId } from '../execution-host' import type { TabContentType, TabGroupLayoutNode } from '../tab-types' -import type { TerminalPaneLayoutNode } from '../terminal-tab-types' +import type { TerminalPaneLayoutNode } from './terminal-tab-types' import { pickStoredFields } from './stored-record-fields' import { collectLayoutLeafIdsInOrder } from './terminal-pane-tree' import { diff --git a/src/shared/workspace-layout/workspace-layout-record-patch.test.ts b/src/shared/workspace-layout/workspace-layout-record-patch.test.ts index 690a0217fcc..b8a0837e717 100644 --- a/src/shared/workspace-layout/workspace-layout-record-patch.test.ts +++ b/src/shared/workspace-layout/workspace-layout-record-patch.test.ts @@ -10,7 +10,7 @@ import type { WorkspaceLayoutModel } from './workspace-layout-model' import { WORKSPACE_LAYOUT_PROFILES } from './workspace-layout-profile.test-fixture' import { patchStoredSession } from './workspace-layout-record-patch' import { saveWorkspaceLayout } from './workspace-layout-save' -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' const CONTEXT = { mintId: () => 'minted-id', diff --git a/src/shared/workspace-layout/workspace-layout-record-patch.ts b/src/shared/workspace-layout/workspace-layout-record-patch.ts index a75ff5a2dc9..5a315ddc080 100644 --- a/src/shared/workspace-layout/workspace-layout-record-patch.ts +++ b/src/shared/workspace-layout/workspace-layout-record-patch.ts @@ -1,7 +1,7 @@ // Isolate command edits by diffing saves before/after the command; patch only those fields onto stored data so unrelated Loader normalizations remain unwritten. import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../layout-owner-switch' -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' import { editorFileKey } from './workspace-layout-editor-tab-file' import { adoptTouchedFoldedRows } from './workspace-layout-folded-rows' diff --git a/src/shared/workspace-layout/workspace-layout-recorded-key-order.ts b/src/shared/workspace-layout/workspace-layout-recorded-key-order.ts index 9d0386f7b2a..bf342b812be 100644 --- a/src/shared/workspace-layout/workspace-layout-recorded-key-order.ts +++ b/src/shared/workspace-layout/workspace-layout-recorded-key-order.ts @@ -1,4 +1,4 @@ -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' export function compareRecordedKeys(left: string, right: string): number { for (let i = 0; i < Math.min(left.length, right.length); i++) { diff --git a/src/shared/workspace-layout/workspace-layout-records.test.ts b/src/shared/workspace-layout/workspace-layout-records.test.ts index 9d9e4f0f308..ea28946f06a 100644 --- a/src/shared/workspace-layout/workspace-layout-records.test.ts +++ b/src/shared/workspace-layout/workspace-layout-records.test.ts @@ -13,7 +13,7 @@ import { splitPublishedLayout } from './workspace-layout-records' import { GIT_KEY, leaf } from './workspace-layout-session.test-fixture' -import { ownedEditorFileId } from '../workspace-session-pane-ownership' +import { ownedEditorFileId } from '../workspace-session/workspace-session-pane-ownership' function published(): PublishedWorkspaceLayout { const { layout } = loadWorkspaceLayoutWithoutReport( diff --git a/src/shared/workspace-layout/workspace-layout-records.ts b/src/shared/workspace-layout/workspace-layout-records.ts index 2d7b80bdd4e..fc301b9d9d4 100644 --- a/src/shared/workspace-layout/workspace-layout-records.ts +++ b/src/shared/workspace-layout/workspace-layout-records.ts @@ -1,6 +1,6 @@ // Publish changes as keyed records; splitting/joining preserves every field so additive wire fields pass through unchanged (E1). -import { ownedEditorFileId } from '../workspace-session-pane-ownership' +import { ownedEditorFileId } from '../workspace-session/workspace-session-pane-ownership' import { stableJson } from './workspace-layout-load-report' import type { PublishedBrowserTab, diff --git a/src/shared/workspace-layout/workspace-layout-resume-record.test.ts b/src/shared/workspace-layout/workspace-layout-resume-record.test.ts index b70ff7c76c8..ee6a3c547d9 100644 --- a/src/shared/workspace-layout/workspace-layout-resume-record.test.ts +++ b/src/shared/workspace-layout/workspace-layout-resume-record.test.ts @@ -12,7 +12,7 @@ import { localDesktopSession, sleepingRecord } from './workspace-layout-profile. import { publishWorkspaceLayout } from './workspace-layout-published' import { saveWorkspaceLayout } from './workspace-layout-save' import { GIT_KEY, leaf } from './workspace-layout-session.test-fixture' -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' type Origin = SleepingAgentSessionRecord['origin'] const ORIGINS: readonly Origin[] = ['live', 'quit', 'worktree-sleep', undefined] diff --git a/src/shared/workspace-layout/workspace-layout-round-trip-check.ts b/src/shared/workspace-layout/workspace-layout-round-trip-check.ts index 44aee72eafc..e5cbecc1870 100644 --- a/src/shared/workspace-layout/workspace-layout-round-trip-check.ts +++ b/src/shared/workspace-layout/workspace-layout-round-trip-check.ts @@ -1,7 +1,7 @@ // Check load/save idempotence: a second load must change nothing. Known first-load kinds are broad; return per-kind counts for logging so new normalizations remain visible. import type { ExecutionHostId } from '../execution-host' -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' import { loadWorkspaceLayout } from './workspace-layout-load' import { nameBasedLoadContext } from './workspace-layout-minted-ids' import { stableJson } from './workspace-layout-load-report' diff --git a/src/shared/workspace-layout/workspace-layout-round-trip.test.ts b/src/shared/workspace-layout/workspace-layout-round-trip.test.ts index bf6ae191c8c..058448f9ebb 100644 --- a/src/shared/workspace-layout/workspace-layout-round-trip.test.ts +++ b/src/shared/workspace-layout/workspace-layout-round-trip.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import { LOCAL_EXECUTION_HOST_ID, type ExecutionHostId } from '../execution-host' -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' import { loadWorkspaceLayout } from './workspace-layout-load' import { saveWorkspaceLayout } from './workspace-layout-save' import { editorFileKey } from './workspace-layout-editor-tab-file' diff --git a/src/shared/workspace-layout/workspace-layout-rule-types.ts b/src/shared/workspace-layout/workspace-layout-rule-types.ts index 1f71b62b822..6088b25f624 100644 --- a/src/shared/workspace-layout/workspace-layout-rule-types.ts +++ b/src/shared/workspace-layout/workspace-layout-rule-types.ts @@ -1,6 +1,6 @@ import type { TerminalLeafOwner } from './terminal-owner-invariants' import type { ExecutionHostId } from '../execution-host' -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' export type PaneOwner = Pick< TerminalLeafOwner, diff --git a/src/shared/workspace-layout/workspace-layout-save-tabs.ts b/src/shared/workspace-layout/workspace-layout-save-tabs.ts index 5b7b1c87c66..26cc43df14e 100644 --- a/src/shared/workspace-layout/workspace-layout-save-tabs.ts +++ b/src/shared/workspace-layout/workspace-layout-save-tabs.ts @@ -2,7 +2,7 @@ import type { ExecutionHostId } from '../execution-host' import type { Tab } from '../tab-types' -import type { TerminalLayoutSnapshot, TerminalTab } from '../terminal-tab-types' +import type { TerminalLayoutSnapshot, TerminalTab } from './terminal-tab-types' import { pickStoredFields } from './stored-record-fields' import { collectLayoutLeafIdsInOrder } from './terminal-pane-tree' import type { DesktopLayoutView, LayoutContentFacts } from './workspace-layout-beside' diff --git a/src/shared/workspace-layout/workspace-layout-save.ts b/src/shared/workspace-layout/workspace-layout-save.ts index af3c1f9a5a5..22203d6a208 100644 --- a/src/shared/workspace-layout/workspace-layout-save.ts +++ b/src/shared/workspace-layout/workspace-layout-save.ts @@ -2,12 +2,15 @@ import type { SleepingAgentSessionRecord } from '../agent-session/lifecycle/agent-session-resume' import type { BrowserWorkspace } from '../browser-workspace-types' -import type { ClosedTerminalTabTombstonesByTabId } from '../closed-terminal-tab-tombstones' +import type { ClosedTerminalTabTombstonesByTabId } from './closed-terminal-tab-tombstones' import type { Tab, TabGroup, TabGroupLayoutNode } from '../tab-types' -import type { TerminalTab } from '../terminal-tab-types' -import type { PersistedOpenFile, WorkspaceSessionState } from '../workspace-session-state-types' +import type { TerminalTab } from './terminal-tab-types' +import type { + PersistedOpenFile, + WorkspaceSessionState +} from '../workspace-session/workspace-session-state-types' import { pickStoredFields } from './stored-record-fields' -import { pruneGroupLayout } from '../workspace-session-terminal-tab-close' +import { pruneGroupLayout } from '../workspace-session/workspace-session-terminal-tab-close' import { BLANK_BROWSER_TAB_STATE, CARRIED_SESSION_FIELDS, diff --git a/src/shared/workspace-layout/workspace-layout-session.test-fixture.ts b/src/shared/workspace-layout/workspace-layout-session.test-fixture.ts index 40906861455..d7501ab38a9 100644 --- a/src/shared/workspace-layout/workspace-layout-session.test-fixture.ts +++ b/src/shared/workspace-layout/workspace-layout-session.test-fixture.ts @@ -7,8 +7,8 @@ import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode, TerminalTab -} from '../terminal-tab-types' -import type { WorkspaceSessionState } from '../workspace-session-state-types' +} from './terminal-tab-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' import { folderWorkspaceKey } from '../workspace-scope' export const GIT_KEY = 'repo-1::/Users/dev/orca' diff --git a/src/shared/workspace-layout/workspace-layout-tab-host.ts b/src/shared/workspace-layout/workspace-layout-tab-host.ts index 5548ccd6bb0..2f21608d633 100644 --- a/src/shared/workspace-layout/workspace-layout-tab-host.ts +++ b/src/shared/workspace-layout/workspace-layout-tab-host.ts @@ -4,7 +4,7 @@ import { type ExecutionHostId } from '../execution-host' import type { TabContentType } from '../tab-types' -import type { PersistedOpenFile } from '../workspace-session-state-types' +import type { PersistedOpenFile } from '../workspace-session/workspace-session-state-types' import { editorTabFile } from './workspace-layout-editor-tab-file' type FileOwner = Pick< diff --git a/src/shared/workspace-layout/workspace-layout-view-tab-closes.ts b/src/shared/workspace-layout/workspace-layout-view-tab-closes.ts index 394618aac6d..10a456110c2 100644 --- a/src/shared/workspace-layout/workspace-layout-view-tab-closes.ts +++ b/src/shared/workspace-layout/workspace-layout-view-tab-closes.ts @@ -1,6 +1,6 @@ // Choose post-close selection while the old order is available: most recent survivor, then closed-tab neighbour. Empty-group collapse selects its split sibling, matching the window. -import { pickNextActiveTabAfterClose } from '../workspace-session-terminal-tab-close' +import { pickNextActiveTabAfterClose } from '../workspace-session/workspace-session-terminal-tab-close' import { findSiblingGroupId, removeGroupLayoutLeaf } from './tab-group-layout-tree' import type { WorkspaceLayoutModel } from './workspace-layout-model' import type { LayoutViewRecord } from './workspace-layout-views' diff --git a/src/shared/workspace-layout/workspace-layout-views-owned-file.test.ts b/src/shared/workspace-layout/workspace-layout-views-owned-file.test.ts index 79442057c06..2e315ff47ca 100644 --- a/src/shared/workspace-layout/workspace-layout-views-owned-file.test.ts +++ b/src/shared/workspace-layout/workspace-layout-views-owned-file.test.ts @@ -1,7 +1,7 @@ // Owned file IDs must survive view reads/pruning just like bare paths for floating and contested files. import { beforeEach, describe, expect, it, vi } from 'vitest' -import { ownedEditorFileId } from '../workspace-session-pane-ownership' +import { ownedEditorFileId } from '../workspace-session/workspace-session-pane-ownership' import { emptyModel, WS } from './workspace-layout-command.test-fixture' import type { WorkspaceLayout } from './workspace-layout-model' import { pruneViewRecord } from './workspace-layout-view-prune' diff --git a/src/shared/workspace-scope.ts b/src/shared/workspace-scope.ts index 4d5e9dc6e35..c450dab6390 100644 --- a/src/shared/workspace-scope.ts +++ b/src/shared/workspace-scope.ts @@ -1,9 +1,14 @@ -import type { WorkspaceKey, WorkspaceScope } from './folder-workspaces/folder-workspace-types' import { getWorktreeIdFromHostIdentity, isWorktreeHostIdentity } from './worktree/host-qualified-identity' +export type WorkspaceScope = + | { type: 'worktree'; worktreeId: string } + | { type: 'folder'; folderWorkspaceId: string } + +export type WorkspaceKey = `worktree:${string}` | `folder:${string}` + export function worktreeWorkspaceKey(worktreeId: string): WorkspaceKey { return `worktree:${worktreeId}` } diff --git a/src/shared/client-hosted-browser-close-intent.ts b/src/shared/workspace-session/client-hosted-browser-close-intent.ts similarity index 100% rename from src/shared/client-hosted-browser-close-intent.ts rename to src/shared/workspace-session/client-hosted-browser-close-intent.ts diff --git a/src/shared/client-hosted-browser-page-record.ts b/src/shared/workspace-session/client-hosted-browser-page-record.ts similarity index 100% rename from src/shared/client-hosted-browser-page-record.ts rename to src/shared/workspace-session/client-hosted-browser-page-record.ts diff --git a/src/shared/terminal-session-state-save-failure.test.ts b/src/shared/workspace-session/terminal-session-state-save-failure.test.ts similarity index 100% rename from src/shared/terminal-session-state-save-failure.test.ts rename to src/shared/workspace-session/terminal-session-state-save-failure.test.ts diff --git a/src/shared/terminal-session-state-save-failure.ts b/src/shared/workspace-session/terminal-session-state-save-failure.ts similarity index 93% rename from src/shared/terminal-session-state-save-failure.ts rename to src/shared/workspace-session/terminal-session-state-save-failure.ts index c286cd568bd..48bc232d090 100644 --- a/src/shared/terminal-session-state-save-failure.ts +++ b/src/shared/workspace-session/terminal-session-state-save-failure.ts @@ -1,4 +1,4 @@ -import { storageCapacityErrorCode } from './storage-capacity-error' +import { storageCapacityErrorCode } from '../storage-capacity-error' export const TERMINAL_SESSION_STATE_SAVE_FAILED_CODE = 'ORCA_TERMINAL_SESSION_STATE_SAVE_FAILED' diff --git a/src/shared/workspace-doc-history.test.ts b/src/shared/workspace-session/workspace-doc-history.test.ts similarity index 100% rename from src/shared/workspace-doc-history.test.ts rename to src/shared/workspace-session/workspace-doc-history.test.ts diff --git a/src/shared/workspace-doc-history.ts b/src/shared/workspace-session/workspace-doc-history.ts similarity index 94% rename from src/shared/workspace-doc-history.ts rename to src/shared/workspace-session/workspace-doc-history.ts index 7232c6fec78..319df961a2d 100644 --- a/src/shared/workspace-doc-history.ts +++ b/src/shared/workspace-session/workspace-doc-history.ts @@ -1,5 +1,5 @@ -import type { BrowserPageDocLocation } from './browser-workspace-types' -import { isDocPreviewUrl } from './doc-preview-scheme' +import type { BrowserPageDocLocation } from '../browser-workspace-types' +import { isDocPreviewUrl } from '../doc-preview-scheme' /** Persist document identity only; omitting URL gives preview grant URLs no place in history. */ export type WorkspaceDocHistoryEntry = { diff --git a/src/shared/workspace-session-browser-history.test.ts b/src/shared/workspace-session/workspace-session-browser-history.test.ts similarity index 96% rename from src/shared/workspace-session-browser-history.test.ts rename to src/shared/workspace-session/workspace-session-browser-history.test.ts index b2825127ec8..3518f276ec3 100644 --- a/src/shared/workspace-session-browser-history.test.ts +++ b/src/shared/workspace-session/workspace-session-browser-history.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import { getDefaultWorkspaceSession } from './constants' +import { getDefaultWorkspaceSession } from '../constants' import { MAX_BROWSER_HISTORY_ENTRIES, normalizeBrowserHistoryEntries, diff --git a/src/shared/workspace-session-browser-history.ts b/src/shared/workspace-session/workspace-session-browser-history.ts similarity index 93% rename from src/shared/workspace-session-browser-history.ts rename to src/shared/workspace-session/workspace-session-browser-history.ts index 6dee679df91..9e7569c6a53 100644 --- a/src/shared/workspace-session-browser-history.ts +++ b/src/shared/workspace-session/workspace-session-browser-history.ts @@ -1,6 +1,6 @@ -import type { BrowserHistoryEntry } from './browser-workspace-types' +import type { BrowserHistoryEntry } from '../browser-workspace-types' import type { WorkspaceSessionState } from './workspace-session-state-types' -import { redactKagiSessionToken } from './browser-url' +import { redactKagiSessionToken } from '../browser-url' export const MAX_BROWSER_HISTORY_ENTRIES = 200 diff --git a/src/shared/workspace-session-browser-schema.ts b/src/shared/workspace-session/workspace-session-browser-schema.ts similarity index 96% rename from src/shared/workspace-session-browser-schema.ts rename to src/shared/workspace-session/workspace-session-browser-schema.ts index 970998382ef..be0bca90c38 100644 --- a/src/shared/workspace-session-browser-schema.ts +++ b/src/shared/workspace-session/workspace-session-browser-schema.ts @@ -1,9 +1,9 @@ import { z } from 'zod' -import type { BrowserWorkspace } from './browser-workspace-types' +import type { BrowserWorkspace } from '../browser-workspace-types' import { normalizeBrowserHistoryEntries } from './workspace-session-browser-history' import { normalizeWorkspaceDocHistoryEntries } from './workspace-doc-history' -import { isDocPreviewUrl } from './doc-preview-scheme' -import { salvagingArray } from './zod-salvage' +import { isDocPreviewUrl } from '../doc-preview-scheme' +import { salvagingArray } from '../zod-salvage' const browserLoadErrorSchema = z.object({ code: z.number(), diff --git a/src/shared/workspace-session-close-intent-schema.ts b/src/shared/workspace-session/workspace-session-close-intent-schema.ts similarity index 85% rename from src/shared/workspace-session-close-intent-schema.ts rename to src/shared/workspace-session/workspace-session-close-intent-schema.ts index af2870e92d5..156c8b7b88d 100644 --- a/src/shared/workspace-session-close-intent-schema.ts +++ b/src/shared/workspace-session/workspace-session-close-intent-schema.ts @@ -1,7 +1,7 @@ import { z } from 'zod' import { clientHostedBrowserCloseIntentSchema } from './client-hosted-browser-close-intent' -import { pairedTerminalTabCloseIntentSchema } from './paired-terminal-tab-close-intent' -import { salvagedOptional, salvagingArray, salvagingRecord } from './zod-salvage' +import { pairedTerminalTabCloseIntentSchema } from '../workspace-layout/paired-terminal-tab-close-intent' +import { salvagedOptional, salvagingArray, salvagingRecord } from '../zod-salvage' /** The session fields holding closes this client owes a runtime environment, keyed by it. */ export const workspaceSessionCloseIntentFieldSchemas = { diff --git a/src/shared/workspace-session-contested-primary-host.ts b/src/shared/workspace-session/workspace-session-contested-primary-host.ts similarity index 97% rename from src/shared/workspace-session-contested-primary-host.ts rename to src/shared/workspace-session/workspace-session-contested-primary-host.ts index 8b9740734d4..c80f8c2bdad 100644 --- a/src/shared/workspace-session-contested-primary-host.ts +++ b/src/shared/workspace-session/workspace-session-contested-primary-host.ts @@ -2,7 +2,7 @@ import { LOCAL_EXECUTION_HOST_ID, parseExecutionHostId, type ExecutionHostId -} from './execution-host' +} from '../execution-host' import { workspaceSessionPartitionHostId } from './workspace-session-partition-owner' export function sessionPartitionHostFor(hostId: ExecutionHostId): ExecutionHostId { diff --git a/src/shared/workspace-session-draft-retention.ts b/src/shared/workspace-session/workspace-session-draft-retention.ts similarity index 100% rename from src/shared/workspace-session-draft-retention.ts rename to src/shared/workspace-session/workspace-session-draft-retention.ts diff --git a/src/shared/workspace-session-editor-schema.ts b/src/shared/workspace-session/workspace-session-editor-schema.ts similarity index 100% rename from src/shared/workspace-session-editor-schema.ts rename to src/shared/workspace-session/workspace-session-editor-schema.ts diff --git a/src/shared/workspace-session-host-field-ownership.ts b/src/shared/workspace-session/workspace-session-host-field-ownership.ts similarity index 100% rename from src/shared/workspace-session-host-field-ownership.ts rename to src/shared/workspace-session/workspace-session-host-field-ownership.ts diff --git a/src/shared/workspace-session-host-records.ts b/src/shared/workspace-session/workspace-session-host-records.ts similarity index 100% rename from src/shared/workspace-session-host-records.ts rename to src/shared/workspace-session/workspace-session-host-records.ts diff --git a/src/shared/workspace-session-pane-ownership.ts b/src/shared/workspace-session/workspace-session-pane-ownership.ts similarity index 90% rename from src/shared/workspace-session-pane-ownership.ts rename to src/shared/workspace-session/workspace-session-pane-ownership.ts index 58bc4b41068..d49e18db8cd 100644 --- a/src/shared/workspace-session-pane-ownership.ts +++ b/src/shared/workspace-session/workspace-session-pane-ownership.ts @@ -1,6 +1,6 @@ /** Share persisted-pane/editor ownership across source export, destination validation and profile transfer. */ -import type { SleepingAgentSessionRecord } from './agent-session/lifecycle/agent-session-resume' -import type { TerminalPaneLayoutNode } from './terminal-tab-types' +import type { SleepingAgentSessionRecord } from '../agent-session/lifecycle/agent-session-resume' +import type { TerminalPaneLayoutNode } from '../workspace-layout/terminal-tab-types' import type { WorkspaceSessionState } from './workspace-session-state-types' // Split at the last colon like destination validation; prefix matching would accept keys it rejects. diff --git a/src/shared/workspace-session-partition-owner.test.ts b/src/shared/workspace-session/workspace-session-partition-owner.test.ts similarity index 100% rename from src/shared/workspace-session-partition-owner.test.ts rename to src/shared/workspace-session/workspace-session-partition-owner.test.ts diff --git a/src/shared/workspace-session-partition-owner.ts b/src/shared/workspace-session/workspace-session-partition-owner.ts similarity index 95% rename from src/shared/workspace-session-partition-owner.ts rename to src/shared/workspace-session/workspace-session-partition-owner.ts index 8bda25c2fe6..fd28768c3d8 100644 --- a/src/shared/workspace-session-partition-owner.ts +++ b/src/shared/workspace-session/workspace-session-partition-owner.ts @@ -2,7 +2,7 @@ import { LOCAL_EXECUTION_HOST_ID, parseExecutionHostId, type ExecutionHostId -} from './execution-host' +} from '../execution-host' /** SSH and runtime hosts own their own partitions; local owns legacy workspaceSession. * Earlier builds split SSH rows between local and ssh:, turning unread rows into replace-session deletions (#12723, #12721, #18173). Adopt stranded rows on read and return them to their owner on write. */ diff --git a/src/shared/workspace-session-salvage-equivalence.test.ts b/src/shared/workspace-session/workspace-session-salvage-equivalence.test.ts similarity index 99% rename from src/shared/workspace-session-salvage-equivalence.test.ts rename to src/shared/workspace-session/workspace-session-salvage-equivalence.test.ts index d34ad0036c0..045fd15b549 100644 --- a/src/shared/workspace-session-salvage-equivalence.test.ts +++ b/src/shared/workspace-session/workspace-session-salvage-equivalence.test.ts @@ -418,7 +418,7 @@ describe('salvage equivalence with the pre-optimization implementation', () => { beforeAll(async () => { // Build the legacy schema from both legacy salvage combinators and plain unions to cover both optimizations. - vi.doMock('./zod-salvage', () => legacySalvageModule()) + vi.doMock('../zod-salvage', () => legacySalvageModule()) vi.doMock('zod', async () => { const actual = await vi.importActual('zod') return { @@ -436,7 +436,7 @@ describe('salvage equivalence with the pre-optimization implementation', () => { // Force lazy recursive unions to initialize before removing the mock. legacyParse(session({ tabGroupLayouts: { [WT]: GROUP_SPLIT } })) legacyParse(session({ terminalLayoutsByTabId: { 'tab-1': layout(SPLIT) } })) - vi.doUnmock('./zod-salvage') + vi.doUnmock('../zod-salvage') vi.doUnmock('zod') vi.resetModules() }) diff --git a/src/shared/workspace-session-salvage.test.ts b/src/shared/workspace-session/workspace-session-salvage.test.ts similarity index 99% rename from src/shared/workspace-session-salvage.test.ts rename to src/shared/workspace-session/workspace-session-salvage.test.ts index 4996232d87f..66d61938203 100644 --- a/src/shared/workspace-session-salvage.test.ts +++ b/src/shared/workspace-session/workspace-session-salvage.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest' import { z } from 'zod' import { parseWorkspaceSessionSalvaging } from './workspace-session-salvage' -import { collectSalvageDrops, salvagingArray } from './zod-salvage' +import { collectSalvageDrops, salvagingArray } from '../zod-salvage' const WT = 'repo-1::/home/user/project' diff --git a/src/shared/workspace-session-salvage.ts b/src/shared/workspace-session/workspace-session-salvage.ts similarity index 96% rename from src/shared/workspace-session-salvage.ts rename to src/shared/workspace-session/workspace-session-salvage.ts index 4f3bdf88fa2..47ea8fba93a 100644 --- a/src/shared/workspace-session-salvage.ts +++ b/src/shared/workspace-session/workspace-session-salvage.ts @@ -4,7 +4,7 @@ import { safeParseWorkspaceSession, WORKSPACE_SESSION_UNVALIDATABLE } from './workspace-session-schema' -import { collectSalvageDrops } from './zod-salvage' +import { collectSalvageDrops } from '../zod-salvage' export type SalvagedWorkspaceSession = | { ok: true; value: WorkspaceSessionState; droppedPaths: string[]; droppedCount: number } diff --git a/src/shared/workspace-session-schema-field-coverage.test.ts b/src/shared/workspace-session/workspace-session-schema-field-coverage.test.ts similarity index 100% rename from src/shared/workspace-session-schema-field-coverage.test.ts rename to src/shared/workspace-session/workspace-session-schema-field-coverage.test.ts diff --git a/src/shared/workspace-session-schema.sleeping-agent.test.ts b/src/shared/workspace-session/workspace-session-schema.sleeping-agent.test.ts similarity index 100% rename from src/shared/workspace-session-schema.sleeping-agent.test.ts rename to src/shared/workspace-session/workspace-session-schema.sleeping-agent.test.ts diff --git a/src/shared/workspace-session-schema.test.ts b/src/shared/workspace-session/workspace-session-schema.test.ts similarity index 100% rename from src/shared/workspace-session-schema.test.ts rename to src/shared/workspace-session/workspace-session-schema.test.ts diff --git a/src/shared/workspace-session-schema.ts b/src/shared/workspace-session/workspace-session-schema.ts similarity index 91% rename from src/shared/workspace-session-schema.ts rename to src/shared/workspace-session/workspace-session-schema.ts index 6b803a04f9b..3343ca58c26 100644 --- a/src/shared/workspace-session-schema.ts +++ b/src/shared/workspace-session/workspace-session-schema.ts @@ -2,20 +2,19 @@ import { z } from 'zod' import { leafStringsSchema, - terminalLayoutSnapshotSchema, - terminalPaneLayoutNodeSchema -} from './terminal-layout-snapshot-schema' -import { closedTerminalPaneSchema } from './closed-terminal-panes' -import { closedTerminalTabTombstoneSchema } from './closed-terminal-tab-tombstones' -import type { WorkspaceKey } from './folder-workspaces/folder-workspace-types' -import type { TabGroupLayoutNode } from './tab-types' -import type { TuiAgent } from './agent-launch/catalog/tui-agent' + terminalLayoutSnapshotSchema +} from '../workspace-layout/terminal-layout-snapshot-schema' +import { closedTerminalPaneSchema } from '../workspace-layout/closed-terminal-panes' +import { closedTerminalTabTombstoneSchema } from '../workspace-layout/closed-terminal-tab-tombstones' + +import type { TabGroupLayoutNode } from '../tab-types' +import type { TuiAgent } from '../agent-launch/catalog/tui-agent' import type { WorkspaceSessionState } from './workspace-session-state-types' -import { terminalTabIdSchema } from './terminal-tab-id-schema' -import { terminalSurfaceTombstoneSchema } from './terminal-surface-tombstone-schema' -import { parseExecutionHostId, type ExecutionHostId } from './execution-host' -import { isTuiAgent } from './agent-launch/catalog/tui-agent-config' -import { isWorkspaceKey } from './workspace-scope' +import { terminalTabIdSchema } from '../workspace-layout/terminal-tab-id-schema' +import { terminalSurfaceTombstoneSchema } from '../workspace-layout/terminal-surface-tombstone-schema' +import { parseExecutionHostId, type ExecutionHostId } from '../execution-host' +import { isTuiAgent } from '../agent-launch/catalog/tui-agent-config' +import { type WorkspaceKey, isWorkspaceKey } from '../workspace-scope' import { browserHistoryEntriesSchema, workspaceDocHistoryEntriesSchema, @@ -30,8 +29,8 @@ import { tabContentTypeSchema, workspaceVisibleTabTypeSchema } from './workspace-session-tab-type-schema' -import { salvagedField, salvagedOptional, salvagingArray, salvagingRecord } from './zod-salvage' -import { isStructuredAgentId } from './agent-session/lifecycle/agent-session-provider-handle-encoding' +import { salvagedField, salvagedOptional, salvagingArray, salvagingRecord } from '../zod-salvage' +import { isStructuredAgentId } from '../agent-session/lifecycle/agent-session-provider-handle-encoding' const workspaceKeySchema = z.custom( (value) => typeof value === 'string' && isWorkspaceKey(value) @@ -300,5 +299,3 @@ export function parseWorkspaceSession(raw: unknown): ParsedWorkspaceSession { } return { ok: false, error: describeWorkspaceSessionError(result.error) } } - -export { terminalPaneLayoutNodeSchema } diff --git a/src/shared/workspace-session-sleeping-agents.ts b/src/shared/workspace-session/workspace-session-sleeping-agents.ts similarity index 90% rename from src/shared/workspace-session-sleeping-agents.ts rename to src/shared/workspace-session/workspace-session-sleeping-agents.ts index 8fe39bd01d4..153568c3d73 100644 --- a/src/shared/workspace-session-sleeping-agents.ts +++ b/src/shared/workspace-session/workspace-session-sleeping-agents.ts @@ -1,13 +1,13 @@ import { z } from 'zod' -import { getAgentResumeArgv } from './agent-launch/startup/agent-resume-argv' +import { getAgentResumeArgv } from '../agent-launch/startup/agent-resume-argv' import { normalizeAgentProviderSession, RESUMABLE_TUI_AGENTS -} from './agent-session/lifecycle/agent-session-resume' -import { AGENT_EFFORT_LEVEL } from './agent-launch/choices/agent-effort-level' -import { isValidTerminalTabId } from './terminal-tab-id' -import { normalizeMainAgentStatusField } from './agent-status/contracts/agent-status-types' -import { salvagingRecord } from './zod-salvage' +} from '../agent-session/lifecycle/agent-session-resume' +import { AGENT_EFFORT_LEVEL } from '../agent-launch/choices/agent-effort-level' +import { isValidTerminalTabId } from '../workspace-layout/terminal-tab-id' +import { normalizeMainAgentStatusField } from '../agent-status/contracts/agent-status-types' +import { salvagingRecord } from '../zod-salvage' const terminalTabIdSchema = z .string() diff --git a/src/shared/workspace-session-state-types.ts b/src/shared/workspace-session/workspace-session-state-types.ts similarity index 90% rename from src/shared/workspace-session-state-types.ts rename to src/shared/workspace-session/workspace-session-state-types.ts index 05297c2027a..fe69e9c3c70 100644 --- a/src/shared/workspace-session-state-types.ts +++ b/src/shared/workspace-session/workspace-session-state-types.ts @@ -1,15 +1,15 @@ -import type { ExecutionHostId } from './execution-host' -import type { SleepingAgentSessionRecord } from './agent-session/lifecycle/agent-session-resume' -import type { WorkspaceKey } from './folder-workspaces/folder-workspace-types' -import type { Tab, TabGroup, TabGroupLayoutNode, WorkspaceVisibleTabType } from './tab-types' -import type { TerminalLayoutSnapshot, TerminalTab } from './terminal-tab-types' -import type { BrowserHistoryEntry, BrowserPage, BrowserWorkspace } from './browser-workspace-types' +import type { ExecutionHostId } from '../execution-host' +import type { SleepingAgentSessionRecord } from '../agent-session/lifecycle/agent-session-resume' +import type { WorkspaceKey } from '../workspace-scope' +import type { Tab, TabGroup, TabGroupLayoutNode, WorkspaceVisibleTabType } from '../tab-types' +import type { TerminalLayoutSnapshot, TerminalTab } from '../workspace-layout/terminal-tab-types' +import type { BrowserHistoryEntry, BrowserPage, BrowserWorkspace } from '../browser-workspace-types' import type { WorkspaceDocHistoryEntry } from './workspace-doc-history' import type { ClientHostedBrowserCloseIntent } from './client-hosted-browser-close-intent' -import type { PairedTerminalTabCloseIntent } from './paired-terminal-tab-close-intent' +import type { PairedTerminalTabCloseIntent } from '../workspace-layout/paired-terminal-tab-close-intent' import type { PersistedClientHostedBrowserPage } from './client-hosted-browser-page-record' -import type { ClosedTerminalTabTombstonesByTabId } from './closed-terminal-tab-tombstones' -import type { ClosedTerminalPanesByPaneKey } from './closed-terminal-panes' +import type { ClosedTerminalTabTombstonesByTabId } from '../workspace-layout/closed-terminal-tab-tombstones' +import type { ClosedTerminalPanesByPaneKey } from '../workspace-layout/closed-terminal-panes' /** Persist edit-mode files only; reconstruct transient diffs/conflicts from git state. */ export type PersistedOpenFile = { diff --git a/src/shared/workspace-session-stranded-partition-adoption.ts b/src/shared/workspace-session/workspace-session-stranded-partition-adoption.ts similarity index 99% rename from src/shared/workspace-session-stranded-partition-adoption.ts rename to src/shared/workspace-session/workspace-session-stranded-partition-adoption.ts index d1997c6ceae..67a46c64d20 100644 --- a/src/shared/workspace-session-stranded-partition-adoption.ts +++ b/src/shared/workspace-session/workspace-session-stranded-partition-adoption.ts @@ -3,8 +3,8 @@ import { WORKSPACE_SESSION_FIELD_OWNERSHIP, type WorkspaceSessionFieldOwnership } from './workspace-session-host-field-ownership' -import { normalizeWorkspaceSessionKeyToWorkspaceId } from './workspace-scope' -import { isWorktreeHostIdentity as isHostQualifiedSessionKey } from './worktree/host-qualified-identity' +import { normalizeWorkspaceSessionKeyToWorkspaceId } from '../workspace-scope' +import { isWorktreeHostIdentity as isHostQualifiedSessionKey } from '../worktree/host-qualified-identity' import { buildWorktreeIdByFileId, buildWorktreeIdByTabId, diff --git a/src/shared/workspace-session-tab-activity.test.ts b/src/shared/workspace-session/workspace-session-tab-activity.test.ts similarity index 92% rename from src/shared/workspace-session-tab-activity.test.ts rename to src/shared/workspace-session/workspace-session-tab-activity.test.ts index cb70e3d1070..58542f011df 100644 --- a/src/shared/workspace-session-tab-activity.test.ts +++ b/src/shared/workspace-session/workspace-session-tab-activity.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' -import type { BrowserWorkspace } from './browser-workspace-types' -import type { Tab } from './tab-types' +import type { BrowserWorkspace } from '../browser-workspace-types' +import type { Tab } from '../tab-types' import { getWorkspaceSessionTabActivityIds } from './workspace-session-tab-activity' function browser(worktreeId: string): BrowserWorkspace { diff --git a/src/shared/workspace-session-tab-activity.ts b/src/shared/workspace-session/workspace-session-tab-activity.ts similarity index 88% rename from src/shared/workspace-session-tab-activity.ts rename to src/shared/workspace-session/workspace-session-tab-activity.ts index 89fde31148c..7b82ab9ee2b 100644 --- a/src/shared/workspace-session-tab-activity.ts +++ b/src/shared/workspace-session/workspace-session-tab-activity.ts @@ -1,6 +1,6 @@ import type { WorkspaceSessionState } from './workspace-session-state-types' -import { isStructuredTab } from './agent-session/view/structured-agent-session-tab' -import { normalizeWorkspaceSessionKeyToWorkspaceId } from './workspace-scope' +import { isStructuredTab } from '../agent-session/view/structured-agent-session-tab' +import { normalizeWorkspaceSessionKeyToWorkspaceId } from '../workspace-scope' type SessionTabs = Pick diff --git a/src/shared/workspace-session-tab-filter.ts b/src/shared/workspace-session/workspace-session-tab-filter.ts similarity index 97% rename from src/shared/workspace-session-tab-filter.ts rename to src/shared/workspace-session/workspace-session-tab-filter.ts index 41a0e0374d0..9da9dae9cde 100644 --- a/src/shared/workspace-session-tab-filter.ts +++ b/src/shared/workspace-session/workspace-session-tab-filter.ts @@ -3,8 +3,8 @@ * groups lose them (a group they emptied goes, with its layout leaf), and per-workspace focus on a * removed tab or group moves to what is left. Terminal rows and layouts are left to the caller. */ -import type { Tab, TabGroup } from './tab-types' -import { toVisibleTabType } from './tab-types' + +import { type Tab, type TabGroup, toVisibleTabType } from '../tab-types' import type { WorkspaceSessionState } from './workspace-session-state-types' import { pruneGroupLayout } from './workspace-session-terminal-tab-close' diff --git a/src/shared/workspace-session-tab-focus-schema.test.ts b/src/shared/workspace-session/workspace-session-tab-focus-schema.test.ts similarity index 100% rename from src/shared/workspace-session-tab-focus-schema.test.ts rename to src/shared/workspace-session/workspace-session-tab-focus-schema.test.ts diff --git a/src/shared/workspace-session-tab-type-schema.ts b/src/shared/workspace-session/workspace-session-tab-type-schema.ts similarity index 100% rename from src/shared/workspace-session-tab-type-schema.ts rename to src/shared/workspace-session/workspace-session-tab-type-schema.ts diff --git a/src/shared/workspace-session-terminal-buffers.test.ts b/src/shared/workspace-session/workspace-session-terminal-buffers.test.ts similarity index 98% rename from src/shared/workspace-session-terminal-buffers.test.ts rename to src/shared/workspace-session/workspace-session-terminal-buffers.test.ts index e0c3f4f5ea6..d3387e90938 100644 --- a/src/shared/workspace-session-terminal-buffers.test.ts +++ b/src/shared/workspace-session/workspace-session-terminal-buffers.test.ts @@ -1,8 +1,8 @@ import { describe, expect, it } from 'vitest' -import { FLOATING_TERMINAL_WORKTREE_ID, getDefaultWorkspaceSession } from './constants' +import { FLOATING_TERMINAL_WORKTREE_ID, getDefaultWorkspaceSession } from '../constants' import type { WorkspaceSessionState } from './workspace-session-state-types' -import { TERMINAL_SCROLLBACK_SESSION_BUFFER_BYTE_LIMIT } from './terminal/replay/terminal-scrollback-limits' -import { getUtf8ByteLength } from './utf8-byte-limits' +import { TERMINAL_SCROLLBACK_SESSION_BUFFER_BYTE_LIMIT } from '../terminal/replay/terminal-scrollback-limits' +import { getUtf8ByteLength } from '../utf8-byte-limits' import { TERMINAL_SCROLLBACK_SESSION_HOMES, pruneLocalTerminalScrollbackBuffers, diff --git a/src/shared/workspace-session-terminal-buffers.ts b/src/shared/workspace-session/workspace-session-terminal-buffers.ts similarity index 94% rename from src/shared/workspace-session-terminal-buffers.ts rename to src/shared/workspace-session/workspace-session-terminal-buffers.ts index d148ef7a025..ad446782c45 100644 --- a/src/shared/workspace-session-terminal-buffers.ts +++ b/src/shared/workspace-session/workspace-session-terminal-buffers.ts @@ -1,11 +1,11 @@ -import type { Repo } from './repo-types' +import type { Repo } from '../repo-types' import type { WorkspaceSessionState } from './workspace-session-state-types' -import { FLOATING_TERMINAL_WORKTREE_ID } from './constants' -import { getRepoIdFromWorktreeId } from './worktree/id' -import { TERMINAL_SCROLLBACK_SESSION_BUFFER_BYTE_LIMIT } from './terminal/replay/terminal-scrollback-limits' -import { clampUtf8TextTail, isUtf8ByteLengthWithinLimit } from './utf8-byte-limits' -import { parseExecutionHostId } from './execution-host' -import { ownRetainedString } from './own-retained-string' +import { FLOATING_TERMINAL_WORKTREE_ID } from '../constants' +import { getRepoIdFromWorktreeId } from '../worktree/id' +import { TERMINAL_SCROLLBACK_SESSION_BUFFER_BYTE_LIMIT } from '../terminal/replay/terminal-scrollback-limits' +import { clampUtf8TextTail, isUtf8ByteLengthWithinLimit } from '../utf8-byte-limits' +import { parseExecutionHostId } from '../execution-host' +import { ownRetainedString } from '../own-retained-string' export type RepoConnection = Pick diff --git a/src/shared/workspace-session-terminal-schema.test.ts b/src/shared/workspace-session/workspace-session-terminal-schema.test.ts similarity index 100% rename from src/shared/workspace-session-terminal-schema.test.ts rename to src/shared/workspace-session/workspace-session-terminal-schema.test.ts diff --git a/src/shared/workspace-session-terminal-tab-close.test.ts b/src/shared/workspace-session/workspace-session-terminal-tab-close.test.ts similarity index 98% rename from src/shared/workspace-session-terminal-tab-close.test.ts rename to src/shared/workspace-session/workspace-session-terminal-tab-close.test.ts index 20715f080a9..083e9d2023f 100644 --- a/src/shared/workspace-session-terminal-tab-close.test.ts +++ b/src/shared/workspace-session/workspace-session-terminal-tab-close.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest' -import { getDefaultWorkspaceSession } from './constants' -import type { Tab } from './tab-types' -import type { TerminalTab } from './terminal-tab-types' +import { getDefaultWorkspaceSession } from '../constants' +import type { Tab } from '../tab-types' +import type { TerminalTab } from '../workspace-layout/terminal-tab-types' import type { WorkspaceSessionState } from './workspace-session-state-types' import { closeTerminalTabInWorkspaceSession } from './workspace-session-terminal-tab-close' diff --git a/src/shared/workspace-session-terminal-tab-close.ts b/src/shared/workspace-session/workspace-session-terminal-tab-close.ts similarity index 99% rename from src/shared/workspace-session-terminal-tab-close.ts rename to src/shared/workspace-session/workspace-session-terminal-tab-close.ts index 21dfe62f741..0d9e0952103 100644 --- a/src/shared/workspace-session-terminal-tab-close.ts +++ b/src/shared/workspace-session/workspace-session-terminal-tab-close.ts @@ -1,4 +1,4 @@ -import type { Tab, TabGroup, TabGroupLayoutNode, WorkspaceVisibleTabType } from './tab-types' +import type { Tab, TabGroup, TabGroupLayoutNode, WorkspaceVisibleTabType } from '../tab-types' import type { WorkspaceSessionState } from './workspace-session-state-types' export type WorkspaceSessionTerminalTabCloseResult = { diff --git a/src/shared/workspace-session-validation-work.test.ts b/src/shared/workspace-session/workspace-session-validation-work.test.ts similarity index 100% rename from src/shared/workspace-session-validation-work.test.ts rename to src/shared/workspace-session/workspace-session-validation-work.test.ts diff --git a/src/shared/worktree/create-types.ts b/src/shared/worktree/create-types.ts index 597115a4b8a..3c5d9b673dc 100644 --- a/src/shared/worktree/create-types.ts +++ b/src/shared/worktree/create-types.ts @@ -3,7 +3,7 @@ import type { ExecutionHostId } from '../execution-host' import type { ArchiveHookOverride } from './archive-hook-removal-gate' import type { WorkspaceSource } from '../workspace-source' import type { TaskSourceContext } from '../task-source-context' -import type { WorkspaceKey } from '../folder-workspaces/folder-workspace-types' +import type { WorkspaceKey } from '../workspace-scope' import type { TuiAgent } from '../agent-launch/catalog/tui-agent' import type { AutomationWorkspaceProvenanceRequest, diff --git a/src/shared/worktree/degraded-repo-worktree-validity.ts b/src/shared/worktree/degraded-repo-worktree-validity.ts index a4eb6704b08..be4277ecda7 100644 --- a/src/shared/worktree/degraded-repo-worktree-validity.ts +++ b/src/shared/worktree/degraded-repo-worktree-validity.ts @@ -1,5 +1,5 @@ import type { Repo } from '../repo-types' -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' import type { DetectedWorktreeListResult, Worktree } from './types' import { parseWorkspaceKey } from '../workspace-scope' import { getRepoIdFromWorktreeId } from './id' diff --git a/src/shared/worktree/id.ts b/src/shared/worktree/id.ts index 882902402a0..34f99ca7dd7 100644 --- a/src/shared/worktree/id.ts +++ b/src/shared/worktree/id.ts @@ -1,9 +1,7 @@ import { normalizeRuntimePathForComparison } from '../cross-platform-path' -import { WORKTREE_ID_SEPARATOR } from '../pty-session-id-format' +import { WORKTREE_ID_SEPARATOR } from '../terminal/pty/lifecycle/pty-session-id-format' import type { Repo } from '../repo-types' -export { WORKTREE_ID_SEPARATOR } from '../pty-session-id-format' - export type ParsedWorktreeId = { repoId: string worktreePath: string diff --git a/src/shared/worktree/lineage-types.ts b/src/shared/worktree/lineage-types.ts index b3e6b8d58bd..f0050cd55d5 100644 --- a/src/shared/worktree/lineage-types.ts +++ b/src/shared/worktree/lineage-types.ts @@ -1,4 +1,4 @@ -import type { WorkspaceKey } from '../folder-workspaces/folder-workspace-types' +import type { WorkspaceKey } from '../workspace-scope' export type WorktreeLineageOrigin = 'orchestration' | 'cli' | 'manual' export type WorktreeLineageCaptureConfidence = 'explicit' | 'inferred' diff --git a/src/shared/wsl-login-shell-command.ts b/src/shared/wsl-login-shell-command.ts index 04322cd7c8a..751b459eecd 100644 --- a/src/shared/wsl-login-shell-command.ts +++ b/src/shared/wsl-login-shell-command.ts @@ -1,7 +1,7 @@ import { getFishClaudeShellFunction } from './claude-shell-function' import { FISH_WSL_CWD_REPORT_FUNCTION } from './fish-wsl-cwd-report' import { buildPosixStdoutFence, type PosixStdoutFence } from './posix-stdout-fence' -import { quotePosixShell } from './shell-argument-quoting' +import { quotePosixShell } from './shell/launch/shell-argument-quoting' /** Use --exec to preserve guest argv. WSL’s -- expands $name even without a shell, corrupting scripts such as awk field references; host escaping cannot reliably prevent it. */ export function buildWslExecArgs( diff --git a/src/shared/wsl-move/wsl-move-dispositions.ts b/src/shared/wsl-move/wsl-move-dispositions.ts index f31e9463e5a..6cc2f4c2fcb 100644 --- a/src/shared/wsl-move/wsl-move-dispositions.ts +++ b/src/shared/wsl-move/wsl-move-dispositions.ts @@ -1,7 +1,7 @@ /** Exhaustive state dispositions for local WSL project moves. Typed stores are compile-checked; tests census localStorage/SQLite. Sibling tables cover UI, storage and out-of-store state. * Item numbers refer to docs/design/wsl-via-orcad-lossless-mover.md §2. */ import type { PersistedState } from '../persisted-state-types' -import type { WorkspaceSessionState } from '../workspace-session-state-types' +import type { WorkspaceSessionState } from '../workspace-session/workspace-session-state-types' export type WslMoveDisposition = /** Carried in the migration manifest; the path stage rewrites UNC to Linux. */ diff --git a/src/shared/xterm-conpty-options.ts b/src/shared/xterm-conpty-options.ts index e59a5a03e82..1f9c8aeb55d 100644 --- a/src/shared/xterm-conpty-options.ts +++ b/src/shared/xterm-conpty-options.ts @@ -1,4 +1,4 @@ -import type { PtyOwnerBackend } from './pty-owner-backend' +import type { PtyOwnerBackend } from './terminal/pty/lifecycle/pty-owner-backend' /** xterm `windowsPty` for a ConPTY-backed terminal, shared by the window and the daemon's emulator. */ export type XtermConptyOptions = { backend: 'conpty'; buildNumber?: number } diff --git a/src/wsl-guest/agent-hook-interrupt-reconciliation.test.ts b/src/wsl-guest/agent-hook-interrupt-reconciliation.test.ts index ed43b87f20d..c603482b43e 100644 --- a/src/wsl-guest/agent-hook-interrupt-reconciliation.test.ts +++ b/src/wsl-guest/agent-hook-interrupt-reconciliation.test.ts @@ -4,7 +4,7 @@ import { join } from 'node:path' import { describe, expect, it, vi } from 'vitest' import type { AgentHookRelayEnvelope } from '../shared/agent-hook-listener/transport/agent-hook-relay' import type { RemoteAgentInterruptRequest } from '../shared/agent-hook-listener/transport/agent-hook-interrupt-reconciliation' -import { makePaneKey } from '../shared/stable-pane-id' +import { makePaneKey } from '../shared/workspace-layout/stable-pane-id' import { AGENT_STATUS_STALE_AFTER_MS } from '../shared/agent-status/contracts/agent-status-freshness' import { RelayAgentHookServer } from './agent-hook-server' diff --git a/src/wsl-guest/agent-hook-opencode-tui-identity.test.ts b/src/wsl-guest/agent-hook-opencode-tui-identity.test.ts index af8c4201fcf..9b3e834aa40 100644 --- a/src/wsl-guest/agent-hook-opencode-tui-identity.test.ts +++ b/src/wsl-guest/agent-hook-opencode-tui-identity.test.ts @@ -4,7 +4,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { RelayAgentHookServer } from './agent-hook-server' import type { AgentHookRelayEnvelope } from '../shared/agent-hook-listener/transport/agent-hook-relay' -import { makePaneKey } from '../shared/stable-pane-id' +import { makePaneKey } from '../shared/workspace-layout/stable-pane-id' import { drainAgentHookSpoolAsync } from '../shared/agent-hook-listener/transport/agent-hook-spool' import { createHookListenerState } from '../shared/agent-hook-listener/listener-state' import { diff --git a/src/wsl-guest/agent-hook-provider-normalization.test.ts b/src/wsl-guest/agent-hook-provider-normalization.test.ts index ef1b5de3d1b..3ea7bdabb39 100644 --- a/src/wsl-guest/agent-hook-provider-normalization.test.ts +++ b/src/wsl-guest/agent-hook-provider-normalization.test.ts @@ -7,7 +7,7 @@ import type { AgentHookRelayEnvelope, AgentHookSource } from '../shared/agent-hook-listener/transport/agent-hook-relay' -import { makePaneKey } from '../shared/stable-pane-id' +import { makePaneKey } from '../shared/workspace-layout/stable-pane-id' const PANE = makePaneKey('tab-1', '11111111-1111-4111-8111-111111111111') diff --git a/src/wsl-guest/agent-hook-server-claude-owed-notification-expiry.test.ts b/src/wsl-guest/agent-hook-server-claude-owed-notification-expiry.test.ts index cab51a257f5..449dbc59249 100644 --- a/src/wsl-guest/agent-hook-server-claude-owed-notification-expiry.test.ts +++ b/src/wsl-guest/agent-hook-server-claude-owed-notification-expiry.test.ts @@ -5,7 +5,7 @@ import { join } from 'node:path' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { AgentHookRelayEnvelope } from '../shared/agent-hook-listener/transport/agent-hook-relay' import { CLAUDE_OWED_TASK_NOTIFICATION_LEASE_MS } from '../shared/agent-hook-listener/providers/claude-owed-task-notifications' -import { makePaneKey } from '../shared/stable-pane-id' +import { makePaneKey } from '../shared/workspace-layout/stable-pane-id' import { RelayAgentHookServer } from './agent-hook-server' const PANE_KEY = makePaneKey('tab-1', '11111111-1111-4111-8111-111111111111') diff --git a/src/wsl-guest/agent-hook-server-claude-session-continuation.test.ts b/src/wsl-guest/agent-hook-server-claude-session-continuation.test.ts index 0f2a40f0ed1..8de47c664ef 100644 --- a/src/wsl-guest/agent-hook-server-claude-session-continuation.test.ts +++ b/src/wsl-guest/agent-hook-server-claude-session-continuation.test.ts @@ -6,7 +6,7 @@ import { join } from 'node:path' import { RelayAgentHookServer } from './agent-hook-server' import type { AgentHookRelayEnvelope } from '../shared/agent-hook-listener/transport/agent-hook-relay' import type { probeAgentProcessPresence } from '../shared/agent-status/process/agent-process-presence-probe' -import { makePaneKey } from '../shared/stable-pane-id' +import { makePaneKey } from '../shared/workspace-layout/stable-pane-id' const probe = vi.hoisted(() => vi.fn(async () => 'live')) vi.mock('../shared/agent-status/process/agent-process-presence-probe', () => ({ diff --git a/src/wsl-guest/agent-hook-server-codex-subagent-transcript.test.ts b/src/wsl-guest/agent-hook-server-codex-subagent-transcript.test.ts index abb867fddd1..bddb0d4c7a3 100644 --- a/src/wsl-guest/agent-hook-server-codex-subagent-transcript.test.ts +++ b/src/wsl-guest/agent-hook-server-codex-subagent-transcript.test.ts @@ -5,7 +5,7 @@ import { join } from 'node:path' import { RelayAgentHookServer } from './agent-hook-server' import type { AgentHookRelayEnvelope } from '../shared/agent-hook-listener/transport/agent-hook-relay' -import { makePaneKey } from '../shared/stable-pane-id' +import { makePaneKey } from '../shared/workspace-layout/stable-pane-id' const PANE_KEY = makePaneKey('tab-1', '11111111-1111-4111-8111-111111111111') const CHILD_ID = '019fa65f-3144-7151-9c02-cff7a28f316f' diff --git a/src/wsl-guest/agent-hook-server.test.ts b/src/wsl-guest/agent-hook-server.test.ts index 5c77aca758c..1f0989c34a4 100644 --- a/src/wsl-guest/agent-hook-server.test.ts +++ b/src/wsl-guest/agent-hook-server.test.ts @@ -6,7 +6,7 @@ import { RelayAgentHookServer } from './agent-hook-server' import type { AgentHookResultRetryScheduler } from './agent-hook-result-retry-scheduler' import { endpointDirForRelaySocket } from './agent-hook-endpoint-coordinates' import type { AgentHookRelayEnvelope } from '../shared/agent-hook-listener/transport/agent-hook-relay' -import { makePaneKey } from '../shared/stable-pane-id' +import { makePaneKey } from '../shared/workspace-layout/stable-pane-id' import * as agentHookListener from '../shared/agent-hook-listener/grok-result-discovery' import { HOOK_REQUEST_MAX_BYTES } from '../shared/agent-hook-listener/request-body' diff --git a/src/wsl-guest/dispatcher-client-lifecycle.ts b/src/wsl-guest/dispatcher-client-lifecycle.ts index 8680874427c..9d9736b433e 100644 --- a/src/wsl-guest/dispatcher-client-lifecycle.ts +++ b/src/wsl-guest/dispatcher-client-lifecycle.ts @@ -1,5 +1,5 @@ import { FrameDecoder, KEEPALIVE_SEND_MS, TIMEOUT_MS, encodeKeepAliveFrame } from './protocol' -import type { PtyConsumerCloseCause } from '../shared/pty-consumer-session-contract' +import type { PtyConsumerCloseCause } from '../shared/terminal/pty/lifecycle/pty-consumer-session-contract' import type { DispatcherClientWriter, RelayClientSinkOptions, diff --git a/src/wsl-guest/dispatcher-client-state.ts b/src/wsl-guest/dispatcher-client-state.ts index 5921e5256ad..af89866e338 100644 --- a/src/wsl-guest/dispatcher-client-state.ts +++ b/src/wsl-guest/dispatcher-client-state.ts @@ -1,6 +1,6 @@ import type { DecodedFrame, JsonRpcNotification, JsonRpcRequest, JsonRpcResponse } from './protocol' import { ClientRequestAborts } from './client-request-aborts' -import type { PtyConsumerCloseCause } from '../shared/pty-consumer-session-contract' +import type { PtyConsumerCloseCause } from '../shared/terminal/pty/lifecycle/pty-consumer-session-contract' import { LegacyRelayPublicationLedger, type LegacyPublicationLease diff --git a/src/wsl-guest/relay-agent-presence.test.ts b/src/wsl-guest/relay-agent-presence.test.ts index 3c39a4ac358..fb40190840f 100644 --- a/src/wsl-guest/relay-agent-presence.test.ts +++ b/src/wsl-guest/relay-agent-presence.test.ts @@ -6,7 +6,7 @@ import type * as RetrySchedulerModule from './agent-hook-result-retry-scheduler' import type { AgentHookResultRetryHost } from './agent-hook-result-retry-scheduler' import { RelayAgentHookServer } from './agent-hook-server' import type { AgentHookRelayEnvelope } from '../shared/agent-hook-listener/transport/agent-hook-relay' -import { makePaneKey } from '../shared/stable-pane-id' +import { makePaneKey } from '../shared/workspace-layout/stable-pane-id' const probe = vi.hoisted(() => vi.fn(async (): Promise<'live' | 'unverifiable' | 'exited'> => 'unverifiable') diff --git a/src/wsl-guest/relay-hook-root-acquisition.test.ts b/src/wsl-guest/relay-hook-root-acquisition.test.ts index 9e87b2e3113..65616e96819 100644 --- a/src/wsl-guest/relay-hook-root-acquisition.test.ts +++ b/src/wsl-guest/relay-hook-root-acquisition.test.ts @@ -5,7 +5,7 @@ import { join } from 'node:path' import { RelayAgentHookServer } from './agent-hook-server' import { createRelayPaneRootResolver } from './relay-pane-root' import type { AgentHookRelayEnvelope } from '../shared/agent-hook-listener/transport/agent-hook-relay' -import { makePaneKey } from '../shared/stable-pane-id' +import { makePaneKey } from '../shared/workspace-layout/stable-pane-id' import type { probeAgentProcessPresence } from '../shared/agent-status/process/agent-process-presence-probe' import { readHookRootEvidence } from '../shared/agent-hook-listener/presence/hook-process-root-evidence' import type { ProcessTableRow } from '../shared/process-table-snapshot' diff --git a/src/wsl-guest/relay-http-owner-probe-lifecycle.test.ts b/src/wsl-guest/relay-http-owner-probe-lifecycle.test.ts index 258d3afb9d4..3bfc75edb7f 100644 --- a/src/wsl-guest/relay-http-owner-probe-lifecycle.test.ts +++ b/src/wsl-guest/relay-http-owner-probe-lifecycle.test.ts @@ -3,7 +3,7 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' import { RelayAgentHookServer } from './agent-hook-server' -import { makePaneKey } from '../shared/stable-pane-id' +import { makePaneKey } from '../shared/workspace-layout/stable-pane-id' import type { AgentHookRelayEnvelope } from '../shared/agent-hook-listener/transport/agent-hook-relay' import type { probeAgentProcessPresence } from '../shared/agent-status/process/agent-process-presence-probe' diff --git a/src/wsl-guest/relay-idle-process-owner.test.ts b/src/wsl-guest/relay-idle-process-owner.test.ts index ba720544be1..e0f6483aa99 100644 --- a/src/wsl-guest/relay-idle-process-owner.test.ts +++ b/src/wsl-guest/relay-idle-process-owner.test.ts @@ -4,7 +4,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { RelayAgentHookServer } from './agent-hook-server' import type { AgentHookRelayEnvelope } from '../shared/agent-hook-listener/transport/agent-hook-relay' -import { makePaneKey } from '../shared/stable-pane-id' +import { makePaneKey } from '../shared/workspace-layout/stable-pane-id' import type { probeAgentProcessPresence } from '../shared/agent-status/process/agent-process-presence-probe' const probe = vi.hoisted(() => vi.fn(async () => 'live')) diff --git a/src/wsl-guest/relay-nested-same-provider-owner.test.ts b/src/wsl-guest/relay-nested-same-provider-owner.test.ts index 11cb85b28c0..ccabcaef023 100644 --- a/src/wsl-guest/relay-nested-same-provider-owner.test.ts +++ b/src/wsl-guest/relay-nested-same-provider-owner.test.ts @@ -4,7 +4,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { RelayAgentHookServer } from './agent-hook-server' import type { AgentHookRelayEnvelope } from '../shared/agent-hook-listener/transport/agent-hook-relay' -import { makePaneKey } from '../shared/stable-pane-id' +import { makePaneKey } from '../shared/workspace-layout/stable-pane-id' import type { probeAgentProcessPresence } from '../shared/agent-status/process/agent-process-presence-probe' const probe = vi.hoisted(() => vi.fn(async () => 'live')) diff --git a/src/wsl-guest/wsl-agent-hook-relay.test.ts b/src/wsl-guest/wsl-agent-hook-relay.test.ts index bd5daa88ada..f8702080c77 100644 --- a/src/wsl-guest/wsl-agent-hook-relay.test.ts +++ b/src/wsl-guest/wsl-agent-hook-relay.test.ts @@ -5,7 +5,7 @@ import { join } from 'node:path' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { RelayAgentHookServer } from './agent-hook-server' -import { makePaneKey } from '../shared/stable-pane-id' +import { makePaneKey } from '../shared/workspace-layout/stable-pane-id' import { sanitizeWslHookInstanceKey, wslHookRelayEndpointDir, diff --git a/tests/e2e/__mocks__/native-chat-ssh-delivery.ts b/tests/e2e/__mocks__/native-chat-ssh-delivery.ts index 55f095e8ae8..4f84ace81f0 100644 --- a/tests/e2e/__mocks__/native-chat-ssh-delivery.ts +++ b/tests/e2e/__mocks__/native-chat-ssh-delivery.ts @@ -9,7 +9,7 @@ import { WRITE_ACCEPTED, writeUnverifiable, type WriteSettlement -} from '../../../src/shared/pty-write-settlement' +} from '../../../src/shared/terminal/pty/lifecycle/pty-write-settlement' import { toSshExecutionHostId } from '../../../src/shared/execution-host' import { createPtyWriteInput } from '../../../src/main/ipc/pty/ipc/write-input' import type { IPtyProvider } from '../../../src/main/providers/pty-provider-contract' diff --git a/tests/e2e/accumulated-workspace-state-builder.ts b/tests/e2e/accumulated-workspace-state-builder.ts index 124f7624f62..9a1d82aeaac 100644 --- a/tests/e2e/accumulated-workspace-state-builder.ts +++ b/tests/e2e/accumulated-workspace-state-builder.ts @@ -5,7 +5,7 @@ import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode, TerminalTab -} from '../../src/shared/terminal-tab-types' +} from '../../src/shared/workspace-layout/terminal-tab-types' import type { Tab, TabGroup, TabGroupLayoutNode } from '../../src/shared/tab-types' import type { WorktreeLineage } from '../../src/shared/worktree/lineage-types' import type { Worktree } from '../../src/shared/worktree/types' diff --git a/tests/e2e/agent-sender-open-unheld.unit.test.ts b/tests/e2e/agent-sender-open-unheld.unit.test.ts index ce720d8b276..478982a9f33 100644 --- a/tests/e2e/agent-sender-open-unheld.unit.test.ts +++ b/tests/e2e/agent-sender-open-unheld.unit.test.ts @@ -47,7 +47,7 @@ import type { AgentSenderAssociation } from '../../src/shared/agent-sender-assoc import type { AgentMessageSender } from '../../src/shared/agent-session/agent-session-message-source' import type { RuntimeClientTarget } from '../../src/shared/runtime-client-target' import { toRemoteRuntimePtyId } from '../../src/shared/remote-runtime/remote-runtime-pty-id' -import { toWebTerminalSurfaceTabId } from '../../src/shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../src/shared/workspace-layout/terminal-surface-id' const LOCAL: RuntimeClientTarget = { kind: 'local' } const PAIRED: RuntimeClientTarget = { kind: 'environment', environmentId: 'paired' } diff --git a/tests/e2e/claude-agent-row-view.unit.test.ts b/tests/e2e/claude-agent-row-view.unit.test.ts index 58b728804de..397e5f7c8a2 100644 --- a/tests/e2e/claude-agent-row-view.unit.test.ts +++ b/tests/e2e/claude-agent-row-view.unit.test.ts @@ -12,7 +12,7 @@ import { createHookListenerState } from '../../src/shared/agent-hook-listener/li import { seedClaudeSubagentRosterFromSnapshots } from '../../src/shared/agent-hook-listener/providers/claude-roster-state' import { claudeRosterToSnapshots } from '../../src/shared/claude-subagent-roster' import { decodeAgentSubagentsField } from '../../src/shared/agent-status/contracts/agent-status-subagent-snapshot' -import { makePaneKey } from '../../src/shared/stable-pane-id' +import { makePaneKey } from '../../src/shared/workspace-layout/stable-pane-id' import { ClaudeAgentViewBridge } from '../../src/main/claude/agent-view/agent-view-bridge' import { replaceRuntimeEnvironmentRevisions } from '@/runtime/runtime-environment-revision' import { RUNTIME_PROTOCOL_VERSION } from '../../src/shared/protocol-version' diff --git a/tests/e2e/cli-agent-unopened-workspace-resume.spec.ts b/tests/e2e/cli-agent-unopened-workspace-resume.spec.ts index b39287508d6..7b4d8d9faad 100644 --- a/tests/e2e/cli-agent-unopened-workspace-resume.spec.ts +++ b/tests/e2e/cli-agent-unopened-workspace-resume.spec.ts @@ -2,7 +2,7 @@ import { chmodSync, readFileSync, rmSync, writeFileSync } from 'node:fs' import path from 'node:path' import { RuntimeClient } from '../../src/cli/runtime-client' -import { makePaneKey } from '../../src/shared/stable-pane-id' +import { makePaneKey } from '../../src/shared/workspace-layout/stable-pane-id' import { PROTOCOL_VERSION } from '../../src/main/daemon/types' import { expect, test } from './helpers/orca-app' import { TEST_REPO_PATH_FILE } from './global-setup' diff --git a/tests/e2e/completed-worker-retirement-resume.unit.test.ts b/tests/e2e/completed-worker-retirement-resume.unit.test.ts index 5e99954b8a7..07673913380 100644 --- a/tests/e2e/completed-worker-retirement-resume.unit.test.ts +++ b/tests/e2e/completed-worker-retirement-resume.unit.test.ts @@ -3,9 +3,9 @@ import path from 'node:path' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { z } from 'zod' import type { SleepingAgentSessionRecord } from '../../src/shared/agent-session/lifecycle/agent-session-resume' -import { makePaneKey } from '../../src/shared/stable-pane-id' -import { parseWorkspaceSession } from '../../src/shared/workspace-session-schema' -import type { TerminalTab } from '../../src/shared/terminal-tab-types' +import { makePaneKey } from '../../src/shared/workspace-layout/stable-pane-id' +import { parseWorkspaceSession } from '../../src/shared/workspace-session/workspace-session-schema' +import type { TerminalTab } from '../../src/shared/workspace-layout/terminal-tab-types' import type { Worktree } from '../../src/shared/worktree/types' import { OrchestrationDb } from '../../src/main/runtime/orchestration/db' import { OrcaRuntimeService } from '../../src/main/runtime/orca-runtime' diff --git a/tests/e2e/cross-version-wire/cross-version-registered-agents.unit.test.ts b/tests/e2e/cross-version-wire/cross-version-registered-agents.unit.test.ts index 65ccea5103b..ba1218a64c7 100644 --- a/tests/e2e/cross-version-wire/cross-version-registered-agents.unit.test.ts +++ b/tests/e2e/cross-version-wire/cross-version-registered-agents.unit.test.ts @@ -13,7 +13,7 @@ import { STRUCTURED_AGENT_SESSION_REGISTERED_AGENTS_RUNTIME_CAPABILITY } from '. import '../../../src/shared/agent-session/agent-session-runtime-capabilities' import type { RuntimeMobileSessionTabsSnapshot } from '../../../src/shared/runtime-types' import '../../../src/shared/structured-native-chat-launch-route' -import { parseWorkspaceSession } from '../../../src/shared/workspace-session-schema' +import { parseWorkspaceSession } from '../../../src/shared/workspace-session/workspace-session-schema' import { importReleaseCheckoutModule, materializeReleaseCheckout, diff --git a/tests/e2e/cross-version-wire/cross-version-session-tabs-retirement-proof.unit.test.ts b/tests/e2e/cross-version-wire/cross-version-session-tabs-retirement-proof.unit.test.ts index bb6e47dc0bf..8f136db10a0 100644 --- a/tests/e2e/cross-version-wire/cross-version-session-tabs-retirement-proof.unit.test.ts +++ b/tests/e2e/cross-version-wire/cross-version-session-tabs-retirement-proof.unit.test.ts @@ -92,7 +92,7 @@ function exitProof(): Record { async function loadBuild(ref: string | null): Promise { if (ref === null) { const [ledger, proof, retirement] = await Promise.all([ - import('../../../src/shared/terminal-retirement-proof-ledger'), + import('../../../src/shared/workspace-layout/terminal-retirement-proof-ledger'), import('../../../src/main/runtime/mobile-session-terminal-retirement-proof'), import('../../../src/main/runtime/mobile-session-terminal-retirement') ]) diff --git a/tests/e2e/daemon-live-session-preservation.spec.ts b/tests/e2e/daemon-live-session-preservation.spec.ts index bb7ca2e7dea..12b2232ce5c 100644 --- a/tests/e2e/daemon-live-session-preservation.spec.ts +++ b/tests/e2e/daemon-live-session-preservation.spec.ts @@ -14,7 +14,7 @@ import { import { ensureTerminalVisible, waitForActiveWorktree, waitForSessionReady } from './helpers/store' import { attachRepoAndOpenTerminal, createRestartSession } from './helpers/orca-restart' import { PROTOCOL_VERSION } from '../../src/main/daemon/types' -import { PTY_SESSION_ID_SEPARATOR } from '../../src/shared/pty-session-id-format' +import { PTY_SESSION_ID_SEPARATOR } from '../../src/shared/terminal/pty/lifecycle/pty-session-id-format' function daemonPidPath(userDataDir: string): string { return path.join(userDataDir, 'daemon', `daemon-v${PROTOCOL_VERSION}.pid`) diff --git a/tests/e2e/daemon-running-work-probe.unit.test.ts b/tests/e2e/daemon-running-work-probe.unit.test.ts index 4a6ef996c44..bd4d018144c 100644 --- a/tests/e2e/daemon-running-work-probe.unit.test.ts +++ b/tests/e2e/daemon-running-work-probe.unit.test.ts @@ -3,7 +3,7 @@ import { Session } from '../../src/main/daemon/session' import { inspectTerminalHostProcess } from '../../src/main/daemon/terminal-host-process-inspection' import type * as SnapshotReader from '../../src/shared/process-table-snapshot-reader' import type { ProcessTableRow } from '../../src/shared/process-table-snapshot' -import { probePtyRunningWorkWithInspection } from '../../src/shared/pty-running-work-probe' +import { probePtyRunningWorkWithInspection } from '../../src/shared/terminal/pty/lifecycle/pty-running-work-probe' const { readSnapshot } = vi.hoisted(() => ({ readSnapshot: vi.fn() diff --git a/tests/e2e/daemon-slow-health-check-preservation.spec.ts b/tests/e2e/daemon-slow-health-check-preservation.spec.ts index 9b83077f5bf..540d1ed5957 100644 --- a/tests/e2e/daemon-slow-health-check-preservation.spec.ts +++ b/tests/e2e/daemon-slow-health-check-preservation.spec.ts @@ -15,7 +15,7 @@ import { ensureTerminalVisible, waitForActiveWorktree, waitForSessionReady } fro import { attachRepoAndOpenTerminal, createRestartSession } from './helpers/orca-restart' import { E2E_FORCE_DAEMON_HEALTH_UNREACHABLE_ENV } from '../../src/main/daemon/daemon-health' import { PROTOCOL_VERSION } from '../../src/main/daemon/types' -import { PTY_SESSION_ID_SEPARATOR } from '../../src/shared/pty-session-id-format' +import { PTY_SESSION_ID_SEPARATOR } from '../../src/shared/terminal/pty/lifecycle/pty-session-id-format' // Delay guard decisions beyond electron.launch so the test can attach its stderr listener. const GUARD_DECISION_DELAY_MS = 3_000 diff --git a/tests/e2e/daemon-slow-init-pty-gate.spec.ts b/tests/e2e/daemon-slow-init-pty-gate.spec.ts index c9cfbc54b21..138881191a0 100644 --- a/tests/e2e/daemon-slow-init-pty-gate.spec.ts +++ b/tests/e2e/daemon-slow-init-pty-gate.spec.ts @@ -14,7 +14,7 @@ import { import { ensureTerminalVisible, waitForActiveWorktree, waitForSessionReady } from './helpers/store' import { attachRepoAndOpenTerminal, createRestartSession } from './helpers/orca-restart' import { PROTOCOL_VERSION } from '../../src/main/daemon/types' -import { PTY_SESSION_ID_SEPARATOR } from '../../src/shared/pty-session-id-format' +import { PTY_SESSION_ID_SEPARATOR } from '../../src/shared/terminal/pty/lifecycle/pty-session-id-format' // Outlast the 12s first-window timeout but stay below the 60s local-PTY fail-open cap (#5232). const DAEMON_INIT_DELAY_MS = 15_000 diff --git a/tests/e2e/desktop-published-split-orientation-legacy-leaf.spec.ts b/tests/e2e/desktop-published-split-orientation-legacy-leaf.spec.ts index 0a59972f4cc..dc7e43bb84d 100644 --- a/tests/e2e/desktop-published-split-orientation-legacy-leaf.spec.ts +++ b/tests/e2e/desktop-published-split-orientation-legacy-leaf.spec.ts @@ -2,7 +2,7 @@ import type { Page } from '@stablyai/playwright-test' import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode -} from '../../src/shared/terminal-tab-types' +} from '../../src/shared/workspace-layout/terminal-tab-types' import { expect, test } from './helpers/orca-app' import { callPairedRuntime, diff --git a/tests/e2e/golden-quit-relaunch-session.spec.ts b/tests/e2e/golden-quit-relaunch-session.spec.ts index 4f00f5af055..2b755e93606 100644 --- a/tests/e2e/golden-quit-relaunch-session.spec.ts +++ b/tests/e2e/golden-quit-relaunch-session.spec.ts @@ -14,7 +14,7 @@ import { } from './helpers/terminal' import { TEST_REPO_PATH_FILE } from './global-setup' import { splitMarkerEchoCommand } from './terminal-marker-echo-command' -import { PTY_SESSION_ID_SEPARATOR } from '../../src/shared/pty-session-id-format' +import { PTY_SESSION_ID_SEPARATOR } from '../../src/shared/terminal/pty/lifecycle/pty-session-id-format' function seededRepoPath(): string { const repoPath = existsSync(TEST_REPO_PATH_FILE) diff --git a/tests/e2e/headless-editor-mirror-identities.unit.test.ts b/tests/e2e/headless-editor-mirror-identities.unit.test.ts index b362575d752..069dc1bfbdf 100644 --- a/tests/e2e/headless-editor-mirror-identities.unit.test.ts +++ b/tests/e2e/headless-editor-mirror-identities.unit.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from 'vitest' import { buildHeadlessMobileSessionEditorTabs } from '../../src/main/runtime/mobile-session-editor-projection' -import type { WorkspaceSessionState } from '../../src/shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../src/shared/workspace-session/workspace-session-state-types' import { buildOwnedEditorFileId } from '../../src/renderer/src/store/slices/editor/file-ids/editor-file-ids' import { applyWebSessionTabsSnapshot } from '../../src/renderer/src/runtime/web-session-tabs-sync/snapshot-api' import { diff --git a/tests/e2e/headless-paired-remote-terminal-reveal-grid.spec.ts b/tests/e2e/headless-paired-remote-terminal-reveal-grid.spec.ts index b4dcccb918f..bb7f19f1394 100644 --- a/tests/e2e/headless-paired-remote-terminal-reveal-grid.spec.ts +++ b/tests/e2e/headless-paired-remote-terminal-reveal-grid.spec.ts @@ -1,6 +1,6 @@ import { writeFileSync } from 'node:fs' import type { Page } from '@stablyai/playwright-test' -import { toWebTerminalSurfaceTabId } from '../../src/shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../src/shared/workspace-layout/terminal-surface-id' import { expect, test } from './helpers/orca-app' import { launchHeadlessPairedRuntimeHost } from './helpers/headless-paired-runtime-host' import { launchPairedWebClient, type PairedWebClient } from './helpers/paired-electron-client' diff --git a/tests/e2e/headless-paired-remote-terminal-stall-recovery.spec.ts b/tests/e2e/headless-paired-remote-terminal-stall-recovery.spec.ts index 9d1d4c6dd24..b09ffda806d 100644 --- a/tests/e2e/headless-paired-remote-terminal-stall-recovery.spec.ts +++ b/tests/e2e/headless-paired-remote-terminal-stall-recovery.spec.ts @@ -3,12 +3,12 @@ import os from 'node:os' import path from 'node:path' import type { Page } from '@stablyai/playwright-test' import type { RuntimeTerminalRead } from '../../src/shared/runtime-types' -import { toWebTerminalSurfaceTabId } from '../../src/shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../src/shared/workspace-layout/terminal-surface-id' import { expect, test } from './helpers/orca-app' import { launchHeadlessPairedRuntimeHost } from './helpers/headless-paired-runtime-host' import { launchPairedWebClient } from './helpers/paired-electron-client' import { getTerminalContent, waitForActivePanePtyId } from './helpers/terminal' -import { quotePosixShell } from '../../src/shared/shell-argument-quoting' +import { quotePosixShell } from '../../src/shared/shell/launch/shell-argument-quoting' const MIN_EXHAUSTED_ACK_BYTES = 400 * 1024 const scratch = mkdtempSync(path.join(os.tmpdir(), 'orca-headless-stalled-stream-')) diff --git a/tests/e2e/headless-paired-remote-terminal-viewer-size.spec.ts b/tests/e2e/headless-paired-remote-terminal-viewer-size.spec.ts index 1058bb67819..0f5949f1f6c 100644 --- a/tests/e2e/headless-paired-remote-terminal-viewer-size.spec.ts +++ b/tests/e2e/headless-paired-remote-terminal-viewer-size.spec.ts @@ -1,5 +1,5 @@ import type { Page } from '@stablyai/playwright-test' -import { toWebTerminalSurfaceTabId } from '../../src/shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../src/shared/workspace-layout/terminal-surface-id' import { expect, test } from './helpers/orca-app' import { launchHeadlessPairedRuntimeHost } from './helpers/headless-paired-runtime-host' import { launchPairedWebClient, type PairedWebClient } from './helpers/paired-electron-client' diff --git a/tests/e2e/headless-serve-chat-tab-placement.spec.ts b/tests/e2e/headless-serve-chat-tab-placement.spec.ts index 570f1561520..8ba6e762b2f 100644 --- a/tests/e2e/headless-serve-chat-tab-placement.spec.ts +++ b/tests/e2e/headless-serve-chat-tab-placement.spec.ts @@ -8,7 +8,7 @@ import { structuredAgentSessionCreateParams } from '../../src/shared/agent-session/structured-agent-session-create' import { structuredAgentSessionTabId } from '../../src/shared/agent-session/view/structured-agent-session-projection' -import { HOST_TERMINAL_SURFACE_SEPARATOR } from '../../src/shared/terminal-surface-id' +import { HOST_TERMINAL_SURFACE_SEPARATOR } from '../../src/shared/workspace-layout/terminal-surface-id' import { expect, test } from './helpers/orca-app' import { launchHeadlessPairedRuntimeHost } from './helpers/headless-paired-runtime-host' import { readServerLayout } from './helpers/paired-desktop-server-layout' diff --git a/tests/e2e/headless-serve-cli-terminal-retention-parity.spec.ts b/tests/e2e/headless-serve-cli-terminal-retention-parity.spec.ts index d3f51eb82af..2ccae403c8a 100644 --- a/tests/e2e/headless-serve-cli-terminal-retention-parity.spec.ts +++ b/tests/e2e/headless-serve-cli-terminal-retention-parity.spec.ts @@ -6,7 +6,7 @@ import type { Page } from '@stablyai/playwright-test' import { toWebTerminalSurfaceTabId, WEB_TERMINAL_SURFACE_TAB_PREFIX -} from '../../src/shared/terminal-surface-id' +} from '../../src/shared/workspace-layout/terminal-surface-id' import { expect, test } from './helpers/orca-app' import { launchHeadlessPairedRuntimeHost } from './helpers/headless-paired-runtime-host' import { launchPairedElectronClient } from './helpers/paired-electron-client' diff --git a/tests/e2e/headless-serve-desktop-activation.spec.ts b/tests/e2e/headless-serve-desktop-activation.spec.ts index d6fb5ce1acf..e3299024481 100644 --- a/tests/e2e/headless-serve-desktop-activation.spec.ts +++ b/tests/e2e/headless-serve-desktop-activation.spec.ts @@ -32,7 +32,7 @@ import type { RuntimeTerminalRead } from '../../src/shared/runtime-types' import { PROTOCOL_VERSION } from '../../src/main/daemon/types' -import { parsePaneKey } from '../../src/shared/stable-pane-id' +import { parsePaneKey } from '../../src/shared/workspace-layout/stable-pane-id' const electronPackageDir = path.join(process.cwd(), 'node_modules', 'electron') const electronPath = path.join( diff --git a/tests/e2e/helpers/docker-ssh-host-target.ts b/tests/e2e/helpers/docker-ssh-host-target.ts index 77798aadfbc..c76e5d95072 100644 --- a/tests/e2e/helpers/docker-ssh-host-target.ts +++ b/tests/e2e/helpers/docker-ssh-host-target.ts @@ -4,7 +4,7 @@ import { mkdtempSync, readFileSync, rmSync } from 'node:fs' import os from 'node:os' import path from 'node:path' import { getDockerSshHostImage } from './docker-ssh-host-image' -import { quotePosixShell } from '../../../src/shared/shell-argument-quoting' +import { quotePosixShell } from '../../../src/shared/shell/launch/shell-argument-quoting' import type { TestInfo } from '@stablyai/playwright-test' diff --git a/tests/e2e/helpers/host-created-terminal-retention-oracle.ts b/tests/e2e/helpers/host-created-terminal-retention-oracle.ts index 7168af07d88..199d9b7a7ee 100644 --- a/tests/e2e/helpers/host-created-terminal-retention-oracle.ts +++ b/tests/e2e/helpers/host-created-terminal-retention-oracle.ts @@ -4,7 +4,7 @@ import { mkdtempSync, readFileSync, writeFileSync } from 'node:fs' import os from 'node:os' import path from 'node:path' import { expect, type Page } from '@stablyai/playwright-test' -import { quotePosixShell } from '../../../src/shared/shell-argument-quoting' +import { quotePosixShell } from '../../../src/shared/shell/launch/shell-argument-quoting' export type RuntimeRpcCall = (method: string, params: unknown) => Promise diff --git a/tests/e2e/helpers/layout-compat-baseline.ts b/tests/e2e/helpers/layout-compat-baseline.ts index 1c3f8ae696d..7d9c0cd7d25 100644 --- a/tests/e2e/helpers/layout-compat-baseline.ts +++ b/tests/e2e/helpers/layout-compat-baseline.ts @@ -12,7 +12,7 @@ import type { RuntimeTerminalListResult, RuntimeTerminalRead } from '../../../src/shared/runtime-terminal-contracts' -import type { TerminalPaneLayoutNode } from '../../../src/shared/terminal-tab-types' +import type { TerminalPaneLayoutNode } from '../../../src/shared/workspace-layout/terminal-tab-types' import type { PublishedWorkspaceLayout } from '../../../src/shared/workspace-layout/workspace-layout-published' import { readWorkspaceLayoutStreamFrame } from '../../../src/shared/workspace-layout/workspace-layout-stream-frames' diff --git a/tests/e2e/helpers/legacy-relay-docker-host.ts b/tests/e2e/helpers/legacy-relay-docker-host.ts index 9600e56a568..74089cbb231 100644 --- a/tests/e2e/helpers/legacy-relay-docker-host.ts +++ b/tests/e2e/helpers/legacy-relay-docker-host.ts @@ -4,7 +4,7 @@ import { execFileSync } from 'node:child_process' import { cpSync, mkdtempSync, rmSync } from 'node:fs' import os from 'node:os' import path from 'node:path' -import { quotePosixShell } from '../../../src/shared/shell-argument-quoting' +import { quotePosixShell } from '../../../src/shared/shell/launch/shell-argument-quoting' import { relaySocketNameForInstanceId } from '../../../src/main/ssh/legacy-relay/ssh-relay-instance-id' import { SshChannelMultiplexer } from '../../../src/main/ssh/ssh-channel-multiplexer' import { diff --git a/tests/e2e/helpers/orcad-upgrade-retained-state.ts b/tests/e2e/helpers/orcad-upgrade-retained-state.ts index ef98b3dbf69..33a6c732286 100644 --- a/tests/e2e/helpers/orcad-upgrade-retained-state.ts +++ b/tests/e2e/helpers/orcad-upgrade-retained-state.ts @@ -1,5 +1,5 @@ import { z } from 'zod' -import { workspaceSessionStateSchema } from '../../../src/shared/workspace-session-schema' +import { workspaceSessionStateSchema } from '../../../src/shared/workspace-session/workspace-session-schema' import { worktreeWorkspaceKey } from '../../../src/shared/workspace-scope' import { toSshExecutionHostId } from '../../../src/shared/execution-host' import { mutateStoppedProfileState } from './persisted-profile-state' diff --git a/tests/e2e/helpers/paired-desktop-server-layout.ts b/tests/e2e/helpers/paired-desktop-server-layout.ts index 06a8617a3f3..e53ae282566 100644 --- a/tests/e2e/helpers/paired-desktop-server-layout.ts +++ b/tests/e2e/helpers/paired-desktop-server-layout.ts @@ -3,7 +3,7 @@ import type { Page } from '@stablyai/playwright-test' import { pairedRuntimeConnectionFromOffer } from '../../../src/shared/remote-runtime/pairing/paired-runtime-connection' import { decodePairingOffer } from '../../../src/shared/remote-runtime/pairing/pairing' import { subscribeRemoteRuntimeRequest } from '../../../src/shared/remote-runtime/remote-runtime-client' -import { toWebTerminalSurfaceTabId } from '../../../src/shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../../src/shared/workspace-layout/terminal-surface-id' import type { PublishedWorkspaceLayout } from '../../../src/shared/workspace-layout/workspace-layout-published' import { readWorkspaceLayoutStreamFrame } from '../../../src/shared/workspace-layout/workspace-layout-stream-frames' import { expect } from './orca-app' diff --git a/tests/e2e/helpers/paired-desktop-server-terminal-tab.ts b/tests/e2e/helpers/paired-desktop-server-terminal-tab.ts index 33d17533ca2..378f5973786 100644 --- a/tests/e2e/helpers/paired-desktop-server-terminal-tab.ts +++ b/tests/e2e/helpers/paired-desktop-server-terminal-tab.ts @@ -1,7 +1,7 @@ // Match server session-tab handles to the paired desktop’s bound panes. import type { RuntimeMobileSessionTabsResult } from '../../../src/shared/runtime-types' import { toRemoteRuntimePtyId } from '../../../src/shared/remote-runtime/remote-runtime-pty-id' -import { toWebTerminalSurfaceTabId } from '../../../src/shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../../src/shared/workspace-layout/terminal-surface-id' import { expect } from './orca-app' import type { HeadlessPairedRuntimeHost } from './headless-paired-runtime-host' import type { PairedElectronClient } from './paired-electron-client' diff --git a/tests/e2e/helpers/paired-host-terminal.ts b/tests/e2e/helpers/paired-host-terminal.ts index 477f1ad17a6..f0aef86712d 100644 --- a/tests/e2e/helpers/paired-host-terminal.ts +++ b/tests/e2e/helpers/paired-host-terminal.ts @@ -1,10 +1,10 @@ // Map a host terminal to its paired client’s mirrored surface without re-deriving ids in every spec. -import type { Page } from '@stablyai/playwright-test' -import { expect } from '@stablyai/playwright-test' + +import { type Page, expect } from '@stablyai/playwright-test' import { HOST_TERMINAL_SURFACE_SEPARATOR, toWebTerminalSurfaceTabId -} from '../../../src/shared/terminal-surface-id' +} from '../../../src/shared/workspace-layout/terminal-surface-id' export type PairedHostTerminal = { /** The host's own tab id, for host-side RPCs. */ diff --git a/tests/e2e/helpers/paired-terminal-cold-activation-oracle.ts b/tests/e2e/helpers/paired-terminal-cold-activation-oracle.ts index 2550041c17b..24839830579 100644 --- a/tests/e2e/helpers/paired-terminal-cold-activation-oracle.ts +++ b/tests/e2e/helpers/paired-terminal-cold-activation-oracle.ts @@ -1,7 +1,7 @@ import type { Page } from '@stablyai/playwright-test' import '../../../src/shared/protocol-version' import { TERMINAL_PAIRED_PARKING_RUNTIME_CAPABILITY } from '../../../src/shared/terminal/runtime-policy/terminal-runtime-capabilities' -import { toWebTerminalSurfaceTabId } from '../../../src/shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../../src/shared/workspace-layout/terminal-surface-id' import { expect } from './orca-app' import { callColdActivationRuntime, diff --git a/tests/e2e/helpers/paired-terminal-parking-fixture.ts b/tests/e2e/helpers/paired-terminal-parking-fixture.ts index 134604250fc..e2e1386fa75 100644 --- a/tests/e2e/helpers/paired-terminal-parking-fixture.ts +++ b/tests/e2e/helpers/paired-terminal-parking-fixture.ts @@ -1,7 +1,7 @@ import { existsSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs' import os from 'node:os' import path from 'node:path' -import { quotePosixShell } from '../../../src/shared/shell-argument-quoting' +import { quotePosixShell } from '../../../src/shared/shell/launch/shell-argument-quoting' const FILL_ROWS = 6_000 const FLOOD_ROWS = 4_000 diff --git a/tests/e2e/helpers/paired-terminal-parking-oracle.ts b/tests/e2e/helpers/paired-terminal-parking-oracle.ts index bd0639fabdf..e01ecf171bf 100644 --- a/tests/e2e/helpers/paired-terminal-parking-oracle.ts +++ b/tests/e2e/helpers/paired-terminal-parking-oracle.ts @@ -5,7 +5,7 @@ import { TERMINAL_PAIRED_PARKING_RUNTIME_CAPABILITY } from '../../../src/shared/ import { toHostSessionTabId, toWebTerminalSurfaceTabId -} from '../../../src/shared/terminal-surface-id' +} from '../../../src/shared/workspace-layout/terminal-surface-id' import { readPairedRetentionSample, startRendererLagProbe diff --git a/tests/e2e/helpers/remote-session-bulk-open-fixture.ts b/tests/e2e/helpers/remote-session-bulk-open-fixture.ts index e80af7b1469..1a8065e247b 100644 --- a/tests/e2e/helpers/remote-session-bulk-open-fixture.ts +++ b/tests/e2e/helpers/remote-session-bulk-open-fixture.ts @@ -1,7 +1,7 @@ import { mkdtempSync, rmSync, writeFileSync } from 'node:fs' import os from 'node:os' import path from 'node:path' -import { quotePosixShell } from '../../../src/shared/shell-argument-quoting' +import { quotePosixShell } from '../../../src/shared/shell/launch/shell-argument-quoting' function fixtureCommand(fixturePath: string, marker: string): string { const command = [process.execPath, fixturePath, marker] diff --git a/tests/e2e/helpers/remote-session-bulk-open-oracle.ts b/tests/e2e/helpers/remote-session-bulk-open-oracle.ts index 1811e213d39..8b2ed8e8343 100644 --- a/tests/e2e/helpers/remote-session-bulk-open-oracle.ts +++ b/tests/e2e/helpers/remote-session-bulk-open-oracle.ts @@ -1,7 +1,7 @@ import { writeFileSync, mkdirSync } from 'node:fs' import path from 'node:path' import type { Page } from '@stablyai/playwright-test' -import { toWebTerminalSurfaceTabId } from '../../../src/shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../../src/shared/workspace-layout/terminal-surface-id' import { expect } from './orca-app' import { createRemoteSessionBulkOpenFixture } from './remote-session-bulk-open-fixture' import { startRendererLagProbe } from '../paired-runtime-retention-metrics' diff --git a/tests/e2e/helpers/runtime-types.ts b/tests/e2e/helpers/runtime-types.ts index 03fa6b0c3a7..c7248e5ee65 100644 --- a/tests/e2e/helpers/runtime-types.ts +++ b/tests/e2e/helpers/runtime-types.ts @@ -10,7 +10,7 @@ import type { GlobalSettings } from '../../../src/shared/global-settings-types' import type { BrowserWorkspace } from '../../../src/shared/browser-workspace-types' import type { Repo } from '../../../src/shared/repo-types' import type { WorkspaceVisibleTabType } from '../../../src/shared/tab-types' -import type { TerminalTab } from '../../../src/shared/terminal-tab-types' +import type { TerminalTab } from '../../../src/shared/workspace-layout/terminal-tab-types' import type { Worktree } from '../../../src/shared/worktree/types' import type { DictationMeterState } from '../../../src/shared/dictation-audio-meter' import type { ReactCommitHook } from './tab-render-recorder' diff --git a/tests/e2e/helpers/ssh-remote-only-browser-fixture.ts b/tests/e2e/helpers/ssh-remote-only-browser-fixture.ts index 4b36686e243..f33a5288c56 100644 --- a/tests/e2e/helpers/ssh-remote-only-browser-fixture.ts +++ b/tests/e2e/helpers/ssh-remote-only-browser-fixture.ts @@ -4,7 +4,7 @@ import { writeDockerSshHostTargetFile, type DockerSshHostTarget } from './docker-ssh-host-target' -import { quotePosixShell } from '../../../src/shared/shell-argument-quoting' +import { quotePosixShell } from '../../../src/shared/shell/launch/shell-argument-quoting' // Only the SSH container can resolve and reach this loopback origin; rendering its marker proves tunneled egress. export const SSH_REMOTE_ONLY_HOST = 'remote-only.internal' diff --git a/tests/e2e/helpers/startup-exec-readiness-oracle.ts b/tests/e2e/helpers/startup-exec-readiness-oracle.ts index bad4e227cf6..b48f37cd753 100644 --- a/tests/e2e/helpers/startup-exec-readiness-oracle.ts +++ b/tests/e2e/helpers/startup-exec-readiness-oracle.ts @@ -6,11 +6,11 @@ import type { RuntimeTerminalRead, RuntimeTerminalShow } from '../../../src/shared/runtime-types' -import { toWebTerminalSurfaceTabId } from '../../../src/shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../../src/shared/workspace-layout/terminal-surface-id' import { expect } from './orca-app' import { getTerminalContent, waitForActivePanePtyId } from './terminal' import { readFreshTerminalInventory } from './terminal-inventory-observation' -import { quotePosixShell } from '../../../src/shared/shell-argument-quoting' +import { quotePosixShell } from '../../../src/shared/shell/launch/shell-argument-quoting' const RECOVERY_DEADLINE_MS = 8_000 diff --git a/tests/e2e/helpers/terminal-kitty-file-image-proof.ts b/tests/e2e/helpers/terminal-kitty-file-image-proof.ts index febdc51d754..464bf0bbbae 100644 --- a/tests/e2e/helpers/terminal-kitty-file-image-proof.ts +++ b/tests/e2e/helpers/terminal-kitty-file-image-proof.ts @@ -1,6 +1,6 @@ import { expect, type ElectronApplication, type Page } from '@stablyai/playwright-test' import { PNG } from 'pngjs' -import { quotePosixShell } from '../../../src/shared/shell-argument-quoting' +import { quotePosixShell } from '../../../src/shared/shell/launch/shell-argument-quoting' import { nodeTerminalCommand } from '../terminal-node-command' import { execInTerminal, waitForTerminalOutput } from './terminal' import { readInlineImageState } from './terminal-inline-image-proof' diff --git a/tests/e2e/helpers/terminal-workspace-root-link.ts b/tests/e2e/helpers/terminal-workspace-root-link.ts index d1eb9bbf94b..ae0ab64cdf8 100644 --- a/tests/e2e/helpers/terminal-workspace-root-link.ts +++ b/tests/e2e/helpers/terminal-workspace-root-link.ts @@ -1,7 +1,7 @@ import type { Page, TestInfo } from '@stablyai/playwright-test' import { expect } from './orca-app' import { focusActiveTerminalInput, getTerminalContent } from './terminal' -import { quotePosixShell } from '../../../src/shared/shell-argument-quoting' +import { quotePosixShell } from '../../../src/shared/shell/launch/shell-argument-quoting' export async function openTerminalWorkspaceRootLink( page: Page, diff --git a/tests/e2e/helpers/workspace-layout-oracle-model.ts b/tests/e2e/helpers/workspace-layout-oracle-model.ts index b75c1a788d0..901f36b78b4 100644 --- a/tests/e2e/helpers/workspace-layout-oracle-model.ts +++ b/tests/e2e/helpers/workspace-layout-oracle-model.ts @@ -1,7 +1,7 @@ // Compare groups/order, all tab kinds, pane tree/bindings and custom titles; omit viewer-owned selection, focus, sizes and scroll. import type { ExecutionHostId } from '../../../src/shared/execution-host' -import type { TerminalPaneLayoutNode } from '../../../src/shared/terminal-tab-types' +import type { TerminalPaneLayoutNode } from '../../../src/shared/workspace-layout/terminal-tab-types' import { checkWorkspaceLayoutRules, type WorkspaceLayoutPartition, diff --git a/tests/e2e/helpers/workspace-layout-oracle-views.ts b/tests/e2e/helpers/workspace-layout-oracle-views.ts index b2666a3a127..3efd18db8e5 100644 --- a/tests/e2e/helpers/workspace-layout-oracle-views.ts +++ b/tests/e2e/helpers/workspace-layout-oracle-views.ts @@ -8,7 +8,7 @@ import { import { readPersistedProfileState } from './persisted-profile-state' import type { RuntimeMobileSessionTabsResult } from '../../../src/shared/runtime-session-contracts' import type { RuntimeTerminalListResult } from '../../../src/shared/runtime-terminal-contracts' -import type { WorkspaceSessionState } from '../../../src/shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../../src/shared/workspace-session/workspace-session-state-types' import type { WorkspaceLayoutPartition } from './workspace-layout-oracle-model' type ProfileRoot = { diff --git a/tests/e2e/host-parked-pane-remote-viewer.spec.ts b/tests/e2e/host-parked-pane-remote-viewer.spec.ts index 3d5b0cf7e83..be77c7a436a 100644 --- a/tests/e2e/host-parked-pane-remote-viewer.spec.ts +++ b/tests/e2e/host-parked-pane-remote-viewer.spec.ts @@ -9,7 +9,7 @@ import type { Page } from '@stablyai/playwright-test' import { HOST_TERMINAL_SURFACE_SEPARATOR, toWebTerminalSurfaceTabId -} from '../../src/shared/terminal-surface-id' +} from '../../src/shared/workspace-layout/terminal-surface-id' import { expect, test } from './helpers/orca-app' import { createRuntimeDesktopPairingOffer, @@ -17,7 +17,7 @@ import { } from './helpers/paired-electron-client' import { focusActiveTerminalInput } from './helpers/terminal' import { parkHiddenTabBehindDecoy } from './helpers/terminal-hidden-parking' -import { quotePosixShell } from '../../src/shared/shell-argument-quoting' +import { quotePosixShell } from '../../src/shared/shell/launch/shell-argument-quoting' const PARK_DELAY_MS = 30_000 const PAINT_BUDGET_MS = 20_000 diff --git a/tests/e2e/layout-compat-new-desktop-on-old-server.spec.ts b/tests/e2e/layout-compat-new-desktop-on-old-server.spec.ts index 3dfc3f76694..03be5cf6c66 100644 --- a/tests/e2e/layout-compat-new-desktop-on-old-server.spec.ts +++ b/tests/e2e/layout-compat-new-desktop-on-old-server.spec.ts @@ -21,7 +21,7 @@ import { } from './helpers/layout-compat-baseline' import { setPaneTitleFromTerminalMenu } from './helpers/terminal-pane-title-actions' import { readTerminalAccessibilityText } from './helpers/terminal-accessibility-tree' -import type { TerminalLayoutSnapshot } from '../../src/shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../src/shared/workspace-layout/terminal-tab-types' const PANE = '.pane[data-leaf-id]:visible' // The default split-right binding, the same in the pinned release. diff --git a/tests/e2e/live-background-terminal-mount-authority.spec.ts b/tests/e2e/live-background-terminal-mount-authority.spec.ts index 46396bf1d16..360b279775b 100644 --- a/tests/e2e/live-background-terminal-mount-authority.spec.ts +++ b/tests/e2e/live-background-terminal-mount-authority.spec.ts @@ -23,7 +23,7 @@ import type { RuntimeWorktreeCreateResult } from '../../src/shared/runtime-types' import { PROTOCOL_VERSION } from '../../src/main/daemon/types' -import { makePaneKey } from '../../src/shared/stable-pane-id' +import { makePaneKey } from '../../src/shared/workspace-layout/stable-pane-id' import { getDefaultRepoHookSettings } from '../../src/shared/constants' import { buildFakeAgentCommandOverride, diff --git a/tests/e2e/local-cli-terminal-retention.spec.ts b/tests/e2e/local-cli-terminal-retention.spec.ts index d2938a5decf..715c09a14ac 100644 --- a/tests/e2e/local-cli-terminal-retention.spec.ts +++ b/tests/e2e/local-cli-terminal-retention.spec.ts @@ -6,7 +6,7 @@ import { existsSync, readFileSync, rmSync } from 'node:fs' import path from 'node:path' import type { ElectronApplication, Page } from '@stablyai/playwright-test' import { RuntimeClient } from '../../src/cli/runtime-client' -import { makePaneKey } from '../../src/shared/stable-pane-id' +import { makePaneKey } from '../../src/shared/workspace-layout/stable-pane-id' import { expect, test } from './helpers/orca-app' import { TEST_REPO_PATH_FILE } from './global-setup' import { attachRepoAndOpenTerminal, createRestartSession } from './helpers/orca-restart' diff --git a/tests/e2e/native-chat-image-runtime-context.unit.test.ts b/tests/e2e/native-chat-image-runtime-context.unit.test.ts index 698b6b4213f..f66cb172d82 100644 --- a/tests/e2e/native-chat-image-runtime-context.unit.test.ts +++ b/tests/e2e/native-chat-image-runtime-context.unit.test.ts @@ -6,7 +6,7 @@ import { afterEach, describe, expect, it } from 'vitest' import type { AppState } from '@/store/types' import type { RuntimeFileOperationArgs } from '../../src/renderer/src/runtime/runtime-file-client-types' import { useAppStore } from '@/store' -import type { TerminalTab } from '../../src/shared/terminal-tab-types' +import type { TerminalTab } from '../../src/shared/workspace-layout/terminal-tab-types' import { FLOATING_TERMINAL_WORKTREE_ID, getDefaultSettings } from '../../src/shared/constants' import { diff --git a/tests/e2e/omp-child-session-recovery.unit.test.ts b/tests/e2e/omp-child-session-recovery.unit.test.ts index 40bb29e0295..c8472071ad4 100644 --- a/tests/e2e/omp-child-session-recovery.unit.test.ts +++ b/tests/e2e/omp-child-session-recovery.unit.test.ts @@ -4,7 +4,7 @@ import { normalizeHookPayload } from '../../src/shared/agent-hook-listener/norma import { createHookListenerState } from '../../src/shared/agent-hook-listener/listener-state' import { getAgentResumeArgv } from '../../src/shared/agent-launch/startup/agent-resume-argv' import { buildAgentResumeStartupPlan } from '../../src/shared/agent-launch/startup/tui-agent-resume-startup' -import { sleepingAgentSessionsByPaneKeySchema } from '../../src/shared/workspace-session-sleeping-agents' +import { sleepingAgentSessionsByPaneKeySchema } from '../../src/shared/workspace-session/workspace-session-sleeping-agents' import { createTestStore, makeTab } from '../../src/renderer/src/store/slices/store-test-helpers' const PANE = 'tab-1:11111111-1111-4111-8111-111111111111' diff --git a/tests/e2e/omp-retired-host-renderer.unit.test.ts b/tests/e2e/omp-retired-host-renderer.unit.test.ts index 7f1dd5a458d..b3eb43cd3c5 100644 --- a/tests/e2e/omp-retired-host-renderer.unit.test.ts +++ b/tests/e2e/omp-retired-host-renderer.unit.test.ts @@ -3,7 +3,7 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import { AgentHookServer } from '../../src/main/agent-hooks/server' import { toAgentStatusIpcPayload } from '../../src/main/agent-hooks/server/server-status-identity' import type { AgentStatusIpcPayload } from '../../src/shared/agent-status/contracts/agent-status-ipc-payload' -import { makePaneKey } from '../../src/shared/stable-pane-id' +import { makePaneKey } from '../../src/shared/workspace-layout/stable-pane-id' import { isAgentStatusForRecentlyClosedTab } from '../../src/renderer/src/hooks/ipc-events/agent-status-routing' import { createTestStore } from '../../src/renderer/src/store/slices/store-test-helpers' diff --git a/tests/e2e/omp-risk-remote-review.unit.test.ts b/tests/e2e/omp-risk-remote-review.unit.test.ts index c0857e85239..75e6dadb2d1 100644 --- a/tests/e2e/omp-risk-remote-review.unit.test.ts +++ b/tests/e2e/omp-risk-remote-review.unit.test.ts @@ -1,6 +1,6 @@ import { beforeEach, expect, it, vi } from 'vitest' -import { makePaneKey } from '../../src/shared/stable-pane-id' -import { toWebTerminalSurfaceTabId } from '../../src/shared/terminal-surface-id' +import { makePaneKey } from '../../src/shared/workspace-layout/stable-pane-id' +import { toWebTerminalSurfaceTabId } from '../../src/shared/workspace-layout/terminal-surface-id' import { applyWebSessionTabsSnapshot, applyWebSessionTabsSnapshots diff --git a/tests/e2e/paired-cli-terminal-graph-sync-tab-retention.spec.ts b/tests/e2e/paired-cli-terminal-graph-sync-tab-retention.spec.ts index 390bc77d3c9..9c07422b7b1 100644 --- a/tests/e2e/paired-cli-terminal-graph-sync-tab-retention.spec.ts +++ b/tests/e2e/paired-cli-terminal-graph-sync-tab-retention.spec.ts @@ -8,7 +8,7 @@ import type { Page, TestInfo } from '@stablyai/playwright-test' import { toWebTerminalSurfaceTabId, WEB_TERMINAL_SURFACE_TAB_PREFIX -} from '../../src/shared/terminal-surface-id' +} from '../../src/shared/workspace-layout/terminal-surface-id' import { expect, test } from './helpers/orca-app' import { createRuntimeDesktopPairingOffer, diff --git a/tests/e2e/paired-desktop-server-held-pane-reopen.spec.ts b/tests/e2e/paired-desktop-server-held-pane-reopen.spec.ts index 2836d9af33c..198e628d578 100644 --- a/tests/e2e/paired-desktop-server-held-pane-reopen.spec.ts +++ b/tests/e2e/paired-desktop-server-held-pane-reopen.spec.ts @@ -11,7 +11,7 @@ import { PROTOCOL_VERSION } from '../../src/main/daemon/types' import { HOST_TERMINAL_SURFACE_SEPARATOR, toWebTerminalSurfaceTabId -} from '../../src/shared/terminal-surface-id' +} from '../../src/shared/workspace-layout/terminal-surface-id' import { LAYOUT_REOPEN_HELD_PANES_CAPABILITY } from '../../src/shared/workspace-layout/layout-intents-capability' import { expect, test } from './helpers/orca-app' import { launchHeadlessPairedRuntimeHost } from './helpers/headless-paired-runtime-host' diff --git a/tests/e2e/paired-desktop-server-layout-frames.spec.ts b/tests/e2e/paired-desktop-server-layout-frames.spec.ts index 269ec7bf140..9953ac597ae 100644 --- a/tests/e2e/paired-desktop-server-layout-frames.spec.ts +++ b/tests/e2e/paired-desktop-server-layout-frames.spec.ts @@ -5,7 +5,7 @@ import type { Page } from '@stablyai/playwright-test' import { HOST_TERMINAL_SURFACE_SEPARATOR, toWebTerminalSurfaceTabId -} from '../../src/shared/terminal-surface-id' +} from '../../src/shared/workspace-layout/terminal-surface-id' import { LAYOUT_INTENTS_RUNTIME_CAPABILITY } from '../../src/shared/workspace-layout/layout-intents-capability' import { expect, test } from './helpers/orca-app' import { launchHeadlessPairedRuntimeHost } from './helpers/headless-paired-runtime-host' diff --git a/tests/e2e/paired-desktop-server-layout-intents.spec.ts b/tests/e2e/paired-desktop-server-layout-intents.spec.ts index d557e9fa0a4..e70a4ac5541 100644 --- a/tests/e2e/paired-desktop-server-layout-intents.spec.ts +++ b/tests/e2e/paired-desktop-server-layout-intents.spec.ts @@ -5,7 +5,7 @@ import type { Page } from '@stablyai/playwright-test' import { HOST_TERMINAL_SURFACE_SEPARATOR, toWebTerminalSurfaceTabId -} from '../../src/shared/terminal-surface-id' +} from '../../src/shared/workspace-layout/terminal-surface-id' import { LAYOUT_INTENTS_RUNTIME_CAPABILITY } from '../../src/shared/workspace-layout/layout-intents-capability' import { expect, test } from './helpers/orca-app' import { launchHeadlessPairedRuntimeHost } from './helpers/headless-paired-runtime-host' diff --git a/tests/e2e/paired-desktop-server-layout-writes.spec.ts b/tests/e2e/paired-desktop-server-layout-writes.spec.ts index 5291f257622..b494a91a0e8 100644 --- a/tests/e2e/paired-desktop-server-layout-writes.spec.ts +++ b/tests/e2e/paired-desktop-server-layout-writes.spec.ts @@ -8,7 +8,7 @@ import { HOST_TERMINAL_SURFACE_SEPARATOR, toHostSessionTabId, toWebTerminalSurfaceTabId -} from '../../src/shared/terminal-surface-id' +} from '../../src/shared/workspace-layout/terminal-surface-id' import { LAYOUT_INTENTS_RUNTIME_CAPABILITY } from '../../src/shared/workspace-layout/layout-intents-capability' import { expect, test } from './helpers/orca-app' import { diff --git a/tests/e2e/paired-mobile-desktop-tab-composition.spec.ts b/tests/e2e/paired-mobile-desktop-tab-composition.spec.ts index b87fa13c879..b7735fe03f3 100644 --- a/tests/e2e/paired-mobile-desktop-tab-composition.spec.ts +++ b/tests/e2e/paired-mobile-desktop-tab-composition.spec.ts @@ -5,7 +5,10 @@ import { expect, test } from './helpers/orca-app' import { launchPhoneMirrorTopology } from './helpers/phone-mirror-topology' import type { PairedMobileSocket } from './helpers/paired-mobile-client' import { readPublishedLayout, readSessionTabs } from './helpers/layout-compat-baseline' -import { toHostSessionTabId, toWebTerminalSurfaceTabId } from '../../src/shared/terminal-surface-id' +import { + toHostSessionTabId, + toWebTerminalSurfaceTabId +} from '../../src/shared/workspace-layout/terminal-surface-id' import { z } from 'zod' type Frame = PairedMobileSocket['frames'][number] diff --git a/tests/e2e/paired-pane-title-desktop-host.spec.ts b/tests/e2e/paired-pane-title-desktop-host.spec.ts index cbd3520e555..6a4e1cae990 100644 --- a/tests/e2e/paired-pane-title-desktop-host.spec.ts +++ b/tests/e2e/paired-pane-title-desktop-host.spec.ts @@ -3,7 +3,7 @@ import type { Page } from '@stablyai/playwright-test' import { HOST_TERMINAL_SURFACE_SEPARATOR, toWebTerminalSurfaceTabId -} from '../../src/shared/terminal-surface-id' +} from '../../src/shared/workspace-layout/terminal-surface-id' import { expect, test } from './helpers/orca-app' import { createRuntimeDesktopPairingOffer, diff --git a/tests/e2e/paired-remote-pane-layout-retry.spec.ts b/tests/e2e/paired-remote-pane-layout-retry.spec.ts index 6672eb91cfe..559cbdab7ba 100644 --- a/tests/e2e/paired-remote-pane-layout-retry.spec.ts +++ b/tests/e2e/paired-remote-pane-layout-retry.spec.ts @@ -3,8 +3,8 @@ import type { RuntimeMobileSessionTabsResult, RuntimeMobileSessionTerminalClientTab } from '../../src/shared/runtime-types' -import { toWebTerminalSurfaceTabId } from '../../src/shared/terminal-surface-id' -import type { TerminalLayoutSnapshot } from '../../src/shared/terminal-tab-types' +import { toWebTerminalSurfaceTabId } from '../../src/shared/workspace-layout/terminal-surface-id' +import type { TerminalLayoutSnapshot } from '../../src/shared/workspace-layout/terminal-tab-types' import { launchHeadlessPairedRuntimeHost, type HeadlessPairedRuntimeHost diff --git a/tests/e2e/paired-remote-split-pane-focus.spec.ts b/tests/e2e/paired-remote-split-pane-focus.spec.ts index 0f7048d9026..3eb5cf600fe 100644 --- a/tests/e2e/paired-remote-split-pane-focus.spec.ts +++ b/tests/e2e/paired-remote-split-pane-focus.spec.ts @@ -1,4 +1,4 @@ -import { toWebTerminalSurfaceTabId } from '../../src/shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../src/shared/workspace-layout/terminal-surface-id' import type { RuntimeTerminalRead } from '../../src/shared/runtime-types' import { expect, test } from './helpers/orca-app' import { diff --git a/tests/e2e/paired-remote-split-pane-host-retired-ghost.spec.ts b/tests/e2e/paired-remote-split-pane-host-retired-ghost.spec.ts index e221f1718d0..c2cd6c46e07 100644 --- a/tests/e2e/paired-remote-split-pane-host-retired-ghost.spec.ts +++ b/tests/e2e/paired-remote-split-pane-host-retired-ghost.spec.ts @@ -1,7 +1,7 @@ // #17770: a headless host retires an exited split leaf; client store and DOM must retain exactly the surviving pane. // Insertion-only reconciliation shrank store layout but left a dead DOM ghost; retiring the active leaf must also avoid writing it back during PTY exit. import type { Page, TestInfo } from '@stablyai/playwright-test' -import { toWebTerminalSurfaceTabId } from '../../src/shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../src/shared/workspace-layout/terminal-surface-id' import { expect, test } from './helpers/orca-app' import { launchHeadlessPairedRuntimeHost } from './helpers/headless-paired-runtime-host' import { launchPairedElectronClient } from './helpers/paired-electron-client' diff --git a/tests/e2e/paired-remote-terminal-client-restart-survival.spec.ts b/tests/e2e/paired-remote-terminal-client-restart-survival.spec.ts index d25fd4e505a..21ce8612a01 100644 --- a/tests/e2e/paired-remote-terminal-client-restart-survival.spec.ts +++ b/tests/e2e/paired-remote-terminal-client-restart-survival.spec.ts @@ -8,7 +8,7 @@ import type { Page } from '@stablyai/playwright-test' import { HOST_TERMINAL_SURFACE_SEPARATOR, toWebTerminalSurfaceTabId -} from '../../src/shared/terminal-surface-id' +} from '../../src/shared/workspace-layout/terminal-surface-id' import { closeElectronAppForE2E } from './helpers/electron-process-shutdown' import { expect, test } from './helpers/orca-app' import { @@ -17,7 +17,7 @@ import { type PairedElectronClient } from './helpers/paired-electron-client' import { waitForActiveWorktree, waitForSessionReady } from './helpers/store' -import { quotePosixShell } from '../../src/shared/shell-argument-quoting' +import { quotePosixShell } from '../../src/shared/shell/launch/shell-argument-quoting' /** What a user would accept for "my terminal is back" after reopening the app. */ const RESTORE_BUDGET_MS = 60_000 diff --git a/tests/e2e/paired-remote-terminal-host-quit-reconnect-input.spec.ts b/tests/e2e/paired-remote-terminal-host-quit-reconnect-input.spec.ts index de54edbe91f..5ef771d14a9 100644 --- a/tests/e2e/paired-remote-terminal-host-quit-reconnect-input.spec.ts +++ b/tests/e2e/paired-remote-terminal-host-quit-reconnect-input.spec.ts @@ -8,7 +8,7 @@ import { PROTOCOL_VERSION } from '../../src/main/daemon/types' import { HOST_TERMINAL_SURFACE_SEPARATOR, toWebTerminalSurfaceTabId -} from '../../src/shared/terminal-surface-id' +} from '../../src/shared/workspace-layout/terminal-surface-id' import { expect, test } from './helpers/orca-app' import { TEST_REPO_PATH_FILE } from './global-setup' import { @@ -21,7 +21,7 @@ import { holdWindowGraphPublication, releaseWindowGraphPublication } from './helpers/hold-window-graph-publication' -import { quotePosixShell } from '../../src/shared/shell-argument-quoting' +import { quotePosixShell } from '../../src/shared/shell/launch/shell-argument-quoting' const scratch = mkdtempSync(path.join(os.tmpdir(), 'orca-paired-host-quit-input-')) const fixturePath = path.join(scratch, 'paired-host-quit-terminal.mjs') diff --git a/tests/e2e/paired-remote-terminal-host-restart-background-sync.spec.ts b/tests/e2e/paired-remote-terminal-host-restart-background-sync.spec.ts index 297cdb7fe50..3bde37592d7 100644 --- a/tests/e2e/paired-remote-terminal-host-restart-background-sync.spec.ts +++ b/tests/e2e/paired-remote-terminal-host-restart-background-sync.spec.ts @@ -6,7 +6,7 @@ import { PROTOCOL_VERSION } from '../../src/main/daemon/types' import { HOST_TERMINAL_SURFACE_SEPARATOR, toWebTerminalSurfaceTabId -} from '../../src/shared/terminal-surface-id' +} from '../../src/shared/workspace-layout/terminal-surface-id' import { expect, test } from './helpers/orca-app' import { TEST_REPO_PATH_FILE } from './global-setup' import { @@ -16,7 +16,7 @@ import { } from './helpers/paired-electron-client' import { attachRepoAndOpenTerminal, createRestartSession } from './helpers/orca-restart' import { waitForTabParked } from './helpers/terminal-hidden-parking' -import { quotePosixShell } from '../../src/shared/shell-argument-quoting' +import { quotePosixShell } from '../../src/shared/shell/launch/shell-argument-quoting' const PARK_DELAY_MS = 2_000 const scratch = mkdtempSync(path.join(os.tmpdir(), 'orca-paired-host-restart-background-')) diff --git a/tests/e2e/paired-remote-terminal-initial-snapshot-scrollback.spec.ts b/tests/e2e/paired-remote-terminal-initial-snapshot-scrollback.spec.ts index c75d2393749..fcf086f75f4 100644 --- a/tests/e2e/paired-remote-terminal-initial-snapshot-scrollback.spec.ts +++ b/tests/e2e/paired-remote-terminal-initial-snapshot-scrollback.spec.ts @@ -14,7 +14,7 @@ import { readPairedPaneContent, waitForPairedPaneMarker } from './helpers/paired-host-terminal' -import { quotePosixShell } from '../../src/shared/shell-argument-quoting' +import { quotePosixShell } from '../../src/shared/shell/launch/shell-argument-quoting' const LINE_COUNT = 300 const scratch = mkdtempSync(path.join(os.tmpdir(), 'orca-initial-scrollback-')) diff --git a/tests/e2e/paired-remote-terminal-lossy-initial-snapshot.spec.ts b/tests/e2e/paired-remote-terminal-lossy-initial-snapshot.spec.ts index 5c03e8367a5..635ae6b6f29 100644 --- a/tests/e2e/paired-remote-terminal-lossy-initial-snapshot.spec.ts +++ b/tests/e2e/paired-remote-terminal-lossy-initial-snapshot.spec.ts @@ -3,13 +3,13 @@ import os from 'node:os' import path from 'node:path' import type { Page } from '@stablyai/playwright-test' import type { RuntimeTerminalRead } from '../../src/shared/runtime-types' -import { toWebTerminalSurfaceTabId } from '../../src/shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../src/shared/workspace-layout/terminal-surface-id' import { expect, test } from './helpers/orca-app' import { createRuntimeDesktopPairingOffer, launchPairedElectronClient } from './helpers/paired-electron-client' -import { quotePosixShell } from '../../src/shared/shell-argument-quoting' +import { quotePosixShell } from '../../src/shared/shell/launch/shell-argument-quoting' const scratch = mkdtempSync(path.join(os.tmpdir(), 'orca-paired-lossy-snapshot-')) const fixturePath = path.join(scratch, 'lossy-snapshot-terminal.mjs') diff --git a/tests/e2e/paired-remote-terminal-materialization-reconnect.spec.ts b/tests/e2e/paired-remote-terminal-materialization-reconnect.spec.ts index 0b6df14998a..fd488906189 100644 --- a/tests/e2e/paired-remote-terminal-materialization-reconnect.spec.ts +++ b/tests/e2e/paired-remote-terminal-materialization-reconnect.spec.ts @@ -8,7 +8,7 @@ import type { RuntimeTerminalRead, RuntimeTerminalShow } from '../../src/shared/runtime-types' -import { toWebTerminalSurfaceTabId } from '../../src/shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../src/shared/workspace-layout/terminal-surface-id' import { expect, test } from './helpers/orca-app' import { launchHeadlessPairedRuntimeHost } from './helpers/headless-paired-runtime-host' import { @@ -17,7 +17,7 @@ import { } from './helpers/paired-electron-client' import { getTerminalContent, waitForActivePanePtyId } from './helpers/terminal' import { readFreshTerminalInventory } from './helpers/terminal-inventory-observation' -import { quotePosixShell } from '../../src/shared/shell-argument-quoting' +import { quotePosixShell } from '../../src/shared/shell/launch/shell-argument-quoting' const scratch = mkdtempSync(path.join(os.tmpdir(), 'orca-paired-materialize-')) const fixturePath = path.join(scratch, 'materialize-terminal.mjs') diff --git a/tests/e2e/paired-remote-terminal-network-outage.spec.ts b/tests/e2e/paired-remote-terminal-network-outage.spec.ts index 14abbc630a0..692e784104d 100644 --- a/tests/e2e/paired-remote-terminal-network-outage.spec.ts +++ b/tests/e2e/paired-remote-terminal-network-outage.spec.ts @@ -3,12 +3,12 @@ import { mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs' import os from 'node:os' import path from 'node:path' import type { Page } from '@stablyai/playwright-test' -import { toWebTerminalSurfaceTabId } from '../../src/shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../src/shared/workspace-layout/terminal-surface-id' import { decodePairingOffer, encodePairingOffer } from '../../src/shared/remote-runtime/pairing/pairing' -import { quotePosixShell } from '../../src/shared/shell-argument-quoting' +import { quotePosixShell } from '../../src/shared/shell/launch/shell-argument-quoting' import { expect, test } from './helpers/orca-app' import { launchHeadlessPairedRuntimeHost } from './helpers/headless-paired-runtime-host' import { cleanupE2EDaemons } from './helpers/electron-process-shutdown' diff --git a/tests/e2e/paired-remote-terminal-pane-move-to-new-tab.spec.ts b/tests/e2e/paired-remote-terminal-pane-move-to-new-tab.spec.ts index 26f12d0ec3b..d19b64521ed 100644 --- a/tests/e2e/paired-remote-terminal-pane-move-to-new-tab.spec.ts +++ b/tests/e2e/paired-remote-terminal-pane-move-to-new-tab.spec.ts @@ -12,7 +12,7 @@ import { callPairedRuntime, waitForPairedClientWorktree } from './helpers/paired-client-host-session' -import { toWebTerminalSurfaceTabId } from '../../src/shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../src/shared/workspace-layout/terminal-surface-id' import { dragPaneOutToTabStrip, waitForBoundPanes } from './helpers/terminal-layout-journeys' import { splitActiveTerminalPane } from './helpers/terminal' diff --git a/tests/e2e/paired-remote-terminal-parked-reveal-interactivity.spec.ts b/tests/e2e/paired-remote-terminal-parked-reveal-interactivity.spec.ts index e79ca06278e..b2f931e488a 100644 --- a/tests/e2e/paired-remote-terminal-parked-reveal-interactivity.spec.ts +++ b/tests/e2e/paired-remote-terminal-parked-reveal-interactivity.spec.ts @@ -8,7 +8,7 @@ import type { Page } from '@stablyai/playwright-test' import { HOST_TERMINAL_SURFACE_SEPARATOR, toWebTerminalSurfaceTabId -} from '../../src/shared/terminal-surface-id' +} from '../../src/shared/workspace-layout/terminal-surface-id' import { expect, test } from './helpers/orca-app' import { createRuntimeDesktopPairingOffer, @@ -17,7 +17,7 @@ import { } from './helpers/paired-electron-client' import { focusActiveTerminalInput } from './helpers/terminal' import { waitForTabParked } from './helpers/terminal-hidden-parking' -import { quotePosixShell } from '../../src/shared/shell-argument-quoting' +import { quotePosixShell } from '../../src/shared/shell/launch/shell-argument-quoting' const PARK_DELAY_MS = 2_000 const LIVE_PAINT_BUDGET_MS = 12_000 diff --git a/tests/e2e/paired-remote-terminal-parked-scrollback-restart.spec.ts b/tests/e2e/paired-remote-terminal-parked-scrollback-restart.spec.ts index b0fa83a9d3a..1ce5ae162bf 100644 --- a/tests/e2e/paired-remote-terminal-parked-scrollback-restart.spec.ts +++ b/tests/e2e/paired-remote-terminal-parked-scrollback-restart.spec.ts @@ -24,7 +24,7 @@ import { import { focusActiveTerminalInput } from './helpers/terminal' import { waitForTabParked } from './helpers/terminal-hidden-parking' import { readPersistedProfileState } from './helpers/persisted-profile-state' -import { quotePosixShell } from '../../src/shared/shell-argument-quoting' +import { quotePosixShell } from '../../src/shared/shell/launch/shell-argument-quoting' const PARK_DELAY_MS = 2_000 const PAINT_BUDGET_MS = 30_000 diff --git a/tests/e2e/paired-remote-terminal-parked-scrollback-survives.spec.ts b/tests/e2e/paired-remote-terminal-parked-scrollback-survives.spec.ts index 820d3906673..823dc8f06bd 100644 --- a/tests/e2e/paired-remote-terminal-parked-scrollback-survives.spec.ts +++ b/tests/e2e/paired-remote-terminal-parked-scrollback-survives.spec.ts @@ -21,7 +21,7 @@ import { } from './helpers/paired-host-terminal' import { focusActiveTerminalInput } from './helpers/terminal' import { waitForTabParked } from './helpers/terminal-hidden-parking' -import { quotePosixShell } from '../../src/shared/shell-argument-quoting' +import { quotePosixShell } from '../../src/shared/shell/launch/shell-argument-quoting' const PARK_DELAY_MS = 2_000 const PAINT_BUDGET_MS = 30_000 diff --git a/tests/e2e/paired-remote-terminal-probe-gap-recovery.spec.ts b/tests/e2e/paired-remote-terminal-probe-gap-recovery.spec.ts index f328df2b710..b51be5d1ace 100644 --- a/tests/e2e/paired-remote-terminal-probe-gap-recovery.spec.ts +++ b/tests/e2e/paired-remote-terminal-probe-gap-recovery.spec.ts @@ -7,14 +7,14 @@ import type { RuntimeTerminalRead, RuntimeTerminalShow } from '../../src/shared/runtime-types' -import { toWebTerminalSurfaceTabId } from '../../src/shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../src/shared/workspace-layout/terminal-surface-id' import { expect, test } from './helpers/orca-app' import { createRuntimeDesktopPairingOffer, launchPairedWebClient } from './helpers/paired-electron-client' import { getTerminalContent, waitForActivePanePtyId } from './helpers/terminal' -import { quotePosixShell } from '../../src/shared/shell-argument-quoting' +import { quotePosixShell } from '../../src/shared/shell/launch/shell-argument-quoting' const scratch = mkdtempSync(path.join(os.tmpdir(), 'orca-paired-probe-gap-')) const fixturePath = path.join(scratch, 'probe-gap-terminal.mjs') diff --git a/tests/e2e/paired-remote-terminal-reconnect-idle-frame.spec.ts b/tests/e2e/paired-remote-terminal-reconnect-idle-frame.spec.ts index d4b04f36483..820f8d27846 100644 --- a/tests/e2e/paired-remote-terminal-reconnect-idle-frame.spec.ts +++ b/tests/e2e/paired-remote-terminal-reconnect-idle-frame.spec.ts @@ -4,12 +4,12 @@ import { mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs' import os from 'node:os' import path from 'node:path' import type { Page } from '@stablyai/playwright-test' -import { toWebTerminalSurfaceTabId } from '../../src/shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../src/shared/workspace-layout/terminal-surface-id' import { decodePairingOffer, encodePairingOffer } from '../../src/shared/remote-runtime/pairing/pairing' -import { quotePosixShell } from '../../src/shared/shell-argument-quoting' +import { quotePosixShell } from '../../src/shared/shell/launch/shell-argument-quoting' import { expect, test } from './helpers/orca-app' import { launchHeadlessPairedRuntimeHost } from './helpers/headless-paired-runtime-host' import { cleanupE2EDaemons } from './helpers/electron-process-shutdown' diff --git a/tests/e2e/paired-remote-terminal-serve-restart-binding.spec.ts b/tests/e2e/paired-remote-terminal-serve-restart-binding.spec.ts index d8bc00002d6..913d531efaf 100644 --- a/tests/e2e/paired-remote-terminal-serve-restart-binding.spec.ts +++ b/tests/e2e/paired-remote-terminal-serve-restart-binding.spec.ts @@ -9,7 +9,7 @@ import { ProfileStateSqliteAuthority } from '../../src/main/persistence/profile- import { DEFAULT_LOCAL_ORCA_PROFILE_ID } from '../../src/shared/orca-profiles' import type { RuntimeMobileSessionTabsResult } from '../../src/shared/runtime-types' import { toRemoteRuntimePtyId } from '../../src/shared/remote-runtime/remote-runtime-pty-id' -import { toWebTerminalSurfaceTabId } from '../../src/shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../src/shared/workspace-layout/terminal-surface-id' import { expect, test } from './helpers/orca-app' import { launchHeadlessPairedRuntimeHost, diff --git a/tests/e2e/paired-remote-terminal-stall-recovery.spec.ts b/tests/e2e/paired-remote-terminal-stall-recovery.spec.ts index f8f15db4290..23f07ce590d 100644 --- a/tests/e2e/paired-remote-terminal-stall-recovery.spec.ts +++ b/tests/e2e/paired-remote-terminal-stall-recovery.spec.ts @@ -5,7 +5,7 @@ import path from 'node:path' import type { ElectronApplication, Page } from '@stablyai/playwright-test' import { PNG } from 'pngjs' import type { RuntimeTerminalRead } from '../../src/shared/runtime-types' -import { toWebTerminalSurfaceTabId } from '../../src/shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../src/shared/workspace-layout/terminal-surface-id' import { expect, test } from './helpers/orca-app' import { createRuntimeDesktopPairingOffer, diff --git a/tests/e2e/paired-remote-terminal-truncated-tail-first-paint.spec.ts b/tests/e2e/paired-remote-terminal-truncated-tail-first-paint.spec.ts index c3095511fbb..8aff0d00897 100644 --- a/tests/e2e/paired-remote-terminal-truncated-tail-first-paint.spec.ts +++ b/tests/e2e/paired-remote-terminal-truncated-tail-first-paint.spec.ts @@ -5,14 +5,14 @@ import type { Page } from '@stablyai/playwright-test' import type { RuntimeTerminalRead } from '../../src/shared/runtime-types' import '../../src/shared/protocol-version' import { TERMINAL_PAIRED_PARKING_RUNTIME_CAPABILITY } from '../../src/shared/terminal/runtime-policy/terminal-runtime-capabilities' -import { toWebTerminalSurfaceTabId } from '../../src/shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../src/shared/workspace-layout/terminal-surface-id' import { expect, test } from './helpers/orca-app' import { createRuntimeDesktopPairingOffer, launchPairedWebClient } from './helpers/paired-electron-client' import { getTerminalContent, waitForActivePanePtyId } from './helpers/terminal' -import { quotePosixShell } from '../../src/shared/shell-argument-quoting' +import { quotePosixShell } from '../../src/shared/shell/launch/shell-argument-quoting' const RETENTION_PARK_DELAY_MS = 100 const scratch = mkdtempSync(path.join(os.tmpdir(), 'orca-paired-truncated-tail-')) diff --git a/tests/e2e/paired-serve-respawn-process-state.spec.ts b/tests/e2e/paired-serve-respawn-process-state.spec.ts index b1c350a264f..d785d6b250b 100644 --- a/tests/e2e/paired-serve-respawn-process-state.spec.ts +++ b/tests/e2e/paired-serve-respawn-process-state.spec.ts @@ -1,6 +1,6 @@ // #35559: a serve host restarted without its daemon restores each pane with a new shell; the dead agent's title, status and input modes must not survive. import type { JSHandle, Page } from '@stablyai/playwright-test' -import { toWebTerminalSurfaceTabId } from '../../src/shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../src/shared/workspace-layout/terminal-surface-id' import { expect, test } from './helpers/orca-app' import { launchHeadlessPairedRuntimeHost } from './helpers/headless-paired-runtime-host' import { diff --git a/tests/e2e/paired-terminal-after-anchor-placement.spec.ts b/tests/e2e/paired-terminal-after-anchor-placement.spec.ts index 8583b58c587..f4c855f65c6 100644 --- a/tests/e2e/paired-terminal-after-anchor-placement.spec.ts +++ b/tests/e2e/paired-terminal-after-anchor-placement.spec.ts @@ -5,7 +5,10 @@ import { launchPairedWebClient } from './helpers/paired-electron-client' import { waitForActiveWorktree, waitForSessionReady } from './helpers/store' -import { toHostSessionTabId, toWebTerminalSurfaceTabId } from '../../src/shared/terminal-surface-id' +import { + toHostSessionTabId, + toWebTerminalSurfaceTabId +} from '../../src/shared/workspace-layout/terminal-surface-id' async function createTerminal(page: Page, worktreeId: string, afterTabId?: string) { const tabs = page.locator('[data-testid="sortable-tab"]') diff --git a/tests/e2e/paired-terminal-switch-desktop-reveal.spec.ts b/tests/e2e/paired-terminal-switch-desktop-reveal.spec.ts index 3d13fd30280..18a76851476 100644 --- a/tests/e2e/paired-terminal-switch-desktop-reveal.spec.ts +++ b/tests/e2e/paired-terminal-switch-desktop-reveal.spec.ts @@ -1,7 +1,7 @@ // #24688: local CLI terminal switch --environment must select that server terminal on the desktop, even when serve has no window. import type { Page } from '@stablyai/playwright-test' import type { RuntimeTerminalFocus } from '../../src/shared/runtime-types' -import { toWebTerminalSurfaceTabId } from '../../src/shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../src/shared/workspace-layout/terminal-surface-id' import { orcaCliResult } from './helpers/compiled-orca-cli' import { launchHeadlessPairedRuntimeHost } from './helpers/headless-paired-runtime-host' import { launchPairedElectronClient } from './helpers/paired-electron-client' diff --git a/tests/e2e/persisted-session-production-upgrade.spec.ts b/tests/e2e/persisted-session-production-upgrade.spec.ts index fdeb3693cc1..bc862f78955 100644 --- a/tests/e2e/persisted-session-production-upgrade.spec.ts +++ b/tests/e2e/persisted-session-production-upgrade.spec.ts @@ -7,7 +7,7 @@ import { type TestInfo } from '@stablyai/playwright-test' import { DEFAULT_LOCAL_ORCA_PROFILE_ID } from '../../src/shared/orca-profiles' -import { PTY_SESSION_ID_SEPARATOR } from '../../src/shared/pty-session-id-format' +import { PTY_SESSION_ID_SEPARATOR } from '../../src/shared/terminal/pty/lifecycle/pty-session-id-format' import { forwardElectronProcessLogs, test, expect } from './helpers/orca-app' import { TEST_REPO_PATH_FILE } from './global-setup' import { attachRepoAndOpenTerminal, createRestartSession } from './helpers/orca-restart' diff --git a/tests/e2e/remote-agent-session-focus-authority.spec.ts b/tests/e2e/remote-agent-session-focus-authority.spec.ts index 9a097849dbc..dcfb2491f0e 100644 --- a/tests/e2e/remote-agent-session-focus-authority.spec.ts +++ b/tests/e2e/remote-agent-session-focus-authority.spec.ts @@ -7,9 +7,9 @@ import { createRuntimeDesktopPairingOffer, launchPairedWebClient } from './helpers/paired-electron-client' -import { toWebTerminalSurfaceTabId } from '../../src/shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../src/shared/workspace-layout/terminal-surface-id' import type { RuntimeTerminalSummary } from '../../src/shared/runtime-types' -import { quotePosixShell } from '../../src/shared/shell-argument-quoting' +import { quotePosixShell } from '../../src/shared/shell/launch/shell-argument-quoting' type ClientMirror = { activeTabId: string | null diff --git a/tests/e2e/remote-terminal-tab-retirement.unit.test.ts b/tests/e2e/remote-terminal-tab-retirement.unit.test.ts index 01f6a8e6bb0..18af8240bb4 100644 --- a/tests/e2e/remote-terminal-tab-retirement.unit.test.ts +++ b/tests/e2e/remote-terminal-tab-retirement.unit.test.ts @@ -1,7 +1,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { getDefaultWorkspaceSession } from '../../src/shared/constants' import type { RuntimeMobileSessionTabsSnapshot } from '../../src/shared/runtime-types' -import type { WorkspaceSessionState } from '../../src/shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../src/shared/workspace-session/workspace-session-state-types' import { acceptReplayedWebSessionTabsSnapshot, resetWebSessionTabsSnapshotFreshnessForTests diff --git a/tests/e2e/repo-registration-async.spec.ts b/tests/e2e/repo-registration-async.spec.ts index c21b865c8bf..a0d34e5a49b 100644 --- a/tests/e2e/repo-registration-async.spec.ts +++ b/tests/e2e/repo-registration-async.spec.ts @@ -11,7 +11,7 @@ test('real WSL registration preserves literal paths and fences login output', as test.skip(process.platform !== 'win32' || !distro, 'Requires a real Windows WSL distro') const { buildWslExecArgs, buildWslCapturedLoginShellCommand } = await import('../../src/shared/wsl-login-shell-command') - const { quotePosixShell } = await import('../../src/shared/shell-argument-quoting') + const { quotePosixShell } = await import('../../src/shared/shell/launch/shell-argument-quoting') const root = `/tmp/or60risk/run-${Date.now()}` const repoPath = `${root}/repo-$literal space` const uncPath = `\\\\wsl.localhost\\${distro}${repoPath.replaceAll('/', '\\')}` diff --git a/tests/e2e/restart-restore-terminal-input.spec.ts b/tests/e2e/restart-restore-terminal-input.spec.ts index 5dedb92df93..eb3831976f8 100644 --- a/tests/e2e/restart-restore-terminal-input.spec.ts +++ b/tests/e2e/restart-restore-terminal-input.spec.ts @@ -26,7 +26,7 @@ import { } from './helpers/terminal-input-probes' import { waitForRestoredTerminalInputReady } from './helpers/restored-terminal-input-readiness' import { PROTOCOL_VERSION } from '../../src/main/daemon/types' -import { PTY_SESSION_ID_SEPARATOR } from '../../src/shared/pty-session-id-format' +import { PTY_SESSION_ID_SEPARATOR } from '../../src/shared/terminal/pty/lifecycle/pty-session-id-format' const REQUIRE_WINDOWS_TERMINAL_RESTART_E2E = process.env.ORCA_REQUIRE_WINDOWS_TERMINAL_RESTART_E2E === '1' diff --git a/tests/e2e/settled-worker-tab-survives-restart.spec.ts b/tests/e2e/settled-worker-tab-survives-restart.spec.ts index 03f0d4f3d49..f1dd603169e 100644 --- a/tests/e2e/settled-worker-tab-survives-restart.spec.ts +++ b/tests/e2e/settled-worker-tab-survives-restart.spec.ts @@ -1,4 +1,4 @@ -import { parseWorkspaceSession } from '../../src/shared/workspace-session-schema' +import { parseWorkspaceSession } from '../../src/shared/workspace-session/workspace-session-schema' import { readPersistedProfileState } from './helpers/persisted-profile-state' import { existsSync, readFileSync } from 'node:fs' import path from 'node:path' diff --git a/tests/e2e/ssh-browser-network-execution-route.docker.unit.test.ts b/tests/e2e/ssh-browser-network-execution-route.docker.unit.test.ts index 93f552f3385..a087c1d9348 100644 --- a/tests/e2e/ssh-browser-network-execution-route.docker.unit.test.ts +++ b/tests/e2e/ssh-browser-network-execution-route.docker.unit.test.ts @@ -13,7 +13,7 @@ import { type DockerSshHostTarget } from './helpers/docker-ssh-host-target' import { resolveSshBrowserNetworkExecutionRoute } from '../../src/main/browser/network/execution-routes/ssh-browser-network-execution-route' -import { quotePosixShell } from '../../src/shared/shell-argument-quoting' +import { quotePosixShell } from '../../src/shared/shell/launch/shell-argument-quoting' const runDocker = process.env.ORCA_RUN_DOCKER_SSH_BROWSER_E2E === '1' const executionHost = { diff --git a/tests/e2e/ssh-orcad-browser-drop-owner.spec.ts b/tests/e2e/ssh-orcad-browser-drop-owner.spec.ts index 5d76c5a4d6b..0e51f88bcbe 100644 --- a/tests/e2e/ssh-orcad-browser-drop-owner.spec.ts +++ b/tests/e2e/ssh-orcad-browser-drop-owner.spec.ts @@ -18,7 +18,7 @@ import { } from './helpers/browser-split-guest-probes' import { toRuntimeExecutionHostId } from '../../src/shared/execution-host' import { getWorktreeHostIdentity } from '../../src/shared/worktree/host-qualified-identity' -import { quotePosixShell } from '../../src/shared/shell-argument-quoting' +import { quotePosixShell } from '../../src/shared/shell/launch/shell-argument-quoting' skipUnlessManagedDockerHost() test.skip(process.platform === 'win32', 'Owned POSIX host collision fixture') diff --git a/tests/e2e/ssh-orcad-legacy-relay-bridge.spec.ts b/tests/e2e/ssh-orcad-legacy-relay-bridge.spec.ts index 68f74a9a1ff..446de936a3a 100644 --- a/tests/e2e/ssh-orcad-legacy-relay-bridge.spec.ts +++ b/tests/e2e/ssh-orcad-legacy-relay-bridge.spec.ts @@ -13,7 +13,7 @@ import { mutateStoppedProfileState, readPersistedProfileState } from './helpers/persisted-profile-state' -import { workspaceSessionStateSchema } from '../../src/shared/workspace-session-schema' +import { workspaceSessionStateSchema } from '../../src/shared/workspace-session/workspace-session-schema' import { getProfileTerminalScrollbackSnapshotRoot, getTerminalScrollbackSnapshotPath, diff --git a/tests/e2e/ssh-orcad-open-in-owner.spec.ts b/tests/e2e/ssh-orcad-open-in-owner.spec.ts index 54035e43a6a..e8b07c0ae49 100644 --- a/tests/e2e/ssh-orcad-open-in-owner.spec.ts +++ b/tests/e2e/ssh-orcad-open-in-owner.spec.ts @@ -19,7 +19,7 @@ import { import { dismissTransientAnnouncement } from './helpers/ssh-config-host-picker' import { toRuntimeExecutionHostId } from '../../src/shared/execution-host' import { folderWorkspaceKey } from '../../src/shared/workspace-scope' -import { quotePosixShell } from '../../src/shared/shell-argument-quoting' +import { quotePosixShell } from '../../src/shared/shell/launch/shell-argument-quoting' skipUnlessManagedDockerHost() test.skip(process.platform === 'win32', 'Needs a POSIX recorder') diff --git a/tests/e2e/ssh-orcad-terminal-root-owner.spec.ts b/tests/e2e/ssh-orcad-terminal-root-owner.spec.ts index 45adc94dcba..079effec2f1 100644 --- a/tests/e2e/ssh-orcad-terminal-root-owner.spec.ts +++ b/tests/e2e/ssh-orcad-terminal-root-owner.spec.ts @@ -13,7 +13,7 @@ import { openFileExplorer } from './helpers/file-explorer' import { openTerminalWorkspaceRootLink } from './helpers/terminal-workspace-root-link' import { toRuntimeExecutionHostId } from '../../src/shared/execution-host' import { getWorktreeHostIdentity } from '../../src/shared/worktree/host-qualified-identity' -import { quotePosixShell } from '../../src/shared/shell-argument-quoting' +import { quotePosixShell } from '../../src/shared/shell/launch/shell-argument-quoting' import { focusActiveTerminalInput, diff --git a/tests/e2e/ssh-orcad-vm-provisioned-root.spec.ts b/tests/e2e/ssh-orcad-vm-provisioned-root.spec.ts index 9d71b6bbdb4..c5615fd7416 100644 --- a/tests/e2e/ssh-orcad-vm-provisioned-root.spec.ts +++ b/tests/e2e/ssh-orcad-vm-provisioned-root.spec.ts @@ -14,7 +14,7 @@ import { } from './helpers/docker-ssh-host-target' import { ensureTerminalVisible, waitForSessionReady } from './helpers/store' import { ORCAD_TEMPLATE, skipUnlessManagedDockerHost } from './helpers/orcad-managed-workspace' -import { quotePosixShell } from '../../src/shared/shell-argument-quoting' +import { quotePosixShell } from '../../src/shared/shell/launch/shell-argument-quoting' /** A recipe VM's SSH root, served by a managed orcad the first connect deploys. */ skipUnlessManagedDockerHost() diff --git a/tests/e2e/ssh-orcad-workspace-tools.spec.ts b/tests/e2e/ssh-orcad-workspace-tools.spec.ts index 348c6b828e2..31ceb299e5e 100644 --- a/tests/e2e/ssh-orcad-workspace-tools.spec.ts +++ b/tests/e2e/ssh-orcad-workspace-tools.spec.ts @@ -15,7 +15,7 @@ import { typeInTerminal, withManagedHost } from './helpers/orcad-managed-workspace' -import { quotePosixShell } from '../../src/shared/shell-argument-quoting' +import { quotePosixShell } from '../../src/shared/shell/launch/shell-argument-quoting' import { createServer } from 'node:net' import { waitForSessionReady } from './helpers/store' diff --git a/tests/e2e/structured-chat-tab-lifetime.test-fixture.ts b/tests/e2e/structured-chat-tab-lifetime.test-fixture.ts index dac0fc01eb0..c5a561e0cc0 100644 --- a/tests/e2e/structured-chat-tab-lifetime.test-fixture.ts +++ b/tests/e2e/structured-chat-tab-lifetime.test-fixture.ts @@ -68,7 +68,7 @@ export function resolveActiveSessionTab47713( } } -import { parsePaneKey } from '../../src/shared/stable-pane-id' +import { parsePaneKey } from '../../src/shared/workspace-layout/stable-pane-id' import { structuredAgentSessionPaneKey, structuredAgentSessionTabId diff --git a/tests/e2e/terminal-account-restart.unit.test.ts b/tests/e2e/terminal-account-restart.unit.test.ts index 4b4ad51e550..22948f7fa00 100644 --- a/tests/e2e/terminal-account-restart.unit.test.ts +++ b/tests/e2e/terminal-account-restart.unit.test.ts @@ -5,7 +5,7 @@ import { type PtyIpcSuiteFixtures } from '../../src/main/ipc/pty/pty-ipc-test-harness' import { TerminalKilledError } from '../../src/main/daemon/daemon-pty-lifecycle-errors' -import { makePaneKey } from '../../src/shared/stable-pane-id' +import { makePaneKey } from '../../src/shared/workspace-layout/stable-pane-id' import { registerPtyHandlers } from '../../src/main/ipc/pty/register-handlers' import { setLocalPtyProvider } from '../../src/main/ipc/pty/provider/registry' import { TerminalIntentionalStops } from '../../src/main/runtime/terminal-intentional-stops' diff --git a/tests/e2e/terminal-binding-crash-hydration.unit.test.ts b/tests/e2e/terminal-binding-crash-hydration.unit.test.ts index 83b35abe8d6..593923dd47a 100644 --- a/tests/e2e/terminal-binding-crash-hydration.unit.test.ts +++ b/tests/e2e/terminal-binding-crash-hydration.unit.test.ts @@ -3,7 +3,7 @@ import { describe, expect, it, vi } from 'vitest' import { applyPtyBinding } from '../../src/main/persistence/loading-store/pty-binding-session-update' import { getDefaultWorkspaceSession } from '../../src/shared/constants' import { folderWorkspaceKey } from '../../src/shared/workspace-scope' -import type { WorkspaceSessionState } from '../../src/shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../src/shared/workspace-session/workspace-session-state-types' import { reconcileHydratedWorkspaceTabModels } from '../../src/renderer/src/app-shell/reconcile-hydrated-workspace-tab-models' import { createTestStore, diff --git a/tests/e2e/terminal-duplicate-pty-renderer-reveal.spec.ts b/tests/e2e/terminal-duplicate-pty-renderer-reveal.spec.ts index 758643216a0..a388901f52e 100644 --- a/tests/e2e/terminal-duplicate-pty-renderer-reveal.spec.ts +++ b/tests/e2e/terminal-duplicate-pty-renderer-reveal.spec.ts @@ -5,7 +5,7 @@ import { import { randomUUID } from 'node:crypto' import { existsSync, readFileSync } from 'node:fs' import type { ElectronApplication, Page } from '@stablyai/playwright-test' -import type { TerminalLayoutSnapshot } from '../../src/shared/terminal-tab-types' +import type { TerminalLayoutSnapshot } from '../../src/shared/workspace-layout/terminal-tab-types' import { test, expect } from './helpers/orca-app' import { findMarkerFrame, diff --git a/tests/e2e/terminal-inline-images-paired-runtime.spec.ts b/tests/e2e/terminal-inline-images-paired-runtime.spec.ts index f32af418e89..36a9d432741 100644 --- a/tests/e2e/terminal-inline-images-paired-runtime.spec.ts +++ b/tests/e2e/terminal-inline-images-paired-runtime.spec.ts @@ -2,7 +2,7 @@ import { rmSync, writeFileSync } from 'node:fs' import path from 'node:path' import type { RuntimeMobileSessionTabsResult } from '../../src/shared/runtime-types' import { toRemoteRuntimePtyId } from '../../src/shared/remote-runtime/remote-runtime-pty-id' -import { toWebTerminalSurfaceTabId } from '../../src/shared/terminal-surface-id' +import { toWebTerminalSurfaceTabId } from '../../src/shared/workspace-layout/terminal-surface-id' import { expect, test } from './helpers/orca-app' import { assertInlineImagePixels, diff --git a/tests/e2e/terminal-node-command.ts b/tests/e2e/terminal-node-command.ts index 4c8bac4df5d..87cc69147c4 100644 --- a/tests/e2e/terminal-node-command.ts +++ b/tests/e2e/terminal-node-command.ts @@ -1,5 +1,5 @@ import { quotePowerShellLiteral } from '../../src/shared/powershell-native-argument' -import { quotePosixShell } from '../../src/shared/shell-argument-quoting' +import { quotePosixShell } from '../../src/shared/shell/launch/shell-argument-quoting' function quoteTerminalArg(value: string): string { return process.platform === 'win32' ? quotePowerShellLiteral(value) : quotePosixShell(value) diff --git a/tests/e2e/terminal-restart-persistence.spec.ts b/tests/e2e/terminal-restart-persistence.spec.ts index e30a9817063..ae6dc015e8a 100644 --- a/tests/e2e/terminal-restart-persistence.spec.ts +++ b/tests/e2e/terminal-restart-persistence.spec.ts @@ -13,7 +13,7 @@ import { } from './helpers/terminal' import { getActiveTabId, getWorktreeTabs } from './helpers/store' import { createRestartSession } from './helpers/orca-restart' -import { PTY_SESSION_ID_SEPARATOR } from '../../src/shared/pty-session-id-format' +import { PTY_SESSION_ID_SEPARATOR } from '../../src/shared/terminal/pty/lifecycle/pty-session-id-format' import { seededRepoPathOrSkip, bootstrapFirstLaunch, diff --git a/tests/e2e/terminal-tab-level-binding-upgrade.spec.ts b/tests/e2e/terminal-tab-level-binding-upgrade.spec.ts index eeafd3868a0..827321a0e1e 100644 --- a/tests/e2e/terminal-tab-level-binding-upgrade.spec.ts +++ b/tests/e2e/terminal-tab-level-binding-upgrade.spec.ts @@ -8,7 +8,7 @@ import { existsSync, readFileSync, writeFileSync } from 'node:fs' import path from 'node:path' import type { ElectronApplication, Page } from '@stablyai/playwright-test' import { DEFAULT_LOCAL_ORCA_PROFILE_ID } from '../../src/shared/orca-profiles' -import type { WorkspaceSessionState } from '../../src/shared/workspace-session-state-types' +import type { WorkspaceSessionState } from '../../src/shared/workspace-session/workspace-session-state-types' import { openProfileStateDatabaseReadOnly } from '../../src/main/persistence/profile-state/profile-state-database' import { readProfileStateSnapshot } from '../../src/main/persistence/profile-state/profile-state-documents' import { acquireProfileStateMaintenance } from '../../src/main/persistence/profile-state/profile-state-access' diff --git a/tests/e2e/terminal-warm-reattach-split-live-output.spec.ts b/tests/e2e/terminal-warm-reattach-split-live-output.spec.ts index 289ba8b3293..1754c9ce3a9 100644 --- a/tests/e2e/terminal-warm-reattach-split-live-output.spec.ts +++ b/tests/e2e/terminal-warm-reattach-split-live-output.spec.ts @@ -12,7 +12,7 @@ import { } from './helpers/terminal' import { ensureTerminalVisible, waitForActiveWorktree, waitForSessionReady } from './helpers/store' import { attachRepoAndOpenTerminal, createRestartSession } from './helpers/orca-restart' -import { PTY_SESSION_ID_SEPARATOR } from '../../src/shared/pty-session-id-format' +import { PTY_SESSION_ID_SEPARATOR } from '../../src/shared/terminal/pty/lifecycle/pty-session-id-format' type PaneProbe = { content: string diff --git a/tests/e2e/unopened-workspace-agent-single-resume.spec.ts b/tests/e2e/unopened-workspace-agent-single-resume.spec.ts index 4128dc5a8bd..8dcb61f8c90 100644 --- a/tests/e2e/unopened-workspace-agent-single-resume.spec.ts +++ b/tests/e2e/unopened-workspace-agent-single-resume.spec.ts @@ -3,7 +3,7 @@ import { chmodSync, readFileSync, rmSync, writeFileSync } from 'node:fs' import path from 'node:path' import { RuntimeClient } from '../../src/cli/runtime-client' -import { makePaneKey } from '../../src/shared/stable-pane-id' +import { makePaneKey } from '../../src/shared/workspace-layout/stable-pane-id' import { PROTOCOL_VERSION } from '../../src/main/daemon/types' import { expect, test } from './helpers/orca-app' import { TEST_REPO_PATH_FILE } from './global-setup' diff --git a/tests/e2e/workspace-layout-oracle-headless.spec.ts b/tests/e2e/workspace-layout-oracle-headless.spec.ts index 5b7cdf21ce0..3bcaa11cba1 100644 --- a/tests/e2e/workspace-layout-oracle-headless.spec.ts +++ b/tests/e2e/workspace-layout-oracle-headless.spec.ts @@ -13,7 +13,7 @@ import type { RuntimeTerminalSplit } from '../../src/shared/runtime-terminal-contracts' import { expect, test } from './helpers/orca-app' -import { pickNextActiveTabAfterClose } from '../../src/shared/workspace-session-terminal-tab-close' +import { pickNextActiveTabAfterClose } from '../../src/shared/workspace-session/workspace-session-terminal-tab-close' import { addRepoWorktree, cliClient, diff --git a/tests/e2e/wsl-bridge-no-background-boot.spec.ts b/tests/e2e/wsl-bridge-no-background-boot.spec.ts index 8ea61ab7d29..7bdfa0f82be 100644 --- a/tests/e2e/wsl-bridge-no-background-boot.spec.ts +++ b/tests/e2e/wsl-bridge-no-background-boot.spec.ts @@ -19,7 +19,7 @@ import { expect, test } from './helpers/orca-app' import { ensureTerminalVisible, waitForActiveWorktree, waitForSessionReady } from './helpers/store' import { waitForActivePanePtyId } from './helpers/terminal' import { visitSettingsPanes } from './helpers/settings-pane-visits' -import { quotePosixShell } from '../../src/shared/shell-argument-quoting' +import { quotePosixShell } from '../../src/shared/shell/launch/shell-argument-quoting' import { readDiagnosticLog, recordMainProcessWslDiagnostics diff --git a/tests/e2e/wsl-move-host-pane-history.spec.ts b/tests/e2e/wsl-move-host-pane-history.spec.ts index 8ed846abccd..5e46b17f18a 100644 --- a/tests/e2e/wsl-move-host-pane-history.spec.ts +++ b/tests/e2e/wsl-move-host-pane-history.spec.ts @@ -29,8 +29,8 @@ import { } from './helpers/paired-host-terminal' import { launchHeadlessPairedRuntimeHost } from './helpers/headless-paired-runtime-host' import { createMovedRepo, MOVED_TAB, seedImportedMovedTab } from './helpers/wsl-moved-host-profile' -import { quotePosixShell } from '../../src/shared/shell-argument-quoting' -import { toWebTerminalSurfaceTabId } from '../../src/shared/terminal-surface-id' +import { quotePosixShell } from '../../src/shared/shell/launch/shell-argument-quoting' +import { toWebTerminalSurfaceTabId } from '../../src/shared/workspace-layout/terminal-surface-id' const scratch = mkdtempSync(path.join(os.tmpdir(), 'orca-moved-history-')) const fixturePath = path.join(scratch, 'history-terminal.mjs') diff --git a/tests/e2e/wsl-move-restore-lifecycle.spec.ts b/tests/e2e/wsl-move-restore-lifecycle.spec.ts index 33172a060b7..a9202015f3c 100644 --- a/tests/e2e/wsl-move-restore-lifecycle.spec.ts +++ b/tests/e2e/wsl-move-restore-lifecycle.spec.ts @@ -58,8 +58,8 @@ import { wslMoveCutoverFixture } from '../../src/main/persistence/__fixtures__/w import { seedWslMoveCutover } from '../../src/main/persistence/__fixtures__/wsl-mover/wsl-move-journal-seeding' import { toRuntimeExecutionHostId } from '../../src/shared/execution-host' import { WSL_HOSTS_INTERNAL_GATE_ENV } from '../../src/shared/wsl-host-internal-gate' -import { quotePosixShell } from '../../src/shared/shell-argument-quoting' -import { toWebTerminalSurfaceTabId } from '../../src/shared/terminal-surface-id' +import { quotePosixShell } from '../../src/shared/shell/launch/shell-argument-quoting' +import { toWebTerminalSurfaceTabId } from '../../src/shared/workspace-layout/terminal-surface-id' const LINES = 2_000 const LEAF = '6f1b0c3e-8d2a-4c5b-9e7f-1a2b3c4d5e6f' diff --git a/tests/tools/omp-remote-sidebar-rendered/fixture.tsx b/tests/tools/omp-remote-sidebar-rendered/fixture.tsx index ee41a295362..4770ca2f1c4 100644 --- a/tests/tools/omp-remote-sidebar-rendered/fixture.tsx +++ b/tests/tools/omp-remote-sidebar-rendered/fixture.tsx @@ -3,8 +3,8 @@ import { createRoot } from 'react-dom/client' import { CompactAgentRow } from '../../../src/renderer/src/components/sidebar/worktree-card-compact-agent-row' import { buildWorktreeAgentRows } from '../../../src/renderer/src/components/sidebar/worktree-agent-rows' import { selectLiveAgentStatusEntriesForWorktree } from '../../../src/renderer/src/components/sidebar/worktree-agent-row-selectors' -import { makePaneKey } from '../../../src/shared/stable-pane-id' -import { toWebTerminalSurfaceTabId } from '../../../src/shared/terminal-surface-id' +import { makePaneKey } from '../../../src/shared/workspace-layout/stable-pane-id' +import { toWebTerminalSurfaceTabId } from '../../../src/shared/workspace-layout/terminal-surface-id' import { TooltipProvider } from '../../../src/renderer/src/components/ui/tooltip' import './fixture.css' diff --git a/tests/tools/omp-startup-keyboard-smoke.mjs b/tests/tools/omp-startup-keyboard-smoke.mjs index 31e05c0e5e3..96818f45650 100644 --- a/tests/tools/omp-startup-keyboard-smoke.mjs +++ b/tests/tools/omp-startup-keyboard-smoke.mjs @@ -4,7 +4,7 @@ import { mkdtemp, mkdir, rm } from 'node:fs/promises' import { tmpdir } from 'node:os' import { join, resolve } from 'node:path' import { pathToFileURL } from 'node:url' -import { PtyStartupIngress } from '../../src/shared/pty-startup-ingress.ts' +import { PtyStartupIngress } from '../../src/shared/terminal/pty/ingress/pty-startup-ingress.ts' assert.ok(process.argv[2], 'Pass the read-only OMP checkout') const scratch = await mkdtemp(join(tmpdir(), 'orca-omp-keyboard-'))