mirror of
https://github.com/stablyai/orca.git
synced 2026-11-14 01:47:24 +00:00
refactor: place renderer store state with defining feature owners (#39508)
This commit is contained in:
@@ -795,10 +795,9 @@
|
||||
2 test-no-wall-clock:src/renderer/src/runtime/structured-agent-session-tab-retirement.test.ts
|
||||
2 test-no-wall-clock:src/renderer/src/store/github/pull-requests/github-pr-branch-linked-pr-divergence.test.ts
|
||||
7 test-no-wall-clock:src/renderer/src/store/slices/jira/jira.test.ts
|
||||
1 test-no-wall-clock:src/renderer/src/store/slices/store-sleep-exact-runtime-stop.test.ts
|
||||
1 test-no-wall-clock:src/renderer/src/store/slices/worktrees-always-force-delete.test.ts
|
||||
6 test-no-wall-clock:src/renderer/src/store/slices/worktrees-metadata-persistence.test.ts
|
||||
1 test-no-wall-clock:src/renderer/src/store/slices/worktrees-terminal-reference-origins.test.ts
|
||||
1 test-no-wall-clock:src/renderer/src/store/terminals/store-sleep-exact-runtime-stop.test.ts
|
||||
5 test-no-wall-clock:src/renderer/src/store/slices/worktrees/metadata/worktree-meta-hosted-review.test.ts
|
||||
1 test-no-wall-clock:src/renderer/src/store/slices/worktrees/session/worktrees-terminal-reference-origins.test.ts
|
||||
1 test-no-wall-clock:src/shared/__tests__/process-host/windows-cmd-shim-resolution.test.ts
|
||||
7 test-no-wall-clock:src/shared/__tests__/process-host/windows-tree-kill-late-taskkill.win32.test.ts
|
||||
1 test-no-wall-clock:src/shared/agent-hook-listener/transport/agent-hook-spool-drain.test.ts
|
||||
|
||||
@@ -302,19 +302,18 @@
|
||||
11 src/renderer/src/store/slices/linear/linear-slice-status-actions.ts
|
||||
6 src/renderer/src/store/slices/linear/linear-team-actions.ts
|
||||
11 src/renderer/src/store/slices/linear/linear.ts
|
||||
2 src/renderer/src/store/slices/preflight.ts
|
||||
2 src/renderer/src/store/slices/preflight/preflight.ts
|
||||
1 src/renderer/src/store/repos/repo-host-identity.ts
|
||||
1 src/renderer/src/store/repos/repo-reorder-host-split.ts
|
||||
3 src/renderer/src/store/repos/create-repo-slice.ts
|
||||
1 src/renderer/src/store/slices/runtime-status.ts
|
||||
1 src/renderer/src/store/slices/runtime-status/create-runtime-status-slice.ts
|
||||
2 src/renderer/src/store/slices/settings/settings-owner-hydration-publication.ts
|
||||
5 src/renderer/src/store/slices/settings/create-settings-slice.ts
|
||||
8 src/renderer/src/store/slices/store-test-helpers.ts
|
||||
1 src/renderer/src/store/slices/terminal-tab-retirement.ts
|
||||
3 src/renderer/src/store/slices/workspace-attention/workspace-unread-characterization-fixture.ts
|
||||
1 src/renderer/src/store/terminals/terminal-tab-retirement.ts
|
||||
2 src/renderer/src/store/slices/workspace-attention/workspace-unread-characterization-fixture.ts
|
||||
1 src/renderer/src/store/slices/settings/worktree-visibility-owner-settings.ts
|
||||
3 src/renderer/src/store/slices/settings/worktree-visibility-settings-write.ts
|
||||
5 src/renderer/src/store/slices/worktrees.ts
|
||||
5 src/renderer/src/store/slices/worktrees/create-worktree-slice.ts
|
||||
1 src/renderer/src/store/slices/worktrees/create/create-worktree.ts
|
||||
1 src/renderer/src/store/slices/worktrees/create/created-worktree-state-merge.ts
|
||||
2 src/renderer/src/store/slices/worktrees/listing/fetch-detected-worktrees.ts
|
||||
|
||||
@@ -710,6 +710,6 @@
|
||||
1 src/renderer/src/lib/quick-open-file-history.ts
|
||||
2 src/renderer/src/lib/worker-auto-close.ts
|
||||
1 src/renderer/src/runtime/structured-chat-name-observation.ts
|
||||
5 src/renderer/src/store/app-state-view.ts
|
||||
1 src/renderer/src/store/plugin-icon-themes.ts
|
||||
5 src/renderer/src/store/retained-views/app-state-view.ts
|
||||
1 src/renderer/src/store/plugins/appearance/plugin-icon-themes.ts
|
||||
2 src/renderer/src/web/WebConnect.tsx
|
||||
|
||||
@@ -1341,13 +1341,13 @@
|
||||
"invariant": "Failed bootstrap and authenticated reconnect converge without UI triggers; one connection owner publishes verified status, with no independent healthy status polling.",
|
||||
"oracle": "Retained local cases check independent waiter deadlines/cancellation, failed-operation recovery, stale deferred results, disposal and explicit reconnect after authentication refusal. Historical aggregate receipts predate audit1748 and are not fresh validation of reduced sources.",
|
||||
"commands": [
|
||||
"ORCA_BACKGROUND_LAUNCH=1 pnpm test src/shared/remote-runtime/host-status/runtime-host-status-owner.test.ts src/main/ipc/runtime-environments/runtime-environment-status-connection.test.ts src/renderer/src/store/slices/runtime-status-snapshot.test.ts src/renderer/src/web/web-runtime-status-owner.test.ts",
|
||||
"ORCA_BACKGROUND_LAUNCH=1 pnpm test src/shared/remote-runtime/host-status/runtime-host-status-owner.test.ts src/main/ipc/runtime-environments/runtime-environment-status-connection.test.ts src/renderer/src/store/slices/runtime-status/runtime-status-snapshot.test.ts src/renderer/src/web/web-runtime-status-owner.test.ts",
|
||||
"ORCA_BACKGROUND_LAUNCH=1 ORCA_E2E_WEB_CLIENT=1 pnpm exec playwright test tests/e2e/runtime-host-status-recovery.spec.ts --config tests/playwright.config.ts --project electron-headless --workers=1"
|
||||
],
|
||||
"testFiles": [
|
||||
"src/shared/remote-runtime/host-status/runtime-host-status-owner.test.ts",
|
||||
"src/main/ipc/runtime-environments/runtime-environment-status-connection.test.ts",
|
||||
"src/renderer/src/store/slices/runtime-status-snapshot.test.ts",
|
||||
"src/renderer/src/store/slices/runtime-status/runtime-status-snapshot.test.ts",
|
||||
"src/renderer/src/web/web-runtime-status-owner.test.ts",
|
||||
"tests/e2e/runtime-host-status-recovery.spec.ts"
|
||||
],
|
||||
@@ -1376,7 +1376,7 @@
|
||||
"platform": "linux",
|
||||
"result": "passed",
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm --config.verifyDepsBeforeRun=false test src/main/ipc/runtime-environments/runtime-environment-status-connection.test.ts src/renderer/src/store/slices/runtime-status-snapshot.test.ts src/renderer/src/web/web-runtime-status-owner.test.ts src/shared/remote-runtime/host-status/runtime-host-status-owner.test.ts --maxWorkers=2",
|
||||
"currentCommand": "ORCA_BACKGROUND_LAUNCH=1 pnpm test src/shared/remote-runtime/host-status/runtime-host-status-owner.test.ts src/main/ipc/runtime-environments/runtime-environment-status-connection.test.ts src/renderer/src/store/slices/runtime-status-snapshot.test.ts src/renderer/src/web/web-runtime-status-owner.test.ts",
|
||||
"currentCommand": "ORCA_BACKGROUND_LAUNCH=1 pnpm test src/shared/remote-runtime/host-status/runtime-host-status-owner.test.ts src/main/ipc/runtime-environments/runtime-environment-status-connection.test.ts src/renderer/src/store/slices/runtime-status/runtime-status-snapshot.test.ts src/renderer/src/web/web-runtime-status-owner.test.ts",
|
||||
"durationSeconds": 4.37,
|
||||
"summary": "Test Files 4 passed (4); Tests 22 passed (22). Focused Linux unit execution; no physical-provider, p95 or cross-platform claim. Source head b638e07d395b76af3ba6b03761a1a0fe7e5e026e."
|
||||
},
|
||||
@@ -1386,7 +1386,7 @@
|
||||
"platform": "linux",
|
||||
"result": "passed",
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm --config.verifyDepsBeforeRun=false test src/main/ipc/runtime-environments/runtime-environment-status-connection.test.ts src/renderer/src/store/slices/runtime-status-snapshot.test.ts src/renderer/src/web/web-runtime-status-owner.test.ts src/shared/remote-runtime/host-status/runtime-host-status-owner.test.ts --maxWorkers=2",
|
||||
"currentCommand": "ORCA_BACKGROUND_LAUNCH=1 pnpm test src/shared/remote-runtime/host-status/runtime-host-status-owner.test.ts src/main/ipc/runtime-environments/runtime-environment-status-connection.test.ts src/renderer/src/store/slices/runtime-status-snapshot.test.ts src/renderer/src/web/web-runtime-status-owner.test.ts",
|
||||
"currentCommand": "ORCA_BACKGROUND_LAUNCH=1 pnpm test src/shared/remote-runtime/host-status/runtime-host-status-owner.test.ts src/main/ipc/runtime-environments/runtime-environment-status-connection.test.ts src/renderer/src/store/slices/runtime-status/runtime-status-snapshot.test.ts src/renderer/src/web/web-runtime-status-owner.test.ts",
|
||||
"durationSeconds": 4.52,
|
||||
"summary": "Test Files 4 passed (4); Tests 22 passed (22). Focused Linux unit execution; no physical-provider, p95 or cross-platform claim. Source head 415c9cffc2d10024131ec4b6721767a22195de6d."
|
||||
}
|
||||
@@ -3019,15 +3019,15 @@
|
||||
"invariant": "A restored absolute path owned by a same-host sibling workspace cannot read, save, watch, or persist until old saves drain, the exact route and host generations are revalidated, and one authoritative activation transaction installs the sibling owner, target projection, editor state, reconciliation, and first-activation terminal preparation; collisions and stale routes fail before activation preparation or reconciliation.",
|
||||
"oracle": "Hold an old-owner save in flight, start migration, then remove the sibling, change a folder root, or reconnect SSH and require owner migration to fail closed after quiescence. On a stable route require one coherent target-workspace projection, first-activation terminal generation preparation, destination authority for explicit save and autosave, exact watch replacement, destination-only change/delete/rename handling, owner-derived state rekeys, and hot-exit restart ownership. Seed an invalid destination tab/group model before a collision and require the target projection to remain byte-identical.",
|
||||
"commands": [
|
||||
"pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/store/slices/restored-editor-owner-reparent.test.ts src/renderer/src/components/editor/restored-editor-owner-save-lifecycle.test.ts"
|
||||
"pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/store/slices/editor/hydration/restored-editor-owner-reparent.test.ts src/renderer/src/components/editor/restored-editor-owner-save-lifecycle.test.ts"
|
||||
],
|
||||
"testFiles": [
|
||||
"src/renderer/src/store/slices/restored-editor-owner-reparent.test.ts",
|
||||
"src/renderer/src/store/slices/editor/hydration/restored-editor-owner-reparent.test.ts",
|
||||
"src/renderer/src/components/editor/restored-editor-owner-save-lifecycle.test.ts"
|
||||
],
|
||||
"assertionRefs": [
|
||||
{
|
||||
"file": "src/renderer/src/store/slices/restored-editor-owner-reparent.test.ts",
|
||||
"file": "src/renderer/src/store/slices/editor/hydration/restored-editor-owner-reparent.test.ts",
|
||||
"assertions": [
|
||||
"one atomic commit rekeys owner-derived editor, preview, draft, cursor, view, tab, group, active, reveal, focus, provenance, and persistence state",
|
||||
"active reparenting uses the centralized workspace activation transaction for terminal, browser, pending-creation, explorer, first-activation, and post-commit state",
|
||||
@@ -3052,7 +3052,7 @@
|
||||
"result": "passed",
|
||||
"durationSeconds": 3,
|
||||
"summary": "Three deterministic files passed 20 lifecycle, stale-route, activation, ownership, host, collision, persistence, watch, and save tests.",
|
||||
"currentCommand": "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/store/slices/restored-editor-owner-reparent.test.ts src/renderer/src/components/editor/restored-editor-owner-save-lifecycle.test.ts"
|
||||
"currentCommand": "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/store/slices/editor/hydration/restored-editor-owner-reparent.test.ts src/renderer/src/components/editor/restored-editor-owner-save-lifecycle.test.ts"
|
||||
}
|
||||
],
|
||||
"runtimeBudget": {
|
||||
@@ -6653,14 +6653,14 @@
|
||||
"invariant": "Within one terminal tab, each PTY has at most one layout leaf, pane manager surface, and xterm renderer owner. Restore and remote mirroring must normalize duplicate ownership before replay while retaining active-leaf focus, scrollback, pane authority, agent metadata, and distinct sibling PTYs.",
|
||||
"oracle": "Launch Orca with a real daemon PTY running a synchronized full-screen stream, close the desktop client without killing the daemon process, seed the persisted tab layout with two leaves bound to that PTY, and relaunch. Hide the restored tab behind a sibling and reveal it, then require the stream to remain visible with exactly one manager pane, one xterm DOM node, one root leaf, one PTY binding, and one unique PTY. Component contracts cover persisted replay, rootless and repeated-leaf layouts, metadata repair, and deeply nested input. Retained store contracts cover live/future authority transfer onto a retained leaf and preservation of a prior detach destination.",
|
||||
"commands": [
|
||||
"pnpm exec vitest run --config config/vitest.config.ts src/shared/workspace-layout/terminal-layout-pty-ownership-depth.test.ts src/renderer/src/components/terminal-pane/layout/terminal-layout-pty-ownership.test.ts src/renderer/src/store/slices/terminal-layout-pty-ownership.test.ts --reporter=dot",
|
||||
"pnpm exec vitest run --config config/vitest.config.ts src/shared/workspace-layout/terminal-layout-pty-ownership-depth.test.ts src/renderer/src/components/terminal-pane/layout/terminal-layout-pty-ownership.test.ts src/renderer/src/store/terminals/terminal-layout-pty-ownership.test.ts --reporter=dot",
|
||||
"pnpm exec electron-vite build --mode e2e",
|
||||
"SKIP_BUILD=1 pnpm exec playwright test tests/e2e/terminal-duplicate-pty-renderer-reveal.spec.ts --config tests/playwright.config.ts --project electron-headless --workers=1"
|
||||
],
|
||||
"testFiles": [
|
||||
"src/shared/workspace-layout/terminal-layout-pty-ownership-depth.test.ts",
|
||||
"src/renderer/src/components/terminal-pane/layout/terminal-layout-pty-ownership.test.ts",
|
||||
"src/renderer/src/store/slices/terminal-layout-pty-ownership.test.ts",
|
||||
"src/renderer/src/store/terminals/terminal-layout-pty-ownership.test.ts",
|
||||
"tests/e2e/terminal-duplicate-pty-renderer-reveal.spec.ts"
|
||||
],
|
||||
"assertionRefs": [
|
||||
@@ -6676,7 +6676,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "src/renderer/src/store/slices/terminal-layout-pty-ownership.test.ts",
|
||||
"file": "src/renderer/src/store/terminals/terminal-layout-pty-ownership.test.ts",
|
||||
"assertions": [
|
||||
"moves live and future pane authority onto the retained PTY leaf",
|
||||
"does not steal authority from a pane that was already detached to another tab"
|
||||
@@ -7048,7 +7048,7 @@
|
||||
"commands": [
|
||||
"pnpm exec vitest run --config config/vitest.config.ts src/main/runtime/terminal/surface/orca-runtime-terminal-close-continuity.test.ts",
|
||||
"pnpm exec vitest run --config config/vitest.config.ts src/main/runtime/orca-runtime.test.ts",
|
||||
"pnpm dlx node@24 ./node_modules/vitest/vitest.mjs run --config config/vitest.config.ts src/main/agent-hooks/server-pane-authority.test.ts src/main/ipc/agent-hooks.test.ts src/main/ipc/agent-pane-authority-ownership.test.ts src/main/persistence/terminal-topology/persistence-pane-identity-migration.test.ts src/main/persistence/terminal-topology/persistence-pty-binding-reconciliation.test.ts src/renderer/src/store/slices/agent-pane-authority.test.ts src/renderer/src/store/slices/terminal-pane-detach-agent-identity.test.ts src/renderer/src/store/slices/terminal-tab-retirement-store.test.ts tests/e2e/completed-worker-retirement-resume.unit.test.ts src/renderer/src/components/shared/kill-all-terminal-surfaces.test.ts",
|
||||
"pnpm dlx node@24 ./node_modules/vitest/vitest.mjs run --config config/vitest.config.ts src/main/agent-hooks/server-pane-authority.test.ts src/main/ipc/agent-hooks.test.ts src/main/ipc/agent-pane-authority-ownership.test.ts src/main/persistence/terminal-topology/persistence-pane-identity-migration.test.ts src/main/persistence/terminal-topology/persistence-pty-binding-reconciliation.test.ts src/renderer/src/store/slices/agent-status/agent-pane-authority.test.ts src/renderer/src/store/terminals/terminal-pane-detach-agent-identity.test.ts src/renderer/src/store/terminals/terminal-tab-retirement-store.test.ts tests/e2e/completed-worker-retirement-resume.unit.test.ts src/renderer/src/components/shared/kill-all-terminal-surfaces.test.ts",
|
||||
"pnpm exec vitest run --config config/vitest.config.ts src/main/pty/process-retirement/pty-descendant-termination.test.ts src/main/daemon/sessions/testing/session.test.ts src/main/daemon/terminal-host/testing/terminal-host.test.ts src/main/providers/local-pty/local-pty-provider-shutdown.test.ts src/main/runtime/workspaces/removal/worktree-teardown.test.ts",
|
||||
"pnpm run test:e2e -- tests/e2e/terminal-tab-close-restart-persistence.spec.ts --workers=1",
|
||||
"pnpm run test:e2e -- tests/e2e/terminal-parked-close-retirement.spec.ts --workers=1",
|
||||
@@ -7069,9 +7069,9 @@
|
||||
"src/main/daemon/terminal-host/testing/terminal-host.test.ts",
|
||||
"src/main/providers/local-pty/local-pty-provider-shutdown.test.ts",
|
||||
"src/main/runtime/workspaces/removal/worktree-teardown.test.ts",
|
||||
"src/renderer/src/store/slices/agent-pane-authority.test.ts",
|
||||
"src/renderer/src/store/slices/terminal-pane-detach-agent-identity.test.ts",
|
||||
"src/renderer/src/store/slices/terminal-tab-retirement-store.test.ts",
|
||||
"src/renderer/src/store/slices/agent-status/agent-pane-authority.test.ts",
|
||||
"src/renderer/src/store/terminals/terminal-pane-detach-agent-identity.test.ts",
|
||||
"src/renderer/src/store/terminals/terminal-tab-retirement-store.test.ts",
|
||||
"tests/e2e/completed-worker-retirement-resume.unit.test.ts",
|
||||
"src/renderer/src/components/shared/kill-all-terminal-surfaces.test.ts",
|
||||
"tests/e2e/terminal-tab-close-restart-persistence.spec.ts",
|
||||
@@ -7137,7 +7137,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "src/renderer/src/store/slices/agent-pane-authority.test.ts",
|
||||
"file": "src/renderer/src/store/slices/agent-status/agent-pane-authority.test.ts",
|
||||
"assertions": [
|
||||
"exact pane retirement removes resume and launch authority while preserving siblings",
|
||||
"chained detach keeps physical hooks and resume authority routed to the current owner until that owner closes"
|
||||
@@ -7707,14 +7707,14 @@
|
||||
"invariant": "Every agent launch surface must advertise the provider set detected on its explicit execution authority and launch on that same authority; a local Floating Workspace must never inherit an unrelated active project's WSL, SSH, or paired-runtime context.",
|
||||
"oracle": "The retained unchanged-source receipts are the only current execution evidence; reduced-source assertions await validation. Historical oracle account (not a current claim for changed sources): The retained unchanged-source receipts are the only current execution evidence; reduced-source assertions await validation. Historical oracle account (not a current claim for changed sources): Model an active WSL project and a native-Windows Floating Workspace with WSL-only Claude and host-only Codex. Keep both detection consumers mounted, require their advertised sets to stay disjoint through refresh, require the legacy active-project inventory to remain unchanged, then independently assert the Floating launch call and PTY transport select local IPC with no WSL project runtime.",
|
||||
"commands": [
|
||||
"pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/hooks/useDetectedAgents.test.tsx src/renderer/src/store/slices/detected-agents.test.ts src/renderer/src/store/slices/local-detected-agent-state.test.ts src/renderer/src/store/project-groups/repos-project-group-create-race.test.ts src/renderer/src/store/project-groups/repos-project-groups-delete.test.ts src/renderer/src/store/project-groups/repos-project-groups-owner-routing.test.ts src/renderer/src/store/projects/repos-project-host-capability.test.ts src/renderer/src/store/projects/repos-project-host-lifecycle.test.ts src/renderer/src/store/repos/repos-remove-project-purge-leak.test.ts src/renderer/src/store/repos/repos-update-serialization.test.ts src/renderer/src/lib/agent-session/launch/new-tab/launch-agent-in-new-tab.test.ts --reporter=verbose",
|
||||
"pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/hooks/useDetectedAgents.test.tsx src/renderer/src/store/slices/agent-inventory/detected-agents.test.ts src/renderer/src/store/slices/agent-inventory/local-detected-agent-state.test.ts src/renderer/src/store/project-groups/repos-project-group-create-race.test.ts src/renderer/src/store/project-groups/repos-project-groups-delete.test.ts src/renderer/src/store/project-groups/repos-project-groups-owner-routing.test.ts src/renderer/src/store/projects/repos-project-host-capability.test.ts src/renderer/src/store/projects/repos-project-host-lifecycle.test.ts src/renderer/src/store/repos/repos-remove-project-purge-leak.test.ts src/renderer/src/store/repos/repos-update-serialization.test.ts src/renderer/src/lib/agent-session/launch/new-tab/launch-agent-in-new-tab.test.ts --reporter=verbose",
|
||||
"pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/terminal-pane/pty-connection/tests/pty-connection-spawn-and-startup.test.ts --reporter=dot",
|
||||
"Headed Electron/CDP STA-4027 journey on Orca environment windows 2 with a selected Ubuntu-24.04 WSL project and local Floating Workspace"
|
||||
],
|
||||
"testFiles": [
|
||||
"src/renderer/src/hooks/useDetectedAgents.test.tsx",
|
||||
"src/renderer/src/store/slices/detected-agents.test.ts",
|
||||
"src/renderer/src/store/slices/local-detected-agent-state.test.ts",
|
||||
"src/renderer/src/store/slices/agent-inventory/detected-agents.test.ts",
|
||||
"src/renderer/src/store/slices/agent-inventory/local-detected-agent-state.test.ts",
|
||||
"src/renderer/src/store/project-groups/repos-project-group-create-race.test.ts",
|
||||
"src/renderer/src/store/project-groups/repos-project-groups-delete.test.ts",
|
||||
"src/renderer/src/store/project-groups/repos-project-groups-owner-routing.test.ts",
|
||||
@@ -7734,7 +7734,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "src/renderer/src/store/slices/local-detected-agent-state.test.ts",
|
||||
"file": "src/renderer/src/store/slices/agent-inventory/local-detected-agent-state.test.ts",
|
||||
"assertions": [
|
||||
"same-context callers deduplicate without cached broadcast fanout",
|
||||
"refresh supersedes stale detection and failed cold refresh remains retryable",
|
||||
@@ -8373,7 +8373,7 @@
|
||||
"oracle": "Retained exact unchanged-source receipts remain the only current execution evidence. Reduced selectors have no fresh execution result. Historical pre-audit oracle account for changed sources: The retained unchanged-source receipts are the only current execution evidence; reduced-source assertions await validation. Historical oracle account (not a current claim for changed sources): The retained unchanged-source receipts are the only current execution evidence; reduced-source assertions await validation. Historical oracle account (not a current claim for changed sources): The retained unchanged-source receipts are the only current execution evidence; reduced-source assertions await validation. Historical oracle account (not a current claim for changed sources): Start with Active Server=Local desktop, connect and navigate Windows 2, then reveal a local terminal and assert it succeeds while the persisted preference remains local before and after restart. Repeat transient routing and selected-runtime Add Project operations with exact-ID host decoys and completion reordering. Separately pair the real web client to an isolated headed host, then make its sole still-listed runtime compatibility-blocked and unavailable. Require a null authoritative selection, a disabled host option, and disabled Browse, Clone, and Create actions with no local fallback. Repeat against headless serve. Run the byte-identical selector/action contract on latest main, candidate, and candidate with the eligibility seam disabled.",
|
||||
"commands": [
|
||||
"pnpm exec vitest run --config config/vitest.config.ts src/main/ipc/runtime-environments/runtime-environments-pairing.test.ts src/renderer/src/store/slices/settings/settings.test.ts src/renderer/src/store/slices/browser/hosts/browser-session-host-selection.test.ts src/renderer/src/hooks/useIpcEvents-terminal-create-surfacing.test.ts src/renderer/src/web/web-preload-api-runtime-environment.test.ts --maxWorkers=1",
|
||||
"pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/lib/resolved-worktree-execution-host.test.ts src/renderer/src/lib/workspace/ownership/worktree-runtime-owner.test.ts src/renderer/src/store/repos/ssh-repo-readoption-drafts.test.ts src/renderer/src/store/folder-workspaces/folder-workspace-readoption-drafts.test.ts src/renderer/src/store/repos/repo-catalog-readoption-drafts.test.ts src/renderer/src/store/folder-workspaces/all-host-folder-workspace-catalogs.test.ts src/renderer/src/store/catalog-settlement-notifications.test.ts src/renderer/src/store/repos/repos-stale-fetch.test.ts src/renderer/src/store/folder-workspaces/folder-workspace-routing.test.ts src/renderer/src/store/project-groups/nested-repository-operations.test.ts src/renderer/src/store/repos/repos-selected-owner-routing.test.ts src/renderer/src/store/slices/selected-host-active-workspace-identity.test.ts src/renderer/src/store/slices/worktrees-fetch-owner-routing.test.ts --maxWorkers=1",
|
||||
"pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/lib/resolved-worktree-execution-host.test.ts src/renderer/src/lib/workspace/ownership/worktree-runtime-owner.test.ts src/renderer/src/store/repos/ssh-repo-readoption-drafts.test.ts src/renderer/src/store/folder-workspaces/folder-workspace-readoption-drafts.test.ts src/renderer/src/store/repos/repo-catalog-readoption-drafts.test.ts src/renderer/src/store/folder-workspaces/all-host-folder-workspace-catalogs.test.ts src/renderer/src/store/host-catalog/catalog-settlement-notifications.test.ts src/renderer/src/store/repos/repos-stale-fetch.test.ts src/renderer/src/store/folder-workspaces/folder-workspace-routing.test.ts src/renderer/src/store/project-groups/nested-repository-operations.test.ts src/renderer/src/store/repos/repos-selected-owner-routing.test.ts src/renderer/src/store/slices/worktrees/session/selected-host-active-workspace-identity.test.ts src/renderer/src/store/slices/worktrees/listing/worktrees-fetch-owner-routing.test.ts --maxWorkers=1",
|
||||
"pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/sidebar/project-admission/dialog/AddRepoStartSteps.test.tsx --maxWorkers=1",
|
||||
"pnpm run ensure:electron-runtime && npx playwright test tests/e2e/pr11346-selected-runtime-add.spec.ts --config tests/playwright.config.ts --project electron-headful --workers=1 --reporter=line",
|
||||
"pnpm run ensure:electron-runtime && npx playwright test tests/e2e/pr11346-selected-runtime-add.spec.ts --config tests/playwright.config.ts --project electron-headless --workers=1 --reporter=line"
|
||||
@@ -8391,13 +8391,13 @@
|
||||
"src/renderer/src/store/folder-workspaces/folder-workspace-readoption-drafts.test.ts",
|
||||
"src/renderer/src/store/repos/repo-catalog-readoption-drafts.test.ts",
|
||||
"src/renderer/src/store/folder-workspaces/all-host-folder-workspace-catalogs.test.ts",
|
||||
"src/renderer/src/store/catalog-settlement-notifications.test.ts",
|
||||
"src/renderer/src/store/host-catalog/catalog-settlement-notifications.test.ts",
|
||||
"src/renderer/src/store/repos/repos-stale-fetch.test.ts",
|
||||
"src/renderer/src/store/folder-workspaces/folder-workspace-routing.test.ts",
|
||||
"src/renderer/src/store/project-groups/nested-repository-operations.test.ts",
|
||||
"src/renderer/src/store/repos/repos-selected-owner-routing.test.ts",
|
||||
"src/renderer/src/store/slices/selected-host-active-workspace-identity.test.ts",
|
||||
"src/renderer/src/store/slices/worktrees-fetch-owner-routing.test.ts",
|
||||
"src/renderer/src/store/slices/worktrees/session/selected-host-active-workspace-identity.test.ts",
|
||||
"src/renderer/src/store/slices/worktrees/listing/worktrees-fetch-owner-routing.test.ts",
|
||||
"tests/e2e/pr11346-selected-runtime-add.spec.ts"
|
||||
],
|
||||
"assertionRefs": [
|
||||
@@ -8424,7 +8424,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "src/renderer/src/store/slices/worktrees-fetch-owner-routing.test.ts",
|
||||
"file": "src/renderer/src/store/slices/worktrees/listing/worktrees-fetch-owner-routing.test.ts",
|
||||
"assertions": [
|
||||
"honors an explicit runtime owner before the repo catalog is hydrated",
|
||||
"honors an explicit SSH owner before the repo catalog is hydrated",
|
||||
@@ -8433,7 +8433,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "src/renderer/src/store/slices/selected-host-active-workspace-identity.test.ts",
|
||||
"file": "src/renderer/src/store/slices/worktrees/session/selected-host-active-workspace-identity.test.ts",
|
||||
"assertions": [
|
||||
"selects and activates the runtime worktree when exact repo/worktree IDs collide in local-first order",
|
||||
"keeps exact-ID folder/group activation on the explicitly selected runtime without local fallback"
|
||||
@@ -10388,11 +10388,11 @@
|
||||
"oracle": "Existing exact unchanged-selector receipts remain the only current execution evidence. Changed source selectors have no fresh execution result. Historical prior-source oracle account: Existing exact unchanged-selector receipts remain the only current execution evidence. Changed source selectors have no fresh execution result. Historical prior-source oracle account: The retained unchanged-source receipts are the only current execution evidence; reduced-source assertions await validation. Historical oracle account (not a current claim for changed sources): The retained unchanged-source receipts are the only current execution evidence; reduced-source assertions await validation. Historical oracle account (not a current claim for changed sources): Deterministic tests cover bounded stale-handle replacement, suspended heartbeat clocks, cold and established subscription failure, ten partition/recovery cycles, automatic-recovery cutoff, manual reconnect, and direct SSH binding retention. They assert SSH state changes leave PTY bindings in place, relay identity survives, and another target/local/WSL/runtime panes remain byte-identical through target snapshot hydration and reconnect. Both remount callbacks consume split-count activity suppression, intentional dispose emits no failure/timeout, and a same-attempt StrictMode remount still owns one timeout. Hydration clears an untrusted PTY hint without clearing its current pending owner, healthy current-authority bindings suppress correction, hydration finalizes once, and reconnect emits no paired close lifecycle. A provider-level session-ID reattach returns an incarnation, then a legacy exit without an incarnation must resolve to that returned identity rather than minting a fallback identity. The shared-control oracle withholds the first encrypted ready frame, starts one RPC, triggers the successful-probe refresh, then requires exactly two client connections, one host request, a successful response, zero pending calls, and zero retained request bytes. Tests also assert one unsubscribe per remote-runtime epoch, observable recovery phases, stable PTY identity, resumed snapshot/output/input, no healthy state before replay, no retry or input after cutoff, a new manual epoch against the same PTY, quiet recovery UI with an explicit Reconnect action, pane-close state cleanup, one stable create mutation id, old-runtime no-retry behavior, cross-process PTY adoption, and bounded in-flight coordination. A focused recovery oracle surfaces two distinct failures through one transport, completes authoritative replay, and requires both matching clear callbacks; pane-state tests require only the active pane's error to render, matching-pane recovery to preserve sibling and unrelated errors, dismissal to re-admit later failures, and distinct storms to retain only the newest eight messages within 24 lines and 4,000 characters. The retained store replacement assertion observes one atomic pane/tab subscriber publication; repeated rotations and snapshot-first pending-restart migration no longer have their direct store examples.",
|
||||
"commands": [
|
||||
"pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/terminal-pane/pty-transport/remote-runtime/paired-reconnect-multi-pane-materialization.test.ts src/renderer/src/runtime/paired-reconnect-sidebar-agent-count.test.ts --reporter=dot",
|
||||
"pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/lib/resolved-worktree-execution-host.test.ts src/renderer/src/components/terminal/background-terminal-worktree-mount.test.ts src/renderer/src/components/terminal-pane/layout/close/terminal-pane-close-request.test.ts src/renderer/src/components/terminal-pane/mounting/queued-pane-startup.test.ts src/renderer/src/components/terminal-pane/layout/split/pane-split-startup.test.ts src/renderer/src/components/terminal-pane/parking/one-shot-park-replay.test.ts src/renderer/src/components/terminal-pane/appearance/mounted-terminal-scrollback.test.ts src/renderer/src/components/terminal-pane/mounting/pane-transport-unmount.test.ts src/renderer/src/components/terminal-pane/titles/restored-pane-titles.test.ts src/renderer/src/components/terminal-pane/mounting/queued-initial-cwd.test.ts src/renderer/src/components/terminal-pane/viewport/pane-visibility-identity.test.ts src/renderer/src/components/terminal-pane/pty-connection/tests/pty-connection-spawn-and-startup.test.ts src/renderer/src/components/terminal-pane/pty-transport/remote-runtime/remote-runtime-pty-transport-host-surface-replacement.test.ts src/renderer/src/components/terminal-pane/pty-transport/remote-runtime/remote-runtime-pty-transport-stream-reconnect.test.ts src/renderer/src/runtime/remote-runtime-session-tabs-inflight.test.ts src/renderer/src/store/slices/terminal-pty-identity-replacement.test.ts",
|
||||
"pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/lib/resolved-worktree-execution-host.test.ts src/renderer/src/components/terminal/background-terminal-worktree-mount.test.ts src/renderer/src/components/terminal-pane/layout/close/terminal-pane-close-request.test.ts src/renderer/src/components/terminal-pane/mounting/queued-pane-startup.test.ts src/renderer/src/components/terminal-pane/layout/split/pane-split-startup.test.ts src/renderer/src/components/terminal-pane/parking/one-shot-park-replay.test.ts src/renderer/src/components/terminal-pane/appearance/mounted-terminal-scrollback.test.ts src/renderer/src/components/terminal-pane/mounting/pane-transport-unmount.test.ts src/renderer/src/components/terminal-pane/titles/restored-pane-titles.test.ts src/renderer/src/components/terminal-pane/mounting/queued-initial-cwd.test.ts src/renderer/src/components/terminal-pane/viewport/pane-visibility-identity.test.ts src/renderer/src/components/terminal-pane/pty-connection/tests/pty-connection-spawn-and-startup.test.ts src/renderer/src/components/terminal-pane/pty-transport/remote-runtime/remote-runtime-pty-transport-host-surface-replacement.test.ts src/renderer/src/components/terminal-pane/pty-transport/remote-runtime/remote-runtime-pty-transport-stream-reconnect.test.ts src/renderer/src/runtime/remote-runtime-session-tabs-inflight.test.ts src/renderer/src/store/terminals/terminal-pty-identity-replacement.test.ts",
|
||||
"pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/terminal-pane/pty-transport/ipc/pty-transport-reattach-admission.test.ts src/renderer/src/components/terminal-pane/pty-transport/ipc/pty-transport-detach-attach-handoff.test.ts",
|
||||
"pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/terminal-pane/pty-transport/remote-runtime/remote-runtime-pty-transport-attach-subscription.test.ts --reporter=dot",
|
||||
"pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/terminal-pane/pty-transport/remote-runtime/remote-runtime-pty-transport-attach-subscription.test.ts src/renderer/src/components/terminal-pane/pty-transport/remote-runtime/remote-runtime-pty-transport-host-surface-replacement.test.ts src/renderer/src/components/terminal-pane/pty-transport/remote-runtime/remote-runtime-pty-transport-stream-reconnect.test.ts src/renderer/src/components/terminal-pane/pty-transport/remote-runtime/remote-runtime-pty-transport-expired-pane-recovery.test.ts src/renderer/src/components/terminal-pane/pty-transport/remote-runtime/remote-runtime-pty-transport-create-outcome-recovery.test.ts src/renderer/src/components/terminal-pane/pty-transport/remote-runtime/remote-runtime-pty-transport-create-handoff.test.ts src/renderer/src/components/terminal-pane/pty-transport/remote-runtime/recovery/remote-runtime-pty-recovery-state.test.ts src/renderer/src/components/terminal-pane/pty-transport/remote-runtime/recovery/TerminalRemoteRuntimeReconnectBanner.test.tsx src/shared/remote-runtime/remote-runtime-socket-liveness.test.ts src/shared/remote-runtime/control/remote-runtime-shared-control-connection.test.ts src/shared/remote-runtime/control/remote-runtime-shared-control-socket-generation.test.ts src/shared/remote-runtime/remote-runtime-client-error-classification.test.ts src/main/runtime/rpc/remote-runtime-server-heartbeat.test.ts src/main/runtime/rpc/methods/terminal/terminal-create-idempotency.test.ts src/main/runtime/terminal/launch/orca-runtime-terminal-create-idempotency.test.ts",
|
||||
"pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/store/slices/terminals-hydration.test.ts src/renderer/src/store/repos/repos-ssh-host-reconciliation.test.ts src/renderer/src/components/terminal-pane/pty-connection/tests/pty-connection-spawn-and-startup.test.ts src/renderer/src/components/terminal-pane/layout/detach/terminal-pane-tab-detach.test.ts src/renderer/src/components/terminal-pane/layout/detach/terminal-tab-strip-drop-target-geometry.test.ts --reporter=dot",
|
||||
"pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/store/terminals/workspace-terminal-reconnect-hydration.test.ts src/renderer/src/store/slices/ui/workspace-navigation-history-hydration.test.ts src/renderer/src/store/repos/repos-ssh-host-reconciliation.test.ts src/renderer/src/components/terminal-pane/pty-connection/tests/pty-connection-spawn-and-startup.test.ts src/renderer/src/components/terminal-pane/layout/detach/terminal-pane-tab-detach.test.ts src/renderer/src/components/terminal-pane/layout/detach/terminal-tab-strip-drop-target-geometry.test.ts --reporter=dot",
|
||||
"pnpm exec vitest run --config config/vitest.config.ts src/main/ipc/ssh/ssh.test.ts src/main/ipc/worktrees-ssh-repo-owner-resolution.test.ts src/main/runtime/hosts/platform-probe/public-ssh-state.test.ts src/main/ssh/connection/ssh-connection-manager.test.ts src/main/ssh/connection/ssh-connection.test.ts src/preload/ssh-authority-forwarding.test.ts src/renderer/src/runtime/rpc/subscriptions/runtime-client-events.test.ts src/renderer/src/runtime/hosts/ssh/runtime-environment-ssh-state.test.ts src/shared/ssh-retained-payload-admission.test.ts --reporter=dot",
|
||||
"pnpm exec electron-vite build --mode e2e",
|
||||
"pnpm run build:web-from-renderer",
|
||||
@@ -10424,7 +10424,7 @@
|
||||
"src/renderer/src/components/terminal-pane/pty-transport/remote-runtime/recovery/remote-runtime-pty-recovery-state.test.ts",
|
||||
"src/renderer/src/components/terminal-pane/pty-transport/remote-runtime/recovery/TerminalRemoteRuntimeReconnectBanner.test.tsx",
|
||||
"src/renderer/src/runtime/remote-runtime-session-tabs-inflight.test.ts",
|
||||
"src/renderer/src/store/slices/terminal-pty-identity-replacement.test.ts",
|
||||
"src/renderer/src/store/terminals/terminal-pty-identity-replacement.test.ts",
|
||||
"src/shared/remote-runtime/remote-runtime-socket-liveness.test.ts",
|
||||
"src/shared/remote-runtime/control/remote-runtime-shared-control-connection.test.ts",
|
||||
"src/shared/remote-runtime/control/remote-runtime-shared-control-socket-generation.test.ts",
|
||||
@@ -10433,7 +10433,8 @@
|
||||
"src/main/runtime/rpc/methods/terminal/terminal-create-idempotency.test.ts",
|
||||
"src/main/runtime/terminal/launch/orca-runtime-terminal-create-idempotency.test.ts",
|
||||
"tests/e2e/paired-remote-terminal-materialization-reconnect.spec.ts",
|
||||
"src/renderer/src/store/slices/terminals-hydration.test.ts",
|
||||
"src/renderer/src/store/terminals/workspace-terminal-reconnect-hydration.test.ts",
|
||||
"src/renderer/src/store/slices/ui/workspace-navigation-history-hydration.test.ts",
|
||||
"src/renderer/src/store/repos/repos-ssh-host-reconciliation.test.ts",
|
||||
"src/renderer/src/components/terminal-pane/layout/detach/terminal-pane-tab-detach.test.ts",
|
||||
"src/renderer/src/components/terminal-pane/layout/detach/terminal-tab-strip-drop-target-geometry.test.ts",
|
||||
@@ -10593,8 +10594,8 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "src/renderer/src/store/slices/terminals-hydration.test.ts",
|
||||
"assertions": ["batches restored terminal reconnect wake hints into one store update"]
|
||||
"file": "src/renderer/src/store/terminals/workspace-terminal-reconnect-hydration.test.ts",
|
||||
"assertions": ["restores daemon terminal wake hints before declaring the session ready"]
|
||||
},
|
||||
{
|
||||
"file": "src/renderer/src/store/repos/repos-ssh-host-reconciliation.test.ts",
|
||||
@@ -10693,7 +10694,8 @@
|
||||
"Audit1342 historical assertion inventory for deleted/reduced sources; not current validated assertions:\n[\n {\n \"file\": \"src/renderer/src/components/terminal-pane/terminal-error-accumulation.test.ts\",\n \"assertions\": [\n \"only the active pane's errors render and matching-pane recovery preserves sibling and unrelated messages\",\n \"individual messages and the joined surface remain within 24 lines and 4,000 characters\",\n \"a distinct error storm retains only the newest eight messages for one pane while whole-message dedup remains intact\",\n \"repeated split-pane close churn releases every closed pane id while preserving the live sibling\"\n ]\n },\n {\n \"file\": \"src/renderer/src/hooks/ipc-events/direct-ssh-connect-reply-routing.test.ts\",\n \"assertions\": [\n \"connected pushes, disconnects, and errors keep an SSH tab's PTY binding; loss of contact is not exit\"\n ]\n }\n]",
|
||||
"Audit1396: src/renderer/src/components/terminal-pane/pty-connection-pending-spawn.spec.ts reduced. Lose standalone debug-state retention/log silence alarm. React StrictMode is not mounted; bindings manually simulate remount over mocked transport. No equivalent replacement coverage is claimed. Existing exact primary-selector receipts remain unchanged.",
|
||||
"Audit1400: src/main/ipc/ssh/ssh.test.ts reduced. Lose trivial missing target and mocked publication inventory. Preexisting unresolved ../ssh/ssh-port-scanner mock is recorded, not fixed. src/renderer/src/runtime/sync-runtime-graph-scheduling.test.ts removed. Removes whole coalescing call-count suite; no newest-state delivery or replacement claim. src/renderer/src/store/slices/terminal-pty-identity-replacement.test.ts reduced. Removes three no-op/work-count registrations; retains externally observed ownership consistency. No equivalent replacement coverage is claimed. Historical removed assertion inventory: [{\"file\":\"src/renderer/src/store/slices/terminal-pty-identity-replacement.test.ts\",\"assertions\":[\"publishes pane and tab replacement identities in one store commit\"]},{\"file\":\"src/main/ipc/ssh/ssh.test.ts\",\"assertions\":[\"concurrent same-authority connects share one provider attempt\",\"authority rotation starts stale transport cancellation before teardown, concurrent fresh callers share one replacement, and stale completion cannot clobber the fresh session\",\"same-turn disconnect and forward-teardown failures across removal, reset, and terminate keep replacement connects and metadata mutation behind complete target cleanup\"]}]",
|
||||
"Audit1412: src/main/ssh/ssh-provider-authority.test.ts removed. Loses real AbortController revocation/target isolation/reentrancy outcomes, recreated-target generation-floor/session rollover behavior, stale mutation refusal and settled-registration cleanup alarms. These useful alarms are deliberately lost; no equivalent cancellation coverage is claimed. No equivalent replacement coverage is claimed. Historical removed assertion inventory: [{\"file\":\"src/main/ssh/ssh-provider-authority.test.ts\",\"assertions\":[\"provider epoch and connection generation rotate as one exact authority pair\",\"provider resolution rejects stale or incomplete authority\",\"unknown-target currency probes reject without allocating provider authority state\"]}]"
|
||||
"Audit1412: src/main/ssh/ssh-provider-authority.test.ts removed. Loses real AbortController revocation/target isolation/reentrancy outcomes, recreated-target generation-floor/session rollover behavior, stale mutation refusal and settled-registration cleanup alarms. These useful alarms are deliberately lost; no equivalent cancellation coverage is claimed. No equivalent replacement coverage is claimed. Historical removed assertion inventory: [{\"file\":\"src/main/ssh/ssh-provider-authority.test.ts\",\"assertions\":[\"provider epoch and connection generation rotate as one exact authority pair\",\"provider resolution rejects stale or incomplete authority\",\"unknown-target currency probes reject without allocating provider authority state\"]}]",
|
||||
"Module-layout cleanup splits the former terminals-hydration suite into workspace-terminal-reconnect-hydration and workspace-navigation-history-hydration. The reconnect case retains daemon wake-hint/session-readiness outcomes; its store-publication count assertion is intentionally retired. The navigation case retains hydration-seeded visit/Back behavior. Historical receipts remain verbatim and do not validate these changed test owners."
|
||||
],
|
||||
"demotionRule": "Cannot promote if provider failure can close panes or if the oracle is screenshot-only."
|
||||
},
|
||||
|
||||
@@ -77,9 +77,9 @@
|
||||
7 src/renderer/src/store/slices/editor/opening/open-file-state.ts
|
||||
4 src/renderer/src/store/slices/editor/tabs/editor-open-target-group.ts
|
||||
1 src/renderer/src/store/slices/editor/tabs/workspace-editor-files.ts
|
||||
2 src/renderer/src/store/slices/tab-group-reference-repair.ts
|
||||
4 src/renderer/src/store/slices/tab-group-state.ts
|
||||
1 src/renderer/src/store/slices/tabs-hydration.ts
|
||||
2 src/renderer/src/store/slices/tabs/tab-group-reference-repair.ts
|
||||
4 src/renderer/src/store/slices/tabs/tab-group-state.ts
|
||||
1 src/renderer/src/store/slices/tabs/tabs-hydration.ts
|
||||
4 src/renderer/src/store/slices/tabs/create-tabs-slice.ts
|
||||
12 src/renderer/src/store/slices/tabs/rename-worktree-layout.ts
|
||||
9 src/renderer/src/store/slices/tabs/tabs-close-actions.ts
|
||||
@@ -97,9 +97,9 @@
|
||||
1 src/renderer/src/store/slices/tabs/tabs-split-ratio-actions.ts
|
||||
5 src/renderer/src/store/slices/tabs/tabs-surface.ts
|
||||
24 src/renderer/src/store/slices/tabs/worktree-layout-lifecycle.ts
|
||||
6 src/renderer/src/store/slices/terminal-orphan-helpers.ts
|
||||
4 src/renderer/src/store/slices/terminal-tab-title-batch.ts
|
||||
6 src/renderer/src/store/slices/terminals.ts
|
||||
6 src/renderer/src/store/terminals/terminal-orphan-cleanup.ts
|
||||
4 src/renderer/src/store/terminals/terminal-tab-title-batch.ts
|
||||
6 src/renderer/src/store/terminals/create-terminal-slice.ts
|
||||
5 src/renderer/src/store/slices/worktrees/session/set-active-worktree.ts
|
||||
2 src/renderer/src/store/slices/worktrees/session/worktree-slice-lookups.ts
|
||||
5 src/renderer/src/store/terminals/terminal-layout-state.ts
|
||||
@@ -117,6 +117,6 @@
|
||||
5 src/renderer/src/store/terminals/workspace-terminal-hydration-patch.ts
|
||||
2 src/renderer/src/store/terminals/workspace-terminal-hydration.ts
|
||||
2 src/renderer/src/store/terminals/workspace-terminal-reconnect.ts
|
||||
7 src/renderer/src/store/workspace-layout-frame-held-tabs.ts
|
||||
4 src/renderer/src/store/workspace-layout-frame-slices.ts
|
||||
12 src/renderer/src/store/workspace-layout-frame-store-patch.ts
|
||||
7 src/renderer/src/store/workspace-layout/frames/workspace-layout-frame-held-tabs.ts
|
||||
4 src/renderer/src/store/workspace-layout/frames/workspace-layout-frame-slices.ts
|
||||
12 src/renderer/src/store/workspace-layout/frames/workspace-layout-frame-store-patch.ts
|
||||
|
||||
@@ -7196,7 +7196,6 @@
|
||||
"src/renderer/src/components/terminal-pane/render-health/recovery/terminal-pane-recovery.test.ts": 949,
|
||||
"src/renderer/src/components/terminal-pane/layout/split/terminal-pane-split-request-routing.test.ts": 2015,
|
||||
"src/renderer/src/components/terminal-pane/layout/split/terminal-pane-split-with-inherited-cwd.test.ts": 1834,
|
||||
"src/renderer/src/components/terminal-pane/controller/terminal-pane-store-subscription-budget.test.tsx": 15475,
|
||||
"src/renderer/src/components/terminal-pane/pty-transport/recovery/terminal-pane-surface-ownership.test.ts": 426,
|
||||
"src/renderer/src/components/terminal-pane/layout/detach/terminal-pane-tab-detach-commit.test.ts": 2141,
|
||||
"src/renderer/src/components/terminal-pane/layout/detach/terminal-pane-tab-detach-frame-drawn.test.ts": 1889,
|
||||
@@ -7645,7 +7644,6 @@
|
||||
"src/renderer/src/lib/work-items/linear/linear-issue-workspace-attachment.test.ts": 99,
|
||||
"src/renderer/src/lib/link-source-local-open-owner.test.ts": 433,
|
||||
"src/renderer/src/lib/linked-work-item-context.test.ts": 64,
|
||||
"src/renderer/src/lib/local-preflight-context-cache.test.ts": 2115,
|
||||
"src/renderer/src/lib/monaco-editor-gutter-disposal.test.ts": 295,
|
||||
"src/renderer/src/lib/monaco-languages/markdown-heading-outline.test.ts": 70,
|
||||
"src/renderer/src/lib/monaco-languages/markdown-textmate-tokens.test.ts": 364,
|
||||
@@ -8006,8 +8004,7 @@
|
||||
"src/renderer/src/ssh/ssh-connect-in-flight.test.ts": 62,
|
||||
"src/renderer/src/startup/startup-degraded-recovery.test.ts": 574,
|
||||
"src/renderer/src/startup/startup-ssh-connection-restore.test.ts": 71,
|
||||
"src/renderer/src/store/always-mounted-selector-scan-cost.test.ts": 1727,
|
||||
"src/renderer/src/store/editor-buffer-record-lifecycle.test.ts": 1794,
|
||||
"src/renderer/src/store/slices/editor/buffers/editor-buffer-record-lifecycle.test.ts": 1794,
|
||||
"src/renderer/src/store/folder-workspaces/folder-path-status-ownership.test.ts": 1809,
|
||||
"src/renderer/src/store/github/checks/check-actions-errors.test.ts": 520,
|
||||
"src/renderer/src/store/github/checks/check-details-failure-mapping.test.ts": 887,
|
||||
@@ -8015,26 +8012,26 @@
|
||||
"src/renderer/src/store/github/requests/provider-request-coalescing.test.ts": 969,
|
||||
"src/renderer/src/store/slices/hosted-review/refresh/visible-hosted-review-refresh-scheduler.test.ts": 97,
|
||||
"src/renderer/src/store/github/repositories/wsl-stopped-distro-poll-refusal.test.ts": 696,
|
||||
"src/renderer/src/store/host-twin-isolation.test.ts": 1889,
|
||||
"src/renderer/src/store/host-twin-worktree-purge.test.ts": 1945,
|
||||
"src/renderer/src/store/plugin-icon-themes.test.ts": 365,
|
||||
"src/renderer/src/store/plugin-language-packs-startup.test.ts": 435,
|
||||
"src/renderer/src/store/plugin-language-packs.test.ts": 377,
|
||||
"src/renderer/src/store/plugin-panel-retry-timer-cleanup.test.ts": 5216,
|
||||
"src/renderer/src/store/plugin-panels.test.ts": 2142,
|
||||
"src/renderer/src/store/workspaces/host-isolation/host-twin-isolation.test.ts": 1889,
|
||||
"src/renderer/src/store/workspaces/host-isolation/host-twin-worktree-purge.test.ts": 1945,
|
||||
"src/renderer/src/store/plugins/appearance/plugin-icon-themes.test.ts": 365,
|
||||
"src/renderer/src/store/plugins/localization/plugin-language-packs-startup.test.ts": 435,
|
||||
"src/renderer/src/store/plugins/localization/plugin-language-packs.test.ts": 377,
|
||||
"src/renderer/src/store/plugins/catalog/plugin-panel-retry-timer-cleanup.test.ts": 5216,
|
||||
"src/renderer/src/store/plugins/catalog/plugin-panels.test.ts": 2142,
|
||||
"src/renderer/src/store/projects/project-catalog-null-field-ingest.test.ts": 309,
|
||||
"src/renderer/src/store/react-commit-cascade-write-probe.test.ts": 602,
|
||||
"src/renderer/src/store/diagnostics/react-commit-cascade-write-probe.test.ts": 602,
|
||||
"src/renderer/src/store/repos/dropped-repo-worktree-rows.test.ts": 1738,
|
||||
"src/renderer/src/store/repos/repo-removal.test.ts": 799,
|
||||
"src/renderer/src/store/repos/safe-auto-fork-sync.test.ts": 446,
|
||||
"src/renderer/src/store/repos/wsl-moved-local-session-rows.test.ts": 319,
|
||||
"src/renderer/src/store/repos/wsl-moved-repo-ui-retention.test.ts": 2920,
|
||||
"src/renderer/src/store/running-terminal-close-confirm.test.ts": 50,
|
||||
"src/renderer/src/store/runtime-status-subscriptions.test.ts": 182,
|
||||
"src/renderer/src/store/slices/active-selection-owner-scoping.test.ts": 1909,
|
||||
"src/renderer/src/store/slices/agent-hibernation-live-anchor-e2e.test.ts": 1783,
|
||||
"src/renderer/src/store/slices/agent-pane-authority.test.ts": 1756,
|
||||
"src/renderer/src/store/slices/agent-status-pane-owner-reclaim.test.ts": 1899,
|
||||
"src/renderer/src/store/slices/tabs/closing/running-terminal-close-confirm.test.ts": 50,
|
||||
"src/renderer/src/store/slices/runtime-status/views/runtime-status-subscriptions.test.ts": 182,
|
||||
"src/renderer/src/store/slices/editor/focus/active-selection-owner-scoping.test.ts": 1909,
|
||||
"src/renderer/src/store/slices/agent-status/agent-hibernation-live-anchor-e2e.test.ts": 1783,
|
||||
"src/renderer/src/store/slices/agent-status/agent-pane-authority.test.ts": 1756,
|
||||
"src/renderer/src/store/slices/agent-status/agent-status-pane-owner-reclaim.test.ts": 1899,
|
||||
"src/renderer/src/store/slices/agent-status/agent-status-ack-cleanup.test.ts": 1776,
|
||||
"src/renderer/src/store/slices/agent-status/agent-status-batch.test.ts": 1933,
|
||||
"src/renderer/src/store/slices/agent-status/agent-status-drop-ipc.test.ts": 2205,
|
||||
@@ -8053,7 +8050,7 @@
|
||||
"src/renderer/src/store/slices/agent-status/agent-status-worktree-purge-leak.test.ts": 1744,
|
||||
"src/renderer/src/store/slices/agent-status/agent-status.test.ts": 2129,
|
||||
"src/renderer/src/store/repos/all-host-catalog-settlement.test.ts": 1955,
|
||||
"src/renderer/src/store/slices/ambiguous-owner-warning-worktree-removal-leak.test.ts": 2101,
|
||||
"src/renderer/src/store/slices/worktrees/teardown/ambiguous-owner-warning-worktree-removal-leak.test.ts": 2101,
|
||||
"src/renderer/src/store/slices/browser/annotations/browser-annotation-retention.test.ts": 8178,
|
||||
"src/renderer/src/store/slices/browser/cleanup/browser-cleanup-close.test.ts": 1911,
|
||||
"src/renderer/src/store/slices/browser/cleanup/browser-mount-admission-removal.test.ts": 1982,
|
||||
@@ -8064,13 +8061,13 @@
|
||||
"src/renderer/src/store/slices/browser/tabs/browser-tab-creation-placement.test.ts": 1886,
|
||||
"src/renderer/src/store/slices/browser/pages/browser-workspace-doc-location.test.ts": 2007,
|
||||
"src/renderer/src/store/slices/browser/browser.test.ts": 2001,
|
||||
"src/renderer/src/store/slices/bulk-worktree-purge-terminal-maps-leak.test.ts": 1727,
|
||||
"src/renderer/src/store/slices/cmd-j-create-actions.test.ts": 1879,
|
||||
"src/renderer/src/store/slices/codex-restart-notice-lifecycle.test.ts": 1685,
|
||||
"src/renderer/src/store/slices/content-tabs-from-main-frames.test.ts": 2025,
|
||||
"src/renderer/src/store/slices/content-tabs-paired-server-workspace.test.ts": 1923,
|
||||
"src/renderer/src/store/slices/degraded-repo-hydration.test.ts": 1771,
|
||||
"src/renderer/src/store/slices/detected-agents.test.ts": 643,
|
||||
"src/renderer/src/store/slices/worktrees/teardown/bulk-worktree-purge-terminal-maps-leak.test.ts": 1727,
|
||||
"src/renderer/src/store/workspaces/creation/active-workspace-create-actions.test.ts": 1879,
|
||||
"src/renderer/src/store/terminals/codex-restart-notice-lifecycle.test.ts": 1685,
|
||||
"src/renderer/src/store/slices/tabs/content-tabs-from-main-frames.test.ts": 2025,
|
||||
"src/renderer/src/store/slices/tabs/content-tabs-paired-server-workspace.test.ts": 1923,
|
||||
"src/renderer/src/store/terminals/degraded-repo-hydration.test.ts": 1771,
|
||||
"src/renderer/src/store/slices/agent-inventory/detected-agents.test.ts": 643,
|
||||
"src/renderer/src/store/slices/diff-comments/diff-comments-host-twins.test.ts": 1887,
|
||||
"src/renderer/src/store/slices/diff-comments/diffComments.test.ts": 1896,
|
||||
"src/renderer/src/store/slices/editor/git/editor-branch-line-total.test.ts": 892,
|
||||
@@ -8105,11 +8102,11 @@
|
||||
"src/renderer/src/store/slices/editor/buffers/editor-buffer-reconcile-joins.test.ts": 1766,
|
||||
"src/renderer/src/store/slices/editor/buffers/editor-buffer-rejoin.test.ts": 1843,
|
||||
"src/renderer/src/store/slices/editor/buffers/editor-buffer-views.test.ts": 2004,
|
||||
"src/renderer/src/store/slices/floating-editor-file-id-layout-owner.test.ts": 933,
|
||||
"src/renderer/src/store/slices/folder-workspace-activation-and-activity.test.ts": 2358,
|
||||
"src/renderer/src/store/slices/editor/file-ids/floating-editor-file-id-layout-owner.test.ts": 933,
|
||||
"src/renderer/src/store/slices/worktrees/session/folder-workspace-activation-and-activity.test.ts": 2358,
|
||||
"src/renderer/src/store/slices/diff-comments/folder-workspace-diff-comments.test.ts": 1042,
|
||||
"src/renderer/src/store/folder-workspaces/folder-workspace-owner-routed-mutations.test.ts": 1844,
|
||||
"src/renderer/src/store/slices/generation-records-worktree-removal-leak.test.ts": 1612,
|
||||
"src/renderer/src/store/slices/worktrees/teardown/generation-records-worktree-removal-leak.test.ts": 1612,
|
||||
"src/renderer/src/store/github/issues/github-issue-state-machine.test.ts": 658,
|
||||
"src/renderer/src/store/github/pull-requests/github-linked-review-clear-ownership.test.ts": 891,
|
||||
"src/renderer/src/store/slices/editor/git/github-post-operation-owner.test.ts": 2062,
|
||||
@@ -8141,20 +8138,18 @@
|
||||
"src/renderer/src/store/slices/jira/jira-web-client-status.test.ts": 1901,
|
||||
"src/renderer/src/store/slices/jira/jira.test.ts": 312,
|
||||
"src/renderer/src/store/slices/linear/linear-invalidation.test.ts": 117,
|
||||
"src/renderer/src/store/slices/local-detected-agent-state.test.ts": 596,
|
||||
"src/renderer/src/store/slices/native-chat-launch-draft-teardown.test.ts": 1854,
|
||||
"src/renderer/src/store/slices/new-markdown.test.ts": 1000,
|
||||
"src/renderer/src/store/slices/agent-inventory/local-detected-agent-state.test.ts": 596,
|
||||
"src/renderer/src/store/slices/worktrees/teardown/native-chat-launch-draft-teardown.test.ts": 1854,
|
||||
"src/renderer/src/store/slices/orca-profiles/orca-profiles-auth-actions-connect-overlap.test.ts": 1685,
|
||||
"src/renderer/src/store/slices/pinned-tab-close-confirm.test.ts": 44,
|
||||
"src/renderer/src/store/slices/preflight.test.ts": 1858,
|
||||
"src/renderer/src/store/slices/tabs/pinned-tab-close-confirm.test.ts": 44,
|
||||
"src/renderer/src/store/slices/preflight/preflight.test.ts": 1858,
|
||||
"src/renderer/src/store/repos/project-removal-host-twin-state.test.ts": 1972,
|
||||
"src/renderer/src/store/repos/project-removal-owner-host.test.ts": 1880,
|
||||
"src/renderer/src/store/repos/project-removal-runtime-terminal-order.test.ts": 1769,
|
||||
"src/renderer/src/store/repos/project-removal-unreachable-server.test.ts": 2292,
|
||||
"src/renderer/src/store/slices/purge-stale-runtime-host-ownership.test.ts": 1767,
|
||||
"src/renderer/src/store/slices/purge-stale-runtime-host-state.test.ts": 1719,
|
||||
"src/renderer/src/store/slices/recently-closed-tabs.test.ts": 2039,
|
||||
"src/renderer/src/store/slices/removed-worktree-diff-memory.test.ts": 2981,
|
||||
"src/renderer/src/store/slices/worktrees/teardown/purge-stale-runtime-host-ownership.test.ts": 1767,
|
||||
"src/renderer/src/store/slices/worktrees/teardown/purge-stale-runtime-host-state.test.ts": 1719,
|
||||
"src/renderer/src/store/slices/worktrees/teardown/removed-worktree-diff-memory.test.ts": 2981,
|
||||
"src/renderer/src/store/repos/repos-add-races.test.ts": 1731,
|
||||
"src/renderer/src/store/repos/repos-all-hosts-generation.test.ts": 1908,
|
||||
"src/renderer/src/store/repos/repos-all-hosts.test.ts": 1971,
|
||||
@@ -8169,84 +8164,80 @@
|
||||
"src/renderer/src/store/repos/repos-ssh-host-reconciliation.test.ts": 1891,
|
||||
"src/renderer/src/store/repos/repos.runtime-fallback.test.ts": 1808,
|
||||
"src/renderer/src/store/repos/repos.test.ts": 1835,
|
||||
"src/renderer/src/store/slices/restored-editor-owner-layout-owner.test.ts": 1879,
|
||||
"src/renderer/src/store/slices/restored-editor-owner-reparent.test.ts": 2423,
|
||||
"src/renderer/src/store/slices/restored-editor-owner-restart.test.ts": 2138,
|
||||
"src/renderer/src/store/slices/editor/tabs/restored-editor-owner-layout-owner.test.ts": 1879,
|
||||
"src/renderer/src/store/slices/editor/hydration/restored-editor-owner-reparent.test.ts": 2423,
|
||||
"src/renderer/src/store/slices/editor/hydration/restored-editor-owner-restart.test.ts": 2138,
|
||||
"src/renderer/src/store/repos/runtime-catalog-merge-removed-env-guard.test.ts": 1787,
|
||||
"src/renderer/src/store/slices/runtime-detected-agents-pairing.test.ts": 608,
|
||||
"src/renderer/src/store/slices/runtime-detected-agents.test.ts": 478,
|
||||
"src/renderer/src/store/slices/runtime-environment-peer-replacement.test.ts": 120,
|
||||
"src/renderer/src/store/slices/runtime-host-purge-session-partition-split.test.ts": 1770,
|
||||
"src/renderer/src/store/slices/runtime-managed-repair-keeps-workspaces.test.ts": 1776,
|
||||
"src/renderer/src/store/slices/runtime-pane-title-sort-epoch.test.ts": 1737,
|
||||
"src/renderer/src/store/slices/runtime-status-snapshot.test.ts": 410,
|
||||
"src/renderer/src/store/slices/runtime-status.test.ts": 746,
|
||||
"src/renderer/src/store/slices/agent-inventory/runtime-detected-agents-pairing.test.ts": 608,
|
||||
"src/renderer/src/store/slices/agent-inventory/runtime-detected-agents.test.ts": 478,
|
||||
"src/renderer/src/store/slices/runtime-status/runtime-environment-peer-replacement.test.ts": 120,
|
||||
"src/renderer/src/store/slices/worktrees/teardown/runtime-host-purge-session-partition-split.test.ts": 1770,
|
||||
"src/renderer/src/store/slices/runtime-status/runtime-managed-repair-keeps-workspaces.test.ts": 1776,
|
||||
"src/renderer/src/store/terminals/runtime-pane-title-sort-epoch.test.ts": 1737,
|
||||
"src/renderer/src/store/slices/runtime-status/runtime-status-snapshot.test.ts": 410,
|
||||
"src/renderer/src/store/slices/runtime-status/runtime-status.test.ts": 746,
|
||||
"src/renderer/src/store/slices/settings/runtime-switch-settings-persistence.test.ts": 1772,
|
||||
"src/renderer/src/store/slices/selected-host-active-workspace-identity.test.ts": 1661,
|
||||
"src/renderer/src/store/slices/set-runtime-environments-purge-wiring.test.ts": 1683,
|
||||
"src/renderer/src/store/slices/worktrees/session/selected-host-active-workspace-identity.test.ts": 1661,
|
||||
"src/renderer/src/store/slices/runtime-status/set-runtime-environments-purge-wiring.test.ts": 1683,
|
||||
"src/renderer/src/store/slices/settings/settings-owner-hydration-write-fence.test.ts": 1860,
|
||||
"src/renderer/src/store/slices/settings/settings-terminal-quick-commands.test.ts": 1734,
|
||||
"src/renderer/src/store/slices/settings/settings.test.ts": 1938,
|
||||
"src/renderer/src/store/repos/sparse-presets-repo-removal-purge-leak.test.ts": 1612,
|
||||
"src/renderer/src/store/slices/sparse-presets.test.ts": 217,
|
||||
"src/renderer/src/store/slices/ssh.test.ts": 1843,
|
||||
"src/renderer/src/store/slices/store-active-worktree-removal-successor.test.ts": 1867,
|
||||
"src/renderer/src/store/slices/store-active-worktree-selection.test.ts": 2039,
|
||||
"src/renderer/src/store/slices/store-active-worktree-split-groups.test.ts": 2048,
|
||||
"src/renderer/src/store/slices/store-active-worktree-tab-close.test.ts": 1897,
|
||||
"src/renderer/src/store/slices/store-active-worktree-terminal-creation.test.ts": 1747,
|
||||
"src/renderer/src/store/slices/store-create-tab-start-in-main.test.ts": 1801,
|
||||
"src/renderer/src/store/slices/store-open-to-side-layout-owner.test.ts": 1919,
|
||||
"src/renderer/src/store/slices/store-session-browser-hydration.test.ts": 1906,
|
||||
"src/renderer/src/store/slices/worktrees/create/sparse-presets.test.ts": 217,
|
||||
"src/renderer/src/store/slices/ssh/ssh.test.ts": 1843,
|
||||
"src/renderer/src/lib/active-worktree-removal-successor.test.ts": 1867,
|
||||
"src/renderer/src/store/slices/worktrees/session/store-active-worktree-selection.test.ts": 2039,
|
||||
"src/renderer/src/store/terminals/store-create-tab-start-in-main.test.ts": 1801,
|
||||
"src/renderer/src/store/slices/tabs/store-open-to-side-layout-owner.test.ts": 1919,
|
||||
"src/renderer/src/store/slices/browser/hydration/store-session-browser-hydration.test.ts": 1906,
|
||||
"src/renderer/src/store/repos/store-session-cascades.test.ts": 1775,
|
||||
"src/renderer/src/store/slices/store-session-editor-hydration.test.ts": 1719,
|
||||
"src/renderer/src/store/slices/store-session-terminal-reconnect.test.ts": 2279,
|
||||
"src/renderer/src/store/slices/store-session-workspace-hydration.test.ts": 1733,
|
||||
"src/renderer/src/store/slices/store-sleep-agent-status-retention.test.ts": 7641,
|
||||
"src/renderer/src/store/slices/store-sleep-exact-runtime-stop.test.ts": 1842,
|
||||
"src/renderer/src/store/slices/store-sleep-pane-hibernation.test.ts": 1932,
|
||||
"src/renderer/src/store/slices/store-sleep-runtime-convergence.test.ts": 1767,
|
||||
"src/renderer/src/store/slices/store-sleep-shutdown-order.test.ts": 1808,
|
||||
"src/renderer/src/store/slices/store-sleep-twin-host-owner.test.ts": 1706,
|
||||
"src/renderer/src/store/slices/store-worktree-removal-cascade.test.ts": 1786,
|
||||
"src/renderer/src/store/slices/tab-worktree-orphan-map-purge-leak.test.ts": 1936,
|
||||
"src/renderer/src/store/slices/tabs-close-dangling-group.test.ts": 1849,
|
||||
"src/renderer/src/store/slices/tabs-hydration-group-validation.test.ts": 249,
|
||||
"src/renderer/src/store/slices/tabs-hydration.test.ts": 273,
|
||||
"src/renderer/src/store/slices/tabs-label-and-pin-state.test.ts": 1921,
|
||||
"src/renderer/src/store/slices/tabs-model-reconciliation.test.ts": 1800,
|
||||
"src/renderer/src/store/slices/tabs-open-close-lifecycle.test.ts": 2140,
|
||||
"src/renderer/src/store/slices/tabs-pane-layout-operations.test.ts": 1652,
|
||||
"src/renderer/src/store/slices/tabs-split-create.test.ts": 1733,
|
||||
"src/renderer/src/store/slices/tabs-unread-and-focus.test.ts": 1801,
|
||||
"src/renderer/src/store/slices/editor/hydration/store-session-editor-hydration.test.ts": 1719,
|
||||
"src/renderer/src/store/terminals/store-session-terminal-reconnect.test.ts": 2279,
|
||||
"src/renderer/src/store/terminals/store-session-workspace-hydration.test.ts": 1733,
|
||||
"src/renderer/src/store/terminals/store-sleep-agent-status-retention.test.ts": 7641,
|
||||
"src/renderer/src/store/terminals/store-sleep-exact-runtime-stop.test.ts": 1842,
|
||||
"src/renderer/src/store/terminals/store-sleep-pane-hibernation.test.ts": 1932,
|
||||
"src/renderer/src/store/terminals/store-sleep-runtime-convergence.test.ts": 1767,
|
||||
"src/renderer/src/store/terminals/store-sleep-shutdown-order.test.ts": 1808,
|
||||
"src/renderer/src/store/terminals/store-sleep-twin-host-owner.test.ts": 1706,
|
||||
"src/renderer/src/store/slices/worktrees/teardown/store-worktree-removal-cascade.test.ts": 1786,
|
||||
"src/renderer/src/store/slices/worktrees/teardown/tab-worktree-orphan-map-purge-leak.test.ts": 1936,
|
||||
"src/renderer/src/store/slices/tabs/tabs-close-dangling-group.test.ts": 1849,
|
||||
"src/renderer/src/store/slices/tabs/tabs-hydration-group-validation.test.ts": 249,
|
||||
"src/renderer/src/store/slices/tabs/tabs-hydration.test.ts": 273,
|
||||
"src/renderer/src/store/slices/tabs/tabs-label-and-pin-state.test.ts": 1921,
|
||||
"src/renderer/src/store/slices/tabs/tabs-model-reconciliation.test.ts": 1800,
|
||||
"src/renderer/src/store/slices/tabs/tabs-open-close-lifecycle.test.ts": 2140,
|
||||
"src/renderer/src/store/slices/tabs/tabs-pane-layout-operations.test.ts": 1652,
|
||||
"src/renderer/src/store/slices/tabs/tabs-split-create.test.ts": 1733,
|
||||
"src/renderer/src/store/slices/tabs/tabs-unread-and-focus.test.ts": 1801,
|
||||
"src/renderer/src/store/slices/tabs/hydrated-workspace-reconciliation-batch.test.ts": 1988,
|
||||
"src/renderer/src/store/slices/tabs/structured-chat-close-owner.test.ts": 1866,
|
||||
"src/renderer/src/store/slices/tabs/tabs-reconciliation-empty-groups.test.ts": 1703,
|
||||
"src/renderer/src/store/slices/terminal-input-activity-store-write.test.ts": 1726,
|
||||
"src/renderer/src/store/slices/terminal-layout-pty-ownership.test.ts": 1734,
|
||||
"src/renderer/src/store/slices/terminal-pane-detach-agent-identity.test.ts": 1627,
|
||||
"src/renderer/src/store/slices/terminal-pane-detach-agent-retention.test.ts": 2846,
|
||||
"src/renderer/src/store/slices/terminal-pty-identity-replacement.test.ts": 1751,
|
||||
"src/renderer/src/store/slices/terminal-quick-command-hosts.test.ts": 1759,
|
||||
"src/renderer/src/store/slices/terminal-tab-owner-index.test.ts": 50,
|
||||
"src/renderer/src/store/slices/terminal-tab-recovery-remount.test.ts": 1791,
|
||||
"src/renderer/src/store/slices/terminal-tab-retirement-store.test.ts": 1955,
|
||||
"src/renderer/src/store/slices/terminal-tab-title-batch.test.ts": 1749,
|
||||
"src/renderer/src/store/slices/terminals-hydration-canonical-pty-overlap.test.ts": 1946,
|
||||
"src/renderer/src/store/slices/terminals-hydration-canonical-rows.test.ts": 1680,
|
||||
"src/renderer/src/store/slices/terminals-hydration.test.ts": 1768,
|
||||
"src/renderer/src/store/terminals/terminal-input-activity-store-write.test.ts": 1726,
|
||||
"src/renderer/src/store/terminals/terminal-layout-pty-ownership.test.ts": 1734,
|
||||
"src/renderer/src/store/terminals/terminal-pane-detach-agent-identity.test.ts": 1627,
|
||||
"src/renderer/src/store/terminals/terminal-pane-detach-agent-retention.test.ts": 2846,
|
||||
"src/renderer/src/store/terminals/terminal-pty-identity-replacement.test.ts": 1751,
|
||||
"src/renderer/src/store/terminals/terminal-quick-command-hosts.test.ts": 1759,
|
||||
"src/renderer/src/store/terminals/terminal-tab-owner-index.test.ts": 50,
|
||||
"src/renderer/src/store/terminals/terminal-tab-recovery-remount.test.ts": 1791,
|
||||
"src/renderer/src/store/terminals/terminal-tab-retirement-store.test.ts": 1955,
|
||||
"src/renderer/src/store/terminals/terminal-tab-title-batch.test.ts": 1749,
|
||||
"src/renderer/src/store/terminals/terminals-hydration-canonical-pty-overlap.test.ts": 1946,
|
||||
"src/renderer/src/store/terminals/terminals-hydration-canonical-rows.test.ts": 1680,
|
||||
"src/renderer/src/store/slices/ui/ui-agent-send-target.test.ts": 760,
|
||||
"src/renderer/src/store/slices/ui/ui-feature-interactions.test.ts": 648,
|
||||
"src/renderer/src/store/slices/ui/ui-host-filter-sync.test.ts": 597,
|
||||
"src/renderer/src/store/slices/ui/ui-host-workspace-statuses.test.ts": 1695,
|
||||
"src/renderer/src/store/slices/ui/ui-modal-slot-dismissal.test.ts": 662,
|
||||
"src/renderer/src/store/slices/ui/ui-slice-surface-actions.test.ts": 1760,
|
||||
"src/renderer/src/store/slices/workspace-activation-preparation.test.ts": 1932,
|
||||
"src/renderer/src/store/slices/worktrees/session/workspace-activation-preparation.test.ts": 1932,
|
||||
"src/renderer/src/store/slices/workspace-attention/workspace-unread-characterization.test.ts": 1974,
|
||||
"src/renderer/src/store/slices/workspace-attention/workspace-unread-flag-host-raises.test.ts": 1914,
|
||||
"src/renderer/src/store/slices/workspace-attention/workspace-unread-on-screen-characterization.test.ts": 1780,
|
||||
"src/renderer/src/store/slices/workspace-attention/workspace-unread-screen-moves-characterization.test.ts": 1884,
|
||||
"src/renderer/src/store/slices/workspace-chat-draft-removal.test.ts": 1896,
|
||||
"src/renderer/src/store/slices/worktrees/teardown/workspace-chat-draft-removal.test.ts": 1896,
|
||||
"src/renderer/src/store/slices/workspace-cleanup/workspace-cleanup-browse.test.ts": 69,
|
||||
"src/renderer/src/store/slices/workspace-cleanup/workspace-cleanup-cache-hydration.test.ts": 815,
|
||||
"src/renderer/src/store/slices/workspace-cleanup/workspace-cleanup-enrichment-performance.test.ts": 995,
|
||||
@@ -8256,41 +8247,40 @@
|
||||
"src/renderer/src/store/slices/workspace-cleanup/workspace-cleanup-wrong-host-removal-guard.test.ts": 1800,
|
||||
"src/renderer/src/store/slices/workspace-cleanup/workspace-cleanup-wrong-host-removal.test.ts": 1909,
|
||||
"src/renderer/src/store/slices/ui/workspace-document-title-refresh.test.ts": 1630,
|
||||
"src/renderer/src/store/slices/worktree-sleep-intent-lifecycle.test.ts": 1764,
|
||||
"src/renderer/src/store/terminals/worktree-sleep-intent-lifecycle.test.ts": 1764,
|
||||
"src/renderer/src/store/slices/settings/worktree-visibility-settings-write.test.ts": 307,
|
||||
"src/renderer/src/store/slices/worktrees-always-force-delete.test.ts": 1611,
|
||||
"src/renderer/src/store/slices/worktrees-background-removal.test.ts": 2011,
|
||||
"src/renderer/src/store/slices/worktrees-create-base-status.test.ts": 1252,
|
||||
"src/renderer/src/store/slices/worktrees-create-captured-host.test.ts": 1148,
|
||||
"src/renderer/src/store/slices/worktrees-fetch-listing-merge.test.ts": 1311,
|
||||
"src/renderer/src/store/slices/worktrees-fetch-owner-routing.test.ts": 2038,
|
||||
"src/renderer/src/store/slices/worktrees-fetch-persisted-metadata-fallback.test.ts": 1168,
|
||||
"src/renderer/src/store/slices/worktrees-fetch-refresh-coalescing.test.ts": 1226,
|
||||
"src/renderer/src/store/slices/worktrees-fetch-remote-lineage.test.ts": 1221,
|
||||
"src/renderer/src/store/slices/worktrees-fetch-removal-purge.test.ts": 1207,
|
||||
"src/renderer/src/store/slices/worktrees-fetch-stale-catalog-version.test.ts": 1337,
|
||||
"src/renderer/src/store/slices/worktrees-git-identity-branch-title.test.ts": 1181,
|
||||
"src/renderer/src/store/slices/worktrees-git-identity-review-clear-persistence.test.ts": 1678,
|
||||
"src/renderer/src/store/slices/worktrees-git-identity-twin-host.test.ts": 1342,
|
||||
"src/renderer/src/store/slices/worktrees-hydration-purge.test.ts": 1274,
|
||||
"src/renderer/src/store/slices/worktrees-identity-migration.test.ts": 1412,
|
||||
"src/renderer/src/store/slices/worktrees-lineage-state.test.ts": 1133,
|
||||
"src/renderer/src/store/slices/worktrees-linked-review-push-target.test.ts": 1186,
|
||||
"src/renderer/src/store/slices/worktrees-metadata-persistence.test.ts": 1212,
|
||||
"src/renderer/src/store/slices/worktrees-multiple-attachments.test.ts": 1132,
|
||||
"src/renderer/src/store/slices/worktrees-pending-creation-state.test.ts": 1132,
|
||||
"src/renderer/src/store/slices/worktrees-purge-terminal-state.test.ts": 1133,
|
||||
"src/renderer/src/store/slices/worktrees-remote-runtime-create.test.ts": 1244,
|
||||
"src/renderer/src/store/slices/worktrees-remote-runtime-removal.test.ts": 1227,
|
||||
"src/renderer/src/store/slices/worktrees-removal-state-cleanup.test.ts": 1229,
|
||||
"src/renderer/src/store/slices/worktrees-runtime-connection-generation-fence.test.ts": 1240,
|
||||
"src/renderer/src/store/slices/worktrees-terminal-pr-exact-observation.test.ts": 1201,
|
||||
"src/renderer/src/store/slices/worktrees-terminal-pr-url-linking.test.ts": 1786,
|
||||
"src/renderer/src/store/slices/worktrees-terminal-reference-admission.test.ts": 1863,
|
||||
"src/renderer/src/store/slices/worktrees-terminal-reference-origins.test.ts": 1218,
|
||||
"src/renderer/src/store/slices/worktrees-terminal-reference-source-race.test.ts": 1063,
|
||||
"src/renderer/src/store/slices/worktrees-unread-state.test.ts": 1704,
|
||||
"src/renderer/src/store/slices/worktrees-workspace-selection-state.test.ts": 1170,
|
||||
"src/renderer/src/store/slices/worktrees/teardown/worktrees-always-force-delete.test.ts": 1611,
|
||||
"src/renderer/src/store/slices/worktrees/teardown/worktrees-background-removal.test.ts": 2011,
|
||||
"src/renderer/src/store/slices/worktrees/create/worktrees-create-base-status.test.ts": 1252,
|
||||
"src/renderer/src/store/slices/worktrees/create/worktrees-create-captured-host.test.ts": 1148,
|
||||
"src/renderer/src/store/slices/worktrees/listing/worktrees-fetch-listing-merge.test.ts": 1311,
|
||||
"src/renderer/src/store/slices/worktrees/listing/worktrees-fetch-owner-routing.test.ts": 2038,
|
||||
"src/renderer/src/store/slices/worktrees/listing/worktrees-fetch-persisted-metadata-fallback.test.ts": 1168,
|
||||
"src/renderer/src/store/slices/worktrees/listing/worktrees-fetch-refresh-coalescing.test.ts": 1226,
|
||||
"src/renderer/src/store/slices/worktrees/metadata/worktrees-fetch-remote-lineage.test.ts": 1221,
|
||||
"src/renderer/src/store/slices/worktrees/listing/worktrees-fetch-removal-purge.test.ts": 1207,
|
||||
"src/renderer/src/store/slices/worktrees/listing/worktrees-fetch-stale-catalog-version.test.ts": 1337,
|
||||
"src/renderer/src/store/slices/worktrees/metadata/worktrees-git-identity-branch-title.test.ts": 1181,
|
||||
"src/renderer/src/store/slices/worktrees/metadata/worktrees-git-identity-review-clear-persistence.test.ts": 1678,
|
||||
"src/renderer/src/store/slices/worktrees/metadata/worktrees-git-identity-twin-host.test.ts": 1342,
|
||||
"src/renderer/src/store/slices/worktrees/listing/worktrees-hydration-purge.test.ts": 1274,
|
||||
"src/renderer/src/store/slices/worktrees/session/worktrees-identity-migration.test.ts": 1412,
|
||||
"src/renderer/src/store/slices/worktrees/metadata/worktrees-lineage-state.test.ts": 1133,
|
||||
"src/renderer/src/store/slices/worktrees/metadata/worktrees-linked-review-push-target.test.ts": 1186,
|
||||
"src/renderer/src/store/slices/worktrees/metadata/worktrees-multiple-attachments.test.ts": 1132,
|
||||
"src/renderer/src/store/slices/worktrees/create/worktrees-pending-creation-state.test.ts": 1132,
|
||||
"src/renderer/src/store/slices/worktrees/teardown/worktrees-purge-terminal-state.test.ts": 1133,
|
||||
"src/renderer/src/store/slices/worktrees/create/worktrees-remote-runtime-create.test.ts": 1244,
|
||||
"src/renderer/src/store/slices/worktrees/teardown/worktrees-remote-runtime-removal.test.ts": 1227,
|
||||
"src/renderer/src/store/slices/worktrees/teardown/worktrees-removal-state-cleanup.test.ts": 1229,
|
||||
"src/renderer/src/store/slices/worktrees/listing/worktrees-runtime-connection-generation-fence.test.ts": 1240,
|
||||
"src/renderer/src/store/slices/worktrees/session/worktrees-terminal-pr-exact-observation.test.ts": 1201,
|
||||
"src/renderer/src/store/slices/worktrees/session/worktrees-terminal-pr-url-linking.test.ts": 1786,
|
||||
"src/renderer/src/store/slices/worktrees/session/worktrees-terminal-reference-admission.test.ts": 1863,
|
||||
"src/renderer/src/store/slices/worktrees/session/worktrees-terminal-reference-origins.test.ts": 1218,
|
||||
"src/renderer/src/store/slices/worktrees/session/worktrees-terminal-reference-source-race.test.ts": 1063,
|
||||
"src/renderer/src/store/slices/workspace-attention/worktrees-unread-state.test.ts": 1704,
|
||||
"src/renderer/src/store/slices/worktrees/session/worktrees-workspace-selection-state.test.ts": 1170,
|
||||
"src/renderer/src/store/slices/worktrees/host-scoped-row-merges.test.ts": 1805,
|
||||
"src/renderer/src/store/slices/worktrees/listing/detected-worktree-meta.test.ts": 318,
|
||||
"src/renderer/src/store/slices/worktrees/listing/stale-listing-purges-created-worktree.test.ts": 1828,
|
||||
@@ -8301,7 +8291,7 @@
|
||||
"src/renderer/src/store/slices/worktrees/teardown/removed-workspace-unsaved-files.test.ts": 2481,
|
||||
"src/renderer/src/store/slices/worktrees/teardown/worktree-delete-state.test.ts": 1160,
|
||||
"src/renderer/src/store/repos/wsl-moved-project-chat-purge.test.ts": 1222,
|
||||
"src/renderer/src/store/store-identity-churn-probe.test.ts": 67,
|
||||
"src/renderer/src/store/diagnostics/store-identity-churn-probe.test.ts": 67,
|
||||
"src/renderer/src/store/terminals/legacy-relay-bridged-tab-close.test.ts": 310,
|
||||
"src/renderer/src/store/terminals/restored-relay-session-identity.test.ts": 2196,
|
||||
"src/renderer/src/store/terminals/restored-terminal-rebind-restarts.test.ts": 1886,
|
||||
@@ -8311,12 +8301,11 @@
|
||||
"src/renderer/src/store/terminals/terminal-startup-queue-restart.test.ts": 1895,
|
||||
"src/renderer/src/store/terminals/terminal-tab-close-intent.test.ts": 1945,
|
||||
"src/renderer/src/store/terminals/workspace-terminal-placeholders.test.ts": 302,
|
||||
"src/renderer/src/store/use-runtime-status-view.test.tsx": 1979,
|
||||
"src/renderer/src/store/workspace-layout-cache.test.ts": 63,
|
||||
"src/renderer/src/store/workspace-layout-frame-store-patch.test.ts": 2284,
|
||||
"src/renderer/src/store/workspace-record-selectors.test.ts": 93,
|
||||
"src/renderer/src/store/worktree-diff-comments-selector.test.ts": 346,
|
||||
"src/renderer/src/store/worktree-host-collision-index.test.ts": 1875,
|
||||
"src/renderer/src/store/slices/runtime-status/views/use-runtime-status-view.test.tsx": 1979,
|
||||
"src/renderer/src/store/workspace-layout/workspace-layout-cache.test.ts": 63,
|
||||
"src/renderer/src/store/workspace-layout/frames/workspace-layout-frame-store-patch.test.ts": 2284,
|
||||
"src/renderer/src/store/workspaces/selection/workspace-host-target.test.ts": 93,
|
||||
"src/renderer/src/store/slices/worktrees/listing/worktree-host-collision-index.test.ts": 1875,
|
||||
"src/renderer/src/web/preload-api/web-agent-session-attachment-upload.test.ts": 1588,
|
||||
"src/renderer/src/web/preload-api/web-chat-permission-normalization.test.ts": 293,
|
||||
"src/renderer/src/web/preload-api/web-filesystem-api-connection-pin.test.ts": 509,
|
||||
|
||||
@@ -9,13 +9,11 @@ import type { AppState } from '@/store/types'
|
||||
import type { AgentStatusBatchUpdate } from '@/store/slices/agent-status/agent-status-contract'
|
||||
import '@/store/slices/agent-status/agent-status'
|
||||
import { MAX_LIVE_AGENT_STATUSES } from '@/store/slices/agent-status/agent-status-capacity-eviction'
|
||||
import {
|
||||
createTestStore,
|
||||
makeTab,
|
||||
makeUnifiedTab,
|
||||
makeWorktree,
|
||||
TEST_REPO
|
||||
} from '@/store/slices/store-test-helpers'
|
||||
import { createTestStore } from '@/store/testing/app-store-test-fixture'
|
||||
import { makeTab } from '@/store/terminals/terminal-tab.test-fixture'
|
||||
import { makeUnifiedTab } from '@/store/slices/tabs/tab-group.test-fixture'
|
||||
import { makeWorktree } from '@/store/slices/worktrees/worktree.test-fixture'
|
||||
import { TEST_REPO } from '@/store/repos/repo.test-fixture'
|
||||
import { makePaneKey } from '../../../../src/shared/workspace-layout/stable-pane-id'
|
||||
import { getDefaultSettings } from '../../../../src/shared/constants'
|
||||
import {
|
||||
|
||||
@@ -7,7 +7,7 @@ import { performance } from 'node:perf_hooks'
|
||||
import { build } from 'esbuild'
|
||||
|
||||
const root = resolve(import.meta.dirname, '../../../..')
|
||||
const source = join(root, 'src/renderer/src/store/slices/tab-group-reference-repair.ts')
|
||||
const source = join(root, 'src/renderer/src/store/slices/tabs/tab-group-reference-repair.ts')
|
||||
const directory = await mkdtemp(join(tmpdir(), 'orca-tab-repair-'))
|
||||
const current = await readFile(source, 'utf8')
|
||||
const indexed = `const orderedTabIds = new Set(group.tabOrder)
|
||||
|
||||
@@ -5,32 +5,26 @@ import { performance } from 'node:perf_hooks'
|
||||
import { build } from 'esbuild'
|
||||
|
||||
// Pipe the baseline ssh-target-cleanup.ts source on stdin; no app or network is used.
|
||||
const entry = path.resolve('src/renderer/src/store/slices/ssh-target-cleanup.ts')
|
||||
const sources = [readFileSync(0, 'utf8'), readFileSync(entry, 'utf8')]
|
||||
const baselineEntry = path.resolve('src/renderer/src/store/slices/ssh-target-cleanup.ts')
|
||||
const entry = path.resolve('src/renderer/src/store/slices/ssh/ssh-target-cleanup.ts')
|
||||
const sources = [
|
||||
{ source: readFileSync(0, 'utf8'), resolveDir: path.dirname(baselineEntry) },
|
||||
{ source: readFileSync(entry, 'utf8'), resolveDir: path.dirname(entry) }
|
||||
]
|
||||
assert(
|
||||
sources.every((source) => source.includes('export function buildRemovedSshTargetCleanupPatch'))
|
||||
sources.every(({ source }) =>
|
||||
source.includes('export function buildRemovedSshTargetCleanupPatch')
|
||||
)
|
||||
)
|
||||
|
||||
async function load(source) {
|
||||
source += "\nexport { toAppSshPtyId } from '../../../../shared/ssh-pty-id';"
|
||||
async function load({ source, resolveDir }) {
|
||||
source += `\nexport { toAppSshPtyId } from ${JSON.stringify(path.resolve('src/shared/ssh-pty-id.ts'))};`
|
||||
const result = await build({
|
||||
entryPoints: [entry],
|
||||
stdin: { contents: source, loader: 'ts', resolveDir },
|
||||
bundle: true,
|
||||
platform: 'node',
|
||||
format: 'esm',
|
||||
write: false,
|
||||
plugins: [
|
||||
{
|
||||
name: 'cleanup-source',
|
||||
setup(builder) {
|
||||
builder.onLoad({ filter: /ssh-target-cleanup\.ts$/ }, () => ({
|
||||
contents: source,
|
||||
loader: 'ts',
|
||||
resolveDir: path.dirname(entry)
|
||||
}))
|
||||
}
|
||||
}
|
||||
]
|
||||
write: false
|
||||
})
|
||||
const bundled = `${result.outputFiles[0].text}\n//# sourceURL=ssh-cleanup-benchmark-bundle.js`
|
||||
return import(`data:text/javascript;base64,${Buffer.from(bundled).toString('base64')}`)
|
||||
|
||||
@@ -8,7 +8,7 @@ const { planWorktreeSortOrderUpdates } = await jiti.import(
|
||||
'../../../../src/shared/worktree/sort-order-update.ts'
|
||||
)
|
||||
const { reuseEqualCatalogRows } = await jiti.import(
|
||||
'../../../../src/renderer/src/store/catalog-row-reconciliation.ts'
|
||||
'../../../../src/renderer/src/lib/catalog-reconciliation/catalog-row-reconciliation.ts'
|
||||
)
|
||||
|
||||
const WORKTREE_COUNT = 655
|
||||
|
||||
+1
-1
@@ -138,7 +138,7 @@ export const RATCHETS = [
|
||||
// The three writers the plan allows: applyFromRuntime, the frozen mirror's store patch and
|
||||
// the frozen setters for remote-server workspaces.
|
||||
allowed: (rel) =>
|
||||
rel === 'src/renderer/src/store/workspace-layout-cache.ts' ||
|
||||
rel === 'src/renderer/src/store/workspace-layout/workspace-layout-cache.ts' ||
|
||||
rel === 'src/renderer/src/runtime/web-session-tabs-sync/store-patch.ts' ||
|
||||
rel.startsWith('src/renderer/src/runtime/remote-workspace-frozen/'),
|
||||
header: [
|
||||
|
||||
+4
-4
@@ -14,7 +14,7 @@ const RAW_READ =
|
||||
/** Files allowed to read the fields directly, with the reason. Keep each reason true. */
|
||||
export const SELECTOR_FILES = new Map([
|
||||
[
|
||||
'src/renderer/src/store/workspace-record-selectors.ts',
|
||||
'src/renderer/src/store/workspaces/catalog/workspace-record-fields.ts',
|
||||
'the selector module is the one read path by definition'
|
||||
]
|
||||
])
|
||||
@@ -77,7 +77,7 @@ export function main(root = process.cwd(), arg = undefined) {
|
||||
unit: 'direct workspace record field read(s)',
|
||||
header: [
|
||||
'# Renderer reads of `worktreesByRepo` / `folderWorkspaces` / `detectedWorktreesByRepo`',
|
||||
'# outside src/renderer/src/store/workspace-record-selectors.ts, as `<count> <file> # <why>`.',
|
||||
'# outside src/renderer/src/store/workspaces/catalog/workspace-record-fields.ts, as `<count> <file> # <why>`.',
|
||||
'# This is a RATCHET: counts may only go DOWN. Read through the selectors instead.',
|
||||
'# `P5b-2 must clear` rows read store state through a loosely typed or optional field: once the',
|
||||
'# fields leave the store they read undefined and silently fall back, so P5b-2 must move them.',
|
||||
@@ -85,8 +85,8 @@ export function main(root = process.cwd(), arg = undefined) {
|
||||
],
|
||||
collect: collectWorkspaceRecordReads,
|
||||
fix: [
|
||||
'Read workspace records through src/renderer/src/store/workspace-record-selectors.ts:',
|
||||
' selectWorkspaceByHostTarget(state, target) the owner of a HostWorktreeTarget',
|
||||
'Read workspace records through src/renderer/src/store/workspaces/catalog/workspace-record-fields.ts:',
|
||||
' selectWorkspaceByHostTarget in store/workspaces/selection/workspace-host-target.ts',
|
||||
' selectWorktreesByRepo / selectFolderWorkspaces / selectDetectedWorktreesByRepo',
|
||||
' compatibility views of the old fields'
|
||||
]
|
||||
|
||||
@@ -149,8 +149,8 @@ export const PR_FEATURE_AREA_E2E_SOURCE_ROUTES = [
|
||||
['runtime-host-status-recovery'],
|
||||
[
|
||||
'src/main/ipc/runtime-environments/runtime-environment-status-',
|
||||
'src/renderer/src/store/runtime-status-subscriptions.ts',
|
||||
'src/renderer/src/store/slices/runtime-status-',
|
||||
'src/renderer/src/store/slices/runtime-status/views/runtime-status-subscriptions.ts',
|
||||
'src/renderer/src/store/slices/runtime-status/',
|
||||
'src/shared/remote-runtime/host-store/runtime-environment-pairing-replace-guards.ts',
|
||||
'src/shared/remote-runtime/host-store/runtime-environment-store.ts',
|
||||
`${COMPONENTS}sidebar/workspace-card/identity/worktree-card-header-items.tsx`
|
||||
|
||||
@@ -21,11 +21,8 @@ const LAYOUT_ORACLE_PREFIXES = [
|
||||
'src/renderer/src/runtime/remote-workspace-frozen/',
|
||||
// Window-side layout writers the layout-holder stack replaces; widened while it is open.
|
||||
'src/renderer/src/store/slices/tabs',
|
||||
'src/renderer/src/store/slices/tab-group',
|
||||
'src/renderer/src/store/slices/terminals',
|
||||
'src/renderer/src/store/slices/terminal-',
|
||||
'src/renderer/src/store/terminals/',
|
||||
'src/renderer/src/store/workspace-layout-cache',
|
||||
'src/renderer/src/store/workspace-layout/workspace-layout-cache',
|
||||
'src/renderer/src/components/terminal-pane/',
|
||||
'src/renderer/src/components/agent-session-continuation/AgentSessionContinuationMenuItem.tsx',
|
||||
'src/renderer/src/components/orchestration-crew/WorkerAutoCloseBanner.tsx',
|
||||
@@ -53,7 +50,7 @@ const LAYOUT_ORACLE_PREFIXES = [
|
||||
'src/renderer/src/components/terminal/terminal-tab-actions.ts',
|
||||
'src/renderer/src/components/tab-bar/web-runtime-tab-move-mirror.ts',
|
||||
'src/shared/rpc-contract/workspace-layout-params.ts',
|
||||
'src/renderer/src/store/slices/recently-closed-tabs.ts',
|
||||
'src/renderer/src/store/slices/tabs/recently-closed-tabs.ts',
|
||||
// The client the oracle reads every view through.
|
||||
'src/cli/runtime/client.ts',
|
||||
'src/shared/remote-runtime/remote-runtime-client.ts',
|
||||
|
||||
@@ -22,7 +22,7 @@ const contracts = [
|
||||
'src/main/usage/jsonl-file-snapshot.test.ts',
|
||||
'src/renderer/src/components/terminal-pane/agent-completion/agent-completion-coordinator-queued-inspection-disposal.test.ts',
|
||||
'src/renderer/src/lib/pane-manager/pane-terminal-output-scheduler-queue-retention.test.ts',
|
||||
'src/renderer/src/store/store-identity-churn-probe.test.ts',
|
||||
'src/renderer/src/store/diagnostics/store-identity-churn-probe.test.ts',
|
||||
'config/scripts/static-analysis/oxlint-contracts/app-store-performance-plugin.test.mjs',
|
||||
'config/scripts/static-analysis/oxlint-contracts/quadratic-buffer-concat-plugin.test.mjs',
|
||||
'src/main/claude-usage/scanner-incremental-append.test.ts',
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Renderer reads of `worktreesByRepo` / `folderWorkspaces` / `detectedWorktreesByRepo`
|
||||
# outside src/renderer/src/store/workspace-record-selectors.ts, as `<count> <file> # <why>`.
|
||||
# outside src/renderer/src/store/workspaces/catalog/workspace-record-fields.ts, as `<count> <file> # <why>`.
|
||||
# This is a RATCHET: counts may only go DOWN. Read through the selectors instead.
|
||||
# `P5b-2 must clear` rows read store state through a loosely typed or optional field: once the
|
||||
# fields leave the store they read undefined and silently fall back, so P5b-2 must move them.
|
||||
|
||||
@@ -2,7 +2,7 @@ import { memo, Suspense, useCallback, useRef } from 'react'
|
||||
import { lazyWithRetry as lazy } from '@/lib/lazy-with-retry'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { useAppStore } from '@/store'
|
||||
import { usePluginViewCaptureStore } from '@/store/plugin-view-capture'
|
||||
import { usePluginViewCaptureStore } from '@/store/plugins/capture/plugin-view-capture'
|
||||
import { pendingCreationOpensNativeChat } from '@/lib/workspace/creation/pending-worktree-creation'
|
||||
import Sidebar from '../components/Sidebar'
|
||||
import RightSidebar from '../components/right-sidebar'
|
||||
|
||||
@@ -12,7 +12,7 @@ import { shouldShowWorktreeHistoryControls } from '../lib/titlebar-worktree-hist
|
||||
import {
|
||||
canGoBackWorktreeHistory,
|
||||
canGoForwardWorktreeHistory
|
||||
} from '@/store/slices/worktree-nav-history'
|
||||
} from '@/store/slices/ui/workspace-navigation-history'
|
||||
import { useShortcutLabel } from '../hooks/useShortcutLabel'
|
||||
import { useAppStore } from '../store'
|
||||
import { hasCustomTitleBar, hasMacTrafficLights } from './app-window-chrome'
|
||||
|
||||
@@ -5,7 +5,7 @@ import { TOGGLE_TERMINAL_PANE_EXPAND_EVENT } from '@/constants/terminal'
|
||||
import { ActivityTitlebarControls } from '../components/activity/ActivityTitlebarControls'
|
||||
import { useShortcutLabel } from '../hooks/useShortcutLabel'
|
||||
import { useAppStore } from '../store'
|
||||
import { selectActiveTerminalChromeState } from '../store/active-terminal-chrome-selector'
|
||||
import { selectActiveTerminalChromeState } from './active-terminal-chrome-selector'
|
||||
import { hasCustomTitleBar } from './app-window-chrome'
|
||||
import type { AppChromeLayout } from './use-app-chrome-layout'
|
||||
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
import type { AppState } from './types'
|
||||
import type { AppState } from '../store/types'
|
||||
|
||||
type ActiveTerminalChromeSelectorState = Pick<
|
||||
AppState,
|
||||
@@ -17,7 +17,7 @@ import {
|
||||
resolveHoveredWorkspaceDeleteTarget
|
||||
} from '../components/sidebar/workspace-actions/deletion/hovered-workspace-delete'
|
||||
import { useAppStore } from '../store'
|
||||
import type { usePluginCommands } from '@/store/plugin-panels'
|
||||
import type { usePluginCommands } from '@/store/plugins/catalog/plugin-contribution-catalog'
|
||||
import { isGitRepoKind } from '../../../shared/repo-kind'
|
||||
import { openPluginsSettings } from '@/lib/open-plugins-settings'
|
||||
import { resolveActiveTabRenameTarget } from './active-tab-rename-target'
|
||||
|
||||
@@ -8,8 +8,8 @@ import { LEGACY_WORKSPACE_LAYOUT_PROFILES } from '../../../shared/workspace-layo
|
||||
import { loadWorkspaceLayout } from '../../../shared/workspace-layout/workspace-layout-load'
|
||||
import { WORKSPACE_LAYOUT_PROFILES } from '../../../shared/workspace-layout/workspace-layout-profile.test-fixture'
|
||||
import { saveWorkspaceLayout } from '../../../shared/workspace-layout/workspace-layout-save'
|
||||
import { createStoreSessionMockApi } from '../store/slices/store-session-test-harness'
|
||||
import { createTestStore } from '../store/slices/store-test-helpers'
|
||||
import { createStoreSessionMockApi } from '../store/testing/app-store-session-api.test-fixture'
|
||||
import { createTestStore } from '../store/testing/app-store-test-fixture'
|
||||
import { GIT, sweptAtStartup } from './startup-window-parity-differences.test-fixture'
|
||||
import {
|
||||
bootWindowFromPartitions,
|
||||
|
||||
@@ -17,7 +17,7 @@ import { getRepoIdFromWorktreeId } from '../../../shared/worktree/id'
|
||||
import { fetchWorkspaceSessionWithRuntimeHostOwners } from '@/lib/workspace/persistence/workspace-session-host-hydration'
|
||||
import { collectFolderWorkspaceKeysFromSession } from '@/lib/workspace/persistence/workspace-session-hydration-keys'
|
||||
import type { AppState } from '../store/types'
|
||||
import type { createTestStore } from '../store/slices/store-test-helpers'
|
||||
import type { createTestStore } from '../store/testing/app-store-test-fixture'
|
||||
import { reconcileHydratedWorkspaceTabModels } from './reconcile-hydrated-workspace-tab-models'
|
||||
|
||||
/** One stored session partition and the host it is stored under. */
|
||||
|
||||
@@ -7,7 +7,7 @@ import { resolveLeftTitlebarChromeLayout } from '@/lib/titlebar-left-chrome'
|
||||
import { selectWorktreeCreationSurfaceShown } from '@/lib/workspace/creation/worktree-creation-surface'
|
||||
import { useAppStore } from '../store'
|
||||
import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../shared/constants'
|
||||
import { selectActiveTerminalChromeState } from '../store/active-terminal-chrome-selector'
|
||||
import { selectActiveTerminalChromeState } from './active-terminal-chrome-selector'
|
||||
import {
|
||||
hasRequestedBackgroundTerminalWorktreeMount,
|
||||
subscribeBackgroundTerminalWorktreeMountRequests
|
||||
|
||||
@@ -7,7 +7,7 @@ import { useAppStore } from '../store'
|
||||
import { reconcileHydratedWorkspaceTabModels } from './reconcile-hydrated-workspace-tab-models'
|
||||
import { useStartupActions } from './use-app-startup-actions'
|
||||
import { waitForNativeChatDraftsAtStartup } from './native-chat-draft-startup'
|
||||
import { WORKTREE_REFRESH_CONCURRENCY } from '../store/slices/worktrees'
|
||||
import { WORKTREE_REFRESH_CONCURRENCY } from '../store/slices/worktrees/listing/worktree-slice-constants'
|
||||
import { sweepRestoredCodexPanesForStaleAccounts } from '../lib/agent-session/accounts/codex/codex-stale-pane-sweep'
|
||||
import { fetchWorkspaceSessionWithRuntimeHostOwners } from '../lib/workspace/persistence/workspace-session-host-hydration'
|
||||
import {
|
||||
|
||||
@@ -21,7 +21,7 @@ import {
|
||||
TINTED_HOST_PILL_OUTLINE_MIX_TOKEN,
|
||||
tintedSidebarHostPillOutlineMix
|
||||
} from '../lib/left-sidebar-appearance'
|
||||
import { useCodeEditorThemeStore } from '../store/code-editor-theme'
|
||||
import { useCodeEditorThemeStore } from '../store/appearance/code-editor-theme'
|
||||
import { synthesizeTerminalAppTheme, type TerminalAppTheme } from '../lib/terminal-app-theme'
|
||||
import { MATCH_TERMINAL_APP_THEME } from '../../../shared/plugin-theme-settings'
|
||||
import {
|
||||
@@ -29,9 +29,9 @@ import {
|
||||
usePluginTerminalPaletteRefresh,
|
||||
usePluginThemeStore,
|
||||
usePluginThemes
|
||||
} from '../store/plugin-themes'
|
||||
import { usePluginIconThemeActivation } from '../store/plugin-icon-themes'
|
||||
import { usePluginFontRegistration } from '../store/plugin-fonts'
|
||||
} from '../store/plugins/appearance/plugin-themes'
|
||||
import { usePluginIconThemeActivation } from '../store/plugins/appearance/plugin-icon-themes'
|
||||
import { usePluginFontRegistration } from '../store/plugins/appearance/plugin-fonts'
|
||||
import { scheduleRuntimeGraphSync } from '../runtime/sync-runtime-graph'
|
||||
import { useAppStore } from '../store'
|
||||
import { useDocumentDarkTheme, useSettingsDarkTheme } from '@/hooks/use-document-dark-theme'
|
||||
|
||||
@@ -13,7 +13,7 @@ import {
|
||||
import { createFloatingWorkspaceTourInteractionSnapshot } from '@/lib/floating-workspace-tour-interaction-snapshot'
|
||||
import { persistFloatingTerminalPanelOpen } from '../components/floating-terminal/floating-terminal-panel-view-state'
|
||||
import { useAppStore } from '../store'
|
||||
import { selectFloatingVisibleTabCount } from '../store/selectors'
|
||||
import { selectFloatingVisibleTabCount } from '../store/workspaces/floating/floating-workspace-panel-selector'
|
||||
|
||||
export type FloatingWorkspacePanelState = ReturnType<typeof useFloatingWorkspacePanel>
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ import {
|
||||
folderRelativePathToIncludeGlob,
|
||||
selectedExplorerFolderRelativePath
|
||||
} from '../components/right-sidebar/file-explorer/content-search/file-search-include-pattern'
|
||||
import { usePluginCommands } from '@/store/plugin-panels'
|
||||
import { usePluginCommands } from '@/store/plugins/catalog/plugin-contribution-catalog'
|
||||
import { useAppStore } from '../store'
|
||||
import { keybindingMatchesAction, type KeybindingActionId } from '../../../shared/keybindings'
|
||||
import { PLUGIN_COMMAND_ALIAS_ACTION_IDS } from '../../../shared/plugins/contributions/plugin-command-actions'
|
||||
|
||||
@@ -14,7 +14,7 @@ import {
|
||||
import {
|
||||
selectDetectedWorktreesByRepo,
|
||||
selectWorktreesByRepo
|
||||
} from '@/store/workspace-record-selectors'
|
||||
} from '@/store/workspaces/catalog/workspace-record-fields'
|
||||
|
||||
function visibleReviewWorkspacesForState(state: AppState) {
|
||||
const ids = new Set(state.visibleReviewCardWorktreeIds ?? [])
|
||||
|
||||
@@ -8,7 +8,7 @@ import { useAppStore } from '@/store'
|
||||
import {
|
||||
drawTabsFromMain,
|
||||
type TabsDrawnFromMain
|
||||
} from '@/store/slices/tabs-drawn-from-main.test-fixture'
|
||||
} from '@/store/slices/tabs/tabs-drawn-from-main.test-fixture'
|
||||
|
||||
import { runBackgroundWorktreeCreation } from '@/lib/workspace/creation/worktree-creation-flow'
|
||||
|
||||
|
||||
@@ -6,8 +6,10 @@ import { getDefaultNotificationSettings } from '../../../shared/notification-set
|
||||
import { resolveAgentAttention } from '@/attention/agent-attention-policy'
|
||||
import { createTerminalAttentionSurface } from '@/components/terminal-pane/notifications/terminal-attention-surface'
|
||||
import { createStructuredAttentionSurface } from '@/components/native-chat/structured-attention-surface'
|
||||
import { createTabsSliceMockApi } from '../store/slices/tabs-slice-test-harness'
|
||||
import { createTestStore, makeWorktree, TEST_REPO } from '../store/slices/store-test-helpers'
|
||||
import { createTabsSliceMockApi } from '../store/slices/tabs/tabs-slice-test-harness'
|
||||
import { createTestStore } from '../store/testing/app-store-test-fixture'
|
||||
import { makeWorktree } from '../store/slices/worktrees/worktree.test-fixture'
|
||||
import { TEST_REPO } from '../store/repos/repo.test-fixture'
|
||||
import { isWorkspaceNotificationMutedBySidebarFilters } from './hidden-workspace-notification-mute'
|
||||
|
||||
vi.mock('sonner', () => ({ toast: { info: vi.fn(), success: vi.fn(), error: vi.fn() } }))
|
||||
|
||||
@@ -1,12 +1,16 @@
|
||||
import type { AppState } from '@/store/types'
|
||||
import { getIndexedAllWorktrees, getIndexedRepoMap } from '@/store/worktree-repo-index'
|
||||
import { getIndexedAllWorktrees } from '@/store/slices/worktrees/listing/worktree-catalog-index'
|
||||
import { getIndexedRepoMap } from '@/store/repos/repository-catalog-index'
|
||||
import { ALL_EXECUTION_HOSTS_SCOPE } from '../../../shared/execution-host'
|
||||
import { parseWorkspaceKey } from '../../../shared/workspace-scope'
|
||||
import { sidebarHasActiveFilters } from '@/components/sidebar/worktree-list/controls/sidebar-filter-actions'
|
||||
import { computeVisibleWorktreeIds } from '@/components/sidebar/worktree-list/listing/compute-visible-worktrees'
|
||||
import { buildVisibleWorktreeOptionsFromState } from '@/components/sidebar/worktree-list/listing/visible-worktree-options-from-state'
|
||||
import { isFolderWorkspaceFromOtherDevice } from '../../../shared/workspace-creator-visibility'
|
||||
import { selectFolderWorkspaces, selectWorktreesByRepo } from '@/store/workspace-record-selectors'
|
||||
import {
|
||||
selectFolderWorkspaces,
|
||||
selectWorktreesByRepo
|
||||
} from '@/store/workspaces/catalog/workspace-record-fields'
|
||||
|
||||
/** Apply sidebar kind filters with project/host filters lifted so lineage and host twins follow sidebar visibility. Muting suppresses unread/banner/sound/push.
|
||||
* Fail open until settings/UI and terminal reconnect hydrate, or when the workspace is unknown; restored rows otherwise look asleep. */
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import type { useAppStore } from '../store/index'
|
||||
import { getRepoMapFromState } from '../store/selectors'
|
||||
import { getIndexedWorktreesById } from '../store/worktree-repo-index'
|
||||
import { getIndexedRepoMap } from '../store/repos/repository-catalog-index'
|
||||
import { getIndexedWorktreesById } from '../store/slices/worktrees/listing/worktree-catalog-index'
|
||||
import {
|
||||
worktreeHostMatchOptions,
|
||||
worktreeMatchesHost
|
||||
@@ -20,7 +20,10 @@ 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 { selectFolderWorkspaces, selectWorktreesByRepo } from '../store/workspace-record-selectors'
|
||||
import {
|
||||
selectFolderWorkspaces,
|
||||
selectWorktreesByRepo
|
||||
} from '../store/workspaces/catalog/workspace-record-fields'
|
||||
|
||||
type StoreSnapshot = ReturnType<typeof useAppStore.getState>
|
||||
|
||||
@@ -53,7 +56,7 @@ function findNotificationRepo(
|
||||
): Repo | undefined {
|
||||
// One owner for the id means the id-keyed map already names it, at no extra cost.
|
||||
if (resolveIndexedRepoOwner(state.repos, repoId).kind !== 'ambiguous') {
|
||||
return getRepoMapFromState(state).get(repoId)
|
||||
return getIndexedRepoMap(state.repos).get(repoId)
|
||||
}
|
||||
const owningHost = hostId ?? getResolvedExecutionHostIdForWorktree(state, worktreeId)
|
||||
if (!owningHost) {
|
||||
|
||||
@@ -5,7 +5,10 @@ import {
|
||||
getPluginFileTypeIconIndex,
|
||||
getPluginFolderIconIndex
|
||||
} from '@/lib/file-type-icons'
|
||||
import { PLUGIN_ICON_ATTRIBUTE, useActivePluginIconTheme } from '@/store/plugin-icon-themes'
|
||||
import {
|
||||
PLUGIN_ICON_ATTRIBUTE,
|
||||
useActivePluginIconTheme
|
||||
} from '@/store/plugins/appearance/plugin-icon-themes'
|
||||
|
||||
type IconProps = { className?: string; style?: CSSProperties }
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ import { openLinearIssueWorkspaceOrStart } from '@/lib/work-items/linear/linear-
|
||||
import { getWorktreeAttachmentLabel } from '@/lib/worktree-attachment-label'
|
||||
import { folderWorkspaceToWorktree } from '../../../shared/folder-workspaces/folder-workspace-worktree'
|
||||
import { useAppStore } from '@/store'
|
||||
import { useAllWorktrees } from '@/store/selectors'
|
||||
import { useAllWorktrees } from '@/store/slices/worktrees/listing/use-worktree-catalog'
|
||||
import type { LinearIssue } from '../../../shared/linear/issue-types'
|
||||
import type { TaskSourceContext } from '../../../shared/task-source-context'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
@@ -18,7 +18,7 @@ import { useLinearIssueWorkspaceDetail } from './linear-issue-workspace-detail-s
|
||||
import { LinearIssueWorkspaceHeader } from './linear-issue-workspace-header'
|
||||
import { LinearIssueWorkspaceSidebar } from './linear-issue-workspace-sidebar'
|
||||
import { defaultScopeSource } from '@/lib/default-creation-host'
|
||||
import { selectFolderWorkspaces } from '@/store/workspace-record-selectors'
|
||||
import { selectFolderWorkspaces } from '@/store/workspaces/catalog/workspace-record-fields'
|
||||
|
||||
type LinearIssueWorkspaceProps = {
|
||||
issue: LinearIssue | null
|
||||
|
||||
@@ -9,7 +9,7 @@ import { getWorktreeAttachmentLabel } from '@/lib/worktree-attachment-label'
|
||||
import { folderWorkspaceToWorktree } from '../../../shared/folder-workspaces/folder-workspace-worktree'
|
||||
import { useAppStore } from '@/store'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { useAllWorktrees } from '@/store/selectors'
|
||||
import { useAllWorktrees } from '@/store/slices/worktrees/listing/use-worktree-catalog'
|
||||
import type { LinearComment } from '../../../shared/linear/issue-types'
|
||||
import { linearIssueComments } from '@/runtime/linear/runtime-linear-issue-client'
|
||||
import {
|
||||
@@ -18,7 +18,7 @@ import {
|
||||
type LinearLocalComment
|
||||
} from '@/components/linear-item-drawer-types'
|
||||
import { renderLinearItemDrawerSheet } from '@/components/linear-item-drawer-sheet'
|
||||
import { selectFolderWorkspaces } from '@/store/workspace-record-selectors'
|
||||
import { selectFolderWorkspaces } from '@/store/workspaces/catalog/workspace-record-fields'
|
||||
import { defaultScopeSource } from '@/lib/default-creation-host'
|
||||
|
||||
export { LinearIssueEditSection } from '@/components/linear-item-drawer-edit-section'
|
||||
|
||||
@@ -13,7 +13,7 @@ import type { NewWorkspaceComposerCardProps } from './new-workspace/new-workspac
|
||||
import type * as SetupButtonModule from './agent/AgentLaunchSetupButton'
|
||||
import type { TuiAgent } from '../../../shared/agent-launch/catalog/tui-agent'
|
||||
import type { AgentPickerDraft } from '../../../shared/agent-launch/picker/agent-launch-picker'
|
||||
import { TEST_REPO } from '@/store/slices/worktrees-slice-test-fixtures'
|
||||
import { TEST_REPO } from '@/store/repos/repo.test-fixture'
|
||||
|
||||
const evidence = vi.hoisted(() => {
|
||||
const trace: {
|
||||
|
||||
@@ -24,8 +24,10 @@ vi.mock('@/store', () => ({
|
||||
subscribe: () => () => {}
|
||||
})
|
||||
}))
|
||||
vi.mock('@/store/selectors', () => ({
|
||||
useActiveWorktree: () => ({ path: '/workspace' }),
|
||||
vi.mock('@/store/workspaces/selection/use-selected-worktree', () => ({
|
||||
useActiveWorktree: () => ({ path: '/workspace' })
|
||||
}))
|
||||
vi.mock('@/store/workspaces/selection/known-worktree-selection', () => ({
|
||||
selectFileListWorktree: () => ({ path: '/workspace' })
|
||||
}))
|
||||
vi.mock('./quick-open-file-list', () => ({
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { useQuickOpenInteraction } from './use-quick-open-interaction'
|
||||
import React, { useCallback, useDeferredValue, useEffect, useMemo, useState } from 'react'
|
||||
import { useAppStore } from '@/store'
|
||||
import { useActiveWorktree } from '@/store/selectors'
|
||||
import { useActiveWorktree } from '@/store/workspaces/selection/use-selected-worktree'
|
||||
import { FileTypeIcon } from '@/components/FileTypeIcon'
|
||||
import {
|
||||
CommandDialog,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { createPortal } from 'react-dom'
|
||||
import type { TerminalTab } from '../../../shared/workspace-layout/terminal-tab-types'
|
||||
import { useAppStore } from '../store'
|
||||
import { selectActiveTabForWorktree } from '../store/slices/tab-group-state'
|
||||
import { selectActiveTabForWorktree } from '../store/slices/tabs/active-tab-selection'
|
||||
import TabBar from './tab-bar/TabBar'
|
||||
import type { TerminalController } from './use-terminal-controller'
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ import {
|
||||
selectDetectedWorktreesByRepo,
|
||||
selectFolderWorkspaces,
|
||||
selectWorktreesByRepo
|
||||
} from '@/store/workspace-record-selectors'
|
||||
} from '@/store/workspaces/catalog/workspace-record-fields'
|
||||
|
||||
export * from './activity-prototype-page-exports'
|
||||
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
||||
import { useAppStore } from '@/store'
|
||||
import { makeOpenFile } from '../../store/slices/store-session-test-harness'
|
||||
import { makeOpenFile } from '../../store/slices/editor/types/open-file.test-fixture'
|
||||
import { makeRetainedDoneEntry, makeTab, makeWorktree } from './ActivityPrototypePage-test-fixtures'
|
||||
import type { AgentPaneThread } from './activity-thread-types'
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ import {
|
||||
import { useAgentPaneThreads } from './use-agent-pane-threads'
|
||||
|
||||
vi.mock('@/store', async () => {
|
||||
const { createTestStore } = await import('@/store/slices/store-test-helpers')
|
||||
const { createTestStore } = await import('@/store/testing/app-store-test-fixture')
|
||||
return { useAppStore: createTestStore() }
|
||||
})
|
||||
|
||||
|
||||
@@ -3,7 +3,8 @@ import { useDeferredValue, useMemo, useRef } from 'react'
|
||||
import { useShallow } from 'zustand/react/shallow'
|
||||
import { useAppStore } from '@/store'
|
||||
import { useStructuredChatTabNames } from '@/runtime/structured-chat-name-observation'
|
||||
import { getRepoMapFromState, getWorktreeMapFromState } from '@/store/selectors'
|
||||
import { getIndexedRepoMap } from '@/store/repos/repository-catalog-index'
|
||||
import { getIndexedWorktreeMap } from '@/store/slices/worktrees/listing/worktree-catalog-index'
|
||||
import type { AppState } from '@/store/types'
|
||||
import {
|
||||
getSettingsFocusedExecutionHostId,
|
||||
@@ -29,7 +30,7 @@ import {
|
||||
selectDetectedWorktreesByRepo,
|
||||
selectFolderWorkspaces,
|
||||
selectWorktreesByRepo
|
||||
} from '@/store/workspace-record-selectors'
|
||||
} from '@/store/workspaces/catalog/workspace-record-fields'
|
||||
import type {
|
||||
ActivityGroupBy,
|
||||
ThreadReadFilter
|
||||
@@ -56,8 +57,8 @@ export type AgentPaneThreadsStoreData = Pick<
|
||||
> & {
|
||||
/** Current native-chat originals and terminal tabs with semantic identity reuse. */
|
||||
activityTabs: ActivityTabProjection
|
||||
worktreeMap: ReturnType<typeof getWorktreeMapFromState>
|
||||
repoMap: ReturnType<typeof getRepoMapFromState>
|
||||
worktreeMap: ReturnType<typeof getIndexedWorktreeMap>
|
||||
repoMap: ReturnType<typeof getIndexedRepoMap>
|
||||
generatedTitlesEnabled: boolean
|
||||
/** Focused-host fallback for hostless worktrees, shared by the scope filter and the row actions. */
|
||||
defaultHostId: ExecutionHostId
|
||||
@@ -130,8 +131,8 @@ export function useAgentPaneThreads(args: {
|
||||
floatingWorkspacePath: s.floatingWorkspacePath,
|
||||
detectedWorktreesByRepo: selectDetectedWorktreesByRepo(s),
|
||||
getKnownWorktreeById: s.getKnownWorktreeById,
|
||||
worktreeMap: getWorktreeMapFromState(s),
|
||||
repoMap: getRepoMapFromState(s),
|
||||
worktreeMap: getIndexedWorktreeMap(selectWorktreesByRepo(s)),
|
||||
repoMap: getIndexedRepoMap(s.repos),
|
||||
acknowledgedAgentsByPaneKey: s.acknowledgedAgentsByPaneKey,
|
||||
activityClearedAtByPaneKey: s.activityClearedAtByPaneKey,
|
||||
acknowledgeAgents: s.acknowledgeAgents,
|
||||
|
||||
@@ -5,7 +5,7 @@ import { AGENT_STATUS_STALE_AFTER_MS } from '../../../../shared/agent-status/con
|
||||
|
||||
// Use the real reducer to prove every count-relevant transition bumps the hook’s sole status subscription, agentStatusEpoch.
|
||||
vi.mock('@/store', async () => {
|
||||
const { createTestStore } = await import('@/store/slices/store-test-helpers')
|
||||
const { createTestStore } = await import('@/store/testing/app-store-test-fixture')
|
||||
return { useAppStore: createTestStore() }
|
||||
})
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ import { toast } from 'sonner'
|
||||
import { launchAgentInNewTab } from '@/lib/agent-session/launch/new-tab/launch-agent-in-new-tab'
|
||||
import { newAgentLaunchRequestId } from '@/lib/agent-session/launch/routing/agent-launch-request-id'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { selectFloatingWorkspacePanelVisible } from '@/store/floating-workspace-panel-selector'
|
||||
import { selectFloatingWorkspacePanelVisible } from '@/store/workspaces/floating/floating-workspace-panel-selector'
|
||||
import { useAppStore } from '../store'
|
||||
import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../shared/constants'
|
||||
import type { TuiAgent } from '../../../shared/agent-launch/catalog/tui-agent'
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
import { selectWorktreesByRepo, selectFolderWorkspaces } from '@/store/workspace-record-selectors'
|
||||
import {
|
||||
selectWorktreesByRepo,
|
||||
selectFolderWorkspaces
|
||||
} from '@/store/workspaces/catalog/workspace-record-fields'
|
||||
import { useEffect, useRef, useState, type ComponentProps, type Ref } from 'react'
|
||||
import { useAppStore } from '@/store/index'
|
||||
import { parseExecutionHostId } from '../../../../shared/execution-host'
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { useAppStateValue, useAppStateViewActive } from '@/store/app-state-view'
|
||||
import { useAppStateValue, useAppStateViewActive } from '@/store/retained-views/app-state-view'
|
||||
import React, { useCallback } from 'react'
|
||||
import { useAppStore } from '@/store'
|
||||
import { getOverlayFocusOwners, overlayFocusContains } from '@/lib/overlay-focus-ownership'
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { useAppViewExternalStore } from '@/store/app-state-view'
|
||||
import { useAppViewExternalStore } from '@/store/retained-views/app-state-view'
|
||||
import { shallow } from 'zustand/shallow'
|
||||
import type { AgentPickerEntry } from '../../../../shared/agent-launch/picker/agent-launch-picker'
|
||||
import type { TuiAgent } from '../../../../shared/agent-launch/catalog/tui-agent'
|
||||
|
||||
@@ -3,7 +3,8 @@ import { expect } from 'vitest'
|
||||
import type { Root } from 'react-dom/client'
|
||||
import { useAppStore } from '@/store'
|
||||
import { getDefaultSettings } from '../../../../shared/constants'
|
||||
import { makeWorktree, TEST_REPO } from '@/store/slices/worktrees-slice-test-fixtures'
|
||||
import { makeWorktree } from '@/store/slices/worktrees/worktree.test-fixture'
|
||||
import { TEST_REPO } from '@/store/repos/repo.test-fixture'
|
||||
import { useNewTabAgentMenuRows } from '../tab-bar/use-new-tab-agent-menu-rows'
|
||||
import { useAgentLaunchPickerInventory } from './use-agent-launch-picker-inventory'
|
||||
import TabBarCreateEntry from '../tab-bar/TabBarCreateEntry'
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import { useAppStateView, useAppStateViewActive } from '@/store/app-state-view'
|
||||
import { useAppStateView, useAppStateViewActive } from '@/store/retained-views/app-state-view'
|
||||
import { hostWorktreeTarget } from '../../../../shared/worktree/host-qualified-identity'
|
||||
import { parseExecutionHostId } from '../../../../shared/execution-host'
|
||||
import { selectWorkspaceByHostTarget } from '@/store/workspaces/selection/workspace-host-target'
|
||||
import {
|
||||
selectWorkspaceByHostTarget,
|
||||
selectWorktreesByRepo,
|
||||
selectFolderWorkspaces
|
||||
} from '@/store/workspace-record-selectors'
|
||||
} from '@/store/workspaces/catalog/workspace-record-fields'
|
||||
import { useEffect, useLayoutEffect, useMemo, useRef } from 'react'
|
||||
import { readHostAgentLaunchDefaults } from '../../runtime/agent-launch-settings/agent-launch-settings-transport'
|
||||
import type { NewTabAgentMenuModel } from '../tab-bar/use-new-tab-agent-menu-rows'
|
||||
|
||||
@@ -3,7 +3,7 @@ import {
|
||||
type AutomationCapturedOwner,
|
||||
type AutomationRowAction
|
||||
} from './automation-captured-owner'
|
||||
import type { RuntimeEnvironmentSshBucket } from '../../store/slices/runtime-environment-ssh'
|
||||
import type { RuntimeEnvironmentSshBucket } from '../../store/slices/ssh/runtime-environment-ssh'
|
||||
import React from 'react'
|
||||
import { MoreHorizontal, Pause, Pencil, Play, ShieldCheck, Trash2 } from 'lucide-react'
|
||||
import { ContextMenu, ContextMenuContent, ContextMenuTrigger } from '@/components/ui/context-menu'
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type { SetupTrustMismatch } from '../../../../shared/worktree/create-types'
|
||||
import type { RuntimeEnvironmentSshBucket } from '../../store/slices/runtime-environment-ssh'
|
||||
import type { RuntimeEnvironmentSshBucket } from '../../store/slices/ssh/runtime-environment-ssh'
|
||||
import React, { useRef } from 'react'
|
||||
import { cn } from '@/lib/utils'
|
||||
import type {
|
||||
|
||||
@@ -25,7 +25,7 @@ import type { FolderWorkspace } from '../../../../shared/folder-workspaces/folde
|
||||
import type { Repo } from '../../../../shared/repo-types'
|
||||
import type { Worktree } from '../../../../shared/worktree/types'
|
||||
import { parseWorkspaceKey } from '../../../../shared/workspace-scope'
|
||||
import '../../store/workspace-record-selectors'
|
||||
|
||||
import { getFolderWorkspaceWorktree } from '../../../../shared/folder-workspaces/folder-workspace-worktree'
|
||||
|
||||
export type AutomationListRow = {
|
||||
|
||||
@@ -18,7 +18,10 @@ import {
|
||||
} from '../../../../shared/execution-host'
|
||||
import type { AutomationAuthorityRef } from '../../../../shared/automation-owner-ref'
|
||||
import type { AppState } from '@/store/types'
|
||||
import { selectFolderWorkspaces, selectWorktreesByRepo } from '@/store/workspace-record-selectors'
|
||||
import {
|
||||
selectFolderWorkspaces,
|
||||
selectWorktreesByRepo
|
||||
} from '@/store/workspaces/catalog/workspace-record-fields'
|
||||
import { getFolderWorkspaceWorktree } from '../../../../shared/folder-workspaces/folder-workspace-worktree'
|
||||
import { resolveExactWorktreeRoute } from '@/lib/worktree-owner-route'
|
||||
import { parseWorkspaceKey } from '../../../../shared/workspace-scope'
|
||||
|
||||
@@ -21,7 +21,7 @@ import type { ProjectHostSetup } from '../../../../shared/project-types'
|
||||
import type { Repo } from '../../../../shared/repo-types'
|
||||
import type { RuntimeEnvironmentStatus } from '../../../../shared/remote-runtime/host-status/runtime-host-status'
|
||||
import type { Worktree } from '../../../../shared/worktree/types'
|
||||
import type { RuntimeEnvironmentSshBucket } from '../../store/slices/runtime-environment-ssh'
|
||||
import type { RuntimeEnvironmentSshBucket } from '../../store/slices/ssh/runtime-environment-ssh'
|
||||
|
||||
import type { AutomationTargetAvailability } from './automation-target-availability-types'
|
||||
export type { AutomationTargetAvailability } from './automation-target-availability-types'
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
import type { AutomationAuthorityRef } from '../../../../shared/automation-owner-ref'
|
||||
import type { Automation } from '../../../../shared/automations-types'
|
||||
import type { Worktree } from '../../../../shared/worktree/types'
|
||||
import type { AutomationHostCatalogView } from './use-automation-host-catalog'
|
||||
import type { AutomationCreateDestinationControl } from './use-automation-create-destination'
|
||||
import type { ExternalAutomationListEntry } from './external-automation-list-entries'
|
||||
import type { AutomationListRow } from './automation-list-row-identity'
|
||||
import type { AutomationListViewItem } from './automation-list-view'
|
||||
import type { AutomationTemplate } from './automation-templates'
|
||||
|
||||
export type ListPanelProps = {
|
||||
sortedListItems: readonly AutomationListViewItem[]
|
||||
selectedExternal: ExternalAutomationListEntry | null
|
||||
externalActionKey: string | null
|
||||
requestExternalAction: (
|
||||
manager: ExternalAutomationListEntry['manager'],
|
||||
job: ExternalAutomationListEntry['job'],
|
||||
action: 'run' | 'pause' | 'resume' | 'delete',
|
||||
scope: ExternalAutomationListEntry['scope']
|
||||
) => void
|
||||
hasListItems: boolean
|
||||
hasFilteredListItems: boolean
|
||||
selectedRowKey: string | null
|
||||
selectedExternalKey: string | null
|
||||
hostCatalog: AutomationHostCatalogView
|
||||
searchCounts: { hostRowCount: number; visibleRowCount: number; searchActive: boolean }
|
||||
externalManagersUncheckedNotice: string | null
|
||||
isActionEnabled: (row: AutomationListRow, action: string) => boolean
|
||||
onSelectHost: (filter: unknown) => void
|
||||
selectAutomationRow: (rowKey: string | null) => void
|
||||
selectExternalKey: (entryKey: string | null) => void
|
||||
onOpenDetail: () => void
|
||||
onRefresh: () => void
|
||||
onOpenRuns: () => void
|
||||
runNow: (row: AutomationListRow) => void
|
||||
openEditDialog: (row: AutomationListRow) => void
|
||||
toggleAutomation: (row: AutomationListRow) => void
|
||||
requestDeleteAutomation: (row: AutomationListRow) => void
|
||||
openCreateDialog: () => void
|
||||
canCreateAutomation: boolean
|
||||
}
|
||||
|
||||
export type EditorDialogProps = {
|
||||
launchAuthority?: AutomationAuthorityRef
|
||||
open: boolean
|
||||
isEditing: boolean
|
||||
isSaving: boolean
|
||||
createDestination?: AutomationCreateDestinationControl
|
||||
editDestination?: AutomationCreateDestinationControl
|
||||
notice?: { message: string; recovery: string | null } | null
|
||||
onNoticeRecover?: (action: string) => void
|
||||
repos?: { id: string }[]
|
||||
worktrees: Worktree[]
|
||||
draft?: { projectId: string; workspaceId: string }
|
||||
canSave?: boolean
|
||||
onSave: () => void
|
||||
onProjectChange: (projectId: string) => void
|
||||
onDraftChange: (updater: (current: unknown) => unknown) => void
|
||||
onApplyTemplate: (template: AutomationTemplate) => void
|
||||
}
|
||||
|
||||
export type DeleteDialogProps = {
|
||||
deleteTarget: Automation | null
|
||||
onConfirm: () => void
|
||||
}
|
||||
@@ -1,3 +1,8 @@
|
||||
import type {
|
||||
ListPanelProps,
|
||||
EditorDialogProps,
|
||||
DeleteDialogProps
|
||||
} from './automations-page-child-props.test-fixture'
|
||||
import { resetHostStructuredAgentsForTests } from '@/runtime/host-structured-agents'
|
||||
import { setLocalRuntimeCapabilitiesForTests } from '@/runtime/hosts/capabilities/local-runtime-capabilities'
|
||||
/** Record child props to test page orchestration rather than presentation. Import this harness first so shared vi.mock registrations precede AutomationsPage loading. */
|
||||
@@ -5,85 +10,25 @@ import { setLocalRuntimeCapabilitiesForTests } from '@/runtime/hosts/capabilitie
|
||||
import { act, createElement, StrictMode, type ReactNode } from 'react'
|
||||
import { createRoot, type Root } from 'react-dom/client'
|
||||
import { afterEach, beforeEach, type Mock, vi } from 'vitest'
|
||||
import type { AutomationAuthorityRef } from '../../../../shared/automation-owner-ref'
|
||||
|
||||
import type { Automation, AutomationRun } from '../../../../shared/automations-types'
|
||||
import type { Worktree } from '../../../../shared/worktree/types'
|
||||
|
||||
import {
|
||||
AUTOMATION_LIST_HOST_SCOPE_RUNTIME_CAPABILITY as LIST_HOST_SCOPE,
|
||||
AUTOMATION_OWNER_FENCING_RUNTIME_CAPABILITY as OWNER_FENCING,
|
||||
AUTOMATION_CREATE_IDEMPOTENCY_RUNTIME_CAPABILITY as CREATE_IDEMPOTENCY
|
||||
} from '../../../../shared/protocol-version'
|
||||
import type { AppState } from '@/store'
|
||||
import type { AutomationHostCatalogView } from './use-automation-host-catalog'
|
||||
import type { AutomationCreateDestinationControl } from './use-automation-create-destination'
|
||||
import type { ExternalAutomationListEntry } from './external-automation-list-entries'
|
||||
import type { AutomationListRow } from './automation-list-row-identity'
|
||||
import type { AutomationListViewItem } from './automation-list-view'
|
||||
import type { AppState } from '@/store/types'
|
||||
|
||||
import { AutomationDestinationField } from './AutomationDestinationField'
|
||||
import { TooltipProvider } from '@/components/ui/tooltip'
|
||||
import type { AutomationTemplate } from './automation-templates'
|
||||
|
||||
import { resetAutomationCapabilityProbes } from './automation-scoped-list-client'
|
||||
import {
|
||||
addRuntimeProject as addRuntimeProjectFixture,
|
||||
selfScopedList
|
||||
} from './automations-page-runtime-fixtures'
|
||||
|
||||
export type ListPanelProps = {
|
||||
sortedListItems: readonly AutomationListViewItem[]
|
||||
selectedExternal: ExternalAutomationListEntry | null
|
||||
externalActionKey: string | null
|
||||
requestExternalAction: (
|
||||
manager: ExternalAutomationListEntry['manager'],
|
||||
job: ExternalAutomationListEntry['job'],
|
||||
action: 'run' | 'pause' | 'resume' | 'delete',
|
||||
scope: ExternalAutomationListEntry['scope']
|
||||
) => void
|
||||
hasListItems: boolean
|
||||
hasFilteredListItems: boolean
|
||||
selectedRowKey: string | null
|
||||
selectedExternalKey: string | null
|
||||
hostCatalog: AutomationHostCatalogView
|
||||
searchCounts: { hostRowCount: number; visibleRowCount: number; searchActive: boolean }
|
||||
externalManagersUncheckedNotice: string | null
|
||||
isActionEnabled: (row: AutomationListRow, action: string) => boolean
|
||||
onSelectHost: (filter: unknown) => void
|
||||
selectAutomationRow: (rowKey: string | null) => void
|
||||
selectExternalKey: (entryKey: string | null) => void
|
||||
onOpenDetail: () => void
|
||||
onRefresh: () => void
|
||||
onOpenRuns: () => void
|
||||
runNow: (row: AutomationListRow) => void
|
||||
openEditDialog: (row: AutomationListRow) => void
|
||||
toggleAutomation: (row: AutomationListRow) => void
|
||||
requestDeleteAutomation: (row: AutomationListRow) => void
|
||||
openCreateDialog: () => void
|
||||
canCreateAutomation: boolean
|
||||
}
|
||||
|
||||
export type EditorDialogProps = {
|
||||
launchAuthority?: AutomationAuthorityRef
|
||||
open: boolean
|
||||
isEditing: boolean
|
||||
isSaving: boolean
|
||||
createDestination?: AutomationCreateDestinationControl
|
||||
editDestination?: AutomationCreateDestinationControl
|
||||
notice?: { message: string; recovery: string | null } | null
|
||||
onNoticeRecover?: (action: string) => void
|
||||
repos?: { id: string }[]
|
||||
worktrees: Worktree[]
|
||||
draft?: { projectId: string; workspaceId: string }
|
||||
canSave?: boolean
|
||||
onSave: () => void
|
||||
onProjectChange: (projectId: string) => void
|
||||
onDraftChange: (updater: (current: unknown) => unknown) => void
|
||||
onApplyTemplate: (template: AutomationTemplate) => void
|
||||
}
|
||||
|
||||
export type DeleteDialogProps = {
|
||||
deleteTarget: Automation | null
|
||||
onConfirm: () => void
|
||||
}
|
||||
|
||||
type AutomationsPageMocks = {
|
||||
state: AutomationsPageFixtureState
|
||||
repoMap: Map<string, unknown>
|
||||
@@ -126,8 +71,10 @@ vi.mock('@/store', () => {
|
||||
return { useAppStore }
|
||||
})
|
||||
|
||||
vi.mock('@/store/selectors', () => ({
|
||||
useRepoMap: () => mocks.repoMap,
|
||||
vi.mock('@/store/repos/use-repository-catalog', () => ({
|
||||
useRepoMap: () => mocks.repoMap
|
||||
}))
|
||||
vi.mock('@/store/slices/worktrees/listing/use-worktree-catalog', () => ({
|
||||
useWorktreeMap: () => mocks.worktreeMap
|
||||
}))
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ import type { AutomationsPageDestinationState } from './use-automations-page-des
|
||||
import type { AutomationsPageDestinationFormState } from './use-automations-page-destination-form'
|
||||
import type { AutomationsPageLocalState } from './use-automations-page-local-state'
|
||||
import type { AutomationsPageStoreState } from './use-automations-page-store-state'
|
||||
import { selectWorktreesByRepo } from '@/store/workspace-record-selectors'
|
||||
import { selectWorktreesByRepo } from '@/store/workspaces/catalog/workspace-record-fields'
|
||||
|
||||
/** Dialog open/edit actions, including host-captured re-reads and project changes. */
|
||||
export function useAutomationEditorActions({
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@ import { createRoot, type Root } from 'react-dom/client'
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
||||
import type { Automation } from '../../../../shared/automations-types'
|
||||
import type { AutomationListScopeSelector } from '../../../../shared/automation-list-scope'
|
||||
import type { AppState } from '@/store'
|
||||
import type { AppState } from '@/store/types'
|
||||
import type { AutomationHostCatalogView } from './use-automation-host-catalog'
|
||||
import { resetAutomationHostCatalogGenerationsForTests } from './automation-host-catalog-generation'
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ import { act } from 'react'
|
||||
import { createRoot, type Root } from 'react-dom/client'
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
||||
import type { Automation } from '../../../../shared/automations-types'
|
||||
import type { AppState } from '@/store'
|
||||
import type { AppState } from '@/store/types'
|
||||
import type { Repo } from '../../../../shared/repo-types'
|
||||
import type { AutomationHostCatalogView } from './use-automation-host-catalog'
|
||||
|
||||
|
||||
@@ -7,14 +7,18 @@ import type { Repo } from '../../../../shared/repo-types'
|
||||
import type { Worktree } from '../../../../shared/worktree/types'
|
||||
import { getAgentCatalog } from '@/lib/agent-catalog'
|
||||
import { useAppStore } from '@/store'
|
||||
import { useRepoMap, useWorktreeMap } from '@/store/selectors'
|
||||
import { useRepoMap } from '@/store/repos/use-repository-catalog'
|
||||
import { useWorktreeMap } from '@/store/slices/worktrees/listing/use-worktree-catalog'
|
||||
import {
|
||||
automationFolderWorktreeForRow,
|
||||
automationRepoForRow,
|
||||
automationWorktreeForRow,
|
||||
type AutomationListRow
|
||||
} from './automation-list-row-identity'
|
||||
import { selectFolderWorkspaces, selectWorktreesByRepo } from '@/store/workspace-record-selectors'
|
||||
import {
|
||||
selectFolderWorkspaces,
|
||||
selectWorktreesByRepo
|
||||
} from '@/store/workspaces/catalog/workspace-record-fields'
|
||||
|
||||
const AGENTS = getAgentCatalog().map((agent) => agent.id)
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ vi.mock('@/lib/user-opened-local-path', () => ({
|
||||
import { useAppStore } from '@/store'
|
||||
import { editorTabFileAccess } from '@/lib/local-file-access'
|
||||
import { statUserOpenedPath } from '@/lib/user-opened-local-path'
|
||||
import { makeWorktree } from '@/store/slices/worktrees-slice-test-fixtures'
|
||||
import { makeWorktree } from '@/store/slices/worktrees/worktree.test-fixture'
|
||||
|
||||
import { openBrowserFileSource } from './browser-file-editor-open'
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ import { getRuntimeTargetForWorktreeOwner } from '@/lib/file-owner-runtime-targe
|
||||
import { getRelativePathInsideRoot } from '@/lib/path'
|
||||
import { statUserOpenedPath } from '@/lib/user-opened-local-path'
|
||||
import { toast } from 'sonner'
|
||||
import type { AppState } from '@/store'
|
||||
import type { AppState } from '@/store/types'
|
||||
import { useAppStore } from '@/store'
|
||||
import { openDocPreviewSource } from '../workspace-doc/doc-preview-document-actions'
|
||||
|
||||
|
||||
@@ -3,7 +3,8 @@ import { Globe } from 'lucide-react'
|
||||
import { toast } from 'sonner'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { useAppStore } from '@/store'
|
||||
import { useRepoById, useWorktreeById } from '@/store/selectors'
|
||||
import { useRepoById } from '@/store/repos/use-repository-catalog'
|
||||
import { useWorktreeById } from '@/store/workspaces/selection/use-selected-worktree'
|
||||
import {
|
||||
prepareBrowserHistoryEntries,
|
||||
rankBrowserTopSites
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import React, { createContext, useContext, useMemo } from 'react'
|
||||
import { useShallow } from 'zustand/react/shallow'
|
||||
import { useAppStore } from '@/store'
|
||||
import { hasAwakeStructuredChat } from '@/store/slices/structured-chat-slept-at'
|
||||
import { hasAwakeStructuredChat } from '@/store/slices/agent-status/structured-chat-slept-at'
|
||||
import { AgentStateDot } from '@/components/AgentStateDot'
|
||||
import { StateIndicatorTooltip } from '@/components/StateIndicatorTooltip'
|
||||
import StatusIndicator from '@/components/sidebar/workspace-card/surface/StatusIndicator'
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { Blocks, FilePlus } from 'lucide-react'
|
||||
import { isWorkspaceScopedPluginContext } from '../../../../shared/plugins/contributions/plugin-command-contribution'
|
||||
import type { ActivePluginCommand } from '@/store/plugin-panels'
|
||||
import type { ActivePluginCommand } from '@/store/plugins/catalog/plugin-contribution-catalog'
|
||||
import { executePluginCommand } from '@/lib/plugin-command-execution'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import type { ActivePluginNewFile } from '@/store/plugin-new-files'
|
||||
import type { ActivePluginNewFile } from '@/store/plugins/file-creation/plugin-new-files'
|
||||
import { useAppStore } from '@/store'
|
||||
import { runWorkspaceAction, type CmdJQuickAction } from './quick-actions'
|
||||
import { getWorkspaceScopedActionAvailability } from './quick-action-context'
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import type { AppState } from '@/store/types'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { findWorktreeById } from '@/store/slices/worktree-helpers'
|
||||
import { findFirstIndexedWorktree } from '@/lib/workspace/ownership/worktree-runtime-owner-index'
|
||||
import type { Worktree } from '../../../../shared/worktree/types'
|
||||
import type { SshConnectionStatus } from '../../../../shared/ssh-types'
|
||||
import { getClientCreationActionPolicy } from '@/lib/client-creation-action-policy'
|
||||
@@ -10,7 +10,7 @@ import {
|
||||
runActiveNativeChatSplit
|
||||
} from '@/components/native-chat/native-chat-layout-actions'
|
||||
import type { NativeChatSplitDirection } from '@/components/native-chat/native-chat-pane-shortcut'
|
||||
import { selectWorktreesByRepo } from '@/store/workspace-record-selectors'
|
||||
import { selectWorktreesByRepo } from '@/store/workspaces/catalog/workspace-record-fields'
|
||||
import type { TabSplitDirection } from '@/store/slices/tabs/tabs-slice-contract'
|
||||
|
||||
export type CmdJUnavailableReason =
|
||||
@@ -163,7 +163,7 @@ export function buildCmdJQuickActionContext(args: {
|
||||
}): CmdJQuickActionContext {
|
||||
const activeWorktreeId = args.state.activeWorktreeId
|
||||
const activeWorktree = activeWorktreeId
|
||||
? (findWorktreeById(selectWorktreesByRepo(args.state), activeWorktreeId) ?? null)
|
||||
? (findFirstIndexedWorktree(selectWorktreesByRepo(args.state), activeWorktreeId) ?? null)
|
||||
: null
|
||||
const activeGroupId = resolveCmdJActiveGroupId(
|
||||
args.state,
|
||||
|
||||
@@ -3,7 +3,6 @@ import { useAppStore } from '@/store'
|
||||
import { findCmdJTaskWorkspace } from './task-search-activation'
|
||||
import { jiraTaskIssue, jiraTaskSource, jiraTaskResult } from './task-search.test-fixture'
|
||||
import { makeWorktree } from '../worktree-jump/worktree-jump-palette-test-fixtures'
|
||||
import '@/store/workspace-record-selectors'
|
||||
|
||||
const initial = useAppStore.getInitialState()
|
||||
afterEach(() => useAppStore.setState(initial, true))
|
||||
|
||||
@@ -18,7 +18,7 @@ import { terminalPreviewUnavailableMessage } from './terminal-preview-unavailabl
|
||||
import { resolveEffectiveTerminalAppearance } from '@/lib/terminal-theme'
|
||||
import { cn } from '@/lib/utils'
|
||||
import { useAppStore } from '@/store'
|
||||
import { usePluginFontReady } from '@/store/plugin-fonts'
|
||||
import { usePluginFontReady } from '@/store/plugins/appearance/plugin-fonts'
|
||||
import { createPreviewGridClaim } from './preview-grid-claim'
|
||||
import { createPreviewBoxFit } from './preview-terminal-box-fit'
|
||||
import {
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@ import { runtimeStatuses } from '@/store/slices/browser/browser-slice-test-harne
|
||||
import type { openStandaloneTerminal } from '../standalone-terminal/open-standalone-terminal'
|
||||
|
||||
import { getDefaultSettings } from '../../../../shared/constants'
|
||||
import { createStoreCascadesMockApi } from '@/store/slices/store-cascades-test-harness'
|
||||
import { createStoreCascadesMockApi } from '@/store/testing/app-store-cascade-api.test-fixture'
|
||||
import {
|
||||
createBrowserLinkTestStore,
|
||||
WORKSPACE,
|
||||
|
||||
@@ -12,7 +12,7 @@ import {
|
||||
} from '@/lib/pane-manager/pane-terminal-options'
|
||||
import { buildLocalConptyTerminalOptions } from '@/lib/pane-manager/windows-pty-compatibility'
|
||||
import { buildFontFamily } from '@/lib/monospace-font-family'
|
||||
import { pluginFontFamilyWhenLoaded } from '@/store/plugin-fonts'
|
||||
import { pluginFontFamilyWhenLoaded } from '@/store/plugins/appearance/plugin-fonts'
|
||||
import { resolveTerminalMinimumContrastRatio } from '../../../../shared/terminal-themes/terminal-contrast-correction'
|
||||
|
||||
/** Options a live settings change can write onto an open preview terminal. */
|
||||
|
||||
@@ -21,7 +21,7 @@ import {
|
||||
startWorktreeAgentRowsCachePass,
|
||||
type WorktreeAgentRowsCache
|
||||
} from './worktree-agent-rows-cache'
|
||||
import { selectWorktreesByRepo } from '@/store/workspace-record-selectors'
|
||||
import { selectWorktreesByRepo } from '@/store/workspaces/catalog/workspace-record-fields'
|
||||
|
||||
const EMPTY_COUNTS: Record<DashboardBucket, number> = {
|
||||
attention: 0,
|
||||
|
||||
@@ -19,7 +19,7 @@ import type { AgentSessionStatusSummary } from '../../../../shared/agent-session
|
||||
import type { ExecutionHostId } from '../../../../shared/execution-host'
|
||||
|
||||
vi.mock('@/store', async () => {
|
||||
const { createTestStore } = await import('@/store/slices/store-test-helpers')
|
||||
const { createTestStore } = await import('@/store/testing/app-store-test-fixture')
|
||||
return { useAppStore: createTestStore() }
|
||||
})
|
||||
vi.mock('@/runtime/structured-chat-name-observation', () => ({
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import type { AppState } from '@/store'
|
||||
import type { AppState } from '@/store/types'
|
||||
import { holdChatProgramFacts } from '@/lib/host-chat-program-acquisition'
|
||||
import { resolveChatProgramContext } from '@/lib/host-chat-program'
|
||||
import {
|
||||
|
||||
@@ -18,7 +18,7 @@ import { folderWorkspaceToWorktree } from '../../../../shared/folder-workspaces/
|
||||
import { getHostDisplayLabelOverrides } from '../../../../shared/host-setting-overrides'
|
||||
import { isFolderRepo } from '../../../../shared/repo-kind'
|
||||
import { parseAppSshPtyId } from '../../../../shared/ssh-pty-id'
|
||||
import { selectWorktreesByRepo } from '@/store/workspace-record-selectors'
|
||||
import { selectWorktreesByRepo } from '@/store/workspaces/catalog/workspace-record-fields'
|
||||
|
||||
export type ActiveDashboardWorkspace = {
|
||||
projectId: string
|
||||
|
||||
@@ -12,13 +12,13 @@ import {
|
||||
} from '../../../../shared/agent-launch/catalog/tui-agent-selection'
|
||||
import type { TuiAgent } from '../../../../shared/agent-launch/catalog/tui-agent'
|
||||
import { parseWorkspaceKey } from '../../../../shared/workspace-scope'
|
||||
import { getRuntimeAgentInventoryKey } from '@/store/slices/runtime-agent-inventory-key'
|
||||
import { getRuntimeAgentInventoryKey } from '@/store/slices/agent-inventory/runtime-agent-inventory-key'
|
||||
import {
|
||||
worktreeLaunchWorkspace,
|
||||
type AgentLaunchRouteView
|
||||
} from '@/lib/agent-session/launch/routing/agent-launch-route-input'
|
||||
import { agentsOfferedForLaunch } from '@/lib/host-chat-program'
|
||||
import { selectWorktreesByRepo } from '@/store/workspace-record-selectors'
|
||||
import { selectWorktreesByRepo } from '@/store/workspaces/catalog/workspace-record-fields'
|
||||
|
||||
export type DashboardLaunchDetectionState = Pick<
|
||||
AppState,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { useAppStateValue } from '@/store/app-state-view'
|
||||
import { useAppStateValue } from '@/store/retained-views/app-state-view'
|
||||
import { getAgentRowConversationName } from '../../../../shared/agent-status/presentation/agent-row-conversation-name'
|
||||
import { parsePaneKey } from '../../../../shared/workspace-layout/stable-pane-id'
|
||||
import { structuredChatDisplayName } from '../../../../shared/structured-chat-row-name'
|
||||
|
||||
@@ -10,7 +10,7 @@ import {
|
||||
selectDetectedWorktreesByRepo,
|
||||
selectFolderWorkspaces,
|
||||
selectWorktreesByRepo
|
||||
} from '@/store/workspace-record-selectors'
|
||||
} from '@/store/workspaces/catalog/workspace-record-fields'
|
||||
|
||||
export type AgentBucketCounts = Record<DashboardBucket, number>
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { createDashboardChatProgramHolds } from './dashboard-chat-program-acquisition'
|
||||
import { useEffect } from 'react'
|
||||
import { useAppStore, type AppState } from '@/store'
|
||||
import { useAppStore } from '@/store'
|
||||
import type { AppState } from '@/store/types'
|
||||
import {
|
||||
subscribeStructuredChatTabNames,
|
||||
getStructuredChatTabNames
|
||||
@@ -15,7 +16,7 @@ import { revealDashboardAgent } from './reveal-dashboard-agent'
|
||||
import type { RepoIcon } from '../../../../shared/repo-icon'
|
||||
import { buildDashboardSnapshot, type DashboardSnapshotState } from './build-dashboard-snapshot'
|
||||
import { createWorktreeAgentRowsCache } from './worktree-agent-rows-cache'
|
||||
import { selectWorktreesByRepo } from '@/store/workspace-record-selectors'
|
||||
import { selectWorktreesByRepo } from '@/store/workspaces/catalog/workspace-record-fields'
|
||||
|
||||
// Throttle cross-worktree snapshot rebuilds to 4Hz during agent-status bursts.
|
||||
const PUBLISH_THROTTLE_MS = 250
|
||||
|
||||
@@ -12,7 +12,7 @@ import {
|
||||
selectDetectedWorktreesByRepo,
|
||||
selectFolderWorkspaces,
|
||||
selectWorktreesByRepo
|
||||
} from '@/store/workspace-record-selectors'
|
||||
} from '@/store/workspaces/catalog/workspace-record-fields'
|
||||
|
||||
/** Build in-window snapshots from the store; pop-out windows instead receive the bridge’s serialized version of the same builder. */
|
||||
export function useLiveDashboardSnapshot(): DashboardSnapshot {
|
||||
|
||||
@@ -3,7 +3,7 @@ import { act, renderHook } from '@testing-library/react'
|
||||
import { afterEach, beforeEach, describe, expect, it } from 'vitest'
|
||||
import { buildWorktreeAgentRows } from '../sidebar/workspace-card/activity/worktree-agent-rows'
|
||||
import { useAppStore } from '@/store'
|
||||
import { resetAgentPaneAuthorityAliasesForTests } from '@/store/slices/agent-pane-authority'
|
||||
import { resetAgentPaneAuthorityAliasesForTests } from '@/store/slices/agent-status/agent-pane-authority'
|
||||
import type {
|
||||
AgentStatusEntry,
|
||||
AgentStatusState
|
||||
|
||||
@@ -10,7 +10,7 @@ import type { Repo } from '../../../../shared/repo-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 { resolveAgentPaneAuthorityKey } from '@/store/slices/agent-status/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/workspace-layout/stable-pane-id'
|
||||
@@ -20,7 +20,10 @@ import {
|
||||
createWorktreeTabBucketProjection,
|
||||
type WorktreeTabBucketProjection
|
||||
} from '@/lib/worktree-tab-bucket-projection'
|
||||
import { selectFolderWorkspaces, selectWorktreesByRepo } from '@/store/workspace-record-selectors'
|
||||
import {
|
||||
selectFolderWorkspaces,
|
||||
selectWorktreesByRepo
|
||||
} from '@/store/workspaces/catalog/workspace-record-fields'
|
||||
|
||||
// Keep finished snapshots after live status cleanup so closed terminals’ rows remain until user dismissal.
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ import {
|
||||
selectPaneForegroundAgentsForWorktree,
|
||||
selectRuntimePaneTitlesForWorktree
|
||||
} from '../sidebar/workspace-card/activity/worktree-card-status-inputs'
|
||||
import type { PaneForegroundAgentEntry } from '@/store/slices/pane-foreground-agent'
|
||||
import type { PaneForegroundAgentEntry } from '@/store/slices/agent-status/pane-foreground-agent'
|
||||
|
||||
type WorktreeAgentRowsCacheEntry = {
|
||||
/** Caller-provided invalidation token for time-based freshness (agentStatusEpoch). */
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import type { GitHubImageIntake } from '@/components/github/use-github-image-uploads'
|
||||
import type { DiffCommentOwner } from '@/store/diff-comment-owner'
|
||||
import type { DiffCommentOwner } from '@/store/slices/diff-comments/diff-comment-owner'
|
||||
import type { RefObject } from 'react'
|
||||
import type { Root } from 'react-dom/client'
|
||||
import { formatDiffComments } from '@/lib/diff-comments-format'
|
||||
import { formatDiffComments } from '../../../../shared/diff-comments-format'
|
||||
import { TooltipProvider } from '@/components/ui/tooltip'
|
||||
import type { DiffCommentDeliverySnapshot } from '@/store/slices/diff-comments/create-diff-comments-slice'
|
||||
import { DiffCommentCard } from './DiffCommentCard'
|
||||
|
||||
@@ -5,7 +5,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
||||
import { useAppStore } from '@/store'
|
||||
|
||||
import { callRuntimeRpc } from '@/runtime/rpc/calls/runtime-rpc-call'
|
||||
import { makeWorktree } from '@/store/slices/worktrees-slice-test-fixtures'
|
||||
import { makeWorktree } from '@/store/slices/worktrees/worktree.test-fixture'
|
||||
|
||||
import type { ExecutionHostId } from '../../../../shared/execution-host'
|
||||
import type { DiffComment } from '../../../../shared/diff-comment-types'
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { useAppStateValue } from '@/store/app-state-view'
|
||||
import { useAppStateValue } from '@/store/retained-views/app-state-view'
|
||||
import { useCallback, useLayoutEffect, useMemo, useRef, useState } from 'react'
|
||||
import type { Dispatch, SetStateAction } from 'react'
|
||||
import { useAppStore } from '@/store'
|
||||
@@ -9,7 +9,7 @@ import {
|
||||
sourceParts,
|
||||
type DiffCommentOwner,
|
||||
type DiffCommentView
|
||||
} from '@/store/diff-comment-owner'
|
||||
} from '@/store/slices/diff-comments/diff-comment-owner'
|
||||
import type { WorkspaceCopySource } from '@/lib/workspace-copy-owner'
|
||||
import type { DiffComment } from '../../../../shared/diff-comment-types'
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { useAppStateValue } from '@/store/app-state-view'
|
||||
import { useAppStateValue } from '@/store/retained-views/app-state-view'
|
||||
import { useDiffCommentView } from './use-diff-comment-owner'
|
||||
import type { DiffCommentOwner } from '@/store/diff-comment-owner'
|
||||
import type { DiffCommentOwner } from '@/store/slices/diff-comments/diff-comment-owner'
|
||||
import type { WorkspaceCopySource } from '@/lib/workspace-copy-owner'
|
||||
import { useMemo } from 'react'
|
||||
import {
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
import type { GitHubImageIntake } from '@/components/github/use-github-image-uploads'
|
||||
import { diffCommentOwnerKey, type DiffCommentOwner } from '@/store/diff-comment-owner'
|
||||
import {
|
||||
diffCommentOwnerKey,
|
||||
type DiffCommentOwner
|
||||
} from '@/store/slices/diff-comments/diff-comment-owner'
|
||||
import { useCallback, useEffect, useMemo, useRef } from 'react'
|
||||
import type { editor as monacoEditor } from 'monaco-editor'
|
||||
import { createRoot, type Root } from 'react-dom/client'
|
||||
|
||||
@@ -3,11 +3,11 @@ import { act, createElement } from 'react'
|
||||
import { createRoot, type Root } from 'react-dom/client'
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
||||
import type { StoreApi } from 'zustand'
|
||||
import type { AppState } from '@/store'
|
||||
import type { AppState } from '@/store/types'
|
||||
import type { OpenFile } from '@/store/slices/editor/types/open-file'
|
||||
import type { PendingEditorReveal } from '@/store/slices/editor/types/pending-editor-reveal'
|
||||
import type { GitStatusEntry } from '../../../../shared/git/status/git-status-types'
|
||||
import { makeWorktree } from '@/store/slices/worktrees-slice-test-fixtures'
|
||||
import { makeWorktree } from '@/store/slices/worktrees/worktree.test-fixture'
|
||||
import { createEditorStore } from './autosave/editor-autosave-controller-test-fixture'
|
||||
import { createEditorPanelDraftSelector } from './editor-panel-draft-selector'
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { GitGraphTab } from './git-graph/git-graph-tab'
|
||||
import { useAppStore } from '@/store'
|
||||
import type { ActivePluginCustomEditor } from '@/store/plugin-custom-editors'
|
||||
import type { ActivePluginCustomEditor } from '@/store/plugins/file-editors/plugin-custom-editors'
|
||||
import type { MarkdownViewMode, OpenFile } from '@/store/slices/editor/types/open-file'
|
||||
import type { PendingEditorReveal } from '@/store/slices/editor/types/pending-editor-reveal'
|
||||
import type { GitDiffResult } from '../../../../shared/git/diff/git-diff-compare-types'
|
||||
|
||||
@@ -24,7 +24,7 @@ import { PluginFileTypeSuggestion } from './PluginFileTypeSuggestion'
|
||||
import type { useMarkdownDocuments } from './markdown/documents/useMarkdownDocuments'
|
||||
import { EditorMarkdownFileSurface } from './EditorMarkdownFileSurface'
|
||||
import type { MarkdownRenderState } from './markdown/render-mode/markdown-render-mode'
|
||||
import type { ActivePluginCustomEditor } from '@/store/plugin-custom-editors'
|
||||
import type { ActivePluginCustomEditor } from '@/store/plugins/file-editors/plugin-custom-editors'
|
||||
import { PluginEditorSourceFallbackNotice } from './PluginEditorNeedsDesktopNotice'
|
||||
import PluginCustomEditorFrame from './PluginCustomEditorFrame'
|
||||
import PluginBytesCustomEditorSurface from './PluginBytesCustomEditorSurface'
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
import { cleanup, fireEvent, render } from '@testing-library/react'
|
||||
import { afterEach, expect, it, vi } from 'vitest'
|
||||
import { useAppStore } from '@/store'
|
||||
import type { TabsDrawnFromMain } from '@/store/slices/tabs-drawn-from-main.test-fixture'
|
||||
import type { TabsDrawnFromMain } from '@/store/slices/tabs/tabs-drawn-from-main.test-fixture'
|
||||
import {
|
||||
EDITOR_OWNER,
|
||||
EDITOR_PLACEMENT,
|
||||
|
||||
@@ -30,7 +30,7 @@ import {
|
||||
} from './editor-artifact-upload'
|
||||
import { useEditorPanelSave } from './save/commands/useEditorPanelSave'
|
||||
import { isMarkdownReviewNotesEnabled } from '@/lib/markdown-review-notes-setting'
|
||||
import { useFileCustomEditors } from '@/store/plugin-custom-editors'
|
||||
import { useFileCustomEditors } from '@/store/plugins/file-editors/plugin-custom-editors'
|
||||
import { applyCustomEditorToggle } from './view-mode/custom-editor-toggle'
|
||||
import { editorPanelFileActions } from './editor-panel-file-actions'
|
||||
import { runAfterEditorFramesFlush } from './save/flush/editor-pending-flush'
|
||||
|
||||
@@ -8,7 +8,7 @@ import { EditorPanelHeaderPath } from './EditorPanelHeaderPath'
|
||||
|
||||
const renameFileOnDiskMock = vi.hoisted(() => vi.fn())
|
||||
|
||||
vi.mock('@/store/selectors', () => ({
|
||||
vi.mock('@/store/workspaces/selection/use-selected-worktree', () => ({
|
||||
useWorktreeById: () => ({ path: '/repo', repoId: 'repo-1' })
|
||||
}))
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { Suspense, type JSX, type Ref } from 'react'
|
||||
import { useAppStore } from '@/store'
|
||||
import { findWorktreeById } from '@/store/slices/worktree-helpers'
|
||||
import { findFirstIndexedWorktree } from '@/lib/workspace/ownership/worktree-runtime-owner-index'
|
||||
import type { OpenFile } from '@/store/slices/editor/types/open-file'
|
||||
import { EditorContent } from './EditorContent'
|
||||
import { EditorPanelHeader } from './EditorPanelHeader'
|
||||
@@ -12,7 +12,7 @@ import { shouldShowEditorPanelHeader } from './editor-header'
|
||||
import { getUntitledFileRoot } from './untitled-file-rename-path'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import type { ArtifactWriteRequest } from '../../../../shared/artifacts'
|
||||
import { selectWorktreesByRepo } from '@/store/workspace-record-selectors'
|
||||
import { selectWorktreesByRepo } from '@/store/workspaces/catalog/workspace-record-fields'
|
||||
|
||||
type EditorPanelRenderModel = ReturnType<typeof getEditorPanelRenderModel>
|
||||
|
||||
@@ -174,7 +174,7 @@ export function EditorPanelShell({
|
||||
renameDialogFile
|
||||
? getUntitledFileRoot(
|
||||
renameDialogFile,
|
||||
findWorktreeById(
|
||||
findFirstIndexedWorktree(
|
||||
selectWorktreesByRepo(useAppStore.getState()),
|
||||
renameDialogFile.worktreeId
|
||||
)?.path
|
||||
|
||||
@@ -5,7 +5,7 @@ import { afterEach, expect, it, vi } from 'vitest'
|
||||
import type { AppState } from '@/store/types'
|
||||
import { useStore } from 'zustand'
|
||||
import { createEditorStore } from '@/store/slices/editor/editor-slice-test-harness'
|
||||
import { makeWorktree } from '@/store/slices/worktrees-slice-test-fixtures'
|
||||
import { makeWorktree } from '@/store/slices/worktrees/worktree.test-fixture'
|
||||
import type { OpenFile } from '@/store/slices/editor/types/open-file'
|
||||
import { editorSelectionCache, editorViewStateCache, scrollTopCache } from '@/lib/scroll-cache'
|
||||
import { getDefaultSettings } from '../../../../shared/constants'
|
||||
|
||||
@@ -10,13 +10,13 @@ import {
|
||||
} from '@/components/ui/dropdown-menu'
|
||||
import { useAppStore } from '@/store'
|
||||
import { getConnectionId } from '@/lib/connection-context'
|
||||
import { findWorktreeById } from '@/store/slices/worktree-helpers'
|
||||
import { findFirstIndexedWorktree } from '@/lib/workspace/ownership/worktree-runtime-owner-index'
|
||||
import { getRuntimeGitRemoteFileUrl } from '@/runtime/source-control/git/runtime-git-working-tree-client'
|
||||
import { formatPathLineReference } from './line-copy-path'
|
||||
import { formatClipboardFilePath } from '@/lib/clipboard-file-path'
|
||||
import { getOpenFileRevealOwner } from '@/lib/reveal-in-file-manager'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { selectWorktreesByRepo } from '@/store/workspace-record-selectors'
|
||||
import { selectWorktreesByRepo } from '@/store/workspaces/catalog/workspace-record-fields'
|
||||
import { getRemoteUrlLineRange } from './selection-copy'
|
||||
|
||||
type MonacoGutterContextMenuProps = {
|
||||
@@ -94,7 +94,10 @@ export function MonacoGutterContextMenu({
|
||||
if (!activeFile) {
|
||||
return
|
||||
}
|
||||
const worktree = findWorktreeById(selectWorktreesByRepo(state), activeFile.worktreeId)
|
||||
const worktree = findFirstIndexedWorktree(
|
||||
selectWorktreesByRepo(state),
|
||||
activeFile.worktreeId
|
||||
)
|
||||
if (!worktree) {
|
||||
return
|
||||
}
|
||||
|
||||
@@ -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 { ActivePluginCustomEditor } from '@/store/plugin-custom-editors'
|
||||
import type { ActivePluginCustomEditor } from '@/store/plugins/file-editors/plugin-custom-editors'
|
||||
import type { OpenFile } from '@/store/slices/editor/types/open-file'
|
||||
import type { FileContent } from './editor-panel-content-types'
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ import React, { useCallback, useEffect, useState, useSyncExternalStore } from 'r
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { basename } from '@/lib/path'
|
||||
import { readRuntimeFileBytes } from '@/runtime/files/reads/runtime-paged-file-read'
|
||||
import type { ActivePluginCustomEditor } from '@/store/plugin-custom-editors'
|
||||
import type { ActivePluginCustomEditor } from '@/store/plugins/file-editors/plugin-custom-editors'
|
||||
import { CUSTOM_EDITOR_DOCUMENT_MAX_BYTES } from '../../../../shared/plugins/frames/plugin-custom-editor-bridge'
|
||||
import { matchPluginFile } from '../../../../shared/plugins/contributions/plugin-file-match'
|
||||
import { fileTypeOfPath } from '../../../../shared/plugins/contributions/plugin-file-type'
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user