diff --git a/config/flaky-test-pattern-baseline.txt b/config/flaky-test-pattern-baseline.txt index 67c7514f3fa..3dd335a9d08 100644 --- a/config/flaky-test-pattern-baseline.txt +++ b/config/flaky-test-pattern-baseline.txt @@ -1113,7 +1113,7 @@ 1 test-no-wall-clock:src/renderer/src/lib/browser-history-match.performance.test.ts 1 test-no-wall-clock:src/renderer/src/lib/paired-runtime-closed-tab-resume.test.ts 2 test-no-wall-clock:src/renderer/src/lib/settled-worker-wake-policy.test.ts -2 test-no-wall-clock:src/renderer/src/lib/structured-agent-session-launch-persistence.test.ts +2 test-no-wall-clock:src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-persistence.test.ts 2 test-no-wall-clock:src/renderer/src/lib/use-tab-agent-observed-signal-dispatch.test.tsx 2 test-no-wall-clock:src/renderer/src/lib/wake-sleeping-agents-live-unmounted-pane.test.ts 1 test-no-wall-clock:src/renderer/src/lib/workspace-activation-path-gate.test.ts diff --git a/config/scripts/ci-shard-timings.json b/config/scripts/ci-shard-timings.json index 7132229dd4c..dd7526aed52 100644 --- a/config/scripts/ci-shard-timings.json +++ b/config/scripts/ci-shard-timings.json @@ -10115,15 +10115,15 @@ "src/renderer/src/lib/structured-agent-session-launch-exited-owner.test.ts": 1103, "src/renderer/src/lib/structured-agent-session-launch-join-delivery.test.ts": 611, "src/renderer/src/lib/structured-agent-session-launch-options.test.ts": 611, - "src/renderer/src/lib/structured-agent-session-launch-persistence.test.ts": 421, + "src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-persistence.test.ts": 421, "src/renderer/src/lib/structured-agent-session-launch-probe-outage.test.ts": 1687, "src/renderer/src/lib/structured-agent-session-launch-prompt-stop.test.ts": 433, "src/renderer/src/lib/structured-agent-session-launch-prompt.test.ts": 513, - "src/renderer/src/lib/structured-agent-session-launch-record.test.ts": 279, + "src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-record.test.ts": 279, "src/renderer/src/lib/structured-agent-session-launch-registered-agent.test.ts": 643, - "src/renderer/src/lib/structured-agent-session-launch-reload.test.ts": 637, + "src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-reload.test.ts": 637, "src/renderer/src/lib/structured-agent-session-launch-resume-identity.test.ts": 679, - "src/renderer/src/lib/structured-agent-session-launch-unconfirmed-or-retried.test.ts": 656, + "src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-unconfirmed-or-retried.test.ts": 656, "src/renderer/src/lib/structured-agent-session-launch.test.ts": 822, "src/renderer/src/lib/structured-agent-session-new-chat-own-launch.test.ts": 701, "src/renderer/src/lib/agent-session/structured-agent-session-provisional-tab.test.ts": 829, diff --git a/src/renderer/src/components/native-chat/StructuredAgentSessionStatusBridge.launch-directory.test.tsx b/src/renderer/src/components/native-chat/StructuredAgentSessionStatusBridge.launch-directory.test.tsx index 7c8a70eca13..cc340ff59a6 100644 --- a/src/renderer/src/components/native-chat/StructuredAgentSessionStatusBridge.launch-directory.test.tsx +++ b/src/renderer/src/components/native-chat/StructuredAgentSessionStatusBridge.launch-directory.test.tsx @@ -73,11 +73,11 @@ vi.mock('@/runtime/structured-agent-session-client', () => ({ })) import { useAppStore } from '@/store' -import { notifyStructuredLaunchListeners } from '@/lib/structured-agent-session-launch-registry' +import { notifyStructuredLaunchListeners } from '@/lib/agent-session/launch/structured-agent-session-launch-registry' import { writeStructuredAgentLaunchRecord, deleteStructuredAgentLaunchRecord -} from '@/lib/structured-agent-session-launch-persistence' +} from '@/lib/agent-session/launch/structured-agent-session-launch-persistence' import { StructuredAgentSessionStatusBridge } from './StructuredAgentSessionStatusBridge' import { getStructuredAgentSessionStatusFeed, diff --git a/src/renderer/src/components/native-chat/StructuredAgentSessionStatusBridge.tsx b/src/renderer/src/components/native-chat/StructuredAgentSessionStatusBridge.tsx index b01eb6195bc..8c5e5e68822 100644 --- a/src/renderer/src/components/native-chat/StructuredAgentSessionStatusBridge.tsx +++ b/src/renderer/src/components/native-chat/StructuredAgentSessionStatusBridge.tsx @@ -5,7 +5,7 @@ import { projectStatus } from './structured-agent-session-status-projection' import { getStructuredAgentSessionLaunchLifecycle, subscribeStructuredAgentLaunchStatus -} from '@/lib/structured-agent-session-launch-registry' +} from '@/lib/agent-session/launch/structured-agent-session-launch-registry' import { getStructuredAgentSessionLaunchFailedAt } from '@/lib/structured-agent-session-launch-failed-at' import { useAppStore } from '@/store' import type { AppState } from '@/store/types' diff --git a/src/renderer/src/components/native-chat/structured-agent-session-status-bridge-failed-start.test.tsx b/src/renderer/src/components/native-chat/structured-agent-session-status-bridge-failed-start.test.tsx index c3740dcae08..9f9cf3943b1 100644 --- a/src/renderer/src/components/native-chat/structured-agent-session-status-bridge-failed-start.test.tsx +++ b/src/renderer/src/components/native-chat/structured-agent-session-status-bridge-failed-start.test.tsx @@ -2,6 +2,7 @@ // Refused creates publish no host session; bridge launch failures into tab/workspace rows until retry or closure. +import type * as LaunchErrors from '@/lib/structured-agent-session-launch-errors' import { act, cleanup, render, waitFor } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi, type Mock } from 'vitest' import type { AgentSessionStatusEvent } from '../../../../shared/agent-session-wire' @@ -63,15 +64,29 @@ vi.mock('@/runtime/local-structured-session-tabs-sync/inventory-refresh', () => refreshLocalStructuredSessionTabs: vi.fn(async () => []) })) -vi.mock('@/lib/launch-structured-agent-session', () => { +const launchErrorMocks = vi.hoisted(() => { class StructuredAgentSessionCreateRefusalError extends Error {} + return { StructuredAgentSessionCreateRefusalError } +}) + +vi.mock('@/lib/structured-agent-session-launch-errors', async () => ({ + ...(await vi.importActual('@/lib/structured-agent-session-launch-errors')), + ...launchErrorMocks +})) + +vi.mock('@/lib/structured-agent-session-launch-create-call', () => ({ + launchStructuredAgentSession: mocks.launch +})) + +vi.mock('@/lib/launch-structured-agent-session', () => { return { createStructuredAgentSessionLaunchIntent: mocks.createIntent, retryStructuredAgentSessionLaunchIntent: mocks.retryIntent, restoreStructuredAgentSessionLaunchIntent: mocks.restoreIntent, abandonStructuredAgentSessionLaunchIntent: vi.fn(), launchStructuredAgentSession: mocks.launch, - StructuredAgentSessionCreateRefusalError + StructuredAgentSessionCreateRefusalError: + launchErrorMocks.StructuredAgentSessionCreateRefusalError } }) @@ -81,8 +96,8 @@ import { retryStructuredAgentSessionLaunch, startStructuredAgentLaunch } from '@/lib/structured-agent-session-launch' -import { resetStructuredAgentLaunchRegistryForTests } from '@/lib/structured-agent-session-launch-registry' -import { resetStructuredAgentLaunchPersistenceForTests } from '@/lib/structured-agent-session-launch-persistence' +import { resetStructuredAgentLaunchRegistryForTests } from '@/lib/agent-session/launch/structured-agent-session-launch-registry' +import { resetStructuredAgentLaunchPersistenceForTests } from '@/lib/agent-session/launch/structured-agent-session-launch-persistence' import { resetStructuredAgentSessionStatusFeedsForTests } from '@/runtime/structured-agent-session-status-feed' import { resetTerminalTabActivityFlagsCacheForTest, diff --git a/src/renderer/src/components/native-chat/structured-agent-session-status-bridge-unconfirmed-start.test.tsx b/src/renderer/src/components/native-chat/structured-agent-session-status-bridge-unconfirmed-start.test.tsx index 055686d9317..24776af78fe 100644 --- a/src/renderer/src/components/native-chat/structured-agent-session-status-bridge-unconfirmed-start.test.tsx +++ b/src/renderer/src/components/native-chat/structured-agent-session-status-bridge-unconfirmed-start.test.tsx @@ -2,6 +2,7 @@ // Lost create replies remain unmarked and recheck on reconnect; only confirmed failures earn failure marks. +import type * as LaunchErrors from '@/lib/structured-agent-session-launch-errors' import { act, cleanup, render, waitFor } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi, type Mock } from 'vitest' import type { RuntimeMobileSessionTabsResult } from '../../../../shared/runtime-types' @@ -64,15 +65,29 @@ vi.mock('@/runtime/local-structured-session-tabs-sync/inventory-refresh', () => refreshLocalStructuredSessionTabs: mocks.refresh })) -vi.mock('@/lib/launch-structured-agent-session', () => { +const launchErrorMocks = vi.hoisted(() => { class StructuredAgentSessionCreateRefusalError extends Error {} + return { StructuredAgentSessionCreateRefusalError } +}) + +vi.mock('@/lib/structured-agent-session-launch-errors', async () => ({ + ...(await vi.importActual('@/lib/structured-agent-session-launch-errors')), + ...launchErrorMocks +})) + +vi.mock('@/lib/structured-agent-session-launch-create-call', () => ({ + launchStructuredAgentSession: mocks.launch +})) + +vi.mock('@/lib/launch-structured-agent-session', () => { return { createStructuredAgentSessionLaunchIntent: mocks.createIntent, retryStructuredAgentSessionLaunchIntent: vi.fn((prior: unknown) => prior), restoreStructuredAgentSessionLaunchIntent: mocks.restoreIntent, abandonStructuredAgentSessionLaunchIntent: vi.fn(), launchStructuredAgentSession: mocks.launch, - StructuredAgentSessionCreateRefusalError + StructuredAgentSessionCreateRefusalError: + launchErrorMocks.StructuredAgentSessionCreateRefusalError } }) @@ -84,9 +99,9 @@ import { getStructuredAgentSessionLaunchLifecycle, markStructuredAgentSessionLaunchCancelled, resetStructuredAgentLaunchRegistryForTests -} from '@/lib/structured-agent-session-launch-registry' -import { resetStructuredAgentLaunchPersistenceForTests } from '@/lib/structured-agent-session-launch-persistence' -import { recheckUnconfirmedStructuredAgentLaunches } from '@/lib/structured-agent-session-launch-unconfirmed-recheck' +} from '@/lib/agent-session/launch/structured-agent-session-launch-registry' +import { resetStructuredAgentLaunchPersistenceForTests } from '@/lib/agent-session/launch/structured-agent-session-launch-persistence' +import { recheckUnconfirmedStructuredAgentLaunches } from '@/lib/agent-session/launch/structured-agent-session-launch-unconfirmed-recheck' import { resetStructuredAgentSessionStatusFeedsForTests } from '@/runtime/structured-agent-session-status-feed' import { resetTerminalTabActivityFlagsCacheForTest, diff --git a/src/renderer/src/components/native-chat/use-native-chat-provisional-launch.test.tsx b/src/renderer/src/components/native-chat/use-native-chat-provisional-launch.test.tsx index 0374c189577..cfce19f6e6f 100644 --- a/src/renderer/src/components/native-chat/use-native-chat-provisional-launch.test.tsx +++ b/src/renderer/src/components/native-chat/use-native-chat-provisional-launch.test.tsx @@ -26,6 +26,10 @@ vi.mock('@/runtime/structured-agent-session-client', () => ({ callStructuredAgentSession: mocks.call })) +vi.mock('@/lib/structured-agent-session-launch-create-call', () => ({ + launchStructuredAgentSession: mocks.launch +})) + vi.mock('@/lib/launch-structured-agent-session', async () => { const actual = await vi.importActual( '@/lib/launch-structured-agent-session' @@ -64,8 +68,8 @@ import { } from '@/lib/structured-agent-session-launch' import type { RuntimeClientTarget } from '../../../../shared/runtime-client-target' import { dispatchStructuredAgentSessionComposerCommand } from '../../../../shared/structured-agent-session-composer' -import { resetStructuredAgentLaunchPersistenceForTests } from '@/lib/structured-agent-session-launch-persistence' -import { resetStructuredAgentLaunchRegistryForTests } from '@/lib/structured-agent-session-launch-registry' +import { resetStructuredAgentLaunchPersistenceForTests } from '@/lib/agent-session/launch/structured-agent-session-launch-persistence' +import { resetStructuredAgentLaunchRegistryForTests } from '@/lib/agent-session/launch/structured-agent-session-launch-registry' import { useNativeChatProvisionalLaunch } from './use-native-chat-provisional-launch' import { useStructuredAgentSession } from './use-structured-agent-session' import { resetHostModelCatalogSnapshotsForTests } from '@/runtime/host-model-catalog-snapshots' diff --git a/src/renderer/src/components/native-chat/use-native-chat-provisional-launch.ts b/src/renderer/src/components/native-chat/use-native-chat-provisional-launch.ts index 43de8d07570..09a478bbb58 100644 --- a/src/renderer/src/components/native-chat/use-native-chat-provisional-launch.ts +++ b/src/renderer/src/components/native-chat/use-native-chat-provisional-launch.ts @@ -7,7 +7,7 @@ import { useStructuredAgentSessionLaunchLifecycle } from '@/lib/structured-agent-session-launch' import { getStructuredAgentSessionLaunchSelection } from '@/lib/structured-agent-session-launch-options' -import { subscribeStructuredAgentLaunchStatus } from '@/lib/structured-agent-session-launch-registry' +import { subscribeStructuredAgentLaunchStatus } from '@/lib/agent-session/launch/structured-agent-session-launch-registry' import { relaunchFailedStructuredAgentSessionWithMessage } from '@/lib/structured-agent-session-launch-message' import { toRuntimeWorktreeSelector } from '@/runtime/runtime-worktree-selector' diff --git a/src/renderer/src/components/right-sidebar/ai-vault-session-resume-here.ts b/src/renderer/src/components/right-sidebar/ai-vault-session-resume-here.ts index f5c950273ab..27282671277 100644 --- a/src/renderer/src/components/right-sidebar/ai-vault-session-resume-here.ts +++ b/src/renderer/src/components/right-sidebar/ai-vault-session-resume-here.ts @@ -20,7 +20,7 @@ import { } from '../../../../shared/structured-agent-cli-conversation-adoption' import { structuredAgentSessionPaneKey } from '../../../../shared/structured-agent-session-projection' import type { Tab } from '../../../../shared/tab-types' -import { getStructuredAgentSessionLaunchLifecycle } from '@/lib/structured-agent-session-launch-registry' +import { getStructuredAgentSessionLaunchLifecycle } from '@/lib/agent-session/launch/structured-agent-session-launch-registry' import { structuredLaunchConversationOwner } from '@/lib/structured-agent-session-launch-failure' import { structuredAgentSessionTargetForHost } from '@/runtime/structured-agent-session-owner' import { getStructuredAgentSessionStatusFeed } from '@/runtime/structured-agent-session-status-feed' diff --git a/src/renderer/src/components/tab-bar/QuickLaunchButton.launch-status.test.tsx b/src/renderer/src/components/tab-bar/QuickLaunchButton.launch-status.test.tsx index 093e56e834d..c2e6a43d6a9 100644 --- a/src/renderer/src/components/tab-bar/QuickLaunchButton.launch-status.test.tsx +++ b/src/renderer/src/components/tab-bar/QuickLaunchButton.launch-status.test.tsx @@ -3,7 +3,7 @@ import type { ReactNode } from 'react' import { cleanup, fireEvent, render, renderHook } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { StructuredLaunchState } from '@/lib/structured-agent-session-launch-registry' +import type { StructuredLaunchState } from '@/lib/agent-session/launch/structured-agent-session-launch-registry' import type { StructuredLaunchAttempt } from '@/lib/structured-agent-session-launch-request' import type * as WorktreeFixtures from '@/store/slices/worktrees-slice-test-fixtures' @@ -72,7 +72,7 @@ import * as menuRows from './use-new-tab-agent-menu-rows' import { resetStructuredAgentLaunchRegistryForTests, setStructuredLaunchState -} from '@/lib/structured-agent-session-launch-registry' +} from '@/lib/agent-session/launch/structured-agent-session-launch-registry' const WORKTREE_ID = 'worktree-1' diff --git a/src/renderer/src/components/tab-bar/cli-chat-resume-run.test.ts b/src/renderer/src/components/tab-bar/cli-chat-resume-run.test.ts index f1c50273ec8..646c30fab6b 100644 --- a/src/renderer/src/components/tab-bar/cli-chat-resume-run.test.ts +++ b/src/renderer/src/components/tab-bar/cli-chat-resume-run.test.ts @@ -74,7 +74,7 @@ import { readStructuredAgentLaunchRecord, writeStructuredAgentLaunchRecord, resetStructuredAgentLaunchPersistenceForTests -} from '@/lib/structured-agent-session-launch-persistence' +} from '@/lib/agent-session/launch/structured-agent-session-launch-persistence' import { reserveStructuredLaunchSlot, restoreStructuredLaunchSurfaces, @@ -94,7 +94,7 @@ import { runCliChatResume } from './cli-chat-resume-run' import { resetStructuredAgentLaunchRegistryForTests, structuredLaunchStates -} from '@/lib/structured-agent-session-launch-registry' +} from '@/lib/agent-session/launch/structured-agent-session-launch-registry' import { isEmptyWorkspaceDefaultSurfacePending } from '@/lib/empty-workspace-default-surface-claims' import { clearWebSessionFocusIntent, diff --git a/src/renderer/src/lib/agent-message-send.test.ts b/src/renderer/src/lib/agent-message-send.test.ts index 3178004d797..9787d8f5f0c 100644 --- a/src/renderer/src/lib/agent-message-send.test.ts +++ b/src/renderer/src/lib/agent-message-send.test.ts @@ -24,7 +24,7 @@ vi.mock('@/runtime/structured-agent-session-owner', () => ({ vi.mock('./structured-agent-session-launch-message', () => ({ relaunchFailedStructuredAgentSessionWithMessage: mocks.relaunch })) -vi.mock('./structured-agent-session-launch-registry', () => ({ +vi.mock('./agent-session/launch/structured-agent-session-launch-registry', () => ({ getStructuredAgentSessionLaunchLifecycle: () => mocks.launch.lifecycle })) vi.mock('./active-agent-note-send', () => ({ sendNotesToActiveAgentSession: vi.fn() })) diff --git a/src/renderer/src/lib/agent-message-send.ts b/src/renderer/src/lib/agent-message-send.ts index 3c3961f6ae1..20ae69f3c2f 100644 --- a/src/renderer/src/lib/agent-message-send.ts +++ b/src/renderer/src/lib/agent-message-send.ts @@ -2,7 +2,7 @@ import type { ActiveAgentNotesSendResult } from './active-agent-note-send-result import type { AgentMessageTarget } from './agent-message-target' import { sendNotesToActiveAgentSession } from './active-agent-note-send' import { relaunchFailedStructuredAgentSessionWithMessage } from './structured-agent-session-launch-message' -import { getStructuredAgentSessionLaunchLifecycle } from './structured-agent-session-launch-registry' +import { getStructuredAgentSessionLaunchLifecycle } from './agent-session/launch/structured-agent-session-launch-registry' import { sendStructuredAgentSessionMessage } from '@/components/native-chat/structured-agent-session-message-sender' import { structuredAgentSessionTargetForTab } from '@/runtime/structured-agent-session-owner' import { useAppStore } from '@/store' diff --git a/src/renderer/src/lib/agent-session-launch-plan.ts b/src/renderer/src/lib/agent-session-launch-plan.ts index 897b6727703..2b3f58f24ec 100644 --- a/src/renderer/src/lib/agent-session-launch-plan.ts +++ b/src/renderer/src/lib/agent-session-launch-plan.ts @@ -1,4 +1,4 @@ -import type { StructuredLaunchSurfaceAddress } from './structured-agent-session-launch-record' +import type { StructuredLaunchSurfaceAddress } from './agent-session/launch/structured-agent-session-launch-record' import type { StructuredAgentSessionResumeSource } from '../../../shared/structured-agent-session-create' import type { TuiAgent } from '../../../shared/tui-agent' import { diff --git a/src/renderer/src/lib/structured-agent-session-launch-holders.ts b/src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-holders.ts similarity index 95% rename from src/renderer/src/lib/structured-agent-session-launch-holders.ts rename to src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-holders.ts index 676d1bfae5c..1345d67c6b8 100644 --- a/src/renderer/src/lib/structured-agent-session-launch-holders.ts +++ b/src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-holders.ts @@ -3,7 +3,7 @@ import { structuredLaunchStates, type StructuredLaunchState } from './structured-agent-session-launch-registry' -import type { AgentLaunchRequestId } from './agent-launch-request-id' +import type { AgentLaunchRequestId } from '../../agent-launch-request-id' // Coalesce re-delivery of one action only. Other actions and failed/unconfirmed retries open independent chats/text; conversation resumes still hold because hosts refuse duplicate adoption. function holdsLaunchIdentity( diff --git a/src/renderer/src/lib/structured-agent-session-launch-outcome-tracking.ts b/src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-outcome-tracking.ts similarity index 88% rename from src/renderer/src/lib/structured-agent-session-launch-outcome-tracking.ts rename to src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-outcome-tracking.ts index e67e2da7fb3..6bfa681d5c1 100644 --- a/src/renderer/src/lib/structured-agent-session-launch-outcome-tracking.ts +++ b/src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-outcome-tracking.ts @@ -1,23 +1,23 @@ -import { useAppStore } from '@/store' +import { useAppStore } from '@/store/index' import { removeStructuredLaunchSlot } from './structured-agent-session-launch-slot' import { materializeStructuredLaunchSurface, findStructuredLaunchTab -} from './structured-agent-session-launch-surface' -import { StructuredAgentSessionCreateRefusalError } from '@/lib/launch-structured-agent-session' +} from '../../structured-agent-session-launch-surface' +import { StructuredAgentSessionCreateRefusalError } from '@/lib/structured-agent-session-launch-errors' import { settleStructuredLaunchCallers, structuredLaunchCallersHavePendingWork } from '@/lib/structured-agent-session-launch-callers' -import type { StructuredAgentLaunchReceipt } from '@/lib/structured-agent-session-launch-recovery' -import { structuredLaunchFailure } from './structured-agent-session-launch-failure' +import type { StructuredAgentLaunchReceipt } from '@/lib/agent-session/launch/structured-agent-session-launch-recovery' +import { structuredLaunchFailure } from '../../structured-agent-session-launch-failure' import { deleteStructuredLaunchStateIfCurrent, notifyStructuredLaunchListeners, retireStructuredAgentSessionLaunchCancellationTombstone, type StructuredLaunchState } from './structured-agent-session-launch-registry' -import { recordUnlistedCreatedChat } from './structured-agent-session-unlisted-created-chats' +import { recordUnlistedCreatedChat } from '../../structured-agent-session-unlisted-created-chats' function cleanupLaunchState(state: StructuredLaunchState): void { if (deleteStructuredLaunchStateIfCurrent(state)) { diff --git a/src/renderer/src/lib/structured-agent-session-launch-persistence.test.ts b/src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-persistence.test.ts similarity index 97% rename from src/renderer/src/lib/structured-agent-session-launch-persistence.test.ts rename to src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-persistence.test.ts index 9872e63785e..592b696cc2e 100644 --- a/src/renderer/src/lib/structured-agent-session-launch-persistence.test.ts +++ b/src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-persistence.test.ts @@ -9,10 +9,10 @@ import { retireAbsentStructuredAgentLaunchCancellationTombstonesPersisted, retireStructuredAgentLaunchCancellationTombstonePersisted, writeStructuredAgentLaunchRecord, - markStructuredAgentLaunchCancelledPersisted, - structuredAgentLaunchRecordFor + markStructuredAgentLaunchCancelledPersisted } from './structured-agent-session-launch-persistence' -import type { StructuredAgentSessionLaunchIntent } from './launch-structured-agent-session' +import { structuredAgentLaunchRecordFor } from './structured-agent-session-launch-record' +import type { StructuredAgentSessionLaunchIntent } from '../../launch-structured-agent-session' const SERVER = 'runtime:server-1' const TOMBSTONES_KEY = 'orca:structuredAgentLaunchCancelledSessions:v1' diff --git a/src/renderer/src/lib/structured-agent-session-launch-persistence.ts b/src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-persistence.ts similarity index 94% rename from src/renderer/src/lib/structured-agent-session-launch-persistence.ts rename to src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-persistence.ts index 65e2726eb83..5a524da387e 100644 --- a/src/renderer/src/lib/structured-agent-session-launch-persistence.ts +++ b/src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-persistence.ts @@ -1,20 +1,16 @@ -import { structuredAgentSessionTabId } from '../../../shared/structured-agent-session-projection' +import { structuredAgentSessionTabId } from '../../../../../shared/structured-agent-session-projection' import { validRecord, parseStructuredLaunchSurfaceAddress, type StructuredAgentLaunchPersistedRecord } from './structured-agent-session-launch-record' -export { - structuredAgentLaunchRecordFor, - type StructuredAgentLaunchPersistedRecord, - type StructuredAgentLaunchPersistedLifecycle -} from './structured-agent-session-launch-record' -import { parseStructuredLaunchSeedOptions } from '../../../shared/native-chat-session-option-defaults' + +import { parseStructuredLaunchSeedOptions } from '../../../../../shared/native-chat-session-option-defaults' import { LOCAL_EXECUTION_HOST_ID, parseExecutionHostId, type ExecutionHostId -} from '../../../shared/execution-host' +} from '../../../../../shared/execution-host' const LAUNCH_STORAGE_KEY = 'orca:structuredAgentLaunches:v1' const TOMBSTONE_STORAGE_KEY = 'orca:structuredAgentLaunchCancelledSessions:v1' diff --git a/src/renderer/src/lib/structured-agent-session-launch-prompt-outcome.ts b/src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-prompt-outcome.ts similarity index 91% rename from src/renderer/src/lib/structured-agent-session-launch-prompt-outcome.ts rename to src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-prompt-outcome.ts index aba3d5db48a..143c6026ce9 100644 --- a/src/renderer/src/lib/structured-agent-session-launch-prompt-outcome.ts +++ b/src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-prompt-outcome.ts @@ -1,6 +1,6 @@ -import type { StructuredLaunchCaller } from './structured-agent-session-launch-callers' +import type { StructuredLaunchCaller } from '../../structured-agent-session-launch-callers' import type { StructuredAgentLaunchReceipt } from './structured-agent-session-launch-recovery' -import { STRUCTURED_AGENT_SESSION_SEND_BUDGET_MS } from '@/components/native-chat/structured-agent-session-message-sender' +import { STRUCTURED_AGENT_SESSION_SEND_BUDGET_MS } from '@/components/native-chat/structured-agent-session-send-runtime' import { notifyStructuredLaunchListeners, type StructuredLaunchState diff --git a/src/renderer/src/lib/structured-agent-session-launch-publication-confirmation.ts b/src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-publication-confirmation.ts similarity index 92% rename from src/renderer/src/lib/structured-agent-session-launch-publication-confirmation.ts rename to src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-publication-confirmation.ts index f172a83e7e4..0c9214a8165 100644 --- a/src/renderer/src/lib/structured-agent-session-launch-publication-confirmation.ts +++ b/src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-publication-confirmation.ts @@ -1,5 +1,5 @@ import { recoverPublishedSessionReceipt } from './structured-agent-session-launch-recovery' -import { publishStructuredLaunchCreateOptions } from './structured-agent-session-launch-create-message' +import { publishStructuredLaunchCreateOptions } from '../../structured-agent-session-launch-create-message' import { trackLaunchSettlement } from './structured-agent-session-launch-outcome-tracking' import { trackStructuredLaunchConfirmationDeadline } from './structured-agent-session-launch-prompt-outcome' import { restorePersistedStructuredLaunchState } from './structured-agent-session-launch-reload' diff --git a/src/renderer/src/lib/structured-agent-session-launch-publication.ts b/src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-publication.ts similarity index 92% rename from src/renderer/src/lib/structured-agent-session-launch-publication.ts rename to src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-publication.ts index 2bbbee1be7e..3700d07c2e6 100644 --- a/src/renderer/src/lib/structured-agent-session-launch-publication.ts +++ b/src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-publication.ts @@ -1,5 +1,5 @@ -import type { ExecutionHostId } from '../../../shared/execution-host' -import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-types' +import type { ExecutionHostId } from '../../../../../shared/execution-host' +import type { RuntimeMobileSessionTabsResult } from '../../../../../shared/runtime-session-contracts' import { deleteStructuredAgentLaunchRecord } from './structured-agent-session-launch-persistence' import { getPersistedStructuredAgentLaunchRecord, @@ -7,7 +7,7 @@ import { hasStructuredAgentSessionLaunchCancellationTombstone, notifyStructuredLaunchListeners } from './structured-agent-session-launch-registry' -import { forgetUnlistedCreatedChat } from './structured-agent-session-unlisted-created-chats' +import { forgetUnlistedCreatedChat } from '../../structured-agent-session-unlisted-created-chats' function confirmStructuredLaunchFirstMessagePublication( worktreeId: string, diff --git a/src/renderer/src/lib/structured-agent-session-launch-record.test.ts b/src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-record.test.ts similarity index 100% rename from src/renderer/src/lib/structured-agent-session-launch-record.test.ts rename to src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-record.test.ts diff --git a/src/renderer/src/lib/structured-agent-session-launch-record.ts b/src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-record.ts similarity index 91% rename from src/renderer/src/lib/structured-agent-session-launch-record.ts rename to src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-record.ts index e82496a3d58..ccb7df32673 100644 --- a/src/renderer/src/lib/structured-agent-session-launch-record.ts +++ b/src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-record.ts @@ -1,13 +1,13 @@ -import { isTuiAgent } from '../../../shared/tui-agent-config' -import type { TuiAgent } from '../../../shared/tui-agent' +import { isTuiAgent } from '../../../../../shared/tui-agent-config' +import type { TuiAgent } from '../../../../../shared/tui-agent' import type { StructuredAgentSessionFirstMessage, StructuredAgentSessionResumeSource -} from '../../../shared/structured-agent-session-create' -import { isAgentSessionOptions } from '../../../shared/agent-session-record' -import { SendBodyStructure } from '../../../shared/rpc-contract/structured-agent-session-message-params' -import { parseExecutionHostId, type ExecutionHostId } from '../../../shared/execution-host' -import type { StructuredAgentSessionLaunchIntent } from './launch-structured-agent-session' +} from '../../../../../shared/structured-agent-session-create' +import { isAgentSessionOptions } from '../../../../../shared/agent-session-record' +import { SendBodyStructure } from '../../../../../shared/rpc-contract/structured-agent-session-message-params' +import { parseExecutionHostId, type ExecutionHostId } from '../../../../../shared/execution-host' +import type { StructuredAgentSessionLaunchIntent } from '../../launch-structured-agent-session' export type StructuredAgentLaunchPersistedLifecycle = 'pending' | 'visibility-unknown' | 'failed' diff --git a/src/renderer/src/lib/structured-agent-session-launch-recovery.ts b/src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-recovery.ts similarity index 91% rename from src/renderer/src/lib/structured-agent-session-launch-recovery.ts rename to src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-recovery.ts index 93876236699..8e5493a807f 100644 --- a/src/renderer/src/lib/structured-agent-session-launch-recovery.ts +++ b/src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-recovery.ts @@ -1,17 +1,17 @@ -import type { AgentSessionHistoryResult } from '../../../shared/agent-session-wire' +import type { AgentSessionHistoryResult } from '../../../../../shared/agent-session-wire' import type { AgentJournalCursor, AgentJournalSubmission -} from '../../../shared/agent-session-journal-types' +} from '../../../../../shared/agent-session-journal-types' import { launchStructuredAgentSession, - StructuredAgentSessionCreateRefusalError, - type StructuredAgentSessionLaunchIntent, type StructuredLaunchHostSeedListener -} from '@/lib/launch-structured-agent-session' +} from '@/lib/structured-agent-session-launch-create-call' +import { StructuredAgentSessionCreateRefusalError } from '@/lib/structured-agent-session-launch-errors' +import type { StructuredAgentSessionLaunchIntent } from '@/lib/launch-structured-agent-session' import { callStructuredAgentSession } from '@/runtime/structured-agent-session-client' import { readStructuredSessionTabInventory } from '@/runtime/structured-session-tab-inventory' -import { publishStructuredAgentSessionCreateHydration } from './structured-agent-session-create-hydration' +import { publishStructuredAgentSessionCreateHydration } from '../../structured-agent-session-create-hydration' export type StructuredAgentLaunchReceipt = { sessionId: string diff --git a/src/renderer/src/lib/structured-agent-session-launch-registry.ts b/src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-registry.ts similarity index 92% rename from src/renderer/src/lib/structured-agent-session-launch-registry.ts rename to src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-registry.ts index 60c3fc0173c..79230be11af 100644 --- a/src/renderer/src/lib/structured-agent-session-launch-registry.ts +++ b/src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-registry.ts @@ -1,22 +1,22 @@ import { useSyncExternalStore } from 'react' -import type { TuiAgent } from '../../../shared/tui-agent' -import type { StructuredLaunchFailure } from './structured-agent-session-launch-failure' -import type { StructuredAgentSessionResumeSource } from '../../../shared/structured-agent-session-create' -import { LOCAL_EXECUTION_HOST_ID, type ExecutionHostId } from '../../../shared/execution-host' +import type { TuiAgent } from '../../../../../shared/tui-agent' +import type { StructuredLaunchFailure } from '../../structured-agent-session-launch-failure' +import type { StructuredAgentSessionResumeSource } from '../../../../../shared/structured-agent-session-create' +import { LOCAL_EXECUTION_HOST_ID, type ExecutionHostId } from '../../../../../shared/execution-host' import type { StructuredLaunchRecoveryState } from './structured-agent-session-launch-recovery' -import type { StructuredLaunchSelection } from './structured-agent-session-launch-options' +import type { StructuredLaunchSelection } from '../../structured-agent-session-launch-options' import type { StructuredAgentLaunchOptions, StructuredLaunchCallerGroup -} from './structured-agent-session-launch-callers' +} from '../../structured-agent-session-launch-callers' import { deleteStructuredAgentLaunchRecord, hasStructuredAgentLaunchCancellationTombstonePersisted, readStructuredAgentLaunchRecord, - structuredAgentLaunchRecordFor, - writeStructuredAgentLaunchRecord, - type StructuredAgentLaunchPersistedRecord + writeStructuredAgentLaunchRecord } from './structured-agent-session-launch-persistence' +import type { StructuredAgentLaunchPersistedRecord } from './structured-agent-session-launch-record' +import { structuredAgentLaunchRecordFor } from './structured-agent-session-launch-record' import { removeStructuredLaunchSlot, type StructuredLaunchSlotOwner @@ -26,12 +26,12 @@ import { resetStructuredAgentLaunchCancellationForTests, retireAbsentStructuredAgentLaunchCancellations, retireStructuredAgentLaunchCancellation -} from './launch-cancel-tombstones-compat/structured-agent-session-launch-cancellation' -import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../shared/layout-owner-switch' +} from '../../launch-cancel-tombstones-compat/structured-agent-session-launch-cancellation' +import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../../../shared/layout-owner-switch' import { cancelStructuredAgentLaunchOnLocalHost, resetStructuredAgentLocalLaunchCancelsForTests -} from './structured-agent-session-local-launch-cancel' +} from '../../structured-agent-session-local-launch-cancel' export type StructuredLaunchState = StructuredLaunchRecoveryState & { identity: string diff --git a/src/renderer/src/lib/structured-agent-session-launch-reload.test.ts b/src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-reload.test.ts similarity index 83% rename from src/renderer/src/lib/structured-agent-session-launch-reload.test.ts rename to src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-reload.test.ts index e4cd6fd2caf..9b60845c107 100644 --- a/src/renderer/src/lib/structured-agent-session-launch-reload.test.ts +++ b/src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-reload.test.ts @@ -1,9 +1,10 @@ // @vitest-environment happy-dom +import type * as LaunchErrors from '@/lib/structured-agent-session-launch-errors' import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-session-contracts' +import type { RuntimeMobileSessionTabsResult } from '../../../../../shared/runtime-session-contracts' import type { StructuredAgentSessionLaunchIntent } from '@/lib/launch-structured-agent-session' -import type * as RecoveryModule from '@/lib/structured-agent-session-launch-recovery' +import type * as RecoveryModule from '@/lib/agent-session/launch/structured-agent-session-launch-recovery' const mocks = vi.hoisted(() => ({ abandonIntent: vi.fn(), @@ -16,21 +17,35 @@ const mocks = vi.hoisted(() => ({ refresh: vi.fn() })) -vi.mock('@/lib/launch-structured-agent-session', () => { +const launchErrorMocks = vi.hoisted(() => { class StructuredAgentSessionCreateRefusalError extends Error {} + return { StructuredAgentSessionCreateRefusalError } +}) + +vi.mock('@/lib/structured-agent-session-launch-errors', async () => ({ + ...(await vi.importActual('@/lib/structured-agent-session-launch-errors')), + ...launchErrorMocks +})) + +vi.mock('@/lib/structured-agent-session-launch-create-call', () => ({ + launchStructuredAgentSession: mocks.launch +})) + +vi.mock('@/lib/launch-structured-agent-session', () => { return { abandonStructuredAgentSessionLaunchIntent: mocks.abandonIntent, createStructuredAgentSessionLaunchIntent: vi.fn(), launchStructuredAgentSession: mocks.launch, restoreStructuredAgentSessionLaunchIntent: mocks.restoreIntent, retryStructuredAgentSessionLaunchIntent: mocks.retryIntent, - StructuredAgentSessionCreateRefusalError + StructuredAgentSessionCreateRefusalError: + launchErrorMocks.StructuredAgentSessionCreateRefusalError } }) -vi.mock('@/lib/structured-agent-session-launch-recovery', async () => { +vi.mock('@/lib/agent-session/launch/structured-agent-session-launch-recovery', async () => { const actual = await vi.importActual( - '@/lib/structured-agent-session-launch-recovery' + '@/lib/agent-session/launch/structured-agent-session-launch-recovery' ) return { ...actual, launchAndReconcile: vi.fn(actual.launchAndReconcile) } }) @@ -60,7 +75,7 @@ vi.mock('@/lib/agent-catalog', () => ({ getAgentLabel: (agent: string) => (agent === 'codex' ? 'Codex' : 'Claude') })) -import { retryStructuredAgentSessionLaunch } from './structured-agent-session-launch' +import { retryStructuredAgentSessionLaunch } from '../../structured-agent-session-launch' import { resetStructuredAgentLaunchPersistenceForTests } from './structured-agent-session-launch-persistence' import { resetStructuredAgentLaunchRegistryForTests } from './structured-agent-session-launch-registry' diff --git a/src/renderer/src/lib/structured-agent-session-launch-reload.ts b/src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-reload.ts similarity index 89% rename from src/renderer/src/lib/structured-agent-session-launch-reload.ts rename to src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-reload.ts index 0b76320a60b..43eb8740a7a 100644 --- a/src/renderer/src/lib/structured-agent-session-launch-reload.ts +++ b/src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-reload.ts @@ -1,19 +1,19 @@ import { restoreStructuredAgentSessionLaunchIntent, - StructuredAgentSessionOwnerUnresolvedError, type StructuredAgentSessionLaunchIntent -} from './launch-structured-agent-session' +} from '../../launch-structured-agent-session' +import { StructuredAgentSessionOwnerUnresolvedError } from '../../structured-agent-session-launch-errors' import { createStructuredLaunchCallerGroup, type StructuredLaunchCallerGroup -} from './structured-agent-session-launch-callers' +} from '../../structured-agent-session-launch-callers' import { getPersistedStructuredAgentLaunchRecord, setStructuredLaunchState, structuredLaunchIdentity, type StructuredLaunchState } from './structured-agent-session-launch-registry' -import { initialStructuredLaunchSelection } from './structured-agent-session-launch-options' +import { initialStructuredLaunchSelection } from '../../structured-agent-session-launch-options' export function restorePersistedStructuredLaunchState( worktreeId: string, diff --git a/src/renderer/src/lib/structured-agent-session-launch-slot.ts b/src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-slot.ts similarity index 88% rename from src/renderer/src/lib/structured-agent-session-launch-slot.ts rename to src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-slot.ts index c7fbc8a7adf..1fc496d992b 100644 --- a/src/renderer/src/lib/structured-agent-session-launch-slot.ts +++ b/src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-slot.ts @@ -1,5 +1,5 @@ import type { TabsSlice } from '@/store/slices/tabs/tabs-slice-contract' -import { structuredAgentSessionTabId } from '../../../shared/structured-agent-session-projection' +import { structuredAgentSessionTabId } from '../../../../../shared/structured-agent-session-projection' export type StructuredLaunchSlotOwner = Pick< TabsSlice, diff --git a/src/renderer/src/lib/structured-agent-session-launch-unconfirmed-or-retried.test.ts b/src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-unconfirmed-or-retried.test.ts similarity index 91% rename from src/renderer/src/lib/structured-agent-session-launch-unconfirmed-or-retried.test.ts rename to src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-unconfirmed-or-retried.test.ts index 2066ee816e8..17dcbf81c5c 100644 --- a/src/renderer/src/lib/structured-agent-session-launch-unconfirmed-or-retried.test.ts +++ b/src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-unconfirmed-or-retried.test.ts @@ -1,7 +1,8 @@ // @vitest-environment happy-dom +import type * as LaunchErrors from '@/lib/structured-agent-session-launch-errors' import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-session-contracts' +import type { RuntimeMobileSessionTabsResult } from '../../../../../shared/runtime-session-contracts' import type { StructuredAgentSessionLaunchIntent } from '@/lib/launch-structured-agent-session' const mocks = vi.hoisted(() => ({ @@ -18,15 +19,29 @@ const mocks = vi.hoisted(() => ({ vi.mock('sonner', () => ({ toast: { error: mocks.toastError, message: vi.fn() } })) -vi.mock('@/lib/launch-structured-agent-session', () => { +const launchErrorMocks = vi.hoisted(() => { class StructuredAgentSessionCreateRefusalError extends Error {} + return { StructuredAgentSessionCreateRefusalError } +}) + +vi.mock('@/lib/structured-agent-session-launch-errors', async () => ({ + ...(await vi.importActual('@/lib/structured-agent-session-launch-errors')), + ...launchErrorMocks +})) + +vi.mock('@/lib/structured-agent-session-launch-create-call', () => ({ + launchStructuredAgentSession: mocks.launch +})) + +vi.mock('@/lib/launch-structured-agent-session', () => { return { createStructuredAgentSessionLaunchIntent: mocks.createIntent, retryStructuredAgentSessionLaunchIntent: mocks.retryIntent, restoreStructuredAgentSessionLaunchIntent: mocks.restoreIntent, abandonStructuredAgentSessionLaunchIntent: mocks.abandonIntent, launchStructuredAgentSession: mocks.launch, - StructuredAgentSessionCreateRefusalError + StructuredAgentSessionCreateRefusalError: + launchErrorMocks.StructuredAgentSessionCreateRefusalError } }) @@ -62,7 +77,7 @@ vi.mock('@/lib/focus-terminal-tab-surface', () => ({ focusTerminalTabSurface: vi // The structured route hands the launch's own delivery result back unchanged. vi.mock('@/lib/launch-agent-in-new-tab', async () => { - const launch = await import('./structured-agent-session-launch') + const launch = await import('../../structured-agent-session-launch') return { launchAgentInNewTab: (args: { requestId: string @@ -85,17 +100,19 @@ vi.mock('@/lib/launch-agent-in-new-tab', async () => { } }) -import { StructuredAgentSessionCreateRefusalError } from '@/lib/launch-structured-agent-session' +import { StructuredAgentSessionCreateRefusalError } from '@/lib/structured-agent-session-launch-errors' import { refreshLocalStructuredSessionTabs } from '@/runtime/local-structured-session-tabs-sync/inventory-refresh' import { runSourceControlAgentActionStart } from '@/components/right-sidebar/runSourceControlAgentActionStart' +import { getStructuredAgentLaunchStatus } from '../../structured-agent-session-launch-status' import { - getStructuredAgentLaunchStatus, getStructuredAgentSessionLaunchLifecycle, + resetStructuredAgentLaunchRegistryForTests +} from './structured-agent-session-launch-registry' +import { retryStructuredAgentSessionLaunch, startStructuredAgentLaunch -} from './structured-agent-session-launch' +} from '../../structured-agent-session-launch' import { resetStructuredAgentLaunchPersistenceForTests } from './structured-agent-session-launch-persistence' -import { resetStructuredAgentLaunchRegistryForTests } from './structured-agent-session-launch-registry' const WORKTREE_ID = 'wt-unconfirmed-or-retried' diff --git a/src/renderer/src/lib/structured-agent-session-launch-unconfirmed-recheck.ts b/src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-unconfirmed-recheck.ts similarity index 87% rename from src/renderer/src/lib/structured-agent-session-launch-unconfirmed-recheck.ts rename to src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-unconfirmed-recheck.ts index f157ee0ef6d..5f4d165c693 100644 --- a/src/renderer/src/lib/structured-agent-session-launch-unconfirmed-recheck.ts +++ b/src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-unconfirmed-recheck.ts @@ -1,6 +1,6 @@ -import type { ExecutionHostId } from '../../../shared/execution-host' -import { useAppStore } from '@/store' -import { retryStructuredAgentSessionLaunch } from './structured-agent-session-launch' +import type { ExecutionHostId } from '../../../../../shared/execution-host' +import { useAppStore } from '@/store/index' +import { retryStructuredAgentSessionLaunch } from '../../structured-agent-session-launch' import { getStructuredAgentSessionLaunchLifecycle, getStructuredAgentSessionLaunchOwner, diff --git a/src/renderer/src/lib/agent-session/structured-agent-session-provisional-tab.test.ts b/src/renderer/src/lib/agent-session/structured-agent-session-provisional-tab.test.ts index 92adf7d2cbd..be96646180c 100644 --- a/src/renderer/src/lib/agent-session/structured-agent-session-provisional-tab.test.ts +++ b/src/renderer/src/lib/agent-session/structured-agent-session-provisional-tab.test.ts @@ -11,7 +11,7 @@ import { useNativeChatProvisionalLaunch } from '@/components/native-chat/use-nat import { getStructuredAgentSessionLaunchFailure, resetStructuredAgentLaunchRegistryForTests -} from '../structured-agent-session-launch-registry' +} from './launch/structured-agent-session-launch-registry' import { structuredSessionNotices } from '@/components/native-chat/native-chat-structured-session-notices' import type { AgentTerminalLaunchCompletion } from '../structured-agent-session-launch-admission' import { diff --git a/src/renderer/src/lib/launch-agent-structured-chat-guard.test.ts b/src/renderer/src/lib/launch-agent-structured-chat-guard.test.ts index efab6f4c467..ccd642c6b29 100644 --- a/src/renderer/src/lib/launch-agent-structured-chat-guard.test.ts +++ b/src/renderer/src/lib/launch-agent-structured-chat-guard.test.ts @@ -1,5 +1,6 @@ // @vitest-environment happy-dom +import type * as LaunchErrors from '@/lib/structured-agent-session-launch-errors' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' const mockCreateTab = vi.fn() @@ -150,22 +151,44 @@ vi.mock('@/runtime/web-runtime-session-environment', () => ({ vi.mock('../../../shared/terminal-surface-id', () => ({ isWebTerminalSurfaceTabId: vi.fn(() => false) })) -vi.mock('@/lib/launch-structured-agent-session', () => { +const launchErrorMocks = vi.hoisted(() => { class StructuredAgentSessionCreateRefusalError extends Error {} class StructuredAgentSessionHostDeclinedError extends StructuredAgentSessionCreateRefusalError {} class StructuredAgentSessionHostUnreachableError extends StructuredAgentSessionCreateRefusalError {} class StructuredAgentSessionOwnerUnresolvedError extends Error {} return { - createStructuredAgentSessionLaunchIntent: mockCreateStructuredCodexSessionLaunchIntent, - abandonStructuredAgentSessionLaunchIntent: mockAbandonStructuredAgentSessionLaunchIntent, - retryStructuredAgentSessionLaunchIntent: mockRetryStructuredAgentSessionLaunchIntent, - launchStructuredAgentSession: mockLaunchStructuredCodexSession, StructuredAgentSessionCreateRefusalError, StructuredAgentSessionHostDeclinedError, StructuredAgentSessionHostUnreachableError, StructuredAgentSessionOwnerUnresolvedError } }) + +vi.mock('@/lib/structured-agent-session-launch-errors', async () => ({ + ...(await vi.importActual('@/lib/structured-agent-session-launch-errors')), + ...launchErrorMocks +})) + +vi.mock('@/lib/structured-agent-session-launch-create-call', () => ({ + launchStructuredAgentSession: mockLaunchStructuredCodexSession +})) + +vi.mock('@/lib/launch-structured-agent-session', () => { + return { + createStructuredAgentSessionLaunchIntent: mockCreateStructuredCodexSessionLaunchIntent, + abandonStructuredAgentSessionLaunchIntent: mockAbandonStructuredAgentSessionLaunchIntent, + retryStructuredAgentSessionLaunchIntent: mockRetryStructuredAgentSessionLaunchIntent, + launchStructuredAgentSession: mockLaunchStructuredCodexSession, + StructuredAgentSessionCreateRefusalError: + launchErrorMocks.StructuredAgentSessionCreateRefusalError, + StructuredAgentSessionHostDeclinedError: + launchErrorMocks.StructuredAgentSessionHostDeclinedError, + StructuredAgentSessionHostUnreachableError: + launchErrorMocks.StructuredAgentSessionHostUnreachableError, + StructuredAgentSessionOwnerUnresolvedError: + launchErrorMocks.StructuredAgentSessionOwnerUnresolvedError + } +}) vi.mock('@/runtime/local-structured-session-tabs-sync/inventory-refresh', () => ({ refreshLocalStructuredSessionTabs: mockRefreshLocalStructuredSessionTabs })) diff --git a/src/renderer/src/lib/launch-cancel-tombstones-compat/structured-agent-session-launch-cancellation.test.ts b/src/renderer/src/lib/launch-cancel-tombstones-compat/structured-agent-session-launch-cancellation.test.ts index 8e67b2f1a9c..25d66729e1f 100644 --- a/src/renderer/src/lib/launch-cancel-tombstones-compat/structured-agent-session-launch-cancellation.test.ts +++ b/src/renderer/src/lib/launch-cancel-tombstones-compat/structured-agent-session-launch-cancellation.test.ts @@ -1,19 +1,19 @@ // @vitest-environment happy-dom import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { StructuredLaunchSlotOwner } from '@/lib/structured-agent-session-launch-slot' +import type { StructuredLaunchSlotOwner } from '@/lib/agent-session/launch/structured-agent-session-launch-slot' import type { RuntimeMobileSessionTabsResult } from '../../../../shared/runtime-types' import { suppressCancelledStructuredSessionTabs } from '@/runtime/structured-agent-session-tab-retirement' -import type { StructuredLaunchState } from '../structured-agent-session-launch-registry' +import type { StructuredLaunchState } from '../agent-session/launch/structured-agent-session-launch-registry' import { hasStructuredAgentSessionLaunchCancellationTombstone, markStructuredAgentSessionLaunchCancelled, retireAbsentStructuredAgentSessionLaunchCancellationTombstones, resetStructuredAgentLaunchRegistryForTests, setStructuredLaunchState -} from '../structured-agent-session-launch-registry' +} from '../agent-session/launch/structured-agent-session-launch-registry' import { beginStructuredAgentSessionAuthoritativeInventory } from './structured-agent-session-launch-cancellation' -import { resetStructuredAgentLaunchPersistenceForTests } from '../structured-agent-session-launch-persistence' +import { resetStructuredAgentLaunchPersistenceForTests } from '../agent-session/launch/structured-agent-session-launch-persistence' import { refreshLocalStructuredSessionTabs } from '@/runtime/local-structured-session-tabs-sync/inventory-refresh' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../../shared/layout-owner-switch' import type { ExecutionHostId } from '../../../../shared/execution-host' diff --git a/src/renderer/src/lib/launch-cancel-tombstones-compat/structured-agent-session-launch-cancellation.ts b/src/renderer/src/lib/launch-cancel-tombstones-compat/structured-agent-session-launch-cancellation.ts index a748f87cca7..3c78941be1d 100644 --- a/src/renderer/src/lib/launch-cancel-tombstones-compat/structured-agent-session-launch-cancellation.ts +++ b/src/renderer/src/lib/launch-cancel-tombstones-compat/structured-agent-session-launch-cancellation.ts @@ -6,7 +6,7 @@ import { readStructuredAgentLaunchCancellationTombstoneSessionIds, retireAbsentStructuredAgentLaunchCancellationTombstonesPersisted, retireStructuredAgentLaunchCancellationTombstonePersisted -} from '../structured-agent-session-launch-persistence' +} from '../agent-session/launch/structured-agent-session-launch-persistence' type CancellationRetirement = { retireAfterInventory: number | null diff --git a/src/renderer/src/lib/launch-structured-agent-session.ts b/src/renderer/src/lib/launch-structured-agent-session.ts index 97390daa7a1..18b2c0e0268 100644 --- a/src/renderer/src/lib/launch-structured-agent-session.ts +++ b/src/renderer/src/lib/launch-structured-agent-session.ts @@ -1,4 +1,4 @@ -import type { StructuredLaunchSurfaceAddress } from './structured-agent-session-launch-record' +import type { StructuredLaunchSurfaceAddress } from './agent-session/launch/structured-agent-session-launch-record' import type { TuiAgent } from '../../../shared/tui-agent' import { createStructuredAgentSessionId, diff --git a/src/renderer/src/lib/new-agent-prompt-outcome.test.ts b/src/renderer/src/lib/new-agent-prompt-outcome.test.ts index 05afcc891d6..f65200fdeca 100644 --- a/src/renderer/src/lib/new-agent-prompt-outcome.test.ts +++ b/src/renderer/src/lib/new-agent-prompt-outcome.test.ts @@ -1,5 +1,6 @@ // @vitest-environment happy-dom +import type * as LaunchErrors from '@/lib/structured-agent-session-launch-errors' import { beforeEach, describe, expect, it, vi } from 'vitest' import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-session-contracts' import type { StructuredAgentSessionLaunchIntent } from '@/lib/launch-structured-agent-session' @@ -12,15 +13,29 @@ const mocks = vi.hoisted(() => ({ vi.mock('sonner', () => ({ toast: { error: vi.fn(), message: vi.fn() } })) -vi.mock('@/lib/launch-structured-agent-session', () => { +const launchErrorMocks = vi.hoisted(() => { class StructuredAgentSessionCreateRefusalError extends Error {} + return { StructuredAgentSessionCreateRefusalError } +}) + +vi.mock('@/lib/structured-agent-session-launch-errors', async () => ({ + ...(await vi.importActual('@/lib/structured-agent-session-launch-errors')), + ...launchErrorMocks +})) + +vi.mock('@/lib/structured-agent-session-launch-create-call', () => ({ + launchStructuredAgentSession: mocks.launch +})) + +vi.mock('@/lib/launch-structured-agent-session', () => { return { createStructuredAgentSessionLaunchIntent: mocks.createIntent, retryStructuredAgentSessionLaunchIntent: (intent: unknown) => intent, restoreStructuredAgentSessionLaunchIntent: vi.fn(), abandonStructuredAgentSessionLaunchIntent: vi.fn(), launchStructuredAgentSession: mocks.launch, - StructuredAgentSessionCreateRefusalError + StructuredAgentSessionCreateRefusalError: + launchErrorMocks.StructuredAgentSessionCreateRefusalError } }) @@ -70,8 +85,8 @@ import { retryStructuredAgentSessionLaunch, startStructuredAgentLaunch } from './structured-agent-session-launch' -import { resetStructuredAgentLaunchPersistenceForTests } from './structured-agent-session-launch-persistence' -import { resetStructuredAgentLaunchRegistryForTests } from './structured-agent-session-launch-registry' +import { resetStructuredAgentLaunchPersistenceForTests } from './agent-session/launch/structured-agent-session-launch-persistence' +import { resetStructuredAgentLaunchRegistryForTests } from './agent-session/launch/structured-agent-session-launch-registry' import { holdNotesForSend, isNoteInFlight, diff --git a/src/renderer/src/lib/structured-agent-launch-settlement.test.ts b/src/renderer/src/lib/structured-agent-launch-settlement.test.ts index 815d2708db0..6a6b411881b 100644 --- a/src/renderer/src/lib/structured-agent-launch-settlement.test.ts +++ b/src/renderer/src/lib/structured-agent-launch-settlement.test.ts @@ -1,3 +1,4 @@ +import type * as LaunchErrors from '@/lib/structured-agent-session-launch-errors' import { beforeEach, describe, expect, it, vi } from 'vitest' const mocks = vi.hoisted(() => ({ @@ -10,8 +11,18 @@ vi.mock('@/lib/structured-agent-session-launch', () => ({ cancelStructuredAgentLaunch: mocks.cancelStructuredAgentLaunch })) +const launchErrorMocks = vi.hoisted(() => { + return { StructuredAgentSessionCreateRefusalError: class extends Error {} } +}) + +vi.mock('@/lib/structured-agent-session-launch-errors', async () => ({ + ...(await vi.importActual('@/lib/structured-agent-session-launch-errors')), + ...launchErrorMocks +})) + vi.mock('@/lib/launch-structured-agent-session', () => ({ - StructuredAgentSessionCreateRefusalError: class extends Error {} + StructuredAgentSessionCreateRefusalError: + launchErrorMocks.StructuredAgentSessionCreateRefusalError })) import { StructuredAgentSessionCreateRefusalError } from '@/lib/launch-structured-agent-session' diff --git a/src/renderer/src/lib/structured-agent-session-action-launch.ts b/src/renderer/src/lib/structured-agent-session-action-launch.ts index ad3ee7c559a..7507846b359 100644 --- a/src/renderer/src/lib/structured-agent-session-action-launch.ts +++ b/src/renderer/src/lib/structured-agent-session-action-launch.ts @@ -3,7 +3,7 @@ import { translate } from '@/i18n/i18n' import { getStructuredLaunchStateBySessionId, notifyStructuredLaunchListeners -} from './structured-agent-session-launch-registry' +} from './agent-session/launch/structured-agent-session-launch-registry' import { focusTerminalTabSurface } from './focus-terminal-tab-surface' import type { Tab } from '../../../shared/tab-types' import type { StructuredAgentLaunchSettlement } from '@/lib/structured-agent-launch-settlement' diff --git a/src/renderer/src/lib/structured-agent-session-create-hydration.ts b/src/renderer/src/lib/structured-agent-session-create-hydration.ts index f1a85d5923a..c510a07baf0 100644 --- a/src/renderer/src/lib/structured-agent-session-create-hydration.ts +++ b/src/renderer/src/lib/structured-agent-session-create-hydration.ts @@ -1,6 +1,6 @@ import type { AgentSessionHistoryPage } from '../../../shared/agent-session-wire' import type { StructuredAgentSessionLaunchIntent } from './launch-structured-agent-session' -import { hasStructuredAgentLaunchCancellationTombstonePersisted } from './structured-agent-session-launch-persistence' +import { hasStructuredAgentLaunchCancellationTombstonePersisted } from './agent-session/launch/structured-agent-session-launch-persistence' import { wasStructuredAgentLaunchClosedByLocalCancel } from './structured-agent-session-local-launch-cancel' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../shared/layout-owner-switch' import { getStructuredAgentSessionReadOwner } from '@/components/native-chat/structured-agent-session-read-owner' diff --git a/src/renderer/src/lib/structured-agent-session-launch-after-failure.test.ts b/src/renderer/src/lib/structured-agent-session-launch-after-failure.test.ts index a786f4dff24..9e820ac8bf5 100644 --- a/src/renderer/src/lib/structured-agent-session-launch-after-failure.test.ts +++ b/src/renderer/src/lib/structured-agent-session-launch-after-failure.test.ts @@ -1,5 +1,6 @@ // @vitest-environment happy-dom +import type * as LaunchErrors from '@/lib/structured-agent-session-launch-errors' import { beforeEach, describe, expect, it, vi } from 'vitest' import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-session-contracts' import type { StructuredAgentSessionLaunchIntent } from '@/lib/launch-structured-agent-session' @@ -18,15 +19,29 @@ const mocks = vi.hoisted(() => ({ vi.mock('sonner', () => ({ toast: { error: vi.fn(), message: vi.fn() } })) -vi.mock('@/lib/launch-structured-agent-session', () => { +const launchErrorMocks = vi.hoisted(() => { class StructuredAgentSessionCreateRefusalError extends Error {} + return { StructuredAgentSessionCreateRefusalError } +}) + +vi.mock('@/lib/structured-agent-session-launch-errors', async () => ({ + ...(await vi.importActual('@/lib/structured-agent-session-launch-errors')), + ...launchErrorMocks +})) + +vi.mock('@/lib/structured-agent-session-launch-create-call', () => ({ + launchStructuredAgentSession: mocks.launch +})) + +vi.mock('@/lib/launch-structured-agent-session', () => { return { createStructuredAgentSessionLaunchIntent: mocks.createIntent, retryStructuredAgentSessionLaunchIntent: mocks.retryIntent, restoreStructuredAgentSessionLaunchIntent: mocks.restoreIntent, abandonStructuredAgentSessionLaunchIntent: mocks.abandonIntent, launchStructuredAgentSession: mocks.launch, - StructuredAgentSessionCreateRefusalError + StructuredAgentSessionCreateRefusalError: + launchErrorMocks.StructuredAgentSessionCreateRefusalError } }) @@ -87,8 +102,8 @@ import { readNativeChatDraftCache } from '@/components/native-chat/native-chat-draft-cache' import { structuredAgentSessionDraftScopeKey } from '@/components/native-chat/native-chat-composer-draft-store' -import { resetStructuredAgentLaunchPersistenceForTests } from './structured-agent-session-launch-persistence' -import { resetStructuredAgentLaunchRegistryForTests } from './structured-agent-session-launch-registry' +import { resetStructuredAgentLaunchPersistenceForTests } from './agent-session/launch/structured-agent-session-launch-persistence' +import { resetStructuredAgentLaunchRegistryForTests } from './agent-session/launch/structured-agent-session-launch-registry' type Receipt = { sessionId: string; fence: number } diff --git a/src/renderer/src/lib/structured-agent-session-launch-callers.ts b/src/renderer/src/lib/structured-agent-session-launch-callers.ts index e4c34693111..b85f7ffaf41 100644 --- a/src/renderer/src/lib/structured-agent-session-launch-callers.ts +++ b/src/renderer/src/lib/structured-agent-session-launch-callers.ts @@ -1,4 +1,4 @@ -import type { StructuredLaunchSurfaceAddress } from './structured-agent-session-launch-record' +import type { StructuredLaunchSurfaceAddress } from './agent-session/launch/structured-agent-session-launch-record' import { settleStructuredAgentLaunchPrompt } from '@/lib/structured-agent-session-launch-prompt' import type { StagedStructuredLaunchPrompt, diff --git a/src/renderer/src/lib/structured-agent-session-launch-close-race.test.ts b/src/renderer/src/lib/structured-agent-session-launch-close-race.test.ts index 020eca0b728..c4de36ef0b8 100644 --- a/src/renderer/src/lib/structured-agent-session-launch-close-race.test.ts +++ b/src/renderer/src/lib/structured-agent-session-launch-close-race.test.ts @@ -1,9 +1,10 @@ // @vitest-environment happy-dom +import type * as LaunchErrors from '@/lib/structured-agent-session-launch-errors' import { beforeEach, describe, expect, it, vi } from 'vitest' import { toast } from 'sonner' import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-session-contracts' -import type * as RecoveryModule from '@/lib/structured-agent-session-launch-recovery' +import type * as RecoveryModule from '@/lib/agent-session/launch/structured-agent-session-launch-recovery' import type { StructuredAgentSessionLaunchIntent } from '@/lib/launch-structured-agent-session' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../shared/layout-owner-switch' @@ -28,21 +29,35 @@ vi.mock('sonner', () => ({ } })) -vi.mock('@/lib/launch-structured-agent-session', () => { +const launchErrorMocks = vi.hoisted(() => { class StructuredAgentSessionCreateRefusalError extends Error {} + return { StructuredAgentSessionCreateRefusalError } +}) + +vi.mock('@/lib/structured-agent-session-launch-errors', async () => ({ + ...(await vi.importActual('@/lib/structured-agent-session-launch-errors')), + ...launchErrorMocks +})) + +vi.mock('@/lib/structured-agent-session-launch-create-call', () => ({ + launchStructuredAgentSession: mocks.launch +})) + +vi.mock('@/lib/launch-structured-agent-session', () => { return { createStructuredAgentSessionLaunchIntent: mocks.createIntent, retryStructuredAgentSessionLaunchIntent: mocks.retryIntent, restoreStructuredAgentSessionLaunchIntent: mocks.restoreIntent, abandonStructuredAgentSessionLaunchIntent: mocks.abandonIntent, launchStructuredAgentSession: mocks.launch, - StructuredAgentSessionCreateRefusalError + StructuredAgentSessionCreateRefusalError: + launchErrorMocks.StructuredAgentSessionCreateRefusalError } }) -vi.mock('@/lib/structured-agent-session-launch-recovery', async () => { +vi.mock('@/lib/agent-session/launch/structured-agent-session-launch-recovery', async () => { const actual = await vi.importActual( - '@/lib/structured-agent-session-launch-recovery' + '@/lib/agent-session/launch/structured-agent-session-launch-recovery' ) return { ...actual, launchAndReconcile: vi.fn(actual.launchAndReconcile) } }) @@ -102,8 +117,8 @@ import { } from '@/components/native-chat/native-chat-draft-cache' import { structuredAgentSessionDraftScopeKey } from '@/components/native-chat/native-chat-composer-draft-store' import { hasStagedStructuredLaunchPrompt } from './structured-agent-session-launch-prompt' -import { resetStructuredAgentLaunchPersistenceForTests } from './structured-agent-session-launch-persistence' -import { resetStructuredAgentLaunchRegistryForTests } from './structured-agent-session-launch-registry' +import { resetStructuredAgentLaunchPersistenceForTests } from './agent-session/launch/structured-agent-session-launch-persistence' +import { resetStructuredAgentLaunchRegistryForTests } from './agent-session/launch/structured-agent-session-launch-registry' function launchIntent( worktreeId: string, diff --git a/src/renderer/src/lib/structured-agent-session-launch-create-call.ts b/src/renderer/src/lib/structured-agent-session-launch-create-call.ts index ed7ad82c16b..6fd621d6573 100644 --- a/src/renderer/src/lib/structured-agent-session-launch-create-call.ts +++ b/src/renderer/src/lib/structured-agent-session-launch-create-call.ts @@ -22,7 +22,7 @@ import { abandonStructuredAgentSessionLaunchIntent, type StructuredAgentSessionLaunchIntent } from './launch-structured-agent-session' -import type { StructuredAgentLaunchReceipt } from './structured-agent-session-launch-recovery' +import type { StructuredAgentLaunchReceipt } from './agent-session/launch/structured-agent-session-launch-recovery' import { StructuredAgentSessionCreateError, StructuredAgentSessionCreateAbandonedError, diff --git a/src/renderer/src/lib/structured-agent-session-launch-create-message.test.ts b/src/renderer/src/lib/structured-agent-session-launch-create-message.test.ts index 1e354373478..c9c162e6525 100644 --- a/src/renderer/src/lib/structured-agent-session-launch-create-message.test.ts +++ b/src/renderer/src/lib/structured-agent-session-launch-create-message.test.ts @@ -62,13 +62,13 @@ import { } from './structured-agent-session-launch' import { holdStructuredAgentSessionLaunchOption } from './structured-agent-session-launch-options' import { recordHostModelCatalogSnapshot } from '@/runtime/host-model-catalog-snapshots' -import { resetStructuredAgentLaunchRegistryForTests } from './structured-agent-session-launch-registry' +import { resetStructuredAgentLaunchRegistryForTests } from './agent-session/launch/structured-agent-session-launch-registry' import { resetStructuredAgentLaunchPersistenceForTests, readStructuredAgentLaunchRecord -} from './structured-agent-session-launch-persistence' +} from './agent-session/launch/structured-agent-session-launch-persistence' import { newAgentLaunchRequestId } from './agent-launch-request-id' -import { markStructuredAgentSessionLaunchPublished } from './structured-agent-session-launch-publication' +import { markStructuredAgentSessionLaunchPublished } from './agent-session/launch/structured-agent-session-launch-publication' import { StructuredAgentSessionCreateRefusalError } from './structured-agent-session-launch-errors' import { getStructuredAgentSessionReadOwner, diff --git a/src/renderer/src/lib/structured-agent-session-launch-create-message.ts b/src/renderer/src/lib/structured-agent-session-launch-create-message.ts index 90a8b030b43..1fe03c268d3 100644 --- a/src/renderer/src/lib/structured-agent-session-launch-create-message.ts +++ b/src/renderer/src/lib/structured-agent-session-launch-create-message.ts @@ -1,11 +1,11 @@ import { structuredAgentSessionCreateFingerprint } from '../../../shared/structured-agent-session-mutation' -import type { StructuredLaunchState } from './structured-agent-session-launch-registry' -import { notifyStructuredLaunchListeners } from './structured-agent-session-launch-registry' +import type { StructuredLaunchState } from './agent-session/launch/structured-agent-session-launch-registry' +import { notifyStructuredLaunchListeners } from './agent-session/launch/structured-agent-session-launch-registry' import { prepareStructuredLaunchPromptForCreate, prepareLegacyStructuredLaunchPrompts } from './structured-agent-session-launch-prompt' -import type { StructuredAgentLaunchReceipt } from './structured-agent-session-launch-recovery' +import type { StructuredAgentLaunchReceipt } from './agent-session/launch/structured-agent-session-launch-recovery' import { structuredAgentSessionOptionView, structuredAgentSessionSendSelection diff --git a/src/renderer/src/lib/structured-agent-session-launch-create-support.ts b/src/renderer/src/lib/structured-agent-session-launch-create-support.ts index 2b46b5c4342..3b3c74dbed9 100644 --- a/src/renderer/src/lib/structured-agent-session-launch-create-support.ts +++ b/src/renderer/src/lib/structured-agent-session-launch-create-support.ts @@ -3,7 +3,7 @@ import { getPersistedStructuredAgentLaunchRecord, getStructuredLaunchStateBySessionId, subscribeStructuredAgentLaunchStatus -} from './structured-agent-session-launch-registry' +} from './agent-session/launch/structured-agent-session-launch-registry' /** Unknown capability keeps Stop unavailable until create can publish or choose the old flow. */ export function useStructuredLaunchCreateSupport(sessionId: string): boolean | undefined { diff --git a/src/renderer/src/lib/structured-agent-session-launch-different-request.test.ts b/src/renderer/src/lib/structured-agent-session-launch-different-request.test.ts index e59c06711f6..8a92cc6fe77 100644 --- a/src/renderer/src/lib/structured-agent-session-launch-different-request.test.ts +++ b/src/renderer/src/lib/structured-agent-session-launch-different-request.test.ts @@ -1,5 +1,6 @@ // @vitest-environment happy-dom +import type * as LaunchErrors from '@/lib/structured-agent-session-launch-errors' import { beforeEach, describe, expect, it, vi } from 'vitest' import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-session-contracts' import type { StructuredAgentSessionLaunchIntent } from '@/lib/launch-structured-agent-session' @@ -17,15 +18,29 @@ const mocks = vi.hoisted(() => ({ vi.mock('sonner', () => ({ toast: { error: vi.fn(), message: vi.fn() } })) -vi.mock('@/lib/launch-structured-agent-session', () => { +const launchErrorMocks = vi.hoisted(() => { class StructuredAgentSessionCreateRefusalError extends Error {} + return { StructuredAgentSessionCreateRefusalError } +}) + +vi.mock('@/lib/structured-agent-session-launch-errors', async () => ({ + ...(await vi.importActual('@/lib/structured-agent-session-launch-errors')), + ...launchErrorMocks +})) + +vi.mock('@/lib/structured-agent-session-launch-create-call', () => ({ + launchStructuredAgentSession: mocks.launch +})) + +vi.mock('@/lib/launch-structured-agent-session', () => { return { createStructuredAgentSessionLaunchIntent: mocks.createIntent, retryStructuredAgentSessionLaunchIntent: mocks.retryIntent, restoreStructuredAgentSessionLaunchIntent: mocks.restoreIntent, abandonStructuredAgentSessionLaunchIntent: mocks.abandonIntent, launchStructuredAgentSession: mocks.launch, - StructuredAgentSessionCreateRefusalError + StructuredAgentSessionCreateRefusalError: + launchErrorMocks.StructuredAgentSessionCreateRefusalError } }) @@ -80,8 +95,8 @@ import { discardStructuredLaunchPrompts, hasStagedStructuredLaunchPrompt } from './structured-agent-session-launch-prompt' -import { resetStructuredAgentLaunchPersistenceForTests } from './structured-agent-session-launch-persistence' -import { resetStructuredAgentLaunchRegistryForTests } from './structured-agent-session-launch-registry' +import { resetStructuredAgentLaunchPersistenceForTests } from './agent-session/launch/structured-agent-session-launch-persistence' +import { resetStructuredAgentLaunchRegistryForTests } from './agent-session/launch/structured-agent-session-launch-registry' const WORKTREE_ID = 'wt-different-request' diff --git a/src/renderer/src/lib/structured-agent-session-launch-exited-owner.test.ts b/src/renderer/src/lib/structured-agent-session-launch-exited-owner.test.ts index c8ee5fac6be..c55939e1453 100644 --- a/src/renderer/src/lib/structured-agent-session-launch-exited-owner.test.ts +++ b/src/renderer/src/lib/structured-agent-session-launch-exited-owner.test.ts @@ -52,8 +52,8 @@ import { import { getStructuredAgentSessionLaunchFailure, resetStructuredAgentLaunchRegistryForTests -} from './structured-agent-session-launch-registry' -import { resetStructuredAgentLaunchPersistenceForTests } from './structured-agent-session-launch-persistence' +} from './agent-session/launch/structured-agent-session-launch-registry' +import { resetStructuredAgentLaunchPersistenceForTests } from './agent-session/launch/structured-agent-session-launch-persistence' import { structuredSessionNotices } from '@/components/native-chat/native-chat-structured-session-notices' const WORKTREE = 'wt-1' diff --git a/src/renderer/src/lib/structured-agent-session-launch-failed-at.ts b/src/renderer/src/lib/structured-agent-session-launch-failed-at.ts index d86c4ee0b99..bf51b545715 100644 --- a/src/renderer/src/lib/structured-agent-session-launch-failed-at.ts +++ b/src/renderer/src/lib/structured-agent-session-launch-failed-at.ts @@ -3,7 +3,7 @@ import { getPersistedStructuredAgentLaunchRecord, getStructuredLaunchStateBySessionId, subscribeStructuredAgentLaunchStatus -} from './structured-agent-session-launch-registry' +} from './agent-session/launch/structured-agent-session-launch-registry' /** Read failure time from memory or persisted record; undefined before failure or for older records without timestamps. */ export function getStructuredAgentSessionLaunchFailedAt(sessionId: string): number | undefined { diff --git a/src/renderer/src/lib/structured-agent-session-launch-join-delivery.test.ts b/src/renderer/src/lib/structured-agent-session-launch-join-delivery.test.ts index ac1a5bb8f9d..2036bae0785 100644 --- a/src/renderer/src/lib/structured-agent-session-launch-join-delivery.test.ts +++ b/src/renderer/src/lib/structured-agent-session-launch-join-delivery.test.ts @@ -1,8 +1,9 @@ // @vitest-environment happy-dom +import type * as LaunchErrors from '@/lib/structured-agent-session-launch-errors' import { beforeEach, describe, expect, it, vi } from 'vitest' import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-session-contracts' -import type * as RecoveryModule from '@/lib/structured-agent-session-launch-recovery' +import type * as RecoveryModule from '@/lib/agent-session/launch/structured-agent-session-launch-recovery' const mocks = vi.hoisted(() => ({ abandonIntent: vi.fn(), @@ -18,19 +19,33 @@ const mocks = vi.hoisted(() => ({ vi.mock('sonner', () => ({ toast: { error: vi.fn(), message: vi.fn() } })) -vi.mock('@/lib/launch-structured-agent-session', () => { +const launchErrorMocks = vi.hoisted(() => { class StructuredAgentSessionCreateRefusalError extends Error {} + return { StructuredAgentSessionCreateRefusalError } +}) + +vi.mock('@/lib/structured-agent-session-launch-errors', async () => ({ + ...(await vi.importActual('@/lib/structured-agent-session-launch-errors')), + ...launchErrorMocks +})) + +vi.mock('@/lib/structured-agent-session-launch-create-call', () => ({ + launchStructuredAgentSession: mocks.launch +})) + +vi.mock('@/lib/launch-structured-agent-session', () => { return { createStructuredAgentSessionLaunchIntent: mocks.createIntent, abandonStructuredAgentSessionLaunchIntent: mocks.abandonIntent, launchStructuredAgentSession: mocks.launch, - StructuredAgentSessionCreateRefusalError + StructuredAgentSessionCreateRefusalError: + launchErrorMocks.StructuredAgentSessionCreateRefusalError } }) -vi.mock('@/lib/structured-agent-session-launch-recovery', async () => { +vi.mock('@/lib/agent-session/launch/structured-agent-session-launch-recovery', async () => { const actual = await vi.importActual( - '@/lib/structured-agent-session-launch-recovery' + '@/lib/agent-session/launch/structured-agent-session-launch-recovery' ) return { ...actual, launchAndReconcile: vi.fn(actual.launchAndReconcile) } }) diff --git a/src/renderer/src/lib/structured-agent-session-launch-message.ts b/src/renderer/src/lib/structured-agent-session-launch-message.ts index a1d42025b3e..8955e96e7ec 100644 --- a/src/renderer/src/lib/structured-agent-session-launch-message.ts +++ b/src/renderer/src/lib/structured-agent-session-launch-message.ts @@ -9,10 +9,10 @@ import { import { getStructuredAgentSessionLaunchLifecycle, getStructuredLaunchStateBySessionId -} from './structured-agent-session-launch-registry' +} from './agent-session/launch/structured-agent-session-launch-registry' import { retryStructuredAgentSessionLaunch } from './structured-agent-session-launch' import { newAgentLaunchRequestId } from './agent-launch-request-id' -import { trackStructuredLaunchPromptOutcome } from './structured-agent-session-launch-prompt-outcome' +import { trackStructuredLaunchPromptOutcome } from './agent-session/launch/structured-agent-session-launch-prompt-outcome' /** Null when the chat's start has not failed, or its restart could not begin. */ export function relaunchFailedStructuredAgentSessionWithMessage( diff --git a/src/renderer/src/lib/structured-agent-session-launch-options.test.ts b/src/renderer/src/lib/structured-agent-session-launch-options.test.ts index e100892f417..1da79737f1c 100644 --- a/src/renderer/src/lib/structured-agent-session-launch-options.test.ts +++ b/src/renderer/src/lib/structured-agent-session-launch-options.test.ts @@ -1,5 +1,6 @@ // @vitest-environment happy-dom +import type * as LaunchErrors from '@/lib/structured-agent-session-launch-errors' import { beforeEach, describe, expect, it, vi } from 'vitest' import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-session-contracts' import type { StructuredAgentSessionLaunchIntent } from '@/lib/launch-structured-agent-session' @@ -20,15 +21,29 @@ const mocks = vi.hoisted(() => ({ vi.mock('sonner', () => ({ toast: { error: vi.fn(), message: vi.fn() } })) -vi.mock('@/lib/launch-structured-agent-session', () => { +const launchErrorMocks = vi.hoisted(() => { class StructuredAgentSessionCreateRefusalError extends Error {} + return { StructuredAgentSessionCreateRefusalError } +}) + +vi.mock('@/lib/structured-agent-session-launch-errors', async () => ({ + ...(await vi.importActual('@/lib/structured-agent-session-launch-errors')), + ...launchErrorMocks +})) + +vi.mock('@/lib/structured-agent-session-launch-create-call', () => ({ + launchStructuredAgentSession: mocks.launch +})) + +vi.mock('@/lib/launch-structured-agent-session', () => { return { createStructuredAgentSessionLaunchIntent: mocks.createIntent, retryStructuredAgentSessionLaunchIntent: mocks.retryIntent, restoreStructuredAgentSessionLaunchIntent: vi.fn(), abandonStructuredAgentSessionLaunchIntent: vi.fn(), launchStructuredAgentSession: mocks.launch, - StructuredAgentSessionCreateRefusalError + StructuredAgentSessionCreateRefusalError: + launchErrorMocks.StructuredAgentSessionCreateRefusalError } }) @@ -72,12 +87,12 @@ import { getStructuredAgentSessionLaunchSelection, holdStructuredAgentSessionLaunchOption } from './structured-agent-session-launch-options' -import { resetStructuredAgentLaunchPersistenceForTests } from './structured-agent-session-launch-persistence' +import { resetStructuredAgentLaunchPersistenceForTests } from './agent-session/launch/structured-agent-session-launch-persistence' import { resetStructuredAgentLaunchRegistryForTests, subscribeStructuredAgentLaunchStatus -} from './structured-agent-session-launch-registry' -import { markStructuredAgentSessionLaunchPublished } from './structured-agent-session-launch-publication' +} from './agent-session/launch/structured-agent-session-launch-registry' +import { markStructuredAgentSessionLaunchPublished } from './agent-session/launch/structured-agent-session-launch-publication' import { CODEX_SESSION_OPTION_CATALOG } from '../../../shared/agent-session-option-catalog-claude-codex' import { applyStructuredAgentSessionModelCatalog, diff --git a/src/renderer/src/lib/structured-agent-session-launch-options.ts b/src/renderer/src/lib/structured-agent-session-launch-options.ts index b7e0709bdee..f62e5937320 100644 --- a/src/renderer/src/lib/structured-agent-session-launch-options.ts +++ b/src/renderer/src/lib/structured-agent-session-launch-options.ts @@ -14,13 +14,13 @@ import { createBrowserUuid } from '@/lib/browser-uuid' import { StructuredAgentSessionLaunchCancelledError, type StructuredAgentLaunchReceipt -} from './structured-agent-session-launch-recovery' +} from './agent-session/launch/structured-agent-session-launch-recovery' import { getStructuredLaunchStateBySessionId, notifyStructuredLaunchListeners, subscribeStructuredAgentLaunchStatus, type StructuredLaunchState -} from './structured-agent-session-launch-registry' +} from './agent-session/launch/structured-agent-session-launch-registry' import { agentSessionRefusalFailure, agentSessionThrownFailure, diff --git a/src/renderer/src/lib/structured-agent-session-launch-probe-outage.test.ts b/src/renderer/src/lib/structured-agent-session-launch-probe-outage.test.ts index 1f4d524f0d3..d2d0b2f1d49 100644 --- a/src/renderer/src/lib/structured-agent-session-launch-probe-outage.test.ts +++ b/src/renderer/src/lib/structured-agent-session-launch-probe-outage.test.ts @@ -43,7 +43,7 @@ import { createStructuredAgentSessionLaunchIntent, StructuredAgentSessionCreateUnknownOutcomeError } from '@/lib/launch-structured-agent-session' -import { launchAndReconcile } from '@/lib/structured-agent-session-launch-recovery' +import { launchAndReconcile } from '@/lib/agent-session/launch/structured-agent-session-launch-recovery' function launchState(executionHostId: 'local' | 'runtime:server-1') { return { diff --git a/src/renderer/src/lib/structured-agent-session-launch-prompt.ts b/src/renderer/src/lib/structured-agent-session-launch-prompt.ts index b28f547b01d..1674c7df4fe 100644 --- a/src/renderer/src/lib/structured-agent-session-launch-prompt.ts +++ b/src/renderer/src/lib/structured-agent-session-launch-prompt.ts @@ -1,5 +1,5 @@ import { structuredAgentSessionSendBody } from '../../../shared/structured-agent-session-send-mutation' -import type { StructuredAgentLaunchReceipt } from './structured-agent-session-launch-recovery' +import type { StructuredAgentLaunchReceipt } from './agent-session/launch/structured-agent-session-launch-recovery' import type { StructuredAgentSessionFirstMessage } from '../../../shared/structured-agent-session-create' import { StructuredAgentSessionCreateRefusalError } from './structured-agent-session-launch-errors' import { agentSessionThrownFailure } from '../../../shared/agent-session-write-failure' diff --git a/src/renderer/src/lib/structured-agent-session-launch-source-handoff.ts b/src/renderer/src/lib/structured-agent-session-launch-source-handoff.ts index f62c6ef1a91..ee107cc221c 100644 --- a/src/renderer/src/lib/structured-agent-session-launch-source-handoff.ts +++ b/src/renderer/src/lib/structured-agent-session-launch-source-handoff.ts @@ -2,7 +2,7 @@ import { structuredAgentSessionCreateFingerprint } from '../../../shared/structu import { setStructuredLaunchState, type StructuredLaunchState -} from './structured-agent-session-launch-registry' +} from './agent-session/launch/structured-agent-session-launch-registry' // Joiners without the source terminal survive its close: hand off unsent create to conversation-ID resume, as History does. export function releaseStructuredLaunchSource(state: StructuredLaunchState): void { diff --git a/src/renderer/src/lib/structured-agent-session-launch-status.ts b/src/renderer/src/lib/structured-agent-session-launch-status.ts index 6535eb6497d..586a13aadda 100644 --- a/src/renderer/src/lib/structured-agent-session-launch-status.ts +++ b/src/renderer/src/lib/structured-agent-session-launch-status.ts @@ -1,10 +1,10 @@ import type { TuiAgent } from '../../../shared/tui-agent' -import { structuredLaunchesHoldingIdentity } from './structured-agent-session-launch-holders' +import { structuredLaunchesHoldingIdentity } from './agent-session/launch/structured-agent-session-launch-holders' import { structuredLaunchIdentity, structuredLaunchStates, type StructuredAgentLaunchStatus -} from './structured-agent-session-launch-registry' +} from './agent-session/launch/structured-agent-session-launch-registry' /** Whether a chat for this pair is being created here: its own first create, or an adoption. */ export function getStructuredAgentLaunchStatus( diff --git a/src/renderer/src/lib/structured-agent-session-launch-surface.ts b/src/renderer/src/lib/structured-agent-session-launch-surface.ts index 43b9405086b..416637fcf1b 100644 --- a/src/renderer/src/lib/structured-agent-session-launch-surface.ts +++ b/src/renderer/src/lib/structured-agent-session-launch-surface.ts @@ -12,16 +12,16 @@ import { defaultAgentChatLabel } from '../../../shared/agent-session/agent-sessi import { structuredAgentSessionTabId } from '../../../shared/structured-agent-session-projection' import { useAppStore } from '@/store' import { resolveUnifiedTabCreatePlacement } from '@/store/slices/tabs/tabs-create-placement' -import type { StructuredLaunchSurfaceAddress } from './structured-agent-session-launch-record' +import type { StructuredLaunchSurfaceAddress } from './agent-session/launch/structured-agent-session-launch-record' import { readStructuredAgentLaunchRecord, readStructuredAgentLaunchRecords, writeStructuredAgentLaunchRecord -} from './structured-agent-session-launch-persistence' +} from './agent-session/launch/structured-agent-session-launch-persistence' import { getStructuredAgentSessionLaunchOwner, getStructuredLaunchStateBySessionId -} from './structured-agent-session-launch-registry' +} from './agent-session/launch/structured-agent-session-launch-registry' import { structuredAgentSessionFocusOwner, structuredAgentSessionTargetForHost diff --git a/src/renderer/src/lib/structured-agent-session-launch.test.ts b/src/renderer/src/lib/structured-agent-session-launch.test.ts index 6fbbbdd1156..d84e3daab99 100644 --- a/src/renderer/src/lib/structured-agent-session-launch.test.ts +++ b/src/renderer/src/lib/structured-agent-session-launch.test.ts @@ -1,9 +1,10 @@ // @vitest-environment happy-dom +import type * as LaunchErrors from '@/lib/structured-agent-session-launch-errors' import { beforeEach, describe, expect, it, vi } from 'vitest' import { toast } from 'sonner' import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-session-contracts' -import type * as RecoveryModule from '@/lib/structured-agent-session-launch-recovery' +import type * as RecoveryModule from '@/lib/agent-session/launch/structured-agent-session-launch-recovery' import type { StructuredAgentSessionLaunchIntent } from '@/lib/launch-structured-agent-session' const mocks = vi.hoisted(() => ({ @@ -27,21 +28,35 @@ vi.mock('sonner', () => ({ } })) -vi.mock('@/lib/launch-structured-agent-session', () => { +const launchErrorMocks = vi.hoisted(() => { class StructuredAgentSessionCreateRefusalError extends Error {} + return { StructuredAgentSessionCreateRefusalError } +}) + +vi.mock('@/lib/structured-agent-session-launch-errors', async () => ({ + ...(await vi.importActual('@/lib/structured-agent-session-launch-errors')), + ...launchErrorMocks +})) + +vi.mock('@/lib/structured-agent-session-launch-create-call', () => ({ + launchStructuredAgentSession: mocks.launch +})) + +vi.mock('@/lib/launch-structured-agent-session', () => { return { createStructuredAgentSessionLaunchIntent: mocks.createIntent, retryStructuredAgentSessionLaunchIntent: mocks.retryIntent, restoreStructuredAgentSessionLaunchIntent: mocks.restoreIntent, abandonStructuredAgentSessionLaunchIntent: mocks.abandonIntent, launchStructuredAgentSession: mocks.launch, - StructuredAgentSessionCreateRefusalError + StructuredAgentSessionCreateRefusalError: + launchErrorMocks.StructuredAgentSessionCreateRefusalError } }) -vi.mock('@/lib/structured-agent-session-launch-recovery', async () => { +vi.mock('@/lib/agent-session/launch/structured-agent-session-launch-recovery', async () => { const actual = await vi.importActual( - '@/lib/structured-agent-session-launch-recovery' + '@/lib/agent-session/launch/structured-agent-session-launch-recovery' ) return { ...actual, launchAndReconcile: vi.fn(actual.launchAndReconcile) } }) @@ -94,7 +109,7 @@ vi.mock('@/lib/agent-catalog', () => ({ import { StructuredAgentSessionCreateRefusalError } from '@/lib/launch-structured-agent-session' import { refreshLocalStructuredSessionTabs } from '@/runtime/local-structured-session-tabs-sync/inventory-refresh' -import { launchAndReconcile } from '@/lib/structured-agent-session-launch-recovery' +import { launchAndReconcile } from '@/lib/agent-session/launch/structured-agent-session-launch-recovery' import { cancelStructuredAgentLaunch, getStructuredAgentSessionLaunchLifecycle, @@ -108,8 +123,8 @@ import { } from '@/components/native-chat/native-chat-draft-cache' import { structuredAgentSessionDraftScopeKey } from '@/components/native-chat/native-chat-composer-draft-store' import { hasStagedStructuredLaunchPrompt } from './structured-agent-session-launch-prompt' -import { resetStructuredAgentLaunchPersistenceForTests } from './structured-agent-session-launch-persistence' -import { resetStructuredAgentLaunchRegistryForTests } from './structured-agent-session-launch-registry' +import { resetStructuredAgentLaunchPersistenceForTests } from './agent-session/launch/structured-agent-session-launch-persistence' +import { resetStructuredAgentLaunchRegistryForTests } from './agent-session/launch/structured-agent-session-launch-registry' import { getStructuredAgentSessionLaunchSelection } from './structured-agent-session-launch-options' function launchIntent( diff --git a/src/renderer/src/lib/structured-agent-session-launch.ts b/src/renderer/src/lib/structured-agent-session-launch.ts index d82c37d931c..3a21945c359 100644 --- a/src/renderer/src/lib/structured-agent-session-launch.ts +++ b/src/renderer/src/lib/structured-agent-session-launch.ts @@ -15,7 +15,7 @@ import { launchAndReconcile, reconcileUnknownLaunch, type StructuredAgentLaunchReceipt -} from '@/lib/structured-agent-session-launch-recovery' +} from '@/lib/agent-session/launch/structured-agent-session-launch-recovery' import type { StructuredPromptDeliveryResult } from '@/lib/structured-agent-session-launch-prompt' import { addStructuredLaunchCaller, @@ -33,9 +33,9 @@ import { setStructuredLaunchState, structuredLaunchIdentity, type StructuredLaunchState -} from './structured-agent-session-launch-registry' -import { restorePersistedStructuredLaunchState } from './structured-agent-session-launch-reload' -import { getJoinableStructuredLaunchState } from './structured-agent-session-launch-holders' +} from './agent-session/launch/structured-agent-session-launch-registry' +import { restorePersistedStructuredLaunchState } from './agent-session/launch/structured-agent-session-launch-reload' +import { getJoinableStructuredLaunchState } from './agent-session/launch/structured-agent-session-launch-holders' import { prepareStructuredLaunchCreateMessage, publishStructuredLaunchCreateOptions @@ -43,11 +43,11 @@ import { import { maybeCleanupLaunchState, trackLaunchSettlement -} from './structured-agent-session-launch-outcome-tracking' +} from './agent-session/launch/structured-agent-session-launch-outcome-tracking' import { trackStructuredLaunchPromptOutcome, trackStructuredLaunchConfirmationDeadline -} from './structured-agent-session-launch-prompt-outcome' +} from './agent-session/launch/structured-agent-session-launch-prompt-outcome' import { repeatedStructuredLaunchAttempt } from './structured-agent-session-launch-request' import { initialStructuredLaunchSelection } from './structured-agent-session-launch-options' import { releaseStructuredLaunchSource } from './structured-agent-session-launch-source-handoff' @@ -65,7 +65,7 @@ export { useStructuredAgentSessionLaunchLifecycle, type StructuredAgentLaunchStatus, type StructuredAgentSessionLaunchLifecycle -} from './structured-agent-session-launch-registry' +} from './agent-session/launch/structured-agent-session-launch-registry' export * from './structured-agent-session-launch-status' export { useStructuredAgentSessionLaunchSelection } from './structured-agent-session-launch-options' diff --git a/src/renderer/src/lib/structured-agent-session-local-launch-cancel.ts b/src/renderer/src/lib/structured-agent-session-local-launch-cancel.ts index 93a3dbcd1e2..26ee5931bff 100644 --- a/src/renderer/src/lib/structured-agent-session-local-launch-cancel.ts +++ b/src/renderer/src/lib/structured-agent-session-local-launch-cancel.ts @@ -1,6 +1,6 @@ import { hasRuntimeRpcErrorCode } from '../../../shared/runtime-rpc-error-code' import { retireStructuredAgentSessionTab } from '@/runtime/structured-agent-session-tab-retirement' -import { deleteStructuredAgentLaunchRecord } from './structured-agent-session-launch-persistence' +import { deleteStructuredAgentLaunchRecord } from './agent-session/launch/structured-agent-session-launch-persistence' // Chats a cancel closed on this machine's host; session ids are never reused. const closedByLocalCancel = new Set() diff --git a/src/renderer/src/lib/structured-agent-session-new-chat-own-launch.test.ts b/src/renderer/src/lib/structured-agent-session-new-chat-own-launch.test.ts index 5a9d0d6551d..04a87038724 100644 --- a/src/renderer/src/lib/structured-agent-session-new-chat-own-launch.test.ts +++ b/src/renderer/src/lib/structured-agent-session-new-chat-own-launch.test.ts @@ -1,5 +1,6 @@ // @vitest-environment happy-dom +import type * as LaunchErrors from '@/lib/structured-agent-session-launch-errors' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-session-contracts' import type { Tab, TabGroup, TabGroupLayoutNode } from '../../../shared/tab-types' @@ -64,16 +65,31 @@ vi.mock('@/lib/agent-catalog', () => ({ getAgentLabel: () => 'Codex', getAgentCatalog: () => [{ id: 'codex', label: 'Codex' }] })) -vi.mock('@/lib/launch-structured-agent-session', () => { +const launchErrorMocks = vi.hoisted(() => { class StructuredAgentSessionCreateRefusalError extends Error {} class StructuredAgentSessionOwnerUnresolvedError extends Error {} + return { StructuredAgentSessionCreateRefusalError, StructuredAgentSessionOwnerUnresolvedError } +}) + +vi.mock('@/lib/structured-agent-session-launch-errors', async () => ({ + ...(await vi.importActual('@/lib/structured-agent-session-launch-errors')), + ...launchErrorMocks +})) + +vi.mock('@/lib/structured-agent-session-launch-create-call', () => ({ + launchStructuredAgentSession: mocks.launch +})) + +vi.mock('@/lib/launch-structured-agent-session', () => { return { createStructuredAgentSessionLaunchIntent: mocks.createIntent, retryStructuredAgentSessionLaunchIntent: vi.fn(), abandonStructuredAgentSessionLaunchIntent: vi.fn(), launchStructuredAgentSession: mocks.launch, - StructuredAgentSessionCreateRefusalError, - StructuredAgentSessionOwnerUnresolvedError + StructuredAgentSessionCreateRefusalError: + launchErrorMocks.StructuredAgentSessionCreateRefusalError, + StructuredAgentSessionOwnerUnresolvedError: + launchErrorMocks.StructuredAgentSessionOwnerUnresolvedError } }) // Each pick opens its chat once its host admits it; here this machine admits at once. @@ -167,8 +183,8 @@ import { discardStructuredLaunchPrompts, hasStagedStructuredLaunchPrompt } from './structured-agent-session-launch-prompt' -import { resetStructuredAgentLaunchPersistenceForTests } from './structured-agent-session-launch-persistence' -import { resetStructuredAgentLaunchRegistryForTests } from './structured-agent-session-launch-registry' +import { resetStructuredAgentLaunchPersistenceForTests } from './agent-session/launch/structured-agent-session-launch-persistence' +import { resetStructuredAgentLaunchRegistryForTests } from './agent-session/launch/structured-agent-session-launch-registry' import { ORCA_LAYOUT_OWNER_IS_MAIN } from '../../../shared/layout-owner-switch' import { createTestStore, makeWorktree, seedStore } from '@/store/slices/store-test-helpers' import { diff --git a/src/renderer/src/lib/workspace-session-hydration-keys.ts b/src/renderer/src/lib/workspace-session-hydration-keys.ts index 182ce6e493e..cb972553d28 100644 --- a/src/renderer/src/lib/workspace-session-hydration-keys.ts +++ b/src/renderer/src/lib/workspace-session-hydration-keys.ts @@ -1,4 +1,4 @@ -import { readStructuredAgentLaunchRecords } from './structured-agent-session-launch-persistence' +import { readStructuredAgentLaunchRecords } from './agent-session/launch/structured-agent-session-launch-persistence' import type { ExecutionHostId } from '../../../shared/execution-host' import { parseExecutionHostId } from '../../../shared/execution-host' import type { WorkspaceKey } from '../../../shared/folder-workspace-types' diff --git a/src/renderer/src/lib/workspace-session-unified-tabs.ts b/src/renderer/src/lib/workspace-session-unified-tabs.ts index bc51c96ac45..2af672abf65 100644 --- a/src/renderer/src/lib/workspace-session-unified-tabs.ts +++ b/src/renderer/src/lib/workspace-session-unified-tabs.ts @@ -1,4 +1,4 @@ -import { structuredLaunchSlotIds } from './structured-agent-session-launch-persistence' +import { structuredLaunchSlotIds } from './agent-session/launch/structured-agent-session-launch-persistence' import type { Tab, TabGroup, TabGroupLayoutNode } from '../../../shared/tab-types' import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' import type { WorkspaceSessionSnapshot } from './workspace-session' diff --git a/src/renderer/src/runtime/local-structured-session-tabs-sync.test.ts b/src/renderer/src/runtime/local-structured-session-tabs-sync.test.ts index 84d5cbb0775..d151f07a1f4 100644 --- a/src/renderer/src/runtime/local-structured-session-tabs-sync.test.ts +++ b/src/renderer/src/runtime/local-structured-session-tabs-sync.test.ts @@ -23,7 +23,7 @@ import { const mocks = vi.hoisted(() => ({ recheckUnconfirmedLaunches: vi.fn() })) -vi.mock('../lib/structured-agent-session-launch-unconfirmed-recheck', () => ({ +vi.mock('../lib/agent-session/launch/structured-agent-session-launch-unconfirmed-recheck', () => ({ recheckUnconfirmedStructuredAgentLaunches: mocks.recheckUnconfirmedLaunches })) diff --git a/src/renderer/src/runtime/local-structured-session-tabs-sync/snapshot-apply.ts b/src/renderer/src/runtime/local-structured-session-tabs-sync/snapshot-apply.ts index 327b325dbe2..c1922d4d926 100644 --- a/src/renderer/src/runtime/local-structured-session-tabs-sync/snapshot-apply.ts +++ b/src/renderer/src/runtime/local-structured-session-tabs-sync/snapshot-apply.ts @@ -2,7 +2,7 @@ import type { RuntimeMobileSessionTabsRemovedResult, RuntimeMobileSessionTabsResult } from '../../../../shared/runtime-types' -import { markStructuredAgentSessionLaunchesPublished } from '../../lib/structured-agent-session-launch-publication' +import { markStructuredAgentSessionLaunchesPublished } from '../../lib/agent-session/launch/structured-agent-session-launch-publication' import type { WorktreeRuntimeOwnerState } from '../../lib/worktree-runtime-owner-state' import { getExecutionHostIdForWorktree } from '../../lib/worktree-runtime-owner' import { applyWebSessionTabsSnapshot } from '../web-session-tabs-sync/snapshot-api' @@ -24,7 +24,7 @@ import { hostSnapshotAffirmsAgentSessions, hostSnapshotAffirmsWorktreeContents } from '../host-session-snapshot-authority' -import { retireAbsentStructuredAgentSessionLaunchCancellationTombstones } from '../../lib/structured-agent-session-launch-registry' +import { retireAbsentStructuredAgentSessionLaunchCancellationTombstones } from '../../lib/agent-session/launch/structured-agent-session-launch-registry' import { LOCAL_EXECUTION_HOST_ID } from '../../../../shared/execution-host' import { beginStructuredAgentSessionAuthoritativeInventory, diff --git a/src/renderer/src/runtime/local-structured-session-tabs-sync/subscription.ts b/src/renderer/src/runtime/local-structured-session-tabs-sync/subscription.ts index ec8604b409e..7ff14b445a3 100644 --- a/src/renderer/src/runtime/local-structured-session-tabs-sync/subscription.ts +++ b/src/renderer/src/runtime/local-structured-session-tabs-sync/subscription.ts @@ -10,7 +10,7 @@ import { refreshLocalStructuredSessionTabs, restoreLocalStructuredSessionTabsOnce } from './inventory-refresh' -import { recheckUnconfirmedStructuredAgentLaunches } from '../../lib/structured-agent-session-launch-unconfirmed-recheck' +import { recheckUnconfirmedStructuredAgentLaunches } from '../../lib/agent-session/launch/structured-agent-session-launch-unconfirmed-recheck' import { scheduleRetiredEpochRepair } from './retired-epoch-repair' import { applyStructuredSessionTabSnapshots, diff --git a/src/renderer/src/runtime/paired-host-structured-launch-bookkeeping.test.ts b/src/renderer/src/runtime/paired-host-structured-launch-bookkeeping.test.ts index 6b3daac687d..379840b81aa 100644 --- a/src/renderer/src/runtime/paired-host-structured-launch-bookkeeping.test.ts +++ b/src/renderer/src/runtime/paired-host-structured-launch-bookkeeping.test.ts @@ -1,7 +1,7 @@ // @vitest-environment happy-dom import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { StructuredLaunchSlotOwner } from '@/lib/structured-agent-session-launch-slot' +import type { StructuredLaunchSlotOwner } from '@/lib/agent-session/launch/structured-agent-session-launch-slot' import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-types' import type { RuntimeClientTarget } from '../../../shared/runtime-client-target' @@ -33,7 +33,7 @@ import { markStructuredAgentSessionLaunchCancelled, resetStructuredAgentLaunchRegistryForTests, retireAbsentStructuredAgentSessionLaunchCancellationTombstones -} from '@/lib/structured-agent-session-launch-registry' +} from '@/lib/agent-session/launch/structured-agent-session-launch-registry' import { beginStructuredAgentSessionAuthoritativeInventory, resetStructuredAgentLaunchCancellationForTests, @@ -42,7 +42,7 @@ import { import { resetStructuredAgentLaunchPersistenceForTests, writeStructuredAgentLaunchRecord -} from '@/lib/structured-agent-session-launch-persistence' +} from '@/lib/agent-session/launch/structured-agent-session-launch-persistence' import { suppressCancelledStructuredSessionTabs } from './structured-agent-session-tab-retirement' import { applyWebSessionTabsStorePatch } from './web-session-tabs-sync/store-patch' const layoutOwner: StructuredLaunchSlotOwner = { diff --git a/src/renderer/src/runtime/structured-agent-session-tab-retirement.test.ts b/src/renderer/src/runtime/structured-agent-session-tab-retirement.test.ts index f4992df1835..48537f2d5cb 100644 --- a/src/renderer/src/runtime/structured-agent-session-tab-retirement.test.ts +++ b/src/renderer/src/runtime/structured-agent-session-tab-retirement.test.ts @@ -1,7 +1,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-types' -import type { markStructuredAgentSessionLaunchCancelled } from '@/lib/structured-agent-session-launch-registry' -import type { StructuredLaunchSlotOwner } from '@/lib/structured-agent-session-launch-slot' +import type { markStructuredAgentSessionLaunchCancelled } from '@/lib/agent-session/launch/structured-agent-session-launch-registry' +import type { StructuredLaunchSlotOwner } from '@/lib/agent-session/launch/structured-agent-session-launch-slot' import type { RuntimeClientTarget } from '../../../shared/runtime-client-target' const mocks = vi.hoisted(() => ({ @@ -25,7 +25,7 @@ const mocks = vi.hoisted(() => ({ >() })) -vi.mock('@/lib/structured-agent-session-launch-registry', () => ({ +vi.mock('@/lib/agent-session/launch/structured-agent-session-launch-registry', () => ({ hasStructuredAgentSessionLaunchCancellationTombstone: mocks.hasTombstone, markStructuredAgentSessionLaunchCancelled: mocks.markCancelled })) diff --git a/src/renderer/src/runtime/structured-agent-session-tab-retirement.ts b/src/renderer/src/runtime/structured-agent-session-tab-retirement.ts index 19fb781afcb..1a714a4422c 100644 --- a/src/renderer/src/runtime/structured-agent-session-tab-retirement.ts +++ b/src/renderer/src/runtime/structured-agent-session-tab-retirement.ts @@ -1,9 +1,9 @@ -import type { StructuredLaunchSlotOwner } from '@/lib/structured-agent-session-launch-slot' +import type { StructuredLaunchSlotOwner } from '@/lib/agent-session/launch/structured-agent-session-launch-slot' import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-types' import { hasStructuredAgentSessionLaunchCancellationTombstone, markStructuredAgentSessionLaunchCancelled -} from '@/lib/structured-agent-session-launch-registry' +} from '@/lib/agent-session/launch/structured-agent-session-launch-registry' import { forgetUnlistedCreatedChat } from '@/lib/structured-agent-session-unlisted-created-chats' import { discardStructuredAgentSessionChatSends } from '@/lib/structured-agent-session-launch-prompt' import { stopStructuredAgentSessionSends } from '@/components/native-chat/structured-agent-session-message-sender' diff --git a/src/renderer/src/runtime/structured-launch-cancel-layout-owner.test.ts b/src/renderer/src/runtime/structured-launch-cancel-layout-owner.test.ts index ee45390ab1f..085bf298f06 100644 --- a/src/renderer/src/runtime/structured-launch-cancel-layout-owner.test.ts +++ b/src/renderer/src/runtime/structured-launch-cancel-layout-owner.test.ts @@ -5,7 +5,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-types' import type { RuntimeClientTarget } from '../../../shared/runtime-client-target' import type { ExecutionHostId } from '../../../shared/execution-host' -import type { StructuredLaunchSlotOwner } from '@/lib/structured-agent-session-launch-slot' +import type { StructuredLaunchSlotOwner } from '@/lib/agent-session/launch/structured-agent-session-launch-slot' import { useAppStore } from '@/store' import { recoverWebSessionTerminalOrphansBeforeApply } from './web-session-terminal-orphan-recovery' @@ -49,12 +49,12 @@ import { resetStructuredAgentLaunchRegistryForTests, setStructuredLaunchState, type StructuredLaunchState -} from '@/lib/structured-agent-session-launch-registry' +} from '@/lib/agent-session/launch/structured-agent-session-launch-registry' import { readStructuredAgentLaunchRecord, resetStructuredAgentLaunchPersistenceForTests, writeStructuredAgentLaunchRecord -} from '@/lib/structured-agent-session-launch-persistence' +} from '@/lib/agent-session/launch/structured-agent-session-launch-persistence' import { wasStructuredAgentLaunchClosedByLocalCancel } from '@/lib/structured-agent-session-local-launch-cancel' import { beginStructuredAgentSessionTabClose, diff --git a/src/renderer/src/runtime/web-session-client-owned-tab-placement.ts b/src/renderer/src/runtime/web-session-client-owned-tab-placement.ts index e749f15ff10..9ac23eefd73 100644 --- a/src/renderer/src/runtime/web-session-client-owned-tab-placement.ts +++ b/src/renderer/src/runtime/web-session-client-owned-tab-placement.ts @@ -1,4 +1,4 @@ -import { structuredLaunchSlotIds } from '@/lib/structured-agent-session-launch-persistence' +import { structuredLaunchSlotIds } from '@/lib/agent-session/launch/structured-agent-session-launch-persistence' import type { TabGroup, TabGroupLayoutNode } from '../../../shared/tab-types' import { pickNextActiveTab, diff --git a/src/renderer/src/runtime/web-session-tabs-sync-reconnect-resubscribe.test.tsx b/src/renderer/src/runtime/web-session-tabs-sync-reconnect-resubscribe.test.tsx index 0f4fe768f3e..bb17d4ede75 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync-reconnect-resubscribe.test.tsx +++ b/src/renderer/src/runtime/web-session-tabs-sync-reconnect-resubscribe.test.tsx @@ -13,7 +13,7 @@ const mocks = vi.hoisted(() => ({ recheckUnconfirmedLaunches: vi.fn() })) -vi.mock('@/lib/structured-agent-session-launch-unconfirmed-recheck', () => ({ +vi.mock('@/lib/agent-session/launch/structured-agent-session-launch-unconfirmed-recheck', () => ({ recheckUnconfirmedStructuredAgentLaunches: mocks.recheckUnconfirmedLaunches })) diff --git a/src/renderer/src/runtime/web-session-tabs-sync/apply-preparation-browser.ts b/src/renderer/src/runtime/web-session-tabs-sync/apply-preparation-browser.ts index cd8841d1cf3..2878624e1dc 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync/apply-preparation-browser.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync/apply-preparation-browser.ts @@ -20,7 +20,7 @@ import { sameOpenFiles, webSessionOpenFilesForWorktree } from './state-equality-files' -import { shouldRetainStructuredAgentSessionLaunchTab } from '@/lib/structured-agent-session-launch-registry' +import { shouldRetainStructuredAgentSessionLaunchTab } from '@/lib/agent-session/launch/structured-agent-session-launch-registry' import { executionHostIdForSessionTabsOwner } from '../local-structured-session-owner' import { isAgentSessionTabOfAnotherHost } from './mirror-row-ownership' import { isUnlistedCreatedChat } from '@/lib/structured-agent-session-unlisted-created-chats' diff --git a/src/renderer/src/runtime/web-session-tabs-sync/global-session-inventory-event.ts b/src/renderer/src/runtime/web-session-tabs-sync/global-session-inventory-event.ts index 1ad98ba83ef..33ff997caa5 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync/global-session-inventory-event.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync/global-session-inventory-event.ts @@ -1,6 +1,6 @@ import { toRuntimeExecutionHostId } from '../../../../shared/execution-host' import type { RuntimeMobileSessionTabsResult } from '../../../../shared/runtime-types' -import { recheckUnconfirmedStructuredAgentLaunches } from '../../lib/structured-agent-session-launch-unconfirmed-recheck' +import { recheckUnconfirmedStructuredAgentLaunches } from '../../lib/agent-session/launch/structured-agent-session-launch-unconfirmed-recheck' import { useAppStore } from '../../store' import { recoverMirroredTerminalOrphansBeforeApply } from './mirror-terminal-orphan-recovery' import { queueAcceptedWebSessionTerminalSnapshot } from '../web-session-terminal-handle-events' diff --git a/src/renderer/src/runtime/web-session-tabs-sync/store-patch.ts b/src/renderer/src/runtime/web-session-tabs-sync/store-patch.ts index fbfcedef107..4e2fdb91e34 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync/store-patch.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync/store-patch.ts @@ -1,7 +1,7 @@ import { markStructuredAgentSessionLaunchesPublished, publishedStructuredSessions -} from '@/lib/structured-agent-session-launch-publication' +} from '@/lib/agent-session/launch/structured-agent-session-launch-publication' import { toRuntimeExecutionHostId } from '../../../../shared/execution-host' import type { AppState } from '../../store' import { useAppStore } from '../../store' diff --git a/src/renderer/src/runtime/web-session-tabs-sync/terminal-surfaces.ts b/src/renderer/src/runtime/web-session-tabs-sync/terminal-surfaces.ts index 5fdb6e4b94b..82d20206d89 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync/terminal-surfaces.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync/terminal-surfaces.ts @@ -1,4 +1,4 @@ -import { readStructuredAgentLaunchRecord } from '@/lib/structured-agent-session-launch-persistence' +import { readStructuredAgentLaunchRecord } from '@/lib/agent-session/launch/structured-agent-session-launch-persistence' import type { RuntimeMobileSessionTabsResult, RuntimeMobileSessionAgentTab @@ -24,7 +24,7 @@ import type { import type { Tab } from '../../../../shared/tab-types' import type { ExecutionHostId } from '../../../../shared/execution-host' import { structuredAgentSessionTabId } from '../../../../shared/structured-agent-session-projection' -import { hasStructuredAgentSessionLaunchCancellationTombstone } from '@/lib/structured-agent-session-launch-registry' +import { hasStructuredAgentSessionLaunchCancellationTombstone } from '@/lib/agent-session/launch/structured-agent-session-launch-registry' import { withPendingPaneTitleRenames } from '../pending-pane-title-renames' import { isMirroredTerminalOfAnotherEnvironment, diff --git a/src/renderer/src/store/slices/tabs-hydration.ts b/src/renderer/src/store/slices/tabs-hydration.ts index 2fda120a53e..d0466edd337 100644 --- a/src/renderer/src/store/slices/tabs-hydration.ts +++ b/src/renderer/src/store/slices/tabs-hydration.ts @@ -1,4 +1,4 @@ -import { structuredLaunchSlotIds } from '@/lib/structured-agent-session-launch-persistence' +import { structuredLaunchSlotIds } from '@/lib/agent-session/launch/structured-agent-session-launch-persistence' import type { Tab, TabGroup, TabGroupLayoutNode } from '../../../../shared/tab-types' import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' import { isValidTerminalTabId } from '../../../../shared/terminal-tab-id' diff --git a/src/renderer/src/store/slices/tabs/tabs-close-actions.ts b/src/renderer/src/store/slices/tabs/tabs-close-actions.ts index 4c14d12866a..a1c17aa72b5 100644 --- a/src/renderer/src/store/slices/tabs/tabs-close-actions.ts +++ b/src/renderer/src/store/slices/tabs/tabs-close-actions.ts @@ -12,7 +12,7 @@ import { beginStructuredAgentSessionTabClose } from '@/runtime/structured-agent- import { hasStructuredAgentSessionLaunchCancellationTombstone, shouldRetainStructuredAgentSessionLaunchTab -} from '@/lib/structured-agent-session-launch-registry' +} from '@/lib/agent-session/launch/structured-agent-session-launch-registry' import { structuredAgentSessionTabId } from '../../../../../shared/structured-agent-session-projection' import { clearWebSessionFocusIntentIfMatches } from '@/runtime/web-session-focus-intent' import { ownsGlobalSelection } from '../../global-selection-owner' diff --git a/src/renderer/src/store/slices/tabs/tabs-create-actions.ts b/src/renderer/src/store/slices/tabs/tabs-create-actions.ts index 9bb20041849..e85ab7fc8b2 100644 --- a/src/renderer/src/store/slices/tabs/tabs-create-actions.ts +++ b/src/renderer/src/store/slices/tabs/tabs-create-actions.ts @@ -1,4 +1,4 @@ -import { structuredLaunchSlotIds } from '@/lib/structured-agent-session-launch-persistence' +import { structuredLaunchSlotIds } from '@/lib/agent-session/launch/structured-agent-session-launch-persistence' import { createBrowserUuid } from '@/lib/browser-uuid' import { getActiveExecutionHostIdForWorktree } from '@/lib/unified-tab-host-ownership' import type { Tab, TabGroup } from '../../../../../shared/tab-types' diff --git a/src/renderer/src/store/slices/tabs/tabs-reconciliation.ts b/src/renderer/src/store/slices/tabs/tabs-reconciliation.ts index ed593c3c02c..a6857490818 100644 --- a/src/renderer/src/store/slices/tabs/tabs-reconciliation.ts +++ b/src/renderer/src/store/slices/tabs/tabs-reconciliation.ts @@ -1,4 +1,4 @@ -import { structuredLaunchSlotIds } from '@/lib/structured-agent-session-launch-persistence' +import { structuredLaunchSlotIds } from '@/lib/agent-session/launch/structured-agent-session-launch-persistence' import type { AppState } from '../../types' import type { Tab } from '../../../../../shared/tab-types' import { dedupeTabOrder } from '../../../../../shared/workspace-layout/tab-order' diff --git a/src/renderer/src/store/slices/worktrees/listing/stale-listing-purges-created-worktree.test.ts b/src/renderer/src/store/slices/worktrees/listing/stale-listing-purges-created-worktree.test.ts index dba27700422..f40e5aef6a1 100644 --- a/src/renderer/src/store/slices/worktrees/listing/stale-listing-purges-created-worktree.test.ts +++ b/src/renderer/src/store/slices/worktrees/listing/stale-listing-purges-created-worktree.test.ts @@ -19,12 +19,12 @@ import { readStructuredAgentLaunchRecord, resetStructuredAgentLaunchPersistenceForTests, writeStructuredAgentLaunchRecord -} from '@/lib/structured-agent-session-launch-persistence' +} from '@/lib/agent-session/launch/structured-agent-session-launch-persistence' import { wasStructuredAgentLaunchClosedByLocalCancel } from '@/lib/structured-agent-session-local-launch-cancel' import { hasStructuredAgentSessionLaunchCancellationTombstone, resetStructuredAgentLaunchRegistryForTests -} from '@/lib/structured-agent-session-launch-registry' +} from '@/lib/agent-session/launch/structured-agent-session-launch-registry' vi.mock('sonner', () => ({ toast: { warning: vi.fn(), info: vi.fn(), success: vi.fn(), error: vi.fn(), dismiss: vi.fn() } diff --git a/src/renderer/src/store/slices/worktrees/teardown/purged-structured-launch-retirement.ts b/src/renderer/src/store/slices/worktrees/teardown/purged-structured-launch-retirement.ts index c64ebf7b09b..2133076d86d 100644 --- a/src/renderer/src/store/slices/worktrees/teardown/purged-structured-launch-retirement.ts +++ b/src/renderer/src/store/slices/worktrees/teardown/purged-structured-launch-retirement.ts @@ -8,10 +8,10 @@ import { markStructuredAgentSessionLaunchCancelledSilently, shouldRetainStructuredAgentSessionLaunchTab, structuredLaunchStates -} from '@/lib/structured-agent-session-launch-registry' +} from '@/lib/agent-session/launch/structured-agent-session-launch-registry' import { discardStructuredAgentSessionChatSends } from '@/lib/structured-agent-session-launch-prompt' import { forgetUnlistedCreatedChat } from '@/lib/structured-agent-session-unlisted-created-chats' -import { readStructuredAgentLaunchRecords } from '@/lib/structured-agent-session-launch-persistence' +import { readStructuredAgentLaunchRecords } from '@/lib/agent-session/launch/structured-agent-session-launch-persistence' import { retireStructuredAgentSessionReadOwner } from '@/components/native-chat/structured-agent-session-read-owner-registry' import { clearWebSessionFocusIntentIfMatches } from '@/runtime/web-session-focus-intent' import { diff --git a/src/shared/wsl-move/wsl-move-storage-dispositions.ts b/src/shared/wsl-move/wsl-move-storage-dispositions.ts index 0c92ac5ef08..32c8bf90aea 100644 --- a/src/shared/wsl-move/wsl-move-storage-dispositions.ts +++ b/src/shared/wsl-move/wsl-move-storage-dispositions.ts @@ -14,10 +14,11 @@ export const LOCAL_STORAGE_MODULE_DISPOSITIONS: Record