mirror of
https://github.com/stablyai/orca.git
synced 2026-10-30 16:47:34 +00:00
refactor: group renderer session launch lifecycle (#33586)
* refactor: organize renderer session launch lifecycle * refactor: consolidate launch registry test imports
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
+2
-2
@@ -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,
|
||||
|
||||
@@ -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'
|
||||
|
||||
+19
-4
@@ -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<typeof LaunchErrors>('@/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,
|
||||
|
||||
+20
-5
@@ -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<typeof LaunchErrors>('@/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,
|
||||
|
||||
@@ -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<typeof LaunchIntentModule>(
|
||||
'@/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'
|
||||
|
||||
@@ -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'
|
||||
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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'
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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() }))
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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 {
|
||||
|
||||
+1
-1
@@ -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(
|
||||
+6
-6
@@ -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)) {
|
||||
+3
-3
@@ -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'
|
||||
+4
-8
@@ -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'
|
||||
+2
-2
@@ -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
|
||||
+1
-1
@@ -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'
|
||||
+3
-3
@@ -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,
|
||||
+7
-7
@@ -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'
|
||||
|
||||
+6
-6
@@ -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
|
||||
+12
-12
@@ -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
|
||||
+22
-7
@@ -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<typeof LaunchErrors>('@/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<typeof RecoveryModule>(
|
||||
'@/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'
|
||||
|
||||
+4
-4
@@ -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,
|
||||
+1
-1
@@ -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,
|
||||
+25
-8
@@ -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<typeof LaunchErrors>('@/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'
|
||||
|
||||
+3
-3
@@ -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,
|
||||
@@ -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 {
|
||||
|
||||
@@ -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<typeof LaunchErrors>('@/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
|
||||
}))
|
||||
|
||||
+4
-4
@@ -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'
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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<typeof LaunchErrors>('@/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,
|
||||
|
||||
@@ -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<typeof LaunchErrors>('@/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'
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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<typeof LaunchErrors>('@/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 }
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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<typeof LaunchErrors>('@/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<typeof RecoveryModule>(
|
||||
'@/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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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<typeof LaunchErrors>('@/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'
|
||||
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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<typeof LaunchErrors>('@/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<typeof RecoveryModule>(
|
||||
'@/lib/structured-agent-session-launch-recovery'
|
||||
'@/lib/agent-session/launch/structured-agent-session-launch-recovery'
|
||||
)
|
||||
return { ...actual, launchAndReconcile: vi.fn(actual.launchAndReconcile) }
|
||||
})
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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<typeof LaunchErrors>('@/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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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<typeof LaunchErrors>('@/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<typeof RecoveryModule>(
|
||||
'@/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(
|
||||
|
||||
@@ -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'
|
||||
|
||||
|
||||
@@ -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<string>()
|
||||
|
||||
@@ -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<typeof LaunchErrors>('@/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 {
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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
|
||||
}))
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
@@ -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
|
||||
}))
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
}))
|
||||
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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'
|
||||
|
||||
+2
-2
@@ -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() }
|
||||
|
||||
+2
-2
@@ -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 {
|
||||
|
||||
@@ -14,10 +14,11 @@ export const LOCAL_STORAGE_MODULE_DISPOSITIONS: Record<string, WslMoveFieldDispo
|
||||
disposition: 'rewrite-desktop',
|
||||
item: 43
|
||||
},
|
||||
'src/renderer/src/lib/structured-agent-session-launch-persistence.ts': notApplicableDisposition(
|
||||
44,
|
||||
'Chats stay local on the desktop (owner decision C), so their launch records stay as written.'
|
||||
),
|
||||
'src/renderer/src/lib/agent-session/launch/structured-agent-session-launch-persistence.ts':
|
||||
notApplicableDisposition(
|
||||
44,
|
||||
'Chats stay local on the desktop (owner decision C), so their launch records stay as written.'
|
||||
),
|
||||
'src/renderer/src/components/editor/file-view-preference-storage.ts': {
|
||||
disposition: 'rewrite-desktop',
|
||||
item: 72,
|
||||
|
||||
Reference in New Issue
Block a user