@tutti-os/agent-activity-core 0.0.223 → 0.0.225
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -8
- package/dist/index.d.ts +102 -25
- package/dist/index.js +394 -41
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/capabilityReferences.ts","../src/sessionNormalization.ts","../src/generated/agentCapabilityKeys.ts","../src/capabilities.ts","../src/engine/sessionEntityKeys.ts","../src/engine/pendingIntents.selectors.ts","../src/engine/pendingIntents.types.ts","../src/engine/sessionLifecycle.availability.ts","../src/engine/sessionLifecycle.selectors.ts","../src/engine/agentActivitySnapshot.projector.ts","../src/merge.ts","../src/activityValueParsing.ts","../src/inlineActivityMessages.ts","../src/pagination.ts","../src/selectors.ts","../src/usage.ts","../src/engine/effectExecutor.ts","../src/engine/expiryClock.ts","../src/engine/engineRuntime.reducer.ts","../src/engine/promptQueue.lookup.ts","../src/engine/promptQueue.prompt.ts","../src/engine/promptQueue.record.ts","../src/engine/promptQueue.sendNow.ts","../src/engine/promptQueue.drainDecision.ts","../src/engine/promptQueue.submit.ts","../src/engine/promptQueue.initialState.ts","../src/engine/promptQueue.reducer.ts","../src/engine/pendingIntents.activationExtras.ts","../src/engine/pendingIntents.inactiveSessions.ts","../src/engine/pendingSubmit.reducer.ts","../src/engine/pendingIntents.reducer.ts","../src/engine/sessionSettings.reducer.ts","../src/interactionMonotonicity.ts","../src/engine/sessionEntities.reducer.ts","../src/engine/sessionLifecycle.reducer.ts","../src/engine/sessionReconcile.reducer.ts","../src/engine/attentionReadState.reducer.ts","../src/engine/commandResult.validation.ts","../src/engine/planDecision.reducer.ts","../src/engine/sessionCommands.reducer.ts","../src/engine/sessionMessages.reducer.ts","../src/engine/composerOptions.helpers.ts","../src/engine/composerOptions.reducer.ts","../src/engine/sessionMutations.reducer.ts","../src/engine/tuttiModeActivation.reducer.ts","../src/engine/rootReducer.ts","../src/engine/types.ts","../src/engine/createAgentSessionEngine.ts","../src/engine/engineRuntime.selectors.ts","../src/engine/sessionMutations.selectors.ts","../src/engine/sessionMutationDispatch.ts","../src/engine/tuttiModeActivation.selectors.ts","../src/engine/attentionReadState.selectors.ts","../src/engine/sessionMessages.selectors.ts","../src/engine/composerOptions.selectors.ts","../src/engine/sessionReconcile.selectors.ts","../src/engine/planDecision.selectors.ts","../src/engine/sessionCommands.selectors.ts","../src/engine/promptQueue.selectors.ts","../src/workspaceAgentSessionProjection.ts"],"sourcesContent":["import type { AgentActivityCapabilityReference } from \"./types.ts\";\n\nexport function normalizeAgentActivityCapabilityReferences(\n references: readonly AgentActivityCapabilityReference[] | null | undefined\n): readonly AgentActivityCapabilityReference[] {\n if (!references?.length) return [];\n const seen = new Set<string>();\n const normalized: AgentActivityCapabilityReference[] = [];\n for (const reference of references) {\n const capability = reference.capability.trim();\n if (capability !== \"tutti\" || reference.source !== \"slash_command\")\n continue;\n const key = `${reference.source}:${capability}`;\n if (seen.has(key)) continue;\n seen.add(key);\n normalized.push({ capability: \"tutti\", source: \"slash_command\" });\n }\n return normalized;\n}\n","import type { AgentActivitySession } from \"./types.ts\";\n\ntype RequiredSessionInputFields =\n | \"activeTurnId\"\n | \"agentSessionId\"\n | \"cwd\"\n | \"latestTurnInteractions\"\n | \"pendingInteractions\"\n | \"provider\"\n | \"title\"\n | \"workspaceId\";\n\nexport type AgentActivitySessionInput = Pick<\n AgentActivitySession,\n RequiredSessionInputFields\n> &\n Partial<Omit<AgentActivitySession, RequiredSessionInputFields>>;\n\nexport function normalizeAgentActivitySession<const Provider extends string>(\n source: AgentActivitySessionInput & {\n provider: Provider;\n providerSessionId: string;\n }\n): AgentActivitySession & { provider: Provider; providerSessionId: string };\nexport function normalizeAgentActivitySession(\n source: AgentActivitySessionInput\n): AgentActivitySession;\nexport function normalizeAgentActivitySession(\n source: AgentActivitySessionInput\n): AgentActivitySession {\n const createdAtUnixMs = source.createdAtUnixMs ?? source.startedAtUnixMs ?? 0;\n const updatedAtUnixMs =\n source.updatedAtUnixMs ?? source.lastEventUnixMs ?? createdAtUnixMs;\n return {\n ...source,\n kind: source.kind ?? \"root\",\n rootAgentSessionId: source.rootAgentSessionId ?? null,\n rootTurnId: source.rootTurnId ?? null,\n parentAgentSessionId: source.parentAgentSessionId ?? null,\n parentTurnId: source.parentTurnId ?? null,\n parentToolCallId: source.parentToolCallId ?? null,\n agentTargetId: source.agentTargetId ?? null,\n providerSessionId: source.providerSessionId ?? null,\n activeTurnId: source.activeTurnId,\n activeTurn: source.activeTurn ?? null,\n latestTurn: source.latestTurn ?? source.activeTurn ?? null,\n latestTurnInteractions: source.latestTurnInteractions,\n pendingInteractions: source.pendingInteractions,\n settings: source.settings ?? {},\n permissionConfig: source.permissionConfig ?? {\n configurable: false,\n modes: []\n },\n capabilities: source.capabilities ?? null,\n usage: source.usage ?? null,\n goal: source.goal ?? null,\n tuttiModeActivation: source.tuttiModeActivation ?? null,\n imported: source.imported ?? false,\n visible: source.visible ?? true,\n resumable: source.resumable ?? false,\n messageVersion: source.messageVersion ?? 0,\n lastEventUnixMs: source.lastEventUnixMs ?? updatedAtUnixMs,\n startedAtUnixMs: source.startedAtUnixMs ?? createdAtUnixMs,\n endedAtUnixMs: source.endedAtUnixMs ?? null,\n pinnedAtUnixMs: source.pinnedAtUnixMs ?? null,\n createdAtUnixMs,\n updatedAtUnixMs\n };\n}\n","// Code generated by tools/scripts/generate-agent-gui-provider-catalog.mjs. DO NOT EDIT.\n\nexport const AGENT_CAPABILITY_KEYS = [\n \"imageInput\",\n \"modelImageInputRequired\",\n \"modelSwitch\",\n \"modelPlanBinding\",\n \"skills\",\n \"compact\",\n \"tokenUsage\",\n \"rateLimits\",\n \"planMode\",\n \"interrupt\",\n \"activeTurnGuidance\",\n \"browserUse\",\n \"computerUse\",\n \"goalPause\",\n \"planImplementation\",\n \"permissionModeChangeDuringTurn\",\n \"permissionModeChangeDeferred\",\n \"review\",\n \"resumeRunningTurn\"\n] as const;\nexport type AgentCapabilityKey = (typeof AGENT_CAPABILITY_KEYS)[number];\n","import type {\n AgentActivityComposerOptions,\n AgentActivitySessionCapabilities\n} from \"./types.ts\";\nexport {\n AGENT_CAPABILITY_KEYS,\n type AgentCapabilityKey\n} from \"./generated/agentCapabilityKeys.ts\";\nimport {\n AGENT_CAPABILITY_KEYS,\n type AgentCapabilityKey\n} from \"./generated/agentCapabilityKeys.ts\";\n\nexport interface AgentActivityCapabilityInput {\n composerOptions?: AgentActivityComposerOptions | null;\n sessionCapabilities?: Partial<Record<AgentCapabilityKey, boolean>> | null;\n}\n\nexport function resolveAgentActivityCapability(\n key: AgentCapabilityKey,\n input: AgentActivityCapabilityInput\n): boolean | null {\n const sessionValue = input.sessionCapabilities?.[key];\n if (typeof sessionValue === \"boolean\") return sessionValue;\n const composerValue = input.composerOptions?.capabilities?.[key];\n return typeof composerValue === \"boolean\" ? composerValue : null;\n}\n\nexport function hasAgentCapability(\n capabilities: Partial<Record<AgentCapabilityKey, boolean>> | null | undefined,\n key: AgentCapabilityKey\n): boolean {\n return capabilities?.[key] === true;\n}\n\n/**\n * Projects the canonical capability id list carried by session metadata into\n * the closed AgentActivity capability record consumed by AgentGUI.\n */\nexport function agentActivitySessionCapabilitiesFromIds(\n capabilities: readonly string[]\n): AgentActivitySessionCapabilities {\n const capabilitySet = new Set(capabilities);\n return Object.fromEntries(\n AGENT_CAPABILITY_KEYS.map((capability) => [\n capability,\n capabilitySet.has(capability)\n ])\n ) as unknown as AgentActivitySessionCapabilities;\n}\n","export function canonicalTurnKey(\n agentSessionId: string,\n turnId: string\n): string {\n return scopedEntityKey(agentSessionId, turnId);\n}\n\nexport function canonicalInteractionKey(\n agentSessionId: string,\n turnId: string,\n requestId: string\n): string {\n return scopedEntityKey(agentSessionId, scopedEntityKey(turnId, requestId));\n}\n\nfunction scopedEntityKey(agentSessionId: string, entityId: string): string {\n const session = agentSessionId.trim();\n const entity = entityId.trim();\n return `${session.length}:${session}${entity}`;\n}\n","import type { AgentSessionEngineState } from \"./types.ts\";\nimport type {\n PendingActivationIntentRecord,\n PendingSubmitIntentRecord\n} from \"./pendingIntents.types.ts\";\nimport { canonicalTurnKey } from \"./sessionEntityKeys.ts\";\n\nexport function selectPendingActivations(\n state: AgentSessionEngineState\n): readonly PendingActivationIntentRecord[] {\n return Object.values(state.pendingIntents.activationsByRequestId).sort(\n (left, right) =>\n left.requestedAtUnixMs - right.requestedAtUnixMs ||\n left.requestId.localeCompare(right.requestId)\n );\n}\n\nexport function selectPendingActivationByRequestId(\n state: AgentSessionEngineState,\n requestId: string | null | undefined\n): PendingActivationIntentRecord | null {\n const id = requestId?.trim() ?? \"\";\n return state.pendingIntents.activationsByRequestId[id] ?? null;\n}\n\nconst EMPTY_PENDING_SUBMITS: readonly PendingSubmitIntentRecord[] = [];\n\nexport interface SessionActivationPresentation {\n errorCode: string | null;\n errorMessage: string | null;\n requestId: string | null;\n status: \"inactive\" | \"activating\" | \"active\" | \"failed\";\n}\n\nexport function selectPendingSubmitsForSession(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): readonly PendingSubmitIntentRecord[] {\n const id = agentSessionId?.trim() ?? \"\";\n const matches = Object.values(\n state.pendingIntents.submitsByClientSubmitId\n ).filter((pending) => pending.agentSessionId === id);\n return matches.length > 0 ? matches : EMPTY_PENDING_SUBMITS;\n}\n\nexport function pendingSubmitRecordListsEqual(\n left: readonly PendingSubmitIntentRecord[],\n right: readonly PendingSubmitIntentRecord[]\n): boolean {\n return (\n left.length === right.length &&\n left.every((record, index) => record === right[index])\n );\n}\n\nexport function selectSessionIsSubmitting(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): boolean {\n const id = agentSessionId?.trim() ?? \"\";\n if (!id) {\n return false;\n }\n const visibleQueuedSubmitIds = new Set(\n (state.promptQueue.recordsBySessionId[id]?.prompts ?? [])\n .filter((prompt) => prompt.visibleInQueue !== false)\n .map((prompt) => prompt.clientSubmitId)\n .filter((value): value is string => Boolean(value))\n );\n return selectPendingSubmitsForSession(state, id).some(\n (pending) =>\n (pending.status === \"requested\" || pending.status === \"uncertain\") &&\n !visibleQueuedSubmitIds.has(pending.clientSubmitId)\n );\n}\n\nexport function selectSessionHasUnconfirmedSubmit(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): boolean {\n const id = agentSessionId?.trim() ?? \"\";\n const session = id ? state.sessionLifecycle.sessionsById[id] : undefined;\n return selectPendingSubmitsForSession(state, agentSessionId).some(\n (pending) => {\n if (pending.status !== \"accepted\") return false;\n const turnId = pending.turnId?.trim() ?? \"\";\n if (!turnId) return true;\n const turn =\n state.sessionLifecycle.turnsById[\n canonicalTurnKey(pending.agentSessionId, turnId)\n ];\n if (turn?.phase === \"settled\") return false;\n return session?.activeTurnId === turnId;\n }\n );\n}\n\nexport function selectLatestPendingSubmitForSession(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): PendingSubmitIntentRecord | null {\n let latest: PendingSubmitIntentRecord | null = null;\n for (const pending of selectPendingSubmitsForSession(state, agentSessionId)) {\n if (!latest || pending.requestedAtUnixMs >= latest.requestedAtUnixMs) {\n latest = pending;\n }\n }\n return latest;\n}\n\nexport function selectLatestActivationForSession(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): PendingActivationIntentRecord | null {\n const id = agentSessionId?.trim() ?? \"\";\n let latest: PendingActivationIntentRecord | null = null;\n for (const activation of Object.values(\n state.pendingIntents.activationsByRequestId\n )) {\n if (\n activation.agentSessionId === id &&\n (!latest || activation.requestedAtUnixMs >= latest.requestedAtUnixMs)\n ) {\n latest = activation;\n }\n }\n return latest;\n}\n\nexport function selectSessionActivationPresentations(\n state: AgentSessionEngineState\n): Readonly<Record<string, SessionActivationPresentation>> {\n const latestBySessionId = new Map<string, PendingActivationIntentRecord>();\n for (const activation of Object.values(\n state.pendingIntents.activationsByRequestId\n )) {\n const current = latestBySessionId.get(activation.agentSessionId);\n if (!current || activation.requestedAtUnixMs >= current.requestedAtUnixMs) {\n latestBySessionId.set(activation.agentSessionId, activation);\n }\n }\n const result: Record<string, SessionActivationPresentation> = {};\n for (const [agentSessionId, activation] of latestBySessionId) {\n result[agentSessionId] = {\n errorCode: activation.errorCode,\n errorMessage: activation.errorMessage,\n requestId: activation.requestId,\n status:\n activation.settingsUpdateStatus === \"failed\"\n ? \"failed\"\n : activation.status === \"confirmed\"\n ? \"active\"\n : activation.status === \"failed\"\n ? \"failed\"\n : activation.status === \"canceled\"\n ? \"inactive\"\n : \"activating\"\n };\n }\n for (const agentSessionId of Object.keys(\n state.pendingIntents.inactiveSessionIds\n )) {\n result[agentSessionId] = {\n errorCode: null,\n errorMessage: null,\n requestId: null,\n status: \"inactive\"\n };\n }\n return result;\n}\n\nexport function sessionActivationPresentationMapsEqual(\n left: Readonly<Record<string, SessionActivationPresentation>>,\n right: Readonly<Record<string, SessionActivationPresentation>>\n): boolean {\n const leftKeys = Object.keys(left);\n const rightKeys = Object.keys(right);\n return (\n leftKeys.length === rightKeys.length &&\n leftKeys.every((key) => {\n const a = left[key];\n const b = right[key];\n return (\n b !== undefined &&\n a?.errorCode === b.errorCode &&\n a.errorMessage === b.errorMessage &&\n a.requestId === b.requestId &&\n a.status === b.status\n );\n })\n );\n}\n","import type {\n AgentActivityCapabilityReference,\n AgentActivityInitialGoalControl,\n AgentActivityInitialTuttiModeActivation,\n AgentActivityMessage,\n AgentActivitySessionSettings,\n AgentActivitySubmitDiagnostics,\n AgentActivitySubmitSettingsPatch,\n AgentPromptContentBlock\n} from \"../types.ts\";\nimport type { AgentActivitySessionMessageWindow } from \"../messageWindow.types.ts\";\nimport type { AgentActivityRailPlacement } from \"../railPlacement.types.ts\";\n\nexport type PendingActivationStatus =\n | \"requested\"\n | \"confirmed\"\n | \"canceled\"\n | \"uncertain\"\n | \"failed\";\n\n/** True while an activation may still yield, or already yielded, a session. */\nexport function isPendingActivationViable(\n activation: { status: PendingActivationStatus } | null | undefined\n): boolean {\n return (\n activation !== null &&\n activation !== undefined &&\n activation.status !== \"failed\" &&\n activation.status !== \"canceled\"\n );\n}\n\ninterface PendingActivationIntentRecordBase {\n agentSessionId: string;\n capabilityRefs?: readonly AgentActivityCapabilityReference[];\n content: readonly AgentPromptContentBlock[];\n displayPrompt?: string;\n cwd: string;\n errorCode: string | null;\n errorMessage: string | null;\n expiresAtUnixMs: number;\n initialTurnExpected: boolean;\n initialGoalControl?: Readonly<AgentActivityInitialGoalControl>;\n railSectionKey?: string;\n railPlacement?: AgentActivityRailPlacement;\n submitDiagnostics?: Readonly<AgentActivitySubmitDiagnostics>;\n pendingSettingsPatch?: Readonly<Record<string, unknown>>;\n settingsUpdateStatus?: \"failed\" | \"inFlight\" | \"unknown\";\n requestedAtUnixMs: number;\n requestId: string;\n settings?: AgentActivitySessionSettings;\n status: PendingActivationStatus;\n title: string | null;\n workspaceId: string;\n initialTuttiModeActivation?: AgentActivityInitialTuttiModeActivation;\n tuttiModeDraftKey?: string;\n}\n\nexport type PendingActivationIntentRecord =\n | (PendingActivationIntentRecordBase & {\n agentTargetId: string;\n clientSubmitId: string;\n mode: \"new\";\n optimisticTitle?: string;\n })\n | (PendingActivationIntentRecordBase & {\n agentTargetId: string | null;\n clientSubmitId: null;\n mode: \"existing\";\n optimisticTitle?: never;\n });\n\nexport type PendingSubmitStatus =\n | \"requested\"\n | \"accepted\"\n | \"confirmed\"\n | \"uncertain\"\n | \"failed\";\n\nexport interface PendingSubmitIntentRecord {\n acceptedSessionVersion: number | null;\n agentSessionId: string;\n clientSubmitId: string;\n capabilityRefs?: readonly AgentActivityCapabilityReference[];\n content: readonly AgentPromptContentBlock[];\n displayPrompt?: string;\n errorCode: string | null;\n errorMessage: string | null;\n expiresAtUnixMs: number;\n submitDiagnostics?: Readonly<AgentActivitySubmitDiagnostics>;\n requestedAtUnixMs: number;\n status: PendingSubmitStatus;\n turnId: string | null;\n workspaceId: string;\n}\n\nexport interface PendingIntentsState {\n activationsByRequestId: Readonly<\n Record<string, PendingActivationIntentRecord>\n >;\n inactiveSessionIds: Readonly<Record<string, true>>;\n submitsByClientSubmitId: Readonly<Record<string, PendingSubmitIntentRecord>>;\n}\n\ninterface SessionActivationRequestedIntentBase {\n type: \"activation/requested\";\n agentSessionId: string;\n capabilityRefs?: readonly AgentActivityCapabilityReference[];\n content?: readonly AgentPromptContentBlock[];\n cwd?: string;\n expiresAtUnixMs: number;\n initialTurnExpected?: boolean;\n initialGoalControl?: Readonly<AgentActivityInitialGoalControl>;\n railSectionKey?: string;\n railPlacement?: AgentActivityRailPlacement;\n initialDisplayPrompt?: string;\n runtimeContent?: readonly AgentPromptContentBlock[];\n submitDiagnostics?: Readonly<AgentActivitySubmitDiagnostics>;\n requestedAtUnixMs: number;\n requestId: string;\n settings?: AgentActivitySessionSettings;\n title?: string;\n visible?: boolean;\n workspaceId: string;\n initialTuttiModeActivation?: AgentActivityInitialTuttiModeActivation;\n tuttiModeDraftKey?: string;\n}\n\nexport type SessionActivationRequestedIntent =\n | (SessionActivationRequestedIntentBase & {\n agentTargetId: string;\n clientSubmitId: string;\n mode: \"new\";\n optimisticTitle?: string;\n })\n | (SessionActivationRequestedIntentBase & {\n agentTargetId?: string | null;\n clientSubmitId?: never;\n mode: \"existing\";\n optimisticTitle?: never;\n });\n\nexport interface SessionActivationDismissedIntent {\n type: \"activation/dismissed\";\n requestId: string;\n}\n\nexport interface SessionActivationSettingsPatchedIntent {\n type: \"activation/settingsPatched\";\n agentSessionId: string;\n settings: Readonly<Record<string, unknown>>;\n}\n\nexport interface SessionActivationFailureRecordedIntent {\n type: \"activation/failureRecorded\";\n agentSessionId: string;\n errorCode?: string | null;\n errorMessage: string;\n occurredAtUnixMs: number;\n requestId: string;\n workspaceId: string;\n}\n\nexport interface SessionActivationFailureClearedIntent {\n type: \"activation/failureCleared\";\n agentSessionId: string;\n}\n\nexport interface SessionUnactivationRequestedIntent {\n type: \"activation/unactivateRequested\";\n agentSessionId: string;\n commandId: string;\n workspaceId: string;\n}\n\ninterface SessionActivateCommandBase {\n type: \"session/activate\";\n agentSessionId: string;\n capabilityRefs?: readonly AgentActivityCapabilityReference[];\n commandId: string;\n correlationId: string;\n cwd?: string;\n initialContent?: readonly AgentPromptContentBlock[];\n initialDisplayPrompt?: string;\n initialGoalControl?: Readonly<AgentActivityInitialGoalControl>;\n initialTuttiModeActivation?: AgentActivityInitialTuttiModeActivation;\n railPlacement?: AgentActivityRailPlacement;\n submitDiagnostics?: Readonly<AgentActivitySubmitDiagnostics>;\n settings?: AgentActivitySessionSettings;\n timeoutMs?: number;\n title?: string;\n visible?: boolean;\n workspaceId: string;\n}\n\nexport type SessionActivateCommand =\n | (SessionActivateCommandBase & {\n agentTargetId: string;\n clientSubmitId: string;\n mode: \"new\";\n })\n | (SessionActivateCommandBase & {\n agentTargetId?: string | null;\n clientSubmitId?: never;\n mode: \"existing\";\n });\n\nexport interface SessionUnactivateCommand {\n type: \"session/unactivate\";\n agentSessionId: string;\n commandId: string;\n workspaceId: string;\n}\n\nexport interface SessionUpdateSettingsCommand {\n type: \"session/updateSettings\";\n agentSessionId: string;\n commandId: string;\n correlationId: string;\n settings: Readonly<Record<string, unknown>>;\n workspaceId: string;\n}\n\nexport interface SubmitRequestedIntent {\n type: \"submit/requested\";\n agentSessionId: string;\n clientSubmitId: string;\n capabilityRefs?: readonly AgentActivityCapabilityReference[];\n content: readonly AgentPromptContentBlock[];\n displayPrompt?: string;\n expiresAtUnixMs: number;\n submitDiagnostics?: Readonly<AgentActivitySubmitDiagnostics>;\n requestedAtUnixMs: number;\n requiredSettingsPatch?: Readonly<AgentActivitySubmitSettingsPatch>;\n routing?: \"auto\" | \"immediate\" | \"send_now\";\n runtimeContent?: readonly AgentPromptContentBlock[];\n workspaceId: string;\n}\n\nexport interface SubmitDismissedIntent {\n type: \"submit/dismissed\";\n clientSubmitId: string;\n}\n\nexport interface SubmitCanceledIntent {\n type: \"submit/canceled\";\n agentSessionId: string;\n clientSubmitId: string;\n}\n\nexport interface ActivityMessagesReceivedIntent {\n type: \"message/snapshotReceived\";\n messages: readonly AgentActivityMessage[];\n sessionMessageWindows?: readonly (AgentActivitySessionMessageWindow & {\n agentSessionId: string;\n })[];\n workspaceId?: string;\n}\n\nexport type PendingIntentsIntent =\n | ActivityMessagesReceivedIntent\n | SessionActivationDismissedIntent\n | SessionActivationSettingsPatchedIntent\n | SessionActivationFailureClearedIntent\n | SessionActivationFailureRecordedIntent\n | SessionActivationRequestedIntent\n | SessionUnactivationRequestedIntent\n | SubmitCanceledIntent\n | SubmitDismissedIntent\n | SubmitRequestedIntent;\n","import type { SessionLifecycleState } from \"./sessionLifecycle.types.ts\";\nimport { canonicalTurnKey } from \"./sessionEntityKeys.ts\";\n\nexport interface CanonicalSubmitAvailability {\n reason?:\n | \"active_turn\"\n | \"agent_capability_checking\"\n | \"agent_capability_unavailable\"\n | \"waiting\"\n | \"transport_reconnecting\"\n | \"transport_unavailable\";\n state: \"available\" | \"blocked\" | \"missing\";\n}\n\nexport type CanonicalSessionLifecycleView = Pick<\n SessionLifecycleState,\n \"interactionsById\" | \"operationBySessionId\" | \"sessionsById\" | \"turnsById\"\n>;\n\nexport function deriveCanonicalSubmitAvailability(\n lifecycle: CanonicalSessionLifecycleView,\n rawAgentSessionId: string | null | undefined\n): CanonicalSubmitAvailability {\n const agentSessionId = rawAgentSessionId?.trim() ?? \"\";\n const session = lifecycle.sessionsById[agentSessionId];\n if (!session) {\n return { state: \"missing\" };\n }\n const runtimeAvailability =\n lifecycle.operationBySessionId[agentSessionId]?.runtimeAvailability;\n if (runtimeAvailability?.state === \"blocked\") {\n return { state: \"blocked\", reason: runtimeAvailability.reason };\n }\n if (\n Object.values(lifecycle.interactionsById).some(\n (interaction) =>\n interaction.agentSessionId === agentSessionId &&\n interaction.status === \"pending\"\n )\n ) {\n return { state: \"blocked\", reason: \"waiting\" };\n }\n const activeTurn = session.activeTurnId\n ? lifecycle.turnsById[\n canonicalTurnKey(agentSessionId, session.activeTurnId)\n ]\n : undefined;\n if (activeTurn && activeTurn.phase !== \"settled\") {\n return { state: \"blocked\", reason: \"active_turn\" };\n }\n return { state: \"available\" };\n}\n","import type { AgentActivityInteraction, AgentActivityTurn } from \"../types.ts\";\nimport type { AgentActivityDisplayStatus } from \"../displayStatus.types.ts\";\nimport type { AgentSessionEngineState } from \"./types.ts\";\nimport type {\n InteractionResponseState,\n SessionCancelState,\n CanonicalAgentSession,\n SessionOperationState\n} from \"./sessionLifecycle.types.ts\";\nimport {\n canonicalInteractionKey,\n canonicalTurnKey\n} from \"./sessionEntityKeys.ts\";\nimport { selectLatestActivationForSession } from \"./pendingIntents.selectors.ts\";\nimport { isPendingActivationViable } from \"./pendingIntents.types.ts\";\nimport {\n deriveCanonicalSubmitAvailability,\n type CanonicalSubmitAvailability\n} from \"./sessionLifecycle.availability.ts\";\n\nexport interface WorkspaceAgentConsumerSession {\n activeTurn: AgentActivityTurn | null;\n displayStatus: AgentActivityDisplayStatus;\n latestTurn: AgentActivityTurn | null;\n pendingInteractions: readonly AgentActivityInteraction[];\n session: CanonicalAgentSession;\n}\n\nexport interface WorkspaceAgentConsumerCounts {\n canceled: number;\n completed: number;\n failed: number;\n idle: number;\n waiting: number;\n working: number;\n}\n\nexport interface EngineSubmitAvailability {\n reason?: Exclude<CanonicalSubmitAvailability[\"reason\"], undefined>;\n state: \"available\" | \"blocked\";\n}\n\nexport function selectEngineSessionRuntimeAvailability(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n) {\n const id = agentSessionId?.trim() ?? \"\";\n return (\n state.sessionLifecycle.operationBySessionId[id]?.runtimeAvailability ?? null\n );\n}\n\nconst EMPTY_CONSUMER_COUNTS: WorkspaceAgentConsumerCounts = {\n canceled: 0,\n completed: 0,\n failed: 0,\n idle: 0,\n waiting: 0,\n working: 0\n};\n\nexport function selectEngineSession(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): CanonicalAgentSession | null {\n const id = agentSessionId?.trim() ?? \"\";\n if (!state.sessionLifecycle.sessionsById[id]) return null;\n return state.sessionLifecycle.sessionsById[id] ?? null;\n}\n\nexport function selectEngineSessionDeleted(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): boolean {\n const id = agentSessionId?.trim() ?? \"\";\n return Boolean(id && state.sessionLifecycle.deletedSessionIds[id]);\n}\n\nexport function selectEngineTurnsForSession(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): readonly AgentActivityTurn[] {\n const id = agentSessionId?.trim() ?? \"\";\n if (!state.sessionLifecycle.sessionsById[id]) return [];\n return Object.values(state.sessionLifecycle.turnsById)\n .filter((turn) => turn.agentSessionId === id)\n .sort(compareTurnsByOccurrence);\n}\n\nexport function selectEngineActiveTurn(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): AgentActivityTurn | null {\n const session = selectEngineSession(state, agentSessionId);\n return session?.activeTurnId\n ? (state.sessionLifecycle.turnsById[\n canonicalTurnKey(session.agentSessionId, session.activeTurnId)\n ] ?? null)\n : null;\n}\n\nexport function selectEngineTurn(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined,\n turnId: string | null | undefined\n): AgentActivityTurn | null {\n const sessionId = agentSessionId?.trim() ?? \"\";\n const id = turnId?.trim() ?? \"\";\n return sessionId && id && state.sessionLifecycle.sessionsById[sessionId]\n ? (state.sessionLifecycle.turnsById[canonicalTurnKey(sessionId, id)] ??\n null)\n : null;\n}\n\nexport function selectEngineInteraction(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined,\n turnId: string | null | undefined,\n requestId: string | null | undefined\n): AgentActivityInteraction | null {\n const sessionId = agentSessionId?.trim() ?? \"\";\n const turn = turnId?.trim() ?? \"\";\n const id = requestId?.trim() ?? \"\";\n if (\n !sessionId ||\n !turn ||\n !id ||\n !state.sessionLifecycle.sessionsById[sessionId]\n ) {\n return null;\n }\n const interaction =\n state.sessionLifecycle.interactionsById[\n canonicalInteractionKey(sessionId, turn, id)\n ];\n return interaction &&\n state.sessionLifecycle.turnsById[\n canonicalTurnKey(sessionId, interaction.turnId)\n ]\n ? interaction\n : null;\n}\n\nexport function selectEngineInteractionResponse(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined,\n turnId: string | null | undefined,\n requestId: string | null | undefined\n): InteractionResponseState | null {\n const sessionId = agentSessionId?.trim() ?? \"\";\n const turn = turnId?.trim() ?? \"\";\n const id = requestId?.trim() ?? \"\";\n return sessionId && turn && id\n ? (state.sessionLifecycle.interactionResponsesById[\n canonicalInteractionKey(sessionId, turn, id)\n ] ?? null)\n : null;\n}\n\nexport function selectEngineSessionIsRespondingToInteraction(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): boolean {\n const id = agentSessionId?.trim() ?? \"\";\n return Object.values(state.sessionLifecycle.interactionResponsesById).some(\n (response) =>\n response.agentSessionId === id &&\n (response.status === \"responding\" || response.status === \"unknown\")\n );\n}\n\nexport function selectEngineSessionSettingsUpdate(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n) {\n const id = agentSessionId?.trim() ?? \"\";\n return (\n state.sessionLifecycle.operationBySessionId[id]?.settingsUpdate ?? null\n );\n}\n\nexport function selectEngineInteractionResponseError(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): string | null {\n const id = agentSessionId?.trim() ?? \"\";\n return (\n Object.values(state.sessionLifecycle.interactionResponsesById)\n .filter((response) => response.agentSessionId === id)\n .sort((left, right) => right.commandId.localeCompare(left.commandId))\n .find((response) => response.errorMessage)?.errorMessage ?? null\n );\n}\n\nexport function selectEngineLatestTurn(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): AgentActivityTurn | null {\n const id = agentSessionId?.trim() ?? \"\";\n if (!state.sessionLifecycle.sessionsById[id]) return null;\n let latestTurn: AgentActivityTurn | null = null;\n for (const turn of Object.values(state.sessionLifecycle.turnsById)) {\n if (\n turn.agentSessionId === id &&\n (!latestTurn || compareTurnsByOccurrence(latestTurn, turn) < 0)\n ) {\n latestTurn = turn;\n }\n }\n return latestTurn;\n}\n\nexport function selectEngineInteractionsForSession(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): readonly AgentActivityInteraction[] {\n const id = agentSessionId?.trim() ?? \"\";\n if (!state.sessionLifecycle.sessionsById[id]) return [];\n return Object.values(state.sessionLifecycle.interactionsById)\n .filter(\n (interaction) =>\n interaction.agentSessionId === id &&\n Boolean(\n state.sessionLifecycle.turnsById[\n canonicalTurnKey(id, interaction.turnId)\n ]\n )\n )\n .sort(\n (left, right) =>\n left.createdAtUnixMs - right.createdAtUnixMs ||\n left.requestId.localeCompare(right.requestId)\n );\n}\n\nexport function selectEnginePendingInteractions(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): readonly AgentActivityInteraction[] {\n return selectEngineInteractionsForSession(state, agentSessionId).filter(\n (interaction) => interaction.status === \"pending\"\n );\n}\n\nexport function selectEngineSubmitAvailability(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): EngineSubmitAvailability | null {\n const availability = deriveCanonicalSubmitAvailability(\n state.sessionLifecycle,\n agentSessionId\n );\n if (availability.state === \"missing\") return null;\n return availability.reason\n ? { state: availability.state, reason: availability.reason }\n : { state: availability.state };\n}\n\nexport function selectEngineCancelPending(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): boolean {\n const id = agentSessionId?.trim() ?? \"\";\n const status = state.sessionLifecycle.operationBySessionId[id]?.cancel.status;\n return (\n status === \"requested\" || status === \"accepted\" || status === \"awaitingTurn\"\n );\n}\n\nexport function selectEngineCancelState(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): SessionCancelState | null {\n const id = agentSessionId?.trim() ?? \"\";\n return state.sessionLifecycle.operationBySessionId[id]?.cancel ?? null;\n}\n\nexport function selectEngineSessionOperation(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): SessionOperationState | null {\n const id = agentSessionId?.trim() ?? \"\";\n return state.sessionLifecycle.operationBySessionId[id] ?? null;\n}\n\nexport function selectEngineHasPendingInteractions(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): boolean {\n return selectEnginePendingInteractions(state, agentSessionId).length > 0;\n}\n\n/**\n * Returns only failures from session-scoped commands. Canonical Turn failures\n * belong to the owning Turn and must not be promoted into session chrome.\n */\nexport function selectEngineSessionOperationError(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): string | null {\n const id = agentSessionId?.trim() ?? \"\";\n return (\n state.sessionLifecycle.operationBySessionId[id]?.operationError ?? null\n );\n}\n\nexport function selectWorkspaceAgentConsumerSessions(\n state: AgentSessionEngineState\n): readonly WorkspaceAgentConsumerSession[] {\n return selectAllWorkspaceAgentConsumerSessions(state).filter(\n (item) => item.session.kind === \"root\" && item.session.visible !== false\n );\n}\n\nexport function selectRootAgentSessionIdsWithPendingInteractions(\n state: AgentSessionEngineState\n): readonly string[] {\n const sessionIdsWithPendingInteractions = new Set<string>();\n for (const interaction of Object.values(\n state.sessionLifecycle.interactionsById\n )) {\n if (\n interaction.status === \"pending\" &&\n state.sessionLifecycle.turnsById[\n canonicalTurnKey(interaction.agentSessionId, interaction.turnId)\n ]\n ) {\n sessionIdsWithPendingInteractions.add(interaction.agentSessionId);\n }\n }\n const rootAgentSessionIds = new Set<string>();\n for (const session of Object.values(state.sessionLifecycle.sessionsById)) {\n if (!sessionIdsWithPendingInteractions.has(session.agentSessionId)) {\n continue;\n }\n const rootAgentSessionId =\n session.kind === \"child\"\n ? session.rootAgentSessionId\n : session.agentSessionId;\n if (rootAgentSessionId) rootAgentSessionIds.add(rootAgentSessionId);\n }\n return [...rootAgentSessionIds];\n}\n\nexport function selectWorkspaceAgentRootConversationSessions(\n state: AgentSessionEngineState\n): readonly WorkspaceAgentConsumerSession[] {\n const consumers = selectAllWorkspaceAgentConsumerSessions(state);\n const rootSessionIds = new Set(\n consumers\n .filter((consumer) => consumer.session.kind === \"root\")\n .map((consumer) => consumer.session.agentSessionId)\n );\n const consumersByRootSessionId = new Map<\n string,\n WorkspaceAgentConsumerSession[]\n >();\n\n for (const consumer of consumers) {\n const rootSessionId =\n consumer.session.kind === \"child\"\n ? (consumer.session.rootAgentSessionId?.trim() ?? \"\")\n : consumer.session.agentSessionId;\n if (!rootSessionIds.has(rootSessionId)) continue;\n const conversationConsumers =\n consumersByRootSessionId.get(rootSessionId) ?? [];\n conversationConsumers.push(consumer);\n consumersByRootSessionId.set(rootSessionId, conversationConsumers);\n }\n\n return consumers\n .filter((consumer) => consumer.session.kind === \"root\")\n .map((consumer) => {\n const conversationConsumers =\n consumersByRootSessionId.get(consumer.session.agentSessionId) ?? [];\n const pendingInteractions = conversationConsumers\n .flatMap((item) => item.pendingInteractions)\n .sort(compareInteractionsByOccurrence);\n return {\n ...consumer,\n displayStatus: rootConversationDisplayStatus(\n consumer,\n conversationConsumers,\n pendingInteractions\n ),\n pendingInteractions\n };\n });\n}\n\nexport function selectAllWorkspaceAgentConsumerSessions(\n state: AgentSessionEngineState\n): readonly WorkspaceAgentConsumerSession[] {\n const latestTurnsBySessionId = new Map<string, AgentActivityTurn>();\n for (const turn of Object.values(state.sessionLifecycle.turnsById)) {\n if (!state.sessionLifecycle.sessionsById[turn.agentSessionId]) continue;\n const latestTurn = latestTurnsBySessionId.get(turn.agentSessionId);\n if (!latestTurn || compareTurnsByOccurrence(latestTurn, turn) < 0) {\n latestTurnsBySessionId.set(turn.agentSessionId, turn);\n }\n }\n\n const pendingInteractionsBySessionId = new Map<\n string,\n AgentActivityInteraction[]\n >();\n for (const interaction of Object.values(\n state.sessionLifecycle.interactionsById\n )) {\n if (\n interaction.status !== \"pending\" ||\n !state.sessionLifecycle.sessionsById[interaction.agentSessionId] ||\n !state.sessionLifecycle.turnsById[\n canonicalTurnKey(interaction.agentSessionId, interaction.turnId)\n ]\n ) {\n continue;\n }\n const pendingInteractions =\n pendingInteractionsBySessionId.get(interaction.agentSessionId) ?? [];\n pendingInteractions.push(interaction);\n pendingInteractionsBySessionId.set(\n interaction.agentSessionId,\n pendingInteractions\n );\n }\n for (const pendingInteractions of pendingInteractionsBySessionId.values()) {\n pendingInteractions.sort(compareSessionInteractionsByOccurrence);\n }\n\n return Object.values(state.sessionLifecycle.sessionsById).map((session) => {\n const activeTurn = session.activeTurnId\n ? (state.sessionLifecycle.turnsById[\n canonicalTurnKey(session.agentSessionId, session.activeTurnId)\n ] ?? null)\n : null;\n const latestTurn =\n latestTurnsBySessionId.get(session.agentSessionId) ?? null;\n const pendingInteractions =\n pendingInteractionsBySessionId.get(session.agentSessionId) ?? [];\n return {\n activeTurn,\n displayStatus: displayStatusFromCanonicalState({\n activeTurn,\n initialActivationTurnPending: initialActivationTurnIsPending(\n state,\n session.agentSessionId,\n latestTurn\n ),\n latestTurn,\n pendingInteractions\n }),\n latestTurn,\n pendingInteractions,\n session\n };\n });\n}\n\nexport function selectWorkspaceAgentConsumerSession(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): WorkspaceAgentConsumerSession | null {\n const id = agentSessionId?.trim() ?? \"\";\n const session = state.sessionLifecycle.sessionsById[id];\n if (!session) return null;\n const activeTurn = selectEngineActiveTurn(state, id);\n const latestTurn = selectEngineLatestTurn(state, id);\n const pendingInteractions = selectEnginePendingInteractions(state, id);\n return {\n activeTurn,\n displayStatus: displayStatusFromCanonicalState({\n activeTurn,\n initialActivationTurnPending: initialActivationTurnIsPending(\n state,\n id,\n latestTurn\n ),\n latestTurn,\n pendingInteractions\n }),\n latestTurn,\n pendingInteractions,\n session\n };\n}\n\nexport function selectWorkspaceAgentConsumerCounts(\n state: AgentSessionEngineState\n): WorkspaceAgentConsumerCounts {\n return selectWorkspaceAgentConsumerSessions(state).reduce(\n (counts, item) => {\n counts[item.displayStatus] += 1;\n return counts;\n },\n { ...EMPTY_CONSUMER_COUNTS }\n );\n}\n\nfunction displayStatusFromCanonicalState(state: {\n activeTurn: AgentActivityTurn | null;\n initialActivationTurnPending: boolean;\n latestTurn: AgentActivityTurn | null;\n pendingInteractions: readonly AgentActivityInteraction[];\n}): AgentActivityDisplayStatus {\n if (state.pendingInteractions.length > 0) return \"waiting\";\n if (state.activeTurn && state.activeTurn.phase !== \"settled\") {\n return state.activeTurn.phase === \"waiting\" ? \"waiting\" : \"working\";\n }\n if (!state.latestTurn) {\n return state.initialActivationTurnPending ? \"working\" : \"idle\";\n }\n if (state.latestTurn.phase !== \"settled\") return \"idle\";\n switch (state.latestTurn.outcome) {\n case \"failed\":\n return \"failed\";\n case \"canceled\":\n case \"interrupted\":\n return \"canceled\";\n case \"completed\":\n return \"completed\";\n default:\n return \"idle\";\n }\n}\n\nfunction initialActivationTurnIsPending(\n state: AgentSessionEngineState,\n agentSessionId: string,\n latestTurn: AgentActivityTurn | null\n): boolean {\n if (latestTurn) return false;\n const activation = selectLatestActivationForSession(state, agentSessionId);\n return (\n activation?.mode === \"new\" &&\n activation.initialTurnExpected &&\n isPendingActivationViable(activation)\n );\n}\n\nfunction rootConversationDisplayStatus(\n root: WorkspaceAgentConsumerSession,\n consumers: readonly WorkspaceAgentConsumerSession[],\n pendingInteractions: readonly AgentActivityInteraction[]\n): AgentActivityDisplayStatus {\n if (pendingInteractions.length > 0) return \"waiting\";\n if (consumers.some((consumer) => consumer.displayStatus === \"working\")) {\n return \"working\";\n }\n if (consumers.some((consumer) => consumer.displayStatus === \"waiting\")) {\n return \"waiting\";\n }\n return root.displayStatus;\n}\n\nfunction compareInteractionsByOccurrence(\n left: AgentActivityInteraction,\n right: AgentActivityInteraction\n): number {\n return (\n left.createdAtUnixMs - right.createdAtUnixMs ||\n left.updatedAtUnixMs - right.updatedAtUnixMs ||\n left.agentSessionId.localeCompare(right.agentSessionId) ||\n left.turnId.localeCompare(right.turnId) ||\n left.requestId.localeCompare(right.requestId)\n );\n}\n\nfunction compareSessionInteractionsByOccurrence(\n left: AgentActivityInteraction,\n right: AgentActivityInteraction\n): number {\n return (\n left.createdAtUnixMs - right.createdAtUnixMs ||\n left.requestId.localeCompare(right.requestId)\n );\n}\n\nfunction compareTurnsByOccurrence(\n left: AgentActivityTurn,\n right: AgentActivityTurn\n): number {\n return (\n left.startedAtUnixMs - right.startedAtUnixMs ||\n left.turnId.localeCompare(right.turnId)\n );\n}\n","import type {\n AgentActivityInteraction,\n AgentActivitySession,\n AgentActivitySnapshot\n} from \"../types.ts\";\nimport {\n selectEngineInteractionsForSession,\n selectAllWorkspaceAgentConsumerSessions\n} from \"./sessionLifecycle.selectors.ts\";\nimport type { AgentSessionEngineState } from \"./types.ts\";\n\nconst EMPTY_PRESENCES: AgentActivitySnapshot[\"presences\"] = [];\n\n/**\n * Builds the legacy runtime snapshot shape as a memoized projection of the\n * canonical workspace engine. The projector must be retained per engine so\n * external-store consumers receive the same object while engine state is\n * unchanged.\n */\nexport function createAgentActivitySnapshotProjector(\n workspaceId: string\n): (state: AgentSessionEngineState) => AgentActivitySnapshot {\n let previousState: AgentSessionEngineState | null = null;\n let previousSnapshot: AgentActivitySnapshot | null = null;\n return (state) => {\n if (state === previousState && previousSnapshot) return previousSnapshot;\n const sessions =\n previousState &&\n previousSnapshot &&\n state.sessionLifecycle === previousState.sessionLifecycle\n ? previousSnapshot.sessions\n : selectAllWorkspaceAgentConsumerSessions(state).map((item) =>\n projectSession(\n item.session,\n item.activeTurn,\n item.latestTurn,\n selectEngineInteractionsForSession(\n state,\n item.session.agentSessionId\n ),\n item.pendingInteractions\n )\n );\n const sessionMessagesById =\n previousState &&\n previousSnapshot &&\n state.sessionMessages.messagesBySessionId ===\n previousState.sessionMessages.messagesBySessionId\n ? previousSnapshot.sessionMessagesById\n : Object.fromEntries(\n Object.entries(state.sessionMessages.messagesBySessionId).map(\n ([agentSessionId, messages]) => [agentSessionId, [...messages]]\n )\n );\n const sessionMessageWindowsById =\n previousState &&\n previousSnapshot &&\n state.sessionMessages.windowsBySessionId ===\n previousState.sessionMessages.windowsBySessionId\n ? previousSnapshot.sessionMessageWindowsById\n : { ...state.sessionMessages.windowsBySessionId };\n const composerOptionsByTargetKey =\n previousState &&\n previousSnapshot &&\n state.composerOptions.optionsByTargetKey ===\n previousState.composerOptions.optionsByTargetKey\n ? previousSnapshot.composerOptionsByTargetKey\n : { ...state.composerOptions.optionsByTargetKey };\n const composerOptionsLoadStatusByTargetKey =\n previousState &&\n previousSnapshot &&\n state.composerOptions.entriesByTargetKey ===\n previousState.composerOptions.entriesByTargetKey\n ? previousSnapshot.composerOptionsLoadStatusByTargetKey\n : Object.fromEntries(\n Object.entries(state.composerOptions.entriesByTargetKey).map(\n ([targetKey, entry]) => [targetKey, entry.status]\n )\n );\n const snapshot: AgentActivitySnapshot = {\n workspaceId,\n sessions,\n // Presence is no longer canonical activity state. Keep the legacy\n // snapshot field empty until the runtime contract drops it.\n presences: EMPTY_PRESENCES,\n sessionMessagesById,\n sessionMessageWindowsById,\n composerOptionsByTargetKey,\n composerOptionsLoadStatusByTargetKey\n };\n previousState = state;\n previousSnapshot = snapshot;\n return snapshot;\n };\n}\n\nexport function createEmptyAgentActivitySnapshot(\n workspaceId: string\n): AgentActivitySnapshot {\n return {\n workspaceId,\n sessions: [],\n presences: [],\n sessionMessagesById: {},\n sessionMessageWindowsById: {},\n composerOptionsByTargetKey: {},\n composerOptionsLoadStatusByTargetKey: {}\n };\n}\n\nfunction projectSession(\n session: Omit<\n AgentActivitySession,\n | \"activeTurn\"\n | \"latestTurn\"\n | \"latestTurnInteractions\"\n | \"pendingInteractions\"\n >,\n activeTurn: AgentActivitySession[\"activeTurn\"],\n latestTurn: AgentActivitySession[\"latestTurn\"],\n interactions: readonly AgentActivityInteraction[],\n pendingInteractions: readonly AgentActivityInteraction[]\n): AgentActivitySession {\n return {\n ...session,\n activeTurn,\n latestTurn,\n latestTurnInteractions: latestTurn\n ? interactions.filter(\n (interaction) => interaction.turnId === latestTurn.turnId\n )\n : [],\n pendingInteractions\n };\n}\n","import type { AgentActivityMessage } from \"./types.ts\";\n\nexport function mergeAgentActivityMessages<\n T extends AgentActivityMessage = AgentActivityMessage\n>(currentMessages: readonly T[], incomingMessages: readonly T[]): T[] {\n if (incomingMessages.length === 0) {\n return [...currentMessages];\n }\n\n const byMessageId = new Map<string, T>();\n for (const message of currentMessages) {\n byMessageId.set(message.messageId, cloneAgentActivityMessage(message));\n }\n\n for (const incoming of incomingMessages) {\n const existing = byMessageId.get(incoming.messageId);\n if (!existing || shouldReplaceAgentActivityMessage(existing, incoming)) {\n byMessageId.set(\n incoming.messageId,\n existing\n ? mergeAgentActivityMessage(existing, incoming)\n : cloneAgentActivityMessage(incoming)\n );\n }\n }\n\n return [...byMessageId.values()].sort(compareAgentActivityMessages);\n}\n\nexport function compareAgentActivityMessages(\n left: AgentActivityMessage,\n right: AgentActivityMessage\n): number {\n const leftSequence = positiveNumber(left.sequence);\n const rightSequence = positiveNumber(right.sequence);\n if (leftSequence > 0 && rightSequence > 0 && leftSequence !== rightSequence) {\n return leftSequence - rightSequence;\n }\n return (\n left.occurredAtUnixMs - right.occurredAtUnixMs ||\n left.version - right.version ||\n left.messageId.localeCompare(right.messageId)\n );\n}\n\nexport function latestAgentActivityMessageVersion(\n messages: readonly AgentActivityMessage[]\n): number {\n return messages.reduce(\n (latestVersion, message) => Math.max(latestVersion, message.version),\n 0\n );\n}\n\nexport function areAgentActivityMessageArraysEqual(\n left: readonly AgentActivityMessage[],\n right: readonly AgentActivityMessage[]\n): boolean {\n if (left.length !== right.length) {\n return false;\n }\n for (let index = 0; index < left.length; index += 1) {\n if (!areAgentActivityMessagesEqual(left[index]!, right[index]!)) {\n return false;\n }\n }\n return true;\n}\n\nexport function areAgentActivityMessagesEqual(\n left: AgentActivityMessage,\n right: AgentActivityMessage\n): boolean {\n return (\n left.workspaceId === right.workspaceId &&\n left.agentSessionId === right.agentSessionId &&\n left.messageId === right.messageId &&\n left.version === right.version &&\n Object.is(left.turnId, right.turnId) &&\n left.role === right.role &&\n left.kind === right.kind &&\n Object.is(left.status, right.status) &&\n areJsonLikeValuesEqual(left.semantics, right.semantics) &&\n Object.is(left.sequence, right.sequence) &&\n Object.is(left.occurredAtUnixMs, right.occurredAtUnixMs) &&\n Object.is(left.createdAtUnixMs, right.createdAtUnixMs) &&\n Object.is(left.startedAtUnixMs, right.startedAtUnixMs) &&\n Object.is(left.completedAtUnixMs, right.completedAtUnixMs) &&\n areJsonLikeValuesEqual(left.payload, right.payload)\n );\n}\n\nfunction positiveNumber(value: number | undefined): number {\n return typeof value === \"number\" && Number.isFinite(value) && value > 0\n ? value\n : 0;\n}\n\nexport function cloneAgentActivityMessage<\n T extends AgentActivityMessage = AgentActivityMessage\n>(message: T): T {\n return {\n ...message,\n semantics: message.semantics ? { ...message.semantics } : undefined,\n payload: { ...message.payload }\n };\n}\n\nfunction mergeAgentActivityMessage<T extends AgentActivityMessage>(\n existing: T,\n incoming: T\n): T {\n return {\n ...existing,\n ...incoming,\n sequence: incoming.sequence ?? existing.sequence,\n createdAtUnixMs: incoming.createdAtUnixMs ?? existing.createdAtUnixMs,\n semantics: incoming.semantics\n ? {\n ...existing.semantics,\n ...incoming.semantics\n }\n : existing.semantics,\n payload: {\n ...existing.payload,\n ...incoming.payload\n }\n };\n}\n\nfunction shouldReplaceAgentActivityMessage(\n existing: AgentActivityMessage,\n incoming: AgentActivityMessage\n): boolean {\n if (incoming.version !== existing.version) {\n return incoming.version > existing.version;\n }\n return incoming.occurredAtUnixMs >= existing.occurredAtUnixMs;\n}\n\nexport function areJsonLikeValuesEqual(left: unknown, right: unknown): boolean {\n if (Object.is(left, right)) {\n return true;\n }\n if (Array.isArray(left) || Array.isArray(right)) {\n if (!Array.isArray(left) || !Array.isArray(right)) {\n return false;\n }\n if (left.length !== right.length) {\n return false;\n }\n for (let index = 0; index < left.length; index += 1) {\n if (!areJsonLikeValuesEqual(left[index], right[index])) {\n return false;\n }\n }\n return true;\n }\n const leftRecord = recordValue(left);\n const rightRecord = recordValue(right);\n if (!leftRecord || !rightRecord) {\n return false;\n }\n const keys = new Set([\n ...Object.keys(leftRecord),\n ...Object.keys(rightRecord)\n ]);\n for (const key of keys) {\n if (!areJsonLikeValuesEqual(leftRecord[key], rightRecord[key])) {\n return false;\n }\n }\n return true;\n}\n\nfunction recordValue(value: unknown): Record<string, unknown> | null {\n return typeof value === \"object\" && value !== null\n ? (value as Record<string, unknown>)\n : null;\n}\n","export function cloneJSONValue(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(cloneJSONValue);\n if (value !== null && typeof value === \"object\") {\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>).map(([key, entry]) => [\n key,\n cloneJSONValue(entry)\n ])\n );\n }\n return value;\n}\n\nexport function recordValue(value: unknown): Record<string, unknown> | null {\n return typeof value === \"object\" && value !== null\n ? (value as Record<string, unknown>)\n : null;\n}\n\nexport function stringValue(value: unknown): string {\n return typeof value === \"string\" ? value.trim() : \"\";\n}\n\nexport function nullableStringValue(value: unknown): string | null | undefined {\n return typeof value === \"string\" ? value : value === null ? null : undefined;\n}\n\nexport function numberValue(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nexport function messageVersionValue(source: Record<string, unknown>): number {\n return numberValue(source.version) ?? numberValue(source.seq) ?? 0;\n}\n","import {\n cloneJSONValue,\n messageVersionValue,\n nullableStringValue,\n numberValue,\n recordValue,\n stringValue\n} from \"./activityValueParsing.ts\";\nimport type {\n AgentActivityMessage,\n AgentActivityUpdatedEvent\n} from \"./types.ts\";\n\n/**\n * Parse the inline `messages` array carried by a realtime `message_update`\n * event into canonical {@link AgentActivityMessage} values. This is the only\n * inline delta the bridge may apply without a follow-up pull: message snapshots\n * are versioned and self-describing, so after the bridge verifies cursor\n * continuity, the engine's version-guarded message reducer can fold them\n * (including alias-bucket collapse) on its own. Turn and interaction deltas take\n * the authoritative reconcile path instead, so their session-level effects\n * (activeTurnId, pending-interaction pruning) come from a full session fetch\n * rather than being reconstructed here.\n */\nexport function parseInlineActivityMessages(\n event: AgentActivityUpdatedEvent\n): AgentActivityMessage[] {\n if (event.eventType === \"session_audit\") {\n const audit = recordValue(event.data.audit);\n if (!audit) return [];\n return [\n agentActivityMessageFromInlineMessage({\n agentSessionId: event.agentSessionId.trim(),\n message: {\n kind: \"session_audit\",\n messageId: audit.auditId,\n occurredAtUnixMs: audit.occurredAtUnixMs,\n payload: audit.payload,\n role: audit.role,\n turnId: null,\n version: audit.version\n },\n workspaceId: event.workspaceId\n })\n ].filter((message): message is AgentActivityMessage => message !== null);\n }\n if (event.eventType !== \"message_update\") return [];\n const source = recordValue(event.data);\n const rawMessages = Array.isArray(source?.messages) ? source.messages : [];\n const eventAgentSessionId = event.agentSessionId.trim();\n const workspaceId = event.workspaceId?.trim() ?? \"\";\n const messages: AgentActivityMessage[] = [];\n for (const raw of rawMessages) {\n const record = recordValue(raw);\n if (!record) continue;\n const agentSessionId =\n stringValue(record.agentSessionId) || eventAgentSessionId;\n const message = agentActivityMessageFromInlineMessage({\n agentSessionId,\n message: record,\n workspaceId\n });\n if (message) messages.push(message);\n }\n return messages;\n}\n\nfunction agentActivityMessageFromInlineMessage(input: {\n agentSessionId: string;\n message: Record<string, unknown>;\n workspaceId: string;\n}): AgentActivityMessage | null {\n const messageId = stringValue(input.message.messageId);\n const role = stringValue(input.message.role);\n const kind = stringValue(input.message.kind);\n const rawTurnId = input.message.turnId;\n const turnId = rawTurnId === null ? null : stringValue(rawTurnId);\n const version = messageVersionValue(input.message);\n const occurredAtUnixMs = numberValue(input.message.occurredAtUnixMs);\n if (\n !input.agentSessionId ||\n !messageId ||\n !role ||\n !kind ||\n (rawTurnId !== null && !turnId) ||\n (kind === \"session_audit\" ? rawTurnId !== null : rawTurnId === null) ||\n version <= 0 ||\n occurredAtUnixMs === undefined ||\n occurredAtUnixMs <= 0\n ) {\n return null;\n }\n return {\n workspaceId: stringValue(input.message.workspaceId) || input.workspaceId,\n agentSessionId: input.agentSessionId,\n messageId,\n version,\n turnId,\n role,\n kind,\n status: nullableStringValue(input.message.status),\n semantics: recordValue(input.message.semantics)\n ? (cloneJSONValue(\n input.message.semantics\n ) as AgentActivityMessage[\"semantics\"])\n : undefined,\n payload: cloneJSONValue(recordValue(input.message.payload) ?? {}) as Record<\n string,\n unknown\n >,\n sequence: numberValue(input.message.sequence),\n occurredAtUnixMs,\n createdAtUnixMs: numberValue(input.message.createdAtUnixMs),\n startedAtUnixMs: numberValue(input.message.startedAtUnixMs),\n completedAtUnixMs: numberValue(input.message.completedAtUnixMs)\n };\n}\n","import type { AgentActivitySessionMessageWindow } from \"./messageWindow.types.ts\";\n\nexport interface AgentActivityMessagePageLike<T> {\n messages: readonly T[];\n hasMore?: boolean;\n latestVersion?: number;\n}\n\nexport interface LoadAllAgentSessionMessagesInput<T> {\n listPage: (afterVersion: number) => Promise<AgentActivityMessagePageLike<T>>;\n afterVersion?: number;\n maxPages?: number;\n shouldAbort?: () => boolean;\n onPage?: (messages: readonly T[]) => void;\n}\n\nexport interface LoadAllAgentSessionMessagesResult<T> {\n messages: T[];\n aborted: boolean;\n}\n\nconst DEFAULT_MAX_MESSAGE_PAGES = 1000;\n\n/**\n * Projects the server-owned boundary of a newest-to-oldest page. The boundary\n * must come from `hasMore`; message versions are mutable change cursors and\n * cannot answer whether an older row exists.\n */\nexport function agentActivitySessionMessageWindowFromDescendingPage<\n T extends { version?: number | null }\n>(page: AgentActivityMessagePageLike<T>): AgentActivitySessionMessageWindow {\n const oldestLoadedVersion = page.messages.reduce<number | null>(\n (oldest, message) => {\n const version = message.version;\n if (\n typeof version !== \"number\" ||\n !Number.isFinite(version) ||\n version <= 0\n ) {\n return oldest;\n }\n return oldest === null ? version : Math.min(oldest, version);\n },\n null\n );\n return {\n hasOlderMessages: oldestLoadedVersion !== null && page.hasMore === true,\n oldestLoadedVersion\n };\n}\n\nexport async function loadAllAgentSessionMessages<\n T extends { version?: number }\n>(\n input: LoadAllAgentSessionMessagesInput<T>\n): Promise<LoadAllAgentSessionMessagesResult<T>> {\n const maxPages = input.maxPages ?? DEFAULT_MAX_MESSAGE_PAGES;\n let afterVersion = input.afterVersion ?? 0;\n const messages: T[] = [];\n\n for (let pageIndex = 0; pageIndex < maxPages; pageIndex += 1) {\n const page = await input.listPage(afterVersion);\n if (input.shouldAbort?.()) {\n return { messages, aborted: true };\n }\n if (page.messages.length > 0) {\n input.onPage?.(page.messages);\n messages.push(...page.messages);\n }\n const messageMaxVersion = page.messages.reduce(\n (maxVersion, message) => Math.max(maxVersion, message.version ?? 0),\n afterVersion\n );\n const pageLatestVersion =\n typeof page.latestVersion === \"number\" &&\n Number.isFinite(page.latestVersion)\n ? Math.max(0, Math.trunc(page.latestVersion))\n : afterVersion;\n const nextAfterVersion = Math.max(messageMaxVersion, pageLatestVersion);\n if (!page.hasMore || nextAfterVersion <= afterVersion) {\n break;\n }\n afterVersion = nextAfterVersion;\n }\n\n return { messages, aborted: false };\n}\n","import type {\n AgentActivityInteraction,\n AgentActivityNeedsAttentionItem,\n AgentActivityNeedsAttentionKind,\n AgentActivitySession,\n AgentActivitySnapshot\n} from \"./types.ts\";\nimport type { AgentActivityDisplayStatus } from \"./displayStatus.types.ts\";\n\nexport function selectCanonicalAgentActivitySessions(\n snapshot: Pick<AgentActivitySnapshot, \"sessions\">\n): readonly AgentActivitySession[] {\n return snapshot.sessions;\n}\n\nexport function selectRootAgentActivitySessions(\n snapshot: Pick<AgentActivitySnapshot, \"sessions\">\n): readonly AgentActivitySession[] {\n // In-memory optimistic root sessions may exist before their first daemon\n // snapshot is normalized. Only an explicit child relation excludes a\n // session from root conversation lists.\n return snapshot.sessions.filter((session) => session.kind !== \"child\");\n}\n\nexport function selectNeedsAttentionCount(\n snapshot: AgentActivitySnapshot\n): number {\n return selectNeedsAttentionItems(snapshot).length;\n}\n\nexport function normalizeAgentActivityDisplayStatus(\n status: string | null | undefined,\n options: {\n activeTurnPhase?: string | null;\n latestTurnOutcome?: string | null;\n latestTurnPhase?: string | null;\n needsAttention?: boolean;\n } = {}\n): AgentActivityDisplayStatus {\n const normalizedStatus = normalizeStatus(status);\n const normalizedTurnOutcome = normalizeStatus(options.latestTurnOutcome);\n switch (normalizeStatus(options.activeTurnPhase ?? options.latestTurnPhase)) {\n case \"settled\":\n switch (normalizedTurnOutcome) {\n case \"failed\":\n case \"error\":\n return \"failed\";\n case \"canceled\":\n case \"cancelled\":\n case \"interrupted\":\n return \"canceled\";\n case \"completed\":\n case \"done\":\n case \"success\":\n case \"succeeded\":\n return \"completed\";\n default:\n break;\n }\n if (normalizedStatus === \"failed\" || normalizedStatus === \"error\") {\n return \"failed\";\n }\n if (normalizedStatus === \"canceled\" || normalizedStatus === \"cancelled\") {\n return \"canceled\";\n }\n return \"completed\";\n case \"waiting\":\n return \"waiting\";\n case \"running\":\n case \"submitted\":\n return \"working\";\n default:\n break;\n }\n if (options.needsAttention) {\n return \"waiting\";\n }\n switch (normalizedStatus) {\n case \"completed\":\n case \"done\":\n case \"success\":\n case \"succeeded\":\n return \"completed\";\n case \"canceled\":\n case \"cancelled\":\n return \"canceled\";\n case \"error\":\n case \"failed\":\n return \"failed\";\n default:\n break;\n }\n switch (normalizedStatus) {\n case \"running\":\n case \"streaming\":\n case \"working\":\n return \"working\";\n case \"awaiting_approval\":\n case \"waiting\":\n case \"waiting_approval\":\n case \"waiting_input\":\n return \"waiting\";\n case \"idle\":\n case \"ready\":\n default:\n return \"idle\";\n }\n}\n\nexport function selectNeedsAttentionItems(\n snapshot: AgentActivitySnapshot\n): AgentActivityNeedsAttentionItem[] {\n const items: AgentActivityNeedsAttentionItem[] = [];\n\n for (const session of snapshot.sessions) {\n for (const interaction of session.pendingInteractions) {\n if (interaction.status !== \"pending\") {\n continue;\n }\n items.push(\n needsAttentionItemFromInteraction(snapshot, session, interaction)\n );\n }\n }\n\n return items.sort(\n (left, right) =>\n right.occurredAtUnixMs - left.occurredAtUnixMs ||\n left.id.localeCompare(right.id)\n );\n}\n\nfunction needsAttentionItemFromInteraction(\n snapshot: AgentActivitySnapshot,\n session: AgentActivitySession,\n interaction: AgentActivityInteraction\n): AgentActivityNeedsAttentionItem {\n return {\n id: `${session.agentSessionId}:${interaction.turnId}:${interaction.requestId}`,\n workspaceId: session.workspaceId || snapshot.workspaceId,\n agentSessionId: session.agentSessionId,\n provider: session.provider,\n title: session.title,\n cwd: session.cwd,\n kind: needsAttentionKindForInteraction(interaction),\n summary: interactionSummary(interaction),\n occurredAtUnixMs:\n interaction.updatedAtUnixMs ||\n interaction.createdAtUnixMs ||\n session.updatedAtUnixMs ||\n session.lastEventUnixMs ||\n 0\n };\n}\n\nfunction needsAttentionKindForInteraction(\n interaction: AgentActivityInteraction\n): AgentActivityNeedsAttentionKind {\n switch (interaction.kind) {\n case \"approval\":\n return \"permission\";\n case \"question\":\n return \"question\";\n case \"plan\":\n return \"constraint\";\n }\n}\n\nfunction interactionSummary(interaction: AgentActivityInteraction): string {\n const input = interaction.input ?? {};\n const metadata = interaction.metadata ?? {};\n return (\n stringValue(input.displayPrompt) ||\n stringValue(input.summary) ||\n stringValue(input.title) ||\n firstQuestionText(input.questions) ||\n stringValue(input.question) ||\n stringValue(input.prompt) ||\n stringValue(input.text) ||\n stringValue(metadata.summary) ||\n stringValue(metadata.title) ||\n interaction.toolName?.trim() ||\n interaction.kind\n );\n}\n\nfunction normalizeStatus(status: string | null | undefined): string {\n return status?.trim().toLowerCase() ?? \"\";\n}\n\nfunction firstQuestionText(value: unknown): string {\n if (!Array.isArray(value)) {\n return \"\";\n }\n for (const candidate of value) {\n if (typeof candidate === \"string\" && candidate.trim()) {\n return candidate.trim();\n }\n if (candidate && typeof candidate === \"object\") {\n const question = stringValue(\n (candidate as Record<string, unknown>).question\n );\n if (question) {\n return question;\n }\n }\n }\n return \"\";\n}\n\nfunction stringValue(value: unknown): string {\n return typeof value === \"string\" ? value.trim() : \"\";\n}\n","import type { AgentActivitySessionUsage } from \"./types.ts\";\n\nexport interface AgentActivityUsage {\n usedTokens: number | null;\n totalTokens: number | null;\n percentUsed: number | null; // 0-100, rounded to integer; null when window unknown\n quotas: AgentActivityQuota[];\n}\n\ninterface AgentActivityQuota {\n quotaType: \"session\" | \"weekly\" | \"monthly\" | \"daily\" | \"model\" | \"cost\";\n percentRemaining?: number;\n resetsAtUnixMs?: number;\n resetText?: string;\n dollarRemaining?: number;\n modelName?: string;\n}\n\nexport interface AgentActivityUsageInput {\n sessionUsage?: AgentActivitySessionUsage | null;\n}\n\nexport function resolveAgentActivityUsage(\n input: AgentActivityUsageInput\n): AgentActivityUsage | null {\n const usage = recordValue(input.sessionUsage);\n if (!usage) {\n return null;\n }\n const contextWindow = recordValue(usage.contextWindow);\n const usedTokens = finiteNumber(contextWindow?.usedTokens);\n const totalTokens = finiteNumber(contextWindow?.totalTokens);\n const quotas = Array.isArray(usage.quotas)\n ? usage.quotas\n .map(normalizeQuota)\n .filter((quota): quota is AgentActivityQuota => quota !== null)\n : [];\n const hasWindow =\n usedTokens !== null && totalTokens !== null && totalTokens > 0;\n if (!hasWindow && quotas.length === 0) {\n return null;\n }\n return {\n usedTokens: hasWindow ? usedTokens : null,\n totalTokens: hasWindow ? totalTokens : null,\n percentUsed: hasWindow\n ? Math.min(100, Math.round((usedTokens / totalTokens) * 100))\n : null,\n quotas\n };\n}\n\nfunction normalizeQuota(value: unknown): AgentActivityQuota | null {\n const record = recordValue(value);\n const quotaType = quotaTypeValue(record?.quotaType);\n if (!record || !quotaType) return null;\n const quota: AgentActivityQuota = { quotaType };\n const percentRemaining = finiteNumber(record.percentRemaining);\n if (percentRemaining !== null) quota.percentRemaining = percentRemaining;\n const resetsAtUnixMs = finiteNumber(record.resetsAtUnixMs);\n if (resetsAtUnixMs !== null) quota.resetsAtUnixMs = resetsAtUnixMs;\n const resetText = textValue(record.resetText);\n if (resetText) quota.resetText = resetText;\n const dollarRemaining = finiteNumber(record.dollarRemaining);\n if (dollarRemaining !== null) quota.dollarRemaining = dollarRemaining;\n const modelName = textValue(record.modelName);\n if (modelName) quota.modelName = modelName;\n return quota;\n}\n\nfunction quotaTypeValue(\n value: unknown\n): AgentActivityQuota[\"quotaType\"] | null {\n switch (textValue(value)) {\n case \"session\":\n case \"weekly\":\n case \"monthly\":\n case \"daily\":\n case \"model\":\n case \"cost\":\n return textValue(value) as AgentActivityQuota[\"quotaType\"];\n default:\n return null;\n }\n}\n\nfunction recordValue(value: unknown): Record<string, unknown> | null {\n return value !== null && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction finiteNumber(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\nfunction textValue(value: unknown): string {\n return typeof value === \"string\" ? value.trim() : \"\";\n}\n","import type { EngineDiagnosticSink } from \"./diagnostics.ts\";\nimport type {\n EngineCommandPort,\n EngineCommandResultIntent,\n EngineExternalCommand,\n EngineScheduledTask,\n EngineScheduler\n} from \"./types.ts\";\n\n// Effect executor: performs external command descriptions through the\n// injected command port and feeds every settlement (success, failure,\n// timeout) back into the dispatch loop as a command-result intent.\n//\n// The executor holds no decision logic. Retrying, fallback, and recovery are\n// reducer transitions, never executed in place here.\n\nexport interface CreateEngineEffectExecutorInput {\n commandPort: EngineCommandPort;\n diagnosticSink?: EngineDiagnosticSink;\n onResult: (intent: EngineCommandResultIntent) => void;\n scheduler: EngineScheduler;\n}\n\nexport interface EngineEffectExecutor {\n abort(commandId: string, reason: string): void;\n dispose(): void;\n execute(command: EngineExternalCommand): void;\n}\n\nexport function createEngineEffectExecutor({\n commandPort,\n diagnosticSink,\n onResult,\n scheduler\n}: CreateEngineEffectExecutorInput): EngineEffectExecutor {\n let disposed = false;\n const timeoutTasks = new Set<EngineScheduledTask>();\n const abortControllersByCommandId = new Map<string, AbortController>();\n\n const settle = (intent: EngineCommandResultIntent): void => {\n if (disposed) {\n diagnosticSink?.({\n commandId: intent.commandId,\n type: \"commandResultAfterDispose\"\n });\n return;\n }\n onResult(intent);\n };\n\n return {\n abort(commandId, reason) {\n const controller = abortControllersByCommandId.get(commandId.trim());\n if (!controller || controller.signal.aborted) return;\n controller.abort(new Error(reason.trim() || \"engine command aborted\"));\n },\n dispose() {\n disposed = true;\n for (const task of timeoutTasks) {\n task.cancel();\n }\n timeoutTasks.clear();\n for (const controller of abortControllersByCommandId.values()) {\n controller.abort(new Error(\"engine disposed\"));\n }\n abortControllersByCommandId.clear();\n },\n execute(command) {\n let settled = false;\n let timeoutTask: EngineScheduledTask | null = null;\n const abortController = new AbortController();\n abortControllersByCommandId.set(command.commandId, abortController);\n\n const finishTimeoutTask = (): void => {\n if (\n abortControllersByCommandId.get(command.commandId) === abortController\n ) {\n abortControllersByCommandId.delete(command.commandId);\n }\n if (timeoutTask !== null) {\n timeoutTasks.delete(timeoutTask);\n timeoutTask.cancel();\n timeoutTask = null;\n }\n };\n\n const timeoutMs = \"timeoutMs\" in command ? command.timeoutMs : undefined;\n if (timeoutMs !== undefined) {\n timeoutTask = scheduler.schedule(timeoutMs, () => {\n if (settled) {\n return;\n }\n settled = true;\n abortController.abort(new Error(\"engine command timed out\"));\n finishTimeoutTask();\n settle({\n commandId: command.commandId,\n commandType: command.type,\n ...commandCorrelationFields(command),\n outcome: \"timedOut\",\n type: \"engine/commandResult\"\n });\n });\n timeoutTasks.add(timeoutTask);\n }\n\n commandPort.execute(command, { signal: abortController.signal }).then(\n (value) => {\n if (settled) {\n diagnosticSink?.({\n commandId: command.commandId,\n type: \"commandResultAfterTimeout\"\n });\n return;\n }\n settled = true;\n finishTimeoutTask();\n settle({\n commandId: command.commandId,\n commandType: command.type,\n ...commandCorrelationFields(command),\n outcome: \"succeeded\",\n type: \"engine/commandResult\",\n value\n });\n },\n (error: unknown) => {\n if (settled) {\n diagnosticSink?.({\n commandId: command.commandId,\n type: \"commandResultAfterTimeout\"\n });\n return;\n }\n settled = true;\n finishTimeoutTask();\n settle({\n commandId: command.commandId,\n commandType: command.type,\n ...commandCorrelationFields(command),\n ...engineCommandErrorFields(error),\n outcome: \"failed\",\n type: \"engine/commandResult\"\n });\n }\n );\n }\n };\n}\n\nfunction commandCorrelationFields(command: EngineExternalCommand): {\n correlationId?: string;\n} {\n if (!(\"correlationId\" in command)) {\n return {};\n }\n const value = command.correlationId;\n return typeof value === \"string\" && value.trim()\n ? { correlationId: value.trim() }\n : {};\n}\n\nfunction engineCommandErrorFields(error: unknown): {\n errorCode?: string;\n errorReason?: string;\n errorMessage: string;\n} {\n const record =\n error && typeof error === \"object\"\n ? (error as Record<string, unknown>)\n : null;\n const code = typeof record?.code === \"string\" ? record.code.trim() : \"\";\n const reason = typeof record?.reason === \"string\" ? record.reason.trim() : \"\";\n const message =\n error instanceof Error\n ? error.message\n : typeof record?.message === \"string\"\n ? record.message\n : String(error);\n return {\n ...(code ? { errorCode: code } : {}),\n ...(reason ? { errorReason: reason } : {}),\n errorMessage: message\n };\n}\n","import type {\n EngineClock,\n EngineExpiryCommand,\n EngineIntentExpiredIntent,\n EngineScheduledTask,\n EngineScheduler\n} from \"./types.ts\";\n\n// Expiry clock: turns scheduleExpiry/cancelExpiry command descriptions into\n// host-clock scheduling and feeds elapsed deadlines back into the dispatch\n// loop as expiry intents. Reducers never read the wall clock or set timers;\n// this is the only place where deadlines meet real time.\n\nexport interface CreateEngineExpiryClockInput {\n clock: EngineClock;\n onExpired: (intent: EngineIntentExpiredIntent) => void;\n scheduler: EngineScheduler;\n}\n\nexport interface EngineExpiryClock {\n apply(command: EngineExpiryCommand): void;\n dispose(): void;\n}\n\nexport function createEngineExpiryClock({\n clock,\n onExpired,\n scheduler\n}: CreateEngineExpiryClockInput): EngineExpiryClock {\n const tasksByExpiryId = new Map<string, EngineScheduledTask>();\n let disposed = false;\n\n const cancelExpiry = (expiryId: string): void => {\n const task = tasksByExpiryId.get(expiryId);\n if (task !== undefined) {\n task.cancel();\n tasksByExpiryId.delete(expiryId);\n }\n };\n\n return {\n apply(command) {\n if (disposed) {\n return;\n }\n if (command.type === \"engine/cancelExpiry\") {\n cancelExpiry(command.expiryId);\n return;\n }\n // Rescheduling the same expiry id replaces the previous deadline.\n cancelExpiry(command.expiryId);\n const delayMs = Math.max(0, command.dueAtUnixMs - clock.nowUnixMs());\n const task = scheduler.schedule(delayMs, () => {\n tasksByExpiryId.delete(command.expiryId);\n onExpired({\n dueAtUnixMs: command.dueAtUnixMs,\n expiryId: command.expiryId,\n type: \"engine/intentExpired\"\n });\n });\n tasksByExpiryId.set(command.expiryId, task);\n },\n dispose() {\n disposed = true;\n for (const task of tasksByExpiryId.values()) {\n task.cancel();\n }\n tasksByExpiryId.clear();\n }\n };\n}\n","import type {\n EngineCommand,\n EngineIntent,\n EngineReducerResult,\n EngineRuntimeState\n} from \"./types.ts\";\n\n// Engine self state domain: connection placeholder, processed-intent counter,\n// and the probe/expiry round trips that drive the skeleton interleaving tests.\n// Real business domains (turn lifecycle, queue, optimistic intents) land as\n// sibling `*.reducer.ts` files in later slices.\n\nconst NO_COMMANDS: readonly EngineCommand[] = [];\n\nexport function createInitialEngineRuntimeState(): EngineRuntimeState {\n return {\n connection: \"unknown\",\n lastCommandResult: null,\n lastExpiredIntentId: null,\n processedIntentCount: 0,\n workspaceReconcile: {\n commandId: null,\n errorCode: null,\n errorMessage: null,\n status: \"idle\"\n }\n };\n}\n\nexport function engineRuntimeReducer(\n state: EngineRuntimeState,\n intent: EngineIntent\n): EngineReducerResult<EngineRuntimeState> {\n const counted: EngineRuntimeState = {\n ...state,\n processedIntentCount: state.processedIntentCount + 1\n };\n switch (intent.type) {\n case \"workspace/reconcileRequested\":\n return requestWorkspaceReconcile(\n counted,\n intent.workspaceId,\n intent.retry === true\n );\n case \"engine/connectionChanged\":\n if (\n intent.status === \"connected\" &&\n state.connection !== \"connected\" &&\n intent.workspaceId?.trim()\n ) {\n return requestWorkspaceReconcile(\n { ...counted, connection: intent.status },\n intent.workspaceId,\n true\n );\n }\n return {\n commands: NO_COMMANDS,\n state: { ...counted, connection: intent.status }\n };\n case \"engine/probeRequested\":\n return {\n commands: [\n {\n commandId: intent.probeId,\n type: \"engine/probe\",\n ...(intent.timeoutMs === undefined\n ? {}\n : { timeoutMs: intent.timeoutMs })\n }\n ],\n state: counted\n };\n case \"engine/expiryRequested\":\n return {\n commands: [\n {\n dueAtUnixMs: intent.dueAtUnixMs,\n expiryId: intent.expiryId,\n type: \"engine/scheduleExpiry\"\n }\n ],\n state: counted\n };\n case \"engine/expiryCancelRequested\":\n return {\n commands: [{ expiryId: intent.expiryId, type: \"engine/cancelExpiry\" }],\n state: counted\n };\n case \"engine/commandResult\":\n if (\n intent.commandType === \"engine/reconcileWorkspace\" &&\n intent.commandId === state.workspaceReconcile.commandId\n ) {\n return {\n commands: NO_COMMANDS,\n state: {\n ...counted,\n lastCommandResult: commandResultRecord(intent),\n workspaceReconcile: {\n commandId: null,\n errorCode:\n intent.outcome === \"failed\" ? (intent.errorCode ?? null) : null,\n errorMessage:\n intent.outcome === \"failed\"\n ? intent.errorMessage?.trim() || null\n : null,\n status:\n intent.outcome === \"succeeded\"\n ? \"ready\"\n : intent.outcome === \"failed\"\n ? \"failed\"\n : \"unknown\"\n }\n }\n };\n }\n return {\n commands: NO_COMMANDS,\n state: {\n ...counted,\n lastCommandResult: commandResultRecord(intent)\n }\n };\n case \"engine/intentExpired\":\n return {\n commands: NO_COMMANDS,\n state: { ...counted, lastExpiredIntentId: intent.expiryId }\n };\n default:\n return { commands: NO_COMMANDS, state: counted };\n }\n}\n\nfunction requestWorkspaceReconcile(\n state: EngineRuntimeState,\n workspaceId: string,\n retry: boolean\n): EngineReducerResult<EngineRuntimeState> {\n const normalized = workspaceId.trim();\n if (\n !normalized ||\n state.workspaceReconcile.status === \"loading\" ||\n ((state.workspaceReconcile.status === \"failed\" ||\n state.workspaceReconcile.status === \"unknown\") &&\n !retry)\n )\n return { commands: NO_COMMANDS, state };\n const commandId = `engine:reconcile:${normalized}:${state.processedIntentCount}`;\n return {\n commands: [\n { commandId, type: \"engine/reconcileWorkspace\", workspaceId: normalized }\n ],\n state: {\n ...state,\n workspaceReconcile: {\n commandId,\n errorCode: null,\n errorMessage: null,\n status: \"loading\"\n }\n }\n };\n}\n\nfunction commandResultRecord(\n intent: Extract<EngineIntent, { type: \"engine/commandResult\" }>\n) {\n return {\n commandId: intent.commandId,\n outcome: intent.outcome,\n ...(intent.errorMessage === undefined\n ? {}\n : { errorMessage: intent.errorMessage })\n };\n}\n","import type { PromptQueueState } from \"./promptQueue.types.ts\";\n\nexport function promptQueuePromptIdForClientSubmit(\n state: PromptQueueState,\n agentSessionId: string,\n clientSubmitId: string\n): string | null {\n return (\n state.recordsBySessionId[agentSessionId.trim()]?.prompts.find(\n (prompt) => prompt.clientSubmitId === clientSubmitId.trim()\n )?.id ?? null\n );\n}\n\nexport function canCancelQueuedSubmit(\n state: PromptQueueState,\n agentSessionId: string,\n clientSubmitId: string\n): boolean {\n const record = state.recordsBySessionId[agentSessionId.trim()];\n const promptId = promptQueuePromptIdForClientSubmit(\n state,\n agentSessionId,\n clientSubmitId\n );\n return Boolean(\n record &&\n promptId &&\n record.inFlight?.promptId !== promptId &&\n record.uncertainDelivery?.promptId !== promptId\n );\n}\n\nexport function isQueuedSubmitDeliveryPending(\n state: PromptQueueState,\n agentSessionId: string,\n clientSubmitId: string\n): boolean {\n const record = state.recordsBySessionId[agentSessionId.trim()];\n const promptId = promptQueuePromptIdForClientSubmit(\n state,\n agentSessionId,\n clientSubmitId\n );\n return Boolean(\n record &&\n promptId &&\n record.failedPromptId !== promptId &&\n record.uncertainDelivery?.promptId !== promptId\n );\n}\n","import { normalizeAgentActivityCapabilityReferences } from \"../capabilityReferences.ts\";\nimport type { EngineQueuedPrompt } from \"./promptQueue.types.ts\";\n\nexport function clonePromptCapabilityReferences(\n references: EngineQueuedPrompt[\"capabilityRefs\"]\n): Pick<EngineQueuedPrompt, \"capabilityRefs\"> {\n const normalized = normalizeAgentActivityCapabilityReferences(references);\n return normalized.length > 0 ? { capabilityRefs: normalized } : {};\n}\n\nexport function clonePromptRequiredSettingsPatch(\n patch: EngineQueuedPrompt[\"requiredSettingsPatch\"]\n): Pick<EngineQueuedPrompt, \"requiredSettingsPatch\"> {\n return patch ? { requiredSettingsPatch: { ...patch } } : {};\n}\n\nexport function normalizeQueuedPrompt(\n prompt: EngineQueuedPrompt\n): EngineQueuedPrompt | null {\n const id = prompt.id.trim();\n if (!id || prompt.content.length === 0) return null;\n return {\n ...(prompt.clientSubmitId?.trim()\n ? { clientSubmitId: prompt.clientSubmitId.trim() }\n : {}),\n ...clonePromptCapabilityReferences(prompt.capabilityRefs),\n content: prompt.content.map((block) => ({ ...block })),\n createdAtUnixMs: prompt.createdAtUnixMs,\n ...(prompt.displayPrompt?.trim()\n ? { displayPrompt: prompt.displayPrompt.trim() }\n : {}),\n ...(prompt.guidance === true ? { guidance: true } : {}),\n id,\n ...clonePromptRequiredSettingsPatch(prompt.requiredSettingsPatch),\n ...(prompt.submitDiagnostics\n ? { submitDiagnostics: { ...prompt.submitDiagnostics } }\n : {}),\n ...(prompt.runtimeContent\n ? { runtimeContent: prompt.runtimeContent.map((block) => ({ ...block })) }\n : {}),\n ...(prompt.visibleInQueue === false ? { visibleInQueue: false } : {})\n };\n}\n","import type { PromptQueueRecord } from \"./promptQueue.types.ts\";\n\nexport function emptyQueueRecord(\n workspaceId: string,\n agentSessionId: string\n): PromptQueueRecord {\n return {\n agentSessionId,\n deliveryBarrierTurnId: null,\n failedPromptId: null,\n failureMessage: null,\n inFlight: null,\n prompts: [],\n sendNextPromptId: null,\n suspendReason: null,\n uncertainDelivery: null,\n workspaceId\n };\n}\n\nexport function compactQueueRecord(\n record: PromptQueueRecord\n): PromptQueueRecord | null {\n return record.prompts.length === 0 &&\n !record.inFlight &&\n !record.uncertainDelivery &&\n !record.deliveryBarrierTurnId\n ? null\n : record;\n}\n\nexport function queueSendCommandId(\n agentSessionId: string,\n sequence: number\n): string {\n return `queue:send:${agentSessionId}:${sequence}`;\n}\n","import type { CanonicalSubmitAvailability } from \"./sessionLifecycle.availability.ts\";\nimport type { PromptQueueState } from \"./promptQueue.types.ts\";\n\nexport type PromptQueueSendNowStrategy =\n | \"send_available\"\n | \"native_guidance\"\n | \"cancel_then_send\";\n\ninterface ActiveTurnDeliveryCapabilities {\n activeTurnGuidance?: boolean;\n interrupt?: boolean;\n}\n\nexport function resolveQueuedPromptSendNowStrategy(\n state: PromptQueueState,\n rawAgentSessionId: string,\n rawPromptId: string,\n availability: CanonicalSubmitAvailability,\n capabilities: ActiveTurnDeliveryCapabilities | null | undefined\n): PromptQueueSendNowStrategy | null {\n const agentSessionId = rawAgentSessionId.trim();\n const promptId = rawPromptId.trim();\n if (!canRequestQueuedPromptSendNow(state, agentSessionId, promptId)) {\n return null;\n }\n return resolvePromptSendNowStrategy(availability, capabilities);\n}\n\nexport function resolvePromptSendNowStrategy(\n availability: CanonicalSubmitAvailability,\n capabilities: ActiveTurnDeliveryCapabilities | null | undefined\n): PromptQueueSendNowStrategy | null {\n if (availability.state === \"available\") {\n return \"send_available\";\n }\n if (\n availability.state !== \"blocked\" ||\n availability.reason !== \"active_turn\"\n ) {\n return null;\n }\n if (capabilities?.activeTurnGuidance === true) {\n return \"native_guidance\";\n }\n return capabilities?.interrupt === true ? \"cancel_then_send\" : null;\n}\n\nexport function canRequestQueuedPromptSendNow(\n state: PromptQueueState,\n rawAgentSessionId: string,\n rawPromptId: string\n): boolean {\n const agentSessionId = rawAgentSessionId.trim();\n const promptId = rawPromptId.trim();\n const current = state.recordsBySessionId[agentSessionId];\n return Boolean(\n current &&\n promptId &&\n current.inFlight?.promptId !== promptId &&\n current.uncertainDelivery?.promptId !== promptId &&\n current.prompts.some((prompt) => prompt.id === promptId)\n );\n}\n","import type { CanonicalSubmitAvailability } from \"./sessionLifecycle.availability.ts\";\nimport type { PromptQueueRecord } from \"./promptQueue.types.ts\";\n\nexport type QueueDrainDecision =\n | {\n kind: \"blocked\";\n reason:\n | \"no_head\"\n | \"in_flight\"\n | \"uncertain_delivery\"\n | \"suspended\"\n | \"failed_head\"\n | \"barrier_pending\"\n | \"unavailable\";\n }\n | { kind: \"send\"; guidance: boolean };\n\n/**\n * Decides whether a queue's head prompt is ready to drain and, if so,\n * whether it goes out as a plain new-turn submit or as a guidance steer into\n * the active turn. This is the ONLY place that decision is made: every\n * current and future blocker joins this single ordered list rather than\n * gating drain from a separate, independent pre-check.\n *\n * The order below is the contract; earlier rules win:\n *\n * 1. no head prompt queued\n * 2. a send is already in flight\n * 3. the previous send's delivery is uncertain (timed out, exact turn unknown)\n * 4. the queue is suspended (explicit user stop)\n * 5. the head previously failed and hasn't been retried\n * 6. the head is guidance steering the turn availability is blocked on\n * 7. the delivery barrier (from the last accepted send) hasn't settled\n * 8. availability is otherwise not available\n * 9. otherwise the head is ready to send as a plain new-turn submit\n *\n * Guidance (rule 6) is deliberately ABOVE the delivery barrier (rule 7). The\n * barrier only serializes NEW-TURN sends against each other, so the daemon\n * never sees two competing turn starts for the same session. A guidance head\n * steers the very turn the barrier is tracking — making it wait for that\n * turn to settle first would deadlock the queue, since the entire point of\n * guidance is to reach the turn while it is still running. Guidance may\n * steer that turn repeatedly (each successive promotion re-runs this same\n * decision); a guidance send never touches the barrier, which stays in place\n * to serialize the next plain prompt behind the turn it is still tracking.\n */\nexport function resolveQueueDrainDecision(\n record: PromptQueueRecord,\n availability: CanonicalSubmitAvailability,\n barrierPending: boolean\n): QueueDrainDecision {\n const head = record.prompts[0];\n if (!head) {\n return { kind: \"blocked\", reason: \"no_head\" };\n }\n if (record.inFlight) {\n return { kind: \"blocked\", reason: \"in_flight\" };\n }\n if (record.uncertainDelivery) {\n return { kind: \"blocked\", reason: \"uncertain_delivery\" };\n }\n if (record.suspendReason) {\n return { kind: \"blocked\", reason: \"suspended\" };\n }\n if (record.failedPromptId === head.id) {\n return { kind: \"blocked\", reason: \"failed_head\" };\n }\n if (\n head.guidance === true &&\n availability.state === \"blocked\" &&\n availability.reason === \"active_turn\"\n ) {\n return { kind: \"send\", guidance: true };\n }\n if (barrierPending) {\n return { kind: \"blocked\", reason: \"barrier_pending\" };\n }\n if (availability.state !== \"available\") {\n return { kind: \"blocked\", reason: \"unavailable\" };\n }\n return { kind: \"send\", guidance: false };\n}\n","import type { SubmitRequestedIntent } from \"./pendingIntents.types.ts\";\nimport {\n clonePromptCapabilityReferences,\n clonePromptRequiredSettingsPatch\n} from \"./promptQueue.prompt.ts\";\nimport type { EngineQueuedPrompt } from \"./promptQueue.types.ts\";\n\nexport function queuedPromptFromSubmitIntent(\n intent: SubmitRequestedIntent,\n visibleInQueue: boolean\n): EngineQueuedPrompt {\n return {\n ...clonePromptCapabilityReferences(intent.capabilityRefs),\n clientSubmitId: intent.clientSubmitId,\n content: intent.content,\n createdAtUnixMs: intent.requestedAtUnixMs,\n ...(intent.displayPrompt ? { displayPrompt: intent.displayPrompt } : {}),\n id: intent.clientSubmitId,\n ...clonePromptRequiredSettingsPatch(intent.requiredSettingsPatch),\n submitDiagnostics: {\n ...(intent.submitDiagnostics ?? {}),\n blockCount: intent.submitDiagnostics?.blockCount ?? intent.content.length,\n queued: visibleInQueue,\n submittedAtUnixMs:\n intent.submitDiagnostics?.submittedAtUnixMs ?? intent.requestedAtUnixMs\n },\n ...(intent.runtimeContent ? { runtimeContent: intent.runtimeContent } : {}),\n visibleInQueue\n };\n}\n","import type { PromptQueueState } from \"./promptQueue.types.ts\";\n\nexport function createInitialPromptQueueState(): PromptQueueState {\n return {\n nextCommandSequence: 1,\n recordsBySessionId: {}\n };\n}\n","import type { AgentActivityMessage } from \"../types.ts\";\nimport type {\n EngineCommand,\n EngineCommandResultIntent,\n EngineIntent,\n EngineReducerResult\n} from \"./types.ts\";\nimport type {\n PromptQueueIntent,\n PromptQueueRecord,\n PromptQueueState\n} from \"./promptQueue.types.ts\";\nimport type {\n CancelResultValidation,\n SendInputResultValidation,\n ScopedSessionResultValidation\n} from \"./commandResult.validation.ts\";\nimport { promptQueuePromptIdForClientSubmit } from \"./promptQueue.lookup.ts\";\nimport {\n clonePromptCapabilityReferences,\n clonePromptRequiredSettingsPatch,\n normalizeQueuedPrompt\n} from \"./promptQueue.prompt.ts\";\nimport {\n compactQueueRecord,\n emptyQueueRecord,\n queueSendCommandId\n} from \"./promptQueue.record.ts\";\nimport {\n canRequestQueuedPromptSendNow,\n type PromptQueueSendNowStrategy\n} from \"./promptQueue.sendNow.ts\";\nimport { resolveQueueDrainDecision } from \"./promptQueue.drainDecision.ts\";\nimport {\n deriveCanonicalSubmitAvailability,\n type CanonicalSessionLifecycleView\n} from \"./sessionLifecycle.availability.ts\";\nimport { canonicalTurnKey } from \"./sessionEntityKeys.ts\";\nimport { queuedPromptFromSubmitIntent } from \"./promptQueue.submit.ts\";\n\nconst NO_COMMANDS: readonly EngineCommand[] = [];\nconst QUEUE_SEND_TIMEOUT_MS = 30_000;\n\nexport { createInitialPromptQueueState } from \"./promptQueue.initialState.ts\";\n\nexport interface PromptQueueReducerContext {\n lifecycle: CanonicalSessionLifecycleView;\n deletedSessionIds: Readonly<Record<string, true>>;\n planFeedbackAccepted?: boolean;\n submitRequestAccepted?: boolean;\n cancelResultValidation?: CancelResultValidation | null;\n interactionResultValidation?: ScopedSessionResultValidation | null;\n sendResultValidation?: SendInputResultValidation | null;\n sendNowStrategy?: PromptQueueSendNowStrategy | null;\n settingsResultValidation?: ScopedSessionResultValidation | null;\n}\n\nexport function promptQueueReducer(\n state: PromptQueueState,\n intent: EngineIntent,\n context: PromptQueueReducerContext\n): EngineReducerResult<PromptQueueState> {\n const reduced = reduceQueueOwnedState(state, intent, context);\n if (intent.type === \"submit/requested\" && intent.routing === \"immediate\") {\n return reduced;\n }\n if (isNoActiveTurnSendFailure(intent)) {\n return reduced;\n }\n return drainAffectedSessions(\n reduced,\n affectedSessionIds(state, intent, context),\n context.lifecycle\n );\n}\n\nfunction reduceQueueOwnedState(\n state: PromptQueueState,\n intent: EngineIntent,\n context: PromptQueueReducerContext\n): EngineReducerResult<PromptQueueState> {\n switch (intent.type) {\n case \"session/removed\":\n case \"queue/sessionCleaned\":\n return removeQueue(state, intent.agentSessionId);\n case \"queue/enqueued\":\n return context.deletedSessionIds[intent.agentSessionId.trim()]\n ? unchanged(state)\n : enqueuePrompt(state, intent);\n case \"submit/requested\":\n if (\n context.submitRequestAccepted === false ||\n context.deletedSessionIds[intent.agentSessionId.trim()]\n ) {\n return unchanged(state);\n }\n if (intent.routing === \"send_now\") {\n if (!context.sendNowStrategy) return unchanged(state);\n return requestQueuedPromptSendNow(\n enqueueSubmit(state, intent, context.lifecycle).state,\n intent.agentSessionId,\n intent.clientSubmitId,\n context.sendNowStrategy\n );\n }\n return enqueueSubmit(state, intent, context.lifecycle);\n case \"plan/feedbackRequested\":\n return context.planFeedbackAccepted === true\n ? enqueueSubmit(\n state,\n { ...intent, type: \"submit/requested\" },\n context.lifecycle\n )\n : unchanged(state);\n case \"submit/canceled\":\n return removePrompt(\n state,\n intent.agentSessionId,\n promptQueuePromptIdForClientSubmit(\n state,\n intent.agentSessionId,\n intent.clientSubmitId\n ) ?? \"\"\n );\n case \"message/snapshotReceived\":\n return confirmDeliveredPrompts(state, intent.messages);\n case \"queue/removed\":\n return removePrompt(state, intent.agentSessionId, intent.promptId);\n case \"queue/sendNowRequested\":\n if (\n context.deletedSessionIds[intent.agentSessionId.trim()] ||\n !context.sendNowStrategy\n ) {\n return unchanged(state);\n }\n return requestQueuedPromptSendNow(\n state,\n intent.agentSessionId,\n intent.promptId,\n context.sendNowStrategy\n );\n case \"queue/suspended\":\n return suspendQueue(state, intent.agentSessionId, intent.reason);\n case \"session/stopRequested\":\n return suspendQueue(state, intent.agentSessionId, \"user_stop\");\n case \"queue/resumed\":\n return context.deletedSessionIds[intent.agentSessionId.trim()]\n ? unchanged(state)\n : resumeQueue(state, intent.agentSessionId);\n case \"engine/commandResult\":\n return intent.commandType === \"queue/sendPrompt\"\n ? settleQueueCommand(\n state,\n intent,\n context.sendResultValidation ?? null\n )\n : unchanged(state);\n default:\n return unchanged(state);\n }\n}\n\nfunction enqueuePrompt(\n state: PromptQueueState,\n intent: Extract<PromptQueueIntent, { type: \"queue/enqueued\" }>,\n options?: { insertAtFront?: boolean }\n): EngineReducerResult<PromptQueueState> {\n const agentSessionId = intent.agentSessionId.trim();\n const workspaceId = intent.workspaceId.trim();\n const prompt = normalizeQueuedPrompt(intent.prompt);\n if (!agentSessionId || !workspaceId || !prompt) return unchanged(state);\n const current =\n state.recordsBySessionId[agentSessionId] ??\n emptyQueueRecord(workspaceId, agentSessionId);\n if (current.prompts.some((candidate) => candidate.id === prompt.id)) {\n return unchanged(state);\n }\n return result(\n replaceRecord(state, agentSessionId, {\n ...current,\n prompts: options?.insertAtFront\n ? [prompt, ...current.prompts]\n : [...current.prompts, prompt]\n })\n );\n}\n\nfunction enqueueSubmit(\n state: PromptQueueState,\n intent: Extract<EngineIntent, { type: \"submit/requested\" }>,\n lifecycle: CanonicalSessionLifecycleView\n): EngineReducerResult<PromptQueueState> {\n if (intent.routing === \"immediate\") {\n return {\n commands: [sendCommandFromImmediateSubmit(intent)],\n state\n };\n }\n const agentSessionId = intent.agentSessionId.trim();\n const current = state.recordsBySessionId[agentSessionId];\n const availability = deriveCanonicalSubmitAvailability(\n lifecycle,\n agentSessionId\n );\n const visibleInQueue = Boolean(\n current?.prompts.length ||\n current?.inFlight ||\n current?.uncertainDelivery ||\n current?.deliveryBarrierTurnId ||\n availability.state !== \"available\"\n );\n // An ordinary submit that resumes a queue the user just explicitly\n // stopped is the user's next instruction, not a continuation of whatever\n // was already queued before the stop: it jumps ahead of that stale\n // backlog instead of preserving FIFO order behind it.\n const resumingFromUserStop = current?.suspendReason === \"user_stop\";\n const resumed = resumeQueue(state, agentSessionId);\n return enqueuePrompt(\n resumed.state,\n {\n agentSessionId,\n prompt: queuedPromptFromSubmitIntent(intent, visibleInQueue),\n type: \"queue/enqueued\",\n workspaceId: intent.workspaceId\n },\n { insertAtFront: resumingFromUserStop }\n );\n}\n\nfunction sendCommandFromImmediateSubmit(\n intent: Extract<EngineIntent, { type: \"submit/requested\" }>\n): Extract<EngineCommand, { type: \"queue/sendPrompt\" }> {\n return {\n agentSessionId: intent.agentSessionId,\n ...clonePromptCapabilityReferences(intent.capabilityRefs),\n commandId: `submit:send:${intent.clientSubmitId}`,\n clientSubmitId: intent.clientSubmitId,\n correlationId: intent.clientSubmitId,\n content: intent.runtimeContent ?? intent.content,\n ...(intent.displayPrompt ? { displayPrompt: intent.displayPrompt } : {}),\n ...(intent.submitDiagnostics\n ? { submitDiagnostics: intent.submitDiagnostics }\n : {}),\n promptId: intent.clientSubmitId,\n ...clonePromptRequiredSettingsPatch(intent.requiredSettingsPatch),\n timeoutMs: QUEUE_SEND_TIMEOUT_MS,\n type: \"queue/sendPrompt\",\n workspaceId: intent.workspaceId\n };\n}\n\nfunction removePrompt(\n state: PromptQueueState,\n rawAgentSessionId: string,\n rawPromptId: string\n): EngineReducerResult<PromptQueueState> {\n const agentSessionId = rawAgentSessionId.trim();\n const promptId = rawPromptId.trim();\n const current = state.recordsBySessionId[agentSessionId];\n if (\n !current ||\n !promptId ||\n current.inFlight?.promptId === promptId ||\n current.uncertainDelivery?.promptId === promptId ||\n !current.prompts.some((prompt) => prompt.id === promptId)\n ) {\n return unchanged(state);\n }\n const next = compactQueueRecord({\n ...current,\n failedPromptId:\n current.failedPromptId === promptId ? null : current.failedPromptId,\n failureMessage:\n current.failedPromptId === promptId ? null : current.failureMessage,\n prompts: current.prompts.filter((prompt) => prompt.id !== promptId),\n sendNextPromptId:\n current.sendNextPromptId === promptId ? null : current.sendNextPromptId\n });\n return result(\n next\n ? replaceRecord(state, agentSessionId, next)\n : deleteRecord(state, agentSessionId)\n );\n}\n\nfunction requestQueuedPromptSendNow(\n state: PromptQueueState,\n rawAgentSessionId: string,\n rawPromptId: string,\n strategy: PromptQueueSendNowStrategy\n): EngineReducerResult<PromptQueueState> {\n const agentSessionId = rawAgentSessionId.trim();\n const promptId = rawPromptId.trim();\n if (!canRequestQueuedPromptSendNow(state, agentSessionId, promptId)) {\n return unchanged(state);\n }\n const current = state.recordsBySessionId[agentSessionId]!;\n const index = current.prompts.findIndex((prompt) => prompt.id === promptId);\n if (index < 0) return unchanged(state);\n const prompts = [...current.prompts];\n const [selected] = prompts.splice(index, 1);\n const selectedWithoutGuidance = { ...selected! };\n delete selectedWithoutGuidance.guidance;\n prompts.unshift(\n strategy === \"native_guidance\"\n ? { ...selectedWithoutGuidance, guidance: true }\n : selectedWithoutGuidance\n );\n return result(\n replaceRecord(state, agentSessionId, {\n ...current,\n failedPromptId:\n current.failedPromptId === promptId ? null : current.failedPromptId,\n failureMessage:\n current.failedPromptId === promptId ? null : current.failureMessage,\n prompts,\n sendNextPromptId: strategy === \"cancel_then_send\" ? promptId : null,\n suspendReason: null\n })\n );\n}\n\nfunction suspendQueue(\n state: PromptQueueState,\n rawAgentSessionId: string,\n reason: PromptQueueRecord[\"suspendReason\"]\n): EngineReducerResult<PromptQueueState> {\n const agentSessionId = rawAgentSessionId.trim();\n const current = state.recordsBySessionId[agentSessionId];\n if (\n !current ||\n current.prompts.length === 0 ||\n current.suspendReason === reason\n ) {\n return unchanged(state);\n }\n return result(\n replaceRecord(state, agentSessionId, { ...current, suspendReason: reason })\n );\n}\n\nfunction resumeQueue(\n state: PromptQueueState,\n rawAgentSessionId: string\n): EngineReducerResult<PromptQueueState> {\n const agentSessionId = rawAgentSessionId.trim();\n const current = state.recordsBySessionId[agentSessionId];\n return !current || current.suspendReason === null\n ? unchanged(state)\n : result(\n replaceRecord(state, agentSessionId, {\n ...current,\n suspendReason: null\n })\n );\n}\n\nfunction settleQueueCommand(\n state: PromptQueueState,\n intent: EngineCommandResultIntent,\n validation: SendInputResultValidation | null\n): EngineReducerResult<PromptQueueState> {\n const entry = Object.entries(state.recordsBySessionId).find(\n ([, record]) => record.inFlight?.commandId === intent.commandId\n );\n if (!entry) return unchanged(state);\n const [agentSessionId, current] = entry;\n const inFlight = current.inFlight!;\n if (intent.outcome === \"succeeded\" && validation?.kind === \"valid\") {\n const deliveryBarrierTurnId =\n validation.result.kind === \"goalControl\"\n ? null\n : validation.result.turnId;\n const record = compactQueueRecord({\n ...current,\n deliveryBarrierTurnId,\n failedPromptId: null,\n failureMessage: null,\n inFlight: null,\n prompts: current.prompts.filter(\n (prompt) => prompt.id !== inFlight.promptId\n ),\n sendNextPromptId:\n current.sendNextPromptId === inFlight.promptId\n ? null\n : current.sendNextPromptId\n });\n return result(\n record\n ? replaceRecord(state, agentSessionId, record)\n : deleteRecord(state, agentSessionId)\n );\n }\n if (intent.outcome === \"timedOut\" || intent.outcome === \"succeeded\") {\n const record = {\n ...current,\n failedPromptId: inFlight.promptId,\n failureMessage: null,\n inFlight: null,\n uncertainDelivery: inFlight\n };\n return {\n commands: [reconcileCommand(agentSessionId, current.workspaceId, intent)],\n state: replaceRecord(state, agentSessionId, record)\n };\n }\n if (isNoActiveTurnSendFailure(intent)) {\n return {\n commands: [reconcileCommand(agentSessionId, current.workspaceId, intent)],\n state: replaceRecord(state, agentSessionId, {\n ...current,\n failedPromptId: null,\n failureMessage: null,\n inFlight: null\n })\n };\n }\n return result(\n replaceRecord(state, agentSessionId, {\n ...current,\n failedPromptId: inFlight.promptId,\n failureMessage: intent.errorMessage?.trim() || null,\n inFlight: null\n })\n );\n}\n\nfunction reconcileCommand(\n agentSessionId: string,\n workspaceId: string,\n intent: EngineCommandResultIntent\n): Extract<EngineCommand, { type: \"session/reconcile\" }> {\n return {\n agentSessionId,\n commandId: `queue:reconcile:${intent.commandId}`,\n scope: \"state_and_messages\",\n timeoutMs: 30_000,\n type: \"session/reconcile\",\n workspaceId\n };\n}\n\nfunction isNoActiveTurnSendFailure(intent: EngineIntent): boolean {\n return (\n intent.type === \"engine/commandResult\" &&\n intent.commandType === \"queue/sendPrompt\" &&\n intent.outcome === \"failed\" &&\n (intent.errorReason?.trim() === \"agent.no_active_turn\" ||\n intent.errorCode?.trim() === \"agent.no_active_turn\")\n );\n}\n\nfunction confirmDeliveredPrompts(\n state: PromptQueueState,\n messages: readonly AgentActivityMessage[]\n): EngineReducerResult<PromptQueueState> {\n const confirmedTurnByClientSubmitId = exactConfirmedTurns(messages);\n if (confirmedTurnByClientSubmitId.size === 0) return unchanged(state);\n let next = state;\n for (const [agentSessionId, current] of Object.entries(\n state.recordsBySessionId\n )) {\n const matched = current.prompts.find((prompt) => {\n const turnId = prompt.clientSubmitId\n ? confirmedTurnByClientSubmitId.get(prompt.clientSubmitId)\n : undefined;\n return Boolean(turnId);\n });\n if (!matched?.clientSubmitId) continue;\n const turnId = confirmedTurnByClientSubmitId.get(matched.clientSubmitId);\n if (!turnId) continue;\n const record = compactQueueRecord({\n ...current,\n deliveryBarrierTurnId: turnId,\n failedPromptId:\n current.failedPromptId === matched.id ? null : current.failedPromptId,\n failureMessage:\n current.failedPromptId === matched.id ? null : current.failureMessage,\n inFlight:\n current.inFlight?.promptId === matched.id ? null : current.inFlight,\n prompts: current.prompts.filter((prompt) => prompt.id !== matched.id),\n sendNextPromptId:\n current.sendNextPromptId === matched.id\n ? null\n : current.sendNextPromptId,\n uncertainDelivery:\n current.uncertainDelivery?.promptId === matched.id\n ? null\n : current.uncertainDelivery\n });\n next = record\n ? replaceRecord(next, agentSessionId, record)\n : deleteRecord(next, agentSessionId);\n }\n return next === state ? unchanged(state) : result(next);\n}\n\nfunction exactConfirmedTurns(\n messages: readonly AgentActivityMessage[]\n): ReadonlyMap<string, string> {\n const turnsBySubmitId = new Map<string, Set<string>>();\n for (const message of messages) {\n const clientSubmitId = message.payload?.clientSubmitId;\n const turnId = message.turnId?.trim() ?? \"\";\n if (\n typeof clientSubmitId !== \"string\" ||\n !clientSubmitId.trim() ||\n !turnId\n ) {\n continue;\n }\n const id = clientSubmitId.trim();\n const turns = turnsBySubmitId.get(id) ?? new Set<string>();\n turns.add(turnId);\n turnsBySubmitId.set(id, turns);\n }\n return new Map(\n [...turnsBySubmitId]\n .filter(([, turns]) => turns.size === 1)\n .map(([clientSubmitId, turns]) => [clientSubmitId, [...turns][0]!])\n );\n}\n\nfunction drainAffectedSessions(\n reduced: EngineReducerResult<PromptQueueState>,\n affected: readonly string[],\n lifecycle: CanonicalSessionLifecycleView\n): EngineReducerResult<PromptQueueState> {\n let state = reduced.state;\n const commands = [...reduced.commands];\n for (const agentSessionId of [...new Set(affected)].sort()) {\n const drained = drainSession(state, agentSessionId, lifecycle);\n state = drained.state;\n commands.push(...drained.commands);\n }\n return state === reduced.state && commands.length === reduced.commands.length\n ? reduced\n : { commands, state };\n}\n\nfunction drainSession(\n state: PromptQueueState,\n agentSessionId: string,\n lifecycle: CanonicalSessionLifecycleView\n): EngineReducerResult<PromptQueueState> {\n const originalState = state;\n let record = state.recordsBySessionId[agentSessionId];\n if (!record) return unchanged(state);\n let barrierPending = false;\n if (record.deliveryBarrierTurnId) {\n const barrierTurn =\n lifecycle.turnsById[\n canonicalTurnKey(agentSessionId, record.deliveryBarrierTurnId)\n ];\n if (!barrierTurn || barrierTurn.phase !== \"settled\") {\n // The barrier only serializes plain new-turn sends; it does not gate\n // drain readiness on its own. Whether it blocks the head is decided\n // below, alongside every other blocker, so a guidance head steering\n // this very turn is not deadlocked behind its own barrier.\n barrierPending = true;\n } else {\n record = { ...record, deliveryBarrierTurnId: null };\n const compacted = compactQueueRecord(record);\n state = compacted\n ? replaceRecord(state, agentSessionId, compacted)\n : deleteRecord(state, agentSessionId);\n if (!compacted) return result(state);\n }\n }\n const availability = deriveCanonicalSubmitAvailability(\n lifecycle,\n agentSessionId\n );\n // The guidance flag was resolved when the prompt entered the queue; whether\n // it can steer is decided here, against the availability observed at drain\n // time. A prompt queued as guidance behind a turn that has since settled is\n // sent as a plain new-turn submit instead of a doomed steer.\n const decision = resolveQueueDrainDecision(\n record,\n availability,\n barrierPending\n );\n if (decision.kind === \"blocked\") {\n return state === originalState ? unchanged(state) : result(state);\n }\n const head = record.prompts[0]!;\n const sequence = state.nextCommandSequence;\n const commandId = queueSendCommandId(record.agentSessionId, sequence);\n return {\n commands: [\n sendCommandFromQueuedPrompt(record, head, commandId, decision.guidance)\n ],\n state: replaceRecord(\n { ...state, nextCommandSequence: sequence + 1 },\n record.agentSessionId,\n {\n ...record,\n inFlight: {\n commandId,\n ...(decision.guidance ? { guidance: true as const } : {}),\n kind: \"send\",\n promptId: head.id\n }\n }\n )\n };\n}\n\nfunction sendCommandFromQueuedPrompt(\n record: PromptQueueRecord,\n head: PromptQueueRecord[\"prompts\"][number],\n commandId: string,\n guidance: boolean\n): Extract<EngineCommand, { type: \"queue/sendPrompt\" }> {\n return {\n agentSessionId: record.agentSessionId,\n ...clonePromptCapabilityReferences(head.capabilityRefs),\n commandId,\n ...(head.clientSubmitId ? { correlationId: head.clientSubmitId } : {}),\n clientSubmitId: head.clientSubmitId ?? head.id,\n content: head.runtimeContent ?? head.content,\n ...(head.displayPrompt ? { displayPrompt: head.displayPrompt } : {}),\n ...(guidance ? { guidance: true } : {}),\n ...(head.submitDiagnostics\n ? { submitDiagnostics: head.submitDiagnostics }\n : {}),\n promptId: head.id,\n ...clonePromptRequiredSettingsPatch(head.requiredSettingsPatch),\n timeoutMs: QUEUE_SEND_TIMEOUT_MS,\n type: \"queue/sendPrompt\",\n workspaceId: record.workspaceId\n };\n}\n\nfunction affectedSessionIds(\n state: PromptQueueState,\n intent: EngineIntent,\n context: PromptQueueReducerContext\n): string[] {\n const ids: string[] = [];\n if (\"agentSessionId\" in intent && typeof intent.agentSessionId === \"string\") {\n ids.push(intent.agentSessionId.trim());\n }\n if (intent.type === \"session/snapshotReceived\") {\n ids.push(\n ...intent.sessions.map((session) => session.agentSessionId.trim())\n );\n }\n if (intent.type === \"session/upserted\") {\n ids.push(intent.session.agentSessionId.trim());\n }\n if (intent.type === \"turn/upserted\") {\n ids.push(intent.turn.agentSessionId.trim());\n }\n if (intent.type === \"interaction/upserted\") {\n ids.push(intent.interaction.agentSessionId.trim());\n }\n if (intent.type === \"message/snapshotReceived\") {\n ids.push(\n ...intent.messages.map((message) => message.agentSessionId.trim())\n );\n }\n if (intent.type === \"engine/commandResult\") {\n const queueEntry = Object.entries(state.recordsBySessionId).find(\n ([, record]) => record.inFlight?.commandId === intent.commandId\n );\n if (queueEntry) ids.push(queueEntry[0]);\n const validatedSessionIds = [\n context.sendResultValidation?.kind === \"valid\"\n ? context.sendResultValidation.result.session.agentSessionId\n : undefined,\n context.interactionResultValidation?.kind === \"valid\"\n ? context.interactionResultValidation.session.agentSessionId\n : undefined,\n context.settingsResultValidation?.kind === \"valid\"\n ? context.settingsResultValidation.session.agentSessionId\n : undefined,\n context.cancelResultValidation?.kind === \"valid\"\n ? context.cancelResultValidation.response.turn?.agentSessionId\n : undefined\n ];\n ids.push(\n ...validatedSessionIds\n .filter((id): id is string => typeof id === \"string\")\n .map((id) => id.trim())\n );\n }\n return ids.filter(Boolean);\n}\n\nfunction removeQueue(\n state: PromptQueueState,\n rawAgentSessionId: string\n): EngineReducerResult<PromptQueueState> {\n const agentSessionId = rawAgentSessionId.trim();\n return state.recordsBySessionId[agentSessionId]\n ? result(deleteRecord(state, agentSessionId))\n : unchanged(state);\n}\n\nfunction replaceRecord(\n state: PromptQueueState,\n agentSessionId: string,\n record: PromptQueueRecord\n): PromptQueueState {\n return {\n ...state,\n recordsBySessionId: {\n ...state.recordsBySessionId,\n [agentSessionId]: record\n }\n };\n}\n\nfunction deleteRecord(\n state: PromptQueueState,\n agentSessionId: string\n): PromptQueueState {\n const records = { ...state.recordsBySessionId };\n delete records[agentSessionId];\n return { ...state, recordsBySessionId: records };\n}\n\nfunction result(\n state: PromptQueueState\n): EngineReducerResult<PromptQueueState> {\n return { commands: NO_COMMANDS, state };\n}\n\nfunction unchanged(\n state: PromptQueueState\n): EngineReducerResult<PromptQueueState> {\n return { commands: NO_COMMANDS, state };\n}\n","import type { SessionActivationRequestedIntent } from \"./pendingIntents.types.ts\";\n\nexport function pendingActivationGoalControlFields(\n intent: Pick<SessionActivationRequestedIntent, \"initialGoalControl\">\n): {\n initialGoalControl?: SessionActivationRequestedIntent[\"initialGoalControl\"];\n} {\n return intent.initialGoalControl\n ? { initialGoalControl: { ...intent.initialGoalControl } }\n : {};\n}\n\nexport function pendingActivationRailSectionKeyFields(\n intent: Pick<SessionActivationRequestedIntent, \"railSectionKey\">\n): { railSectionKey?: string } {\n const railSectionKey = intent.railSectionKey?.trim();\n return railSectionKey ? { railSectionKey } : {};\n}\n","import type { EngineReducerResult } from \"./types.ts\";\nimport type { PendingIntentsState } from \"./pendingIntents.types.ts\";\n\nexport function markSessionActive(\n state: PendingIntentsState,\n agentSessionId: string\n): PendingIntentsState {\n return removeInactiveSession(state, agentSessionId);\n}\n\nexport function markSessionInactive(\n state: PendingIntentsState,\n agentSessionId: string\n): PendingIntentsState {\n const id = agentSessionId.trim();\n return state.inactiveSessionIds[id]\n ? state\n : {\n ...state,\n inactiveSessionIds: { ...state.inactiveSessionIds, [id]: true }\n };\n}\n\nexport function removeInactiveSession(\n state: PendingIntentsState,\n agentSessionId: string\n): PendingIntentsState {\n const id = agentSessionId.trim();\n if (!state.inactiveSessionIds[id]) {\n return state;\n }\n const inactiveSessionIds = { ...state.inactiveSessionIds };\n delete inactiveSessionIds[id];\n return { ...state, inactiveSessionIds };\n}\n\nexport function unchanged(\n state: PendingIntentsState\n): EngineReducerResult<PendingIntentsState> {\n return { commands: [], state };\n}\n","import { normalizeAgentActivityCapabilityReferences } from \"../capabilityReferences.ts\";\nimport type { AgentActivityMessage } from \"../types.ts\";\nimport type { SendInputResultValidation } from \"./commandResult.validation.ts\";\nimport type {\n PendingIntentsState,\n PendingSubmitIntentRecord,\n SubmitRequestedIntent\n} from \"./pendingIntents.types.ts\";\nimport { canonicalTurnKey } from \"./sessionEntityKeys.ts\";\nimport type {\n EngineCommand,\n EngineCommandResultIntent,\n EngineReducerResult\n} from \"./types.ts\";\n\nconst NO_COMMANDS: readonly EngineCommand[] = [];\n\nexport function requestSubmit(\n state: PendingIntentsState,\n intent: SubmitRequestedIntent\n): EngineReducerResult<PendingIntentsState> {\n const clientSubmitId = intent.clientSubmitId.trim();\n const agentSessionId = intent.agentSessionId.trim();\n if (\n !clientSubmitId ||\n !agentSessionId ||\n intent.content.length === 0 ||\n state.submitsByClientSubmitId[clientSubmitId]\n ) {\n return unchanged(state);\n }\n const capabilityRefs = normalizeAgentActivityCapabilityReferences(\n intent.capabilityRefs\n );\n const record: PendingSubmitIntentRecord = {\n acceptedSessionVersion: null,\n agentSessionId,\n clientSubmitId,\n ...(capabilityRefs.length > 0 ? { capabilityRefs } : {}),\n content: intent.content.map((block) => ({ ...block })),\n ...(intent.displayPrompt?.trim()\n ? { displayPrompt: intent.displayPrompt.trim() }\n : {}),\n errorCode: null,\n errorMessage: null,\n expiresAtUnixMs: intent.expiresAtUnixMs,\n ...(intent.submitDiagnostics\n ? { submitDiagnostics: { ...intent.submitDiagnostics } }\n : {}),\n requestedAtUnixMs: intent.requestedAtUnixMs,\n status: \"requested\",\n turnId: null,\n workspaceId: intent.workspaceId\n };\n return {\n commands: [\n {\n dueAtUnixMs: intent.expiresAtUnixMs,\n expiryId: submitExpiryId(clientSubmitId),\n type: \"engine/scheduleExpiry\"\n }\n ],\n state: replaceSubmit(state, record)\n };\n}\n\nexport function settleSubmitCommand(\n state: PendingIntentsState,\n intent: EngineCommandResultIntent,\n validation: SendInputResultValidation | null\n): EngineReducerResult<PendingIntentsState> {\n const clientSubmitId = intent.correlationId?.trim() ?? \"\";\n const record = state.submitsByClientSubmitId[clientSubmitId];\n if (!record) {\n return unchanged(state);\n }\n if (intent.outcome === \"succeeded\") {\n if (!validation || validation.kind === \"invalid\") {\n return {\n commands: NO_COMMANDS,\n state: replaceSubmit(state, {\n ...record,\n errorCode: \"invalid_command_result\",\n errorMessage: null,\n status: \"uncertain\"\n })\n };\n }\n const result = validation.result;\n if (result.kind === \"goalControl\") {\n return {\n commands: NO_COMMANDS,\n state: replaceSubmit(state, {\n ...record,\n acceptedSessionVersion: activitySessionVersion(result.session),\n status: \"confirmed\",\n turnId: null\n })\n };\n }\n return {\n commands: NO_COMMANDS,\n state: replaceSubmit(state, {\n ...record,\n acceptedSessionVersion: activitySessionVersion(result.session),\n status: \"accepted\",\n turnId: result.turnId.trim()\n })\n };\n }\n return {\n commands: NO_COMMANDS,\n state: replaceSubmit(state, {\n ...record,\n errorCode: intent.errorCode ?? null,\n errorMessage:\n intent.outcome === \"timedOut\"\n ? null\n : intent.errorMessage?.trim() || null,\n status: intent.outcome === \"timedOut\" ? \"uncertain\" : \"failed\"\n })\n };\n}\n\nexport function confirmFromMessages(\n state: PendingIntentsState,\n messages: readonly AgentActivityMessage[]\n): EngineReducerResult<PendingIntentsState> {\n const confirmedIds = new Set(\n messages\n .map(messageClientSubmitId)\n .filter((value): value is string => value !== null)\n );\n if (confirmedIds.size === 0) {\n return unchanged(state);\n }\n let next = state;\n for (const clientSubmitId of confirmedIds) {\n const record = next.submitsByClientSubmitId[clientSubmitId];\n if (!record) {\n continue;\n }\n next = replaceSubmit(next, { ...record, status: \"confirmed\" });\n }\n return next === state\n ? unchanged(state)\n : { commands: NO_COMMANDS, state: next };\n}\n\nexport function confirmFromSessions(\n state: PendingIntentsState,\n turnsById: Readonly<Record<string, import(\"../types.ts\").AgentActivityTurn>>\n): EngineReducerResult<PendingIntentsState> {\n let next = state;\n for (const record of Object.values(state.submitsByClientSubmitId)) {\n if (record.status !== \"accepted\" || !record.turnId) {\n continue;\n }\n const turn =\n turnsById[canonicalTurnKey(record.agentSessionId, record.turnId)];\n if (\n turn?.agentSessionId === record.agentSessionId &&\n turn.phase === \"settled\"\n ) {\n next = replaceSubmit(next, { ...record, status: \"confirmed\" });\n }\n }\n return next === state\n ? unchanged(state)\n : { commands: NO_COMMANDS, state: next };\n}\n\nexport function expireSubmit(\n state: PendingIntentsState,\n expiryId: string,\n options: {\n deliveryIsQueuePending?: boolean;\n dueAtUnixMs?: number;\n } = {}\n): EngineReducerResult<PendingIntentsState> {\n if (!expiryId.startsWith(\"submit:\")) {\n return unchanged(state);\n }\n const clientSubmitId = expiryId.slice(\"submit:\".length);\n const record = state.submitsByClientSubmitId[clientSubmitId];\n if (!record) {\n return unchanged(state);\n }\n if (options.deliveryIsQueuePending) {\n const confirmationWindowMs = Math.max(\n 1,\n record.expiresAtUnixMs - record.requestedAtUnixMs\n );\n return {\n commands: [\n {\n dueAtUnixMs:\n Math.max(\n record.expiresAtUnixMs,\n options.dueAtUnixMs ?? record.expiresAtUnixMs\n ) + confirmationWindowMs,\n expiryId,\n type: \"engine/scheduleExpiry\"\n }\n ],\n state\n };\n }\n if (record.status === \"accepted\" || record.status === \"confirmed\") {\n return {\n commands: NO_COMMANDS,\n state: deleteSubmit(state, clientSubmitId)\n };\n }\n return {\n commands: NO_COMMANDS,\n state: replaceSubmit(state, {\n ...record,\n errorMessage: record.errorMessage,\n status: \"failed\"\n })\n };\n}\n\nexport function removeSubmit(\n state: PendingIntentsState,\n clientSubmitId: string\n): EngineReducerResult<PendingIntentsState> {\n const id = clientSubmitId.trim();\n if (!state.submitsByClientSubmitId[id]) {\n return unchanged(state);\n }\n return {\n commands: [{ expiryId: submitExpiryId(id), type: \"engine/cancelExpiry\" }],\n state: deleteSubmit(state, id)\n };\n}\n\nfunction messageClientSubmitId(message: AgentActivityMessage): string | null {\n const value = message.payload?.clientSubmitId;\n return typeof value === \"string\" && value.trim() ? value.trim() : null;\n}\n\nfunction activitySessionVersion(\n session: import(\"../types.ts\").AgentActivitySession\n): number | null {\n return (\n session.updatedAtUnixMs ??\n session.lastEventUnixMs ??\n session.messageVersion ??\n session.createdAtUnixMs ??\n session.startedAtUnixMs ??\n null\n );\n}\n\nexport function submitExpiryId(clientSubmitId: string): string {\n return `submit:${clientSubmitId}`;\n}\n\nfunction replaceSubmit(\n state: PendingIntentsState,\n record: PendingSubmitIntentRecord\n): PendingIntentsState {\n return {\n ...state,\n submitsByClientSubmitId: {\n ...state.submitsByClientSubmitId,\n [record.clientSubmitId]: record\n }\n };\n}\n\nexport function deleteSubmit(\n state: PendingIntentsState,\n clientSubmitId: string\n): PendingIntentsState {\n const submits = { ...state.submitsByClientSubmitId };\n delete submits[clientSubmitId];\n return { ...state, submitsByClientSubmitId: submits };\n}\n\nfunction unchanged(\n state: PendingIntentsState\n): EngineReducerResult<PendingIntentsState> {\n return { commands: NO_COMMANDS, state };\n}\n","import type { AgentActivitySessionInput } from \"../sessionNormalization.ts\";\nimport { normalizeAgentActivityCapabilityReferences } from \"../capabilityReferences.ts\";\nimport type { SendInputResultValidation } from \"./commandResult.validation.ts\";\nimport type { ScopedSessionResultValidation } from \"./commandResult.validation.ts\";\nimport {\n isPendingActivationViable,\n type PendingActivationIntentRecord,\n type PendingIntentsState,\n type SessionActivationRequestedIntent\n} from \"./pendingIntents.types.ts\";\nimport {\n pendingActivationGoalControlFields,\n pendingActivationRailSectionKeyFields\n} from \"./pendingIntents.activationExtras.ts\";\nimport {\n markSessionActive,\n markSessionInactive,\n removeInactiveSession,\n unchanged\n} from \"./pendingIntents.inactiveSessions.ts\";\nimport {\n confirmFromMessages,\n confirmFromSessions,\n deleteSubmit,\n expireSubmit,\n removeSubmit,\n requestSubmit,\n settleSubmitCommand,\n submitExpiryId\n} from \"./pendingSubmit.reducer.ts\";\nimport type {\n EngineCommand,\n EngineCommandResultIntent,\n EngineIntent,\n EngineReducerResult\n} from \"./types.ts\";\n\nconst NO_COMMANDS: readonly EngineCommand[] = [];\nconst EXISTING_SESSION_ACTIVATION_COMMAND_TIMEOUT_MS = 30_000;\n// A new activation includes process spawn and ACP initialize before session/new.\n// Keep the outer command alive long enough for session/new to receive its own\n// full 30-second protocol timeout instead of inheriting a partially spent UI\n// deadline.\nconst NEW_SESSION_ACTIVATION_COMMAND_TIMEOUT_MS = 90_000;\n\nexport function createInitialPendingIntentsState(): PendingIntentsState {\n return {\n activationsByRequestId: {},\n inactiveSessionIds: {},\n submitsByClientSubmitId: {}\n };\n}\n\nexport function pendingIntentsReducer(\n state: PendingIntentsState,\n intent: EngineIntent,\n context: {\n deletedSessionIds: Readonly<Record<string, true>>;\n turnsById: Readonly<\n Record<string, import(\"../types.ts\").AgentActivityTurn>\n >;\n submitCancellationAccepted?: boolean;\n sendResultValidation?: SendInputResultValidation | null;\n settingsResultValidation?: ScopedSessionResultValidation | null;\n planFeedbackAccepted?: boolean;\n submitRequestAccepted?: boolean;\n submitDeliveryIsQueuePending?: boolean;\n } = {\n deletedSessionIds: {},\n turnsById: {}\n }\n): EngineReducerResult<PendingIntentsState> {\n switch (intent.type) {\n case \"activation/requested\":\n if (context.deletedSessionIds[intent.agentSessionId.trim()]) {\n return unchanged(state);\n }\n return requestActivation(state, intent);\n case \"activation/dismissed\":\n return removeActivation(state, intent.requestId);\n case \"activation/settingsPatched\":\n return patchActivationSettings(state, intent);\n case \"activation/failureRecorded\":\n return recordActivationFailure(state, intent);\n case \"activation/failureCleared\":\n return clearActivationFailure(state, intent.agentSessionId);\n case \"activation/unactivateRequested\":\n return requestUnactivation(state, intent);\n case \"session/stopRequested\":\n return stopPendingActivation(state, intent);\n case \"submit/requested\":\n if (context.submitRequestAccepted === false) return unchanged(state);\n if (context.deletedSessionIds[intent.agentSessionId.trim()]) {\n return unchanged(state);\n }\n return requestSubmit(state, intent);\n case \"plan/feedbackRequested\":\n return context.planFeedbackAccepted === true\n ? requestSubmit(state, {\n ...intent,\n type: \"submit/requested\"\n })\n : unchanged(state);\n case \"submit/dismissed\":\n return removeSubmit(state, intent.clientSubmitId);\n case \"submit/canceled\":\n return context.submitCancellationAccepted === true\n ? removeSubmit(state, intent.clientSubmitId)\n : unchanged(state);\n case \"message/snapshotReceived\":\n return confirmFromMessages(state, intent.messages);\n case \"session/snapshotReceived\":\n return receiveSessionSnapshot(state, intent.sessions, context.turnsById);\n case \"session/upserted\":\n return confirmActivationsFromSessions(state, [intent.session]);\n case \"turn/upserted\":\n return confirmFromSessions(state, context.turnsById);\n case \"engine/commandResult\":\n if (intent.commandType === \"queue/sendPrompt\") {\n const settled = settleSubmitCommand(\n state,\n intent,\n context.sendResultValidation ?? null\n );\n if (intent.outcome !== \"succeeded\") return settled;\n const confirmed = confirmFromSessions(settled.state, context.turnsById);\n return {\n commands: [...settled.commands, ...confirmed.commands],\n state: confirmed.state\n };\n }\n return intent.commandType === \"session/activate\"\n ? settleActivationCommand(state, intent)\n : intent.commandType === \"session/updateSettings\"\n ? settleActivationSettingsCommand(\n state,\n intent,\n context.settingsResultValidation ?? null\n )\n : unchanged(state);\n case \"engine/intentExpired\":\n return intent.expiryId.startsWith(\"activation:\")\n ? expireActivation(state, intent.expiryId)\n : expireSubmit(state, intent.expiryId, {\n deliveryIsQueuePending:\n context.submitDeliveryIsQueuePending === true,\n dueAtUnixMs: intent.dueAtUnixMs\n });\n case \"session/removed\":\n return removeSessionIntents(state, intent.agentSessionId);\n default:\n return unchanged(state);\n }\n}\n\nfunction patchActivationSettings(\n state: PendingIntentsState,\n intent: Extract<EngineIntent, { type: \"activation/settingsPatched\" }>\n): EngineReducerResult<PendingIntentsState> {\n const agentSessionId = intent.agentSessionId.trim();\n const record = Object.values(state.activationsByRequestId)\n .filter(\n (candidate) =>\n candidate.agentSessionId === agentSessionId &&\n candidate.mode === \"new\" &&\n isPendingActivationViable(candidate)\n )\n .sort((left, right) => right.requestedAtUnixMs - left.requestedAtUnixMs)[0];\n if (!record) return unchanged(state);\n const patchedRecord: PendingActivationIntentRecord = {\n ...record,\n pendingSettingsPatch: {\n ...(record.pendingSettingsPatch ?? {}),\n ...intent.settings\n },\n settings: { ...(record.settings ?? {}), ...intent.settings },\n settingsUpdateStatus: undefined\n };\n if (record.status === \"confirmed\") {\n const attached = attachPendingActivationSettings(patchedRecord);\n return {\n commands: attached.commands,\n state: replaceActivation(state, attached.record)\n };\n }\n return {\n commands: NO_COMMANDS,\n state: replaceActivation(state, patchedRecord)\n };\n}\n\nfunction requestActivation(\n state: PendingIntentsState,\n intent: SessionActivationRequestedIntent\n): EngineReducerResult<PendingIntentsState> {\n const requestId = intent.requestId.trim();\n const agentSessionId = intent.agentSessionId.trim();\n const workspaceId = intent.workspaceId.trim();\n const agentTargetId = intent.agentTargetId?.trim() || null;\n const clientSubmitId =\n intent.mode === \"new\" ? intent.clientSubmitId.trim() : null;\n if (\n !requestId ||\n !agentSessionId ||\n !workspaceId ||\n state.activationsByRequestId[requestId] ||\n (intent.mode === \"new\" && (!agentTargetId || !clientSubmitId))\n ) {\n return unchanged(state);\n }\n const content = (intent.content ?? []).map((block) => ({ ...block }));\n const displayPrompt = intent.initialDisplayPrompt?.trim() || undefined;\n const optimisticTitle =\n intent.mode === \"new\"\n ? intent.optimisticTitle?.trim() || undefined\n : undefined;\n const runtimeContent = (intent.runtimeContent ?? content).map((block) => ({\n ...block\n }));\n const capabilityRefs = normalizeAgentActivityCapabilityReferences(\n intent.capabilityRefs\n );\n const supersededRequestIds = Object.values(state.activationsByRequestId)\n .filter(\n (record) =>\n record.agentSessionId === agentSessionId && record.status !== \"failed\"\n )\n .map((record) => record.requestId);\n const baseState = supersededRequestIds.reduce(deleteActivation, state);\n const recordBase = {\n agentSessionId,\n ...(capabilityRefs.length > 0 ? { capabilityRefs } : {}),\n content,\n cwd: intent.cwd?.trim() ?? \"\",\n ...(displayPrompt ? { displayPrompt } : {}),\n errorCode: null,\n errorMessage: null,\n expiresAtUnixMs: intent.expiresAtUnixMs,\n initialTurnExpected:\n intent.initialTurnExpected ?? runtimeContent.length > 0,\n ...pendingActivationGoalControlFields(intent),\n ...pendingActivationRailSectionKeyFields(intent),\n ...(intent.railPlacement\n ? { railPlacement: { ...intent.railPlacement } }\n : {}),\n ...(intent.submitDiagnostics\n ? { submitDiagnostics: { ...intent.submitDiagnostics } }\n : {}),\n requestedAtUnixMs: intent.requestedAtUnixMs,\n requestId,\n ...(intent.settings ? { settings: { ...intent.settings } } : {}),\n status: \"requested\" as const,\n title: intent.title?.trim() || null,\n workspaceId\n };\n const record: PendingActivationIntentRecord =\n intent.mode === \"new\"\n ? {\n ...recordBase,\n agentTargetId: agentTargetId!,\n clientSubmitId: clientSubmitId!,\n mode: \"new\",\n ...(intent.initialTuttiModeActivation\n ? {\n initialTuttiModeActivation: {\n ...intent.initialTuttiModeActivation\n }\n }\n : {}),\n ...(intent.tuttiModeDraftKey?.trim()\n ? { tuttiModeDraftKey: intent.tuttiModeDraftKey.trim() }\n : {}),\n ...(optimisticTitle ? { optimisticTitle } : {})\n }\n : {\n ...recordBase,\n agentTargetId,\n clientSubmitId: null,\n mode: \"existing\"\n };\n return {\n commands: [\n ...supersededRequestIds.map((id) => ({\n expiryId: activationExpiryId(id),\n type: \"engine/cancelExpiry\" as const\n })),\n {\n dueAtUnixMs: intent.expiresAtUnixMs,\n expiryId: activationExpiryId(requestId),\n type: \"engine/scheduleExpiry\"\n },\n intent.mode === \"new\"\n ? {\n agentSessionId,\n ...(capabilityRefs.length > 0 ? { capabilityRefs } : {}),\n agentTargetId: agentTargetId!,\n commandId: `activate:${requestId}`,\n clientSubmitId: clientSubmitId!,\n correlationId: requestId,\n ...(intent.cwd !== undefined ? { cwd: intent.cwd } : {}),\n ...(runtimeContent.length > 0\n ? { initialContent: runtimeContent }\n : {}),\n ...(displayPrompt ? { initialDisplayPrompt: displayPrompt } : {}),\n ...pendingActivationGoalControlFields(intent),\n ...(intent.railPlacement\n ? { railPlacement: { ...intent.railPlacement } }\n : {}),\n ...(intent.submitDiagnostics\n ? { submitDiagnostics: { ...intent.submitDiagnostics } }\n : {}),\n mode: \"new\" as const,\n ...(intent.initialTuttiModeActivation\n ? {\n initialTuttiModeActivation: {\n ...intent.initialTuttiModeActivation\n }\n }\n : {}),\n ...(intent.settings ? { settings: { ...intent.settings } } : {}),\n timeoutMs: NEW_SESSION_ACTIVATION_COMMAND_TIMEOUT_MS,\n ...(intent.title?.trim() ? { title: intent.title.trim() } : {}),\n type: \"session/activate\",\n ...(intent.visible !== undefined\n ? { visible: intent.visible }\n : {}),\n workspaceId\n }\n : {\n agentSessionId,\n ...(capabilityRefs.length > 0 ? { capabilityRefs } : {}),\n ...(agentTargetId ? { agentTargetId } : {}),\n commandId: `activate:${requestId}`,\n correlationId: requestId,\n ...(intent.cwd !== undefined ? { cwd: intent.cwd } : {}),\n ...(runtimeContent.length > 0\n ? { initialContent: runtimeContent }\n : {}),\n ...(displayPrompt ? { initialDisplayPrompt: displayPrompt } : {}),\n ...(intent.submitDiagnostics\n ? { submitDiagnostics: { ...intent.submitDiagnostics } }\n : {}),\n mode: \"existing\" as const,\n ...(intent.settings ? { settings: { ...intent.settings } } : {}),\n timeoutMs: EXISTING_SESSION_ACTIVATION_COMMAND_TIMEOUT_MS,\n ...(intent.title?.trim() ? { title: intent.title.trim() } : {}),\n type: \"session/activate\" as const,\n ...(intent.visible !== undefined\n ? { visible: intent.visible }\n : {}),\n workspaceId\n }\n ],\n state: replaceActivation(\n markSessionActive(baseState, agentSessionId),\n record\n )\n };\n}\n\nfunction recordActivationFailure(\n state: PendingIntentsState,\n intent: Extract<EngineIntent, { type: \"activation/failureRecorded\" }>\n): EngineReducerResult<PendingIntentsState> {\n const agentSessionId = intent.agentSessionId.trim();\n const requestId = intent.requestId.trim();\n if (\n !agentSessionId ||\n !requestId ||\n state.activationsByRequestId[requestId]\n ) {\n return unchanged(state);\n }\n return {\n commands: NO_COMMANDS,\n state: replaceActivation(state, {\n agentSessionId,\n agentTargetId: null,\n clientSubmitId: null,\n content: [],\n cwd: \"\",\n errorCode: intent.errorCode?.trim() || null,\n errorMessage: intent.errorMessage.trim() || null,\n expiresAtUnixMs: Number.MAX_SAFE_INTEGER,\n initialTurnExpected: false,\n mode: \"existing\",\n requestedAtUnixMs: intent.occurredAtUnixMs,\n requestId,\n status: \"failed\",\n title: null,\n workspaceId: intent.workspaceId\n })\n };\n}\n\nfunction clearActivationFailure(\n state: PendingIntentsState,\n agentSessionId: string\n): EngineReducerResult<PendingIntentsState> {\n const ids = Object.values(state.activationsByRequestId)\n .filter(\n (record) =>\n record.agentSessionId === agentSessionId.trim() &&\n record.status === \"failed\"\n )\n .map((record) => record.requestId);\n if (ids.length === 0) {\n return unchanged(state);\n }\n return {\n commands: ids\n .filter(\n (id) =>\n state.activationsByRequestId[id]?.expiresAtUnixMs !==\n Number.MAX_SAFE_INTEGER\n )\n .map((id) => ({\n expiryId: activationExpiryId(id),\n type: \"engine/cancelExpiry\" as const\n })),\n state: ids.reduce(deleteActivation, state)\n };\n}\n\nfunction requestUnactivation(\n state: PendingIntentsState,\n intent: Extract<EngineIntent, { type: \"activation/unactivateRequested\" }>\n): EngineReducerResult<PendingIntentsState> {\n const agentSessionId = intent.agentSessionId.trim();\n if (!agentSessionId || !intent.workspaceId.trim()) {\n return unchanged(state);\n }\n const activationIds = Object.values(state.activationsByRequestId)\n .filter((record) => record.agentSessionId === agentSessionId)\n .map((record) => record.requestId);\n return {\n commands: [\n ...activationIds\n .filter(\n (id) =>\n state.activationsByRequestId[id]?.expiresAtUnixMs !==\n Number.MAX_SAFE_INTEGER\n )\n .map((id) => ({\n expiryId: activationExpiryId(id),\n type: \"engine/cancelExpiry\" as const\n })),\n {\n agentSessionId,\n commandId: intent.commandId,\n type: \"session/unactivate\" as const,\n workspaceId: intent.workspaceId\n }\n ],\n state: markSessionInactive(\n activationIds.reduce(deleteActivation, state),\n agentSessionId\n )\n };\n}\n\nfunction stopPendingActivation(\n state: PendingIntentsState,\n intent: Extract<EngineIntent, { type: \"session/stopRequested\" }>\n): EngineReducerResult<PendingIntentsState> {\n const agentSessionId = intent.agentSessionId.trim();\n const workspaceId = intent.workspaceId.trim();\n const activation = Object.values(state.activationsByRequestId)\n .filter(\n (record) =>\n record.agentSessionId === agentSessionId &&\n record.workspaceId === workspaceId &&\n (record.status === \"requested\" || record.status === \"uncertain\")\n )\n .sort((left, right) => right.requestedAtUnixMs - left.requestedAtUnixMs)[0];\n if (!activation) return unchanged(state);\n return {\n commands: [\n {\n type: \"engine/abortExternalCommand\",\n reason: \"agent session activation canceled by user\",\n targetCommandId: `activate:${activation.requestId}`\n }\n ],\n state: replaceActivation(state, {\n ...activation,\n errorCode: null,\n errorMessage: null,\n status: \"canceled\"\n })\n };\n}\n\nfunction settleActivationCommand(\n state: PendingIntentsState,\n intent: EngineCommandResultIntent\n): EngineReducerResult<PendingIntentsState> {\n const requestId = intent.correlationId?.trim() ?? \"\";\n const record = state.activationsByRequestId[requestId];\n if (!record) {\n return unchanged(state);\n }\n if (record.status === \"canceled\") return unchanged(state);\n if (\n intent.outcome === \"succeeded\" &&\n isActivationCommandResult(intent.value)\n ) {\n const result = intent.value;\n const failed = result.activation.status === \"failed\";\n return {\n commands: NO_COMMANDS,\n state: replaceActivation(\n markSessionActive(state, record.agentSessionId),\n {\n ...record,\n errorCode: failed ? result.error?.code?.trim() || null : null,\n errorMessage: failed ? result.error?.message?.trim() || null : null,\n status: failed ? \"failed\" : record.status\n }\n )\n };\n }\n if (intent.outcome === \"succeeded\") {\n return {\n commands: NO_COMMANDS,\n state: replaceActivation(state, {\n ...record,\n errorCode: \"invalid_command_result\",\n errorMessage: null,\n status: \"uncertain\"\n })\n };\n }\n return {\n commands: NO_COMMANDS,\n state: replaceActivation(state, {\n ...record,\n errorCode: intent.errorCode ?? null,\n errorMessage:\n intent.outcome === \"timedOut\"\n ? null\n : intent.errorMessage?.trim() || null,\n status: intent.outcome === \"timedOut\" ? \"uncertain\" : \"failed\"\n })\n };\n}\n\nfunction receiveSessionSnapshot(\n state: PendingIntentsState,\n sessions: readonly AgentActivitySessionInput[],\n turnsById: Readonly<Record<string, import(\"../types.ts\").AgentActivityTurn>>\n): EngineReducerResult<PendingIntentsState> {\n const activationResult = confirmActivationsFromSessions(state, sessions);\n const submitResult = confirmFromSessions(activationResult.state, turnsById);\n return {\n commands: [...activationResult.commands, ...submitResult.commands],\n state: submitResult.state\n };\n}\n\nfunction confirmActivationsFromSessions(\n state: PendingIntentsState,\n sessions: readonly AgentActivitySessionInput[]\n): EngineReducerResult<PendingIntentsState> {\n const sessionsById = new Map(\n sessions.map((session) => [session.agentSessionId, session])\n );\n const commands: EngineCommand[] = [];\n let next = state;\n for (const record of Object.values(state.activationsByRequestId)) {\n if (record.status !== \"requested\" && record.status !== \"uncertain\") {\n continue;\n }\n const session = sessionsById.get(record.agentSessionId);\n if (\n !session ||\n session.workspaceId.trim() !== record.workspaceId ||\n (record.mode === \"new\" &&\n (session.createdAtUnixMs === undefined ||\n session.createdAtUnixMs < record.requestedAtUnixMs))\n ) {\n continue;\n }\n const settingsUpdate = attachPendingActivationSettings(record);\n next = replaceActivation(markSessionActive(next, record.agentSessionId), {\n ...settingsUpdate.record,\n errorMessage: null,\n status: \"confirmed\"\n });\n commands.push(...settingsUpdate.commands);\n }\n return next === state ? unchanged(state) : { commands, state: next };\n}\n\nfunction attachPendingActivationSettings(\n record: PendingActivationIntentRecord\n): {\n commands: readonly EngineCommand[];\n record: PendingActivationIntentRecord;\n} {\n const settings = record.pendingSettingsPatch;\n if (\n !settings ||\n Object.keys(settings).length === 0 ||\n record.settingsUpdateStatus === \"inFlight\"\n ) {\n return { commands: NO_COMMANDS, record };\n }\n return {\n commands: [\n {\n agentSessionId: record.agentSessionId,\n commandId: `activation-settings:${record.requestId}`,\n correlationId: record.requestId,\n settings: { ...settings },\n type: \"session/updateSettings\",\n workspaceId: record.workspaceId\n }\n ],\n record: { ...record, settingsUpdateStatus: \"inFlight\" }\n };\n}\n\nfunction settleActivationSettingsCommand(\n state: PendingIntentsState,\n intent: EngineCommandResultIntent,\n validation: ScopedSessionResultValidation | null\n): EngineReducerResult<PendingIntentsState> {\n const requestId = intent.correlationId?.trim() ?? \"\";\n const record = state.activationsByRequestId[requestId];\n if (\n !record ||\n record.settingsUpdateStatus !== \"inFlight\" ||\n intent.commandId !== `activation-settings:${requestId}`\n ) {\n return unchanged(state);\n }\n if (intent.outcome === \"succeeded\" && validation?.kind === \"valid\") {\n const {\n pendingSettingsPatch: _patch,\n settingsUpdateStatus: _status,\n ...next\n } = record;\n return { commands: NO_COMMANDS, state: replaceActivation(state, next) };\n }\n return {\n commands: NO_COMMANDS,\n state: replaceActivation(state, {\n ...record,\n errorCode:\n intent.outcome === \"succeeded\"\n ? \"invalid_command_result\"\n : intent.errorCode?.trim() || \"settings_update_failed\",\n errorMessage: intent.errorMessage?.trim() || null,\n settingsUpdateStatus:\n intent.outcome === \"timedOut\" || intent.outcome === \"succeeded\"\n ? \"unknown\"\n : \"failed\"\n })\n };\n}\n\nfunction expireActivation(\n state: PendingIntentsState,\n expiryId: string\n): EngineReducerResult<PendingIntentsState> {\n const requestId = expiryId.slice(\"activation:\".length);\n const record = state.activationsByRequestId[requestId];\n if (!record) {\n return unchanged(state);\n }\n if (record.status === \"confirmed\") {\n return unchanged(state);\n }\n if (record.status === \"canceled\") {\n return { commands: NO_COMMANDS, state: deleteActivation(state, requestId) };\n }\n return {\n commands: NO_COMMANDS,\n state: replaceActivation(state, {\n ...record,\n errorCode: record.errorCode ?? \"activation_confirmation_expired\",\n errorMessage: record.errorMessage,\n status: \"failed\"\n })\n };\n}\n\nfunction removeActivation(\n state: PendingIntentsState,\n requestId: string\n): EngineReducerResult<PendingIntentsState> {\n const id = requestId.trim();\n if (!state.activationsByRequestId[id]) {\n return unchanged(state);\n }\n return {\n commands: [\n { expiryId: activationExpiryId(id), type: \"engine/cancelExpiry\" }\n ],\n state: deleteActivation(state, id)\n };\n}\n\nfunction removeSessionIntents(\n state: PendingIntentsState,\n agentSessionId: string\n): EngineReducerResult<PendingIntentsState> {\n const submitIds = Object.values(state.submitsByClientSubmitId)\n .filter((record) => record.agentSessionId === agentSessionId.trim())\n .map((record) => record.clientSubmitId);\n const activationIds = Object.values(state.activationsByRequestId)\n .filter((record) => record.agentSessionId === agentSessionId.trim())\n .map((record) => record.requestId);\n const wasInactive = state.inactiveSessionIds[agentSessionId.trim()] === true;\n if (submitIds.length === 0 && activationIds.length === 0 && !wasInactive) {\n return unchanged(state);\n }\n return {\n commands: [\n ...submitIds.map((id) => ({\n expiryId: submitExpiryId(id),\n type: \"engine/cancelExpiry\" as const\n })),\n ...activationIds.map((id) => ({\n expiryId: activationExpiryId(id),\n type: \"engine/cancelExpiry\" as const\n }))\n ],\n state: removeInactiveSession(\n activationIds.reduce(\n deleteActivation,\n submitIds.reduce(deleteSubmit, state)\n ),\n agentSessionId\n )\n };\n}\n\nfunction isActivationCommandResult(value: unknown): value is {\n activation: { status: string };\n error?: { code?: string; message?: string } | null;\n} {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n const result = value as {\n activation?: { status?: unknown };\n error?: { code?: string; message?: string } | null;\n };\n return Boolean(\n result.activation && typeof result.activation.status === \"string\"\n );\n}\n\nfunction activationExpiryId(requestId: string): string {\n return `activation:${requestId}`;\n}\n\nfunction replaceActivation(\n state: PendingIntentsState,\n record: PendingActivationIntentRecord\n): PendingIntentsState {\n return {\n ...state,\n activationsByRequestId: {\n ...state.activationsByRequestId,\n [record.requestId]: record\n }\n };\n}\n\nfunction deleteActivation(\n state: PendingIntentsState,\n requestId: string\n): PendingIntentsState {\n const activations = { ...state.activationsByRequestId };\n delete activations[requestId];\n return { ...state, activationsByRequestId: activations };\n}\n","import type { ScopedSessionResultValidation } from \"./commandResult.validation.ts\";\nimport type {\n SessionLifecycleState,\n SessionOperationState,\n SessionSettingsUpdateState\n} from \"./sessionLifecycle.types.ts\";\nimport type {\n EngineCommand,\n EngineIntent,\n EngineReducerResult\n} from \"./types.ts\";\n\nconst NO_COMMANDS: readonly EngineCommand[] = [];\n\nexport function createInitialSettingsUpdate(): SessionSettingsUpdateState {\n return {\n commandId: null,\n errorCode: null,\n errorMessage: null,\n queuedCommandId: null,\n queuedSettings: null,\n settings: null,\n status: \"idle\"\n };\n}\n\nexport function requestSettingsUpdate(\n state: SessionLifecycleState,\n intent: Extract<EngineIntent, { type: \"session/settingsUpdateRequested\" }>\n): EngineReducerResult<SessionLifecycleState> {\n const id = intent.agentSessionId.trim();\n const commandId = intent.commandId.trim();\n const workspaceId = intent.workspaceId.trim();\n const operation = state.operationBySessionId[id];\n if (\n !id ||\n !commandId ||\n !workspaceId ||\n !operation ||\n operation.runtimeAvailability.state === \"blocked\" ||\n state.sessionsById[id]?.workspaceId !== workspaceId ||\n Object.keys(intent.settings).length === 0\n )\n return unchanged(state);\n if (operation.settingsUpdate.status === \"inFlight\") {\n return result(\n setOperation(state, id, {\n ...operation,\n settingsUpdate: {\n ...operation.settingsUpdate,\n queuedCommandId: commandId,\n queuedSettings: {\n ...(operation.settingsUpdate.queuedSettings ?? {}),\n ...intent.settings\n }\n }\n })\n );\n }\n if (operation.settingsUpdate.status === \"unknown\" && intent.retry !== true)\n return unchanged(state);\n const settings =\n operation.settingsUpdate.status === \"unknown\"\n ? {\n ...(operation.settingsUpdate.settings ?? {}),\n ...(operation.settingsUpdate.queuedSettings ?? {}),\n ...intent.settings\n }\n : { ...intent.settings };\n return {\n commands: [\n settingsCommand(id, workspaceId, commandId, settings, intent.timeoutMs)\n ],\n state: setOperation(state, id, {\n ...operation,\n settingsUpdate: {\n ...createInitialSettingsUpdate(),\n commandId,\n settings,\n status: \"inFlight\"\n }\n })\n };\n}\n\nexport function settleSettingsUpdate(\n state: SessionLifecycleState,\n intent: Extract<EngineIntent, { type: \"engine/commandResult\" }>,\n validation: ScopedSessionResultValidation | null\n): EngineReducerResult<SessionLifecycleState> {\n const entry = Object.entries(state.operationBySessionId).find(\n ([id, operation]) =>\n operation.settingsUpdate.commandId === intent.commandId &&\n id === (intent.correlationId?.trim() ?? \"\")\n );\n if (!entry) return unchanged(state);\n const [id, operation] = entry;\n const update = operation.settingsUpdate;\n if (\n intent.outcome === \"succeeded\" &&\n validation?.kind === \"valid\" &&\n update.queuedSettings &&\n update.queuedCommandId\n ) {\n const settings = update.queuedSettings;\n const commandId = update.queuedCommandId;\n if (operation.runtimeAvailability.state === \"blocked\") {\n return result(\n setOperation(state, id, {\n ...operation,\n settingsUpdate: {\n ...createInitialSettingsUpdate(),\n queuedCommandId: commandId,\n queuedSettings: settings,\n status: \"waitingForRuntime\"\n }\n })\n );\n }\n return {\n commands: [\n settingsCommand(\n id,\n state.sessionsById[id]?.workspaceId ?? \"\",\n commandId,\n settings\n )\n ],\n state: setOperation(state, id, {\n ...operation,\n settingsUpdate: {\n ...createInitialSettingsUpdate(),\n commandId,\n settings,\n status: \"inFlight\"\n }\n })\n };\n }\n const status =\n intent.outcome === \"succeeded\" && validation?.kind === \"valid\"\n ? \"idle\"\n : intent.outcome === \"timedOut\" || intent.outcome === \"succeeded\"\n ? \"unknown\"\n : \"failed\";\n return result(\n setOperation(state, id, {\n ...operation,\n settingsUpdate: {\n ...update,\n errorCode:\n intent.outcome === \"succeeded\" && validation?.kind === \"invalid\"\n ? \"invalid_command_result\"\n : (intent.errorCode ?? null),\n errorMessage: intent.errorMessage?.trim() || null,\n status\n }\n })\n );\n}\n\nexport function reconcileSettingsUpdates(\n previous: SessionLifecycleState,\n next: SessionLifecycleState\n): EngineReducerResult<SessionLifecycleState> {\n const commands: EngineCommand[] = [];\n let state = next;\n for (const [id, operation] of Object.entries(next.operationBySessionId)) {\n const session = next.sessionsById[id];\n if (\n operation.settingsUpdate.status !== \"unknown\" ||\n !session ||\n !settingsMatch(session.settings, operation.settingsUpdate.settings)\n )\n continue;\n const queuedSettings = operation.settingsUpdate.queuedSettings;\n const queuedCommandId = operation.settingsUpdate.queuedCommandId;\n if (queuedSettings && queuedCommandId) {\n if (operation.runtimeAvailability.state === \"blocked\") {\n state = setOperation(state, id, {\n ...operation,\n settingsUpdate: {\n ...createInitialSettingsUpdate(),\n queuedCommandId,\n queuedSettings,\n status: \"waitingForRuntime\"\n }\n });\n continue;\n }\n commands.push(\n settingsCommand(\n id,\n session.workspaceId,\n queuedCommandId,\n queuedSettings\n )\n );\n state = setOperation(state, id, {\n ...operation,\n settingsUpdate: {\n ...createInitialSettingsUpdate(),\n commandId: queuedCommandId,\n settings: queuedSettings,\n status: \"inFlight\"\n }\n });\n } else {\n state = setOperation(state, id, {\n ...operation,\n settingsUpdate: createInitialSettingsUpdate()\n });\n }\n }\n return state === previous && commands.length === 0\n ? unchanged(previous)\n : { commands, state };\n}\n\nexport function resumeSettingsUpdateWhenRuntimeAvailable(\n state: SessionLifecycleState,\n rawAgentSessionId: string\n): EngineReducerResult<SessionLifecycleState> {\n const id = rawAgentSessionId.trim();\n const operation = state.operationBySessionId[id];\n const update = operation?.settingsUpdate;\n if (\n !operation ||\n operation.runtimeAvailability.state !== \"available\" ||\n update?.status !== \"waitingForRuntime\" ||\n !update.queuedCommandId ||\n !update.queuedSettings\n ) {\n return unchanged(state);\n }\n return {\n commands: [\n settingsCommand(\n id,\n state.sessionsById[id]?.workspaceId ?? \"\",\n update.queuedCommandId,\n update.queuedSettings\n )\n ],\n state: setOperation(state, id, {\n ...operation,\n settingsUpdate: {\n ...createInitialSettingsUpdate(),\n commandId: update.queuedCommandId,\n settings: update.queuedSettings,\n status: \"inFlight\"\n }\n })\n };\n}\n\nfunction settingsCommand(\n agentSessionId: string,\n workspaceId: string,\n commandId: string,\n settings: Readonly<Record<string, unknown>>,\n timeoutMs?: number\n): EngineCommand {\n return {\n agentSessionId,\n commandId,\n correlationId: agentSessionId,\n settings,\n ...(timeoutMs !== undefined ? { timeoutMs } : {}),\n type: \"session/updateSettings\",\n workspaceId\n };\n}\nfunction settingsMatch(\n canonical: Readonly<Record<string, unknown>> | null | undefined,\n patch: Readonly<Record<string, unknown>> | null\n): boolean {\n return Boolean(\n canonical &&\n patch &&\n Object.entries(patch).every(([key, value]) => canonical[key] === value)\n );\n}\nfunction setOperation(\n state: SessionLifecycleState,\n id: string,\n operation: SessionOperationState\n): SessionLifecycleState {\n return {\n ...state,\n operationBySessionId: { ...state.operationBySessionId, [id]: operation }\n };\n}\nfunction result(\n state: SessionLifecycleState\n): EngineReducerResult<SessionLifecycleState> {\n return { commands: NO_COMMANDS, state };\n}\nfunction unchanged(\n state: SessionLifecycleState\n): EngineReducerResult<SessionLifecycleState> {\n return { commands: NO_COMMANDS, state };\n}\n","import type { AgentActivityInteraction } from \"./types.ts\";\n\nexport function isSameInteractionIdentity(\n left: AgentActivityInteraction,\n right: AgentActivityInteraction\n): boolean {\n return (\n left.agentSessionId === right.agentSessionId &&\n left.turnId === right.turnId &&\n left.requestId === right.requestId\n );\n}\n\nexport function shouldUseIncomingInteraction(\n current: AgentActivityInteraction | undefined,\n incoming: AgentActivityInteraction\n): boolean {\n if (!current) return true;\n if (incoming.updatedAtUnixMs < current.updatedAtUnixMs) return false;\n const currentTerminal = current.status !== \"pending\";\n const incomingTerminal = incoming.status !== \"pending\";\n if (currentTerminal && incoming.status !== current.status) return false;\n if (\n incoming.updatedAtUnixMs === current.updatedAtUnixMs &&\n currentTerminal !== incomingTerminal\n ) {\n return incomingTerminal;\n }\n return true;\n}\n","import type { AgentActivityInteraction, AgentActivityTurn } from \"../types.ts\";\nimport { shouldUseIncomingInteraction } from \"../interactionMonotonicity.ts\";\nimport { areJsonLikeValuesEqual } from \"../merge.ts\";\nimport { normalizeAgentActivitySession } from \"../sessionNormalization.ts\";\nimport type { AgentActivitySessionInput } from \"../sessionNormalization.ts\";\nimport type {\n CanonicalAgentSession,\n SessionLifecycleState,\n SessionOperationState\n} from \"./sessionLifecycle.types.ts\";\nimport {\n canonicalInteractionKey,\n canonicalTurnKey\n} from \"./sessionEntityKeys.ts\";\n\nexport function replaceCanonicalSessionSnapshot(\n state: SessionLifecycleState,\n incoming: readonly AgentActivitySessionInput[],\n createOperation: () => SessionOperationState\n): SessionLifecycleState {\n const sessionsById: Record<string, CanonicalAgentSession> = {};\n const turnsById: Record<string, AgentActivityTurn> = {};\n const interactionsById: Record<string, AgentActivityInteraction> = {};\n const operationBySessionId: Record<string, SessionOperationState> = {};\n const incomingSessionIds = new Set<string>();\n const authoritativePendingVersionBySessionId: Record<string, number> = {};\n for (const source of incoming) {\n const id = source.agentSessionId.trim();\n if (!id || state.deletedSessionIds[id]) continue;\n incomingSessionIds.add(id);\n const current = state.sessionsById[id];\n const incomingSession = canonicalSession(source);\n const useIncoming = shouldUseIncomingSession(current, incomingSession);\n const candidateSession = useIncoming\n ? preserveLiveTurnOnTimestampTie(current, incomingSession)\n : current!;\n sessionsById[id] =\n current && areJsonLikeValuesEqual(current, candidateSession)\n ? current\n : candidateSession;\n operationBySessionId[id] =\n state.operationBySessionId[id] ?? createOperation();\n if (useIncoming) {\n authoritativePendingVersionBySessionId[id] =\n sessionVersion(incomingSession);\n }\n if (useIncoming && source.activeTurn?.agentSessionId === id) {\n mergeTurnInto(turnsById, state.turnsById, source.activeTurn);\n }\n if (useIncoming && source.latestTurn?.agentSessionId === id) {\n mergeTurnInto(turnsById, state.turnsById, source.latestTurn);\n }\n for (const interaction of [\n ...source.latestTurnInteractions,\n ...source.pendingInteractions\n ]) {\n if (interaction.agentSessionId === id) {\n mergeInteractionInto(\n interactionsById,\n state.interactionsById,\n interaction\n );\n }\n }\n }\n // Session removal is an explicit protocol-v2 event. A list response can be\n // stale or paginated, so omission must not erase a newer locally observed\n // session (for example one created while the list request was in flight).\n for (const [id, session] of Object.entries(state.sessionsById)) {\n if (!sessionsById[id] && !state.deletedSessionIds[id]) {\n sessionsById[id] = session;\n operationBySessionId[id] =\n state.operationBySessionId[id] ?? createOperation();\n }\n }\n for (const [id, operation] of Object.entries(state.operationBySessionId)) {\n if (\n !operationBySessionId[id] &&\n operation.cancel.status === \"awaitingTurn\"\n ) {\n operationBySessionId[id] = operation;\n }\n }\n for (const turn of Object.values(state.turnsById)) {\n const key = canonicalTurnKey(turn.agentSessionId, turn.turnId);\n if (sessionsById[turn.agentSessionId] && !turnsById[key]) {\n turnsById[key] = turn;\n }\n }\n for (const interaction of Object.values(state.interactionsById)) {\n if (!sessionsById[interaction.agentSessionId]) continue;\n const key = canonicalInteractionKey(\n interaction.agentSessionId,\n interaction.turnId,\n interaction.requestId\n );\n const projected = interactionsById[key];\n const authoritativePendingVersion =\n authoritativePendingVersionBySessionId[interaction.agentSessionId];\n const authoritativelyOmitted =\n !projected &&\n incomingSessionIds.has(interaction.agentSessionId) &&\n interaction.status === \"pending\" &&\n authoritativePendingVersion !== undefined &&\n authoritativePendingVersion >= interaction.updatedAtUnixMs;\n if (\n !authoritativelyOmitted &&\n (!projected || shouldUseIncomingInteraction(projected, interaction))\n ) {\n interactionsById[key] = interaction;\n }\n }\n const nextInteractionsById = reuseRecordIfShallowEqual(\n state.interactionsById,\n interactionsById\n );\n const nextOperationBySessionId = reuseRecordIfShallowEqual(\n state.operationBySessionId,\n operationBySessionId\n );\n const nextSessionsById = reuseRecordIfShallowEqual(\n state.sessionsById,\n sessionsById\n );\n const nextTurnsById = reuseRecordIfShallowEqual(state.turnsById, turnsById);\n if (\n nextInteractionsById === state.interactionsById &&\n nextOperationBySessionId === state.operationBySessionId &&\n nextSessionsById === state.sessionsById &&\n nextTurnsById === state.turnsById\n ) {\n return state;\n }\n return {\n ...state,\n interactionsById: nextInteractionsById,\n operationBySessionId: nextOperationBySessionId,\n sessionsById: nextSessionsById,\n turnsById: nextTurnsById\n };\n}\n\nexport function upsertCanonicalSession(\n state: SessionLifecycleState,\n source: AgentActivitySessionInput,\n createOperation: () => SessionOperationState\n): SessionLifecycleState {\n const id = source.agentSessionId.trim();\n if (!id || state.deletedSessionIds[id]) return state;\n const current = state.sessionsById[id];\n const incoming = canonicalSession(source);\n const useIncoming = shouldUseIncomingSession(current, incoming);\n const candidateSession = useIncoming\n ? preserveLiveTurnOnTimestampTie(current, incoming)\n : current!;\n const nextSession =\n current && areJsonLikeValuesEqual(current, candidateSession)\n ? current\n : candidateSession;\n const operationBySessionId = state.operationBySessionId[id]\n ? state.operationBySessionId\n : { ...state.operationBySessionId, [id]: createOperation() };\n let next: SessionLifecycleState =\n operationBySessionId === state.operationBySessionId &&\n nextSession === current\n ? state\n : {\n ...state,\n operationBySessionId,\n sessionsById:\n nextSession === current\n ? state.sessionsById\n : { ...state.sessionsById, [id]: nextSession }\n };\n if (useIncoming && source.activeTurn?.agentSessionId === id) {\n next = upsertCanonicalTurn(next, source.activeTurn);\n }\n if (useIncoming && source.latestTurn?.agentSessionId === id) {\n next = upsertCanonicalTurn(next, source.latestTurn);\n }\n for (const interaction of source.latestTurnInteractions) {\n next = upsertCanonicalInteraction(next, interaction);\n }\n if (useIncoming) {\n next = removeMissingPendingInteractions(\n next,\n id,\n source.pendingInteractions,\n sessionVersion(incoming)\n );\n }\n for (const interaction of source.pendingInteractions) {\n next = upsertCanonicalInteraction(next, interaction);\n }\n return next;\n}\n\nfunction removeMissingPendingInteractions(\n state: SessionLifecycleState,\n agentSessionId: string,\n incoming: readonly AgentActivityInteraction[],\n authoritativeVersion: number\n): SessionLifecycleState {\n const incomingKeys = new Set(\n incoming.map((item) =>\n canonicalInteractionKey(item.agentSessionId, item.turnId, item.requestId)\n )\n );\n const interactionsById = { ...state.interactionsById };\n let changed = false;\n for (const [key, interaction] of Object.entries(state.interactionsById)) {\n if (\n interaction.agentSessionId === agentSessionId &&\n interaction.status === \"pending\" &&\n !incomingKeys.has(\n canonicalInteractionKey(\n interaction.agentSessionId,\n interaction.turnId,\n interaction.requestId\n )\n ) &&\n authoritativeVersion >= interaction.updatedAtUnixMs\n ) {\n delete interactionsById[key];\n changed = true;\n }\n }\n return changed ? { ...state, interactionsById } : state;\n}\n\nexport function upsertCanonicalTurn(\n state: SessionLifecycleState,\n turn: AgentActivityTurn\n): SessionLifecycleState {\n if (\n !turn.agentSessionId.trim() ||\n !turn.turnId.trim() ||\n state.deletedSessionIds[turn.agentSessionId]\n )\n return state;\n const key = canonicalTurnKey(turn.agentSessionId, turn.turnId);\n const current = state.turnsById[key];\n if (current && !shouldUseIncomingTurn(current, turn)) return state;\n const nextTurn = current ? preserveTurnProvenance(current, turn) : turn;\n if (current && areJsonLikeValuesEqual(current, nextTurn)) return state;\n return {\n ...state,\n turnsById: { ...state.turnsById, [key]: { ...nextTurn } }\n };\n}\n\nexport function upsertCanonicalInteraction(\n state: SessionLifecycleState,\n interaction: AgentActivityInteraction\n): SessionLifecycleState {\n if (\n !interaction.agentSessionId.trim() ||\n !interaction.requestId.trim() ||\n !interaction.turnId.trim() ||\n state.deletedSessionIds[interaction.agentSessionId]\n ) {\n return state;\n }\n const key = canonicalInteractionKey(\n interaction.agentSessionId,\n interaction.turnId,\n interaction.requestId\n );\n const current = state.interactionsById[key];\n if (!shouldUseIncomingInteraction(current, interaction)) return state;\n if (current && areJsonLikeValuesEqual(current, interaction)) return state;\n return {\n ...state,\n interactionsById: {\n ...state.interactionsById,\n [key]: { ...interaction }\n }\n };\n}\n\nfunction mergeInteractionInto(\n target: Record<string, AgentActivityInteraction>,\n existing: Readonly<Record<string, AgentActivityInteraction>>,\n interaction: AgentActivityInteraction\n): void {\n const key = canonicalInteractionKey(\n interaction.agentSessionId,\n interaction.turnId,\n interaction.requestId\n );\n const current = target[key] ?? existing[key];\n if (shouldUseIncomingInteraction(current, interaction)) {\n target[key] =\n current && areJsonLikeValuesEqual(current, interaction)\n ? current\n : { ...interaction };\n }\n}\n\nfunction shouldUseIncomingTurn(\n current: AgentActivityTurn,\n incoming: AgentActivityTurn\n): boolean {\n if (incoming.updatedAtUnixMs < current.updatedAtUnixMs) return false;\n if (current.phase === \"settled\") {\n return incoming.phase === \"settled\" && incoming.outcome === current.outcome;\n }\n if (!allowedTurnTransition(current.phase, incoming.phase)) return false;\n return true;\n}\n\nfunction allowedTurnTransition(current: string, incoming: string): boolean {\n if (current === incoming) return true;\n switch (current) {\n case \"submitted\":\n return [\"running\", \"waiting\", \"settling\", \"settled\"].includes(incoming);\n case \"running\":\n return [\"waiting\", \"settling\", \"settled\"].includes(incoming);\n case \"waiting\":\n return [\"running\", \"settling\", \"settled\"].includes(incoming);\n case \"settling\":\n return incoming === \"settled\";\n case \"settled\":\n return false;\n default:\n return false;\n }\n}\n\nexport function removeCanonicalSession(\n state: SessionLifecycleState,\n agentSessionId: string\n): SessionLifecycleState {\n const sessionsById = { ...state.sessionsById };\n const operationBySessionId = { ...state.operationBySessionId };\n delete sessionsById[agentSessionId];\n delete operationBySessionId[agentSessionId];\n return {\n ...state,\n interactionsById: Object.fromEntries(\n Object.entries(state.interactionsById).filter(\n ([, value]) => value.agentSessionId !== agentSessionId\n )\n ),\n operationBySessionId,\n sessionsById,\n turnsById: Object.fromEntries(\n Object.entries(state.turnsById).filter(\n ([, value]) => value.agentSessionId !== agentSessionId\n )\n )\n };\n}\n\nfunction canonicalSession(\n source: AgentActivitySessionInput\n): CanonicalAgentSession {\n const normalized = normalizeAgentActivitySession(source);\n const {\n activeTurn: _activeTurn,\n latestTurn: _latestTurn,\n latestTurnInteractions: _latestTurnInteractions,\n pendingInteractions: _pendingInteractions,\n ...session\n } = normalized;\n return { ...session, activeTurnId: normalized.activeTurnId };\n}\n\nfunction mergeTurnInto(\n target: Record<string, AgentActivityTurn>,\n existing: Readonly<Record<string, AgentActivityTurn>>,\n turn: AgentActivityTurn\n): void {\n const key = canonicalTurnKey(turn.agentSessionId, turn.turnId);\n const current = target[key] ?? existing[key];\n if (!current || shouldUseIncomingTurn(current, turn)) {\n const candidate = current ? preserveTurnProvenance(current, turn) : turn;\n target[key] =\n current && areJsonLikeValuesEqual(current, candidate)\n ? current\n : { ...candidate };\n }\n}\n\nfunction reuseRecordIfShallowEqual<T>(\n current: Readonly<Record<string, T>>,\n next: Record<string, T>\n): Record<string, T> {\n const currentKeys = Object.keys(current);\n const nextKeys = Object.keys(next);\n if (\n currentKeys.length === nextKeys.length &&\n nextKeys.every((key) => current[key] === next[key])\n ) {\n return current as Record<string, T>;\n }\n return next;\n}\n\n/**\n * Turn provenance is assigned once. Realtime and HTTP snapshots may arrive in\n * either order, so lifecycle refreshes must not reclassify an observed Turn or\n * erase source fields omitted by a later payload. An absent optional source\n * field may be completed once, but an explicit null/value is immutable.\n */\nfunction preserveTurnProvenance(\n current: AgentActivityTurn,\n incoming: AgentActivityTurn\n): AgentActivityTurn {\n let sourceGoalOperationId = current.sourceGoalOperationId;\n let sourceGoalRevision = current.sourceGoalRevision;\n let sourceGoalRepairEpoch = current.sourceGoalRepairEpoch;\n // Historical provenance is intentionally opaque and must never be filled\n // from a later lifecycle payload.\n const canCompleteGoalSource =\n current.origin !== \"legacy_unknown\" &&\n (current.origin === \"goal_arm\" || current.origin === \"goal_continuation\") &&\n incoming.origin === current.origin;\n if (canCompleteGoalSource) {\n if (sourceGoalOperationId === undefined) {\n sourceGoalOperationId = incoming.sourceGoalOperationId;\n }\n if (sourceGoalRevision === undefined) {\n sourceGoalRevision = incoming.sourceGoalRevision;\n }\n if (sourceGoalRepairEpoch === undefined) {\n sourceGoalRepairEpoch = incoming.sourceGoalRepairEpoch;\n }\n }\n const next = { ...incoming, origin: current.origin };\n if (sourceGoalOperationId === undefined) {\n delete next.sourceGoalOperationId;\n } else {\n next.sourceGoalOperationId = sourceGoalOperationId;\n }\n if (sourceGoalRevision === undefined) {\n delete next.sourceGoalRevision;\n } else {\n next.sourceGoalRevision = sourceGoalRevision;\n }\n if (sourceGoalRepairEpoch === undefined) {\n delete next.sourceGoalRepairEpoch;\n } else {\n next.sourceGoalRepairEpoch = sourceGoalRepairEpoch;\n }\n return next;\n}\n\nfunction shouldUseIncomingSession(\n current: CanonicalAgentSession | undefined,\n incoming: CanonicalAgentSession\n): boolean {\n return !current || sessionVersion(incoming) >= sessionVersion(current);\n}\n\nfunction preserveLiveTurnOnTimestampTie(\n current: CanonicalAgentSession | undefined,\n incoming: CanonicalAgentSession\n): CanonicalAgentSession {\n if (\n current?.activeTurnId &&\n current.activeTurnId !== incoming.activeTurnId &&\n sessionVersion(current) === sessionVersion(incoming)\n ) {\n return { ...incoming, activeTurnId: current.activeTurnId };\n }\n return incoming;\n}\n\nfunction sessionVersion(session: CanonicalAgentSession): number {\n return (\n session.updatedAtUnixMs ??\n session.lastEventUnixMs ??\n session.messageVersion ??\n session.createdAtUnixMs ??\n session.startedAtUnixMs ??\n 0\n );\n}\n","import type { AgentActivityInteraction, AgentActivityTurn } from \"../types.ts\";\nimport type { SendInputResultValidation } from \"./commandResult.validation.ts\";\nimport type { ScopedSessionResultValidation } from \"./commandResult.validation.ts\";\nimport type { CancelResultValidation } from \"./commandResult.validation.ts\";\nimport {\n createInitialSettingsUpdate,\n reconcileSettingsUpdates,\n requestSettingsUpdate,\n resumeSettingsUpdateWhenRuntimeAvailable,\n settleSettingsUpdate\n} from \"./sessionSettings.reducer.ts\";\nimport type {\n EngineCommand,\n EngineIntent,\n EngineReducerResult\n} from \"./types.ts\";\nimport {\n type SessionCancelState,\n type SessionLifecycleState,\n type SessionOperationState\n} from \"./sessionLifecycle.types.ts\";\nimport {\n removeCanonicalSession,\n replaceCanonicalSessionSnapshot,\n upsertCanonicalInteraction,\n upsertCanonicalSession,\n upsertCanonicalTurn\n} from \"./sessionEntities.reducer.ts\";\nimport {\n canonicalInteractionKey,\n canonicalTurnKey\n} from \"./sessionEntityKeys.ts\";\n\nconst NO_COMMANDS: readonly EngineCommand[] = [];\nconst TURN_CANCEL_TIMEOUT_MS = 30_000;\n\nexport function createInitialSessionLifecycleState(): SessionLifecycleState {\n return {\n deletedSessionIds: {},\n interactionsById: {},\n interactionResponsesById: {},\n operationBySessionId: {},\n sessionsById: {},\n turnsById: {}\n };\n}\n\nexport function sessionLifecycleReducer(\n state: SessionLifecycleState,\n intent: EngineIntent,\n context: {\n queueSendNowRequiresCancel: boolean;\n sendNowSubmitRequiresCancel?: boolean;\n sendResultValidation?: SendInputResultValidation | null;\n interactionResultValidation?: ScopedSessionResultValidation | null;\n settingsResultValidation?: ScopedSessionResultValidation | null;\n cancelResultValidation?: CancelResultValidation | null;\n } = {\n queueSendNowRequiresCancel: false,\n sendNowSubmitRequiresCancel: false\n }\n): EngineReducerResult<SessionLifecycleState> {\n switch (intent.type) {\n case \"session/snapshotReceived\":\n return reconcilePendingCancels(\n state,\n reconcileInteractionResponses(\n state,\n replaceCanonicalSessionSnapshot(\n state,\n intent.sessions,\n initialOperation\n )\n )\n );\n case \"session/upserted\":\n return reconcilePendingCancels(\n state,\n reconcileInteractionResponses(\n state,\n upsertCanonicalSession(state, intent.session, initialOperation)\n )\n );\n case \"session/metadataPatched\":\n return patchSessionMetadata(state, intent.agentSessionId, intent.patch);\n case \"session/runtimeAvailabilityChanged\":\n return changeRuntimeAvailability(\n state,\n intent.agentSessionId,\n intent.availability\n );\n case \"turn/upserted\":\n return reconcilePendingCancels(\n state,\n upsertCanonicalTurn(state, intent.turn)\n );\n case \"interaction/upserted\":\n return result(\n reconcileInteractionResponse(\n upsertCanonicalInteraction(state, intent.interaction),\n intent.interaction\n )\n );\n case \"interaction/responseRequested\":\n return requestInteractionResponse(state, intent);\n case \"session/removed\":\n return removeSession(state, intent.agentSessionId);\n case \"session/errorRecorded\":\n return updateOperation(state, intent.agentSessionId, (operation) => ({\n ...operation,\n operationError: intent.errorMessage.trim() || operation.operationError\n }));\n case \"session/errorCleared\":\n return updateOperation(state, intent.agentSessionId, (operation) => ({\n ...operation,\n operationError: null\n }));\n case \"session/cancelRequested\":\n return requestCancel(state, intent);\n case \"session/stopRequested\":\n return requestCancel(state, intent);\n case \"session/settingsUpdateRequested\":\n return requestSettingsUpdate(state, intent);\n case \"submit/requested\":\n return context.sendNowSubmitRequiresCancel\n ? requestCancel(state, {\n type: \"session/cancelRequested\",\n agentSessionId: intent.agentSessionId,\n commandId: `submit:cancel:${intent.clientSubmitId}`,\n awaitingTurnExpiresAtUnixMs:\n intent.requestedAtUnixMs + TURN_CANCEL_TIMEOUT_MS,\n timeoutMs: TURN_CANCEL_TIMEOUT_MS,\n workspaceId: intent.workspaceId\n })\n : unchanged(state);\n case \"queue/sendNowRequested\":\n return context.queueSendNowRequiresCancel\n ? requestCancel(state, {\n type: \"session/cancelRequested\",\n agentSessionId: intent.agentSessionId,\n commandId: intent.cancelCommandId,\n awaitingTurnExpiresAtUnixMs: intent.awaitingTurnExpiresAtUnixMs,\n timeoutMs: intent.timeoutMs,\n workspaceId:\n state.sessionsById[intent.agentSessionId.trim()]?.workspaceId ??\n \"\"\n })\n : unchanged(state);\n case \"session/cancelAbandoned\":\n return clearCancel(state, intent.agentSessionId);\n case \"engine/intentExpired\":\n return expireCancel(state, intent.expiryId);\n case \"engine/commandResult\":\n if (intent.commandType === \"interaction/respond\") {\n const next =\n context.interactionResultValidation?.kind === \"valid\"\n ? reconcileInteractionResponses(\n state,\n upsertCanonicalSession(\n state,\n context.interactionResultValidation.session,\n initialOperation\n )\n )\n : state;\n return settleInteractionResponse(\n next,\n intent,\n context.interactionResultValidation ?? null\n );\n }\n if (intent.commandType === \"session/updateSettings\")\n return settleSettingsUpdate(\n context.settingsResultValidation?.kind === \"valid\"\n ? upsertCanonicalSession(\n state,\n context.settingsResultValidation.session,\n initialOperation\n )\n : state,\n intent,\n context.settingsResultValidation ?? null\n );\n if (intent.commandType === \"turn/cancel\")\n return settleCancel(\n state,\n intent,\n context.cancelResultValidation ?? null\n );\n if (\n intent.commandType === \"queue/sendPrompt\" &&\n context.sendResultValidation?.kind === \"valid\"\n ) {\n const sendResult = context.sendResultValidation.result;\n if (sendResult.kind === \"goalControl\") {\n return result(\n upsertCanonicalSession(state, sendResult.session, initialOperation)\n );\n }\n const { session, turn } = sendResult;\n return result(\n upsertCanonicalTurn(\n upsertCanonicalSession(state, session, initialOperation),\n turn\n )\n );\n }\n return unchanged(state);\n default:\n return unchanged(state);\n }\n}\n\nfunction requestInteractionResponse(\n state: SessionLifecycleState,\n intent: Extract<EngineIntent, { type: \"interaction/responseRequested\" }>\n): EngineReducerResult<SessionLifecycleState> {\n const agentSessionId = intent.agentSessionId.trim();\n const requestId = intent.requestId.trim();\n const turnId = intent.turnId.trim();\n const workspaceId = intent.workspaceId.trim();\n const commandId = intent.commandId.trim();\n const key = canonicalInteractionKey(agentSessionId, turnId, requestId);\n const interaction = state.interactionsById[key];\n const existing = state.interactionResponsesById[key];\n const action = intent.action?.trim() || null;\n const optionId = intent.optionId?.trim() || null;\n const payload = intent.payload ? { ...intent.payload } : null;\n if (\n !agentSessionId ||\n !requestId ||\n !turnId ||\n !workspaceId ||\n !commandId ||\n state.sessionsById[agentSessionId]?.workspaceId !== workspaceId ||\n state.operationBySessionId[agentSessionId]?.runtimeAvailability.state ===\n \"blocked\" ||\n interaction?.status !== \"pending\" ||\n existing?.status === \"responding\" ||\n (existing &&\n (existing.status === \"unknown\" || existing.status === \"failed\") &&\n (intent.retry !== true ||\n existing.action !== action ||\n existing.optionId !== optionId ||\n JSON.stringify(existing.payload) !== JSON.stringify(payload)))\n ) {\n return unchanged(state);\n }\n return {\n commands: [\n {\n ...(action ? { action } : {}),\n agentSessionId,\n commandId,\n correlationId: key,\n ...(optionId ? { optionId } : {}),\n ...(payload ? { payload } : {}),\n requestId,\n turnId,\n ...(intent.timeoutMs !== undefined\n ? { timeoutMs: intent.timeoutMs }\n : {}),\n type: \"interaction/respond\",\n workspaceId\n }\n ],\n state: replaceInteractionResponse(state, key, {\n action,\n agentSessionId,\n commandId,\n errorCode: null,\n errorMessage: null,\n optionId,\n payload,\n requestId,\n turnId,\n status: \"responding\",\n workspaceId\n })\n };\n}\n\nfunction changeRuntimeAvailability(\n state: SessionLifecycleState,\n rawAgentSessionId: string,\n availability: SessionOperationState[\"runtimeAvailability\"]\n): EngineReducerResult<SessionLifecycleState> {\n const agentSessionId = rawAgentSessionId.trim();\n const operation = state.operationBySessionId[agentSessionId];\n if (!agentSessionId || !operation) return unchanged(state);\n const current = operation.runtimeAvailability;\n if (\n current.state === availability.state &&\n (current.state !== \"blocked\" ||\n (availability.state === \"blocked\" &&\n current.reason === availability.reason))\n ) {\n return unchanged(state);\n }\n const changed = updateOperation(state, agentSessionId, (value) => ({\n ...value,\n runtimeAvailability: availability\n }));\n return availability.state === \"available\"\n ? resumeSettingsUpdateWhenRuntimeAvailable(changed.state, agentSessionId)\n : changed;\n}\n\nfunction settleInteractionResponse(\n state: SessionLifecycleState,\n intent: Extract<EngineIntent, { type: \"engine/commandResult\" }>,\n validation: ScopedSessionResultValidation | null\n): EngineReducerResult<SessionLifecycleState> {\n const entry = Object.entries(state.interactionResponsesById).find(\n ([key, response]) =>\n response.commandId === intent.commandId &&\n key === (intent.correlationId?.trim() ?? \"\")\n );\n if (!entry) return unchanged(state);\n const [key, response] = entry;\n if (intent.outcome === \"failed\") {\n return result(\n replaceInteractionResponse(state, key, {\n ...response,\n errorCode: intent.errorCode ?? null,\n errorMessage: intent.errorMessage?.trim() || null,\n status: \"failed\"\n })\n );\n }\n return result(\n replaceInteractionResponse(state, key, {\n ...response,\n errorCode:\n intent.outcome === \"timedOut\"\n ? \"timeout\"\n : validation?.kind === \"invalid\"\n ? \"invalid_command_result\"\n : null,\n errorMessage: intent.errorMessage?.trim() || null,\n status: \"unknown\"\n })\n );\n}\n\nfunction reconcileInteractionResponse(\n state: SessionLifecycleState,\n interaction: AgentActivityInteraction\n): SessionLifecycleState {\n if (interaction.status === \"pending\") return state;\n const key = canonicalInteractionKey(\n interaction.agentSessionId,\n interaction.turnId,\n interaction.requestId\n );\n if (!state.interactionResponsesById[key]) return state;\n const responses = { ...state.interactionResponsesById };\n delete responses[key];\n return { ...state, interactionResponsesById: responses };\n}\n\nfunction reconcileInteractionResponses(\n previous: SessionLifecycleState,\n next: SessionLifecycleState\n): SessionLifecycleState {\n let responses: Record<\n string,\n import(\"./sessionLifecycle.types.ts\").InteractionResponseState\n > | null = null;\n for (const [key] of Object.entries(previous.interactionResponsesById)) {\n const interaction = next.interactionsById[key];\n const authoritativelyRemoved =\n !interaction && Boolean(previous.interactionsById[key]);\n if (interaction?.status !== \"pending\" || authoritativelyRemoved) {\n responses ??= { ...next.interactionResponsesById };\n delete responses[key];\n }\n }\n return responses ? { ...next, interactionResponsesById: responses } : next;\n}\n\nfunction replaceInteractionResponse(\n state: SessionLifecycleState,\n key: string,\n response: import(\"./sessionLifecycle.types.ts\").InteractionResponseState\n): SessionLifecycleState {\n return {\n ...state,\n interactionResponsesById: {\n ...state.interactionResponsesById,\n [key]: response\n }\n };\n}\n\nfunction patchSessionMetadata(\n state: SessionLifecycleState,\n rawId: string,\n patch: Extract<EngineIntent, { type: \"session/metadataPatched\" }>[\"patch\"]\n): EngineReducerResult<SessionLifecycleState> {\n const id = rawId.trim();\n const session = state.sessionsById[id];\n if (!session) return unchanged(state);\n const next = { ...session, ...patch };\n const changed = Object.entries(patch).some(\n ([key, value]) => session[key as keyof typeof session] !== value\n );\n return changed\n ? result({\n ...state,\n sessionsById: { ...state.sessionsById, [id]: next }\n })\n : unchanged(state);\n}\n\nfunction requestCancel(\n state: SessionLifecycleState,\n intent: Extract<\n EngineIntent,\n { type: \"session/cancelRequested\" | \"session/stopRequested\" }\n >\n): EngineReducerResult<SessionLifecycleState> {\n const id = intent.agentSessionId.trim();\n const session = state.sessionsById[id];\n const workspaceId = intent.workspaceId.trim();\n if (\n !id ||\n !workspaceId ||\n state.deletedSessionIds[id] ||\n (session && session.workspaceId !== workspaceId) ||\n state.operationBySessionId[id]?.runtimeAvailability.state === \"blocked\"\n ) {\n return unchanged(state);\n }\n let nextState = state;\n let operation = state.operationBySessionId[id];\n if (!operation) {\n operation = initialOperation();\n nextState = setOperation(state, id, operation);\n }\n if (cancelPending(operation.cancel)) return unchanged(nextState);\n const activeTurnId = session?.activeTurnId ?? null;\n const turn = activeTurnId\n ? state.turnsById[canonicalTurnKey(id, activeTurnId)]\n : null;\n if (turn && turn.phase !== \"settled\") {\n const next = setCancel(\n nextState,\n id,\n requestedCancel(intent.commandId, turn.turnId, workspaceId)\n );\n return {\n commands: [\n cancelCommand(workspaceId, id, turn, intent.commandId, intent.timeoutMs)\n ],\n state: next\n };\n }\n const expiryId = `cancel:awaiting-turn:${intent.commandId}`;\n const next = setCancel(nextState, id, {\n ...requestedCancel(intent.commandId, null, workspaceId),\n expiryId,\n requestedSessionVersion: session ? sessionVersion(session) : null,\n status: \"awaitingTurn\"\n });\n return {\n commands: [\n {\n type: \"engine/scheduleExpiry\",\n expiryId,\n dueAtUnixMs: intent.awaitingTurnExpiresAtUnixMs\n }\n ],\n state: next\n };\n}\n\nfunction reconcilePendingCancels(\n previous: SessionLifecycleState,\n next: SessionLifecycleState\n): EngineReducerResult<SessionLifecycleState> {\n const settings = reconcileSettingsUpdates(previous, next);\n const commands: EngineCommand[] = [...settings.commands];\n let state = settings.state;\n for (const [id, operation] of Object.entries(state.operationBySessionId)) {\n const session = state.sessionsById[id];\n const turn = session?.activeTurnId\n ? state.turnsById[canonicalTurnKey(id, session.activeTurnId)]\n : null;\n const reconciledOperation = state.operationBySessionId[id] ?? operation;\n if (\n reconciledOperation.cancel.status === \"awaitingTurn\" &&\n session &&\n turn &&\n turn.phase !== \"settled\" &&\n reconciledOperation.cancel.commandId\n ) {\n if (reconciledOperation.cancel.expiryId)\n commands.push({\n type: \"engine/cancelExpiry\",\n expiryId: reconciledOperation.cancel.expiryId\n });\n commands.push(\n cancelCommand(\n session.workspaceId,\n id,\n turn,\n reconciledOperation.cancel.commandId\n )\n );\n state = setCancel(state, id, {\n ...reconciledOperation.cancel,\n expiryId: null,\n status: \"requested\",\n turnId: turn.turnId\n });\n } else if (\n reconciledOperation.cancel.status !== \"idle\" &&\n reconciledOperation.cancel.status !== \"awaitingTurn\" &&\n (!turn || turn.phase === \"settled\")\n ) {\n state = setOperation(state, id, {\n ...reconciledOperation,\n cancel: initialCancel(),\n operationError: null\n });\n }\n }\n return state === previous && commands.length === 0\n ? unchanged(previous)\n : { commands, state };\n}\n\nfunction settleCancel(\n state: SessionLifecycleState,\n intent: Extract<EngineIntent, { type: \"engine/commandResult\" }>,\n validation: CancelResultValidation | null\n): EngineReducerResult<SessionLifecycleState> {\n const entry = Object.entries(state.operationBySessionId).find(\n ([, value]) => value.cancel.commandId === intent.commandId\n );\n if (!entry) return unchanged(state);\n const [id, operation] = entry;\n if (intent.outcome !== \"succeeded\") {\n const message = intent.errorMessage?.trim() || null;\n return result(\n setOperation(state, id, {\n ...operation,\n cancel: {\n ...operation.cancel,\n errorCode: intent.errorCode ?? null,\n errorMessage: message,\n status: \"failed\"\n },\n operationError: message\n })\n );\n }\n if (validation?.kind !== \"valid\") {\n const cancel = {\n ...operation.cancel,\n errorCode: \"invalid_command_result\",\n errorMessage: null,\n status: \"unknown\" as const\n };\n return {\n commands: [\n {\n type: \"engine/reconcileWorkspace\",\n commandId: `engine:reconcile:cancel:${intent.commandId}`,\n workspaceId: operation.cancel.requestedWorkspaceId ?? \"\"\n }\n ],\n state: setOperation(state, id, { ...operation, cancel })\n };\n }\n const response = validation.response;\n const targetId = operation.cancel.turnId;\n const responseTurn = response.turn ?? null;\n let next =\n responseTurn?.agentSessionId === id\n ? upsertCanonicalTurn(state, responseTurn)\n : state;\n const targetGone =\n response?.cancel.reason === \"not_found\" ||\n response?.cancel.reason === \"already_settled\";\n const cancelAccepted = response.cancel.reason === \"cancel_requested\";\n const target = targetId\n ? next.turnsById[canonicalTurnKey(id, targetId)]\n : null;\n if (targetId && (target?.phase === \"settled\" || targetGone)) {\n const session = next.sessionsById[id];\n if (session?.activeTurnId === targetId) {\n next = {\n ...next,\n sessionsById: {\n ...next.sessionsById,\n [id]: { ...session, activeTurnId: null }\n }\n };\n }\n }\n next = setOperation(next, id, {\n ...operation,\n cancel: cancelAccepted\n ? {\n ...operation.cancel,\n errorCode: null,\n errorMessage: null,\n status: \"accepted\"\n }\n : initialCancel(),\n operationError: null\n });\n const commands: EngineCommand[] =\n targetGone || (responseTurn !== null && responseTurn.agentSessionId !== id)\n ? [\n {\n type: \"engine/reconcileWorkspace\",\n commandId: `engine:reconcile:cancel:${intent.commandId}`,\n workspaceId: next.sessionsById[id]?.workspaceId ?? \"\"\n }\n ]\n : [];\n return { commands, state: next };\n}\n\nfunction removeSession(\n state: SessionLifecycleState,\n rawId: string\n): EngineReducerResult<SessionLifecycleState> {\n const id = rawId.trim();\n if (!id || state.deletedSessionIds[id]) return unchanged(state);\n const expiryId = state.operationBySessionId[id]?.cancel.expiryId;\n const removed = removeCanonicalSession(state, id);\n const interactionResponsesById = Object.fromEntries(\n Object.entries(removed.interactionResponsesById).filter(\n ([, response]) => response.agentSessionId !== id\n )\n );\n return {\n commands: expiryId\n ? [{ type: \"engine/cancelExpiry\", expiryId }]\n : NO_COMMANDS,\n state: {\n ...removed,\n deletedSessionIds: { ...removed.deletedSessionIds, [id]: true },\n interactionResponsesById\n }\n };\n}\n\nfunction expireCancel(\n state: SessionLifecycleState,\n expiryId: string\n): EngineReducerResult<SessionLifecycleState> {\n const entry = Object.entries(state.operationBySessionId).find(\n ([, value]) => value.cancel.expiryId === expiryId\n );\n return entry ? clearCancel(state, entry[0]) : unchanged(state);\n}\n\nfunction clearCancel(\n state: SessionLifecycleState,\n id: string\n): EngineReducerResult<SessionLifecycleState> {\n const operation = state.operationBySessionId[id];\n if (!operation || operation.cancel.status === \"idle\") return unchanged(state);\n const nextState = state.sessionsById[id]\n ? setCancel(state, id, initialCancel())\n : removeDetachedOperation(state, id);\n return {\n commands: operation.cancel.expiryId\n ? [{ type: \"engine/cancelExpiry\", expiryId: operation.cancel.expiryId }]\n : NO_COMMANDS,\n state: nextState\n };\n}\n\nfunction removeDetachedOperation(\n state: SessionLifecycleState,\n id: string\n): SessionLifecycleState {\n const operationBySessionId = { ...state.operationBySessionId };\n delete operationBySessionId[id];\n return { ...state, operationBySessionId };\n}\n\nfunction updateOperation(\n state: SessionLifecycleState,\n id: string,\n update: (value: SessionOperationState) => SessionOperationState\n): EngineReducerResult<SessionLifecycleState> {\n const current = state.operationBySessionId[id.trim()];\n return current\n ? result(setOperation(state, id.trim(), update(current)))\n : unchanged(state);\n}\nfunction setCancel(\n state: SessionLifecycleState,\n id: string,\n cancel: SessionCancelState\n): SessionLifecycleState {\n const operation = state.operationBySessionId[id];\n return operation ? setOperation(state, id, { ...operation, cancel }) : state;\n}\nfunction setOperation(\n state: SessionLifecycleState,\n id: string,\n operation: SessionOperationState\n): SessionLifecycleState {\n return {\n ...state,\n operationBySessionId: { ...state.operationBySessionId, [id]: operation }\n };\n}\nfunction initialOperation(): SessionOperationState {\n return {\n runtimeAvailability: { state: \"available\" },\n cancel: initialCancel(),\n operationError: null,\n settingsUpdate: createInitialSettingsUpdate()\n };\n}\nfunction initialCancel(): SessionCancelState {\n return {\n commandId: null,\n errorCode: null,\n errorMessage: null,\n expiryId: null,\n requestedSessionVersion: null,\n requestedWorkspaceId: null,\n status: \"idle\",\n turnId: null\n };\n}\nfunction requestedCancel(\n commandId: string,\n turnId: string | null,\n requestedWorkspaceId: string\n): SessionCancelState {\n return {\n ...initialCancel(),\n commandId,\n requestedWorkspaceId,\n status: \"requested\",\n turnId\n };\n}\nfunction cancelPending(cancel: SessionCancelState): boolean {\n return cancel.status === \"requested\" || cancel.status === \"awaitingTurn\";\n}\nfunction cancelCommand(\n workspaceId: string,\n agentSessionId: string,\n turn: AgentActivityTurn,\n commandId: string,\n timeoutMs = TURN_CANCEL_TIMEOUT_MS\n): EngineCommand {\n return {\n type: \"turn/cancel\",\n workspaceId,\n agentSessionId,\n turnId: turn.turnId,\n commandId,\n timeoutMs\n };\n}\nfunction sessionVersion(session: {\n updatedAtUnixMs?: number;\n lastEventUnixMs?: number;\n messageVersion?: number;\n createdAtUnixMs?: number;\n startedAtUnixMs?: number;\n}): number | null {\n return (\n session.updatedAtUnixMs ??\n session.lastEventUnixMs ??\n session.messageVersion ??\n session.createdAtUnixMs ??\n session.startedAtUnixMs ??\n null\n );\n}\nfunction result(\n state: SessionLifecycleState\n): EngineReducerResult<SessionLifecycleState> {\n return { commands: NO_COMMANDS, state };\n}\nfunction unchanged(\n state: SessionLifecycleState\n): EngineReducerResult<SessionLifecycleState> {\n return { commands: NO_COMMANDS, state };\n}\n","import type {\n EngineCommand,\n EngineCommandResultIntent,\n EngineIntent,\n EngineReducerResult\n} from \"./types.ts\";\nimport type {\n SessionReconcileRecord,\n SessionReconcileState\n} from \"./sessionReconcile.types.ts\";\nimport type { CanonicalAgentSession } from \"./sessionLifecycle.types.ts\";\n\nconst NO_COMMANDS: readonly EngineCommand[] = [];\n\nexport function createInitialSessionReconcileState(): SessionReconcileState {\n return { nextCommandSequence: 1, recordsBySessionId: {} };\n}\n\nexport function sessionReconcileReducer(\n state: SessionReconcileState,\n intent: EngineIntent,\n context: {\n deletedSessionIds: Readonly<Record<string, true>>;\n sessionsById: Readonly<Record<string, CanonicalAgentSession>>;\n workspaceReconcileCommandId: string | null;\n } = {\n deletedSessionIds: {},\n sessionsById: {},\n workspaceReconcileCommandId: null\n }\n): EngineReducerResult<SessionReconcileState> {\n switch (intent.type) {\n case \"session/activityObserved\":\n if (context.deletedSessionIds[intent.agentSessionId.trim()]) {\n return unchanged(state);\n }\n if (intent.inlineApplied) {\n return unchanged(state);\n }\n return requestReconcile(state, {\n agentSessionId: intent.agentSessionId,\n needsMessages:\n intent.eventType === \"message_update\" ||\n intent.eventType === \"session_audit\",\n needsState:\n !intent.hasCachedSession ||\n (intent.eventType !== \"message_update\" &&\n intent.eventType !== \"session_audit\") ||\n !intent.hasInlineMessages,\n workspaceId: intent.workspaceId\n });\n case \"session/reconcileRequested\":\n if (context.deletedSessionIds[intent.agentSessionId.trim()]) {\n return unchanged(state);\n }\n return requestReconcile(state, intent);\n case \"session/removed\":\n return removeRecord(state, intent.agentSessionId);\n case \"engine/commandResult\":\n if (\n intent.commandType === \"engine/reconcileWorkspace\" &&\n intent.outcome === \"succeeded\" &&\n intent.commandId === context.workspaceReconcileCommandId\n ) {\n return hydrateActiveRootSessions(state, context.sessionsById);\n }\n return intent.commandType === \"session/reconcile\"\n ? settleReconcile(state, intent)\n : unchanged(state);\n default:\n return unchanged(state);\n }\n}\n\nfunction hydrateActiveRootSessions(\n state: SessionReconcileState,\n sessionsById: Readonly<Record<string, CanonicalAgentSession>>\n): EngineReducerResult<SessionReconcileState> {\n let next = state;\n const commands: EngineCommand[] = [];\n const activeRoots = Object.values(sessionsById)\n .filter(\n (session) =>\n session.kind === \"root\" && Boolean(session.activeTurnId?.trim())\n )\n .sort((left, right) =>\n left.agentSessionId.localeCompare(right.agentSessionId)\n );\n\n for (const session of activeRoots) {\n const requested = requestReconcile(next, {\n agentSessionId: session.agentSessionId,\n needsMessages: false,\n needsState: true,\n workspaceId: session.workspaceId\n });\n next = requested.state;\n commands.push(...requested.commands);\n }\n\n return { commands, state: next };\n}\n\nfunction requestReconcile(\n state: SessionReconcileState,\n input: {\n agentSessionId: string;\n needsMessages: boolean;\n needsState: boolean;\n workspaceId: string;\n }\n): EngineReducerResult<SessionReconcileState> {\n const agentSessionId = input.agentSessionId.trim();\n const workspaceId = input.workspaceId.trim();\n if (\n !agentSessionId ||\n !workspaceId ||\n (!input.needsMessages && !input.needsState)\n ) {\n return unchanged(state);\n }\n const current = state.recordsBySessionId[agentSessionId] ?? {\n agentSessionId,\n errorMessage: null,\n inFlightCommandId: null,\n inFlightScope: null,\n messagesHydrated: false,\n pendingMessages: false,\n pendingState: false,\n workspaceId\n };\n const record = {\n ...current,\n errorMessage: null,\n pendingMessages: current.pendingMessages || input.needsMessages,\n pendingState: current.pendingState || input.needsState\n };\n const next = replaceRecord(state, record);\n return record.inFlightCommandId\n ? { commands: NO_COMMANDS, state: next }\n : startReconcile(next, record);\n}\n\nfunction settleReconcile(\n state: SessionReconcileState,\n intent: EngineCommandResultIntent\n): EngineReducerResult<SessionReconcileState> {\n const record = Object.values(state.recordsBySessionId).find(\n (candidate) => candidate.inFlightCommandId === intent.commandId\n );\n if (!record) {\n return unchanged(state);\n }\n const settled = {\n ...record,\n errorMessage:\n intent.outcome === \"succeeded\"\n ? null\n : intent.errorMessage?.trim() || null,\n inFlightCommandId: null,\n inFlightScope: null,\n messagesHydrated:\n record.messagesHydrated ||\n (intent.outcome === \"succeeded\" &&\n (record.inFlightScope === \"messages\" ||\n record.inFlightScope === \"state_and_messages\"))\n };\n const next = replaceRecord(state, settled);\n return settled.pendingMessages || settled.pendingState\n ? startReconcile(next, settled)\n : { commands: NO_COMMANDS, state: next };\n}\n\nfunction startReconcile(\n state: SessionReconcileState,\n record: SessionReconcileRecord\n): EngineReducerResult<SessionReconcileState> {\n const scope = record.pendingState\n ? record.pendingMessages\n ? \"state_and_messages\"\n : \"state\"\n : \"messages\";\n const commandId = `session:reconcile:${record.agentSessionId}:${state.nextCommandSequence}`;\n return {\n commands: [\n {\n agentSessionId: record.agentSessionId,\n commandId,\n scope,\n timeoutMs: 30_000,\n type: \"session/reconcile\",\n workspaceId: record.workspaceId\n }\n ],\n state: replaceRecord(\n { ...state, nextCommandSequence: state.nextCommandSequence + 1 },\n {\n ...record,\n inFlightCommandId: commandId,\n inFlightScope: scope,\n pendingMessages: false,\n pendingState: false\n }\n )\n };\n}\n\nfunction replaceRecord(\n state: SessionReconcileState,\n record: SessionReconcileRecord\n): SessionReconcileState {\n return {\n ...state,\n recordsBySessionId: {\n ...state.recordsBySessionId,\n [record.agentSessionId]: record\n }\n };\n}\n\nfunction removeRecord(\n state: SessionReconcileState,\n rawAgentSessionId: string\n): EngineReducerResult<SessionReconcileState> {\n const records = { ...state.recordsBySessionId };\n if (!records[rawAgentSessionId.trim()]) {\n return unchanged(state);\n }\n delete records[rawAgentSessionId.trim()];\n return {\n commands: NO_COMMANDS,\n state: { ...state, recordsBySessionId: records }\n };\n}\n\nfunction unchanged(\n state: SessionReconcileState\n): EngineReducerResult<SessionReconcileState> {\n return { commands: NO_COMMANDS, state };\n}\n","import type { AgentActivityTurn } from \"../types.ts\";\nimport type {\n EngineCommand,\n EngineIntent,\n EngineReducerResult\n} from \"./types.ts\";\nimport type {\n AttentionCompletionKind,\n AttentionReadRecord,\n AttentionReadPartition,\n AttentionReadState\n} from \"./attentionReadState.types.ts\";\n\nconst NO_COMMANDS: readonly EngineCommand[] = [];\n\nexport function createInitialAttentionReadState(): AttentionReadState {\n return { partitionsByUserId: {} };\n}\n\nexport function attentionReadStateReducer(\n state: AttentionReadState,\n intent: EngineIntent,\n context: {\n sessionsById: Readonly<Record<string, { userId?: string }>>;\n } = { sessionsById: {} }\n): EngineReducerResult<AttentionReadState> {\n switch (intent.type) {\n case \"attention/hydrateRequested\":\n return requestHydration(state, intent);\n case \"attention/readStateHydrated\":\n return hydrate(state, intent);\n case \"attention/read\":\n return setUnread(\n state,\n intent.userId,\n intent.agentSessionId,\n false,\n false\n );\n case \"attention/unreadRequested\":\n return setUnread(state, intent.userId, intent.agentSessionId, true, true);\n case \"attention/persistRetryRequested\":\n return retryPersistence(state, intent.userId);\n case \"engine/commandResult\":\n if (intent.commandType === \"attention/readState/read\") {\n return intent.outcome === \"succeeded\"\n ? hydrateFromCommandResult(state, intent)\n : recordPersistenceError(state, intent);\n }\n if (intent.commandType === \"attention/readState/write\") {\n return settlePersistenceWrite(state, intent);\n }\n return unchanged(state);\n case \"turn/upserted\":\n return observeTurn(\n state,\n context.sessionsById[intent.turn.agentSessionId]?.userId ?? \"\",\n intent.turn,\n true\n );\n case \"session/snapshotReceived\": {\n let next = state;\n for (const session of intent.sessions) {\n if (session.latestTurn?.phase === \"settled\") {\n next = observeTurn(\n next,\n session.userId?.trim() ?? \"\",\n session.latestTurn,\n false\n ).state;\n }\n }\n return next === state ? unchanged(state) : changed(next);\n }\n case \"session/removed\": {\n const id = intent.agentSessionId.trim();\n let next = state;\n for (const [userId, partition] of Object.entries(\n state.partitionsByUserId\n )) {\n if (!partition.recordsBySessionId[id]) continue;\n const recordsBySessionId = { ...partition.recordsBySessionId };\n delete recordsBySessionId[id];\n next = replacePartition(next, userId, {\n ...partition,\n recordsBySessionId\n });\n }\n return next === state ? unchanged(state) : changed(next);\n }\n default:\n return unchanged(state);\n }\n}\n\nfunction observeTurn(\n state: AttentionReadState,\n rawUserId: string,\n turn: AgentActivityTurn,\n live: boolean\n): EngineReducerResult<AttentionReadState> {\n const id = turn.agentSessionId.trim();\n const userId = rawUserId.trim();\n const turnId = turn.turnId.trim();\n const kind = completionKind(turn);\n if (!id || !userId || !turnId || !kind) return unchanged(state);\n const partition = partitionFor(state, userId);\n const completionKey = `turn:${id}:${turnId}:${kind}`;\n const current = partition.recordsBySessionId[id];\n if (current?.completionKey === completionKey) return unchanged(state);\n const isUnread = hydratedUnread(partition, completionKey, kind) ?? live;\n const durablePartition = updateDurableMarker(\n partition,\n id,\n completionKey,\n kind,\n isUnread\n );\n const nextPartition = {\n ...durablePartition,\n recordsBySessionId: {\n ...durablePartition.recordsBySessionId,\n [id]: { completionKey, isUnread, kind, markedUnreadByUser: false }\n }\n };\n const persistence = queuePersistence(nextPartition, userId);\n return changed(\n replacePartition(state, userId, persistence.partition),\n persistence.commands\n );\n}\n\nfunction completionKind(\n turn: AgentActivityTurn\n): AttentionCompletionKind | null {\n if (turn.phase !== \"settled\") return null;\n return turn.outcome === \"failed\"\n ? \"failed\"\n : turn.outcome === \"completed\"\n ? \"completed\"\n : null;\n}\n\nfunction hydratedUnread(\n state: AttentionReadPartition,\n completionKey: string,\n kind: AttentionCompletionKind\n): boolean | null {\n const hydrated = state.hydrated;\n if (!hydrated) return null;\n const unread =\n kind === \"completed\"\n ? hydrated.completedUnreadIds\n : hydrated.failedUnreadIds;\n const read =\n kind === \"completed\" ? hydrated.completedReadIds : hydrated.failedReadIds;\n if (unread.includes(completionKey)) return true;\n if (read.includes(completionKey)) return false;\n return null;\n}\n\nfunction setUnread(\n state: AttentionReadState,\n rawUserId: string,\n rawId: string,\n isUnread: boolean,\n markedUnreadByUser: boolean\n): EngineReducerResult<AttentionReadState> {\n const id = rawId.trim();\n const userId = rawUserId.trim();\n if (!id || !userId) return unchanged(state);\n const partition = partitionFor(state, userId);\n const current = partition.recordsBySessionId[id];\n if (!current) return unchanged(state);\n const next: AttentionReadRecord = current;\n if (\n current.isUnread === isUnread &&\n current.markedUnreadByUser === markedUnreadByUser\n ) {\n return unchanged(state);\n }\n const durablePartition = updateDurableMarker(\n partition,\n id,\n current.completionKey,\n current.kind,\n isUnread\n );\n const nextPartition = {\n ...durablePartition,\n recordsBySessionId: {\n ...durablePartition.recordsBySessionId,\n [id]: { ...next, isUnread, markedUnreadByUser }\n }\n };\n const persistence = queuePersistence(nextPartition, userId);\n return changed(\n replacePartition(state, userId, persistence.partition),\n persistence.commands\n );\n}\n\nfunction updateDurableMarker(\n partition: AttentionReadPartition,\n sessionId: string,\n completionKey: string,\n kind: AttentionCompletionKind,\n isUnread: boolean\n): AttentionReadPartition {\n if (!partition.hydrated) return partition;\n const completedReadIds = new Set(partition.hydrated.completedReadIds);\n const completedUnreadIds = new Set(partition.hydrated.completedUnreadIds);\n const failedReadIds = new Set(partition.hydrated.failedReadIds);\n const failedUnreadIds = new Set(partition.hydrated.failedUnreadIds);\n // Only the latest completion per session drives the lamp, so evict any prior\n // completion key for this session across every bucket before recording the new\n // one. This keeps the durable set bounded to one key per session (per kind)\n // while still keying on the exact completion so a new turn re-lights.\n evictSessionCompletionKeys(sessionId, [\n completedReadIds,\n completedUnreadIds,\n failedReadIds,\n failedUnreadIds\n ]);\n const read = kind === \"completed\" ? completedReadIds : failedReadIds;\n const unread = kind === \"completed\" ? completedUnreadIds : failedUnreadIds;\n (isUnread ? unread : read).add(completionKey);\n return {\n ...partition,\n hydrated: {\n completedReadIds: [...completedReadIds],\n completedUnreadIds: [...completedUnreadIds],\n failedReadIds: [...failedReadIds],\n failedUnreadIds: [...failedUnreadIds]\n }\n };\n}\n\nfunction evictSessionCompletionKeys(\n sessionId: string,\n buckets: readonly Set<string>[]\n): void {\n const prefix = `turn:${sessionId}:`;\n for (const bucket of buckets) {\n for (const key of bucket) {\n if (key.startsWith(prefix)) bucket.delete(key);\n }\n }\n}\n\nfunction sanitizeCompletionKeys(ids: readonly string[]): string[] {\n // Durable buckets hold completion keys (`turn:<session>:<turn>:<kind>`). Drop\n // any legacy per-session id left by older builds so it cannot linger; a stale\n // session id never matches a completion-key lookup anyway, and dropping it now\n // keeps the persisted set clean without a bespoke migration.\n return ids.filter((id) => id.startsWith(\"turn:\"));\n}\n\nfunction hydrate(\n state: AttentionReadState,\n intent: Extract<EngineIntent, { type: \"attention/readStateHydrated\" }>\n): EngineReducerResult<AttentionReadState> {\n const userId = intent.userId.trim();\n if (!userId) return unchanged(state);\n const partition = partitionFor(state, userId);\n const completedReadIds = new Set(\n sanitizeCompletionKeys(intent.completed.readIds)\n );\n const completedUnreadIds = new Set(\n sanitizeCompletionKeys(intent.completed.unreadIds)\n );\n const failedReadIds = new Set(sanitizeCompletionKeys(intent.failed.readIds));\n const failedUnreadIds = new Set(\n sanitizeCompletionKeys(intent.failed.unreadIds)\n );\n const recordsBySessionId = { ...partition.recordsBySessionId };\n let mergedObservedRecord = false;\n for (const [id, record] of Object.entries(recordsBySessionId)) {\n const key = record.completionKey;\n const unread =\n record.kind === \"completed\" ? completedUnreadIds : failedUnreadIds;\n const read = record.kind === \"completed\" ? completedReadIds : failedReadIds;\n if (unread.has(key)) {\n recordsBySessionId[id] = { ...record, isUnread: true };\n } else if (read.has(key)) {\n recordsBySessionId[id] = {\n ...record,\n isUnread: false,\n markedUnreadByUser: false\n };\n } else {\n // The durable store predates this session's current completion. Evict any\n // prior key for the session so the set stays bounded, then persist the\n // observed provenance on the next write.\n evictSessionCompletionKeys(id, [\n completedReadIds,\n completedUnreadIds,\n failedReadIds,\n failedUnreadIds\n ]);\n (record.isUnread ? unread : read).add(key);\n mergedObservedRecord = true;\n }\n }\n const nextPartition = {\n ...partition,\n hydrated: {\n completedReadIds: [...completedReadIds],\n completedUnreadIds: [...completedUnreadIds],\n failedReadIds: [...failedReadIds],\n failedUnreadIds: [...failedUnreadIds]\n },\n lastError: null,\n recordsBySessionId\n };\n const persistence = mergedObservedRecord\n ? queuePersistence(nextPartition, userId)\n : { commands: NO_COMMANDS, partition: nextPartition };\n return changed(\n replacePartition(state, userId, persistence.partition),\n persistence.commands\n );\n}\n\nfunction requestHydration(\n state: AttentionReadState,\n intent: Extract<EngineIntent, { type: \"attention/hydrateRequested\" }>\n): EngineReducerResult<AttentionReadState> {\n const userId = intent.userId.trim();\n const workspaceId = intent.workspaceId.trim();\n const commandId = intent.commandId.trim();\n if (!userId || !workspaceId || !commandId) return unchanged(state);\n const partition = partitionFor(state, userId);\n const next = replacePartition(state, userId, {\n ...partition,\n lastError: null,\n workspaceId\n });\n return {\n commands: [\n {\n type: \"attention/readState/read\",\n commandId,\n correlationId: userId,\n userId,\n workspaceId\n }\n ],\n state: next\n };\n}\n\nfunction recordPersistenceError(\n state: AttentionReadState,\n intent: Extract<EngineIntent, { type: \"engine/commandResult\" }>\n): EngineReducerResult<AttentionReadState> {\n const userId = intent.correlationId?.trim() ?? \"\";\n if (!userId) return unchanged(state);\n const partition = partitionFor(state, userId);\n const lastError =\n intent.errorMessage?.trim() ||\n (intent.outcome === \"timedOut\"\n ? `${intent.commandType} timed out`\n : `${intent.commandType} failed`);\n if (partition.lastError === lastError) return unchanged(state);\n return changed(replacePartition(state, userId, { ...partition, lastError }));\n}\n\nfunction settlePersistenceWrite(\n state: AttentionReadState,\n intent: Extract<EngineIntent, { type: \"engine/commandResult\" }>\n): EngineReducerResult<AttentionReadState> {\n const userId = intent.correlationId?.trim() ?? \"\";\n if (!userId) return unchanged(state);\n const partition = state.partitionsByUserId[userId];\n if (!partition || partition.writeInFlightCommandId !== intent.commandId) {\n return unchanged(state);\n }\n const dirty = partition.writeDirty;\n const nextPartition: AttentionReadPartition = {\n ...partition,\n lastError:\n intent.outcome === \"succeeded\"\n ? null\n : intent.errorMessage?.trim() ||\n (intent.outcome === \"timedOut\"\n ? `${intent.commandType} timed out`\n : `${intent.commandType} failed`),\n writeDirty: false,\n writeInFlightCommandId: null\n };\n const persistence = dirty\n ? queuePersistence(nextPartition, userId)\n : { commands: NO_COMMANDS, partition: nextPartition };\n return changed(\n replacePartition(state, userId, persistence.partition),\n persistence.commands\n );\n}\n\nfunction retryPersistence(\n state: AttentionReadState,\n rawUserId: string\n): EngineReducerResult<AttentionReadState> {\n const userId = rawUserId.trim();\n const partition = state.partitionsByUserId[userId];\n if (!partition?.lastError || partition.writeInFlightCommandId) {\n return unchanged(state);\n }\n const persistence = queuePersistence(partition, userId);\n return changed(\n replacePartition(state, userId, persistence.partition),\n persistence.commands\n );\n}\n\nfunction hydrateFromCommandResult(\n state: AttentionReadState,\n intent: Extract<EngineIntent, { type: \"engine/commandResult\" }>\n): EngineReducerResult<AttentionReadState> {\n const userId = intent.correlationId?.trim() ?? \"\";\n const snapshot = workspaceAgentReadStateSnapshot(intent.value);\n if (!userId || !snapshot) return unchanged(state);\n return hydrate(state, {\n type: \"attention/readStateHydrated\",\n userId,\n completed: snapshot.completed,\n failed: snapshot.failed\n });\n}\n\nfunction workspaceAgentReadStateSnapshot(value: unknown): {\n completed: { readIds: readonly string[]; unreadIds: readonly string[] };\n failed: { readIds: readonly string[]; unreadIds: readonly string[] };\n} | null {\n if (!value || typeof value !== \"object\") return null;\n const snapshot = value as Record<string, unknown>;\n const completed = readStateBucket(snapshot.completed);\n const failed = readStateBucket(snapshot.failed);\n return completed && failed ? { completed, failed } : null;\n}\n\nfunction readStateBucket(\n value: unknown\n): { readIds: readonly string[]; unreadIds: readonly string[] } | null {\n if (!value || typeof value !== \"object\") return null;\n const bucket = value as Record<string, unknown>;\n if (!Array.isArray(bucket.readIds) || !Array.isArray(bucket.unreadIds)) {\n return null;\n }\n if (\n !bucket.readIds.every((id) => typeof id === \"string\") ||\n !bucket.unreadIds.every((id) => typeof id === \"string\")\n ) {\n return null;\n }\n return { readIds: bucket.readIds, unreadIds: bucket.unreadIds };\n}\n\nfunction queuePersistence(\n partition: AttentionReadPartition,\n userId: string\n): {\n commands: readonly EngineCommand[];\n partition: AttentionReadPartition;\n} {\n if (!partition.hydrated || !partition.workspaceId) {\n return { commands: NO_COMMANDS, partition };\n }\n if (partition.writeInFlightCommandId) {\n return {\n commands: NO_COMMANDS,\n partition: partition.writeDirty\n ? partition\n : { ...partition, writeDirty: true }\n };\n }\n const writeRevision = partition.writeRevision + 1;\n const commandId = `attention-write:${userId}:${writeRevision}`;\n return {\n commands: [\n {\n type: \"attention/readState/write\",\n commandId,\n correlationId: userId,\n userId,\n workspaceId: partition.workspaceId,\n completed: {\n readIds: partition.hydrated.completedReadIds,\n unreadIds: partition.hydrated.completedUnreadIds\n },\n failed: {\n readIds: partition.hydrated.failedReadIds,\n unreadIds: partition.hydrated.failedUnreadIds\n }\n }\n ],\n partition: {\n ...partition,\n writeDirty: false,\n writeInFlightCommandId: commandId,\n writeRevision\n }\n };\n}\n\nfunction partitionFor(\n state: AttentionReadState,\n userId: string\n): AttentionReadPartition {\n return (\n state.partitionsByUserId[userId] ?? {\n hydrated: null,\n lastError: null,\n recordsBySessionId: {},\n workspaceId: null,\n writeDirty: false,\n writeInFlightCommandId: null,\n writeRevision: 0\n }\n );\n}\n\nfunction replacePartition(\n state: AttentionReadState,\n userId: string,\n partition: AttentionReadPartition\n): AttentionReadState {\n return {\n ...state,\n partitionsByUserId: {\n ...state.partitionsByUserId,\n [userId]: partition\n }\n };\n}\n\nfunction changed(\n state: AttentionReadState,\n commands: readonly EngineCommand[] = NO_COMMANDS\n): EngineReducerResult<AttentionReadState> {\n return { commands, state };\n}\nfunction unchanged(\n state: AttentionReadState\n): EngineReducerResult<AttentionReadState> {\n return { commands: NO_COMMANDS, state };\n}\n","import type { AgentActivitySendInputResult } from \"../types.ts\";\nimport type { AgentActivitySession } from \"../types.ts\";\nimport type {\n AgentActivityTurn,\n AgentActivityTurnCancelResponse\n} from \"../types.ts\";\nimport type { PendingSubmitIntentRecord } from \"./pendingIntents.types.ts\";\n\nexport type SendInputResultValidation =\n | { kind: \"valid\"; result: AgentActivitySendInputResult }\n | { kind: \"invalid\"; reason: string };\n\nexport type ScopedSessionResultValidation =\n | { kind: \"valid\"; session: AgentActivitySession }\n | { kind: \"invalid\"; reason: string };\n\nexport type CancelResultValidation =\n | { kind: \"valid\"; response: AgentActivityTurnCancelResponse }\n | { kind: \"invalid\"; reason: string };\n\nexport function validateCancelResult(\n value: unknown,\n expected:\n | {\n agentSessionId: string;\n currentTurn: AgentActivityTurn | null;\n turnId: string | null;\n workspaceMatches: boolean;\n }\n | undefined\n): CancelResultValidation {\n if (!expected || !expected.turnId || !expected.workspaceMatches) {\n return { kind: \"invalid\", reason: \"cancel_scope_missing\" };\n }\n if (!value || typeof value !== \"object\") {\n return { kind: \"invalid\", reason: \"cancel_result_missing\" };\n }\n const response = value as Partial<AgentActivityTurnCancelResponse>;\n const cancel = response.cancel;\n if (!cancel || typeof cancel.canceled !== \"boolean\") {\n return { kind: \"invalid\", reason: \"cancel_result_malformed\" };\n }\n const turn = response.turn;\n const exactTurn =\n turn?.agentSessionId === expected.agentSessionId &&\n turn.turnId === expected.turnId;\n const cancelRequested =\n cancel.canceled === false &&\n cancel.reason === \"cancel_requested\" &&\n exactTurn &&\n turn.phase === \"settling\" &&\n turn.outcome == null;\n const canceled =\n cancel.canceled === true &&\n cancel.reason === \"turn_canceled\" &&\n exactTurn &&\n turn.phase === \"settled\" &&\n turn.outcome === \"canceled\";\n const alreadySettled =\n cancel.canceled === false &&\n cancel.reason === \"already_settled\" &&\n ((exactTurn && turn.phase === \"settled\" && turn.outcome !== null) ||\n expected.currentTurn?.phase === \"settled\");\n const targetAbsent =\n cancel.canceled === false &&\n cancel.reason === \"not_found\" &&\n expected.currentTurn === null;\n return cancelRequested || canceled || alreadySettled || targetAbsent\n ? { kind: \"valid\", response: response as AgentActivityTurnCancelResponse }\n : { kind: \"invalid\", reason: \"cancel_target_mismatch\" };\n}\n\nexport function validateScopedSessionResult(\n value: unknown,\n expected: { agentSessionId: string; workspaceId: string } | undefined,\n requireTopLevelSessionId = false\n): ScopedSessionResultValidation {\n if (!expected || !value || typeof value !== \"object\") {\n return { kind: \"invalid\", reason: \"scoped_session_result_missing\" };\n }\n const result = value as {\n agentSessionId?: unknown;\n session?: Partial<AgentActivitySession>;\n };\n const session = result.session;\n if (\n !session ||\n typeof session.agentSessionId !== \"string\" ||\n typeof session.workspaceId !== \"string\" ||\n session.agentSessionId.trim() !== expected.agentSessionId ||\n session.workspaceId.trim() !== expected.workspaceId ||\n (requireTopLevelSessionId &&\n (typeof result.agentSessionId !== \"string\" ||\n result.agentSessionId.trim() !== expected.agentSessionId))\n ) {\n return { kind: \"invalid\", reason: \"scoped_session_result_mismatch\" };\n }\n return { kind: \"valid\", session: session as AgentActivitySession };\n}\n\nexport function validateSendInputResult(\n value: unknown,\n record: PendingSubmitIntentRecord | undefined\n): SendInputResultValidation {\n if (!record) {\n return { kind: \"invalid\", reason: \"submit_request_missing\" };\n }\n if (!isSendInputResult(value)) {\n return {\n kind: \"invalid\",\n reason: \"send_result_entities_missing\"\n };\n }\n const sessionId = value.session.agentSessionId.trim();\n const workspaceId = value.session.workspaceId.trim();\n if (sessionId !== record.agentSessionId) {\n return {\n kind: \"invalid\",\n reason: \"send_result_session_scope_mismatch\"\n };\n }\n if (workspaceId !== record.workspaceId) {\n return {\n kind: \"invalid\",\n reason: \"send_result_workspace_scope_mismatch\"\n };\n }\n if (value.kind === \"goalControl\") {\n return { kind: \"valid\", result: value };\n }\n const turnSessionId = value.turn.agentSessionId.trim();\n const turnId = value.turnId.trim();\n if (!turnId || value.turn.turnId.trim() !== turnId) {\n return { kind: \"invalid\", reason: \"send_result_turn_scope_mismatch\" };\n }\n if (turnSessionId !== record.agentSessionId) {\n return {\n kind: \"invalid\",\n reason: \"send_result_session_scope_mismatch\"\n };\n }\n return { kind: \"valid\", result: value };\n}\n\nfunction isSendInputResult(\n value: unknown\n): value is AgentActivitySendInputResult {\n if (!value || typeof value !== \"object\") return false;\n const result = value as {\n kind?: unknown;\n session?: Partial<AgentActivitySession>;\n turn?: Partial<AgentActivityTurn>;\n turnId?: unknown;\n };\n if (\n result.kind === \"goalControl\" &&\n result.session &&\n typeof result.session.agentSessionId === \"string\" &&\n typeof result.session.workspaceId === \"string\" &&\n Array.isArray(result.session.latestTurnInteractions) &&\n Array.isArray(result.session.pendingInteractions)\n ) {\n return true;\n }\n return Boolean(\n result.session &&\n result.turn &&\n typeof result.turnId === \"string\" &&\n typeof result.session.agentSessionId === \"string\" &&\n typeof result.session.workspaceId === \"string\" &&\n typeof result.turn.agentSessionId === \"string\" &&\n typeof result.turn.turnId === \"string\"\n );\n}\n","import { canonicalInteractionKey } from \"./sessionEntityKeys.ts\";\nimport type {\n PlanDecisionRecord,\n PlanDecisionState\n} from \"./planDecision.types.ts\";\nimport type {\n EngineCommand,\n EngineIntent,\n EngineReducerResult\n} from \"./types.ts\";\n\nconst NO_COMMANDS: readonly EngineCommand[] = [];\n\nexport function createInitialPlanDecisionState(): PlanDecisionState {\n return { byId: {}, dismissedByTurnKey: {} };\n}\n\nexport function planDecisionReducer(\n state: PlanDecisionState,\n intent: EngineIntent,\n context: { feedbackAccepted: boolean; planTurnValid: boolean } = {\n feedbackAccepted: false,\n planTurnValid: false\n }\n): EngineReducerResult<PlanDecisionState> {\n if (intent.type === \"session/removed\") {\n const sessionId = intent.agentSessionId.trim();\n const byId = Object.fromEntries(\n Object.entries(state.byId).filter(\n ([, record]) => record.agentSessionId !== sessionId\n )\n );\n const dismissedByTurnKey = Object.fromEntries(\n Object.entries(state.dismissedByTurnKey).filter(\n ([key]) => !key.startsWith(`${sessionId}\\0`)\n )\n );\n return Object.keys(byId).length === Object.keys(state.byId).length &&\n Object.keys(dismissedByTurnKey).length ===\n Object.keys(state.dismissedByTurnKey).length\n ? unchanged(state)\n : { commands: NO_COMMANDS, state: { byId, dismissedByTurnKey } };\n }\n if (\n intent.type === \"plan/feedbackRequested\" ||\n intent.type === \"plan/skipped\"\n ) {\n if (\n !context.planTurnValid ||\n (intent.type === \"plan/feedbackRequested\" && !context.feedbackAccepted)\n )\n return unchanged(state);\n const key = dismissedTurnKey(intent.agentSessionId, intent.turnId);\n return {\n commands: NO_COMMANDS,\n state: {\n ...state,\n dismissedByTurnKey: { ...state.dismissedByTurnKey, [key]: true }\n }\n };\n }\n if (intent.type === \"plan/decisionRequested\") {\n const record = recordFromIntent(intent);\n const key = decisionKey(\n record.agentSessionId,\n record.turnId,\n record.requestId\n );\n const existing = state.byId[key];\n if (\n !record.commandId ||\n !record.idempotencyKey ||\n !context.planTurnValid ||\n (existing &&\n (!intent.retry ||\n existing.idempotencyKey !== record.idempotencyKey ||\n (existing.status !== \"failed\" && existing.status !== \"unknown\")))\n ) {\n return unchanged(state);\n }\n return {\n commands: [\n { ...intent, type: \"plan/submitDecision\", correlationId: key }\n ],\n state: {\n ...state,\n byId: { ...state.byId, [key]: record }\n }\n };\n }\n if (\n intent.type === \"engine/commandResult\" &&\n intent.commandType === \"plan/submitDecision\"\n ) {\n const key = intent.correlationId?.trim() ?? \"\";\n const record = state.byId[key];\n if (!record || record.commandId !== intent.commandId)\n return unchanged(state);\n if (intent.outcome === \"succeeded\") {\n const validation = validateOperation(intent.value, record);\n if (validation.status === \"completed\") {\n const removed = remove(state, key);\n return {\n commands: NO_COMMANDS,\n state: {\n ...removed,\n dismissedByTurnKey: {\n ...removed.dismissedByTurnKey,\n [dismissedTurnKey(record.agentSessionId, record.turnId)]: true\n }\n }\n };\n }\n if (validation.status === \"failed\") {\n return replace(state, key, {\n ...record,\n errorCode: \"operation_failed\",\n errorMessage: null,\n operationId: validation.operationId,\n status: \"failed\"\n });\n }\n if (validation.status === \"invalid\") {\n return replace(state, key, {\n ...record,\n errorCode: \"invalid_command_result\",\n errorMessage: null,\n status: \"unknown\"\n });\n }\n return replace(state, key, {\n ...record,\n errorCode: null,\n errorMessage: null,\n operationId: validation.operationId,\n status: \"unknown\"\n });\n }\n return replace(state, key, {\n ...record,\n errorCode: intent.errorCode ?? null,\n errorMessage:\n intent.outcome === \"failed\"\n ? intent.errorMessage?.trim() || null\n : null,\n status: intent.outcome === \"failed\" ? \"failed\" : \"unknown\"\n });\n }\n if (intent.type === \"message/snapshotReceived\") {\n let next = state;\n for (const message of intent.messages) {\n if (message.payload.kind !== \"agent_system_notice\") continue;\n const noticeKind = message.payload.noticeKind;\n if (\n noticeKind !== \"plan_implementation_completed\" &&\n noticeKind !== \"plan_implementation_pending_confirmation\"\n )\n continue;\n const operationId = text(message.payload.operationId);\n const planTurnId = text(message.payload.planTurnId);\n if (!operationId || !planTurnId) continue;\n for (const [key, record] of Object.entries(next.byId)) {\n if (\n record.status !== \"unknown\" ||\n record.workspaceId !==\n (message.workspaceId?.trim() || intent.workspaceId?.trim()) ||\n record.agentSessionId !== message.agentSessionId.trim() ||\n record.turnId !== planTurnId ||\n record.operationId !== operationId\n )\n continue;\n if (noticeKind === \"plan_implementation_completed\") {\n const removed = remove(next, key);\n next = {\n ...removed,\n dismissedByTurnKey: {\n ...removed.dismissedByTurnKey,\n [dismissedTurnKey(record.agentSessionId, record.turnId)]: true\n }\n };\n }\n }\n }\n return next === state\n ? unchanged(state)\n : { commands: NO_COMMANDS, state: next };\n }\n if (\n intent.type === \"interaction/upserted\" &&\n intent.interaction.status !== \"pending\"\n ) {\n return removeMatching(\n state,\n intent.interaction.agentSessionId,\n intent.interaction.requestId\n );\n }\n return unchanged(state);\n}\n\nfunction recordFromIntent(\n intent: Extract<EngineIntent, { type: \"plan/decisionRequested\" }>\n): PlanDecisionRecord {\n return {\n action: intent.action,\n agentSessionId: intent.agentSessionId.trim(),\n commandId: intent.commandId.trim(),\n errorCode: null,\n errorMessage: null,\n idempotencyKey: intent.idempotencyKey.trim(),\n operationId: null,\n payload: intent.payload ? { ...intent.payload } : null,\n promptKind: intent.promptKind,\n requestId: intent.requestId.trim(),\n status: \"requested\",\n turnId: intent.turnId.trim(),\n workspaceId: intent.workspaceId.trim()\n };\n}\n\nfunction validateOperation(\n value: unknown,\n record: PlanDecisionRecord\n): {\n operationId: string | null;\n status: \"completed\" | \"pending\" | \"failed\" | \"invalid\";\n} {\n if (!value || typeof value !== \"object\")\n return { operationId: null, status: \"invalid\" };\n const operation = (value as { operation?: Record<string, unknown> })\n .operation;\n if (\n !operation ||\n operation.workspaceId !== record.workspaceId ||\n operation.agentSessionId !== record.agentSessionId ||\n operation.turnId !== record.turnId ||\n operation.requestId !== record.requestId ||\n operation.idempotencyKey !== record.idempotencyKey\n )\n return { operationId: null, status: \"invalid\" };\n const operationId = text(operation.operationId);\n if (!operationId) return { operationId: null, status: \"invalid\" };\n const status =\n operation.status === \"completed\"\n ? \"completed\"\n : operation.status === \"failed\"\n ? \"failed\"\n : operation.status === \"prepared\" || operation.status === \"leased\"\n ? \"pending\"\n : \"invalid\";\n return { operationId, status };\n}\n\nfunction text(value: unknown): string | null {\n return typeof value === \"string\" && value.trim() ? value.trim() : null;\n}\n\nfunction removeMatching(\n state: PlanDecisionState,\n sessionId: string,\n requestId: string\n) {\n let next = state;\n for (const [key, record] of Object.entries(state.byId)) {\n if (record.agentSessionId === sessionId && record.requestId === requestId) {\n next = remove(next, key);\n }\n }\n return next === state\n ? unchanged(state)\n : { commands: NO_COMMANDS, state: next };\n}\n\nfunction replace(\n state: PlanDecisionState,\n key: string,\n record: PlanDecisionRecord\n) {\n return {\n commands: NO_COMMANDS,\n state: { ...state, byId: { ...state.byId, [key]: record } }\n };\n}\n\nfunction remove(state: PlanDecisionState, key: string): PlanDecisionState {\n const byId = { ...state.byId };\n delete byId[key];\n return { ...state, byId };\n}\n\nfunction unchanged(\n state: PlanDecisionState\n): EngineReducerResult<PlanDecisionState> {\n return { commands: NO_COMMANDS, state };\n}\n\nfunction decisionKey(\n sessionId: string,\n turnId: string,\n requestId: string\n): string {\n return canonicalInteractionKey(sessionId, turnId, requestId);\n}\n\nfunction dismissedTurnKey(sessionId: string, turnId: string): string {\n return `${sessionId.trim()}\\0${turnId.trim()}`;\n}\n","import type { SessionCommandsState } from \"./sessionCommands.types.ts\";\nimport type {\n EngineCommand,\n EngineIntent,\n EngineReducerResult\n} from \"./types.ts\";\n\nconst NO_COMMANDS: readonly EngineCommand[] = [];\n\nexport function createInitialSessionCommandsState(): SessionCommandsState {\n return { bySessionId: {} };\n}\n\nexport function sessionCommandsReducer(\n state: SessionCommandsState,\n intent: EngineIntent,\n context: {\n deletedSessionIds: Readonly<Record<string, true>>;\n }\n): EngineReducerResult<SessionCommandsState> {\n if (intent.type === \"session/availableCommandsReceived\") {\n const id = intent.agentSessionId.trim();\n if (!id || context.deletedSessionIds[id] || !intent.workspaceId.trim())\n return unchanged(state);\n const commands = normalizeCommands(intent.commands);\n const current = state.bySessionId[id];\n if (\n current?.workspaceId === intent.workspaceId.trim() &&\n commandListsEqual(current.commands, commands)\n )\n return unchanged(state);\n return {\n commands: NO_COMMANDS,\n state: {\n bySessionId: {\n ...state.bySessionId,\n [id]: { commands, workspaceId: intent.workspaceId.trim() }\n }\n }\n };\n }\n if (intent.type === \"session/removed\") {\n const id = intent.agentSessionId.trim();\n if (!state.bySessionId[id]) return unchanged(state);\n const bySessionId = { ...state.bySessionId };\n delete bySessionId[id];\n return { commands: NO_COMMANDS, state: { bySessionId } };\n }\n return unchanged(state);\n}\n\nfunction normalizeCommands(values: readonly unknown[]) {\n const byName = new Map<\n string,\n import(\"./sessionCommands.types.ts\").AgentSessionAvailableCommand\n >();\n for (const value of values) {\n if (!value || typeof value !== \"object\") continue;\n const candidate = value as {\n name?: unknown;\n description?: unknown;\n inputHint?: unknown;\n };\n const name =\n typeof candidate.name === \"string\" ? candidate.name.trim() : \"\";\n if (!name || byName.has(name)) continue;\n byName.set(name, {\n name,\n ...(typeof candidate.description === \"string\" &&\n candidate.description.trim()\n ? { description: candidate.description.trim() }\n : {}),\n ...(typeof candidate.inputHint === \"string\" && candidate.inputHint.trim()\n ? { inputHint: candidate.inputHint.trim() }\n : {})\n });\n }\n return [...byName.values()];\n}\n\nfunction commandListsEqual(\n left: readonly import(\"./sessionCommands.types.ts\").AgentSessionAvailableCommand[],\n right: readonly import(\"./sessionCommands.types.ts\").AgentSessionAvailableCommand[]\n) {\n return (\n left.length === right.length &&\n left.every((value, index) => {\n const other = right[index];\n return (\n value.name === other?.name &&\n value.description === other.description &&\n value.inputHint === other.inputHint\n );\n })\n );\n}\n\nfunction unchanged(\n state: SessionCommandsState\n): EngineReducerResult<SessionCommandsState> {\n return { commands: NO_COMMANDS, state };\n}\n","import type { AgentActivitySessionMessageWindow } from \"../messageWindow.types.ts\";\nimport type { AgentActivityMessage } from \"../types.ts\";\nimport {\n areAgentActivityMessageArraysEqual,\n mergeAgentActivityMessages\n} from \"../merge.ts\";\nimport type { EngineIntent, EngineReducerResult } from \"./types.ts\";\nimport type { SessionMessagesState } from \"./sessionMessages.types.ts\";\n\nconst NO_COMMANDS = [] as const;\n\n/**\n * Minimal session identity the message store needs to resolve a provisional or\n * provider-scoped session id back to its canonical `agentSessionId`. Sourced\n * from the session lifecycle slice via reducer context so the message store\n * stays the single owner of message buckets without duplicating session state.\n */\nexport interface SessionMessagesSessionIdentity {\n agentSessionId: string;\n provider: string;\n providerSessionId?: string | null;\n}\n\nexport interface SessionMessagesReducerContext {\n previousSessionsById?: Readonly<\n Record<string, SessionMessagesSessionIdentity>\n >;\n sessionsById: Readonly<Record<string, SessionMessagesSessionIdentity>>;\n}\n\nexport function createInitialSessionMessagesState(): SessionMessagesState {\n return { messagesBySessionId: {}, windowsBySessionId: {} };\n}\n\nexport function sessionMessagesReducer(\n state: SessionMessagesState,\n intent: EngineIntent,\n context: SessionMessagesReducerContext = { sessionsById: {} }\n): EngineReducerResult<SessionMessagesState> {\n switch (intent.type) {\n case \"message/snapshotReceived\":\n return mergeIncomingMessages(\n state,\n context,\n intent.messages,\n intent.sessionMessageWindows ?? []\n );\n case \"session/snapshotReceived\":\n case \"session/upserted\":\n return canonicalizeSessionBuckets(state, context.sessionsById);\n case \"session/removed\":\n return dropSessionBuckets(\n state,\n context.previousSessionsById ?? context.sessionsById,\n intent.agentSessionId\n );\n default:\n return unchanged(state);\n }\n}\n\nfunction mergeIncomingMessages(\n state: SessionMessagesState,\n context: SessionMessagesReducerContext,\n messages: readonly AgentActivityMessage[],\n windows: readonly (AgentActivitySessionMessageWindow & {\n agentSessionId: string;\n })[]\n): EngineReducerResult<SessionMessagesState> {\n const bySessionId = new Map<string, AgentActivityMessage[]>();\n for (const message of messages) {\n const rawId = message.agentSessionId.trim();\n if (!rawId) continue;\n const bucket = bySessionId.get(rawId);\n if (bucket) bucket.push(message);\n else bySessionId.set(rawId, [message]);\n }\n let next = state.messagesBySessionId;\n for (const [rawId, sessionMessages] of bySessionId) {\n next = mergeSessionMessages(next, context, rawId, sessionMessages);\n }\n let nextWindows = state.windowsBySessionId;\n for (const window of windows) {\n nextWindows = mergeSessionMessageWindow(nextWindows, context, window);\n }\n return next === state.messagesBySessionId &&\n nextWindows === state.windowsBySessionId\n ? unchanged(state)\n : changed({\n messagesBySessionId: next,\n windowsBySessionId: nextWindows\n });\n}\n\nfunction mergeSessionMessageWindow(\n windowsBySessionId: Readonly<\n Record<string, Readonly<AgentActivitySessionMessageWindow>>\n >,\n context: SessionMessagesReducerContext,\n input: AgentActivitySessionMessageWindow & { agentSessionId: string }\n): Readonly<Record<string, Readonly<AgentActivitySessionMessageWindow>>> {\n const rawAgentSessionId = input.agentSessionId.trim();\n const canonicalAgentSessionId = resolveCanonicalAgentSessionId(\n context.sessionsById,\n rawAgentSessionId\n );\n if (!canonicalAgentSessionId) return windowsBySessionId;\n const nextWindow = {\n hasOlderMessages: input.hasOlderMessages,\n oldestLoadedVersion: input.oldestLoadedVersion\n };\n const current = windowsBySessionId[canonicalAgentSessionId];\n const hasAliasBucket =\n rawAgentSessionId !== canonicalAgentSessionId &&\n Object.prototype.hasOwnProperty.call(windowsBySessionId, rawAgentSessionId);\n if (\n current?.hasOlderMessages === nextWindow.hasOlderMessages &&\n current.oldestLoadedVersion === nextWindow.oldestLoadedVersion\n ) {\n return hasAliasBucket\n ? deleteBucket(windowsBySessionId, rawAgentSessionId)\n : windowsBySessionId;\n }\n const next = {\n ...windowsBySessionId,\n [canonicalAgentSessionId]: nextWindow\n };\n if (hasAliasBucket) delete next[rawAgentSessionId];\n return next;\n}\n\n/**\n * Merge a batch of one session's messages into its canonical bucket. Ports the\n * monotonic, alias-collapsing merge that previously lived in the controller\n * snapshot: a provisional-id bucket is folded into the canonical bucket and\n * removed once the session's canonical identity is known.\n */\nfunction mergeSessionMessages(\n messagesBySessionId: Readonly<\n Record<string, readonly AgentActivityMessage[]>\n >,\n context: SessionMessagesReducerContext,\n rawAgentSessionId: string,\n messages: readonly AgentActivityMessage[]\n): Readonly<Record<string, readonly AgentActivityMessage[]>> {\n const canonicalAgentSessionId = resolveCanonicalAgentSessionId(\n context.sessionsById,\n rawAgentSessionId\n );\n if (!canonicalAgentSessionId || messages.length === 0) {\n return messagesBySessionId;\n }\n const currentMessages = messagesBySessionId[canonicalAgentSessionId] ?? [];\n const hasAliasBucket =\n rawAgentSessionId !== \"\" &&\n rawAgentSessionId !== canonicalAgentSessionId &&\n Object.prototype.hasOwnProperty.call(\n messagesBySessionId,\n rawAgentSessionId\n );\n const aliasMessages = hasAliasBucket\n ? (messagesBySessionId[rawAgentSessionId] ?? [])\n : [];\n const currentCanonicalMessages =\n aliasMessages.length > 0\n ? mergeAgentActivityMessages(\n currentMessages,\n canonicalizeMessages(aliasMessages, canonicalAgentSessionId)\n )\n : currentMessages;\n const mergedMessages = mergeAgentActivityMessages(\n currentCanonicalMessages,\n canonicalizeMessages(messages, canonicalAgentSessionId)\n );\n if (areAgentActivityMessageArraysEqual(currentMessages, mergedMessages)) {\n return hasAliasBucket\n ? deleteBucket(messagesBySessionId, rawAgentSessionId)\n : messagesBySessionId;\n }\n const next = {\n ...messagesBySessionId,\n [canonicalAgentSessionId]: mergedMessages\n };\n if (hasAliasBucket) {\n delete next[rawAgentSessionId];\n }\n return next;\n}\n\nfunction canonicalizeSessionBuckets(\n state: SessionMessagesState,\n sessionsById: Readonly<Record<string, SessionMessagesSessionIdentity>>\n): EngineReducerResult<SessionMessagesState> {\n let nextMessages = state.messagesBySessionId;\n for (const [rawAgentSessionId, messages] of Object.entries(\n state.messagesBySessionId\n )) {\n const canonicalAgentSessionId = resolveCanonicalAgentSessionId(\n sessionsById,\n rawAgentSessionId\n );\n if (\n !canonicalAgentSessionId ||\n canonicalAgentSessionId === rawAgentSessionId\n ) {\n continue;\n }\n const merged = mergeAgentActivityMessages(\n nextMessages[canonicalAgentSessionId] ?? [],\n canonicalizeMessages(messages, canonicalAgentSessionId)\n );\n nextMessages = deleteBucket(\n {\n ...nextMessages,\n [canonicalAgentSessionId]: merged\n },\n rawAgentSessionId\n );\n }\n let nextWindows = state.windowsBySessionId;\n for (const [rawAgentSessionId, window] of Object.entries(\n state.windowsBySessionId\n )) {\n const canonicalAgentSessionId = resolveCanonicalAgentSessionId(\n sessionsById,\n rawAgentSessionId\n );\n if (\n !canonicalAgentSessionId ||\n canonicalAgentSessionId === rawAgentSessionId\n ) {\n continue;\n }\n nextWindows = deleteBucket(\n {\n ...nextWindows,\n [canonicalAgentSessionId]:\n nextWindows[canonicalAgentSessionId] ?? window\n },\n rawAgentSessionId\n );\n }\n return nextMessages === state.messagesBySessionId &&\n nextWindows === state.windowsBySessionId\n ? unchanged(state)\n : changed({\n messagesBySessionId: nextMessages,\n windowsBySessionId: nextWindows\n });\n}\n\nfunction dropSessionBuckets(\n state: SessionMessagesState,\n sessionsById: Readonly<Record<string, SessionMessagesSessionIdentity>>,\n rawAgentSessionId: string\n): EngineReducerResult<SessionMessagesState> {\n const id = rawAgentSessionId.trim();\n if (!id) {\n return unchanged(state);\n }\n const session = sessionsById[id];\n const removableIds = new Set([id]);\n const providerSessionId = session?.providerSessionId?.trim() ?? \"\";\n if (\n providerSessionId &&\n resolveCanonicalAgentSessionId(\n sessionsById,\n providerSessionId,\n session?.provider\n ) === id\n ) {\n removableIds.add(providerSessionId);\n }\n let nextMessages = state.messagesBySessionId;\n let nextWindows = state.windowsBySessionId;\n for (const removableId of removableIds) {\n if (Object.prototype.hasOwnProperty.call(nextMessages, removableId)) {\n nextMessages = deleteBucket(nextMessages, removableId);\n }\n if (Object.prototype.hasOwnProperty.call(nextWindows, removableId)) {\n nextWindows = deleteBucket(nextWindows, removableId);\n }\n }\n return nextMessages === state.messagesBySessionId &&\n nextWindows === state.windowsBySessionId\n ? unchanged(state)\n : changed({\n messagesBySessionId: nextMessages,\n windowsBySessionId: nextWindows\n });\n}\n\n/**\n * Resolve a raw session id (which may be a provisional id or a provider session\n * id) to its canonical `agentSessionId`. Falls back to the raw id when no\n * unambiguous canonical session is known yet.\n */\nexport function resolveCanonicalAgentSessionId(\n sessionsById: Readonly<Record<string, SessionMessagesSessionIdentity>>,\n rawAgentSessionId: string | null | undefined,\n provider?: string | null\n): string {\n const normalizedAgentSessionId = rawAgentSessionId?.trim() ?? \"\";\n if (!normalizedAgentSessionId) return \"\";\n if (sessionsById[normalizedAgentSessionId]) {\n return normalizedAgentSessionId;\n }\n const normalizedProvider = provider?.trim() ?? \"\";\n const candidates = Object.values(sessionsById).filter((session) => {\n if (session.providerSessionId?.trim() !== normalizedAgentSessionId) {\n return false;\n }\n return (\n !normalizedProvider || session.provider.trim() === normalizedProvider\n );\n });\n return candidates.length === 1\n ? candidates[0]!.agentSessionId.trim()\n : normalizedAgentSessionId;\n}\n\nfunction canonicalizeMessages(\n messages: readonly AgentActivityMessage[],\n agentSessionId: string\n): AgentActivityMessage[] {\n return messages.map((message) =>\n message.agentSessionId === agentSessionId\n ? message\n : { ...message, agentSessionId }\n );\n}\n\nfunction deleteBucket<T>(\n bucketsBySessionId: Readonly<Record<string, T>>,\n agentSessionId: string\n): Record<string, T> {\n const next = { ...bucketsBySessionId };\n delete next[agentSessionId];\n return next;\n}\n\nfunction changed(\n state: SessionMessagesState\n): EngineReducerResult<SessionMessagesState> {\n return { commands: NO_COMMANDS, state };\n}\n\nfunction unchanged(\n state: SessionMessagesState\n): EngineReducerResult<SessionMessagesState> {\n return { commands: NO_COMMANDS, state };\n}\n","import { cloneJSONValue } from \"../activityValueParsing.ts\";\nimport type {\n AgentActivityComposerOptions,\n AgentActivityComposerSettings\n} from \"../types.ts\";\n\nexport function cloneAgentActivityComposerOptions(\n options: AgentActivityComposerOptions\n): AgentActivityComposerOptions {\n return {\n provider: options.provider,\n capabilities: options.capabilities ? { ...options.capabilities } : null,\n models: options.models.map((option) => ({ ...option })),\n reasoningEfforts: options.reasoningEfforts.map((option) => ({ ...option })),\n reasoningOptionsByModel: options.reasoningOptionsByModel\n ? Object.fromEntries(\n Object.entries(options.reasoningOptionsByModel).map(\n ([model, profile]) => [\n model,\n {\n ...profile,\n options: profile.options.map((option) => ({ ...option }))\n }\n ]\n )\n )\n : undefined,\n speeds: (options.speeds ?? []).map((option) => ({ ...option })),\n modelConfigurable: options.modelConfigurable ?? false,\n reasoningConfigurable: options.reasoningConfigurable ?? false,\n speedConfigurable: options.speedConfigurable ?? false,\n effectiveSettings: options.effectiveSettings\n ? { ...options.effectiveSettings }\n : (options.effectiveSettings ?? null),\n permissionConfig: cloneJSONValue(\n options.permissionConfig ?? null\n ) as AgentActivityComposerOptions[\"permissionConfig\"],\n draftAgentSessionId: options.draftAgentSessionId ?? null,\n modelOptionsLoading: options.modelOptionsLoading,\n skills: options.skills.map((skill) => ({ ...skill })),\n capabilityCatalog: (options.capabilityCatalog ?? []).map((capability) => ({\n ...capability\n })),\n behavior: { ...options.behavior },\n slashCommandPolicy: cloneJSONValue(\n options.slashCommandPolicy ?? null\n ) as AgentActivityComposerOptions[\"slashCommandPolicy\"],\n loadedAtUnixMs: options.loadedAtUnixMs\n };\n}\n\nexport function areComposerOptionsEqual(\n left: AgentActivityComposerOptions,\n right: AgentActivityComposerOptions\n): boolean {\n const { loadedAtUnixMs: _leftLoadedAtUnixMs, ...leftComparable } = left;\n const { loadedAtUnixMs: _rightLoadedAtUnixMs, ...rightComparable } = right;\n return JSON.stringify(leftComparable) === JSON.stringify(rightComparable);\n}\n\n/**\n * Deterministic signature of a composer-options request. Two requests with the\n * same signature are interchangeable, so a settled result can satisfy a repeat\n * and an in-flight load can be deduplicated. Ported verbatim from the former\n * imperative cache coordinator.\n */\nexport function composerOptionsRequestSignature(input: {\n provider?: string;\n cwd?: string | null;\n settings?: AgentActivityComposerSettings | null;\n}): string {\n const settings = input.settings;\n const normalizedText = (value: string | null | undefined): string | null =>\n value?.trim() || null;\n return JSON.stringify({\n provider: input.provider?.trim() ?? \"\",\n cwd: input.cwd?.trim() ?? \"\",\n settings: {\n model: normalizedText(settings?.model),\n reasoningEffort: normalizedText(settings?.reasoningEffort),\n speed: normalizedText(settings?.speed),\n planMode:\n typeof settings?.planMode === \"boolean\" ? settings.planMode : null,\n permissionModeId: normalizedText(settings?.permissionModeId)\n }\n });\n}\n","import type { AgentActivityComposerOptions } from \"../types.ts\";\nimport type {\n EngineCommand,\n EngineIntent,\n EngineReducerResult\n} from \"./types.ts\";\nimport type {\n ComposerOptionsEntry,\n ComposerOptionsLoadRequestedIntent,\n ComposerOptionsState\n} from \"./composerOptions.types.ts\";\nimport {\n areComposerOptionsEqual,\n cloneAgentActivityComposerOptions,\n composerOptionsRequestSignature\n} from \"./composerOptions.helpers.ts\";\n\nconst NO_COMMANDS: readonly EngineCommand[] = [];\n\nexport function createInitialComposerOptionsState(): ComposerOptionsState {\n return { optionsByTargetKey: {}, entriesByTargetKey: {} };\n}\n\nexport function composerOptionsReducer(\n state: ComposerOptionsState,\n intent: EngineIntent\n): EngineReducerResult<ComposerOptionsState> {\n switch (intent.type) {\n case \"composerOptions/loadRequested\":\n return requestLoad(state, intent);\n case \"composerOptions/invalidated\":\n return invalidate(state, intent.providers, intent.targetKeys);\n case \"engine/commandResult\":\n return intent.commandType === \"composerOptions/load\"\n ? settleLoad(state, intent)\n : unchanged(state);\n default:\n return unchanged(state);\n }\n}\n\nfunction requestLoad(\n state: ComposerOptionsState,\n intent: ComposerOptionsLoadRequestedIntent\n): EngineReducerResult<ComposerOptionsState> {\n const targetKey = intent.targetKey.trim();\n const provider = intent.provider.trim();\n const workspaceId = intent.workspaceId.trim();\n const commandId = intent.commandId.trim();\n if (!targetKey || !provider || !workspaceId || !commandId) {\n return unchanged(state);\n }\n const signature = composerOptionsRequestSignature({\n provider,\n cwd: intent.cwd,\n settings: intent.settings\n });\n const current = state.entriesByTargetKey[targetKey];\n if (!intent.force && current) {\n const cacheHit =\n current.status === \"ready\" && current.settledSignature === signature;\n const inFlightDuplicate =\n current.status === \"loading\" && current.loadingSignature === signature;\n if (cacheHit || inFlightDuplicate) {\n return unchanged(state);\n }\n }\n const entry: ComposerOptionsEntry = {\n status: \"loading\",\n provider,\n loadingSignature: signature,\n settledSignature: current?.settledSignature ?? null,\n loadVersion: (current?.loadVersion ?? 0) + 1,\n inFlightCommandId: commandId\n };\n return {\n commands: [\n {\n type: \"composerOptions/load\",\n commandId,\n correlationId: targetKey,\n targetKey,\n provider,\n workspaceId,\n ...(intent.cwd !== undefined ? { cwd: intent.cwd } : {}),\n ...(intent.settings !== undefined ? { settings: intent.settings } : {})\n }\n ],\n state: replaceEntry(state, targetKey, entry)\n };\n}\n\nfunction settleLoad(\n state: ComposerOptionsState,\n intent: Extract<EngineIntent, { type: \"engine/commandResult\" }>\n): EngineReducerResult<ComposerOptionsState> {\n const targetKey = intent.correlationId?.trim() ?? \"\";\n const current = state.entriesByTargetKey[targetKey];\n // A superseded load carries a stale commandId; ignore it so a late result\n // never clobbers a newer request. Invalidation deliberately keeps the active\n // command attached so its caller still receives a terminal result.\n if (!current || current.inFlightCommandId !== intent.commandId) {\n return unchanged(state);\n }\n if (intent.outcome !== \"succeeded\") {\n return changed(\n replaceEntry(state, targetKey, {\n ...current,\n status: \"error\",\n loadingSignature: null,\n inFlightCommandId: null\n })\n );\n }\n const options = composerOptionsFromValue(intent.value);\n if (!options) {\n return changed(\n replaceEntry(state, targetKey, {\n ...current,\n status: \"error\",\n loadingSignature: null,\n inFlightCommandId: null\n })\n );\n }\n const settledEntry: ComposerOptionsEntry = {\n ...current,\n status: \"ready\",\n settledSignature: current.loadingSignature,\n loadingSignature: null,\n inFlightCommandId: null\n };\n const existing = state.optionsByTargetKey[targetKey];\n const optionsUnchanged = Boolean(\n existing && areComposerOptionsEqual(existing, options)\n );\n return changed({\n entriesByTargetKey: {\n ...state.entriesByTargetKey,\n [targetKey]: settledEntry\n },\n optionsByTargetKey: optionsUnchanged\n ? state.optionsByTargetKey\n : {\n ...state.optionsByTargetKey,\n [targetKey]: cloneAgentActivityComposerOptions(options)\n }\n });\n}\n\nfunction invalidate(\n state: ComposerOptionsState,\n providers: readonly string[] | undefined,\n targetKeys: readonly string[] | undefined\n): EngineReducerResult<ComposerOptionsState> {\n const providerSet = providers?.length ? new Set(providers) : null;\n const targetKeySet = targetKeys?.length\n ? new Set(targetKeys.map((value) => value.trim()).filter(Boolean))\n : null;\n let entriesByTargetKey: Record<string, ComposerOptionsEntry> | null = null;\n for (const [targetKey, entry] of Object.entries(state.entriesByTargetKey)) {\n const matches =\n (providerSet === null && targetKeySet === null) ||\n providerSet?.has(entry.provider) === true ||\n targetKeySet?.has(targetKey) === true;\n if (!matches) continue;\n entriesByTargetKey ??= { ...state.entriesByTargetKey };\n entriesByTargetKey[targetKey] = {\n ...entry,\n // Drop cache validity so a subsequent request refetches. Keep an active\n // command attached: its caller still needs a terminal result, while the\n // cleared loading signature prevents a post-invalidation dedupe.\n settledSignature: null,\n loadingSignature: null,\n loadVersion: entry.loadVersion + 1\n };\n }\n return entriesByTargetKey\n ? changed({ ...state, entriesByTargetKey })\n : unchanged(state);\n}\n\nfunction composerOptionsFromValue(\n value: unknown\n): AgentActivityComposerOptions | null {\n if (!value || typeof value !== \"object\") return null;\n const candidate = value as Partial<AgentActivityComposerOptions>;\n return typeof candidate[\"provider\"] === \"string\"\n ? (value as AgentActivityComposerOptions)\n : null;\n}\n\nfunction replaceEntry(\n state: ComposerOptionsState,\n targetKey: string,\n entry: ComposerOptionsEntry\n): ComposerOptionsState {\n return {\n ...state,\n entriesByTargetKey: { ...state.entriesByTargetKey, [targetKey]: entry }\n };\n}\n\nfunction changed(\n state: ComposerOptionsState\n): EngineReducerResult<ComposerOptionsState> {\n return { commands: NO_COMMANDS, state };\n}\n\nfunction unchanged(\n state: ComposerOptionsState\n): EngineReducerResult<ComposerOptionsState> {\n return { commands: NO_COMMANDS, state };\n}\n","import type { AgentActivitySession } from \"../types.ts\";\nimport type { CanonicalAgentSession } from \"./sessionLifecycle.types.ts\";\nimport type {\n EngineCommand,\n EngineIntent,\n EngineReducerResult\n} from \"./types.ts\";\nimport type {\n SessionDeleteMutationResult,\n SessionMutationRecord,\n SessionMutationsState\n} from \"./sessionMutations.types.ts\";\n\nconst NO_COMMANDS: readonly EngineCommand[] = [];\nconst MAX_SETTLED_SESSION_MUTATIONS = 128;\n\nexport function createInitialSessionMutationsState(): SessionMutationsState {\n return { byMutationId: {} };\n}\n\nexport function sessionMutationsReducer(\n state: SessionMutationsState,\n intent: EngineIntent,\n context: {\n deletedSessionIds: Readonly<Record<string, true>>;\n sessionsById: Readonly<Record<string, CanonicalAgentSession>>;\n }\n): EngineReducerResult<SessionMutationsState> {\n if (intent.type === \"session/pinRequested\") {\n return requestPin(state, intent, context);\n }\n if (intent.type === \"sessions/deleteRequested\") {\n return requestDelete(state, intent, context);\n }\n if (intent.type !== \"engine/commandResult\") return unchanged(state);\n if (\n intent.commandType !== \"session/setPinned\" &&\n intent.commandType !== \"sessions/delete\"\n ) {\n return unchanged(state);\n }\n const mutationId = intent.correlationId?.trim() ?? \"\";\n const record = state.byMutationId[mutationId];\n if (\n !record ||\n record.commandId !== intent.commandId ||\n record.status !== \"inFlight\" ||\n (record.kind === \"pin\" && intent.commandType !== \"session/setPinned\") ||\n (record.kind === \"delete\" && intent.commandType !== \"sessions/delete\")\n ) {\n return unchanged(state);\n }\n if (intent.outcome === \"failed\") {\n return replaceRecord(state, {\n ...record,\n errorCode: intent.errorCode ?? null,\n errorMessage: intent.errorMessage?.trim() || null,\n status: \"failed\"\n });\n }\n if (intent.outcome === \"timedOut\") {\n return replaceRecord(state, {\n ...record,\n errorCode: \"timeout\",\n errorMessage: intent.errorMessage?.trim() || null,\n status: \"unknown\"\n });\n }\n if (record.kind === \"pin\") {\n const session = validPinResult(intent.value, record);\n if (!session) return invalidResult(state, record);\n return {\n commands: NO_COMMANDS,\n followUpIntents: [{ session, type: \"session/upserted\" }],\n state: withRecord(state, { ...record, status: \"succeeded\" })\n };\n }\n const deleteResult = validDeleteResult(intent.value);\n if (!deleteResult) return invalidResult(state, record);\n const removedSessionIds = [\n ...new Set([...record.agentSessionIds, ...deleteResult.removedSessionIds])\n ];\n return {\n commands: NO_COMMANDS,\n followUpIntents: removedSessionIds.map((agentSessionId) => ({\n agentSessionId,\n type: \"session/removed\" as const\n })),\n state: withRecord(state, {\n ...record,\n deleteResult,\n status: \"succeeded\"\n })\n };\n}\n\nfunction requestPin(\n state: SessionMutationsState,\n intent: Extract<EngineIntent, { type: \"session/pinRequested\" }>,\n context: {\n deletedSessionIds: Readonly<Record<string, true>>;\n sessionsById: Readonly<Record<string, CanonicalAgentSession>>;\n }\n): EngineReducerResult<SessionMutationsState> {\n const mutationId = intent.mutationId.trim();\n const agentSessionId = intent.agentSessionId.trim();\n const workspaceId = intent.workspaceId.trim();\n const session = context.sessionsById[agentSessionId];\n if (\n !mutationId ||\n !agentSessionId ||\n !workspaceId ||\n state.byMutationId[mutationId] ||\n context.deletedSessionIds[agentSessionId] ||\n session?.workspaceId !== workspaceId ||\n hasInFlightOverlap(state, [agentSessionId])\n ) {\n return unchanged(state);\n }\n const record: Extract<SessionMutationRecord, { kind: \"pin\" }> = {\n agentSessionIds: [agentSessionId],\n commandId: mutationId,\n errorCode: null,\n errorMessage: null,\n kind: \"pin\",\n mutationId,\n pinned: intent.pinned,\n status: \"inFlight\",\n workspaceId\n };\n const currentlyPinned = session.pinnedAtUnixMs != null;\n if (currentlyPinned === intent.pinned) {\n return replaceRecord(state, { ...record, status: \"succeeded\" });\n }\n return {\n commands: [\n {\n agentSessionId,\n commandId: mutationId,\n correlationId: mutationId,\n pinned: intent.pinned,\n ...(intent.timeoutMs === undefined\n ? {}\n : { timeoutMs: intent.timeoutMs }),\n type: \"session/setPinned\",\n workspaceId\n }\n ],\n state: withRequestedRecord(state, record)\n };\n}\n\nfunction requestDelete(\n state: SessionMutationsState,\n intent: Extract<EngineIntent, { type: \"sessions/deleteRequested\" }>,\n context: {\n deletedSessionIds: Readonly<Record<string, true>>;\n sessionsById: Readonly<Record<string, CanonicalAgentSession>>;\n }\n): EngineReducerResult<SessionMutationsState> {\n const mutationId = intent.mutationId.trim();\n const workspaceId = intent.workspaceId.trim();\n const agentSessionIds: string[] = [\n ...new Set(intent.agentSessionIds.map((id) => id.trim()).filter(Boolean))\n ];\n if (\n !mutationId ||\n !workspaceId ||\n agentSessionIds.length === 0 ||\n state.byMutationId[mutationId] ||\n hasInFlightOverlap(state, agentSessionIds) ||\n agentSessionIds.some((id) => {\n const session = context.sessionsById[id];\n return session !== undefined && session.workspaceId !== workspaceId;\n })\n ) {\n return unchanged(state);\n }\n const liveSessionIds = agentSessionIds.filter(\n (id) => !context.deletedSessionIds[id]\n );\n const record: Extract<SessionMutationRecord, { kind: \"delete\" }> = {\n agentSessionIds,\n commandId: mutationId,\n deleteResult: null,\n errorCode: null,\n errorMessage: null,\n kind: \"delete\",\n mutationId,\n status: \"inFlight\",\n workspaceId\n };\n if (liveSessionIds.length === 0) {\n return replaceRecord(state, {\n ...record,\n deleteResult: {\n cleanupFailedSessionIds: [],\n removedMessages: 0,\n removedSessionIds: [],\n removedSessions: 0\n },\n status: \"succeeded\"\n });\n }\n return {\n commands: [\n {\n agentSessionIds: liveSessionIds,\n commandId: mutationId,\n correlationId: mutationId,\n ...(intent.timeoutMs === undefined\n ? {}\n : { timeoutMs: intent.timeoutMs }),\n type: \"sessions/delete\",\n workspaceId\n }\n ],\n state: withRequestedRecord(state, record)\n };\n}\n\nfunction hasInFlightOverlap(\n state: SessionMutationsState,\n agentSessionIds: readonly string[]\n): boolean {\n const ids = new Set(agentSessionIds);\n return Object.values(state.byMutationId).some(\n (record) =>\n record.status === \"inFlight\" &&\n record.agentSessionIds.some((id) => ids.has(id))\n );\n}\n\nfunction validPinResult(\n value: unknown,\n record: Extract<SessionMutationRecord, { kind: \"pin\" }>\n): AgentActivitySession | null {\n if (!value || typeof value !== \"object\") return null;\n const session = (value as { session?: Partial<AgentActivitySession> })\n .session;\n return session?.agentSessionId?.trim() === record.agentSessionIds[0] &&\n session.workspaceId?.trim() === record.workspaceId &&\n Array.isArray(session.latestTurnInteractions) &&\n Array.isArray(session.pendingInteractions)\n ? (session as AgentActivitySession)\n : null;\n}\n\nfunction validDeleteResult(value: unknown): SessionDeleteMutationResult | null {\n if (!value || typeof value !== \"object\") return null;\n const result = value as Partial<SessionDeleteMutationResult>;\n if (\n typeof result.removedMessages !== \"number\" ||\n typeof result.removedSessions !== \"number\" ||\n !Array.isArray(result.cleanupFailedSessionIds) ||\n !result.cleanupFailedSessionIds.every((id) => typeof id === \"string\") ||\n !Array.isArray(result.removedSessionIds) ||\n !result.removedSessionIds.every((id) => typeof id === \"string\")\n ) {\n return null;\n }\n return {\n cleanupFailedSessionIds: result.cleanupFailedSessionIds.map((id) =>\n id.trim()\n ),\n removedMessages: result.removedMessages,\n removedSessionIds: result.removedSessionIds.map((id) => id.trim()),\n removedSessions: result.removedSessions\n };\n}\n\nfunction invalidResult(\n state: SessionMutationsState,\n record: SessionMutationRecord\n): EngineReducerResult<SessionMutationsState> {\n return replaceRecord(state, {\n ...record,\n errorCode: \"invalid_command_result\",\n errorMessage: null,\n status: \"unknown\"\n });\n}\n\nfunction replaceRecord(\n state: SessionMutationsState,\n record: SessionMutationRecord\n): EngineReducerResult<SessionMutationsState> {\n return { commands: NO_COMMANDS, state: withRecord(state, record) };\n}\n\nfunction withRecord(\n state: SessionMutationsState,\n record: SessionMutationRecord\n): SessionMutationsState {\n return boundedMutationState(\n { ...state.byMutationId, [record.mutationId]: record },\n record.mutationId\n );\n}\n\nfunction withRequestedRecord(\n state: SessionMutationsState,\n record: SessionMutationRecord\n): SessionMutationsState {\n const ids = new Set(record.agentSessionIds);\n return boundedMutationState(\n {\n ...Object.fromEntries(\n Object.entries(state.byMutationId).filter(\n ([, current]) =>\n current.status === \"inFlight\" ||\n !current.agentSessionIds.some((id) => ids.has(id))\n )\n ),\n [record.mutationId]: record\n },\n record.mutationId\n );\n}\n\nfunction boundedMutationState(\n records: Readonly<Record<string, SessionMutationRecord>>,\n currentMutationId: string\n): SessionMutationsState {\n const entries = Object.entries(records);\n const settled = entries.filter(([, record]) => record.status !== \"inFlight\");\n const retainedSettledIds = new Set(\n settled\n .filter(([mutationId]) => mutationId !== currentMutationId)\n .slice(-(MAX_SETTLED_SESSION_MUTATIONS - 1))\n .map(([mutationId]) => mutationId)\n );\n retainedSettledIds.add(currentMutationId);\n return {\n byMutationId: Object.fromEntries(\n entries.filter(\n ([mutationId, record]) =>\n record.status === \"inFlight\" || retainedSettledIds.has(mutationId)\n )\n )\n };\n}\n\nfunction unchanged(\n state: SessionMutationsState\n): EngineReducerResult<SessionMutationsState> {\n return { commands: NO_COMMANDS, state };\n}\n","import type { AgentActivitySession } from \"../types.ts\";\nimport type {\n EngineCommand,\n EngineIntent,\n EngineReducerResult\n} from \"./types.ts\";\nimport type { CanonicalAgentSession } from \"./sessionLifecycle.types.ts\";\nimport type {\n TuttiModeActivationState,\n TuttiModeActivationUpdateRecord\n} from \"./tuttiModeActivation.types.ts\";\n\nconst NO_COMMANDS: readonly EngineCommand[] = [];\nconst UPDATE_TIMEOUT_MS = 15_000;\n\ninterface TuttiModeActivationReducerContext {\n sessionsById: Readonly<Record<string, CanonicalAgentSession>>;\n}\n\nexport function createInitialTuttiModeActivationState(): TuttiModeActivationState {\n return {\n activationsBySessionId: {},\n draftsByKey: {},\n pendingCreatesBySessionId: {},\n updatesBySessionId: {}\n };\n}\n\nexport function tuttiModeActivationReducer(\n state: TuttiModeActivationState,\n intent: EngineIntent,\n context: TuttiModeActivationReducerContext\n): EngineReducerResult<TuttiModeActivationState> {\n switch (intent.type) {\n case \"tuttiMode/draftSet\":\n return setDraft(state, intent);\n case \"tuttiMode/updateRequested\":\n return requestUpdate(state, intent, context.sessionsById);\n case \"activation/requested\":\n return trackPendingCreate(state, intent);\n case \"engine/commandResult\":\n if (intent.commandType === \"tuttiMode/update\") {\n return settleUpdate(state, intent);\n }\n if (intent.commandType === \"session/activate\") {\n return settlePendingCreate(state, intent);\n }\n if (intent.commandType === \"session/reconcile\") {\n return settleOwnedReconcile(state, intent, context.sessionsById);\n }\n return unchanged(state);\n case \"engine/intentExpired\":\n return expirePendingCreate(state, intent.expiryId);\n case \"session/snapshotReceived\":\n return hydrateSessions(\n state,\n intent.sessions.map((session) => session.agentSessionId),\n context.sessionsById\n );\n case \"session/upserted\":\n return hydrateSessions(\n state,\n [intent.session.agentSessionId],\n context.sessionsById\n );\n case \"session/removed\":\n return removeSession(state, intent.agentSessionId);\n default:\n return unchanged(state);\n }\n}\n\nfunction setDraft(\n state: TuttiModeActivationState,\n intent: Extract<EngineIntent, { type: \"tuttiMode/draftSet\" }>\n): EngineReducerResult<TuttiModeActivationState> {\n const draftKey = intent.draftKey.trim();\n if (!draftKey) return unchanged(state);\n if (!intent.active) {\n if (!state.draftsByKey[draftKey]) return unchanged(state);\n const draftsByKey = { ...state.draftsByKey };\n delete draftsByKey[draftKey];\n return { commands: NO_COMMANDS, state: { ...state, draftsByKey } };\n }\n const current = state.draftsByKey[draftKey];\n // undefined 保留既有强度;显式 null/非法值归一化为 null(daemon 默认)。\n const orchestrationIntensity =\n intent.orchestrationIntensity === undefined\n ? (current?.orchestrationIntensity ?? null)\n : normalizeOrchestrationIntensity(intent.orchestrationIntensity);\n if (\n current?.active &&\n current.orchestrationIntensity === orchestrationIntensity\n ) {\n return unchanged(state);\n }\n return {\n commands: NO_COMMANDS,\n state: {\n ...state,\n draftsByKey: {\n ...state.draftsByKey,\n [draftKey]: {\n active: true,\n draftKey,\n occurredAtUnixMs: intent.occurredAtUnixMs,\n orchestrationIntensity,\n source: \"slash_command\"\n }\n }\n }\n };\n}\n\nfunction trackPendingCreate(\n state: TuttiModeActivationState,\n intent: Extract<EngineIntent, { type: \"activation/requested\" }>\n): EngineReducerResult<TuttiModeActivationState> {\n if (\n intent.mode !== \"new\" ||\n !intent.initialTuttiModeActivation ||\n !intent.tuttiModeDraftKey?.trim()\n ) {\n return unchanged(state);\n }\n const agentSessionId = intent.agentSessionId.trim();\n const draftKey = intent.tuttiModeDraftKey.trim();\n const draft = state.draftsByKey[draftKey];\n if (!agentSessionId || !draft) return unchanged(state);\n // Intent 自带的强度优先;缺省时把 draft 上暂存的强度带进 create 意图。\n const orchestrationIntensity =\n normalizeOrchestrationIntensity(\n intent.initialTuttiModeActivation.orchestrationIntensity\n ) ?? draft.orchestrationIntensity;\n return {\n commands: NO_COMMANDS,\n state: {\n ...state,\n pendingCreatesBySessionId: {\n ...state.pendingCreatesBySessionId,\n [agentSessionId]: {\n agentSessionId,\n draftKey,\n initialActivation: {\n ...intent.initialTuttiModeActivation,\n orchestrationIntensity\n },\n reconcileCommandId: null,\n requestId: intent.requestId,\n workspaceId: intent.workspaceId\n }\n }\n }\n };\n}\n\nfunction settlePendingCreate(\n state: TuttiModeActivationState,\n intent: Extract<EngineIntent, { type: \"engine/commandResult\" }>\n): EngineReducerResult<TuttiModeActivationState> {\n const requestId = intent.correlationId?.trim() ?? \"\";\n const pending = Object.values(state.pendingCreatesBySessionId).find(\n (candidate) => candidate.requestId === requestId\n );\n if (!pending) return unchanged(state);\n if (intent.outcome === \"succeeded\") {\n const activation = activationFromCreateResult(intent.value, pending);\n if (activation) {\n const draftsByKey = { ...state.draftsByKey };\n const pendingCreatesBySessionId = { ...state.pendingCreatesBySessionId };\n delete draftsByKey[pending.draftKey];\n delete pendingCreatesBySessionId[pending.agentSessionId];\n return {\n commands: NO_COMMANDS,\n state: {\n ...state,\n activationsBySessionId: {\n ...state.activationsBySessionId,\n [pending.agentSessionId]: cloneActivation(activation)\n },\n draftsByKey,\n pendingCreatesBySessionId\n }\n };\n }\n }\n if (intent.outcome === \"timedOut\" || intent.outcome === \"succeeded\") {\n if (pending.reconcileCommandId) return unchanged(state);\n const reconcileCommandId = `tutti-mode-create-reconcile:${pending.requestId}`;\n return {\n commands: [\n {\n agentSessionId: pending.agentSessionId,\n commandId: reconcileCommandId,\n scope: \"state\",\n timeoutMs: UPDATE_TIMEOUT_MS,\n type: \"session/reconcile\",\n workspaceId: pending.workspaceId\n }\n ],\n state: {\n ...state,\n pendingCreatesBySessionId: {\n ...state.pendingCreatesBySessionId,\n [pending.agentSessionId]: { ...pending, reconcileCommandId }\n }\n }\n };\n }\n const pendingCreatesBySessionId = { ...state.pendingCreatesBySessionId };\n delete pendingCreatesBySessionId[pending.agentSessionId];\n return {\n commands: NO_COMMANDS,\n state: { ...state, pendingCreatesBySessionId }\n };\n}\n\nfunction requestUpdate(\n state: TuttiModeActivationState,\n intent: Extract<EngineIntent, { type: \"tuttiMode/updateRequested\" }>,\n sessionsById: Readonly<Record<string, CanonicalAgentSession>>\n): EngineReducerResult<TuttiModeActivationState> {\n const agentSessionId = intent.agentSessionId.trim();\n const workspaceId = intent.workspaceId.trim();\n const commandId = intent.commandId.trim();\n const session = sessionsById[agentSessionId];\n if (\n !agentSessionId ||\n !workspaceId ||\n !commandId ||\n session?.workspaceId !== workspaceId ||\n !validSourcePair(intent.status, intent.source) ||\n state.updatesBySessionId[agentSessionId]?.updateStatus === \"inFlight\"\n ) {\n return unchanged(state);\n }\n const activation = state.activationsBySessionId[agentSessionId] ?? null;\n const orchestrationIntensity = normalizeOrchestrationIntensity(\n intent.orchestrationIntensity\n );\n if (\n activation?.status === intent.status &&\n (orchestrationIntensity === null ||\n orchestrationIntensity ===\n activation.currentRevision.orchestrationIntensity)\n ) {\n return clearUpdate(state, agentSessionId);\n }\n const expectedRevision = activation?.currentRevision.revision ?? null;\n const record: TuttiModeActivationUpdateRecord = {\n agentSessionId,\n commandId,\n errorCode: null,\n errorMessage: null,\n expectedRevision,\n orchestrationIntensity,\n reconcileCommandId: null,\n requestedAtUnixMs: intent.requestedAtUnixMs,\n source: intent.source,\n status: intent.status,\n updateStatus: \"inFlight\",\n workspaceId\n };\n return {\n commands: [\n {\n agentSessionId,\n commandId,\n ...(expectedRevision === null ? {} : { expectedRevision }),\n ...(orchestrationIntensity === null ? {} : { orchestrationIntensity }),\n source: intent.source,\n status: intent.status,\n timeoutMs: UPDATE_TIMEOUT_MS,\n type: \"tuttiMode/update\",\n workspaceId\n }\n ],\n state: {\n ...state,\n updatesBySessionId: {\n ...state.updatesBySessionId,\n [agentSessionId]: record\n }\n }\n };\n}\n\nfunction settleUpdate(\n state: TuttiModeActivationState,\n intent: Extract<EngineIntent, { type: \"engine/commandResult\" }>\n): EngineReducerResult<TuttiModeActivationState> {\n const entry = Object.values(state.updatesBySessionId).find(\n (candidate) => candidate.commandId === intent.commandId\n );\n if (!entry) return unchanged(state);\n if (intent.outcome === \"succeeded\") {\n const value = validUpdateResult(intent.value, entry);\n if (value) {\n const updatesBySessionId = { ...state.updatesBySessionId };\n delete updatesBySessionId[entry.agentSessionId];\n return {\n commands: NO_COMMANDS,\n state: {\n ...state,\n activationsBySessionId: {\n ...state.activationsBySessionId,\n [entry.agentSessionId]: cloneActivation(value.activation)\n },\n updatesBySessionId\n }\n };\n }\n }\n const uncertain =\n intent.outcome === \"timedOut\" ||\n intent.outcome === \"succeeded\" ||\n isRevisionConflict(intent.errorCode);\n return {\n commands: uncertain\n ? [\n {\n agentSessionId: entry.agentSessionId,\n commandId: `tutti-mode-reconcile:${entry.commandId}`,\n scope: \"state\",\n timeoutMs: UPDATE_TIMEOUT_MS,\n type: \"session/reconcile\",\n workspaceId: entry.workspaceId\n }\n ]\n : NO_COMMANDS,\n state: {\n ...state,\n updatesBySessionId: {\n ...state.updatesBySessionId,\n [entry.agentSessionId]: {\n ...entry,\n errorCode:\n intent.outcome === \"succeeded\"\n ? \"invalid_command_result\"\n : (intent.errorCode ?? null),\n errorMessage: intent.errorMessage?.trim() || null,\n reconcileCommandId: uncertain\n ? `tutti-mode-reconcile:${entry.commandId}`\n : null,\n updateStatus: uncertain ? \"uncertain\" : \"failed\"\n }\n }\n }\n };\n}\n\nfunction isRevisionConflict(errorCode: string | undefined): boolean {\n const normalized = errorCode?.trim().toLowerCase() ?? \"\";\n return (\n normalized.includes(\"409\") ||\n normalized.includes(\"conflict\") ||\n normalized.includes(\"revision\")\n );\n}\n\nfunction hydrateSessions(\n state: TuttiModeActivationState,\n sessionIds: readonly string[],\n sessionsById: Readonly<Record<string, CanonicalAgentSession>>\n): EngineReducerResult<TuttiModeActivationState> {\n let changed = false;\n const activationsBySessionId = { ...state.activationsBySessionId };\n const draftsByKey = { ...state.draftsByKey };\n const pendingCreatesBySessionId = { ...state.pendingCreatesBySessionId };\n const updatesBySessionId = { ...state.updatesBySessionId };\n for (const rawId of sessionIds) {\n const agentSessionId = rawId.trim();\n const session = sessionsById[agentSessionId];\n if (!session) continue;\n const activation = session.tuttiModeActivation\n ? cloneActivation(session.tuttiModeActivation)\n : null;\n const current = activationsBySessionId[agentSessionId];\n if (!sameActivation(current, activation)) {\n activationsBySessionId[agentSessionId] = activation;\n changed = true;\n }\n const pending = pendingCreatesBySessionId[agentSessionId];\n if (\n pending &&\n activation?.status === pending.initialActivation.status &&\n activation.currentRevision.status === pending.initialActivation.status\n ) {\n delete draftsByKey[pending.draftKey];\n delete pendingCreatesBySessionId[agentSessionId];\n changed = true;\n }\n const update = updatesBySessionId[agentSessionId];\n if (update && updateSemanticallyApplied(update, activation)) {\n delete updatesBySessionId[agentSessionId];\n changed = true;\n }\n }\n return changed\n ? {\n commands: NO_COMMANDS,\n state: {\n activationsBySessionId,\n draftsByKey,\n pendingCreatesBySessionId,\n updatesBySessionId\n }\n }\n : unchanged(state);\n}\n\nfunction settleOwnedReconcile(\n state: TuttiModeActivationState,\n intent: Extract<EngineIntent, { type: \"engine/commandResult\" }>,\n sessionsById: Readonly<Record<string, CanonicalAgentSession>>\n): EngineReducerResult<TuttiModeActivationState> {\n const update = Object.values(state.updatesBySessionId).find(\n (candidate) => candidate.reconcileCommandId === intent.commandId\n );\n if (update) {\n const activation =\n sessionsById[update.agentSessionId]?.tuttiModeActivation ?? null;\n if (\n intent.outcome === \"succeeded\" &&\n updateSemanticallyApplied(update, activation)\n ) {\n return clearUpdate(state, update.agentSessionId);\n }\n return {\n commands: NO_COMMANDS,\n state: {\n ...state,\n updatesBySessionId: {\n ...state.updatesBySessionId,\n [update.agentSessionId]: {\n ...update,\n errorCode:\n intent.outcome === \"succeeded\"\n ? \"tutti_mode_update_not_applied\"\n : intent.errorCode?.trim() || \"tutti_mode_reconcile_failed\",\n errorMessage: intent.errorMessage?.trim() || null,\n reconcileCommandId: null,\n updateStatus: \"failed\"\n }\n }\n }\n };\n }\n const pending = Object.values(state.pendingCreatesBySessionId).find(\n (candidate) => candidate.reconcileCommandId === intent.commandId\n );\n if (!pending) return unchanged(state);\n if (intent.outcome !== \"succeeded\") {\n return {\n commands: NO_COMMANDS,\n state: {\n ...state,\n pendingCreatesBySessionId: {\n ...state.pendingCreatesBySessionId,\n [pending.agentSessionId]: {\n ...pending,\n reconcileCommandId: null\n }\n }\n }\n };\n }\n const activation =\n sessionsById[pending.agentSessionId]?.tuttiModeActivation ?? null;\n if (activation?.status === pending.initialActivation.status) {\n const draftsByKey = { ...state.draftsByKey };\n const pendingCreatesBySessionId = { ...state.pendingCreatesBySessionId };\n delete draftsByKey[pending.draftKey];\n delete pendingCreatesBySessionId[pending.agentSessionId];\n return {\n commands: NO_COMMANDS,\n state: {\n ...state,\n activationsBySessionId: {\n ...state.activationsBySessionId,\n [pending.agentSessionId]: cloneActivation(activation)\n },\n draftsByKey,\n pendingCreatesBySessionId\n }\n };\n }\n const pendingCreatesBySessionId = { ...state.pendingCreatesBySessionId };\n delete pendingCreatesBySessionId[pending.agentSessionId];\n return {\n commands: NO_COMMANDS,\n state: { ...state, pendingCreatesBySessionId }\n };\n}\n\nfunction expirePendingCreate(\n state: TuttiModeActivationState,\n expiryId: string\n): EngineReducerResult<TuttiModeActivationState> {\n if (!expiryId.startsWith(\"activation:\")) return unchanged(state);\n const requestId = expiryId.slice(\"activation:\".length);\n const pending = Object.values(state.pendingCreatesBySessionId).find(\n (candidate) => candidate.requestId === requestId\n );\n if (!pending) return unchanged(state);\n const pendingCreatesBySessionId = { ...state.pendingCreatesBySessionId };\n delete pendingCreatesBySessionId[pending.agentSessionId];\n return {\n commands: NO_COMMANDS,\n state: { ...state, pendingCreatesBySessionId }\n };\n}\n\nfunction updateSemanticallyApplied(\n update: TuttiModeActivationUpdateRecord,\n activation: AgentActivitySession[\"tuttiModeActivation\"]\n): boolean {\n return Boolean(\n activation &&\n activation.status === update.status &&\n activation.currentRevision.status === update.status &&\n activation.currentRevision.revision > (update.expectedRevision ?? 0) &&\n (update.orchestrationIntensity === null ||\n activation.currentRevision.orchestrationIntensity ===\n update.orchestrationIntensity)\n );\n}\n\nfunction removeSession(\n state: TuttiModeActivationState,\n agentSessionId: string\n): EngineReducerResult<TuttiModeActivationState> {\n const id = agentSessionId.trim();\n if (\n !(id in state.activationsBySessionId) &&\n !state.pendingCreatesBySessionId[id] &&\n !state.updatesBySessionId[id]\n ) {\n return unchanged(state);\n }\n const activationsBySessionId = { ...state.activationsBySessionId };\n const pendingCreatesBySessionId = { ...state.pendingCreatesBySessionId };\n const updatesBySessionId = { ...state.updatesBySessionId };\n delete activationsBySessionId[id];\n delete pendingCreatesBySessionId[id];\n delete updatesBySessionId[id];\n return {\n commands: NO_COMMANDS,\n state: {\n ...state,\n activationsBySessionId,\n pendingCreatesBySessionId,\n updatesBySessionId\n }\n };\n}\n\nfunction clearUpdate(\n state: TuttiModeActivationState,\n agentSessionId: string\n): EngineReducerResult<TuttiModeActivationState> {\n if (!state.updatesBySessionId[agentSessionId]) return unchanged(state);\n const updatesBySessionId = { ...state.updatesBySessionId };\n delete updatesBySessionId[agentSessionId];\n return { commands: NO_COMMANDS, state: { ...state, updatesBySessionId } };\n}\n\nfunction validSourcePair(status: string, source: string): boolean {\n return (\n (status === \"active\" && source === \"slash_command\") ||\n (status === \"inactive\" && source === \"badge_remove\")\n );\n}\n\nfunction validUpdateResult(\n value: unknown,\n entry: TuttiModeActivationUpdateRecord\n): {\n activation: NonNullable<AgentActivitySession[\"tuttiModeActivation\"]>;\n} | null {\n if (!value || typeof value !== \"object\") return null;\n const activation = (value as { activation?: unknown }).activation;\n if (!activation || typeof activation !== \"object\") return null;\n const candidate = activation as NonNullable<\n AgentActivitySession[\"tuttiModeActivation\"]\n >;\n return candidate.workspaceId === entry.workspaceId &&\n candidate.agentSessionId === entry.agentSessionId &&\n candidate.status === entry.status &&\n candidate.currentRevision?.status === entry.status &&\n Number.isInteger(candidate.currentRevision?.revision) &&\n (entry.orchestrationIntensity === null ||\n candidate.currentRevision?.orchestrationIntensity ===\n entry.orchestrationIntensity)\n ? { activation: candidate }\n : null;\n}\n\nfunction activationFromCreateResult(\n value: unknown,\n pending: TuttiModeActivationState[\"pendingCreatesBySessionId\"][string]\n): NonNullable<AgentActivitySession[\"tuttiModeActivation\"]> | null {\n if (!value || typeof value !== \"object\") return null;\n const session = (value as { session?: unknown }).session;\n if (!session || typeof session !== \"object\") return null;\n const candidate = session as Partial<AgentActivitySession>;\n const activation = candidate.tuttiModeActivation;\n return candidate.workspaceId === pending.workspaceId &&\n candidate.agentSessionId === pending.agentSessionId &&\n activation?.workspaceId === pending.workspaceId &&\n activation.agentSessionId === pending.agentSessionId &&\n activation.status === pending.initialActivation.status &&\n activation.currentRevision.status === pending.initialActivation.status\n ? activation\n : null;\n}\n\nfunction cloneActivation(\n activation: NonNullable<AgentActivitySession[\"tuttiModeActivation\"]>\n): NonNullable<AgentActivitySession[\"tuttiModeActivation\"]> {\n return {\n ...activation,\n currentRevision: { ...activation.currentRevision }\n };\n}\n\nfunction sameActivation(\n left: AgentActivitySession[\"tuttiModeActivation\"] | undefined,\n right: AgentActivitySession[\"tuttiModeActivation\"]\n): boolean {\n return (\n left === right ||\n (left?.id === right?.id &&\n left?.status === right?.status &&\n left?.currentRevision.revision === right?.currentRevision.revision)\n );\n}\n\nfunction normalizeOrchestrationIntensity(\n value: number | null | undefined\n): number | null {\n return typeof value === \"number\" &&\n Number.isInteger(value) &&\n value >= 0 &&\n value <= 100\n ? value\n : null;\n}\n\nfunction unchanged(\n state: TuttiModeActivationState\n): EngineReducerResult<TuttiModeActivationState> {\n return { commands: NO_COMMANDS, state };\n}\n","import {\n createInitialEngineRuntimeState,\n engineRuntimeReducer\n} from \"./engineRuntime.reducer.ts\";\nimport {\n createInitialPromptQueueState,\n promptQueueReducer\n} from \"./promptQueue.reducer.ts\";\nimport {\n resolvePromptSendNowStrategy,\n resolveQueuedPromptSendNowStrategy\n} from \"./promptQueue.sendNow.ts\";\nimport {\n canCancelQueuedSubmit,\n isQueuedSubmitDeliveryPending\n} from \"./promptQueue.lookup.ts\";\nimport {\n createInitialPendingIntentsState,\n pendingIntentsReducer\n} from \"./pendingIntents.reducer.ts\";\nimport {\n createInitialSessionLifecycleState,\n sessionLifecycleReducer\n} from \"./sessionLifecycle.reducer.ts\";\nimport {\n createInitialSessionReconcileState,\n sessionReconcileReducer\n} from \"./sessionReconcile.reducer.ts\";\nimport type {\n AgentSessionEngineState,\n EngineIntent,\n EngineReducerResult\n} from \"./types.ts\";\nimport {\n attentionReadStateReducer,\n createInitialAttentionReadState\n} from \"./attentionReadState.reducer.ts\";\nimport {\n validateScopedSessionResult,\n validateCancelResult,\n validateSendInputResult\n} from \"./commandResult.validation.ts\";\nimport {\n createInitialPlanDecisionState,\n planDecisionReducer\n} from \"./planDecision.reducer.ts\";\nimport {\n createInitialSessionCommandsState,\n sessionCommandsReducer\n} from \"./sessionCommands.reducer.ts\";\nimport {\n createInitialSessionMessagesState,\n sessionMessagesReducer\n} from \"./sessionMessages.reducer.ts\";\nimport {\n composerOptionsReducer,\n createInitialComposerOptionsState\n} from \"./composerOptions.reducer.ts\";\nimport { canonicalTurnKey } from \"./sessionEntityKeys.ts\";\nimport { deriveCanonicalSubmitAvailability } from \"./sessionLifecycle.availability.ts\";\nimport {\n createInitialSessionMutationsState,\n sessionMutationsReducer\n} from \"./sessionMutations.reducer.ts\";\nimport {\n createInitialTuttiModeActivationState,\n tuttiModeActivationReducer\n} from \"./tuttiModeActivation.reducer.ts\";\n\n// Root reducer: static composition of domain reducers, zero business logic.\n// Cross-domain read-only context is passed explicitly; domains still own all\n// decisions and state transitions in their own reducer.\n\nexport function createInitialAgentSessionEngineState(): AgentSessionEngineState {\n return {\n attentionReadState: createInitialAttentionReadState(),\n engineRuntime: createInitialEngineRuntimeState(),\n pendingIntents: createInitialPendingIntentsState(),\n planDecisions: createInitialPlanDecisionState(),\n promptQueue: createInitialPromptQueueState(),\n sessionReconcile: createInitialSessionReconcileState(),\n sessionMutations: createInitialSessionMutationsState(),\n sessionCommands: createInitialSessionCommandsState(),\n sessionLifecycle: createInitialSessionLifecycleState(),\n sessionMessages: createInitialSessionMessagesState(),\n composerOptions: createInitialComposerOptionsState(),\n tuttiModeActivation: createInitialTuttiModeActivationState()\n };\n}\n\nexport function rootEngineReducer(\n state: AgentSessionEngineState,\n intent: EngineIntent\n): EngineReducerResult<AgentSessionEngineState> {\n const sendResultValidation =\n intent.type === \"engine/commandResult\" &&\n intent.commandType === \"queue/sendPrompt\" &&\n intent.outcome === \"succeeded\"\n ? validateSendInputResult(\n intent.value,\n state.pendingIntents.submitsByClientSubmitId[\n intent.correlationId?.trim() ?? \"\"\n ]\n )\n : null;\n const interactionResponse =\n intent.type === \"engine/commandResult\" &&\n intent.commandType === \"interaction/respond\"\n ? Object.values(state.sessionLifecycle.interactionResponsesById).find(\n (response) => response.commandId === intent.commandId\n )\n : undefined;\n const interactionResultValidation =\n intent.type === \"engine/commandResult\" &&\n intent.commandType === \"interaction/respond\" &&\n intent.outcome === \"succeeded\"\n ? validateScopedSessionResult(intent.value, interactionResponse)\n : null;\n const settingsEntry =\n intent.type === \"engine/commandResult\" &&\n intent.commandType === \"session/updateSettings\"\n ? Object.entries(state.sessionLifecycle.operationBySessionId).find(\n ([, operation]) =>\n operation.settingsUpdate.commandId === intent.commandId\n )\n : undefined;\n const settingsResultValidation =\n intent.type === \"engine/commandResult\" &&\n intent.commandType === \"session/updateSettings\" &&\n intent.outcome === \"succeeded\"\n ? validateScopedSessionResult(\n intent.value,\n settingsEntry\n ? {\n agentSessionId: settingsEntry[0],\n workspaceId:\n state.sessionLifecycle.sessionsById[settingsEntry[0]]\n ?.workspaceId ?? \"\"\n }\n : (() => {\n const activation =\n state.pendingIntents.activationsByRequestId[\n intent.correlationId?.trim() ?? \"\"\n ];\n return activation\n ? {\n agentSessionId: activation.agentSessionId,\n workspaceId: activation.workspaceId\n }\n : undefined;\n })(),\n true\n )\n : null;\n const cancelEntry =\n intent.type === \"engine/commandResult\" &&\n intent.commandType === \"turn/cancel\"\n ? Object.entries(state.sessionLifecycle.operationBySessionId).find(\n ([, operation]) => operation.cancel.commandId === intent.commandId\n )\n : undefined;\n const cancelResultValidation =\n intent.type === \"engine/commandResult\" &&\n intent.commandType === \"turn/cancel\" &&\n intent.outcome === \"succeeded\"\n ? validateCancelResult(\n intent.value,\n cancelEntry\n ? {\n agentSessionId: cancelEntry[0],\n currentTurn: cancelEntry[1].cancel.turnId\n ? (state.sessionLifecycle.turnsById[\n canonicalTurnKey(\n cancelEntry[0],\n cancelEntry[1].cancel.turnId\n )\n ] ?? null)\n : null,\n turnId: cancelEntry[1].cancel.turnId,\n workspaceMatches:\n state.sessionLifecycle.sessionsById[cancelEntry[0]]\n ?.workspaceId === cancelEntry[1].cancel.requestedWorkspaceId\n }\n : undefined\n )\n : null;\n const engineRuntime = engineRuntimeReducer(state.engineRuntime, intent);\n const planIntent =\n intent.type === \"plan/decisionRequested\" ||\n intent.type === \"plan/feedbackRequested\" ||\n intent.type === \"plan/skipped\"\n ? intent\n : null;\n const planTurnValid = Boolean(\n planIntent &&\n !state.sessionLifecycle.deletedSessionIds[planIntent.agentSessionId] &&\n state.sessionLifecycle.sessionsById[planIntent.agentSessionId]\n ?.workspaceId === planIntent.workspaceId &&\n state.sessionLifecycle.turnsById[\n canonicalTurnKey(planIntent.agentSessionId, planIntent.turnId)\n ]?.phase === \"settled\" &&\n state.sessionLifecycle.turnsById[\n canonicalTurnKey(planIntent.agentSessionId, planIntent.turnId)\n ]?.outcome === \"completed\" &&\n state.sessionLifecycle.operationBySessionId[\n planIntent.agentSessionId.trim()\n ]?.runtimeAvailability.state !== \"blocked\"\n );\n const submitIntent =\n intent.type === \"submit/requested\" ||\n intent.type === \"plan/feedbackRequested\"\n ? intent\n : null;\n const submitId = submitIntent?.clientSubmitId.trim() ?? \"\";\n const submitSessionId = submitIntent?.agentSessionId.trim() ?? \"\";\n const submitWorkspaceId = submitIntent?.workspaceId.trim() ?? \"\";\n const submitSession = submitSessionId\n ? state.sessionLifecycle.sessionsById[submitSessionId]\n : undefined;\n const submitSendNowStrategy =\n submitIntent?.type === \"submit/requested\" &&\n submitIntent.routing === \"send_now\"\n ? resolvePromptSendNowStrategy(\n deriveCanonicalSubmitAvailability(\n state.sessionLifecycle,\n submitSessionId\n ),\n submitSession?.capabilities\n )\n : null;\n const queueRecord = submitIntent\n ? state.promptQueue.recordsBySessionId[submitSessionId]\n : undefined;\n // A session whose activation is still in flight is not in sessionsById yet.\n // Plain submits for it are accepted into the queue (they drain once the\n // session upserts) instead of being silently dropped; routings that dispatch\n // straight to the daemon still require the canonical session record.\n const submitSessionScopeValid =\n submitSession !== undefined\n ? submitSession.workspaceId === submitWorkspaceId\n : submitIntent?.type === \"submit/requested\" &&\n submitIntent.routing !== \"immediate\";\n const submitRequestAccepted = Boolean(\n submitIntent &&\n submitId &&\n submitSessionId &&\n submitWorkspaceId &&\n submitSessionScopeValid &&\n submitIntent.content.length > 0 &&\n (submitIntent.type !== \"submit/requested\" ||\n submitIntent.routing !== \"send_now\" ||\n submitSendNowStrategy !== null) &&\n !state.sessionLifecycle.deletedSessionIds[submitSessionId] &&\n !state.pendingIntents.submitsByClientSubmitId[submitId] &&\n !queueRecord?.prompts.some(\n (prompt) => prompt.id === submitId || prompt.clientSubmitId === submitId\n ) &&\n queueRecord?.inFlight?.promptId !== submitId &&\n queueRecord?.uncertainDelivery?.promptId !== submitId\n );\n const feedbackAccepted = Boolean(\n intent.type === \"plan/feedbackRequested\" &&\n planTurnValid &&\n submitRequestAccepted\n );\n const sendNowStrategy =\n intent.type === \"submit/requested\" && intent.routing === \"send_now\"\n ? submitSendNowStrategy\n : intent.type === \"queue/sendNowRequested\"\n ? resolveQueuedPromptSendNowStrategy(\n state.promptQueue,\n intent.agentSessionId,\n intent.promptId,\n deriveCanonicalSubmitAvailability(\n state.sessionLifecycle,\n intent.agentSessionId\n ),\n state.sessionLifecycle.sessionsById[intent.agentSessionId.trim()]\n ?.capabilities\n )\n : null;\n const expiringSubmitId =\n intent.type === \"engine/intentExpired\" &&\n intent.expiryId.startsWith(\"submit:\")\n ? intent.expiryId.slice(\"submit:\".length)\n : \"\";\n const expiringSubmit =\n state.pendingIntents.submitsByClientSubmitId[expiringSubmitId];\n const planDecisions = planDecisionReducer(state.planDecisions, intent, {\n feedbackAccepted,\n planTurnValid\n });\n const sessionCommands = sessionCommandsReducer(\n state.sessionCommands,\n intent,\n {\n deletedSessionIds: state.sessionLifecycle.deletedSessionIds\n }\n );\n const sessionMutations = sessionMutationsReducer(\n state.sessionMutations,\n intent,\n {\n deletedSessionIds: state.sessionLifecycle.deletedSessionIds,\n sessionsById: state.sessionLifecycle.sessionsById\n }\n );\n const sessionLifecycle = sessionLifecycleReducer(\n state.sessionLifecycle,\n intent,\n {\n queueSendNowRequiresCancel: sendNowStrategy === \"cancel_then_send\",\n sendNowSubmitRequiresCancel:\n intent.type === \"submit/requested\" &&\n submitRequestAccepted &&\n sendNowStrategy === \"cancel_then_send\",\n sendResultValidation,\n interactionResultValidation,\n settingsResultValidation,\n cancelResultValidation\n }\n );\n const promptQueue = promptQueueReducer(state.promptQueue, intent, {\n cancelResultValidation,\n deletedSessionIds: sessionLifecycle.state.deletedSessionIds,\n interactionResultValidation,\n lifecycle: sessionLifecycle.state,\n planFeedbackAccepted: feedbackAccepted,\n sendResultValidation,\n submitRequestAccepted,\n sendNowStrategy,\n settingsResultValidation\n });\n const attentionReadState = attentionReadStateReducer(\n state.attentionReadState,\n intent,\n { sessionsById: sessionLifecycle.state.sessionsById }\n );\n const pendingIntents = pendingIntentsReducer(state.pendingIntents, intent, {\n deletedSessionIds: sessionLifecycle.state.deletedSessionIds,\n turnsById: sessionLifecycle.state.turnsById,\n submitCancellationAccepted:\n intent.type === \"submit/canceled\" &&\n canCancelQueuedSubmit(\n state.promptQueue,\n intent.agentSessionId,\n intent.clientSubmitId\n ),\n planFeedbackAccepted: feedbackAccepted,\n submitRequestAccepted,\n submitDeliveryIsQueuePending: Boolean(\n expiringSubmit &&\n isQueuedSubmitDeliveryPending(\n state.promptQueue,\n expiringSubmit.agentSessionId,\n expiringSubmitId\n )\n ),\n sendResultValidation,\n settingsResultValidation\n });\n const sessionReconcile = sessionReconcileReducer(\n state.sessionReconcile,\n intent,\n {\n deletedSessionIds: state.sessionLifecycle.deletedSessionIds,\n sessionsById: sessionLifecycle.state.sessionsById,\n workspaceReconcileCommandId:\n state.engineRuntime.workspaceReconcile.commandId\n }\n );\n const sessionMessages = sessionMessagesReducer(\n state.sessionMessages,\n intent,\n {\n previousSessionsById: state.sessionLifecycle.sessionsById,\n sessionsById: sessionLifecycle.state.sessionsById\n }\n );\n const composerOptions = composerOptionsReducer(state.composerOptions, intent);\n const tuttiModeActivation = tuttiModeActivationReducer(\n state.tuttiModeActivation,\n intent,\n { sessionsById: sessionLifecycle.state.sessionsById }\n );\n const unchanged =\n attentionReadState.state === state.attentionReadState &&\n engineRuntime.state === state.engineRuntime &&\n pendingIntents.state === state.pendingIntents &&\n planDecisions.state === state.planDecisions &&\n promptQueue.state === state.promptQueue &&\n sessionReconcile.state === state.sessionReconcile &&\n sessionMutations.state === state.sessionMutations &&\n sessionCommands.state === state.sessionCommands &&\n sessionLifecycle.state === state.sessionLifecycle &&\n sessionMessages.state === state.sessionMessages &&\n composerOptions.state === state.composerOptions &&\n tuttiModeActivation.state === state.tuttiModeActivation;\n const nextState = unchanged\n ? state\n : {\n attentionReadState: attentionReadState.state,\n engineRuntime: engineRuntime.state,\n pendingIntents: pendingIntents.state,\n planDecisions: planDecisions.state,\n promptQueue: promptQueue.state,\n sessionReconcile: sessionReconcile.state,\n sessionMutations: sessionMutations.state,\n sessionCommands: sessionCommands.state,\n sessionLifecycle: sessionLifecycle.state,\n sessionMessages: sessionMessages.state,\n composerOptions: composerOptions.state,\n tuttiModeActivation: tuttiModeActivation.state\n };\n return {\n commands: [\n ...attentionReadState.commands,\n ...engineRuntime.commands,\n ...pendingIntents.commands,\n ...planDecisions.commands,\n ...sessionReconcile.commands,\n ...sessionMutations.commands,\n ...sessionCommands.commands,\n ...sessionLifecycle.commands,\n ...promptQueue.commands,\n ...composerOptions.commands,\n ...tuttiModeActivation.commands\n ],\n ...(sessionMutations.followUpIntents\n ? { followUpIntents: sessionMutations.followUpIntents }\n : {}),\n state: nextState\n };\n}\n","// Workspace session engine contract types\n// (docs/architecture/agent-gui-refactor-plan.md, sections 3.3 and 4.1).\n//\n// The engine is the single orchestration layer for agent activity: user\n// intents and runtime events enter one dispatch loop, pure reducers compute\n// the next state plus command descriptions, and an executor without decision\n// logic performs the commands and feeds results back as new intents.\n//\n// This file is the skeleton contract. Domain slices (turn lifecycle, queue,\n// optimistic intents) extend the intent/command unions and the state tree as\n// the refactor slices land.\n\n/**\n * Engine instances are identified by the workspace plus origin pair. Origin\n * distinguishes runtimes feeding the same workspace (for example a local\n * tuttid runtime versus an external shared-room runtime), and is a first-class\n * identity rather than a patch field. Hosts create one engine per pair and\n * inject it explicitly; module-level singletons are forbidden.\n */\nexport interface AgentSessionEngineIdentity {\n origin: string;\n workspaceId: string;\n}\n\nexport const AGENT_SESSION_ENGINE_LOCAL_ORIGIN =\n \"WORKSPACE_AGENT_SESSION_ORIGIN_RUNTIME\";\n\nexport type EngineConnectionStatus = \"connected\" | \"disconnected\" | \"unknown\";\n\n// ---------------------------------------------------------------------------\n// Intents: the only input of the engine. User intents, runtime events,\n// command results, and expiries all enter the same dispatch loop.\n// ---------------------------------------------------------------------------\n\nexport interface EngineConnectionChangedIntent {\n type: \"engine/connectionChanged\";\n status: EngineConnectionStatus;\n workspaceId?: string;\n}\n\nexport interface WorkspaceReconcileRequestedIntent {\n type: \"workspace/reconcileRequested\";\n workspaceId: string;\n retry?: boolean;\n}\n\n/** Requests a command-port round trip; exercises the executor feedback loop. */\nexport interface EngineProbeRequestedIntent {\n type: \"engine/probeRequested\";\n probeId: string;\n timeoutMs?: number;\n}\n\n/** Asks the host clock to deliver an expiry intent at the given deadline. */\nexport interface EngineExpiryRequestedIntent {\n type: \"engine/expiryRequested\";\n expiryId: string;\n dueAtUnixMs: number;\n}\n\nexport interface EngineExpiryCancelRequestedIntent {\n type: \"engine/expiryCancelRequested\";\n expiryId: string;\n}\n\nexport type EngineCommandOutcome = \"failed\" | \"succeeded\" | \"timedOut\";\n\n/**\n * Every command execution settles back into the loop as this intent, so\n * failure and timeout handling are explicit reducer transitions instead of\n * executor-side improvisation.\n */\nexport interface EngineCommandResultIntent {\n type: \"engine/commandResult\";\n commandId: string;\n commandType: EngineExternalCommand[\"type\"];\n correlationId?: string;\n outcome: EngineCommandOutcome;\n value?: unknown;\n errorCode?: string;\n errorReason?: string;\n errorMessage?: string;\n}\n\n/**\n * Delivered by the expiry clock when a scheduled deadline elapses. Reducers\n * never read the wall clock or set timers; tests dispatch this directly.\n */\nexport interface EngineIntentExpiredIntent {\n type: \"engine/intentExpired\";\n expiryId: string;\n dueAtUnixMs: number;\n}\n\nexport type EngineIntent =\n | AttentionReadIntent\n | EngineCommandResultIntent\n | EngineConnectionChangedIntent\n | EngineExpiryCancelRequestedIntent\n | EngineExpiryRequestedIntent\n | EngineIntentExpiredIntent\n | EngineProbeRequestedIntent\n | WorkspaceReconcileRequestedIntent\n | PendingIntentsIntent\n | PlanDecisionIntent\n | PromptQueueIntent\n | SessionReconcileIntent\n | SessionMutationsIntent\n | SessionCommandsIntent\n | SessionLifecycleIntent\n | ComposerOptionsIntent\n | TuttiModeActivationIntent;\n\n// ---------------------------------------------------------------------------\n// Commands: descriptions returned by reducers. Internal commands are handled\n// by the expiry clock; external commands go through the injected command port.\n// ---------------------------------------------------------------------------\n\nexport interface EngineScheduleExpiryCommand {\n type: \"engine/scheduleExpiry\";\n expiryId: string;\n dueAtUnixMs: number;\n}\n\nexport interface EngineCancelExpiryCommand {\n type: \"engine/cancelExpiry\";\n expiryId: string;\n}\n\n/** Cancels one in-flight external command without coupling reducers to I/O. */\nexport interface EngineAbortExternalCommand {\n type: \"engine/abortExternalCommand\";\n reason: string;\n targetCommandId: string;\n}\n\nexport interface EngineExternalCommandBase {\n commandId: string;\n timeoutMs?: number;\n}\n\n/** Round-trip health probe; domain slices add real runtime commands here. */\nexport interface EngineProbeCommand extends EngineExternalCommandBase {\n type: \"engine/probe\";\n}\n\nexport interface EngineReconcileWorkspaceCommand extends EngineExternalCommandBase {\n type: \"engine/reconcileWorkspace\";\n workspaceId: string;\n}\n\nexport type EngineExpiryCommand =\n | EngineCancelExpiryCommand\n | EngineScheduleExpiryCommand;\n\nexport type EngineInternalCommand =\n | EngineAbortExternalCommand\n | EngineExpiryCommand;\n\nexport type EngineExternalCommand =\n | AttentionReadCommand\n | EngineProbeCommand\n | EngineReconcileWorkspaceCommand\n | InteractionRespondCommand\n | PlanSubmitDecisionCommand\n | PromptQueueSendCommand\n | SessionActivateCommand\n | SessionUpdateSettingsCommand\n | SessionUnactivateCommand\n | SessionReconcileCommand\n | SessionMutationCommand\n | TurnCancelCommand\n | ComposerOptionsCommand\n | TuttiModeActivationCommand;\n\nexport type EngineCommand = EngineExternalCommand | EngineInternalCommand;\n\nexport function isEngineInternalCommand(\n command: EngineCommand\n): command is EngineInternalCommand {\n return (\n command.type === \"engine/abortExternalCommand\" ||\n command.type === \"engine/cancelExpiry\" ||\n command.type === \"engine/scheduleExpiry\"\n );\n}\n\n// ---------------------------------------------------------------------------\n// State tree and reducer contract.\n// ---------------------------------------------------------------------------\n\nexport interface EngineRuntimeCommandResultRecord {\n commandId: string;\n errorMessage?: string;\n outcome: EngineCommandOutcome;\n}\n\n/** Engine self state: the minimal skeleton domain driving interleaving tests. */\nexport interface EngineRuntimeState {\n connection: EngineConnectionStatus;\n lastCommandResult: EngineRuntimeCommandResultRecord | null;\n lastExpiredIntentId: string | null;\n processedIntentCount: number;\n workspaceReconcile: {\n commandId: string | null;\n errorCode: string | null;\n errorMessage: string | null;\n status: \"idle\" | \"loading\" | \"ready\" | \"failed\" | \"unknown\";\n };\n}\n\nexport interface AgentSessionEngineState {\n attentionReadState: AttentionReadState;\n engineRuntime: EngineRuntimeState;\n pendingIntents: PendingIntentsState;\n planDecisions: PlanDecisionState;\n promptQueue: PromptQueueState;\n sessionReconcile: SessionReconcileState;\n sessionMutations: SessionMutationsState;\n sessionCommands: SessionCommandsState;\n sessionLifecycle: SessionLifecycleState;\n sessionMessages: SessionMessagesState;\n composerOptions: ComposerOptionsState;\n tuttiModeActivation: TuttiModeActivationState;\n}\n\nexport interface EngineReducerResult<TState> {\n commands: readonly EngineCommand[];\n followUpIntents?: readonly EngineIntent[];\n state: TState;\n}\n\n/**\n * Domain reducers are pure: no timers, no clocks, no I/O. Timing enters as\n * expiry intents; side effects leave as command descriptions.\n */\nexport type EngineDomainReducer<TState> = (\n state: TState,\n intent: EngineIntent\n) => EngineReducerResult<TState>;\n\n// ---------------------------------------------------------------------------\n// Host-injected ports. The engine directory forbids setTimeout/setInterval;\n// all scheduling goes through these ports so tests can drive a manual clock.\n// ---------------------------------------------------------------------------\n\nexport interface EngineScheduledTask {\n cancel(): void;\n}\n\nexport interface EngineScheduler {\n schedule(delayMs: number, task: () => void): EngineScheduledTask;\n}\n\nexport interface EngineClock {\n nowUnixMs(): number;\n}\n\n/** Transport adapter surface: executes external command descriptions. */\nexport interface EngineCommandPort {\n execute(\n command: EngineExternalCommand,\n options?: { signal?: AbortSignal }\n ): Promise<unknown>;\n}\n\n// ---------------------------------------------------------------------------\n// Engine public surface.\n// ---------------------------------------------------------------------------\n\nexport interface EngineDispatchOptions {\n /**\n * Coalesce this intent with other batched intents inside the frame window\n * (high-frequency streaming events). Non-batched dispatches flush pending\n * batched intents first so cross-intent ordering is preserved.\n */\n batch?: boolean;\n}\n\nexport type AgentSessionEngineListener = (\n state: AgentSessionEngineState\n) => void;\n\nexport interface AgentSessionEngine {\n readonly identity: AgentSessionEngineIdentity;\n dispatch(intent: EngineIntent, options?: EngineDispatchOptions): void;\n dispose(): void;\n getSnapshot(): AgentSessionEngineState;\n subscribe(listener: AgentSessionEngineListener): () => void;\n}\nimport type {\n PromptQueueIntent,\n PromptQueueSendCommand,\n PromptQueueState\n} from \"./promptQueue.types.ts\";\nimport type {\n PendingIntentsIntent,\n PendingIntentsState,\n SessionActivateCommand,\n SessionUpdateSettingsCommand,\n SessionUnactivateCommand\n} from \"./pendingIntents.types.ts\";\nimport type {\n InteractionRespondCommand,\n SessionLifecycleIntent,\n SessionLifecycleState,\n TurnCancelCommand\n} from \"./sessionLifecycle.types.ts\";\nimport type {\n SessionReconcileCommand,\n SessionReconcileIntent,\n SessionReconcileState\n} from \"./sessionReconcile.types.ts\";\nimport type {\n AttentionReadCommand,\n AttentionReadIntent,\n AttentionReadState\n} from \"./attentionReadState.types.ts\";\nimport type {\n PlanDecisionIntent,\n PlanDecisionState,\n PlanSubmitDecisionCommand\n} from \"./planDecision.types.ts\";\nimport type {\n SessionCommandsIntent,\n SessionCommandsState\n} from \"./sessionCommands.types.ts\";\nimport type { SessionMessagesState } from \"./sessionMessages.types.ts\";\nimport type {\n ComposerOptionsCommand,\n ComposerOptionsIntent,\n ComposerOptionsState\n} from \"./composerOptions.types.ts\";\nimport type {\n SessionMutationCommand,\n SessionMutationsIntent,\n SessionMutationsState\n} from \"./sessionMutations.types.ts\";\nimport type {\n TuttiModeActivationCommand,\n TuttiModeActivationIntent,\n TuttiModeActivationState\n} from \"./tuttiModeActivation.types.ts\";\n","import type { EngineDiagnosticSink } from \"./diagnostics.ts\";\nimport { createEngineEffectExecutor } from \"./effectExecutor.ts\";\nimport { createEngineExpiryClock } from \"./expiryClock.ts\";\nimport {\n createInitialAgentSessionEngineState,\n rootEngineReducer\n} from \"./rootReducer.ts\";\nimport {\n isEngineInternalCommand,\n type AgentSessionEngine,\n type AgentSessionEngineIdentity,\n type AgentSessionEngineListener,\n type AgentSessionEngineState,\n type EngineClock,\n type EngineCommandPort,\n type EngineDispatchOptions,\n type EngineIntent,\n type EngineScheduledTask,\n type EngineScheduler\n} from \"./types.ts\";\n\n// Session engine factory (docs/architecture/agent-gui-refactor-plan.md,\n// sections 3.3 and 4.1, engine skeleton slice).\n//\n// All state lives inside this closure: one instance per workspace + origin\n// pair, injected explicitly by the host. The dispatch loop is serial — an\n// intent dispatched while a drain is running is queued and reduced within the\n// same drain — and subscribers are notified at most once per drain cycle.\n\n/**\n * Frame window for coalescing high-frequency intents (streaming message\n * updates). Migrated from the desktop activity service's 33ms event batching;\n * the engine owns this timing once event wiring moves over in later slices.\n */\nexport const ENGINE_INTENT_BATCH_DELAY_MS = 33;\n\nexport interface CreateAgentSessionEngineInput {\n batchDelayMs?: number;\n clock: EngineClock;\n commandPort: EngineCommandPort;\n diagnosticSink?: EngineDiagnosticSink;\n identity: AgentSessionEngineIdentity;\n scheduler: EngineScheduler;\n}\n\nexport function createAgentSessionEngine({\n batchDelayMs = ENGINE_INTENT_BATCH_DELAY_MS,\n clock,\n commandPort,\n diagnosticSink,\n identity,\n scheduler\n}: CreateAgentSessionEngineInput): AgentSessionEngine {\n if (identity.workspaceId.trim().length === 0) {\n throw new Error(\"agent session engine requires a non-empty workspaceId\");\n }\n if (identity.origin.trim().length === 0) {\n throw new Error(\"agent session engine requires a non-empty origin\");\n }\n const engineIdentity: AgentSessionEngineIdentity = Object.freeze({\n origin: identity.origin,\n workspaceId: identity.workspaceId\n });\n\n let state: AgentSessionEngineState = createInitialAgentSessionEngineState();\n const listeners = new Set<AgentSessionEngineListener>();\n const intentQueue: EngineIntent[] = [];\n const batchedIntents: EngineIntent[] = [];\n let batchFlushTask: EngineScheduledTask | null = null;\n let draining = false;\n let disposed = false;\n\n const expiryClock = createEngineExpiryClock({\n clock,\n onExpired: (intent) => {\n dispatch(intent);\n },\n scheduler\n });\n\n const effectExecutor = createEngineEffectExecutor({\n commandPort,\n onResult: (intent) => {\n dispatch(intent);\n },\n scheduler,\n ...(diagnosticSink === undefined ? {} : { diagnosticSink })\n });\n\n function notifyListeners(): void {\n for (const listener of listeners) {\n try {\n listener(state);\n } catch (error) {\n if (diagnosticSink) {\n diagnosticSink({ error, type: \"listenerError\" });\n } else {\n console.error(\n \"[agent-session-engine-diagnostic]\",\n JSON.stringify({\n event: \"listener_error\",\n error: error instanceof Error ? error.message : String(error),\n origin: engineIdentity.origin,\n workspaceId: engineIdentity.workspaceId\n })\n );\n }\n }\n }\n }\n\n function drainQueue(): void {\n if (draining || disposed) {\n return;\n }\n draining = true;\n const stateBeforeDrain = state;\n try {\n for (\n let intent = intentQueue.shift();\n intent !== undefined;\n intent = intentQueue.shift()\n ) {\n const result = rootEngineReducer(state, intent);\n state = result.state;\n if (result.followUpIntents?.length) {\n intentQueue.unshift(...result.followUpIntents);\n }\n for (const command of result.commands) {\n if (command.type === \"engine/abortExternalCommand\") {\n effectExecutor.abort(command.targetCommandId, command.reason);\n } else if (isEngineInternalCommand(command)) {\n expiryClock.apply(command);\n } else {\n effectExecutor.execute(command);\n }\n }\n }\n } finally {\n draining = false;\n }\n if (state !== stateBeforeDrain) {\n notifyListeners();\n }\n }\n\n function flushBatchedIntents(): void {\n if (batchFlushTask !== null) {\n batchFlushTask.cancel();\n batchFlushTask = null;\n }\n if (batchedIntents.length === 0) {\n return;\n }\n intentQueue.push(...batchedIntents);\n batchedIntents.length = 0;\n }\n\n function dispatch(\n intent: EngineIntent,\n options?: EngineDispatchOptions\n ): void {\n if (disposed) {\n diagnosticSink?.({\n intentType: intent.type,\n type: \"intentDroppedAfterDispose\"\n });\n return;\n }\n const scopedIntent = intentForEngineIdentity(intent, engineIdentity);\n if (!scopedIntent) {\n diagnosticSink?.({\n intentType: intent.type,\n type: \"intentDroppedForIdentityMismatch\"\n });\n return;\n }\n if (options?.batch === true) {\n batchedIntents.push(scopedIntent);\n if (batchFlushTask === null) {\n batchFlushTask = scheduler.schedule(batchDelayMs, () => {\n batchFlushTask = null;\n flushBatchedIntents();\n drainQueue();\n });\n }\n return;\n }\n // Non-batched dispatch flushes the pending frame first so cross-intent\n // ordering is preserved (a terminal event never overtakes the streaming\n // updates that preceded it).\n flushBatchedIntents();\n intentQueue.push(scopedIntent);\n drainQueue();\n }\n\n return {\n identity: engineIdentity,\n dispatch,\n dispose() {\n if (disposed) {\n return;\n }\n disposed = true;\n if (batchFlushTask !== null) {\n batchFlushTask.cancel();\n batchFlushTask = null;\n }\n batchedIntents.length = 0;\n intentQueue.length = 0;\n expiryClock.dispose();\n effectExecutor.dispose();\n listeners.clear();\n },\n getSnapshot() {\n return state;\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n }\n };\n}\n\nfunction intentForEngineIdentity(\n intent: EngineIntent,\n identity: AgentSessionEngineIdentity\n): EngineIntent | null {\n if (\"workspaceId\" in intent && intent.workspaceId !== undefined) {\n if (intent.workspaceId.trim() !== identity.workspaceId) {\n return null;\n }\n }\n if (intent.type === \"session/upserted\") {\n return intent.session.workspaceId === identity.workspaceId ? intent : null;\n }\n if (intent.type === \"session/snapshotReceived\") {\n const sessions = intent.sessions.filter(\n (session) => session.workspaceId === identity.workspaceId\n );\n return sessions.length === intent.sessions.length\n ? intent\n : { ...intent, sessions };\n }\n return intent;\n}\n","import type { AgentSessionEngineState } from \"./types.ts\";\n\nexport function selectWorkspaceReconcileState(state: AgentSessionEngineState) {\n return state.engineRuntime.workspaceReconcile;\n}\n","import type { AgentSessionEngineState } from \"./types.ts\";\n\nexport function selectSessionMutation(\n state: AgentSessionEngineState,\n mutationId: string\n) {\n return state.sessionMutations.byMutationId[mutationId.trim()] ?? null;\n}\n\nexport function selectSessionMutations(state: AgentSessionEngineState) {\n return Object.values(state.sessionMutations.byMutationId);\n}\n","import { selectSessionMutation } from \"./sessionMutations.selectors.ts\";\nimport type {\n SessionMutationRecord,\n SessionMutationsIntent\n} from \"./sessionMutations.types.ts\";\nimport type { AgentSessionEngine } from \"./types.ts\";\n\nexport function dispatchSessionMutation(\n engine: AgentSessionEngine,\n intent: SessionMutationsIntent\n): Promise<SessionMutationRecord> {\n const mutationId = intent.mutationId.trim();\n return new Promise((resolve, reject) => {\n let settled = false;\n let unsubscribe = (): void => {};\n const observe = (): void => {\n if (settled) return;\n const record = selectSessionMutation(engine.getSnapshot(), mutationId);\n if (!record || record.status === \"inFlight\") return;\n settled = true;\n unsubscribe();\n if (record.status === \"succeeded\") {\n resolve(record);\n return;\n }\n const error = new Error(\n record.errorMessage ?? `session mutation ${record.status}`\n ) as Error & { code?: string };\n if (record.errorCode) error.code = record.errorCode;\n reject(error);\n };\n unsubscribe = engine.subscribe(observe);\n engine.dispatch(intent);\n const accepted = selectSessionMutation(engine.getSnapshot(), mutationId);\n if (!accepted) {\n settled = true;\n unsubscribe();\n reject(new Error(\"session mutation was not accepted\"));\n return;\n }\n observe();\n });\n}\n","import type { AgentActivityTuttiModeActivation } from \"../types.ts\";\nimport type { AgentSessionEngineState } from \"./types.ts\";\n\nexport interface TuttiModeActivationPresentation {\n activation: AgentActivityTuttiModeActivation | null;\n active: boolean;\n errorCode: string | null;\n errorMessage: string | null;\n orchestrationIntensity: number;\n updateStatus: \"idle\" | \"pending_create\" | \"updating\" | \"failed\" | \"uncertain\";\n}\n\nconst DEFAULT_ORCHESTRATION_INTENSITY = 50;\n\nexport function selectTuttiModeDraftIsActive(\n state: AgentSessionEngineState,\n draftKey: string\n): boolean {\n return (\n state.tuttiModeActivation.draftsByKey[draftKey.trim()]?.active === true\n );\n}\n\nexport function selectTuttiModeDraftOrchestrationIntensity(\n state: AgentSessionEngineState,\n draftKey: string\n): number | null {\n return (\n state.tuttiModeActivation.draftsByKey[draftKey.trim()]\n ?.orchestrationIntensity ?? null\n );\n}\n\nexport function selectTuttiModeActivationPresentation(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined,\n draftKey: string\n): TuttiModeActivationPresentation {\n const sessionId = agentSessionId?.trim() ?? \"\";\n const draftIntensity = selectTuttiModeDraftOrchestrationIntensity(\n state,\n draftKey\n );\n if (!sessionId) {\n return {\n activation: null,\n active: selectTuttiModeDraftIsActive(state, draftKey),\n errorCode: null,\n errorMessage: null,\n orchestrationIntensity: draftIntensity ?? DEFAULT_ORCHESTRATION_INTENSITY,\n updateStatus: \"idle\"\n };\n }\n const update = state.tuttiModeActivation.updatesBySessionId[sessionId];\n const activation =\n state.tuttiModeActivation.activationsBySessionId[sessionId] ?? null;\n if (update) {\n return {\n activation,\n active:\n update.updateStatus === \"failed\"\n ? activation?.status === \"active\"\n : update.status === \"active\",\n errorCode: update.errorCode,\n errorMessage: update.errorMessage,\n orchestrationIntensity:\n update.orchestrationIntensity ??\n activation?.currentRevision.orchestrationIntensity ??\n draftIntensity ??\n DEFAULT_ORCHESTRATION_INTENSITY,\n updateStatus:\n update.updateStatus === \"inFlight\" ? \"updating\" : update.updateStatus\n };\n }\n const pending =\n state.tuttiModeActivation.pendingCreatesBySessionId[sessionId];\n if (pending) {\n return {\n activation,\n active: pending.initialActivation.status === \"active\",\n errorCode: null,\n errorMessage: null,\n orchestrationIntensity:\n pending.initialActivation.orchestrationIntensity ??\n activation?.currentRevision.orchestrationIntensity ??\n draftIntensity ??\n DEFAULT_ORCHESTRATION_INTENSITY,\n updateStatus: \"pending_create\"\n };\n }\n return {\n activation,\n active: activation?.status === \"active\",\n errorCode: null,\n errorMessage: null,\n orchestrationIntensity:\n activation?.currentRevision.orchestrationIntensity ??\n draftIntensity ??\n DEFAULT_ORCHESTRATION_INTENSITY,\n updateStatus: \"idle\"\n };\n}\n\nexport function tuttiModeActivationPresentationsEqual(\n left: TuttiModeActivationPresentation,\n right: TuttiModeActivationPresentation\n): boolean {\n return (\n left.active === right.active &&\n left.errorCode === right.errorCode &&\n left.errorMessage === right.errorMessage &&\n left.orchestrationIntensity === right.orchestrationIntensity &&\n left.updateStatus === right.updateStatus &&\n activationIdentity(left.activation) === activationIdentity(right.activation)\n );\n}\n\nfunction activationIdentity(\n activation: AgentActivityTuttiModeActivation | null\n): string {\n return activation\n ? `${activation.id}:${activation.currentRevision.revision}:${activation.status}`\n : \"\";\n}\n","import type { AgentSessionEngineState } from \"./types.ts\";\nimport type { AttentionReadPartition } from \"./attentionReadState.types.ts\";\n\nexport function selectSessionAttention(\n state: AgentSessionEngineState,\n userId: string | null | undefined,\n agentSessionId: string | null | undefined\n) {\n const id = agentSessionId?.trim() ?? \"\";\n const user = userId?.trim() ?? \"\";\n return (\n state.attentionReadState.partitionsByUserId[user]?.recordsBySessionId[id] ??\n null\n );\n}\n\nexport function selectAttentionReadState(\n state: AgentSessionEngineState,\n userId: string | null | undefined\n): AttentionReadPartition {\n const user = userId?.trim() ?? \"\";\n return (\n state.attentionReadState.partitionsByUserId[user] ?? {\n hydrated: null,\n lastError: null,\n recordsBySessionId: {},\n workspaceId: null,\n writeDirty: false,\n writeInFlightCommandId: null,\n writeRevision: 0\n }\n );\n}\n","import type { AgentActivityMessage } from \"../types.ts\";\nimport type { AgentSessionEngineState } from \"./types.ts\";\n\nconst EMPTY_MESSAGES: readonly AgentActivityMessage[] = [];\n\nexport function selectSessionMessagesById(\n state: AgentSessionEngineState\n): Readonly<Record<string, readonly AgentActivityMessage[]>> {\n return state.sessionMessages.messagesBySessionId;\n}\n\nexport function selectSessionMessages(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): readonly AgentActivityMessage[] {\n const id = agentSessionId?.trim() ?? \"\";\n if (!id) return EMPTY_MESSAGES;\n return state.sessionMessages.messagesBySessionId[id] ?? EMPTY_MESSAGES;\n}\n","import type {\n AgentActivityComposerOptions,\n AgentActivityComposerOptionsLoadStatus\n} from \"../types.ts\";\nimport type { AgentSessionEngineState } from \"./types.ts\";\n\nexport function selectComposerOptions(\n state: AgentSessionEngineState,\n targetKey: string | null | undefined\n): AgentActivityComposerOptions | null {\n const key = targetKey?.trim() ?? \"\";\n if (!key) return null;\n return state.composerOptions.optionsByTargetKey[key] ?? null;\n}\n\nexport function selectComposerOptionsLoadStatus(\n state: AgentSessionEngineState,\n targetKey: string | null | undefined\n): AgentActivityComposerOptionsLoadStatus | undefined {\n const key = targetKey?.trim() ?? \"\";\n if (!key) return undefined;\n return state.composerOptions.entriesByTargetKey[key]?.status;\n}\n","import type { SessionReconcileRecord } from \"./sessionReconcile.types.ts\";\nimport type { AgentSessionEngineState } from \"./types.ts\";\n\nexport function selectEngineSessionReconcile(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): SessionReconcileRecord | null {\n const id = agentSessionId?.trim() ?? \"\";\n return id ? (state.sessionReconcile.recordsBySessionId[id] ?? null) : null;\n}\n\nexport function selectEngineSessionDetailHydrated(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): boolean {\n const id = agentSessionId?.trim() ?? \"\";\n if (!id) return false;\n return (\n Object.prototype.hasOwnProperty.call(\n state.sessionMessages.messagesBySessionId,\n id\n ) ||\n state.sessionReconcile.recordsBySessionId[id]?.messagesHydrated === true\n );\n}\n\nexport function selectEngineSessionDetailLoading(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): boolean {\n const record = selectEngineSessionReconcile(state, agentSessionId);\n if (!record || selectEngineSessionDetailHydrated(state, agentSessionId)) {\n return false;\n }\n return (\n record.pendingMessages ||\n record.inFlightScope === \"messages\" ||\n record.inFlightScope === \"state_and_messages\"\n );\n}\n","import type { AgentSessionEngineState } from \"./types.ts\";\n\nexport function selectPlanDecisionForTurn(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined,\n turnId: string | null | undefined\n) {\n const sessionId = agentSessionId?.trim() ?? \"\";\n const id = turnId?.trim() ?? \"\";\n return (\n Object.values(state.planDecisions.byId).find(\n (record) => record.agentSessionId === sessionId && record.turnId === id\n ) ?? null\n );\n}\n\nexport function selectPlanTurnDismissed(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined,\n turnId: string | null | undefined\n): boolean {\n const sessionId = agentSessionId?.trim() ?? \"\";\n const id = turnId?.trim() ?? \"\";\n return state.planDecisions.dismissedByTurnKey[`${sessionId}\\0${id}`] === true;\n}\n","import type { AgentSessionEngineState } from \"./types.ts\";\n\nconst EMPTY_ENGINE_AVAILABLE_COMMANDS: never[] = [];\n\nexport function selectEngineAvailableCommands(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n) {\n const id = agentSessionId?.trim() ?? \"\";\n const entry = state.sessionCommands.bySessionId[id];\n const session = state.sessionLifecycle.sessionsById[id];\n return entry && session?.workspaceId === entry.workspaceId\n ? entry.commands\n : EMPTY_ENGINE_AVAILABLE_COMMANDS;\n}\n","import type { AgentSessionEngineState } from \"./types.ts\";\nimport type {\n EngineQueuedPrompt,\n PromptQueueRecord\n} from \"./promptQueue.types.ts\";\n\nexport function selectEnginePromptQueue(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): PromptQueueRecord | null {\n const id = agentSessionId?.trim() ?? \"\";\n return state.promptQueue.recordsBySessionId[id] ?? null;\n}\n\nexport function selectEngineQueuedPrompts(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): readonly EngineQueuedPrompt[] {\n return selectEnginePromptQueue(state, agentSessionId)?.prompts ?? [];\n}\n\nexport function selectEngineHasQueuedPrompts(\n state: AgentSessionEngineState\n): boolean {\n return Object.values(state.promptQueue.recordsBySessionId).some(\n (record) => record.prompts.length > 0\n );\n}\n\nexport function selectEngineQueuedPrompt(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined,\n promptId: string | null | undefined\n): EngineQueuedPrompt | null {\n const id = promptId?.trim() ?? \"\";\n return (\n selectEngineQueuedPrompts(state, agentSessionId).find(\n (prompt) => prompt.id === id\n ) ?? null\n );\n}\n\nexport function selectEnginePromptQueueError(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): string | null {\n return selectEnginePromptQueue(state, agentSessionId)?.failureMessage ?? null;\n}\n\nexport function selectEngineHasVisibleQueuedSubmit(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined,\n clientSubmitId: string | null | undefined\n): boolean {\n const id = clientSubmitId?.trim() ?? \"\";\n return selectEngineQueuedPrompts(state, agentSessionId).some(\n (prompt) => prompt.clientSubmitId === id && prompt.visibleInQueue !== false\n );\n}\n","import type { AgentActivityInteraction, AgentActivityTurn } from \"./types.ts\";\n\ninterface WorkspaceAgentSessionProjectionInput {\n activeTurn: AgentActivityTurn | null;\n latestTurn: AgentActivityTurn | null;\n pendingInteractions: readonly AgentActivityInteraction[];\n}\n\nexport type WorkspaceAgentSessionDerivedStatus =\n | \"working\"\n | \"waiting\"\n | \"completed\"\n | \"failed\"\n | \"canceled\"\n | \"unknown\";\n\nexport function workspaceAgentSessionStatus(\n session: Pick<\n WorkspaceAgentSessionProjectionInput,\n \"activeTurn\" | \"latestTurn\" | \"pendingInteractions\"\n >\n): WorkspaceAgentSessionDerivedStatus {\n if (session.pendingInteractions.length > 0) return \"waiting\";\n const activeTurn = session.activeTurn;\n if (activeTurn && activeTurn.phase !== \"settled\") {\n return activeTurn.phase === \"waiting\" ? \"waiting\" : \"working\";\n }\n switch (session.latestTurn?.outcome) {\n case \"failed\":\n return \"failed\";\n case \"canceled\":\n return \"canceled\";\n case \"completed\":\n return \"completed\";\n default:\n return \"unknown\";\n }\n}\n"],"mappings":"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","names":["result","recordValue","recordValue","stringValue","recordValue","NO_COMMANDS","turnId","unchanged","NO_COMMANDS","unchanged","result","NO_COMMANDS","unchanged","record","result","NO_COMMANDS","unchanged","result","id","operation","changed","NO_COMMANDS","result","unchanged","changed","key","response","setOperation","next","sessionVersion","NO_COMMANDS","unchanged","replaceRecord","NO_COMMANDS","unchanged","result","NO_COMMANDS","unchanged","NO_COMMANDS","unchanged","NO_COMMANDS","unchanged","changed","NO_COMMANDS","unchanged","changed","NO_COMMANDS","unchanged","replaceRecord","result","NO_COMMANDS","unchanged","removeSession","pendingCreatesBySessionId","changed","activation","unchanged","result"]}
|
|
1
|
+
{"version":3,"sources":["../src/liveProtocolRevision.gen.ts","../src/activityValueParsing.ts","../src/liveEventParsing.ts","../src/capabilityReferences.ts","../src/sessionNormalization.ts","../src/generated/agentCapabilityKeys.ts","../src/capabilities.ts","../src/engine/sessionEntityKeys.ts","../src/engine/pendingIntents.selectors.ts","../src/engine/pendingIntents.types.ts","../src/engine/sessionLifecycle.availability.ts","../src/engine/sessionLifecycle.selectors.ts","../src/engine/agentActivitySnapshot.projector.ts","../src/merge.ts","../src/inlineActivityMessages.ts","../src/optimisticMessageOverlay.ts","../src/pagination.ts","../src/selectors.ts","../src/usage.ts","../src/engine/effectExecutor.ts","../src/engine/expiryClock.ts","../src/engine/engineRuntime.reducer.ts","../src/engine/promptQueue.lookup.ts","../src/engine/promptQueue.prompt.ts","../src/engine/promptQueue.record.ts","../src/engine/promptQueue.sendNow.ts","../src/engine/promptQueue.drainDecision.ts","../src/engine/promptQueue.submit.ts","../src/engine/promptQueue.initialState.ts","../src/engine/promptQueue.reducer.ts","../src/engine/pendingIntents.activationExtras.ts","../src/engine/pendingIntents.inactiveSessions.ts","../src/engine/pendingSubmit.reducer.ts","../src/engine/pendingIntents.reducer.ts","../src/engine/sessionSettings.reducer.ts","../src/interactionMonotonicity.ts","../src/engine/sessionEntities.reducer.ts","../src/engine/sessionLifecycle.reducer.ts","../src/engine/sessionReconcile.reducer.ts","../src/engine/attentionReadState.reducer.ts","../src/engine/commandResult.validation.ts","../src/engine/planDecision.reducer.ts","../src/engine/sessionCommands.reducer.ts","../src/engine/sessionMessages.reducer.ts","../src/engine/composerOptions.helpers.ts","../src/engine/composerOptions.reducer.ts","../src/engine/sessionMutations.reducer.ts","../src/engine/tuttiModeActivation.reducer.ts","../src/engine/rootReducer.ts","../src/engine/types.ts","../src/engine/createAgentSessionEngine.ts","../src/engine/engineRuntime.selectors.ts","../src/engine/sessionMutations.selectors.ts","../src/engine/sessionMutationDispatch.ts","../src/engine/tuttiModeActivation.selectors.ts","../src/engine/attentionReadState.selectors.ts","../src/engine/sessionMessages.selectors.ts","../src/engine/composerOptions.selectors.ts","../src/engine/sessionReconcile.selectors.ts","../src/engine/planDecision.selectors.ts","../src/engine/sessionCommands.selectors.ts","../src/engine/promptQueue.selectors.ts","../src/workspaceAgentSessionProjection.ts"],"sourcesContent":["// Code generated by tools/scripts/generate-agent-live-protocol.mjs. DO NOT EDIT.\n\nexport const AGENT_ACTIVITY_LIVE_PROTOCOL_REVISION =\n \"sha256:d6d418949c61ff09\" as const;\n","export function cloneJSONValue(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(cloneJSONValue);\n if (value !== null && typeof value === \"object\") {\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>).map(([key, entry]) => [\n key,\n cloneJSONValue(entry)\n ])\n );\n }\n return value;\n}\n\nexport function recordValue(value: unknown): Record<string, unknown> | null {\n return typeof value === \"object\" && value !== null\n ? (value as Record<string, unknown>)\n : null;\n}\n\nexport function stringValue(value: unknown): string {\n return typeof value === \"string\" ? value.trim() : \"\";\n}\n\nexport function nullableStringValue(value: unknown): string | null | undefined {\n return typeof value === \"string\" ? value : value === null ? null : undefined;\n}\n\nexport function numberValue(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nexport function messageVersionValue(source: Record<string, unknown>): number {\n return numberValue(source.version) ?? numberValue(source.seq) ?? 0;\n}\n","import { cloneJSONValue } from \"./activityValueParsing.ts\";\nimport type { AgentActivityMessageDeltaEvent } from \"./message.types.ts\";\n\n/**\n * Cleans the transport-shaped public WebSocket payload into the strict live\n * message contract consumed by the optimistic overlay.\n */\nexport function parseAgentActivityMessageDeltaEvent(\n value: unknown\n): AgentActivityMessageDeltaEvent | null {\n const event = recordValue(value);\n const data = recordValue(event?.data);\n if (\n event?.eventType !== \"message_delta\" ||\n !data ||\n !nonEmptyString(event.workspaceId) ||\n !nonEmptyString(event.agentSessionId) ||\n data.workspaceId !== event.workspaceId ||\n data.agentSessionId !== event.agentSessionId ||\n !nonEmptyString(data.messageId) ||\n !nonEmptyString(data.turnId) ||\n !nonEmptyString(data.role) ||\n !nonEmptyString(data.kind) ||\n !positiveSafeInteger(data.occurredAtUnixMs)\n ) {\n return null;\n }\n const content = parseContentOperation(data.content);\n if (data.content !== undefined && !content) {\n return null;\n }\n const toolOutput = parseToolOutputOperation(data.toolOutput);\n if (\n (data.toolOutput !== undefined && !toolOutput) ||\n (toolOutput && data.kind !== \"tool_call\")\n ) {\n return null;\n }\n const payloadSet =\n data.payloadSet === undefined ? undefined : recordValue(data.payloadSet);\n if (data.payloadSet !== undefined && !payloadSet) {\n return null;\n }\n const payloadUnset = stringArray(data.payloadUnset);\n if (data.payloadUnset !== undefined && !payloadUnset) {\n return null;\n }\n const semantics =\n data.semantics === undefined ? undefined : recordValue(data.semantics);\n if (data.semantics !== undefined && !semantics) {\n return null;\n }\n if (\n (data.status !== undefined && typeof data.status !== \"string\") ||\n !optionalNonNegativeSafeInteger(data.startedAtUnixMs) ||\n !optionalNonNegativeSafeInteger(data.completedAtUnixMs)\n ) {\n return null;\n }\n if (\n !content &&\n !toolOutput &&\n !payloadSet &&\n !payloadUnset &&\n data.status === undefined &&\n !semantics &&\n data.startedAtUnixMs === undefined &&\n data.completedAtUnixMs === undefined\n ) {\n return null;\n }\n return {\n workspaceId: event.workspaceId,\n agentSessionId: event.agentSessionId,\n eventType: \"message_delta\",\n data: {\n workspaceId: data.workspaceId,\n agentSessionId: data.agentSessionId,\n messageId: data.messageId,\n turnId: data.turnId,\n role: data.role,\n kind: data.kind,\n occurredAtUnixMs: data.occurredAtUnixMs,\n ...(content ? { content } : {}),\n ...(toolOutput ? { toolOutput } : {}),\n ...(payloadSet\n ? {\n payloadSet: cloneJSONValue(payloadSet) as Record<string, unknown>\n }\n : {}),\n ...(payloadUnset ? { payloadUnset } : {}),\n ...(typeof data.status === \"string\" ? { status: data.status } : {}),\n ...(semantics\n ? {\n semantics: cloneJSONValue(\n semantics\n ) as AgentActivityMessageDeltaEvent[\"data\"][\"semantics\"]\n }\n : {}),\n ...(typeof data.startedAtUnixMs === \"number\"\n ? { startedAtUnixMs: data.startedAtUnixMs }\n : {}),\n ...(typeof data.completedAtUnixMs === \"number\"\n ? { completedAtUnixMs: data.completedAtUnixMs }\n : {})\n }\n };\n}\n\nfunction parseToolOutputOperation(\n value: unknown\n): AgentActivityMessageDeltaEvent[\"data\"][\"toolOutput\"] | null {\n if (value === undefined) return null;\n const operation = recordValue(value);\n if (!operation || typeof operation.text !== \"string\") return null;\n if (operation.operation === \"set\" && operation.offsetBytes === undefined) {\n return { operation: \"set\", text: operation.text };\n }\n if (\n operation.operation === \"append_text\" &&\n operation.text.length > 0 &&\n nonNegativeSafeInteger(operation.offsetBytes)\n ) {\n return {\n operation: \"append_text\",\n text: operation.text,\n offsetBytes: operation.offsetBytes\n };\n }\n return null;\n}\n\nfunction parseContentOperation(\n value: unknown\n): AgentActivityMessageDeltaEvent[\"data\"][\"content\"] | null {\n if (value === undefined) return null;\n const operation = recordValue(value);\n if (!operation) return null;\n if (\n operation.operation === \"append_text\" &&\n typeof operation.text === \"string\"\n ) {\n return { operation: \"append_text\", text: operation.text };\n }\n if (\n operation.operation === \"set\" &&\n Object.prototype.hasOwnProperty.call(operation, \"value\")\n ) {\n return {\n operation: \"set\",\n value: cloneJSONValue(operation.value)\n };\n }\n return null;\n}\n\nfunction recordValue(value: unknown): Record<string, unknown> | null {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction nonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.trim().length > 0;\n}\n\nfunction positiveSafeInteger(value: unknown): value is number {\n return typeof value === \"number\" && Number.isSafeInteger(value) && value > 0;\n}\n\nfunction nonNegativeSafeInteger(value: unknown): value is number {\n return typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0;\n}\n\nfunction optionalNonNegativeSafeInteger(value: unknown): boolean {\n return (\n value === undefined ||\n (typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0)\n );\n}\n\nfunction stringArray(value: unknown): string[] | null {\n if (value === undefined) return null;\n if (\n !Array.isArray(value) ||\n value.length === 0 ||\n value.some((item) => !nonEmptyString(item))\n ) {\n return null;\n }\n return [...new Set(value)];\n}\n","import type { AgentActivityCapabilityReference } from \"./types.ts\";\n\nexport function normalizeAgentActivityCapabilityReferences(\n references: readonly AgentActivityCapabilityReference[] | null | undefined\n): readonly AgentActivityCapabilityReference[] {\n if (!references?.length) return [];\n const seen = new Set<string>();\n const normalized: AgentActivityCapabilityReference[] = [];\n for (const reference of references) {\n const capability = reference.capability.trim();\n if (capability !== \"tutti\" || reference.source !== \"slash_command\")\n continue;\n const key = `${reference.source}:${capability}`;\n if (seen.has(key)) continue;\n seen.add(key);\n normalized.push({ capability: \"tutti\", source: \"slash_command\" });\n }\n return normalized;\n}\n","import type { AgentActivitySession } from \"./types.ts\";\n\ntype RequiredSessionInputFields =\n | \"activeTurnId\"\n | \"agentSessionId\"\n | \"cwd\"\n | \"latestTurnInteractions\"\n | \"pendingInteractions\"\n | \"provider\"\n | \"title\"\n | \"workspaceId\";\n\nexport type AgentActivitySessionInput = Pick<\n AgentActivitySession,\n RequiredSessionInputFields\n> &\n Partial<Omit<AgentActivitySession, RequiredSessionInputFields>>;\n\nexport function normalizeAgentActivitySession<const Provider extends string>(\n source: AgentActivitySessionInput & {\n provider: Provider;\n providerSessionId: string;\n }\n): AgentActivitySession & { provider: Provider; providerSessionId: string };\nexport function normalizeAgentActivitySession(\n source: AgentActivitySessionInput\n): AgentActivitySession;\nexport function normalizeAgentActivitySession(\n source: AgentActivitySessionInput\n): AgentActivitySession {\n const createdAtUnixMs = source.createdAtUnixMs ?? source.startedAtUnixMs ?? 0;\n const updatedAtUnixMs =\n source.updatedAtUnixMs ?? source.lastEventUnixMs ?? createdAtUnixMs;\n return {\n ...source,\n kind: source.kind ?? \"root\",\n rootAgentSessionId: source.rootAgentSessionId ?? null,\n rootTurnId: source.rootTurnId ?? null,\n parentAgentSessionId: source.parentAgentSessionId ?? null,\n parentTurnId: source.parentTurnId ?? null,\n parentToolCallId: source.parentToolCallId ?? null,\n agentTargetId: source.agentTargetId ?? null,\n providerSessionId: source.providerSessionId ?? null,\n activeTurnId: source.activeTurnId,\n activeTurn: source.activeTurn ?? null,\n latestTurn: source.latestTurn ?? source.activeTurn ?? null,\n latestTurnInteractions: source.latestTurnInteractions,\n pendingInteractions: source.pendingInteractions,\n settings: source.settings ?? {},\n permissionConfig: source.permissionConfig ?? {\n configurable: false,\n modes: []\n },\n capabilities: source.capabilities ?? null,\n usage: source.usage ?? null,\n goal: source.goal ?? null,\n tuttiModeActivation: source.tuttiModeActivation ?? null,\n imported: source.imported ?? false,\n visible: source.visible ?? true,\n resumable: source.resumable ?? false,\n messageVersion: source.messageVersion ?? 0,\n lastEventUnixMs: source.lastEventUnixMs ?? updatedAtUnixMs,\n startedAtUnixMs: source.startedAtUnixMs ?? createdAtUnixMs,\n endedAtUnixMs: source.endedAtUnixMs ?? null,\n pinnedAtUnixMs: source.pinnedAtUnixMs ?? null,\n createdAtUnixMs,\n updatedAtUnixMs\n };\n}\n","// Code generated by tools/scripts/generate-agent-gui-provider-catalog.mjs. DO NOT EDIT.\n\nexport const AGENT_CAPABILITY_KEYS = [\n \"imageInput\",\n \"modelImageInputRequired\",\n \"modelSwitch\",\n \"modelPlanBinding\",\n \"skills\",\n \"compact\",\n \"tokenUsage\",\n \"rateLimits\",\n \"planMode\",\n \"interrupt\",\n \"activeTurnGuidance\",\n \"browserUse\",\n \"computerUse\",\n \"goalPause\",\n \"planImplementation\",\n \"permissionModeChangeDuringTurn\",\n \"permissionModeChangeDeferred\",\n \"review\",\n \"resumeRunningTurn\"\n] as const;\nexport type AgentCapabilityKey = (typeof AGENT_CAPABILITY_KEYS)[number];\n","import type {\n AgentActivityComposerOptions,\n AgentActivitySessionCapabilities\n} from \"./types.ts\";\nexport {\n AGENT_CAPABILITY_KEYS,\n type AgentCapabilityKey\n} from \"./generated/agentCapabilityKeys.ts\";\nimport {\n AGENT_CAPABILITY_KEYS,\n type AgentCapabilityKey\n} from \"./generated/agentCapabilityKeys.ts\";\n\nexport interface AgentActivityCapabilityInput {\n composerOptions?: AgentActivityComposerOptions | null;\n sessionCapabilities?: Partial<Record<AgentCapabilityKey, boolean>> | null;\n}\n\nexport function resolveAgentActivityCapability(\n key: AgentCapabilityKey,\n input: AgentActivityCapabilityInput\n): boolean | null {\n const sessionValue = input.sessionCapabilities?.[key];\n if (typeof sessionValue === \"boolean\") return sessionValue;\n const composerValue = input.composerOptions?.capabilities?.[key];\n return typeof composerValue === \"boolean\" ? composerValue : null;\n}\n\nexport function hasAgentCapability(\n capabilities: Partial<Record<AgentCapabilityKey, boolean>> | null | undefined,\n key: AgentCapabilityKey\n): boolean {\n return capabilities?.[key] === true;\n}\n\n/**\n * Projects the canonical capability id list carried by session metadata into\n * the closed AgentActivity capability record consumed by AgentGUI.\n */\nexport function agentActivitySessionCapabilitiesFromIds(\n capabilities: readonly string[]\n): AgentActivitySessionCapabilities {\n const capabilitySet = new Set(capabilities);\n return Object.fromEntries(\n AGENT_CAPABILITY_KEYS.map((capability) => [\n capability,\n capabilitySet.has(capability)\n ])\n ) as unknown as AgentActivitySessionCapabilities;\n}\n","export function canonicalTurnKey(\n agentSessionId: string,\n turnId: string\n): string {\n return scopedEntityKey(agentSessionId, turnId);\n}\n\nexport function canonicalInteractionKey(\n agentSessionId: string,\n turnId: string,\n requestId: string\n): string {\n return scopedEntityKey(agentSessionId, scopedEntityKey(turnId, requestId));\n}\n\nfunction scopedEntityKey(agentSessionId: string, entityId: string): string {\n const session = agentSessionId.trim();\n const entity = entityId.trim();\n return `${session.length}:${session}${entity}`;\n}\n","import type { AgentSessionEngineState } from \"./types.ts\";\nimport type {\n PendingActivationIntentRecord,\n PendingSubmitIntentRecord\n} from \"./pendingIntents.types.ts\";\nimport { canonicalTurnKey } from \"./sessionEntityKeys.ts\";\n\nexport function selectPendingActivations(\n state: AgentSessionEngineState\n): readonly PendingActivationIntentRecord[] {\n return Object.values(state.pendingIntents.activationsByRequestId).sort(\n (left, right) =>\n left.requestedAtUnixMs - right.requestedAtUnixMs ||\n left.requestId.localeCompare(right.requestId)\n );\n}\n\nexport function selectPendingActivationByRequestId(\n state: AgentSessionEngineState,\n requestId: string | null | undefined\n): PendingActivationIntentRecord | null {\n const id = requestId?.trim() ?? \"\";\n return state.pendingIntents.activationsByRequestId[id] ?? null;\n}\n\nconst EMPTY_PENDING_SUBMITS: readonly PendingSubmitIntentRecord[] = [];\n\nexport interface SessionActivationPresentation {\n errorCode: string | null;\n errorMessage: string | null;\n requestId: string | null;\n status: \"inactive\" | \"activating\" | \"active\" | \"failed\";\n}\n\nexport function selectPendingSubmitsForSession(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): readonly PendingSubmitIntentRecord[] {\n const id = agentSessionId?.trim() ?? \"\";\n const matches = Object.values(\n state.pendingIntents.submitsByClientSubmitId\n ).filter((pending) => pending.agentSessionId === id);\n return matches.length > 0 ? matches : EMPTY_PENDING_SUBMITS;\n}\n\nexport function pendingSubmitRecordListsEqual(\n left: readonly PendingSubmitIntentRecord[],\n right: readonly PendingSubmitIntentRecord[]\n): boolean {\n return (\n left.length === right.length &&\n left.every((record, index) => record === right[index])\n );\n}\n\nexport function selectSessionIsSubmitting(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): boolean {\n const id = agentSessionId?.trim() ?? \"\";\n if (!id) {\n return false;\n }\n const visibleQueuedSubmitIds = new Set(\n (state.promptQueue.recordsBySessionId[id]?.prompts ?? [])\n .filter((prompt) => prompt.visibleInQueue !== false)\n .map((prompt) => prompt.clientSubmitId)\n .filter((value): value is string => Boolean(value))\n );\n return selectPendingSubmitsForSession(state, id).some(\n (pending) =>\n (pending.status === \"requested\" || pending.status === \"uncertain\") &&\n !visibleQueuedSubmitIds.has(pending.clientSubmitId)\n );\n}\n\nexport function selectSessionHasUnconfirmedSubmit(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): boolean {\n const id = agentSessionId?.trim() ?? \"\";\n const session = id ? state.sessionLifecycle.sessionsById[id] : undefined;\n return selectPendingSubmitsForSession(state, agentSessionId).some(\n (pending) => {\n if (pending.status !== \"accepted\") return false;\n const turnId = pending.turnId?.trim() ?? \"\";\n if (!turnId) return true;\n const turn =\n state.sessionLifecycle.turnsById[\n canonicalTurnKey(pending.agentSessionId, turnId)\n ];\n if (turn?.phase === \"settled\") return false;\n return session?.activeTurnId === turnId;\n }\n );\n}\n\nexport function selectLatestPendingSubmitForSession(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): PendingSubmitIntentRecord | null {\n let latest: PendingSubmitIntentRecord | null = null;\n for (const pending of selectPendingSubmitsForSession(state, agentSessionId)) {\n if (!latest || pending.requestedAtUnixMs >= latest.requestedAtUnixMs) {\n latest = pending;\n }\n }\n return latest;\n}\n\nexport function selectLatestActivationForSession(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): PendingActivationIntentRecord | null {\n const id = agentSessionId?.trim() ?? \"\";\n let latest: PendingActivationIntentRecord | null = null;\n for (const activation of Object.values(\n state.pendingIntents.activationsByRequestId\n )) {\n if (\n activation.agentSessionId === id &&\n (!latest || activation.requestedAtUnixMs >= latest.requestedAtUnixMs)\n ) {\n latest = activation;\n }\n }\n return latest;\n}\n\nexport function selectSessionActivationPresentations(\n state: AgentSessionEngineState\n): Readonly<Record<string, SessionActivationPresentation>> {\n const latestBySessionId = new Map<string, PendingActivationIntentRecord>();\n for (const activation of Object.values(\n state.pendingIntents.activationsByRequestId\n )) {\n const current = latestBySessionId.get(activation.agentSessionId);\n if (!current || activation.requestedAtUnixMs >= current.requestedAtUnixMs) {\n latestBySessionId.set(activation.agentSessionId, activation);\n }\n }\n const result: Record<string, SessionActivationPresentation> = {};\n for (const [agentSessionId, activation] of latestBySessionId) {\n result[agentSessionId] = {\n errorCode: activation.errorCode,\n errorMessage: activation.errorMessage,\n requestId: activation.requestId,\n status:\n activation.settingsUpdateStatus === \"failed\"\n ? \"failed\"\n : activation.status === \"confirmed\"\n ? \"active\"\n : activation.status === \"failed\"\n ? \"failed\"\n : activation.status === \"canceled\"\n ? \"inactive\"\n : \"activating\"\n };\n }\n for (const agentSessionId of Object.keys(\n state.pendingIntents.inactiveSessionIds\n )) {\n result[agentSessionId] = {\n errorCode: null,\n errorMessage: null,\n requestId: null,\n status: \"inactive\"\n };\n }\n return result;\n}\n\nexport function sessionActivationPresentationMapsEqual(\n left: Readonly<Record<string, SessionActivationPresentation>>,\n right: Readonly<Record<string, SessionActivationPresentation>>\n): boolean {\n const leftKeys = Object.keys(left);\n const rightKeys = Object.keys(right);\n return (\n leftKeys.length === rightKeys.length &&\n leftKeys.every((key) => {\n const a = left[key];\n const b = right[key];\n return (\n b !== undefined &&\n a?.errorCode === b.errorCode &&\n a.errorMessage === b.errorMessage &&\n a.requestId === b.requestId &&\n a.status === b.status\n );\n })\n );\n}\n","import type {\n AgentActivityCapabilityReference,\n AgentActivityInitialGoalControl,\n AgentActivityInitialTuttiModeActivation,\n AgentActivityMessage,\n AgentActivitySessionSettings,\n AgentActivitySubmitDiagnostics,\n AgentActivitySubmitSettingsPatch,\n AgentPromptContentBlock\n} from \"../types.ts\";\nimport type { AgentActivitySessionMessageWindow } from \"../messageWindow.types.ts\";\nimport type { AgentActivityRailPlacement } from \"../railPlacement.types.ts\";\n\nexport type PendingActivationStatus =\n | \"requested\"\n | \"confirmed\"\n | \"canceled\"\n | \"uncertain\"\n | \"failed\";\n\n/** True while an activation may still yield, or already yielded, a session. */\nexport function isPendingActivationViable(\n activation: { status: PendingActivationStatus } | null | undefined\n): boolean {\n return (\n activation !== null &&\n activation !== undefined &&\n activation.status !== \"failed\" &&\n activation.status !== \"canceled\"\n );\n}\n\ninterface PendingActivationIntentRecordBase {\n agentSessionId: string;\n capabilityRefs?: readonly AgentActivityCapabilityReference[];\n content: readonly AgentPromptContentBlock[];\n displayPrompt?: string;\n cwd: string;\n errorCode: string | null;\n errorMessage: string | null;\n expiresAtUnixMs: number;\n initialTurnExpected: boolean;\n initialGoalControl?: Readonly<AgentActivityInitialGoalControl>;\n railSectionKey?: string;\n railPlacement?: AgentActivityRailPlacement;\n submitDiagnostics?: Readonly<AgentActivitySubmitDiagnostics>;\n pendingSettingsPatch?: Readonly<Record<string, unknown>>;\n settingsUpdateStatus?: \"failed\" | \"inFlight\" | \"unknown\";\n requestedAtUnixMs: number;\n requestId: string;\n settings?: AgentActivitySessionSettings;\n status: PendingActivationStatus;\n title: string | null;\n workspaceId: string;\n initialTuttiModeActivation?: AgentActivityInitialTuttiModeActivation;\n tuttiModeDraftKey?: string;\n}\n\nexport type PendingActivationIntentRecord =\n | (PendingActivationIntentRecordBase & {\n agentTargetId: string;\n clientSubmitId: string;\n mode: \"new\";\n optimisticTitle?: string;\n })\n | (PendingActivationIntentRecordBase & {\n agentTargetId: string | null;\n clientSubmitId: null;\n mode: \"existing\";\n optimisticTitle?: never;\n });\n\nexport type PendingSubmitStatus =\n | \"requested\"\n | \"accepted\"\n | \"confirmed\"\n | \"uncertain\"\n | \"failed\";\n\nexport interface PendingSubmitIntentRecord {\n acceptedSessionVersion: number | null;\n agentSessionId: string;\n clientSubmitId: string;\n capabilityRefs?: readonly AgentActivityCapabilityReference[];\n content: readonly AgentPromptContentBlock[];\n displayPrompt?: string;\n errorCode: string | null;\n errorMessage: string | null;\n expiresAtUnixMs: number;\n submitDiagnostics?: Readonly<AgentActivitySubmitDiagnostics>;\n requestedAtUnixMs: number;\n status: PendingSubmitStatus;\n turnId: string | null;\n workspaceId: string;\n}\n\nexport interface PendingIntentsState {\n activationsByRequestId: Readonly<\n Record<string, PendingActivationIntentRecord>\n >;\n inactiveSessionIds: Readonly<Record<string, true>>;\n submitsByClientSubmitId: Readonly<Record<string, PendingSubmitIntentRecord>>;\n}\n\ninterface SessionActivationRequestedIntentBase {\n type: \"activation/requested\";\n agentSessionId: string;\n capabilityRefs?: readonly AgentActivityCapabilityReference[];\n content?: readonly AgentPromptContentBlock[];\n cwd?: string;\n expiresAtUnixMs: number;\n initialTurnExpected?: boolean;\n initialGoalControl?: Readonly<AgentActivityInitialGoalControl>;\n railSectionKey?: string;\n railPlacement?: AgentActivityRailPlacement;\n initialDisplayPrompt?: string;\n runtimeContent?: readonly AgentPromptContentBlock[];\n submitDiagnostics?: Readonly<AgentActivitySubmitDiagnostics>;\n requestedAtUnixMs: number;\n requestId: string;\n settings?: AgentActivitySessionSettings;\n title?: string;\n visible?: boolean;\n workspaceId: string;\n initialTuttiModeActivation?: AgentActivityInitialTuttiModeActivation;\n tuttiModeDraftKey?: string;\n}\n\nexport type SessionActivationRequestedIntent =\n | (SessionActivationRequestedIntentBase & {\n agentTargetId: string;\n clientSubmitId: string;\n mode: \"new\";\n optimisticTitle?: string;\n })\n | (SessionActivationRequestedIntentBase & {\n agentTargetId?: string | null;\n clientSubmitId?: never;\n mode: \"existing\";\n optimisticTitle?: never;\n });\n\nexport interface SessionActivationDismissedIntent {\n type: \"activation/dismissed\";\n requestId: string;\n}\n\nexport interface SessionActivationSettingsPatchedIntent {\n type: \"activation/settingsPatched\";\n agentSessionId: string;\n settings: Readonly<Record<string, unknown>>;\n}\n\nexport interface SessionActivationFailureRecordedIntent {\n type: \"activation/failureRecorded\";\n agentSessionId: string;\n errorCode?: string | null;\n errorMessage: string;\n occurredAtUnixMs: number;\n requestId: string;\n workspaceId: string;\n}\n\nexport interface SessionActivationFailureClearedIntent {\n type: \"activation/failureCleared\";\n agentSessionId: string;\n}\n\nexport interface SessionUnactivationRequestedIntent {\n type: \"activation/unactivateRequested\";\n agentSessionId: string;\n commandId: string;\n workspaceId: string;\n}\n\ninterface SessionActivateCommandBase {\n type: \"session/activate\";\n agentSessionId: string;\n capabilityRefs?: readonly AgentActivityCapabilityReference[];\n commandId: string;\n correlationId: string;\n cwd?: string;\n initialContent?: readonly AgentPromptContentBlock[];\n initialDisplayPrompt?: string;\n initialGoalControl?: Readonly<AgentActivityInitialGoalControl>;\n initialTuttiModeActivation?: AgentActivityInitialTuttiModeActivation;\n railPlacement?: AgentActivityRailPlacement;\n submitDiagnostics?: Readonly<AgentActivitySubmitDiagnostics>;\n settings?: AgentActivitySessionSettings;\n timeoutMs?: number;\n title?: string;\n visible?: boolean;\n workspaceId: string;\n}\n\nexport type SessionActivateCommand =\n | (SessionActivateCommandBase & {\n agentTargetId: string;\n clientSubmitId: string;\n mode: \"new\";\n })\n | (SessionActivateCommandBase & {\n agentTargetId?: string | null;\n clientSubmitId?: never;\n mode: \"existing\";\n });\n\nexport interface SessionUnactivateCommand {\n type: \"session/unactivate\";\n agentSessionId: string;\n commandId: string;\n workspaceId: string;\n}\n\nexport interface SessionUpdateSettingsCommand {\n type: \"session/updateSettings\";\n agentSessionId: string;\n commandId: string;\n correlationId: string;\n settings: Readonly<Record<string, unknown>>;\n workspaceId: string;\n}\n\nexport interface SubmitRequestedIntent {\n type: \"submit/requested\";\n agentSessionId: string;\n clientSubmitId: string;\n capabilityRefs?: readonly AgentActivityCapabilityReference[];\n content: readonly AgentPromptContentBlock[];\n displayPrompt?: string;\n expiresAtUnixMs: number;\n submitDiagnostics?: Readonly<AgentActivitySubmitDiagnostics>;\n requestedAtUnixMs: number;\n requiredSettingsPatch?: Readonly<AgentActivitySubmitSettingsPatch>;\n routing?: \"auto\" | \"immediate\" | \"send_now\";\n runtimeContent?: readonly AgentPromptContentBlock[];\n workspaceId: string;\n}\n\nexport interface SubmitDismissedIntent {\n type: \"submit/dismissed\";\n clientSubmitId: string;\n}\n\nexport interface SubmitCanceledIntent {\n type: \"submit/canceled\";\n agentSessionId: string;\n clientSubmitId: string;\n}\n\nexport interface ActivityMessagesReceivedIntent {\n type: \"message/snapshotReceived\";\n messages: readonly AgentActivityMessage[];\n sessionMessageWindows?: readonly (AgentActivitySessionMessageWindow & {\n agentSessionId: string;\n })[];\n workspaceId?: string;\n}\n\nexport type PendingIntentsIntent =\n | ActivityMessagesReceivedIntent\n | SessionActivationDismissedIntent\n | SessionActivationSettingsPatchedIntent\n | SessionActivationFailureClearedIntent\n | SessionActivationFailureRecordedIntent\n | SessionActivationRequestedIntent\n | SessionUnactivationRequestedIntent\n | SubmitCanceledIntent\n | SubmitDismissedIntent\n | SubmitRequestedIntent;\n","import type { SessionLifecycleState } from \"./sessionLifecycle.types.ts\";\nimport { canonicalTurnKey } from \"./sessionEntityKeys.ts\";\n\nexport interface CanonicalSubmitAvailability {\n reason?:\n | \"active_turn\"\n | \"agent_capability_checking\"\n | \"agent_capability_unavailable\"\n | \"waiting\"\n | \"transport_reconnecting\"\n | \"transport_unavailable\";\n state: \"available\" | \"blocked\" | \"missing\";\n}\n\nexport type CanonicalSessionLifecycleView = Pick<\n SessionLifecycleState,\n \"interactionsById\" | \"operationBySessionId\" | \"sessionsById\" | \"turnsById\"\n>;\n\nexport function deriveCanonicalSubmitAvailability(\n lifecycle: CanonicalSessionLifecycleView,\n rawAgentSessionId: string | null | undefined\n): CanonicalSubmitAvailability {\n const agentSessionId = rawAgentSessionId?.trim() ?? \"\";\n const session = lifecycle.sessionsById[agentSessionId];\n if (!session) {\n return { state: \"missing\" };\n }\n const runtimeAvailability =\n lifecycle.operationBySessionId[agentSessionId]?.runtimeAvailability;\n if (runtimeAvailability?.state === \"blocked\") {\n return { state: \"blocked\", reason: runtimeAvailability.reason };\n }\n if (\n Object.values(lifecycle.interactionsById).some(\n (interaction) =>\n interaction.agentSessionId === agentSessionId &&\n interaction.status === \"pending\"\n )\n ) {\n return { state: \"blocked\", reason: \"waiting\" };\n }\n const activeTurn = session.activeTurnId\n ? lifecycle.turnsById[\n canonicalTurnKey(agentSessionId, session.activeTurnId)\n ]\n : undefined;\n if (activeTurn && activeTurn.phase !== \"settled\") {\n return { state: \"blocked\", reason: \"active_turn\" };\n }\n return { state: \"available\" };\n}\n","import type { AgentActivityInteraction, AgentActivityTurn } from \"../types.ts\";\nimport type { AgentActivityDisplayStatus } from \"../displayStatus.types.ts\";\nimport type { AgentSessionEngineState } from \"./types.ts\";\nimport type {\n InteractionResponseState,\n SessionCancelState,\n CanonicalAgentSession,\n SessionOperationState\n} from \"./sessionLifecycle.types.ts\";\nimport {\n canonicalInteractionKey,\n canonicalTurnKey\n} from \"./sessionEntityKeys.ts\";\nimport { selectLatestActivationForSession } from \"./pendingIntents.selectors.ts\";\nimport { isPendingActivationViable } from \"./pendingIntents.types.ts\";\nimport {\n deriveCanonicalSubmitAvailability,\n type CanonicalSubmitAvailability\n} from \"./sessionLifecycle.availability.ts\";\n\nexport interface WorkspaceAgentConsumerSession {\n activeTurn: AgentActivityTurn | null;\n displayStatus: AgentActivityDisplayStatus;\n latestTurn: AgentActivityTurn | null;\n pendingInteractions: readonly AgentActivityInteraction[];\n session: CanonicalAgentSession;\n}\n\nexport interface WorkspaceAgentConsumerCounts {\n canceled: number;\n completed: number;\n failed: number;\n idle: number;\n waiting: number;\n working: number;\n}\n\nexport interface EngineSubmitAvailability {\n reason?: Exclude<CanonicalSubmitAvailability[\"reason\"], undefined>;\n state: \"available\" | \"blocked\";\n}\n\nexport function selectEngineSessionRuntimeAvailability(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n) {\n const id = agentSessionId?.trim() ?? \"\";\n return (\n state.sessionLifecycle.operationBySessionId[id]?.runtimeAvailability ?? null\n );\n}\n\nconst EMPTY_CONSUMER_COUNTS: WorkspaceAgentConsumerCounts = {\n canceled: 0,\n completed: 0,\n failed: 0,\n idle: 0,\n waiting: 0,\n working: 0\n};\n\nexport function selectEngineSession(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): CanonicalAgentSession | null {\n const id = agentSessionId?.trim() ?? \"\";\n if (!state.sessionLifecycle.sessionsById[id]) return null;\n return state.sessionLifecycle.sessionsById[id] ?? null;\n}\n\nexport function selectEngineSessionDeleted(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): boolean {\n const id = agentSessionId?.trim() ?? \"\";\n return Boolean(id && state.sessionLifecycle.deletedSessionIds[id]);\n}\n\nexport function selectEngineTurnsForSession(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): readonly AgentActivityTurn[] {\n const id = agentSessionId?.trim() ?? \"\";\n if (!state.sessionLifecycle.sessionsById[id]) return [];\n return Object.values(state.sessionLifecycle.turnsById)\n .filter((turn) => turn.agentSessionId === id)\n .sort(compareTurnsByOccurrence);\n}\n\nexport function selectEngineActiveTurn(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): AgentActivityTurn | null {\n const session = selectEngineSession(state, agentSessionId);\n return session?.activeTurnId\n ? (state.sessionLifecycle.turnsById[\n canonicalTurnKey(session.agentSessionId, session.activeTurnId)\n ] ?? null)\n : null;\n}\n\nexport function selectEngineTurn(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined,\n turnId: string | null | undefined\n): AgentActivityTurn | null {\n const sessionId = agentSessionId?.trim() ?? \"\";\n const id = turnId?.trim() ?? \"\";\n return sessionId && id && state.sessionLifecycle.sessionsById[sessionId]\n ? (state.sessionLifecycle.turnsById[canonicalTurnKey(sessionId, id)] ??\n null)\n : null;\n}\n\nexport function selectEngineInteraction(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined,\n turnId: string | null | undefined,\n requestId: string | null | undefined\n): AgentActivityInteraction | null {\n const sessionId = agentSessionId?.trim() ?? \"\";\n const turn = turnId?.trim() ?? \"\";\n const id = requestId?.trim() ?? \"\";\n if (\n !sessionId ||\n !turn ||\n !id ||\n !state.sessionLifecycle.sessionsById[sessionId]\n ) {\n return null;\n }\n const interaction =\n state.sessionLifecycle.interactionsById[\n canonicalInteractionKey(sessionId, turn, id)\n ];\n return interaction &&\n state.sessionLifecycle.turnsById[\n canonicalTurnKey(sessionId, interaction.turnId)\n ]\n ? interaction\n : null;\n}\n\nexport function selectEngineInteractionResponse(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined,\n turnId: string | null | undefined,\n requestId: string | null | undefined\n): InteractionResponseState | null {\n const sessionId = agentSessionId?.trim() ?? \"\";\n const turn = turnId?.trim() ?? \"\";\n const id = requestId?.trim() ?? \"\";\n return sessionId && turn && id\n ? (state.sessionLifecycle.interactionResponsesById[\n canonicalInteractionKey(sessionId, turn, id)\n ] ?? null)\n : null;\n}\n\nexport function selectEngineSessionIsRespondingToInteraction(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): boolean {\n const id = agentSessionId?.trim() ?? \"\";\n return Object.values(state.sessionLifecycle.interactionResponsesById).some(\n (response) =>\n response.agentSessionId === id &&\n (response.status === \"responding\" || response.status === \"unknown\")\n );\n}\n\nexport function selectEngineSessionSettingsUpdate(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n) {\n const id = agentSessionId?.trim() ?? \"\";\n return (\n state.sessionLifecycle.operationBySessionId[id]?.settingsUpdate ?? null\n );\n}\n\nexport function selectEngineInteractionResponseError(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): string | null {\n const id = agentSessionId?.trim() ?? \"\";\n return (\n Object.values(state.sessionLifecycle.interactionResponsesById)\n .filter((response) => response.agentSessionId === id)\n .sort((left, right) => right.commandId.localeCompare(left.commandId))\n .find((response) => response.errorMessage)?.errorMessage ?? null\n );\n}\n\nexport function selectEngineLatestTurn(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): AgentActivityTurn | null {\n const id = agentSessionId?.trim() ?? \"\";\n if (!state.sessionLifecycle.sessionsById[id]) return null;\n let latestTurn: AgentActivityTurn | null = null;\n for (const turn of Object.values(state.sessionLifecycle.turnsById)) {\n if (\n turn.agentSessionId === id &&\n (!latestTurn || compareTurnsByOccurrence(latestTurn, turn) < 0)\n ) {\n latestTurn = turn;\n }\n }\n return latestTurn;\n}\n\nexport function selectEngineInteractionsForSession(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): readonly AgentActivityInteraction[] {\n const id = agentSessionId?.trim() ?? \"\";\n if (!state.sessionLifecycle.sessionsById[id]) return [];\n return Object.values(state.sessionLifecycle.interactionsById)\n .filter(\n (interaction) =>\n interaction.agentSessionId === id &&\n Boolean(\n state.sessionLifecycle.turnsById[\n canonicalTurnKey(id, interaction.turnId)\n ]\n )\n )\n .sort(\n (left, right) =>\n left.createdAtUnixMs - right.createdAtUnixMs ||\n left.requestId.localeCompare(right.requestId)\n );\n}\n\nexport function selectEnginePendingInteractions(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): readonly AgentActivityInteraction[] {\n return selectEngineInteractionsForSession(state, agentSessionId).filter(\n (interaction) => interaction.status === \"pending\"\n );\n}\n\nexport function selectEngineSubmitAvailability(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): EngineSubmitAvailability | null {\n const availability = deriveCanonicalSubmitAvailability(\n state.sessionLifecycle,\n agentSessionId\n );\n if (availability.state === \"missing\") return null;\n return availability.reason\n ? { state: availability.state, reason: availability.reason }\n : { state: availability.state };\n}\n\nexport function selectEngineCancelPending(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): boolean {\n const id = agentSessionId?.trim() ?? \"\";\n const status = state.sessionLifecycle.operationBySessionId[id]?.cancel.status;\n return (\n status === \"requested\" || status === \"accepted\" || status === \"awaitingTurn\"\n );\n}\n\nexport function selectEngineCancelState(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): SessionCancelState | null {\n const id = agentSessionId?.trim() ?? \"\";\n return state.sessionLifecycle.operationBySessionId[id]?.cancel ?? null;\n}\n\nexport function selectEngineSessionOperation(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): SessionOperationState | null {\n const id = agentSessionId?.trim() ?? \"\";\n return state.sessionLifecycle.operationBySessionId[id] ?? null;\n}\n\nexport function selectEngineHasPendingInteractions(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): boolean {\n return selectEnginePendingInteractions(state, agentSessionId).length > 0;\n}\n\n/**\n * Returns only failures from session-scoped commands. Canonical Turn failures\n * belong to the owning Turn and must not be promoted into session chrome.\n */\nexport function selectEngineSessionOperationError(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): string | null {\n const id = agentSessionId?.trim() ?? \"\";\n return (\n state.sessionLifecycle.operationBySessionId[id]?.operationError ?? null\n );\n}\n\nexport function selectWorkspaceAgentConsumerSessions(\n state: AgentSessionEngineState\n): readonly WorkspaceAgentConsumerSession[] {\n return selectAllWorkspaceAgentConsumerSessions(state).filter(\n (item) => item.session.kind === \"root\" && item.session.visible !== false\n );\n}\n\nexport function selectRootAgentSessionIdsWithPendingInteractions(\n state: AgentSessionEngineState\n): readonly string[] {\n const sessionIdsWithPendingInteractions = new Set<string>();\n for (const interaction of Object.values(\n state.sessionLifecycle.interactionsById\n )) {\n if (\n interaction.status === \"pending\" &&\n state.sessionLifecycle.turnsById[\n canonicalTurnKey(interaction.agentSessionId, interaction.turnId)\n ]\n ) {\n sessionIdsWithPendingInteractions.add(interaction.agentSessionId);\n }\n }\n const rootAgentSessionIds = new Set<string>();\n for (const session of Object.values(state.sessionLifecycle.sessionsById)) {\n if (!sessionIdsWithPendingInteractions.has(session.agentSessionId)) {\n continue;\n }\n const rootAgentSessionId =\n session.kind === \"child\"\n ? session.rootAgentSessionId\n : session.agentSessionId;\n if (rootAgentSessionId) rootAgentSessionIds.add(rootAgentSessionId);\n }\n return [...rootAgentSessionIds];\n}\n\nexport function selectWorkspaceAgentRootConversationSessions(\n state: AgentSessionEngineState\n): readonly WorkspaceAgentConsumerSession[] {\n const consumers = selectAllWorkspaceAgentConsumerSessions(state);\n const rootSessionIds = new Set(\n consumers\n .filter((consumer) => consumer.session.kind === \"root\")\n .map((consumer) => consumer.session.agentSessionId)\n );\n const consumersByRootSessionId = new Map<\n string,\n WorkspaceAgentConsumerSession[]\n >();\n\n for (const consumer of consumers) {\n const rootSessionId =\n consumer.session.kind === \"child\"\n ? (consumer.session.rootAgentSessionId?.trim() ?? \"\")\n : consumer.session.agentSessionId;\n if (!rootSessionIds.has(rootSessionId)) continue;\n const conversationConsumers =\n consumersByRootSessionId.get(rootSessionId) ?? [];\n conversationConsumers.push(consumer);\n consumersByRootSessionId.set(rootSessionId, conversationConsumers);\n }\n\n return consumers\n .filter((consumer) => consumer.session.kind === \"root\")\n .map((consumer) => {\n const conversationConsumers =\n consumersByRootSessionId.get(consumer.session.agentSessionId) ?? [];\n const pendingInteractions = conversationConsumers\n .flatMap((item) => item.pendingInteractions)\n .sort(compareInteractionsByOccurrence);\n return {\n ...consumer,\n displayStatus: rootConversationDisplayStatus(\n consumer,\n conversationConsumers,\n pendingInteractions\n ),\n pendingInteractions\n };\n });\n}\n\nexport function selectAllWorkspaceAgentConsumerSessions(\n state: AgentSessionEngineState\n): readonly WorkspaceAgentConsumerSession[] {\n const latestTurnsBySessionId = new Map<string, AgentActivityTurn>();\n for (const turn of Object.values(state.sessionLifecycle.turnsById)) {\n if (!state.sessionLifecycle.sessionsById[turn.agentSessionId]) continue;\n const latestTurn = latestTurnsBySessionId.get(turn.agentSessionId);\n if (!latestTurn || compareTurnsByOccurrence(latestTurn, turn) < 0) {\n latestTurnsBySessionId.set(turn.agentSessionId, turn);\n }\n }\n\n const pendingInteractionsBySessionId = new Map<\n string,\n AgentActivityInteraction[]\n >();\n for (const interaction of Object.values(\n state.sessionLifecycle.interactionsById\n )) {\n if (\n interaction.status !== \"pending\" ||\n !state.sessionLifecycle.sessionsById[interaction.agentSessionId] ||\n !state.sessionLifecycle.turnsById[\n canonicalTurnKey(interaction.agentSessionId, interaction.turnId)\n ]\n ) {\n continue;\n }\n const pendingInteractions =\n pendingInteractionsBySessionId.get(interaction.agentSessionId) ?? [];\n pendingInteractions.push(interaction);\n pendingInteractionsBySessionId.set(\n interaction.agentSessionId,\n pendingInteractions\n );\n }\n for (const pendingInteractions of pendingInteractionsBySessionId.values()) {\n pendingInteractions.sort(compareSessionInteractionsByOccurrence);\n }\n\n return Object.values(state.sessionLifecycle.sessionsById).map((session) => {\n const activeTurn = session.activeTurnId\n ? (state.sessionLifecycle.turnsById[\n canonicalTurnKey(session.agentSessionId, session.activeTurnId)\n ] ?? null)\n : null;\n const latestTurn =\n latestTurnsBySessionId.get(session.agentSessionId) ?? null;\n const pendingInteractions =\n pendingInteractionsBySessionId.get(session.agentSessionId) ?? [];\n return {\n activeTurn,\n displayStatus: displayStatusFromCanonicalState({\n activeTurn,\n initialActivationTurnPending: initialActivationTurnIsPending(\n state,\n session.agentSessionId,\n latestTurn\n ),\n latestTurn,\n pendingInteractions\n }),\n latestTurn,\n pendingInteractions,\n session\n };\n });\n}\n\nexport function selectWorkspaceAgentConsumerSession(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): WorkspaceAgentConsumerSession | null {\n const id = agentSessionId?.trim() ?? \"\";\n const session = state.sessionLifecycle.sessionsById[id];\n if (!session) return null;\n const activeTurn = selectEngineActiveTurn(state, id);\n const latestTurn = selectEngineLatestTurn(state, id);\n const pendingInteractions = selectEnginePendingInteractions(state, id);\n return {\n activeTurn,\n displayStatus: displayStatusFromCanonicalState({\n activeTurn,\n initialActivationTurnPending: initialActivationTurnIsPending(\n state,\n id,\n latestTurn\n ),\n latestTurn,\n pendingInteractions\n }),\n latestTurn,\n pendingInteractions,\n session\n };\n}\n\nexport function selectWorkspaceAgentConsumerCounts(\n state: AgentSessionEngineState\n): WorkspaceAgentConsumerCounts {\n return selectWorkspaceAgentConsumerSessions(state).reduce(\n (counts, item) => {\n counts[item.displayStatus] += 1;\n return counts;\n },\n { ...EMPTY_CONSUMER_COUNTS }\n );\n}\n\nfunction displayStatusFromCanonicalState(state: {\n activeTurn: AgentActivityTurn | null;\n initialActivationTurnPending: boolean;\n latestTurn: AgentActivityTurn | null;\n pendingInteractions: readonly AgentActivityInteraction[];\n}): AgentActivityDisplayStatus {\n if (state.pendingInteractions.length > 0) return \"waiting\";\n if (state.activeTurn && state.activeTurn.phase !== \"settled\") {\n return state.activeTurn.phase === \"waiting\" ? \"waiting\" : \"working\";\n }\n if (!state.latestTurn) {\n return state.initialActivationTurnPending ? \"working\" : \"idle\";\n }\n if (state.latestTurn.phase !== \"settled\") return \"idle\";\n switch (state.latestTurn.outcome) {\n case \"failed\":\n return \"failed\";\n case \"canceled\":\n case \"interrupted\":\n return \"canceled\";\n case \"completed\":\n return \"completed\";\n default:\n return \"idle\";\n }\n}\n\nfunction initialActivationTurnIsPending(\n state: AgentSessionEngineState,\n agentSessionId: string,\n latestTurn: AgentActivityTurn | null\n): boolean {\n if (latestTurn) return false;\n const activation = selectLatestActivationForSession(state, agentSessionId);\n return (\n activation?.mode === \"new\" &&\n activation.initialTurnExpected &&\n isPendingActivationViable(activation)\n );\n}\n\nfunction rootConversationDisplayStatus(\n root: WorkspaceAgentConsumerSession,\n consumers: readonly WorkspaceAgentConsumerSession[],\n pendingInteractions: readonly AgentActivityInteraction[]\n): AgentActivityDisplayStatus {\n if (pendingInteractions.length > 0) return \"waiting\";\n if (consumers.some((consumer) => consumer.displayStatus === \"working\")) {\n return \"working\";\n }\n if (consumers.some((consumer) => consumer.displayStatus === \"waiting\")) {\n return \"waiting\";\n }\n return root.displayStatus;\n}\n\nfunction compareInteractionsByOccurrence(\n left: AgentActivityInteraction,\n right: AgentActivityInteraction\n): number {\n return (\n left.createdAtUnixMs - right.createdAtUnixMs ||\n left.updatedAtUnixMs - right.updatedAtUnixMs ||\n left.agentSessionId.localeCompare(right.agentSessionId) ||\n left.turnId.localeCompare(right.turnId) ||\n left.requestId.localeCompare(right.requestId)\n );\n}\n\nfunction compareSessionInteractionsByOccurrence(\n left: AgentActivityInteraction,\n right: AgentActivityInteraction\n): number {\n return (\n left.createdAtUnixMs - right.createdAtUnixMs ||\n left.requestId.localeCompare(right.requestId)\n );\n}\n\nfunction compareTurnsByOccurrence(\n left: AgentActivityTurn,\n right: AgentActivityTurn\n): number {\n return (\n left.startedAtUnixMs - right.startedAtUnixMs ||\n left.turnId.localeCompare(right.turnId)\n );\n}\n","import type {\n AgentActivityInteraction,\n AgentActivitySession,\n AgentActivitySnapshot\n} from \"../types.ts\";\nimport {\n selectEngineInteractionsForSession,\n selectAllWorkspaceAgentConsumerSessions\n} from \"./sessionLifecycle.selectors.ts\";\nimport type { AgentSessionEngineState } from \"./types.ts\";\n\nconst EMPTY_PRESENCES: AgentActivitySnapshot[\"presences\"] = [];\n\n/**\n * Builds the legacy runtime snapshot shape as a memoized projection of the\n * canonical workspace engine. The projector must be retained per engine so\n * external-store consumers receive the same object while engine state is\n * unchanged.\n */\nexport function createAgentActivitySnapshotProjector(\n workspaceId: string\n): (state: AgentSessionEngineState) => AgentActivitySnapshot {\n let previousState: AgentSessionEngineState | null = null;\n let previousSnapshot: AgentActivitySnapshot | null = null;\n return (state) => {\n if (state === previousState && previousSnapshot) return previousSnapshot;\n const sessions =\n previousState &&\n previousSnapshot &&\n state.sessionLifecycle === previousState.sessionLifecycle\n ? previousSnapshot.sessions\n : selectAllWorkspaceAgentConsumerSessions(state).map((item) =>\n projectSession(\n item.session,\n item.activeTurn,\n item.latestTurn,\n selectEngineInteractionsForSession(\n state,\n item.session.agentSessionId\n ),\n item.pendingInteractions\n )\n );\n const sessionMessagesById =\n previousState &&\n previousSnapshot &&\n state.sessionMessages.messagesBySessionId ===\n previousState.sessionMessages.messagesBySessionId\n ? previousSnapshot.sessionMessagesById\n : Object.fromEntries(\n Object.entries(state.sessionMessages.messagesBySessionId).map(\n ([agentSessionId, messages]) => [agentSessionId, [...messages]]\n )\n );\n const sessionMessageWindowsById =\n previousState &&\n previousSnapshot &&\n state.sessionMessages.windowsBySessionId ===\n previousState.sessionMessages.windowsBySessionId\n ? previousSnapshot.sessionMessageWindowsById\n : { ...state.sessionMessages.windowsBySessionId };\n const composerOptionsByTargetKey =\n previousState &&\n previousSnapshot &&\n state.composerOptions.optionsByTargetKey ===\n previousState.composerOptions.optionsByTargetKey\n ? previousSnapshot.composerOptionsByTargetKey\n : { ...state.composerOptions.optionsByTargetKey };\n const composerOptionsLoadStatusByTargetKey =\n previousState &&\n previousSnapshot &&\n state.composerOptions.entriesByTargetKey ===\n previousState.composerOptions.entriesByTargetKey\n ? previousSnapshot.composerOptionsLoadStatusByTargetKey\n : Object.fromEntries(\n Object.entries(state.composerOptions.entriesByTargetKey).map(\n ([targetKey, entry]) => [targetKey, entry.status]\n )\n );\n const snapshot: AgentActivitySnapshot = {\n workspaceId,\n sessions,\n // Presence is no longer canonical activity state. Keep the legacy\n // snapshot field empty until the runtime contract drops it.\n presences: EMPTY_PRESENCES,\n sessionMessagesById,\n sessionMessageWindowsById,\n composerOptionsByTargetKey,\n composerOptionsLoadStatusByTargetKey\n };\n previousState = state;\n previousSnapshot = snapshot;\n return snapshot;\n };\n}\n\nexport function createEmptyAgentActivitySnapshot(\n workspaceId: string\n): AgentActivitySnapshot {\n return {\n workspaceId,\n sessions: [],\n presences: [],\n sessionMessagesById: {},\n sessionMessageWindowsById: {},\n composerOptionsByTargetKey: {},\n composerOptionsLoadStatusByTargetKey: {}\n };\n}\n\nfunction projectSession(\n session: Omit<\n AgentActivitySession,\n | \"activeTurn\"\n | \"latestTurn\"\n | \"latestTurnInteractions\"\n | \"pendingInteractions\"\n >,\n activeTurn: AgentActivitySession[\"activeTurn\"],\n latestTurn: AgentActivitySession[\"latestTurn\"],\n interactions: readonly AgentActivityInteraction[],\n pendingInteractions: readonly AgentActivityInteraction[]\n): AgentActivitySession {\n return {\n ...session,\n activeTurn,\n latestTurn,\n latestTurnInteractions: latestTurn\n ? interactions.filter(\n (interaction) => interaction.turnId === latestTurn.turnId\n )\n : [],\n pendingInteractions\n };\n}\n","import type { AgentActivityMessage } from \"./types.ts\";\n\nexport function mergeAgentActivityMessages<\n T extends AgentActivityMessage = AgentActivityMessage\n>(currentMessages: readonly T[], incomingMessages: readonly T[]): T[] {\n if (incomingMessages.length === 0) {\n return [...currentMessages];\n }\n\n const byMessageId = new Map<string, T>();\n for (const message of currentMessages) {\n byMessageId.set(message.messageId, cloneAgentActivityMessage(message));\n }\n\n for (const incoming of incomingMessages) {\n const existing = byMessageId.get(incoming.messageId);\n if (!existing || shouldReplaceAgentActivityMessage(existing, incoming)) {\n byMessageId.set(\n incoming.messageId,\n existing\n ? mergeAgentActivityMessage(existing, incoming)\n : cloneAgentActivityMessage(incoming)\n );\n }\n }\n\n return [...byMessageId.values()].sort(compareAgentActivityMessages);\n}\n\nexport function compareAgentActivityMessages(\n left: AgentActivityMessage,\n right: AgentActivityMessage\n): number {\n const leftSequence = positiveNumber(left.sequence);\n const rightSequence = positiveNumber(right.sequence);\n if (leftSequence > 0 && rightSequence > 0 && leftSequence !== rightSequence) {\n return leftSequence - rightSequence;\n }\n return (\n left.occurredAtUnixMs - right.occurredAtUnixMs ||\n left.version - right.version ||\n left.messageId.localeCompare(right.messageId)\n );\n}\n\nexport function latestAgentActivityMessageVersion(\n messages: readonly AgentActivityMessage[]\n): number {\n return messages.reduce(\n (latestVersion, message) => Math.max(latestVersion, message.version),\n 0\n );\n}\n\nexport function areAgentActivityMessageArraysEqual(\n left: readonly AgentActivityMessage[],\n right: readonly AgentActivityMessage[]\n): boolean {\n if (left.length !== right.length) {\n return false;\n }\n for (let index = 0; index < left.length; index += 1) {\n if (!areAgentActivityMessagesEqual(left[index]!, right[index]!)) {\n return false;\n }\n }\n return true;\n}\n\nexport function areAgentActivityMessagesEqual(\n left: AgentActivityMessage,\n right: AgentActivityMessage\n): boolean {\n return (\n left.workspaceId === right.workspaceId &&\n left.agentSessionId === right.agentSessionId &&\n left.messageId === right.messageId &&\n left.version === right.version &&\n Object.is(left.turnId, right.turnId) &&\n left.role === right.role &&\n left.kind === right.kind &&\n Object.is(left.status, right.status) &&\n areJsonLikeValuesEqual(left.semantics, right.semantics) &&\n Object.is(left.sequence, right.sequence) &&\n Object.is(left.occurredAtUnixMs, right.occurredAtUnixMs) &&\n Object.is(left.createdAtUnixMs, right.createdAtUnixMs) &&\n Object.is(left.startedAtUnixMs, right.startedAtUnixMs) &&\n Object.is(left.completedAtUnixMs, right.completedAtUnixMs) &&\n areJsonLikeValuesEqual(left.payload, right.payload)\n );\n}\n\nfunction positiveNumber(value: number | undefined): number {\n return typeof value === \"number\" && Number.isFinite(value) && value > 0\n ? value\n : 0;\n}\n\nexport function cloneAgentActivityMessage<\n T extends AgentActivityMessage = AgentActivityMessage\n>(message: T): T {\n return {\n ...message,\n semantics: message.semantics ? { ...message.semantics } : undefined,\n payload: { ...message.payload }\n };\n}\n\nfunction mergeAgentActivityMessage<T extends AgentActivityMessage>(\n existing: T,\n incoming: T\n): T {\n return {\n ...existing,\n ...incoming,\n sequence: incoming.sequence ?? existing.sequence,\n createdAtUnixMs: incoming.createdAtUnixMs ?? existing.createdAtUnixMs,\n semantics: incoming.semantics\n ? {\n ...existing.semantics,\n ...incoming.semantics\n }\n : existing.semantics,\n payload: {\n ...existing.payload,\n ...incoming.payload\n }\n };\n}\n\nfunction shouldReplaceAgentActivityMessage(\n existing: AgentActivityMessage,\n incoming: AgentActivityMessage\n): boolean {\n if (incoming.version !== existing.version) {\n return incoming.version > existing.version;\n }\n return incoming.occurredAtUnixMs >= existing.occurredAtUnixMs;\n}\n\nexport function areJsonLikeValuesEqual(left: unknown, right: unknown): boolean {\n if (Object.is(left, right)) {\n return true;\n }\n if (Array.isArray(left) || Array.isArray(right)) {\n if (!Array.isArray(left) || !Array.isArray(right)) {\n return false;\n }\n if (left.length !== right.length) {\n return false;\n }\n for (let index = 0; index < left.length; index += 1) {\n if (!areJsonLikeValuesEqual(left[index], right[index])) {\n return false;\n }\n }\n return true;\n }\n const leftRecord = recordValue(left);\n const rightRecord = recordValue(right);\n if (!leftRecord || !rightRecord) {\n return false;\n }\n const keys = new Set([\n ...Object.keys(leftRecord),\n ...Object.keys(rightRecord)\n ]);\n for (const key of keys) {\n if (!areJsonLikeValuesEqual(leftRecord[key], rightRecord[key])) {\n return false;\n }\n }\n return true;\n}\n\nfunction recordValue(value: unknown): Record<string, unknown> | null {\n return typeof value === \"object\" && value !== null\n ? (value as Record<string, unknown>)\n : null;\n}\n","import {\n cloneJSONValue,\n messageVersionValue,\n nullableStringValue,\n numberValue,\n recordValue,\n stringValue\n} from \"./activityValueParsing.ts\";\nimport type {\n AgentActivityMessage,\n AgentActivityUpdatedEvent\n} from \"./types.ts\";\n\n/**\n * Parse the inline `messages` array carried by a realtime `message_update`\n * event into canonical {@link AgentActivityMessage} values. This is the only\n * inline delta the bridge may apply without a follow-up pull: message snapshots\n * are versioned and self-describing, so after the bridge verifies cursor\n * continuity, the engine's version-guarded message reducer can fold them\n * (including alias-bucket collapse) on its own. Turn and interaction deltas take\n * the authoritative reconcile path instead, so their session-level effects\n * (activeTurnId, pending-interaction pruning) come from a full session fetch\n * rather than being reconstructed here.\n */\nexport function parseInlineActivityMessages(\n event: AgentActivityUpdatedEvent\n): AgentActivityMessage[] {\n if (event.eventType === \"session_audit\") {\n const audit = recordValue(event.data.audit);\n if (!audit) return [];\n return [\n agentActivityMessageFromInlineMessage({\n agentSessionId: event.agentSessionId.trim(),\n message: {\n kind: \"session_audit\",\n messageId: audit.auditId,\n occurredAtUnixMs: audit.occurredAtUnixMs,\n payload: audit.payload,\n role: audit.role,\n turnId: null,\n version: audit.version\n },\n workspaceId: event.workspaceId\n })\n ].filter((message): message is AgentActivityMessage => message !== null);\n }\n if (event.eventType !== \"message_update\") return [];\n const source = recordValue(event.data);\n const rawMessages = Array.isArray(source?.messages) ? source.messages : [];\n const eventAgentSessionId = event.agentSessionId.trim();\n const workspaceId = event.workspaceId?.trim() ?? \"\";\n const messages: AgentActivityMessage[] = [];\n for (const raw of rawMessages) {\n const record = recordValue(raw);\n if (!record) continue;\n const agentSessionId =\n stringValue(record.agentSessionId) || eventAgentSessionId;\n const message = agentActivityMessageFromInlineMessage({\n agentSessionId,\n message: record,\n workspaceId\n });\n if (message) messages.push(message);\n }\n return messages;\n}\n\nfunction agentActivityMessageFromInlineMessage(input: {\n agentSessionId: string;\n message: Record<string, unknown>;\n workspaceId: string;\n}): AgentActivityMessage | null {\n const messageId = stringValue(input.message.messageId);\n const role = stringValue(input.message.role);\n const kind = stringValue(input.message.kind);\n const rawTurnId = input.message.turnId;\n const turnId = rawTurnId === null ? null : stringValue(rawTurnId);\n const version = messageVersionValue(input.message);\n const occurredAtUnixMs = numberValue(input.message.occurredAtUnixMs);\n if (\n !input.agentSessionId ||\n !messageId ||\n !role ||\n !kind ||\n (rawTurnId !== null && !turnId) ||\n (kind === \"session_audit\" ? rawTurnId !== null : rawTurnId === null) ||\n version <= 0 ||\n occurredAtUnixMs === undefined ||\n occurredAtUnixMs <= 0\n ) {\n return null;\n }\n return {\n workspaceId: stringValue(input.message.workspaceId) || input.workspaceId,\n agentSessionId: input.agentSessionId,\n messageId,\n version,\n turnId,\n role,\n kind,\n status: nullableStringValue(input.message.status),\n semantics: recordValue(input.message.semantics)\n ? (cloneJSONValue(\n input.message.semantics\n ) as AgentActivityMessage[\"semantics\"])\n : undefined,\n payload: cloneJSONValue(recordValue(input.message.payload) ?? {}) as Record<\n string,\n unknown\n >,\n sequence: numberValue(input.message.sequence),\n occurredAtUnixMs,\n createdAtUnixMs: numberValue(input.message.createdAtUnixMs),\n startedAtUnixMs: numberValue(input.message.startedAtUnixMs),\n completedAtUnixMs: numberValue(input.message.completedAtUnixMs)\n };\n}\n","import { cloneJSONValue } from \"./activityValueParsing.ts\";\nimport type {\n AgentActivityLiveEvent,\n AgentActivityMessageDeltaEvent\n} from \"./liveEvent.types.ts\";\nimport {\n compareAgentActivityMessages,\n mergeAgentActivityMessages\n} from \"./merge.ts\";\nimport type {\n AgentActivityMessage,\n AgentActivityMessageSemantics\n} from \"./types.ts\";\n\nexport interface AgentActivityOptimisticApplyResult {\n applied: boolean;\n needsReconcile: boolean;\n reason?:\n | \"append_without_anchor\"\n | \"identity_mismatch\"\n | \"tool_output_offset_mismatch\";\n}\n\nexport interface AgentActivityOptimisticMessageScope {\n workspaceId: string;\n agentSessionId: string;\n}\n\nexport interface AgentActivityOptimisticMessageOverlay {\n apply(event: AgentActivityLiveEvent): AgentActivityOptimisticApplyResult;\n /**\n * Replaces the authoritative base for one Session after a successful read.\n *\n * Ordinary optimistic projections are discarded because the read is now the\n * best known truth. An explicitly terminal optimistic projection remains\n * visible over a nonterminal canonical message until canonical truth also\n * reaches a terminal state.\n */\n reconcile(\n scope: AgentActivityOptimisticMessageScope,\n canonicalMessages: readonly AgentActivityMessage[]\n ): void;\n /**\n * Drops all cached state for one Session when the host removes or rebinds\n * that Session. A stream discontinuity should instead complete an\n * authoritative read and call reconcile so a confirmed optimistic terminal\n * projection remains visible until canonical terminal truth arrives.\n */\n reset(scope: AgentActivityOptimisticMessageScope): void;\n project(\n scope: AgentActivityOptimisticMessageScope,\n canonicalMessages: readonly AgentActivityMessage[]\n ): AgentActivityMessage[];\n}\n\ninterface OptimisticEntry {\n message: AgentActivityMessage;\n payloadUnset: ReadonlySet<string>;\n explicitlyTerminal: boolean;\n}\n\nexport function createAgentActivityOptimisticMessageOverlay(): AgentActivityOptimisticMessageOverlay {\n const optimistic = new Map<string, OptimisticEntry>();\n const canonical = new Map<string, AgentActivityMessage>();\n\n return {\n apply(event) {\n if (event.eventType !== \"message_delta\") {\n return { applied: false, needsReconcile: false };\n }\n return applyMessageDelta(event);\n },\n\n reconcile(scope, messages) {\n const normalized = normalizeCanonicalMessages(scope, messages);\n const prefix = scopePrefix(scope);\n deleteScopeEntries(canonical, prefix);\n for (const message of normalized) {\n const key = messageKey(message);\n canonical.set(key, cloneMessage(message));\n }\n for (const [key, entry] of optimistic) {\n if (!key.startsWith(prefix)) {\n continue;\n }\n const canonicalMessage = canonical.get(key);\n if (\n !entry.explicitlyTerminal ||\n (canonicalMessage !== undefined &&\n isTerminalMessage(canonicalMessage))\n ) {\n optimistic.delete(key);\n }\n }\n },\n\n reset(scope) {\n const prefix = scopePrefix(scope);\n deleteScopeEntries(optimistic, prefix);\n deleteScopeEntries(canonical, prefix);\n },\n\n project(scope, messages) {\n const normalized = normalizeCanonicalMessages(scope, messages);\n const byKey = new Map<string, AgentActivityMessage>();\n for (const message of normalized) {\n byKey.set(messageKey(message), cloneMessage(message));\n }\n const prefix = scopePrefix(scope);\n for (const [key, entry] of optimistic) {\n if (!key.startsWith(prefix)) {\n continue;\n }\n const base = byKey.get(key) ?? canonical.get(key);\n byKey.set(\n key,\n base\n ? materialize(base, entry.message, entry.payloadUnset)\n : cloneMessage(entry.message)\n );\n }\n return [...byKey.values()].sort(compareAgentActivityMessages);\n }\n };\n\n function applyMessageDelta(\n event: AgentActivityMessageDeltaEvent\n ): AgentActivityOptimisticApplyResult {\n const data = event.data;\n if (\n data.workspaceId !== event.workspaceId ||\n data.agentSessionId !== event.agentSessionId\n ) {\n return {\n applied: false,\n needsReconcile: true,\n reason: \"identity_mismatch\"\n };\n }\n const key = liveMessageKey(event);\n const existing =\n optimistic.get(key)?.message ?? canonical.get(key) ?? undefined;\n if (data.content?.operation === \"append_text\" && !existing) {\n return {\n applied: false,\n needsReconcile: true,\n reason: \"append_without_anchor\"\n };\n }\n if (data.toolOutput?.operation === \"append_text\" && !existing) {\n return {\n applied: false,\n needsReconcile: true,\n reason: \"append_without_anchor\"\n };\n }\n\n const next: AgentActivityMessage = existing\n ? cloneMessage(existing)\n : {\n workspaceId: event.workspaceId,\n agentSessionId: event.agentSessionId,\n messageId: data.messageId,\n version: 0,\n turnId: data.turnId ?? null,\n role: data.role,\n kind: data.kind,\n payload: {},\n occurredAtUnixMs: data.occurredAtUnixMs\n };\n next.workspaceId = event.workspaceId;\n next.agentSessionId = event.agentSessionId;\n next.turnId = data.turnId ?? next.turnId;\n next.role = data.role;\n next.kind = data.kind;\n next.occurredAtUnixMs = Math.max(\n next.occurredAtUnixMs,\n data.occurredAtUnixMs\n );\n\n if (data.content?.operation === \"append_text\") {\n const currentText =\n typeof next.payload.text === \"string\" ? next.payload.text : \"\";\n const text = currentText + data.content.text;\n next.payload.text = text;\n next.payload.content = text;\n } else if (data.content?.operation === \"set\") {\n const value = cloneJSONValue(data.content.value);\n next.payload.content = value;\n if (typeof value === \"string\") {\n next.payload.text = value;\n } else {\n delete next.payload.text;\n }\n }\n if (data.toolOutput) {\n const output = recordValue(next.payload.output) ?? {};\n const currentText = typeof output.text === \"string\" ? output.text : \"\";\n if (\n data.toolOutput.operation === \"append_text\" &&\n utf8ByteLength(currentText) !== data.toolOutput.offsetBytes\n ) {\n return {\n applied: false,\n needsReconcile: true,\n reason: \"tool_output_offset_mismatch\"\n };\n }\n output.text =\n data.toolOutput.operation === \"set\"\n ? data.toolOutput.text\n : currentText + data.toolOutput.text;\n next.payload.output = output;\n }\n for (const [payloadKey, value] of Object.entries(data.payloadSet ?? {})) {\n next.payload[payloadKey] = cloneJSONValue(value);\n }\n for (const payloadKey of data.payloadUnset ?? []) {\n delete next.payload[payloadKey];\n }\n if (data.status !== undefined) next.status = data.status;\n if (data.semantics !== undefined) {\n next.semantics = cloneJSONValue(\n data.semantics\n ) as AgentActivityMessageSemantics;\n }\n if (data.startedAtUnixMs !== undefined) {\n next.startedAtUnixMs = data.startedAtUnixMs;\n }\n if (data.completedAtUnixMs !== undefined) {\n next.completedAtUnixMs = data.completedAtUnixMs;\n }\n const payloadUnset = new Set(optimistic.get(key)?.payloadUnset ?? []);\n for (const payloadKey of Object.keys(data.payloadSet ?? {})) {\n payloadUnset.delete(payloadKey);\n }\n for (const payloadKey of data.payloadUnset ?? []) {\n payloadUnset.add(payloadKey);\n }\n optimistic.set(key, {\n message: next,\n payloadUnset,\n explicitlyTerminal:\n (optimistic.get(key)?.explicitlyTerminal ?? false) ||\n deltaIsExplicitlyTerminal(data)\n });\n return { applied: true, needsReconcile: false };\n }\n}\n\nfunction recordValue(value: unknown): Record<string, unknown> | null {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? (cloneJSONValue(value) as Record<string, unknown>)\n : null;\n}\n\nfunction utf8ByteLength(value: string): number {\n return new TextEncoder().encode(value).byteLength;\n}\n\nfunction materialize(\n canonical: AgentActivityMessage,\n overlay: AgentActivityMessage,\n payloadUnset: ReadonlySet<string>\n): AgentActivityMessage {\n const materialized = {\n ...canonical,\n ...overlay,\n version: canonical.version,\n sequence: canonical.sequence ?? overlay.sequence,\n createdAtUnixMs: canonical.createdAtUnixMs ?? overlay.createdAtUnixMs,\n payload: {\n ...canonical.payload,\n ...overlay.payload\n },\n semantics: overlay.semantics ?? canonical.semantics\n };\n for (const key of payloadUnset) {\n delete materialized.payload[key];\n }\n return materialized;\n}\n\nfunction isTerminalMessage(message: AgentActivityMessage): boolean {\n if (message.completedAtUnixMs !== undefined) return true;\n return isTerminalStatus(message.status);\n}\n\nfunction deltaIsExplicitlyTerminal(\n data: AgentActivityMessageDeltaEvent[\"data\"]\n): boolean {\n return data.completedAtUnixMs !== undefined || isTerminalStatus(data.status);\n}\n\nfunction isTerminalStatus(status: string | null | undefined): boolean {\n return [\"completed\", \"failed\", \"canceled\", \"interrupted\"].includes(\n status ?? \"\"\n );\n}\n\nfunction liveMessageKey(event: AgentActivityMessageDeltaEvent): string {\n return `${identityPrefix(event.workspaceId, event.agentSessionId)}${event.data.messageId}`;\n}\n\nfunction messageKey(message: AgentActivityMessage): string {\n return `${identityPrefix(message.workspaceId ?? \"\", message.agentSessionId)}${message.messageId}`;\n}\n\nfunction identityPrefix(workspaceId: string, agentSessionId: string): string {\n return `${workspaceId}\\u0000${agentSessionId}\\u0000`;\n}\n\nfunction scopePrefix(scope: AgentActivityOptimisticMessageScope): string {\n return identityPrefix(scope.workspaceId, scope.agentSessionId);\n}\n\nfunction normalizeCanonicalMessages(\n scope: AgentActivityOptimisticMessageScope,\n messages: readonly AgentActivityMessage[]\n): AgentActivityMessage[] {\n return messages.map((message) => {\n if (\n (message.workspaceId !== undefined &&\n message.workspaceId !== scope.workspaceId) ||\n message.agentSessionId !== scope.agentSessionId\n ) {\n throw new Error(\n \"canonical Agent activity message is outside the optimistic overlay scope\"\n );\n }\n return cloneMessage({\n ...message,\n workspaceId: scope.workspaceId\n });\n });\n}\n\nfunction deleteScopeEntries<T>(entries: Map<string, T>, prefix: string): void {\n for (const key of entries.keys()) {\n if (key.startsWith(prefix)) {\n entries.delete(key);\n }\n }\n}\n\nfunction cloneMessage(message: AgentActivityMessage): AgentActivityMessage {\n return mergeAgentActivityMessages([], [message])[0]!;\n}\n","import type { AgentActivitySessionMessageWindow } from \"./messageWindow.types.ts\";\n\nexport interface AgentActivityMessagePageLike<T> {\n messages: readonly T[];\n hasMore?: boolean;\n latestVersion?: number;\n}\n\nexport interface LoadAllAgentSessionMessagesInput<T> {\n listPage: (afterVersion: number) => Promise<AgentActivityMessagePageLike<T>>;\n afterVersion?: number;\n maxPages?: number;\n shouldAbort?: () => boolean;\n onPage?: (messages: readonly T[]) => void;\n}\n\nexport interface LoadAllAgentSessionMessagesResult<T> {\n messages: T[];\n aborted: boolean;\n}\n\nconst DEFAULT_MAX_MESSAGE_PAGES = 1000;\n\n/**\n * Projects the server-owned boundary of a newest-to-oldest page. The boundary\n * must come from `hasMore`; message versions are mutable change cursors and\n * cannot answer whether an older row exists.\n */\nexport function agentActivitySessionMessageWindowFromDescendingPage<\n T extends { version?: number | null }\n>(page: AgentActivityMessagePageLike<T>): AgentActivitySessionMessageWindow {\n const oldestLoadedVersion = page.messages.reduce<number | null>(\n (oldest, message) => {\n const version = message.version;\n if (\n typeof version !== \"number\" ||\n !Number.isFinite(version) ||\n version <= 0\n ) {\n return oldest;\n }\n return oldest === null ? version : Math.min(oldest, version);\n },\n null\n );\n return {\n hasOlderMessages: oldestLoadedVersion !== null && page.hasMore === true,\n oldestLoadedVersion\n };\n}\n\nexport async function loadAllAgentSessionMessages<\n T extends { version?: number }\n>(\n input: LoadAllAgentSessionMessagesInput<T>\n): Promise<LoadAllAgentSessionMessagesResult<T>> {\n const maxPages = input.maxPages ?? DEFAULT_MAX_MESSAGE_PAGES;\n let afterVersion = input.afterVersion ?? 0;\n const messages: T[] = [];\n\n for (let pageIndex = 0; pageIndex < maxPages; pageIndex += 1) {\n const page = await input.listPage(afterVersion);\n if (input.shouldAbort?.()) {\n return { messages, aborted: true };\n }\n if (page.messages.length > 0) {\n input.onPage?.(page.messages);\n messages.push(...page.messages);\n }\n const messageMaxVersion = page.messages.reduce(\n (maxVersion, message) => Math.max(maxVersion, message.version ?? 0),\n afterVersion\n );\n const pageLatestVersion =\n typeof page.latestVersion === \"number\" &&\n Number.isFinite(page.latestVersion)\n ? Math.max(0, Math.trunc(page.latestVersion))\n : afterVersion;\n const nextAfterVersion = Math.max(messageMaxVersion, pageLatestVersion);\n if (!page.hasMore || nextAfterVersion <= afterVersion) {\n break;\n }\n afterVersion = nextAfterVersion;\n }\n\n return { messages, aborted: false };\n}\n","import type {\n AgentActivityInteraction,\n AgentActivityNeedsAttentionItem,\n AgentActivityNeedsAttentionKind,\n AgentActivitySession,\n AgentActivitySnapshot\n} from \"./types.ts\";\nimport type { AgentActivityDisplayStatus } from \"./displayStatus.types.ts\";\n\nexport function selectCanonicalAgentActivitySessions(\n snapshot: Pick<AgentActivitySnapshot, \"sessions\">\n): readonly AgentActivitySession[] {\n return snapshot.sessions;\n}\n\nexport function selectRootAgentActivitySessions(\n snapshot: Pick<AgentActivitySnapshot, \"sessions\">\n): readonly AgentActivitySession[] {\n // In-memory optimistic root sessions may exist before their first daemon\n // snapshot is normalized. Only an explicit child relation excludes a\n // session from root conversation lists.\n return snapshot.sessions.filter((session) => session.kind !== \"child\");\n}\n\nexport function selectNeedsAttentionCount(\n snapshot: AgentActivitySnapshot\n): number {\n return selectNeedsAttentionItems(snapshot).length;\n}\n\nexport function normalizeAgentActivityDisplayStatus(\n status: string | null | undefined,\n options: {\n activeTurnPhase?: string | null;\n latestTurnOutcome?: string | null;\n latestTurnPhase?: string | null;\n needsAttention?: boolean;\n } = {}\n): AgentActivityDisplayStatus {\n const normalizedStatus = normalizeStatus(status);\n const normalizedTurnOutcome = normalizeStatus(options.latestTurnOutcome);\n switch (normalizeStatus(options.activeTurnPhase ?? options.latestTurnPhase)) {\n case \"settled\":\n switch (normalizedTurnOutcome) {\n case \"failed\":\n case \"error\":\n return \"failed\";\n case \"canceled\":\n case \"cancelled\":\n case \"interrupted\":\n return \"canceled\";\n case \"completed\":\n case \"done\":\n case \"success\":\n case \"succeeded\":\n return \"completed\";\n default:\n break;\n }\n if (normalizedStatus === \"failed\" || normalizedStatus === \"error\") {\n return \"failed\";\n }\n if (normalizedStatus === \"canceled\" || normalizedStatus === \"cancelled\") {\n return \"canceled\";\n }\n return \"completed\";\n case \"waiting\":\n return \"waiting\";\n case \"running\":\n case \"submitted\":\n return \"working\";\n default:\n break;\n }\n if (options.needsAttention) {\n return \"waiting\";\n }\n switch (normalizedStatus) {\n case \"completed\":\n case \"done\":\n case \"success\":\n case \"succeeded\":\n return \"completed\";\n case \"canceled\":\n case \"cancelled\":\n return \"canceled\";\n case \"error\":\n case \"failed\":\n return \"failed\";\n default:\n break;\n }\n switch (normalizedStatus) {\n case \"running\":\n case \"streaming\":\n case \"working\":\n return \"working\";\n case \"awaiting_approval\":\n case \"waiting\":\n case \"waiting_approval\":\n case \"waiting_input\":\n return \"waiting\";\n case \"idle\":\n case \"ready\":\n default:\n return \"idle\";\n }\n}\n\nexport function selectNeedsAttentionItems(\n snapshot: AgentActivitySnapshot\n): AgentActivityNeedsAttentionItem[] {\n const items: AgentActivityNeedsAttentionItem[] = [];\n\n for (const session of snapshot.sessions) {\n for (const interaction of session.pendingInteractions) {\n if (interaction.status !== \"pending\") {\n continue;\n }\n items.push(\n needsAttentionItemFromInteraction(snapshot, session, interaction)\n );\n }\n }\n\n return items.sort(\n (left, right) =>\n right.occurredAtUnixMs - left.occurredAtUnixMs ||\n left.id.localeCompare(right.id)\n );\n}\n\nfunction needsAttentionItemFromInteraction(\n snapshot: AgentActivitySnapshot,\n session: AgentActivitySession,\n interaction: AgentActivityInteraction\n): AgentActivityNeedsAttentionItem {\n return {\n id: `${session.agentSessionId}:${interaction.turnId}:${interaction.requestId}`,\n workspaceId: session.workspaceId || snapshot.workspaceId,\n agentSessionId: session.agentSessionId,\n provider: session.provider,\n title: session.title,\n cwd: session.cwd,\n kind: needsAttentionKindForInteraction(interaction),\n summary: interactionSummary(interaction),\n occurredAtUnixMs:\n interaction.updatedAtUnixMs ||\n interaction.createdAtUnixMs ||\n session.updatedAtUnixMs ||\n session.lastEventUnixMs ||\n 0\n };\n}\n\nfunction needsAttentionKindForInteraction(\n interaction: AgentActivityInteraction\n): AgentActivityNeedsAttentionKind {\n switch (interaction.kind) {\n case \"approval\":\n return \"permission\";\n case \"question\":\n return \"question\";\n case \"plan\":\n return \"constraint\";\n }\n}\n\nfunction interactionSummary(interaction: AgentActivityInteraction): string {\n const input = interaction.input ?? {};\n const metadata = interaction.metadata ?? {};\n return (\n stringValue(input.displayPrompt) ||\n stringValue(input.summary) ||\n stringValue(input.title) ||\n firstQuestionText(input.questions) ||\n stringValue(input.question) ||\n stringValue(input.prompt) ||\n stringValue(input.text) ||\n stringValue(metadata.summary) ||\n stringValue(metadata.title) ||\n interaction.toolName?.trim() ||\n interaction.kind\n );\n}\n\nfunction normalizeStatus(status: string | null | undefined): string {\n return status?.trim().toLowerCase() ?? \"\";\n}\n\nfunction firstQuestionText(value: unknown): string {\n if (!Array.isArray(value)) {\n return \"\";\n }\n for (const candidate of value) {\n if (typeof candidate === \"string\" && candidate.trim()) {\n return candidate.trim();\n }\n if (candidate && typeof candidate === \"object\") {\n const question = stringValue(\n (candidate as Record<string, unknown>).question\n );\n if (question) {\n return question;\n }\n }\n }\n return \"\";\n}\n\nfunction stringValue(value: unknown): string {\n return typeof value === \"string\" ? value.trim() : \"\";\n}\n","import type { AgentActivitySessionUsage } from \"./types.ts\";\n\nexport interface AgentActivityUsage {\n usedTokens: number | null;\n totalTokens: number | null;\n percentUsed: number | null; // 0-100, rounded to integer; null when window unknown\n quotas: AgentActivityQuota[];\n}\n\ninterface AgentActivityQuota {\n quotaType: \"session\" | \"weekly\" | \"monthly\" | \"daily\" | \"model\" | \"cost\";\n percentRemaining?: number;\n resetsAtUnixMs?: number;\n resetText?: string;\n dollarRemaining?: number;\n modelName?: string;\n}\n\nexport interface AgentActivityUsageInput {\n sessionUsage?: AgentActivitySessionUsage | null;\n}\n\nexport function resolveAgentActivityUsage(\n input: AgentActivityUsageInput\n): AgentActivityUsage | null {\n const usage = recordValue(input.sessionUsage);\n if (!usage) {\n return null;\n }\n const contextWindow = recordValue(usage.contextWindow);\n const usedTokens = finiteNumber(contextWindow?.usedTokens);\n const totalTokens = finiteNumber(contextWindow?.totalTokens);\n const quotas = Array.isArray(usage.quotas)\n ? usage.quotas\n .map(normalizeQuota)\n .filter((quota): quota is AgentActivityQuota => quota !== null)\n : [];\n const hasWindow =\n usedTokens !== null && totalTokens !== null && totalTokens > 0;\n if (!hasWindow && quotas.length === 0) {\n return null;\n }\n return {\n usedTokens: hasWindow ? usedTokens : null,\n totalTokens: hasWindow ? totalTokens : null,\n percentUsed: hasWindow\n ? Math.min(100, Math.round((usedTokens / totalTokens) * 100))\n : null,\n quotas\n };\n}\n\nfunction normalizeQuota(value: unknown): AgentActivityQuota | null {\n const record = recordValue(value);\n const quotaType = quotaTypeValue(record?.quotaType);\n if (!record || !quotaType) return null;\n const quota: AgentActivityQuota = { quotaType };\n const percentRemaining = finiteNumber(record.percentRemaining);\n if (percentRemaining !== null) quota.percentRemaining = percentRemaining;\n const resetsAtUnixMs = finiteNumber(record.resetsAtUnixMs);\n if (resetsAtUnixMs !== null) quota.resetsAtUnixMs = resetsAtUnixMs;\n const resetText = textValue(record.resetText);\n if (resetText) quota.resetText = resetText;\n const dollarRemaining = finiteNumber(record.dollarRemaining);\n if (dollarRemaining !== null) quota.dollarRemaining = dollarRemaining;\n const modelName = textValue(record.modelName);\n if (modelName) quota.modelName = modelName;\n return quota;\n}\n\nfunction quotaTypeValue(\n value: unknown\n): AgentActivityQuota[\"quotaType\"] | null {\n switch (textValue(value)) {\n case \"session\":\n case \"weekly\":\n case \"monthly\":\n case \"daily\":\n case \"model\":\n case \"cost\":\n return textValue(value) as AgentActivityQuota[\"quotaType\"];\n default:\n return null;\n }\n}\n\nfunction recordValue(value: unknown): Record<string, unknown> | null {\n return value !== null && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction finiteNumber(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\nfunction textValue(value: unknown): string {\n return typeof value === \"string\" ? value.trim() : \"\";\n}\n","import type { EngineDiagnosticSink } from \"./diagnostics.ts\";\nimport type {\n EngineCommandPort,\n EngineCommandResultIntent,\n EngineExternalCommand,\n EngineScheduledTask,\n EngineScheduler\n} from \"./types.ts\";\n\n// Effect executor: performs external command descriptions through the\n// injected command port and feeds every settlement (success, failure,\n// timeout) back into the dispatch loop as a command-result intent.\n//\n// The executor holds no decision logic. Retrying, fallback, and recovery are\n// reducer transitions, never executed in place here.\n\nexport interface CreateEngineEffectExecutorInput {\n commandPort: EngineCommandPort;\n diagnosticSink?: EngineDiagnosticSink;\n onResult: (intent: EngineCommandResultIntent) => void;\n scheduler: EngineScheduler;\n}\n\nexport interface EngineEffectExecutor {\n abort(commandId: string, reason: string): void;\n dispose(): void;\n execute(command: EngineExternalCommand): void;\n}\n\nexport function createEngineEffectExecutor({\n commandPort,\n diagnosticSink,\n onResult,\n scheduler\n}: CreateEngineEffectExecutorInput): EngineEffectExecutor {\n let disposed = false;\n const timeoutTasks = new Set<EngineScheduledTask>();\n const abortControllersByCommandId = new Map<string, AbortController>();\n\n const settle = (intent: EngineCommandResultIntent): void => {\n if (disposed) {\n diagnosticSink?.({\n commandId: intent.commandId,\n type: \"commandResultAfterDispose\"\n });\n return;\n }\n onResult(intent);\n };\n\n return {\n abort(commandId, reason) {\n const controller = abortControllersByCommandId.get(commandId.trim());\n if (!controller || controller.signal.aborted) return;\n controller.abort(new Error(reason.trim() || \"engine command aborted\"));\n },\n dispose() {\n disposed = true;\n for (const task of timeoutTasks) {\n task.cancel();\n }\n timeoutTasks.clear();\n for (const controller of abortControllersByCommandId.values()) {\n controller.abort(new Error(\"engine disposed\"));\n }\n abortControllersByCommandId.clear();\n },\n execute(command) {\n let settled = false;\n let timeoutTask: EngineScheduledTask | null = null;\n const abortController = new AbortController();\n abortControllersByCommandId.set(command.commandId, abortController);\n\n const finishTimeoutTask = (): void => {\n if (\n abortControllersByCommandId.get(command.commandId) === abortController\n ) {\n abortControllersByCommandId.delete(command.commandId);\n }\n if (timeoutTask !== null) {\n timeoutTasks.delete(timeoutTask);\n timeoutTask.cancel();\n timeoutTask = null;\n }\n };\n\n const timeoutMs = \"timeoutMs\" in command ? command.timeoutMs : undefined;\n if (timeoutMs !== undefined) {\n timeoutTask = scheduler.schedule(timeoutMs, () => {\n if (settled) {\n return;\n }\n settled = true;\n abortController.abort(new Error(\"engine command timed out\"));\n finishTimeoutTask();\n settle({\n commandId: command.commandId,\n commandType: command.type,\n ...commandCorrelationFields(command),\n outcome: \"timedOut\",\n type: \"engine/commandResult\"\n });\n });\n timeoutTasks.add(timeoutTask);\n }\n\n commandPort.execute(command, { signal: abortController.signal }).then(\n (value) => {\n if (settled) {\n diagnosticSink?.({\n commandId: command.commandId,\n type: \"commandResultAfterTimeout\"\n });\n return;\n }\n settled = true;\n finishTimeoutTask();\n settle({\n commandId: command.commandId,\n commandType: command.type,\n ...commandCorrelationFields(command),\n outcome: \"succeeded\",\n type: \"engine/commandResult\",\n value\n });\n },\n (error: unknown) => {\n if (settled) {\n diagnosticSink?.({\n commandId: command.commandId,\n type: \"commandResultAfterTimeout\"\n });\n return;\n }\n settled = true;\n finishTimeoutTask();\n settle({\n commandId: command.commandId,\n commandType: command.type,\n ...commandCorrelationFields(command),\n ...engineCommandErrorFields(error),\n outcome: \"failed\",\n type: \"engine/commandResult\"\n });\n }\n );\n }\n };\n}\n\nfunction commandCorrelationFields(command: EngineExternalCommand): {\n correlationId?: string;\n} {\n if (!(\"correlationId\" in command)) {\n return {};\n }\n const value = command.correlationId;\n return typeof value === \"string\" && value.trim()\n ? { correlationId: value.trim() }\n : {};\n}\n\nfunction engineCommandErrorFields(error: unknown): {\n errorCode?: string;\n errorReason?: string;\n errorMessage: string;\n} {\n const record =\n error && typeof error === \"object\"\n ? (error as Record<string, unknown>)\n : null;\n const code = typeof record?.code === \"string\" ? record.code.trim() : \"\";\n const reason = typeof record?.reason === \"string\" ? record.reason.trim() : \"\";\n const message =\n error instanceof Error\n ? error.message\n : typeof record?.message === \"string\"\n ? record.message\n : String(error);\n return {\n ...(code ? { errorCode: code } : {}),\n ...(reason ? { errorReason: reason } : {}),\n errorMessage: message\n };\n}\n","import type {\n EngineClock,\n EngineExpiryCommand,\n EngineIntentExpiredIntent,\n EngineScheduledTask,\n EngineScheduler\n} from \"./types.ts\";\n\n// Expiry clock: turns scheduleExpiry/cancelExpiry command descriptions into\n// host-clock scheduling and feeds elapsed deadlines back into the dispatch\n// loop as expiry intents. Reducers never read the wall clock or set timers;\n// this is the only place where deadlines meet real time.\n\nexport interface CreateEngineExpiryClockInput {\n clock: EngineClock;\n onExpired: (intent: EngineIntentExpiredIntent) => void;\n scheduler: EngineScheduler;\n}\n\nexport interface EngineExpiryClock {\n apply(command: EngineExpiryCommand): void;\n dispose(): void;\n}\n\nexport function createEngineExpiryClock({\n clock,\n onExpired,\n scheduler\n}: CreateEngineExpiryClockInput): EngineExpiryClock {\n const tasksByExpiryId = new Map<string, EngineScheduledTask>();\n let disposed = false;\n\n const cancelExpiry = (expiryId: string): void => {\n const task = tasksByExpiryId.get(expiryId);\n if (task !== undefined) {\n task.cancel();\n tasksByExpiryId.delete(expiryId);\n }\n };\n\n return {\n apply(command) {\n if (disposed) {\n return;\n }\n if (command.type === \"engine/cancelExpiry\") {\n cancelExpiry(command.expiryId);\n return;\n }\n // Rescheduling the same expiry id replaces the previous deadline.\n cancelExpiry(command.expiryId);\n const delayMs = Math.max(0, command.dueAtUnixMs - clock.nowUnixMs());\n const task = scheduler.schedule(delayMs, () => {\n tasksByExpiryId.delete(command.expiryId);\n onExpired({\n dueAtUnixMs: command.dueAtUnixMs,\n expiryId: command.expiryId,\n type: \"engine/intentExpired\"\n });\n });\n tasksByExpiryId.set(command.expiryId, task);\n },\n dispose() {\n disposed = true;\n for (const task of tasksByExpiryId.values()) {\n task.cancel();\n }\n tasksByExpiryId.clear();\n }\n };\n}\n","import type {\n EngineCommand,\n EngineIntent,\n EngineReducerResult,\n EngineRuntimeState\n} from \"./types.ts\";\n\n// Engine self state domain: connection placeholder, processed-intent counter,\n// and the probe/expiry round trips that drive the skeleton interleaving tests.\n// Real business domains (turn lifecycle, queue, optimistic intents) land as\n// sibling `*.reducer.ts` files in later slices.\n\nconst NO_COMMANDS: readonly EngineCommand[] = [];\n\nexport function createInitialEngineRuntimeState(): EngineRuntimeState {\n return {\n connection: \"unknown\",\n lastCommandResult: null,\n lastExpiredIntentId: null,\n processedIntentCount: 0,\n workspaceReconcile: {\n commandId: null,\n errorCode: null,\n errorMessage: null,\n status: \"idle\"\n }\n };\n}\n\nexport function engineRuntimeReducer(\n state: EngineRuntimeState,\n intent: EngineIntent\n): EngineReducerResult<EngineRuntimeState> {\n const counted: EngineRuntimeState = {\n ...state,\n processedIntentCount: state.processedIntentCount + 1\n };\n switch (intent.type) {\n case \"workspace/reconcileRequested\":\n return requestWorkspaceReconcile(\n counted,\n intent.workspaceId,\n intent.retry === true\n );\n case \"engine/connectionChanged\":\n if (\n intent.status === \"connected\" &&\n state.connection !== \"connected\" &&\n intent.workspaceId?.trim()\n ) {\n return requestWorkspaceReconcile(\n { ...counted, connection: intent.status },\n intent.workspaceId,\n true\n );\n }\n return {\n commands: NO_COMMANDS,\n state: { ...counted, connection: intent.status }\n };\n case \"engine/probeRequested\":\n return {\n commands: [\n {\n commandId: intent.probeId,\n type: \"engine/probe\",\n ...(intent.timeoutMs === undefined\n ? {}\n : { timeoutMs: intent.timeoutMs })\n }\n ],\n state: counted\n };\n case \"engine/expiryRequested\":\n return {\n commands: [\n {\n dueAtUnixMs: intent.dueAtUnixMs,\n expiryId: intent.expiryId,\n type: \"engine/scheduleExpiry\"\n }\n ],\n state: counted\n };\n case \"engine/expiryCancelRequested\":\n return {\n commands: [{ expiryId: intent.expiryId, type: \"engine/cancelExpiry\" }],\n state: counted\n };\n case \"engine/commandResult\":\n if (\n intent.commandType === \"engine/reconcileWorkspace\" &&\n intent.commandId === state.workspaceReconcile.commandId\n ) {\n return {\n commands: NO_COMMANDS,\n state: {\n ...counted,\n lastCommandResult: commandResultRecord(intent),\n workspaceReconcile: {\n commandId: null,\n errorCode:\n intent.outcome === \"failed\" ? (intent.errorCode ?? null) : null,\n errorMessage:\n intent.outcome === \"failed\"\n ? intent.errorMessage?.trim() || null\n : null,\n status:\n intent.outcome === \"succeeded\"\n ? \"ready\"\n : intent.outcome === \"failed\"\n ? \"failed\"\n : \"unknown\"\n }\n }\n };\n }\n return {\n commands: NO_COMMANDS,\n state: {\n ...counted,\n lastCommandResult: commandResultRecord(intent)\n }\n };\n case \"engine/intentExpired\":\n return {\n commands: NO_COMMANDS,\n state: { ...counted, lastExpiredIntentId: intent.expiryId }\n };\n default:\n return { commands: NO_COMMANDS, state: counted };\n }\n}\n\nfunction requestWorkspaceReconcile(\n state: EngineRuntimeState,\n workspaceId: string,\n retry: boolean\n): EngineReducerResult<EngineRuntimeState> {\n const normalized = workspaceId.trim();\n if (\n !normalized ||\n state.workspaceReconcile.status === \"loading\" ||\n ((state.workspaceReconcile.status === \"failed\" ||\n state.workspaceReconcile.status === \"unknown\") &&\n !retry)\n )\n return { commands: NO_COMMANDS, state };\n const commandId = `engine:reconcile:${normalized}:${state.processedIntentCount}`;\n return {\n commands: [\n { commandId, type: \"engine/reconcileWorkspace\", workspaceId: normalized }\n ],\n state: {\n ...state,\n workspaceReconcile: {\n commandId,\n errorCode: null,\n errorMessage: null,\n status: \"loading\"\n }\n }\n };\n}\n\nfunction commandResultRecord(\n intent: Extract<EngineIntent, { type: \"engine/commandResult\" }>\n) {\n return {\n commandId: intent.commandId,\n outcome: intent.outcome,\n ...(intent.errorMessage === undefined\n ? {}\n : { errorMessage: intent.errorMessage })\n };\n}\n","import type { PromptQueueState } from \"./promptQueue.types.ts\";\n\nexport function promptQueuePromptIdForClientSubmit(\n state: PromptQueueState,\n agentSessionId: string,\n clientSubmitId: string\n): string | null {\n return (\n state.recordsBySessionId[agentSessionId.trim()]?.prompts.find(\n (prompt) => prompt.clientSubmitId === clientSubmitId.trim()\n )?.id ?? null\n );\n}\n\nexport function canCancelQueuedSubmit(\n state: PromptQueueState,\n agentSessionId: string,\n clientSubmitId: string\n): boolean {\n const record = state.recordsBySessionId[agentSessionId.trim()];\n const promptId = promptQueuePromptIdForClientSubmit(\n state,\n agentSessionId,\n clientSubmitId\n );\n return Boolean(\n record &&\n promptId &&\n record.inFlight?.promptId !== promptId &&\n record.uncertainDelivery?.promptId !== promptId\n );\n}\n\nexport function isQueuedSubmitDeliveryPending(\n state: PromptQueueState,\n agentSessionId: string,\n clientSubmitId: string\n): boolean {\n const record = state.recordsBySessionId[agentSessionId.trim()];\n const promptId = promptQueuePromptIdForClientSubmit(\n state,\n agentSessionId,\n clientSubmitId\n );\n return Boolean(\n record &&\n promptId &&\n record.failedPromptId !== promptId &&\n record.uncertainDelivery?.promptId !== promptId\n );\n}\n","import { normalizeAgentActivityCapabilityReferences } from \"../capabilityReferences.ts\";\nimport type { EngineQueuedPrompt } from \"./promptQueue.types.ts\";\n\nexport function clonePromptCapabilityReferences(\n references: EngineQueuedPrompt[\"capabilityRefs\"]\n): Pick<EngineQueuedPrompt, \"capabilityRefs\"> {\n const normalized = normalizeAgentActivityCapabilityReferences(references);\n return normalized.length > 0 ? { capabilityRefs: normalized } : {};\n}\n\nexport function clonePromptRequiredSettingsPatch(\n patch: EngineQueuedPrompt[\"requiredSettingsPatch\"]\n): Pick<EngineQueuedPrompt, \"requiredSettingsPatch\"> {\n return patch ? { requiredSettingsPatch: { ...patch } } : {};\n}\n\nexport function normalizeQueuedPrompt(\n prompt: EngineQueuedPrompt\n): EngineQueuedPrompt | null {\n const id = prompt.id.trim();\n if (!id || prompt.content.length === 0) return null;\n return {\n ...(prompt.clientSubmitId?.trim()\n ? { clientSubmitId: prompt.clientSubmitId.trim() }\n : {}),\n ...clonePromptCapabilityReferences(prompt.capabilityRefs),\n content: prompt.content.map((block) => ({ ...block })),\n createdAtUnixMs: prompt.createdAtUnixMs,\n ...(prompt.displayPrompt?.trim()\n ? { displayPrompt: prompt.displayPrompt.trim() }\n : {}),\n ...(prompt.guidance === true ? { guidance: true } : {}),\n id,\n ...clonePromptRequiredSettingsPatch(prompt.requiredSettingsPatch),\n ...(prompt.submitDiagnostics\n ? { submitDiagnostics: { ...prompt.submitDiagnostics } }\n : {}),\n ...(prompt.runtimeContent\n ? { runtimeContent: prompt.runtimeContent.map((block) => ({ ...block })) }\n : {}),\n ...(prompt.visibleInQueue === false ? { visibleInQueue: false } : {})\n };\n}\n","import type { PromptQueueRecord } from \"./promptQueue.types.ts\";\n\nexport function emptyQueueRecord(\n workspaceId: string,\n agentSessionId: string\n): PromptQueueRecord {\n return {\n agentSessionId,\n deliveryBarrierTurnId: null,\n failedPromptId: null,\n failureMessage: null,\n inFlight: null,\n prompts: [],\n sendNextPromptId: null,\n suspendReason: null,\n uncertainDelivery: null,\n workspaceId\n };\n}\n\nexport function compactQueueRecord(\n record: PromptQueueRecord\n): PromptQueueRecord | null {\n return record.prompts.length === 0 &&\n !record.inFlight &&\n !record.uncertainDelivery &&\n !record.deliveryBarrierTurnId\n ? null\n : record;\n}\n\nexport function queueSendCommandId(\n agentSessionId: string,\n sequence: number\n): string {\n return `queue:send:${agentSessionId}:${sequence}`;\n}\n","import type { CanonicalSubmitAvailability } from \"./sessionLifecycle.availability.ts\";\nimport type { PromptQueueState } from \"./promptQueue.types.ts\";\n\nexport type PromptQueueSendNowStrategy =\n | \"send_available\"\n | \"native_guidance\"\n | \"cancel_then_send\";\n\ninterface ActiveTurnDeliveryCapabilities {\n activeTurnGuidance?: boolean;\n interrupt?: boolean;\n}\n\nexport function resolveQueuedPromptSendNowStrategy(\n state: PromptQueueState,\n rawAgentSessionId: string,\n rawPromptId: string,\n availability: CanonicalSubmitAvailability,\n capabilities: ActiveTurnDeliveryCapabilities | null | undefined\n): PromptQueueSendNowStrategy | null {\n const agentSessionId = rawAgentSessionId.trim();\n const promptId = rawPromptId.trim();\n if (!canRequestQueuedPromptSendNow(state, agentSessionId, promptId)) {\n return null;\n }\n return resolvePromptSendNowStrategy(availability, capabilities);\n}\n\nexport function resolvePromptSendNowStrategy(\n availability: CanonicalSubmitAvailability,\n capabilities: ActiveTurnDeliveryCapabilities | null | undefined\n): PromptQueueSendNowStrategy | null {\n if (availability.state === \"available\") {\n return \"send_available\";\n }\n if (\n availability.state !== \"blocked\" ||\n availability.reason !== \"active_turn\"\n ) {\n return null;\n }\n if (capabilities?.activeTurnGuidance === true) {\n return \"native_guidance\";\n }\n return capabilities?.interrupt === true ? \"cancel_then_send\" : null;\n}\n\nexport function canRequestQueuedPromptSendNow(\n state: PromptQueueState,\n rawAgentSessionId: string,\n rawPromptId: string\n): boolean {\n const agentSessionId = rawAgentSessionId.trim();\n const promptId = rawPromptId.trim();\n const current = state.recordsBySessionId[agentSessionId];\n return Boolean(\n current &&\n promptId &&\n current.inFlight?.promptId !== promptId &&\n current.uncertainDelivery?.promptId !== promptId &&\n current.prompts.some((prompt) => prompt.id === promptId)\n );\n}\n","import type { CanonicalSubmitAvailability } from \"./sessionLifecycle.availability.ts\";\nimport type { PromptQueueRecord } from \"./promptQueue.types.ts\";\n\nexport type QueueDrainDecision =\n | {\n kind: \"blocked\";\n reason:\n | \"no_head\"\n | \"in_flight\"\n | \"uncertain_delivery\"\n | \"suspended\"\n | \"failed_head\"\n | \"barrier_pending\"\n | \"unavailable\";\n }\n | { kind: \"send\"; guidance: boolean };\n\n/**\n * Decides whether a queue's head prompt is ready to drain and, if so,\n * whether it goes out as a plain new-turn submit or as a guidance steer into\n * the active turn. This is the ONLY place that decision is made: every\n * current and future blocker joins this single ordered list rather than\n * gating drain from a separate, independent pre-check.\n *\n * The order below is the contract; earlier rules win:\n *\n * 1. no head prompt queued\n * 2. a send is already in flight\n * 3. the previous send's delivery is uncertain (timed out, exact turn unknown)\n * 4. the queue is suspended (explicit user stop)\n * 5. the head previously failed and hasn't been retried\n * 6. the head is guidance steering the turn availability is blocked on\n * 7. the delivery barrier (from the last accepted send) hasn't settled\n * 8. availability is otherwise not available\n * 9. otherwise the head is ready to send as a plain new-turn submit\n *\n * Guidance (rule 6) is deliberately ABOVE the delivery barrier (rule 7). The\n * barrier only serializes NEW-TURN sends against each other, so the daemon\n * never sees two competing turn starts for the same session. A guidance head\n * steers the very turn the barrier is tracking — making it wait for that\n * turn to settle first would deadlock the queue, since the entire point of\n * guidance is to reach the turn while it is still running. Guidance may\n * steer that turn repeatedly (each successive promotion re-runs this same\n * decision); a guidance send never touches the barrier, which stays in place\n * to serialize the next plain prompt behind the turn it is still tracking.\n */\nexport function resolveQueueDrainDecision(\n record: PromptQueueRecord,\n availability: CanonicalSubmitAvailability,\n barrierPending: boolean\n): QueueDrainDecision {\n const head = record.prompts[0];\n if (!head) {\n return { kind: \"blocked\", reason: \"no_head\" };\n }\n if (record.inFlight) {\n return { kind: \"blocked\", reason: \"in_flight\" };\n }\n if (record.uncertainDelivery) {\n return { kind: \"blocked\", reason: \"uncertain_delivery\" };\n }\n if (record.suspendReason) {\n return { kind: \"blocked\", reason: \"suspended\" };\n }\n if (record.failedPromptId === head.id) {\n return { kind: \"blocked\", reason: \"failed_head\" };\n }\n if (\n head.guidance === true &&\n availability.state === \"blocked\" &&\n availability.reason === \"active_turn\"\n ) {\n return { kind: \"send\", guidance: true };\n }\n if (barrierPending) {\n return { kind: \"blocked\", reason: \"barrier_pending\" };\n }\n if (availability.state !== \"available\") {\n return { kind: \"blocked\", reason: \"unavailable\" };\n }\n return { kind: \"send\", guidance: false };\n}\n","import type { SubmitRequestedIntent } from \"./pendingIntents.types.ts\";\nimport {\n clonePromptCapabilityReferences,\n clonePromptRequiredSettingsPatch\n} from \"./promptQueue.prompt.ts\";\nimport type { EngineQueuedPrompt } from \"./promptQueue.types.ts\";\n\nexport function queuedPromptFromSubmitIntent(\n intent: SubmitRequestedIntent,\n visibleInQueue: boolean\n): EngineQueuedPrompt {\n return {\n ...clonePromptCapabilityReferences(intent.capabilityRefs),\n clientSubmitId: intent.clientSubmitId,\n content: intent.content,\n createdAtUnixMs: intent.requestedAtUnixMs,\n ...(intent.displayPrompt ? { displayPrompt: intent.displayPrompt } : {}),\n id: intent.clientSubmitId,\n ...clonePromptRequiredSettingsPatch(intent.requiredSettingsPatch),\n submitDiagnostics: {\n ...(intent.submitDiagnostics ?? {}),\n blockCount: intent.submitDiagnostics?.blockCount ?? intent.content.length,\n queued: visibleInQueue,\n submittedAtUnixMs:\n intent.submitDiagnostics?.submittedAtUnixMs ?? intent.requestedAtUnixMs\n },\n ...(intent.runtimeContent ? { runtimeContent: intent.runtimeContent } : {}),\n visibleInQueue\n };\n}\n","import type { PromptQueueState } from \"./promptQueue.types.ts\";\n\nexport function createInitialPromptQueueState(): PromptQueueState {\n return {\n nextCommandSequence: 1,\n recordsBySessionId: {}\n };\n}\n","import type { AgentActivityMessage } from \"../types.ts\";\nimport type {\n EngineCommand,\n EngineCommandResultIntent,\n EngineIntent,\n EngineReducerResult\n} from \"./types.ts\";\nimport type {\n PromptQueueIntent,\n PromptQueueRecord,\n PromptQueueState\n} from \"./promptQueue.types.ts\";\nimport type {\n CancelResultValidation,\n SendInputResultValidation,\n ScopedSessionResultValidation\n} from \"./commandResult.validation.ts\";\nimport { promptQueuePromptIdForClientSubmit } from \"./promptQueue.lookup.ts\";\nimport {\n clonePromptCapabilityReferences,\n clonePromptRequiredSettingsPatch,\n normalizeQueuedPrompt\n} from \"./promptQueue.prompt.ts\";\nimport {\n compactQueueRecord,\n emptyQueueRecord,\n queueSendCommandId\n} from \"./promptQueue.record.ts\";\nimport {\n canRequestQueuedPromptSendNow,\n type PromptQueueSendNowStrategy\n} from \"./promptQueue.sendNow.ts\";\nimport { resolveQueueDrainDecision } from \"./promptQueue.drainDecision.ts\";\nimport {\n deriveCanonicalSubmitAvailability,\n type CanonicalSessionLifecycleView\n} from \"./sessionLifecycle.availability.ts\";\nimport { canonicalTurnKey } from \"./sessionEntityKeys.ts\";\nimport { queuedPromptFromSubmitIntent } from \"./promptQueue.submit.ts\";\n\nconst NO_COMMANDS: readonly EngineCommand[] = [];\nconst QUEUE_SEND_TIMEOUT_MS = 30_000;\n\nexport { createInitialPromptQueueState } from \"./promptQueue.initialState.ts\";\n\nexport interface PromptQueueReducerContext {\n lifecycle: CanonicalSessionLifecycleView;\n deletedSessionIds: Readonly<Record<string, true>>;\n planFeedbackAccepted?: boolean;\n submitRequestAccepted?: boolean;\n cancelResultValidation?: CancelResultValidation | null;\n interactionResultValidation?: ScopedSessionResultValidation | null;\n sendResultValidation?: SendInputResultValidation | null;\n sendNowStrategy?: PromptQueueSendNowStrategy | null;\n settingsResultValidation?: ScopedSessionResultValidation | null;\n}\n\nexport function promptQueueReducer(\n state: PromptQueueState,\n intent: EngineIntent,\n context: PromptQueueReducerContext\n): EngineReducerResult<PromptQueueState> {\n const reduced = reduceQueueOwnedState(state, intent, context);\n if (intent.type === \"submit/requested\" && intent.routing === \"immediate\") {\n return reduced;\n }\n if (isNoActiveTurnSendFailure(intent)) {\n return reduced;\n }\n return drainAffectedSessions(\n reduced,\n affectedSessionIds(state, intent, context),\n context.lifecycle\n );\n}\n\nfunction reduceQueueOwnedState(\n state: PromptQueueState,\n intent: EngineIntent,\n context: PromptQueueReducerContext\n): EngineReducerResult<PromptQueueState> {\n switch (intent.type) {\n case \"session/removed\":\n case \"queue/sessionCleaned\":\n return removeQueue(state, intent.agentSessionId);\n case \"queue/enqueued\":\n return context.deletedSessionIds[intent.agentSessionId.trim()]\n ? unchanged(state)\n : enqueuePrompt(state, intent);\n case \"submit/requested\":\n if (\n context.submitRequestAccepted === false ||\n context.deletedSessionIds[intent.agentSessionId.trim()]\n ) {\n return unchanged(state);\n }\n if (intent.routing === \"send_now\") {\n if (!context.sendNowStrategy) return unchanged(state);\n return requestQueuedPromptSendNow(\n enqueueSubmit(state, intent, context.lifecycle).state,\n intent.agentSessionId,\n intent.clientSubmitId,\n context.sendNowStrategy\n );\n }\n return enqueueSubmit(state, intent, context.lifecycle);\n case \"plan/feedbackRequested\":\n return context.planFeedbackAccepted === true\n ? enqueueSubmit(\n state,\n { ...intent, type: \"submit/requested\" },\n context.lifecycle\n )\n : unchanged(state);\n case \"submit/canceled\":\n return removePrompt(\n state,\n intent.agentSessionId,\n promptQueuePromptIdForClientSubmit(\n state,\n intent.agentSessionId,\n intent.clientSubmitId\n ) ?? \"\"\n );\n case \"message/snapshotReceived\":\n return confirmDeliveredPrompts(state, intent.messages);\n case \"queue/removed\":\n return removePrompt(state, intent.agentSessionId, intent.promptId);\n case \"queue/sendNowRequested\":\n if (\n context.deletedSessionIds[intent.agentSessionId.trim()] ||\n !context.sendNowStrategy\n ) {\n return unchanged(state);\n }\n return requestQueuedPromptSendNow(\n state,\n intent.agentSessionId,\n intent.promptId,\n context.sendNowStrategy\n );\n case \"queue/suspended\":\n return suspendQueue(state, intent.agentSessionId, intent.reason);\n case \"session/stopRequested\":\n return suspendQueue(state, intent.agentSessionId, \"user_stop\");\n case \"queue/resumed\":\n return context.deletedSessionIds[intent.agentSessionId.trim()]\n ? unchanged(state)\n : resumeQueue(state, intent.agentSessionId);\n case \"engine/commandResult\":\n return intent.commandType === \"queue/sendPrompt\"\n ? settleQueueCommand(\n state,\n intent,\n context.sendResultValidation ?? null\n )\n : unchanged(state);\n default:\n return unchanged(state);\n }\n}\n\nfunction enqueuePrompt(\n state: PromptQueueState,\n intent: Extract<PromptQueueIntent, { type: \"queue/enqueued\" }>,\n options?: { insertAtFront?: boolean }\n): EngineReducerResult<PromptQueueState> {\n const agentSessionId = intent.agentSessionId.trim();\n const workspaceId = intent.workspaceId.trim();\n const prompt = normalizeQueuedPrompt(intent.prompt);\n if (!agentSessionId || !workspaceId || !prompt) return unchanged(state);\n const current =\n state.recordsBySessionId[agentSessionId] ??\n emptyQueueRecord(workspaceId, agentSessionId);\n if (current.prompts.some((candidate) => candidate.id === prompt.id)) {\n return unchanged(state);\n }\n return result(\n replaceRecord(state, agentSessionId, {\n ...current,\n prompts: options?.insertAtFront\n ? [prompt, ...current.prompts]\n : [...current.prompts, prompt]\n })\n );\n}\n\nfunction enqueueSubmit(\n state: PromptQueueState,\n intent: Extract<EngineIntent, { type: \"submit/requested\" }>,\n lifecycle: CanonicalSessionLifecycleView\n): EngineReducerResult<PromptQueueState> {\n if (intent.routing === \"immediate\") {\n return {\n commands: [sendCommandFromImmediateSubmit(intent)],\n state\n };\n }\n const agentSessionId = intent.agentSessionId.trim();\n const current = state.recordsBySessionId[agentSessionId];\n const availability = deriveCanonicalSubmitAvailability(\n lifecycle,\n agentSessionId\n );\n const visibleInQueue = Boolean(\n current?.prompts.length ||\n current?.inFlight ||\n current?.uncertainDelivery ||\n current?.deliveryBarrierTurnId ||\n availability.state !== \"available\"\n );\n // An ordinary submit that resumes a queue the user just explicitly\n // stopped is the user's next instruction, not a continuation of whatever\n // was already queued before the stop: it jumps ahead of that stale\n // backlog instead of preserving FIFO order behind it.\n const resumingFromUserStop = current?.suspendReason === \"user_stop\";\n const resumed = resumeQueue(state, agentSessionId);\n return enqueuePrompt(\n resumed.state,\n {\n agentSessionId,\n prompt: queuedPromptFromSubmitIntent(intent, visibleInQueue),\n type: \"queue/enqueued\",\n workspaceId: intent.workspaceId\n },\n { insertAtFront: resumingFromUserStop }\n );\n}\n\nfunction sendCommandFromImmediateSubmit(\n intent: Extract<EngineIntent, { type: \"submit/requested\" }>\n): Extract<EngineCommand, { type: \"queue/sendPrompt\" }> {\n return {\n agentSessionId: intent.agentSessionId,\n ...clonePromptCapabilityReferences(intent.capabilityRefs),\n commandId: `submit:send:${intent.clientSubmitId}`,\n clientSubmitId: intent.clientSubmitId,\n correlationId: intent.clientSubmitId,\n content: intent.runtimeContent ?? intent.content,\n ...(intent.displayPrompt ? { displayPrompt: intent.displayPrompt } : {}),\n ...(intent.submitDiagnostics\n ? { submitDiagnostics: intent.submitDiagnostics }\n : {}),\n promptId: intent.clientSubmitId,\n ...clonePromptRequiredSettingsPatch(intent.requiredSettingsPatch),\n timeoutMs: QUEUE_SEND_TIMEOUT_MS,\n type: \"queue/sendPrompt\",\n workspaceId: intent.workspaceId\n };\n}\n\nfunction removePrompt(\n state: PromptQueueState,\n rawAgentSessionId: string,\n rawPromptId: string\n): EngineReducerResult<PromptQueueState> {\n const agentSessionId = rawAgentSessionId.trim();\n const promptId = rawPromptId.trim();\n const current = state.recordsBySessionId[agentSessionId];\n if (\n !current ||\n !promptId ||\n current.inFlight?.promptId === promptId ||\n current.uncertainDelivery?.promptId === promptId ||\n !current.prompts.some((prompt) => prompt.id === promptId)\n ) {\n return unchanged(state);\n }\n const next = compactQueueRecord({\n ...current,\n failedPromptId:\n current.failedPromptId === promptId ? null : current.failedPromptId,\n failureMessage:\n current.failedPromptId === promptId ? null : current.failureMessage,\n prompts: current.prompts.filter((prompt) => prompt.id !== promptId),\n sendNextPromptId:\n current.sendNextPromptId === promptId ? null : current.sendNextPromptId\n });\n return result(\n next\n ? replaceRecord(state, agentSessionId, next)\n : deleteRecord(state, agentSessionId)\n );\n}\n\nfunction requestQueuedPromptSendNow(\n state: PromptQueueState,\n rawAgentSessionId: string,\n rawPromptId: string,\n strategy: PromptQueueSendNowStrategy\n): EngineReducerResult<PromptQueueState> {\n const agentSessionId = rawAgentSessionId.trim();\n const promptId = rawPromptId.trim();\n if (!canRequestQueuedPromptSendNow(state, agentSessionId, promptId)) {\n return unchanged(state);\n }\n const current = state.recordsBySessionId[agentSessionId]!;\n const index = current.prompts.findIndex((prompt) => prompt.id === promptId);\n if (index < 0) return unchanged(state);\n const prompts = [...current.prompts];\n const [selected] = prompts.splice(index, 1);\n const selectedWithoutGuidance = { ...selected! };\n delete selectedWithoutGuidance.guidance;\n prompts.unshift(\n strategy === \"native_guidance\"\n ? { ...selectedWithoutGuidance, guidance: true }\n : selectedWithoutGuidance\n );\n return result(\n replaceRecord(state, agentSessionId, {\n ...current,\n failedPromptId:\n current.failedPromptId === promptId ? null : current.failedPromptId,\n failureMessage:\n current.failedPromptId === promptId ? null : current.failureMessage,\n prompts,\n sendNextPromptId: strategy === \"cancel_then_send\" ? promptId : null,\n suspendReason: null\n })\n );\n}\n\nfunction suspendQueue(\n state: PromptQueueState,\n rawAgentSessionId: string,\n reason: PromptQueueRecord[\"suspendReason\"]\n): EngineReducerResult<PromptQueueState> {\n const agentSessionId = rawAgentSessionId.trim();\n const current = state.recordsBySessionId[agentSessionId];\n if (\n !current ||\n current.prompts.length === 0 ||\n current.suspendReason === reason\n ) {\n return unchanged(state);\n }\n return result(\n replaceRecord(state, agentSessionId, { ...current, suspendReason: reason })\n );\n}\n\nfunction resumeQueue(\n state: PromptQueueState,\n rawAgentSessionId: string\n): EngineReducerResult<PromptQueueState> {\n const agentSessionId = rawAgentSessionId.trim();\n const current = state.recordsBySessionId[agentSessionId];\n return !current || current.suspendReason === null\n ? unchanged(state)\n : result(\n replaceRecord(state, agentSessionId, {\n ...current,\n suspendReason: null\n })\n );\n}\n\nfunction settleQueueCommand(\n state: PromptQueueState,\n intent: EngineCommandResultIntent,\n validation: SendInputResultValidation | null\n): EngineReducerResult<PromptQueueState> {\n const entry = Object.entries(state.recordsBySessionId).find(\n ([, record]) => record.inFlight?.commandId === intent.commandId\n );\n if (!entry) return unchanged(state);\n const [agentSessionId, current] = entry;\n const inFlight = current.inFlight!;\n if (intent.outcome === \"succeeded\" && validation?.kind === \"valid\") {\n const deliveryBarrierTurnId =\n validation.result.kind === \"goalControl\"\n ? null\n : validation.result.turnId;\n const record = compactQueueRecord({\n ...current,\n deliveryBarrierTurnId,\n failedPromptId: null,\n failureMessage: null,\n inFlight: null,\n prompts: current.prompts.filter(\n (prompt) => prompt.id !== inFlight.promptId\n ),\n sendNextPromptId:\n current.sendNextPromptId === inFlight.promptId\n ? null\n : current.sendNextPromptId\n });\n return result(\n record\n ? replaceRecord(state, agentSessionId, record)\n : deleteRecord(state, agentSessionId)\n );\n }\n if (intent.outcome === \"timedOut\" || intent.outcome === \"succeeded\") {\n const record = {\n ...current,\n failedPromptId: inFlight.promptId,\n failureMessage: null,\n inFlight: null,\n uncertainDelivery: inFlight\n };\n return {\n commands: [reconcileCommand(agentSessionId, current.workspaceId, intent)],\n state: replaceRecord(state, agentSessionId, record)\n };\n }\n if (isNoActiveTurnSendFailure(intent)) {\n return {\n commands: [reconcileCommand(agentSessionId, current.workspaceId, intent)],\n state: replaceRecord(state, agentSessionId, {\n ...current,\n failedPromptId: null,\n failureMessage: null,\n inFlight: null\n })\n };\n }\n return result(\n replaceRecord(state, agentSessionId, {\n ...current,\n failedPromptId: inFlight.promptId,\n failureMessage: intent.errorMessage?.trim() || null,\n inFlight: null\n })\n );\n}\n\nfunction reconcileCommand(\n agentSessionId: string,\n workspaceId: string,\n intent: EngineCommandResultIntent\n): Extract<EngineCommand, { type: \"session/reconcile\" }> {\n return {\n agentSessionId,\n commandId: `queue:reconcile:${intent.commandId}`,\n scope: \"state_and_messages\",\n timeoutMs: 30_000,\n type: \"session/reconcile\",\n workspaceId\n };\n}\n\nfunction isNoActiveTurnSendFailure(intent: EngineIntent): boolean {\n return (\n intent.type === \"engine/commandResult\" &&\n intent.commandType === \"queue/sendPrompt\" &&\n intent.outcome === \"failed\" &&\n (intent.errorReason?.trim() === \"agent.no_active_turn\" ||\n intent.errorCode?.trim() === \"agent.no_active_turn\")\n );\n}\n\nfunction confirmDeliveredPrompts(\n state: PromptQueueState,\n messages: readonly AgentActivityMessage[]\n): EngineReducerResult<PromptQueueState> {\n const confirmedTurnByClientSubmitId = exactConfirmedTurns(messages);\n if (confirmedTurnByClientSubmitId.size === 0) return unchanged(state);\n let next = state;\n for (const [agentSessionId, current] of Object.entries(\n state.recordsBySessionId\n )) {\n const matched = current.prompts.find((prompt) => {\n const turnId = prompt.clientSubmitId\n ? confirmedTurnByClientSubmitId.get(prompt.clientSubmitId)\n : undefined;\n return Boolean(turnId);\n });\n if (!matched?.clientSubmitId) continue;\n const turnId = confirmedTurnByClientSubmitId.get(matched.clientSubmitId);\n if (!turnId) continue;\n const record = compactQueueRecord({\n ...current,\n deliveryBarrierTurnId: turnId,\n failedPromptId:\n current.failedPromptId === matched.id ? null : current.failedPromptId,\n failureMessage:\n current.failedPromptId === matched.id ? null : current.failureMessage,\n inFlight:\n current.inFlight?.promptId === matched.id ? null : current.inFlight,\n prompts: current.prompts.filter((prompt) => prompt.id !== matched.id),\n sendNextPromptId:\n current.sendNextPromptId === matched.id\n ? null\n : current.sendNextPromptId,\n uncertainDelivery:\n current.uncertainDelivery?.promptId === matched.id\n ? null\n : current.uncertainDelivery\n });\n next = record\n ? replaceRecord(next, agentSessionId, record)\n : deleteRecord(next, agentSessionId);\n }\n return next === state ? unchanged(state) : result(next);\n}\n\nfunction exactConfirmedTurns(\n messages: readonly AgentActivityMessage[]\n): ReadonlyMap<string, string> {\n const turnsBySubmitId = new Map<string, Set<string>>();\n for (const message of messages) {\n const clientSubmitId = message.payload?.clientSubmitId;\n const turnId = message.turnId?.trim() ?? \"\";\n if (\n typeof clientSubmitId !== \"string\" ||\n !clientSubmitId.trim() ||\n !turnId\n ) {\n continue;\n }\n const id = clientSubmitId.trim();\n const turns = turnsBySubmitId.get(id) ?? new Set<string>();\n turns.add(turnId);\n turnsBySubmitId.set(id, turns);\n }\n return new Map(\n [...turnsBySubmitId]\n .filter(([, turns]) => turns.size === 1)\n .map(([clientSubmitId, turns]) => [clientSubmitId, [...turns][0]!])\n );\n}\n\nfunction drainAffectedSessions(\n reduced: EngineReducerResult<PromptQueueState>,\n affected: readonly string[],\n lifecycle: CanonicalSessionLifecycleView\n): EngineReducerResult<PromptQueueState> {\n let state = reduced.state;\n const commands = [...reduced.commands];\n for (const agentSessionId of [...new Set(affected)].sort()) {\n const drained = drainSession(state, agentSessionId, lifecycle);\n state = drained.state;\n commands.push(...drained.commands);\n }\n return state === reduced.state && commands.length === reduced.commands.length\n ? reduced\n : { commands, state };\n}\n\nfunction drainSession(\n state: PromptQueueState,\n agentSessionId: string,\n lifecycle: CanonicalSessionLifecycleView\n): EngineReducerResult<PromptQueueState> {\n const originalState = state;\n let record = state.recordsBySessionId[agentSessionId];\n if (!record) return unchanged(state);\n let barrierPending = false;\n if (record.deliveryBarrierTurnId) {\n const barrierTurn =\n lifecycle.turnsById[\n canonicalTurnKey(agentSessionId, record.deliveryBarrierTurnId)\n ];\n if (!barrierTurn || barrierTurn.phase !== \"settled\") {\n // The barrier only serializes plain new-turn sends; it does not gate\n // drain readiness on its own. Whether it blocks the head is decided\n // below, alongside every other blocker, so a guidance head steering\n // this very turn is not deadlocked behind its own barrier.\n barrierPending = true;\n } else {\n record = { ...record, deliveryBarrierTurnId: null };\n const compacted = compactQueueRecord(record);\n state = compacted\n ? replaceRecord(state, agentSessionId, compacted)\n : deleteRecord(state, agentSessionId);\n if (!compacted) return result(state);\n }\n }\n const availability = deriveCanonicalSubmitAvailability(\n lifecycle,\n agentSessionId\n );\n // The guidance flag was resolved when the prompt entered the queue; whether\n // it can steer is decided here, against the availability observed at drain\n // time. A prompt queued as guidance behind a turn that has since settled is\n // sent as a plain new-turn submit instead of a doomed steer.\n const decision = resolveQueueDrainDecision(\n record,\n availability,\n barrierPending\n );\n if (decision.kind === \"blocked\") {\n return state === originalState ? unchanged(state) : result(state);\n }\n const head = record.prompts[0]!;\n const sequence = state.nextCommandSequence;\n const commandId = queueSendCommandId(record.agentSessionId, sequence);\n return {\n commands: [\n sendCommandFromQueuedPrompt(record, head, commandId, decision.guidance)\n ],\n state: replaceRecord(\n { ...state, nextCommandSequence: sequence + 1 },\n record.agentSessionId,\n {\n ...record,\n inFlight: {\n commandId,\n ...(decision.guidance ? { guidance: true as const } : {}),\n kind: \"send\",\n promptId: head.id\n }\n }\n )\n };\n}\n\nfunction sendCommandFromQueuedPrompt(\n record: PromptQueueRecord,\n head: PromptQueueRecord[\"prompts\"][number],\n commandId: string,\n guidance: boolean\n): Extract<EngineCommand, { type: \"queue/sendPrompt\" }> {\n return {\n agentSessionId: record.agentSessionId,\n ...clonePromptCapabilityReferences(head.capabilityRefs),\n commandId,\n ...(head.clientSubmitId ? { correlationId: head.clientSubmitId } : {}),\n clientSubmitId: head.clientSubmitId ?? head.id,\n content: head.runtimeContent ?? head.content,\n ...(head.displayPrompt ? { displayPrompt: head.displayPrompt } : {}),\n ...(guidance ? { guidance: true } : {}),\n ...(head.submitDiagnostics\n ? { submitDiagnostics: head.submitDiagnostics }\n : {}),\n promptId: head.id,\n ...clonePromptRequiredSettingsPatch(head.requiredSettingsPatch),\n timeoutMs: QUEUE_SEND_TIMEOUT_MS,\n type: \"queue/sendPrompt\",\n workspaceId: record.workspaceId\n };\n}\n\nfunction affectedSessionIds(\n state: PromptQueueState,\n intent: EngineIntent,\n context: PromptQueueReducerContext\n): string[] {\n const ids: string[] = [];\n if (\"agentSessionId\" in intent && typeof intent.agentSessionId === \"string\") {\n ids.push(intent.agentSessionId.trim());\n }\n if (intent.type === \"session/snapshotReceived\") {\n ids.push(\n ...intent.sessions.map((session) => session.agentSessionId.trim())\n );\n }\n if (intent.type === \"session/upserted\") {\n ids.push(intent.session.agentSessionId.trim());\n }\n if (intent.type === \"turn/upserted\") {\n ids.push(intent.turn.agentSessionId.trim());\n }\n if (intent.type === \"interaction/upserted\") {\n ids.push(intent.interaction.agentSessionId.trim());\n }\n if (intent.type === \"message/snapshotReceived\") {\n ids.push(\n ...intent.messages.map((message) => message.agentSessionId.trim())\n );\n }\n if (intent.type === \"engine/commandResult\") {\n const queueEntry = Object.entries(state.recordsBySessionId).find(\n ([, record]) => record.inFlight?.commandId === intent.commandId\n );\n if (queueEntry) ids.push(queueEntry[0]);\n const validatedSessionIds = [\n context.sendResultValidation?.kind === \"valid\"\n ? context.sendResultValidation.result.session.agentSessionId\n : undefined,\n context.interactionResultValidation?.kind === \"valid\"\n ? context.interactionResultValidation.session.agentSessionId\n : undefined,\n context.settingsResultValidation?.kind === \"valid\"\n ? context.settingsResultValidation.session.agentSessionId\n : undefined,\n context.cancelResultValidation?.kind === \"valid\"\n ? context.cancelResultValidation.response.turn?.agentSessionId\n : undefined\n ];\n ids.push(\n ...validatedSessionIds\n .filter((id): id is string => typeof id === \"string\")\n .map((id) => id.trim())\n );\n }\n return ids.filter(Boolean);\n}\n\nfunction removeQueue(\n state: PromptQueueState,\n rawAgentSessionId: string\n): EngineReducerResult<PromptQueueState> {\n const agentSessionId = rawAgentSessionId.trim();\n return state.recordsBySessionId[agentSessionId]\n ? result(deleteRecord(state, agentSessionId))\n : unchanged(state);\n}\n\nfunction replaceRecord(\n state: PromptQueueState,\n agentSessionId: string,\n record: PromptQueueRecord\n): PromptQueueState {\n return {\n ...state,\n recordsBySessionId: {\n ...state.recordsBySessionId,\n [agentSessionId]: record\n }\n };\n}\n\nfunction deleteRecord(\n state: PromptQueueState,\n agentSessionId: string\n): PromptQueueState {\n const records = { ...state.recordsBySessionId };\n delete records[agentSessionId];\n return { ...state, recordsBySessionId: records };\n}\n\nfunction result(\n state: PromptQueueState\n): EngineReducerResult<PromptQueueState> {\n return { commands: NO_COMMANDS, state };\n}\n\nfunction unchanged(\n state: PromptQueueState\n): EngineReducerResult<PromptQueueState> {\n return { commands: NO_COMMANDS, state };\n}\n","import type { SessionActivationRequestedIntent } from \"./pendingIntents.types.ts\";\n\nexport function pendingActivationGoalControlFields(\n intent: Pick<SessionActivationRequestedIntent, \"initialGoalControl\">\n): {\n initialGoalControl?: SessionActivationRequestedIntent[\"initialGoalControl\"];\n} {\n return intent.initialGoalControl\n ? { initialGoalControl: { ...intent.initialGoalControl } }\n : {};\n}\n\nexport function pendingActivationRailSectionKeyFields(\n intent: Pick<SessionActivationRequestedIntent, \"railSectionKey\">\n): { railSectionKey?: string } {\n const railSectionKey = intent.railSectionKey?.trim();\n return railSectionKey ? { railSectionKey } : {};\n}\n","import type { EngineReducerResult } from \"./types.ts\";\nimport type { PendingIntentsState } from \"./pendingIntents.types.ts\";\n\nexport function markSessionActive(\n state: PendingIntentsState,\n agentSessionId: string\n): PendingIntentsState {\n return removeInactiveSession(state, agentSessionId);\n}\n\nexport function markSessionInactive(\n state: PendingIntentsState,\n agentSessionId: string\n): PendingIntentsState {\n const id = agentSessionId.trim();\n return state.inactiveSessionIds[id]\n ? state\n : {\n ...state,\n inactiveSessionIds: { ...state.inactiveSessionIds, [id]: true }\n };\n}\n\nexport function removeInactiveSession(\n state: PendingIntentsState,\n agentSessionId: string\n): PendingIntentsState {\n const id = agentSessionId.trim();\n if (!state.inactiveSessionIds[id]) {\n return state;\n }\n const inactiveSessionIds = { ...state.inactiveSessionIds };\n delete inactiveSessionIds[id];\n return { ...state, inactiveSessionIds };\n}\n\nexport function unchanged(\n state: PendingIntentsState\n): EngineReducerResult<PendingIntentsState> {\n return { commands: [], state };\n}\n","import { normalizeAgentActivityCapabilityReferences } from \"../capabilityReferences.ts\";\nimport type { AgentActivityMessage } from \"../types.ts\";\nimport type { SendInputResultValidation } from \"./commandResult.validation.ts\";\nimport type {\n PendingIntentsState,\n PendingSubmitIntentRecord,\n SubmitRequestedIntent\n} from \"./pendingIntents.types.ts\";\nimport { canonicalTurnKey } from \"./sessionEntityKeys.ts\";\nimport type {\n EngineCommand,\n EngineCommandResultIntent,\n EngineReducerResult\n} from \"./types.ts\";\n\nconst NO_COMMANDS: readonly EngineCommand[] = [];\n\nexport function requestSubmit(\n state: PendingIntentsState,\n intent: SubmitRequestedIntent\n): EngineReducerResult<PendingIntentsState> {\n const clientSubmitId = intent.clientSubmitId.trim();\n const agentSessionId = intent.agentSessionId.trim();\n if (\n !clientSubmitId ||\n !agentSessionId ||\n intent.content.length === 0 ||\n state.submitsByClientSubmitId[clientSubmitId]\n ) {\n return unchanged(state);\n }\n const capabilityRefs = normalizeAgentActivityCapabilityReferences(\n intent.capabilityRefs\n );\n const record: PendingSubmitIntentRecord = {\n acceptedSessionVersion: null,\n agentSessionId,\n clientSubmitId,\n ...(capabilityRefs.length > 0 ? { capabilityRefs } : {}),\n content: intent.content.map((block) => ({ ...block })),\n ...(intent.displayPrompt?.trim()\n ? { displayPrompt: intent.displayPrompt.trim() }\n : {}),\n errorCode: null,\n errorMessage: null,\n expiresAtUnixMs: intent.expiresAtUnixMs,\n ...(intent.submitDiagnostics\n ? { submitDiagnostics: { ...intent.submitDiagnostics } }\n : {}),\n requestedAtUnixMs: intent.requestedAtUnixMs,\n status: \"requested\",\n turnId: null,\n workspaceId: intent.workspaceId\n };\n return {\n commands: [\n {\n dueAtUnixMs: intent.expiresAtUnixMs,\n expiryId: submitExpiryId(clientSubmitId),\n type: \"engine/scheduleExpiry\"\n }\n ],\n state: replaceSubmit(state, record)\n };\n}\n\nexport function settleSubmitCommand(\n state: PendingIntentsState,\n intent: EngineCommandResultIntent,\n validation: SendInputResultValidation | null\n): EngineReducerResult<PendingIntentsState> {\n const clientSubmitId = intent.correlationId?.trim() ?? \"\";\n const record = state.submitsByClientSubmitId[clientSubmitId];\n if (!record) {\n return unchanged(state);\n }\n if (intent.outcome === \"succeeded\") {\n if (!validation || validation.kind === \"invalid\") {\n return {\n commands: NO_COMMANDS,\n state: replaceSubmit(state, {\n ...record,\n errorCode: \"invalid_command_result\",\n errorMessage: null,\n status: \"uncertain\"\n })\n };\n }\n const result = validation.result;\n if (result.kind === \"goalControl\") {\n return {\n commands: NO_COMMANDS,\n state: replaceSubmit(state, {\n ...record,\n acceptedSessionVersion: activitySessionVersion(result.session),\n status: \"confirmed\",\n turnId: null\n })\n };\n }\n return {\n commands: NO_COMMANDS,\n state: replaceSubmit(state, {\n ...record,\n acceptedSessionVersion: activitySessionVersion(result.session),\n status: \"accepted\",\n turnId: result.turnId.trim()\n })\n };\n }\n return {\n commands: NO_COMMANDS,\n state: replaceSubmit(state, {\n ...record,\n errorCode: intent.errorCode ?? null,\n errorMessage:\n intent.outcome === \"timedOut\"\n ? null\n : intent.errorMessage?.trim() || null,\n status: intent.outcome === \"timedOut\" ? \"uncertain\" : \"failed\"\n })\n };\n}\n\nexport function confirmFromMessages(\n state: PendingIntentsState,\n messages: readonly AgentActivityMessage[]\n): EngineReducerResult<PendingIntentsState> {\n const confirmedIds = new Set(\n messages\n .map(messageClientSubmitId)\n .filter((value): value is string => value !== null)\n );\n if (confirmedIds.size === 0) {\n return unchanged(state);\n }\n let next = state;\n for (const clientSubmitId of confirmedIds) {\n const record = next.submitsByClientSubmitId[clientSubmitId];\n if (!record) {\n continue;\n }\n next = replaceSubmit(next, { ...record, status: \"confirmed\" });\n }\n return next === state\n ? unchanged(state)\n : { commands: NO_COMMANDS, state: next };\n}\n\nexport function confirmFromSessions(\n state: PendingIntentsState,\n turnsById: Readonly<Record<string, import(\"../types.ts\").AgentActivityTurn>>\n): EngineReducerResult<PendingIntentsState> {\n let next = state;\n for (const record of Object.values(state.submitsByClientSubmitId)) {\n if (record.status !== \"accepted\" || !record.turnId) {\n continue;\n }\n const turn =\n turnsById[canonicalTurnKey(record.agentSessionId, record.turnId)];\n if (\n turn?.agentSessionId === record.agentSessionId &&\n turn.phase === \"settled\"\n ) {\n next = replaceSubmit(next, { ...record, status: \"confirmed\" });\n }\n }\n return next === state\n ? unchanged(state)\n : { commands: NO_COMMANDS, state: next };\n}\n\nexport function expireSubmit(\n state: PendingIntentsState,\n expiryId: string,\n options: {\n deliveryIsQueuePending?: boolean;\n dueAtUnixMs?: number;\n } = {}\n): EngineReducerResult<PendingIntentsState> {\n if (!expiryId.startsWith(\"submit:\")) {\n return unchanged(state);\n }\n const clientSubmitId = expiryId.slice(\"submit:\".length);\n const record = state.submitsByClientSubmitId[clientSubmitId];\n if (!record) {\n return unchanged(state);\n }\n if (options.deliveryIsQueuePending) {\n const confirmationWindowMs = Math.max(\n 1,\n record.expiresAtUnixMs - record.requestedAtUnixMs\n );\n return {\n commands: [\n {\n dueAtUnixMs:\n Math.max(\n record.expiresAtUnixMs,\n options.dueAtUnixMs ?? record.expiresAtUnixMs\n ) + confirmationWindowMs,\n expiryId,\n type: \"engine/scheduleExpiry\"\n }\n ],\n state\n };\n }\n if (record.status === \"accepted\" || record.status === \"confirmed\") {\n return {\n commands: NO_COMMANDS,\n state: deleteSubmit(state, clientSubmitId)\n };\n }\n return {\n commands: NO_COMMANDS,\n state: replaceSubmit(state, {\n ...record,\n errorMessage: record.errorMessage,\n status: \"failed\"\n })\n };\n}\n\nexport function removeSubmit(\n state: PendingIntentsState,\n clientSubmitId: string\n): EngineReducerResult<PendingIntentsState> {\n const id = clientSubmitId.trim();\n if (!state.submitsByClientSubmitId[id]) {\n return unchanged(state);\n }\n return {\n commands: [{ expiryId: submitExpiryId(id), type: \"engine/cancelExpiry\" }],\n state: deleteSubmit(state, id)\n };\n}\n\nfunction messageClientSubmitId(message: AgentActivityMessage): string | null {\n const value = message.payload?.clientSubmitId;\n return typeof value === \"string\" && value.trim() ? value.trim() : null;\n}\n\nfunction activitySessionVersion(\n session: import(\"../types.ts\").AgentActivitySession\n): number | null {\n return (\n session.updatedAtUnixMs ??\n session.lastEventUnixMs ??\n session.messageVersion ??\n session.createdAtUnixMs ??\n session.startedAtUnixMs ??\n null\n );\n}\n\nexport function submitExpiryId(clientSubmitId: string): string {\n return `submit:${clientSubmitId}`;\n}\n\nfunction replaceSubmit(\n state: PendingIntentsState,\n record: PendingSubmitIntentRecord\n): PendingIntentsState {\n return {\n ...state,\n submitsByClientSubmitId: {\n ...state.submitsByClientSubmitId,\n [record.clientSubmitId]: record\n }\n };\n}\n\nexport function deleteSubmit(\n state: PendingIntentsState,\n clientSubmitId: string\n): PendingIntentsState {\n const submits = { ...state.submitsByClientSubmitId };\n delete submits[clientSubmitId];\n return { ...state, submitsByClientSubmitId: submits };\n}\n\nfunction unchanged(\n state: PendingIntentsState\n): EngineReducerResult<PendingIntentsState> {\n return { commands: NO_COMMANDS, state };\n}\n","import type { AgentActivitySessionInput } from \"../sessionNormalization.ts\";\nimport { normalizeAgentActivityCapabilityReferences } from \"../capabilityReferences.ts\";\nimport type { SendInputResultValidation } from \"./commandResult.validation.ts\";\nimport type { ScopedSessionResultValidation } from \"./commandResult.validation.ts\";\nimport {\n isPendingActivationViable,\n type PendingActivationIntentRecord,\n type PendingIntentsState,\n type SessionActivationRequestedIntent\n} from \"./pendingIntents.types.ts\";\nimport {\n pendingActivationGoalControlFields,\n pendingActivationRailSectionKeyFields\n} from \"./pendingIntents.activationExtras.ts\";\nimport {\n markSessionActive,\n markSessionInactive,\n removeInactiveSession,\n unchanged\n} from \"./pendingIntents.inactiveSessions.ts\";\nimport {\n confirmFromMessages,\n confirmFromSessions,\n deleteSubmit,\n expireSubmit,\n removeSubmit,\n requestSubmit,\n settleSubmitCommand,\n submitExpiryId\n} from \"./pendingSubmit.reducer.ts\";\nimport type {\n EngineCommand,\n EngineCommandResultIntent,\n EngineIntent,\n EngineReducerResult\n} from \"./types.ts\";\n\nconst NO_COMMANDS: readonly EngineCommand[] = [];\nconst EXISTING_SESSION_ACTIVATION_COMMAND_TIMEOUT_MS = 30_000;\n// A new activation includes process spawn and ACP initialize before session/new.\n// Keep the outer command alive long enough for session/new to receive its own\n// full 30-second protocol timeout instead of inheriting a partially spent UI\n// deadline.\nconst NEW_SESSION_ACTIVATION_COMMAND_TIMEOUT_MS = 90_000;\n\nexport function createInitialPendingIntentsState(): PendingIntentsState {\n return {\n activationsByRequestId: {},\n inactiveSessionIds: {},\n submitsByClientSubmitId: {}\n };\n}\n\nexport function pendingIntentsReducer(\n state: PendingIntentsState,\n intent: EngineIntent,\n context: {\n deletedSessionIds: Readonly<Record<string, true>>;\n turnsById: Readonly<\n Record<string, import(\"../types.ts\").AgentActivityTurn>\n >;\n submitCancellationAccepted?: boolean;\n sendResultValidation?: SendInputResultValidation | null;\n settingsResultValidation?: ScopedSessionResultValidation | null;\n planFeedbackAccepted?: boolean;\n submitRequestAccepted?: boolean;\n submitDeliveryIsQueuePending?: boolean;\n } = {\n deletedSessionIds: {},\n turnsById: {}\n }\n): EngineReducerResult<PendingIntentsState> {\n switch (intent.type) {\n case \"activation/requested\":\n if (context.deletedSessionIds[intent.agentSessionId.trim()]) {\n return unchanged(state);\n }\n return requestActivation(state, intent);\n case \"activation/dismissed\":\n return removeActivation(state, intent.requestId);\n case \"activation/settingsPatched\":\n return patchActivationSettings(state, intent);\n case \"activation/failureRecorded\":\n return recordActivationFailure(state, intent);\n case \"activation/failureCleared\":\n return clearActivationFailure(state, intent.agentSessionId);\n case \"activation/unactivateRequested\":\n return requestUnactivation(state, intent);\n case \"session/stopRequested\":\n return stopPendingActivation(state, intent);\n case \"submit/requested\":\n if (context.submitRequestAccepted === false) return unchanged(state);\n if (context.deletedSessionIds[intent.agentSessionId.trim()]) {\n return unchanged(state);\n }\n return requestSubmit(state, intent);\n case \"plan/feedbackRequested\":\n return context.planFeedbackAccepted === true\n ? requestSubmit(state, {\n ...intent,\n type: \"submit/requested\"\n })\n : unchanged(state);\n case \"submit/dismissed\":\n return removeSubmit(state, intent.clientSubmitId);\n case \"submit/canceled\":\n return context.submitCancellationAccepted === true\n ? removeSubmit(state, intent.clientSubmitId)\n : unchanged(state);\n case \"message/snapshotReceived\":\n return confirmFromMessages(state, intent.messages);\n case \"session/snapshotReceived\":\n return receiveSessionSnapshot(state, intent.sessions, context.turnsById);\n case \"session/upserted\":\n return confirmActivationsFromSessions(state, [intent.session]);\n case \"turn/upserted\":\n return confirmFromSessions(state, context.turnsById);\n case \"engine/commandResult\":\n if (intent.commandType === \"queue/sendPrompt\") {\n const settled = settleSubmitCommand(\n state,\n intent,\n context.sendResultValidation ?? null\n );\n if (intent.outcome !== \"succeeded\") return settled;\n const confirmed = confirmFromSessions(settled.state, context.turnsById);\n return {\n commands: [...settled.commands, ...confirmed.commands],\n state: confirmed.state\n };\n }\n return intent.commandType === \"session/activate\"\n ? settleActivationCommand(state, intent)\n : intent.commandType === \"session/updateSettings\"\n ? settleActivationSettingsCommand(\n state,\n intent,\n context.settingsResultValidation ?? null\n )\n : unchanged(state);\n case \"engine/intentExpired\":\n return intent.expiryId.startsWith(\"activation:\")\n ? expireActivation(state, intent.expiryId)\n : expireSubmit(state, intent.expiryId, {\n deliveryIsQueuePending:\n context.submitDeliveryIsQueuePending === true,\n dueAtUnixMs: intent.dueAtUnixMs\n });\n case \"session/removed\":\n return removeSessionIntents(state, intent.agentSessionId);\n default:\n return unchanged(state);\n }\n}\n\nfunction patchActivationSettings(\n state: PendingIntentsState,\n intent: Extract<EngineIntent, { type: \"activation/settingsPatched\" }>\n): EngineReducerResult<PendingIntentsState> {\n const agentSessionId = intent.agentSessionId.trim();\n const record = Object.values(state.activationsByRequestId)\n .filter(\n (candidate) =>\n candidate.agentSessionId === agentSessionId &&\n candidate.mode === \"new\" &&\n isPendingActivationViable(candidate)\n )\n .sort((left, right) => right.requestedAtUnixMs - left.requestedAtUnixMs)[0];\n if (!record) return unchanged(state);\n const patchedRecord: PendingActivationIntentRecord = {\n ...record,\n pendingSettingsPatch: {\n ...(record.pendingSettingsPatch ?? {}),\n ...intent.settings\n },\n settings: { ...(record.settings ?? {}), ...intent.settings },\n settingsUpdateStatus: undefined\n };\n if (record.status === \"confirmed\") {\n const attached = attachPendingActivationSettings(patchedRecord);\n return {\n commands: attached.commands,\n state: replaceActivation(state, attached.record)\n };\n }\n return {\n commands: NO_COMMANDS,\n state: replaceActivation(state, patchedRecord)\n };\n}\n\nfunction requestActivation(\n state: PendingIntentsState,\n intent: SessionActivationRequestedIntent\n): EngineReducerResult<PendingIntentsState> {\n const requestId = intent.requestId.trim();\n const agentSessionId = intent.agentSessionId.trim();\n const workspaceId = intent.workspaceId.trim();\n const agentTargetId = intent.agentTargetId?.trim() || null;\n const clientSubmitId =\n intent.mode === \"new\" ? intent.clientSubmitId.trim() : null;\n if (\n !requestId ||\n !agentSessionId ||\n !workspaceId ||\n state.activationsByRequestId[requestId] ||\n (intent.mode === \"new\" && (!agentTargetId || !clientSubmitId))\n ) {\n return unchanged(state);\n }\n const content = (intent.content ?? []).map((block) => ({ ...block }));\n const displayPrompt = intent.initialDisplayPrompt?.trim() || undefined;\n const optimisticTitle =\n intent.mode === \"new\"\n ? intent.optimisticTitle?.trim() || undefined\n : undefined;\n const runtimeContent = (intent.runtimeContent ?? content).map((block) => ({\n ...block\n }));\n const capabilityRefs = normalizeAgentActivityCapabilityReferences(\n intent.capabilityRefs\n );\n const supersededRequestIds = Object.values(state.activationsByRequestId)\n .filter(\n (record) =>\n record.agentSessionId === agentSessionId && record.status !== \"failed\"\n )\n .map((record) => record.requestId);\n const baseState = supersededRequestIds.reduce(deleteActivation, state);\n const recordBase = {\n agentSessionId,\n ...(capabilityRefs.length > 0 ? { capabilityRefs } : {}),\n content,\n cwd: intent.cwd?.trim() ?? \"\",\n ...(displayPrompt ? { displayPrompt } : {}),\n errorCode: null,\n errorMessage: null,\n expiresAtUnixMs: intent.expiresAtUnixMs,\n initialTurnExpected:\n intent.initialTurnExpected ?? runtimeContent.length > 0,\n ...pendingActivationGoalControlFields(intent),\n ...pendingActivationRailSectionKeyFields(intent),\n ...(intent.railPlacement\n ? { railPlacement: { ...intent.railPlacement } }\n : {}),\n ...(intent.submitDiagnostics\n ? { submitDiagnostics: { ...intent.submitDiagnostics } }\n : {}),\n requestedAtUnixMs: intent.requestedAtUnixMs,\n requestId,\n ...(intent.settings ? { settings: { ...intent.settings } } : {}),\n status: \"requested\" as const,\n title: intent.title?.trim() || null,\n workspaceId\n };\n const record: PendingActivationIntentRecord =\n intent.mode === \"new\"\n ? {\n ...recordBase,\n agentTargetId: agentTargetId!,\n clientSubmitId: clientSubmitId!,\n mode: \"new\",\n ...(intent.initialTuttiModeActivation\n ? {\n initialTuttiModeActivation: {\n ...intent.initialTuttiModeActivation\n }\n }\n : {}),\n ...(intent.tuttiModeDraftKey?.trim()\n ? { tuttiModeDraftKey: intent.tuttiModeDraftKey.trim() }\n : {}),\n ...(optimisticTitle ? { optimisticTitle } : {})\n }\n : {\n ...recordBase,\n agentTargetId,\n clientSubmitId: null,\n mode: \"existing\"\n };\n return {\n commands: [\n ...supersededRequestIds.map((id) => ({\n expiryId: activationExpiryId(id),\n type: \"engine/cancelExpiry\" as const\n })),\n {\n dueAtUnixMs: intent.expiresAtUnixMs,\n expiryId: activationExpiryId(requestId),\n type: \"engine/scheduleExpiry\"\n },\n intent.mode === \"new\"\n ? {\n agentSessionId,\n ...(capabilityRefs.length > 0 ? { capabilityRefs } : {}),\n agentTargetId: agentTargetId!,\n commandId: `activate:${requestId}`,\n clientSubmitId: clientSubmitId!,\n correlationId: requestId,\n ...(intent.cwd !== undefined ? { cwd: intent.cwd } : {}),\n ...(runtimeContent.length > 0\n ? { initialContent: runtimeContent }\n : {}),\n ...(displayPrompt ? { initialDisplayPrompt: displayPrompt } : {}),\n ...pendingActivationGoalControlFields(intent),\n ...(intent.railPlacement\n ? { railPlacement: { ...intent.railPlacement } }\n : {}),\n ...(intent.submitDiagnostics\n ? { submitDiagnostics: { ...intent.submitDiagnostics } }\n : {}),\n mode: \"new\" as const,\n ...(intent.initialTuttiModeActivation\n ? {\n initialTuttiModeActivation: {\n ...intent.initialTuttiModeActivation\n }\n }\n : {}),\n ...(intent.settings ? { settings: { ...intent.settings } } : {}),\n timeoutMs: NEW_SESSION_ACTIVATION_COMMAND_TIMEOUT_MS,\n ...(intent.title?.trim() ? { title: intent.title.trim() } : {}),\n type: \"session/activate\",\n ...(intent.visible !== undefined\n ? { visible: intent.visible }\n : {}),\n workspaceId\n }\n : {\n agentSessionId,\n ...(capabilityRefs.length > 0 ? { capabilityRefs } : {}),\n ...(agentTargetId ? { agentTargetId } : {}),\n commandId: `activate:${requestId}`,\n correlationId: requestId,\n ...(intent.cwd !== undefined ? { cwd: intent.cwd } : {}),\n ...(runtimeContent.length > 0\n ? { initialContent: runtimeContent }\n : {}),\n ...(displayPrompt ? { initialDisplayPrompt: displayPrompt } : {}),\n ...(intent.submitDiagnostics\n ? { submitDiagnostics: { ...intent.submitDiagnostics } }\n : {}),\n mode: \"existing\" as const,\n ...(intent.settings ? { settings: { ...intent.settings } } : {}),\n timeoutMs: EXISTING_SESSION_ACTIVATION_COMMAND_TIMEOUT_MS,\n ...(intent.title?.trim() ? { title: intent.title.trim() } : {}),\n type: \"session/activate\" as const,\n ...(intent.visible !== undefined\n ? { visible: intent.visible }\n : {}),\n workspaceId\n }\n ],\n state: replaceActivation(\n markSessionActive(baseState, agentSessionId),\n record\n )\n };\n}\n\nfunction recordActivationFailure(\n state: PendingIntentsState,\n intent: Extract<EngineIntent, { type: \"activation/failureRecorded\" }>\n): EngineReducerResult<PendingIntentsState> {\n const agentSessionId = intent.agentSessionId.trim();\n const requestId = intent.requestId.trim();\n if (\n !agentSessionId ||\n !requestId ||\n state.activationsByRequestId[requestId]\n ) {\n return unchanged(state);\n }\n return {\n commands: NO_COMMANDS,\n state: replaceActivation(state, {\n agentSessionId,\n agentTargetId: null,\n clientSubmitId: null,\n content: [],\n cwd: \"\",\n errorCode: intent.errorCode?.trim() || null,\n errorMessage: intent.errorMessage.trim() || null,\n expiresAtUnixMs: Number.MAX_SAFE_INTEGER,\n initialTurnExpected: false,\n mode: \"existing\",\n requestedAtUnixMs: intent.occurredAtUnixMs,\n requestId,\n status: \"failed\",\n title: null,\n workspaceId: intent.workspaceId\n })\n };\n}\n\nfunction clearActivationFailure(\n state: PendingIntentsState,\n agentSessionId: string\n): EngineReducerResult<PendingIntentsState> {\n const ids = Object.values(state.activationsByRequestId)\n .filter(\n (record) =>\n record.agentSessionId === agentSessionId.trim() &&\n record.status === \"failed\"\n )\n .map((record) => record.requestId);\n if (ids.length === 0) {\n return unchanged(state);\n }\n return {\n commands: ids\n .filter(\n (id) =>\n state.activationsByRequestId[id]?.expiresAtUnixMs !==\n Number.MAX_SAFE_INTEGER\n )\n .map((id) => ({\n expiryId: activationExpiryId(id),\n type: \"engine/cancelExpiry\" as const\n })),\n state: ids.reduce(deleteActivation, state)\n };\n}\n\nfunction requestUnactivation(\n state: PendingIntentsState,\n intent: Extract<EngineIntent, { type: \"activation/unactivateRequested\" }>\n): EngineReducerResult<PendingIntentsState> {\n const agentSessionId = intent.agentSessionId.trim();\n if (!agentSessionId || !intent.workspaceId.trim()) {\n return unchanged(state);\n }\n const activationIds = Object.values(state.activationsByRequestId)\n .filter((record) => record.agentSessionId === agentSessionId)\n .map((record) => record.requestId);\n return {\n commands: [\n ...activationIds\n .filter(\n (id) =>\n state.activationsByRequestId[id]?.expiresAtUnixMs !==\n Number.MAX_SAFE_INTEGER\n )\n .map((id) => ({\n expiryId: activationExpiryId(id),\n type: \"engine/cancelExpiry\" as const\n })),\n {\n agentSessionId,\n commandId: intent.commandId,\n type: \"session/unactivate\" as const,\n workspaceId: intent.workspaceId\n }\n ],\n state: markSessionInactive(\n activationIds.reduce(deleteActivation, state),\n agentSessionId\n )\n };\n}\n\nfunction stopPendingActivation(\n state: PendingIntentsState,\n intent: Extract<EngineIntent, { type: \"session/stopRequested\" }>\n): EngineReducerResult<PendingIntentsState> {\n const agentSessionId = intent.agentSessionId.trim();\n const workspaceId = intent.workspaceId.trim();\n const activation = Object.values(state.activationsByRequestId)\n .filter(\n (record) =>\n record.agentSessionId === agentSessionId &&\n record.workspaceId === workspaceId &&\n (record.status === \"requested\" || record.status === \"uncertain\")\n )\n .sort((left, right) => right.requestedAtUnixMs - left.requestedAtUnixMs)[0];\n if (!activation) return unchanged(state);\n return {\n commands: [\n {\n type: \"engine/abortExternalCommand\",\n reason: \"agent session activation canceled by user\",\n targetCommandId: `activate:${activation.requestId}`\n }\n ],\n state: replaceActivation(state, {\n ...activation,\n errorCode: null,\n errorMessage: null,\n status: \"canceled\"\n })\n };\n}\n\nfunction settleActivationCommand(\n state: PendingIntentsState,\n intent: EngineCommandResultIntent\n): EngineReducerResult<PendingIntentsState> {\n const requestId = intent.correlationId?.trim() ?? \"\";\n const record = state.activationsByRequestId[requestId];\n if (!record) {\n return unchanged(state);\n }\n if (record.status === \"canceled\") return unchanged(state);\n if (\n intent.outcome === \"succeeded\" &&\n isActivationCommandResult(intent.value)\n ) {\n const result = intent.value;\n const failed = result.activation.status === \"failed\";\n return {\n commands: NO_COMMANDS,\n state: replaceActivation(\n markSessionActive(state, record.agentSessionId),\n {\n ...record,\n errorCode: failed ? result.error?.code?.trim() || null : null,\n errorMessage: failed ? result.error?.message?.trim() || null : null,\n status: failed ? \"failed\" : record.status\n }\n )\n };\n }\n if (intent.outcome === \"succeeded\") {\n return {\n commands: NO_COMMANDS,\n state: replaceActivation(state, {\n ...record,\n errorCode: \"invalid_command_result\",\n errorMessage: null,\n status: \"uncertain\"\n })\n };\n }\n return {\n commands: NO_COMMANDS,\n state: replaceActivation(state, {\n ...record,\n errorCode: intent.errorCode ?? null,\n errorMessage:\n intent.outcome === \"timedOut\"\n ? null\n : intent.errorMessage?.trim() || null,\n status: intent.outcome === \"timedOut\" ? \"uncertain\" : \"failed\"\n })\n };\n}\n\nfunction receiveSessionSnapshot(\n state: PendingIntentsState,\n sessions: readonly AgentActivitySessionInput[],\n turnsById: Readonly<Record<string, import(\"../types.ts\").AgentActivityTurn>>\n): EngineReducerResult<PendingIntentsState> {\n const activationResult = confirmActivationsFromSessions(state, sessions);\n const submitResult = confirmFromSessions(activationResult.state, turnsById);\n return {\n commands: [...activationResult.commands, ...submitResult.commands],\n state: submitResult.state\n };\n}\n\nfunction confirmActivationsFromSessions(\n state: PendingIntentsState,\n sessions: readonly AgentActivitySessionInput[]\n): EngineReducerResult<PendingIntentsState> {\n const sessionsById = new Map(\n sessions.map((session) => [session.agentSessionId, session])\n );\n const commands: EngineCommand[] = [];\n let next = state;\n for (const record of Object.values(state.activationsByRequestId)) {\n if (record.status !== \"requested\" && record.status !== \"uncertain\") {\n continue;\n }\n const session = sessionsById.get(record.agentSessionId);\n if (\n !session ||\n session.workspaceId.trim() !== record.workspaceId ||\n (record.mode === \"new\" &&\n (session.createdAtUnixMs === undefined ||\n session.createdAtUnixMs < record.requestedAtUnixMs))\n ) {\n continue;\n }\n const settingsUpdate = attachPendingActivationSettings(record);\n next = replaceActivation(markSessionActive(next, record.agentSessionId), {\n ...settingsUpdate.record,\n errorMessage: null,\n status: \"confirmed\"\n });\n commands.push(...settingsUpdate.commands);\n }\n return next === state ? unchanged(state) : { commands, state: next };\n}\n\nfunction attachPendingActivationSettings(\n record: PendingActivationIntentRecord\n): {\n commands: readonly EngineCommand[];\n record: PendingActivationIntentRecord;\n} {\n const settings = record.pendingSettingsPatch;\n if (\n !settings ||\n Object.keys(settings).length === 0 ||\n record.settingsUpdateStatus === \"inFlight\"\n ) {\n return { commands: NO_COMMANDS, record };\n }\n return {\n commands: [\n {\n agentSessionId: record.agentSessionId,\n commandId: `activation-settings:${record.requestId}`,\n correlationId: record.requestId,\n settings: { ...settings },\n type: \"session/updateSettings\",\n workspaceId: record.workspaceId\n }\n ],\n record: { ...record, settingsUpdateStatus: \"inFlight\" }\n };\n}\n\nfunction settleActivationSettingsCommand(\n state: PendingIntentsState,\n intent: EngineCommandResultIntent,\n validation: ScopedSessionResultValidation | null\n): EngineReducerResult<PendingIntentsState> {\n const requestId = intent.correlationId?.trim() ?? \"\";\n const record = state.activationsByRequestId[requestId];\n if (\n !record ||\n record.settingsUpdateStatus !== \"inFlight\" ||\n intent.commandId !== `activation-settings:${requestId}`\n ) {\n return unchanged(state);\n }\n if (intent.outcome === \"succeeded\" && validation?.kind === \"valid\") {\n const {\n pendingSettingsPatch: _patch,\n settingsUpdateStatus: _status,\n ...next\n } = record;\n return { commands: NO_COMMANDS, state: replaceActivation(state, next) };\n }\n return {\n commands: NO_COMMANDS,\n state: replaceActivation(state, {\n ...record,\n errorCode:\n intent.outcome === \"succeeded\"\n ? \"invalid_command_result\"\n : intent.errorCode?.trim() || \"settings_update_failed\",\n errorMessage: intent.errorMessage?.trim() || null,\n settingsUpdateStatus:\n intent.outcome === \"timedOut\" || intent.outcome === \"succeeded\"\n ? \"unknown\"\n : \"failed\"\n })\n };\n}\n\nfunction expireActivation(\n state: PendingIntentsState,\n expiryId: string\n): EngineReducerResult<PendingIntentsState> {\n const requestId = expiryId.slice(\"activation:\".length);\n const record = state.activationsByRequestId[requestId];\n if (!record) {\n return unchanged(state);\n }\n if (record.status === \"confirmed\") {\n return unchanged(state);\n }\n if (record.status === \"canceled\") {\n return { commands: NO_COMMANDS, state: deleteActivation(state, requestId) };\n }\n return {\n commands: NO_COMMANDS,\n state: replaceActivation(state, {\n ...record,\n errorCode: record.errorCode ?? \"activation_confirmation_expired\",\n errorMessage: record.errorMessage,\n status: \"failed\"\n })\n };\n}\n\nfunction removeActivation(\n state: PendingIntentsState,\n requestId: string\n): EngineReducerResult<PendingIntentsState> {\n const id = requestId.trim();\n if (!state.activationsByRequestId[id]) {\n return unchanged(state);\n }\n return {\n commands: [\n { expiryId: activationExpiryId(id), type: \"engine/cancelExpiry\" }\n ],\n state: deleteActivation(state, id)\n };\n}\n\nfunction removeSessionIntents(\n state: PendingIntentsState,\n agentSessionId: string\n): EngineReducerResult<PendingIntentsState> {\n const submitIds = Object.values(state.submitsByClientSubmitId)\n .filter((record) => record.agentSessionId === agentSessionId.trim())\n .map((record) => record.clientSubmitId);\n const activationIds = Object.values(state.activationsByRequestId)\n .filter((record) => record.agentSessionId === agentSessionId.trim())\n .map((record) => record.requestId);\n const wasInactive = state.inactiveSessionIds[agentSessionId.trim()] === true;\n if (submitIds.length === 0 && activationIds.length === 0 && !wasInactive) {\n return unchanged(state);\n }\n return {\n commands: [\n ...submitIds.map((id) => ({\n expiryId: submitExpiryId(id),\n type: \"engine/cancelExpiry\" as const\n })),\n ...activationIds.map((id) => ({\n expiryId: activationExpiryId(id),\n type: \"engine/cancelExpiry\" as const\n }))\n ],\n state: removeInactiveSession(\n activationIds.reduce(\n deleteActivation,\n submitIds.reduce(deleteSubmit, state)\n ),\n agentSessionId\n )\n };\n}\n\nfunction isActivationCommandResult(value: unknown): value is {\n activation: { status: string };\n error?: { code?: string; message?: string } | null;\n} {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n const result = value as {\n activation?: { status?: unknown };\n error?: { code?: string; message?: string } | null;\n };\n return Boolean(\n result.activation && typeof result.activation.status === \"string\"\n );\n}\n\nfunction activationExpiryId(requestId: string): string {\n return `activation:${requestId}`;\n}\n\nfunction replaceActivation(\n state: PendingIntentsState,\n record: PendingActivationIntentRecord\n): PendingIntentsState {\n return {\n ...state,\n activationsByRequestId: {\n ...state.activationsByRequestId,\n [record.requestId]: record\n }\n };\n}\n\nfunction deleteActivation(\n state: PendingIntentsState,\n requestId: string\n): PendingIntentsState {\n const activations = { ...state.activationsByRequestId };\n delete activations[requestId];\n return { ...state, activationsByRequestId: activations };\n}\n","import type { ScopedSessionResultValidation } from \"./commandResult.validation.ts\";\nimport type {\n SessionLifecycleState,\n SessionOperationState,\n SessionSettingsUpdateState\n} from \"./sessionLifecycle.types.ts\";\nimport type {\n EngineCommand,\n EngineIntent,\n EngineReducerResult\n} from \"./types.ts\";\n\nconst NO_COMMANDS: readonly EngineCommand[] = [];\n\nexport function createInitialSettingsUpdate(): SessionSettingsUpdateState {\n return {\n commandId: null,\n errorCode: null,\n errorMessage: null,\n queuedCommandId: null,\n queuedSettings: null,\n settings: null,\n status: \"idle\"\n };\n}\n\nexport function requestSettingsUpdate(\n state: SessionLifecycleState,\n intent: Extract<EngineIntent, { type: \"session/settingsUpdateRequested\" }>\n): EngineReducerResult<SessionLifecycleState> {\n const id = intent.agentSessionId.trim();\n const commandId = intent.commandId.trim();\n const workspaceId = intent.workspaceId.trim();\n const operation = state.operationBySessionId[id];\n if (\n !id ||\n !commandId ||\n !workspaceId ||\n !operation ||\n operation.runtimeAvailability.state === \"blocked\" ||\n state.sessionsById[id]?.workspaceId !== workspaceId ||\n Object.keys(intent.settings).length === 0\n )\n return unchanged(state);\n if (operation.settingsUpdate.status === \"inFlight\") {\n return result(\n setOperation(state, id, {\n ...operation,\n settingsUpdate: {\n ...operation.settingsUpdate,\n queuedCommandId: commandId,\n queuedSettings: {\n ...(operation.settingsUpdate.queuedSettings ?? {}),\n ...intent.settings\n }\n }\n })\n );\n }\n if (operation.settingsUpdate.status === \"unknown\" && intent.retry !== true)\n return unchanged(state);\n const settings =\n operation.settingsUpdate.status === \"unknown\"\n ? {\n ...(operation.settingsUpdate.settings ?? {}),\n ...(operation.settingsUpdate.queuedSettings ?? {}),\n ...intent.settings\n }\n : { ...intent.settings };\n return {\n commands: [\n settingsCommand(id, workspaceId, commandId, settings, intent.timeoutMs)\n ],\n state: setOperation(state, id, {\n ...operation,\n settingsUpdate: {\n ...createInitialSettingsUpdate(),\n commandId,\n settings,\n status: \"inFlight\"\n }\n })\n };\n}\n\nexport function settleSettingsUpdate(\n state: SessionLifecycleState,\n intent: Extract<EngineIntent, { type: \"engine/commandResult\" }>,\n validation: ScopedSessionResultValidation | null\n): EngineReducerResult<SessionLifecycleState> {\n const entry = Object.entries(state.operationBySessionId).find(\n ([id, operation]) =>\n operation.settingsUpdate.commandId === intent.commandId &&\n id === (intent.correlationId?.trim() ?? \"\")\n );\n if (!entry) return unchanged(state);\n const [id, operation] = entry;\n const update = operation.settingsUpdate;\n if (\n intent.outcome === \"succeeded\" &&\n validation?.kind === \"valid\" &&\n update.queuedSettings &&\n update.queuedCommandId\n ) {\n const settings = update.queuedSettings;\n const commandId = update.queuedCommandId;\n if (operation.runtimeAvailability.state === \"blocked\") {\n return result(\n setOperation(state, id, {\n ...operation,\n settingsUpdate: {\n ...createInitialSettingsUpdate(),\n queuedCommandId: commandId,\n queuedSettings: settings,\n status: \"waitingForRuntime\"\n }\n })\n );\n }\n return {\n commands: [\n settingsCommand(\n id,\n state.sessionsById[id]?.workspaceId ?? \"\",\n commandId,\n settings\n )\n ],\n state: setOperation(state, id, {\n ...operation,\n settingsUpdate: {\n ...createInitialSettingsUpdate(),\n commandId,\n settings,\n status: \"inFlight\"\n }\n })\n };\n }\n const status =\n intent.outcome === \"succeeded\" && validation?.kind === \"valid\"\n ? \"idle\"\n : intent.outcome === \"timedOut\" || intent.outcome === \"succeeded\"\n ? \"unknown\"\n : \"failed\";\n return result(\n setOperation(state, id, {\n ...operation,\n settingsUpdate: {\n ...update,\n errorCode:\n intent.outcome === \"succeeded\" && validation?.kind === \"invalid\"\n ? \"invalid_command_result\"\n : (intent.errorCode ?? null),\n errorMessage: intent.errorMessage?.trim() || null,\n status\n }\n })\n );\n}\n\nexport function reconcileSettingsUpdates(\n previous: SessionLifecycleState,\n next: SessionLifecycleState\n): EngineReducerResult<SessionLifecycleState> {\n const commands: EngineCommand[] = [];\n let state = next;\n for (const [id, operation] of Object.entries(next.operationBySessionId)) {\n const session = next.sessionsById[id];\n if (\n operation.settingsUpdate.status !== \"unknown\" ||\n !session ||\n !settingsMatch(session.settings, operation.settingsUpdate.settings)\n )\n continue;\n const queuedSettings = operation.settingsUpdate.queuedSettings;\n const queuedCommandId = operation.settingsUpdate.queuedCommandId;\n if (queuedSettings && queuedCommandId) {\n if (operation.runtimeAvailability.state === \"blocked\") {\n state = setOperation(state, id, {\n ...operation,\n settingsUpdate: {\n ...createInitialSettingsUpdate(),\n queuedCommandId,\n queuedSettings,\n status: \"waitingForRuntime\"\n }\n });\n continue;\n }\n commands.push(\n settingsCommand(\n id,\n session.workspaceId,\n queuedCommandId,\n queuedSettings\n )\n );\n state = setOperation(state, id, {\n ...operation,\n settingsUpdate: {\n ...createInitialSettingsUpdate(),\n commandId: queuedCommandId,\n settings: queuedSettings,\n status: \"inFlight\"\n }\n });\n } else {\n state = setOperation(state, id, {\n ...operation,\n settingsUpdate: createInitialSettingsUpdate()\n });\n }\n }\n return state === previous && commands.length === 0\n ? unchanged(previous)\n : { commands, state };\n}\n\nexport function resumeSettingsUpdateWhenRuntimeAvailable(\n state: SessionLifecycleState,\n rawAgentSessionId: string\n): EngineReducerResult<SessionLifecycleState> {\n const id = rawAgentSessionId.trim();\n const operation = state.operationBySessionId[id];\n const update = operation?.settingsUpdate;\n if (\n !operation ||\n operation.runtimeAvailability.state !== \"available\" ||\n update?.status !== \"waitingForRuntime\" ||\n !update.queuedCommandId ||\n !update.queuedSettings\n ) {\n return unchanged(state);\n }\n return {\n commands: [\n settingsCommand(\n id,\n state.sessionsById[id]?.workspaceId ?? \"\",\n update.queuedCommandId,\n update.queuedSettings\n )\n ],\n state: setOperation(state, id, {\n ...operation,\n settingsUpdate: {\n ...createInitialSettingsUpdate(),\n commandId: update.queuedCommandId,\n settings: update.queuedSettings,\n status: \"inFlight\"\n }\n })\n };\n}\n\nfunction settingsCommand(\n agentSessionId: string,\n workspaceId: string,\n commandId: string,\n settings: Readonly<Record<string, unknown>>,\n timeoutMs?: number\n): EngineCommand {\n return {\n agentSessionId,\n commandId,\n correlationId: agentSessionId,\n settings,\n ...(timeoutMs !== undefined ? { timeoutMs } : {}),\n type: \"session/updateSettings\",\n workspaceId\n };\n}\nfunction settingsMatch(\n canonical: Readonly<Record<string, unknown>> | null | undefined,\n patch: Readonly<Record<string, unknown>> | null\n): boolean {\n return Boolean(\n canonical &&\n patch &&\n Object.entries(patch).every(([key, value]) => canonical[key] === value)\n );\n}\nfunction setOperation(\n state: SessionLifecycleState,\n id: string,\n operation: SessionOperationState\n): SessionLifecycleState {\n return {\n ...state,\n operationBySessionId: { ...state.operationBySessionId, [id]: operation }\n };\n}\nfunction result(\n state: SessionLifecycleState\n): EngineReducerResult<SessionLifecycleState> {\n return { commands: NO_COMMANDS, state };\n}\nfunction unchanged(\n state: SessionLifecycleState\n): EngineReducerResult<SessionLifecycleState> {\n return { commands: NO_COMMANDS, state };\n}\n","import type { AgentActivityInteraction } from \"./types.ts\";\n\nexport function isSameInteractionIdentity(\n left: AgentActivityInteraction,\n right: AgentActivityInteraction\n): boolean {\n return (\n left.agentSessionId === right.agentSessionId &&\n left.turnId === right.turnId &&\n left.requestId === right.requestId\n );\n}\n\nexport function shouldUseIncomingInteraction(\n current: AgentActivityInteraction | undefined,\n incoming: AgentActivityInteraction\n): boolean {\n if (!current) return true;\n if (incoming.updatedAtUnixMs < current.updatedAtUnixMs) return false;\n const currentTerminal = current.status !== \"pending\";\n const incomingTerminal = incoming.status !== \"pending\";\n if (currentTerminal && incoming.status !== current.status) return false;\n if (\n incoming.updatedAtUnixMs === current.updatedAtUnixMs &&\n currentTerminal !== incomingTerminal\n ) {\n return incomingTerminal;\n }\n return true;\n}\n","import type { AgentActivityInteraction, AgentActivityTurn } from \"../types.ts\";\nimport { shouldUseIncomingInteraction } from \"../interactionMonotonicity.ts\";\nimport { areJsonLikeValuesEqual } from \"../merge.ts\";\nimport { normalizeAgentActivitySession } from \"../sessionNormalization.ts\";\nimport type { AgentActivitySessionInput } from \"../sessionNormalization.ts\";\nimport type {\n CanonicalAgentSession,\n SessionLifecycleState,\n SessionOperationState\n} from \"./sessionLifecycle.types.ts\";\nimport {\n canonicalInteractionKey,\n canonicalTurnKey\n} from \"./sessionEntityKeys.ts\";\n\nexport function replaceCanonicalSessionSnapshot(\n state: SessionLifecycleState,\n incoming: readonly AgentActivitySessionInput[],\n createOperation: () => SessionOperationState\n): SessionLifecycleState {\n const sessionsById: Record<string, CanonicalAgentSession> = {};\n const turnsById: Record<string, AgentActivityTurn> = {};\n const interactionsById: Record<string, AgentActivityInteraction> = {};\n const operationBySessionId: Record<string, SessionOperationState> = {};\n const incomingSessionIds = new Set<string>();\n const authoritativePendingVersionBySessionId: Record<string, number> = {};\n for (const source of incoming) {\n const id = source.agentSessionId.trim();\n if (!id || state.deletedSessionIds[id]) continue;\n incomingSessionIds.add(id);\n const current = state.sessionsById[id];\n const incomingSession = canonicalSession(source);\n const useIncoming = shouldUseIncomingSession(current, incomingSession);\n const candidateSession = useIncoming\n ? preserveLiveTurnOnTimestampTie(current, incomingSession)\n : current!;\n sessionsById[id] =\n current && areJsonLikeValuesEqual(current, candidateSession)\n ? current\n : candidateSession;\n operationBySessionId[id] =\n state.operationBySessionId[id] ?? createOperation();\n if (useIncoming) {\n authoritativePendingVersionBySessionId[id] =\n sessionVersion(incomingSession);\n }\n if (useIncoming && source.activeTurn?.agentSessionId === id) {\n mergeTurnInto(turnsById, state.turnsById, source.activeTurn);\n }\n if (useIncoming && source.latestTurn?.agentSessionId === id) {\n mergeTurnInto(turnsById, state.turnsById, source.latestTurn);\n }\n for (const interaction of [\n ...source.latestTurnInteractions,\n ...source.pendingInteractions\n ]) {\n if (interaction.agentSessionId === id) {\n mergeInteractionInto(\n interactionsById,\n state.interactionsById,\n interaction\n );\n }\n }\n }\n // Session removal is an explicit protocol-v2 event. A list response can be\n // stale or paginated, so omission must not erase a newer locally observed\n // session (for example one created while the list request was in flight).\n for (const [id, session] of Object.entries(state.sessionsById)) {\n if (!sessionsById[id] && !state.deletedSessionIds[id]) {\n sessionsById[id] = session;\n operationBySessionId[id] =\n state.operationBySessionId[id] ?? createOperation();\n }\n }\n for (const [id, operation] of Object.entries(state.operationBySessionId)) {\n if (\n !operationBySessionId[id] &&\n operation.cancel.status === \"awaitingTurn\"\n ) {\n operationBySessionId[id] = operation;\n }\n }\n for (const turn of Object.values(state.turnsById)) {\n const key = canonicalTurnKey(turn.agentSessionId, turn.turnId);\n if (sessionsById[turn.agentSessionId] && !turnsById[key]) {\n turnsById[key] = turn;\n }\n }\n for (const interaction of Object.values(state.interactionsById)) {\n if (!sessionsById[interaction.agentSessionId]) continue;\n const key = canonicalInteractionKey(\n interaction.agentSessionId,\n interaction.turnId,\n interaction.requestId\n );\n const projected = interactionsById[key];\n const authoritativePendingVersion =\n authoritativePendingVersionBySessionId[interaction.agentSessionId];\n const authoritativelyOmitted =\n !projected &&\n incomingSessionIds.has(interaction.agentSessionId) &&\n interaction.status === \"pending\" &&\n authoritativePendingVersion !== undefined &&\n authoritativePendingVersion >= interaction.updatedAtUnixMs;\n if (\n !authoritativelyOmitted &&\n (!projected || shouldUseIncomingInteraction(projected, interaction))\n ) {\n interactionsById[key] = interaction;\n }\n }\n const nextInteractionsById = reuseRecordIfShallowEqual(\n state.interactionsById,\n interactionsById\n );\n const nextOperationBySessionId = reuseRecordIfShallowEqual(\n state.operationBySessionId,\n operationBySessionId\n );\n const nextSessionsById = reuseRecordIfShallowEqual(\n state.sessionsById,\n sessionsById\n );\n const nextTurnsById = reuseRecordIfShallowEqual(state.turnsById, turnsById);\n if (\n nextInteractionsById === state.interactionsById &&\n nextOperationBySessionId === state.operationBySessionId &&\n nextSessionsById === state.sessionsById &&\n nextTurnsById === state.turnsById\n ) {\n return state;\n }\n return {\n ...state,\n interactionsById: nextInteractionsById,\n operationBySessionId: nextOperationBySessionId,\n sessionsById: nextSessionsById,\n turnsById: nextTurnsById\n };\n}\n\nexport function upsertCanonicalSession(\n state: SessionLifecycleState,\n source: AgentActivitySessionInput,\n createOperation: () => SessionOperationState\n): SessionLifecycleState {\n const id = source.agentSessionId.trim();\n if (!id || state.deletedSessionIds[id]) return state;\n const current = state.sessionsById[id];\n const incoming = canonicalSession(source);\n const useIncoming = shouldUseIncomingSession(current, incoming);\n const candidateSession = useIncoming\n ? preserveLiveTurnOnTimestampTie(current, incoming)\n : current!;\n const nextSession =\n current && areJsonLikeValuesEqual(current, candidateSession)\n ? current\n : candidateSession;\n const operationBySessionId = state.operationBySessionId[id]\n ? state.operationBySessionId\n : { ...state.operationBySessionId, [id]: createOperation() };\n let next: SessionLifecycleState =\n operationBySessionId === state.operationBySessionId &&\n nextSession === current\n ? state\n : {\n ...state,\n operationBySessionId,\n sessionsById:\n nextSession === current\n ? state.sessionsById\n : { ...state.sessionsById, [id]: nextSession }\n };\n if (useIncoming && source.activeTurn?.agentSessionId === id) {\n next = upsertCanonicalTurn(next, source.activeTurn);\n }\n if (useIncoming && source.latestTurn?.agentSessionId === id) {\n next = upsertCanonicalTurn(next, source.latestTurn);\n }\n for (const interaction of source.latestTurnInteractions) {\n next = upsertCanonicalInteraction(next, interaction);\n }\n if (useIncoming) {\n next = removeMissingPendingInteractions(\n next,\n id,\n source.pendingInteractions,\n sessionVersion(incoming)\n );\n }\n for (const interaction of source.pendingInteractions) {\n next = upsertCanonicalInteraction(next, interaction);\n }\n return next;\n}\n\nfunction removeMissingPendingInteractions(\n state: SessionLifecycleState,\n agentSessionId: string,\n incoming: readonly AgentActivityInteraction[],\n authoritativeVersion: number\n): SessionLifecycleState {\n const incomingKeys = new Set(\n incoming.map((item) =>\n canonicalInteractionKey(item.agentSessionId, item.turnId, item.requestId)\n )\n );\n const interactionsById = { ...state.interactionsById };\n let changed = false;\n for (const [key, interaction] of Object.entries(state.interactionsById)) {\n if (\n interaction.agentSessionId === agentSessionId &&\n interaction.status === \"pending\" &&\n !incomingKeys.has(\n canonicalInteractionKey(\n interaction.agentSessionId,\n interaction.turnId,\n interaction.requestId\n )\n ) &&\n authoritativeVersion >= interaction.updatedAtUnixMs\n ) {\n delete interactionsById[key];\n changed = true;\n }\n }\n return changed ? { ...state, interactionsById } : state;\n}\n\nexport function upsertCanonicalTurn(\n state: SessionLifecycleState,\n turn: AgentActivityTurn\n): SessionLifecycleState {\n if (\n !turn.agentSessionId.trim() ||\n !turn.turnId.trim() ||\n state.deletedSessionIds[turn.agentSessionId]\n )\n return state;\n const key = canonicalTurnKey(turn.agentSessionId, turn.turnId);\n const current = state.turnsById[key];\n if (current && !shouldUseIncomingTurn(current, turn)) return state;\n const nextTurn = current ? preserveTurnProvenance(current, turn) : turn;\n if (current && areJsonLikeValuesEqual(current, nextTurn)) return state;\n return {\n ...state,\n turnsById: { ...state.turnsById, [key]: { ...nextTurn } }\n };\n}\n\nexport function upsertCanonicalInteraction(\n state: SessionLifecycleState,\n interaction: AgentActivityInteraction\n): SessionLifecycleState {\n if (\n !interaction.agentSessionId.trim() ||\n !interaction.requestId.trim() ||\n !interaction.turnId.trim() ||\n state.deletedSessionIds[interaction.agentSessionId]\n ) {\n return state;\n }\n const key = canonicalInteractionKey(\n interaction.agentSessionId,\n interaction.turnId,\n interaction.requestId\n );\n const current = state.interactionsById[key];\n if (!shouldUseIncomingInteraction(current, interaction)) return state;\n if (current && areJsonLikeValuesEqual(current, interaction)) return state;\n return {\n ...state,\n interactionsById: {\n ...state.interactionsById,\n [key]: { ...interaction }\n }\n };\n}\n\nfunction mergeInteractionInto(\n target: Record<string, AgentActivityInteraction>,\n existing: Readonly<Record<string, AgentActivityInteraction>>,\n interaction: AgentActivityInteraction\n): void {\n const key = canonicalInteractionKey(\n interaction.agentSessionId,\n interaction.turnId,\n interaction.requestId\n );\n const current = target[key] ?? existing[key];\n if (shouldUseIncomingInteraction(current, interaction)) {\n target[key] =\n current && areJsonLikeValuesEqual(current, interaction)\n ? current\n : { ...interaction };\n }\n}\n\nfunction shouldUseIncomingTurn(\n current: AgentActivityTurn,\n incoming: AgentActivityTurn\n): boolean {\n if (incoming.updatedAtUnixMs < current.updatedAtUnixMs) return false;\n if (current.phase === \"settled\") {\n return incoming.phase === \"settled\" && incoming.outcome === current.outcome;\n }\n if (!allowedTurnTransition(current.phase, incoming.phase)) return false;\n return true;\n}\n\nfunction allowedTurnTransition(current: string, incoming: string): boolean {\n if (current === incoming) return true;\n switch (current) {\n case \"submitted\":\n return [\"running\", \"waiting\", \"settling\", \"settled\"].includes(incoming);\n case \"running\":\n return [\"waiting\", \"settling\", \"settled\"].includes(incoming);\n case \"waiting\":\n return [\"running\", \"settling\", \"settled\"].includes(incoming);\n case \"settling\":\n return incoming === \"settled\";\n case \"settled\":\n return false;\n default:\n return false;\n }\n}\n\nexport function removeCanonicalSession(\n state: SessionLifecycleState,\n agentSessionId: string\n): SessionLifecycleState {\n const sessionsById = { ...state.sessionsById };\n const operationBySessionId = { ...state.operationBySessionId };\n delete sessionsById[agentSessionId];\n delete operationBySessionId[agentSessionId];\n return {\n ...state,\n interactionsById: Object.fromEntries(\n Object.entries(state.interactionsById).filter(\n ([, value]) => value.agentSessionId !== agentSessionId\n )\n ),\n operationBySessionId,\n sessionsById,\n turnsById: Object.fromEntries(\n Object.entries(state.turnsById).filter(\n ([, value]) => value.agentSessionId !== agentSessionId\n )\n )\n };\n}\n\nfunction canonicalSession(\n source: AgentActivitySessionInput\n): CanonicalAgentSession {\n const normalized = normalizeAgentActivitySession(source);\n const {\n activeTurn: _activeTurn,\n latestTurn: _latestTurn,\n latestTurnInteractions: _latestTurnInteractions,\n pendingInteractions: _pendingInteractions,\n ...session\n } = normalized;\n return { ...session, activeTurnId: normalized.activeTurnId };\n}\n\nfunction mergeTurnInto(\n target: Record<string, AgentActivityTurn>,\n existing: Readonly<Record<string, AgentActivityTurn>>,\n turn: AgentActivityTurn\n): void {\n const key = canonicalTurnKey(turn.agentSessionId, turn.turnId);\n const current = target[key] ?? existing[key];\n if (!current || shouldUseIncomingTurn(current, turn)) {\n const candidate = current ? preserveTurnProvenance(current, turn) : turn;\n target[key] =\n current && areJsonLikeValuesEqual(current, candidate)\n ? current\n : { ...candidate };\n }\n}\n\nfunction reuseRecordIfShallowEqual<T>(\n current: Readonly<Record<string, T>>,\n next: Record<string, T>\n): Record<string, T> {\n const currentKeys = Object.keys(current);\n const nextKeys = Object.keys(next);\n if (\n currentKeys.length === nextKeys.length &&\n nextKeys.every((key) => current[key] === next[key])\n ) {\n return current as Record<string, T>;\n }\n return next;\n}\n\n/**\n * Turn provenance is assigned once. Realtime and HTTP snapshots may arrive in\n * either order, so lifecycle refreshes must not reclassify an observed Turn or\n * erase source fields omitted by a later payload. An absent optional source\n * field may be completed once, but an explicit null/value is immutable.\n */\nfunction preserveTurnProvenance(\n current: AgentActivityTurn,\n incoming: AgentActivityTurn\n): AgentActivityTurn {\n let sourceGoalOperationId = current.sourceGoalOperationId;\n let sourceGoalRevision = current.sourceGoalRevision;\n let sourceGoalRepairEpoch = current.sourceGoalRepairEpoch;\n // Historical provenance is intentionally opaque and must never be filled\n // from a later lifecycle payload.\n const canCompleteGoalSource =\n current.origin !== \"legacy_unknown\" &&\n (current.origin === \"goal_arm\" || current.origin === \"goal_continuation\") &&\n incoming.origin === current.origin;\n if (canCompleteGoalSource) {\n if (sourceGoalOperationId === undefined) {\n sourceGoalOperationId = incoming.sourceGoalOperationId;\n }\n if (sourceGoalRevision === undefined) {\n sourceGoalRevision = incoming.sourceGoalRevision;\n }\n if (sourceGoalRepairEpoch === undefined) {\n sourceGoalRepairEpoch = incoming.sourceGoalRepairEpoch;\n }\n }\n const next = { ...incoming, origin: current.origin };\n if (sourceGoalOperationId === undefined) {\n delete next.sourceGoalOperationId;\n } else {\n next.sourceGoalOperationId = sourceGoalOperationId;\n }\n if (sourceGoalRevision === undefined) {\n delete next.sourceGoalRevision;\n } else {\n next.sourceGoalRevision = sourceGoalRevision;\n }\n if (sourceGoalRepairEpoch === undefined) {\n delete next.sourceGoalRepairEpoch;\n } else {\n next.sourceGoalRepairEpoch = sourceGoalRepairEpoch;\n }\n return next;\n}\n\nfunction shouldUseIncomingSession(\n current: CanonicalAgentSession | undefined,\n incoming: CanonicalAgentSession\n): boolean {\n return !current || sessionVersion(incoming) >= sessionVersion(current);\n}\n\nfunction preserveLiveTurnOnTimestampTie(\n current: CanonicalAgentSession | undefined,\n incoming: CanonicalAgentSession\n): CanonicalAgentSession {\n if (\n current?.activeTurnId &&\n current.activeTurnId !== incoming.activeTurnId &&\n sessionVersion(current) === sessionVersion(incoming)\n ) {\n return { ...incoming, activeTurnId: current.activeTurnId };\n }\n return incoming;\n}\n\nfunction sessionVersion(session: CanonicalAgentSession): number {\n return (\n session.updatedAtUnixMs ??\n session.lastEventUnixMs ??\n session.messageVersion ??\n session.createdAtUnixMs ??\n session.startedAtUnixMs ??\n 0\n );\n}\n","import type { AgentActivityInteraction, AgentActivityTurn } from \"../types.ts\";\nimport type { SendInputResultValidation } from \"./commandResult.validation.ts\";\nimport type { ScopedSessionResultValidation } from \"./commandResult.validation.ts\";\nimport type { CancelResultValidation } from \"./commandResult.validation.ts\";\nimport {\n createInitialSettingsUpdate,\n reconcileSettingsUpdates,\n requestSettingsUpdate,\n resumeSettingsUpdateWhenRuntimeAvailable,\n settleSettingsUpdate\n} from \"./sessionSettings.reducer.ts\";\nimport type {\n EngineCommand,\n EngineIntent,\n EngineReducerResult\n} from \"./types.ts\";\nimport {\n type SessionCancelState,\n type SessionLifecycleState,\n type SessionOperationState\n} from \"./sessionLifecycle.types.ts\";\nimport {\n removeCanonicalSession,\n replaceCanonicalSessionSnapshot,\n upsertCanonicalInteraction,\n upsertCanonicalSession,\n upsertCanonicalTurn\n} from \"./sessionEntities.reducer.ts\";\nimport {\n canonicalInteractionKey,\n canonicalTurnKey\n} from \"./sessionEntityKeys.ts\";\n\nconst NO_COMMANDS: readonly EngineCommand[] = [];\nconst TURN_CANCEL_TIMEOUT_MS = 30_000;\n\nexport function createInitialSessionLifecycleState(): SessionLifecycleState {\n return {\n deletedSessionIds: {},\n interactionsById: {},\n interactionResponsesById: {},\n operationBySessionId: {},\n sessionsById: {},\n turnsById: {}\n };\n}\n\nexport function sessionLifecycleReducer(\n state: SessionLifecycleState,\n intent: EngineIntent,\n context: {\n queueSendNowRequiresCancel: boolean;\n sendNowSubmitRequiresCancel?: boolean;\n sendResultValidation?: SendInputResultValidation | null;\n interactionResultValidation?: ScopedSessionResultValidation | null;\n settingsResultValidation?: ScopedSessionResultValidation | null;\n cancelResultValidation?: CancelResultValidation | null;\n } = {\n queueSendNowRequiresCancel: false,\n sendNowSubmitRequiresCancel: false\n }\n): EngineReducerResult<SessionLifecycleState> {\n switch (intent.type) {\n case \"session/snapshotReceived\":\n return reconcilePendingCancels(\n state,\n reconcileInteractionResponses(\n state,\n replaceCanonicalSessionSnapshot(\n state,\n intent.sessions,\n initialOperation\n )\n )\n );\n case \"session/upserted\":\n return reconcilePendingCancels(\n state,\n reconcileInteractionResponses(\n state,\n upsertCanonicalSession(state, intent.session, initialOperation)\n )\n );\n case \"session/metadataPatched\":\n return patchSessionMetadata(state, intent.agentSessionId, intent.patch);\n case \"session/runtimeAvailabilityChanged\":\n return changeRuntimeAvailability(\n state,\n intent.agentSessionId,\n intent.availability\n );\n case \"turn/upserted\":\n return reconcilePendingCancels(\n state,\n upsertCanonicalTurn(state, intent.turn)\n );\n case \"interaction/upserted\":\n return result(\n reconcileInteractionResponse(\n upsertCanonicalInteraction(state, intent.interaction),\n intent.interaction\n )\n );\n case \"interaction/responseRequested\":\n return requestInteractionResponse(state, intent);\n case \"session/removed\":\n return removeSession(state, intent.agentSessionId);\n case \"session/errorRecorded\":\n return updateOperation(state, intent.agentSessionId, (operation) => ({\n ...operation,\n operationError: intent.errorMessage.trim() || operation.operationError\n }));\n case \"session/errorCleared\":\n return updateOperation(state, intent.agentSessionId, (operation) => ({\n ...operation,\n operationError: null\n }));\n case \"session/cancelRequested\":\n return requestCancel(state, intent);\n case \"session/stopRequested\":\n return requestCancel(state, intent);\n case \"session/settingsUpdateRequested\":\n return requestSettingsUpdate(state, intent);\n case \"submit/requested\":\n return context.sendNowSubmitRequiresCancel\n ? requestCancel(state, {\n type: \"session/cancelRequested\",\n agentSessionId: intent.agentSessionId,\n commandId: `submit:cancel:${intent.clientSubmitId}`,\n awaitingTurnExpiresAtUnixMs:\n intent.requestedAtUnixMs + TURN_CANCEL_TIMEOUT_MS,\n timeoutMs: TURN_CANCEL_TIMEOUT_MS,\n workspaceId: intent.workspaceId\n })\n : unchanged(state);\n case \"queue/sendNowRequested\":\n return context.queueSendNowRequiresCancel\n ? requestCancel(state, {\n type: \"session/cancelRequested\",\n agentSessionId: intent.agentSessionId,\n commandId: intent.cancelCommandId,\n awaitingTurnExpiresAtUnixMs: intent.awaitingTurnExpiresAtUnixMs,\n timeoutMs: intent.timeoutMs,\n workspaceId:\n state.sessionsById[intent.agentSessionId.trim()]?.workspaceId ??\n \"\"\n })\n : unchanged(state);\n case \"session/cancelAbandoned\":\n return clearCancel(state, intent.agentSessionId);\n case \"engine/intentExpired\":\n return expireCancel(state, intent.expiryId);\n case \"engine/commandResult\":\n if (intent.commandType === \"interaction/respond\") {\n const next =\n context.interactionResultValidation?.kind === \"valid\"\n ? reconcileInteractionResponses(\n state,\n upsertCanonicalSession(\n state,\n context.interactionResultValidation.session,\n initialOperation\n )\n )\n : state;\n return settleInteractionResponse(\n next,\n intent,\n context.interactionResultValidation ?? null\n );\n }\n if (intent.commandType === \"session/updateSettings\")\n return settleSettingsUpdate(\n context.settingsResultValidation?.kind === \"valid\"\n ? upsertCanonicalSession(\n state,\n context.settingsResultValidation.session,\n initialOperation\n )\n : state,\n intent,\n context.settingsResultValidation ?? null\n );\n if (intent.commandType === \"turn/cancel\")\n return settleCancel(\n state,\n intent,\n context.cancelResultValidation ?? null\n );\n if (\n intent.commandType === \"queue/sendPrompt\" &&\n context.sendResultValidation?.kind === \"valid\"\n ) {\n const sendResult = context.sendResultValidation.result;\n if (sendResult.kind === \"goalControl\") {\n return result(\n upsertCanonicalSession(state, sendResult.session, initialOperation)\n );\n }\n const { session, turn } = sendResult;\n return result(\n upsertCanonicalTurn(\n upsertCanonicalSession(state, session, initialOperation),\n turn\n )\n );\n }\n return unchanged(state);\n default:\n return unchanged(state);\n }\n}\n\nfunction requestInteractionResponse(\n state: SessionLifecycleState,\n intent: Extract<EngineIntent, { type: \"interaction/responseRequested\" }>\n): EngineReducerResult<SessionLifecycleState> {\n const agentSessionId = intent.agentSessionId.trim();\n const requestId = intent.requestId.trim();\n const turnId = intent.turnId.trim();\n const workspaceId = intent.workspaceId.trim();\n const commandId = intent.commandId.trim();\n const key = canonicalInteractionKey(agentSessionId, turnId, requestId);\n const interaction = state.interactionsById[key];\n const existing = state.interactionResponsesById[key];\n const action = intent.action?.trim() || null;\n const optionId = intent.optionId?.trim() || null;\n const payload = intent.payload ? { ...intent.payload } : null;\n if (\n !agentSessionId ||\n !requestId ||\n !turnId ||\n !workspaceId ||\n !commandId ||\n state.sessionsById[agentSessionId]?.workspaceId !== workspaceId ||\n state.operationBySessionId[agentSessionId]?.runtimeAvailability.state ===\n \"blocked\" ||\n interaction?.status !== \"pending\" ||\n existing?.status === \"responding\" ||\n (existing &&\n (existing.status === \"unknown\" || existing.status === \"failed\") &&\n (intent.retry !== true ||\n existing.action !== action ||\n existing.optionId !== optionId ||\n JSON.stringify(existing.payload) !== JSON.stringify(payload)))\n ) {\n return unchanged(state);\n }\n return {\n commands: [\n {\n ...(action ? { action } : {}),\n agentSessionId,\n commandId,\n correlationId: key,\n ...(optionId ? { optionId } : {}),\n ...(payload ? { payload } : {}),\n requestId,\n turnId,\n ...(intent.timeoutMs !== undefined\n ? { timeoutMs: intent.timeoutMs }\n : {}),\n type: \"interaction/respond\",\n workspaceId\n }\n ],\n state: replaceInteractionResponse(state, key, {\n action,\n agentSessionId,\n commandId,\n errorCode: null,\n errorMessage: null,\n optionId,\n payload,\n requestId,\n turnId,\n status: \"responding\",\n workspaceId\n })\n };\n}\n\nfunction changeRuntimeAvailability(\n state: SessionLifecycleState,\n rawAgentSessionId: string,\n availability: SessionOperationState[\"runtimeAvailability\"]\n): EngineReducerResult<SessionLifecycleState> {\n const agentSessionId = rawAgentSessionId.trim();\n const operation = state.operationBySessionId[agentSessionId];\n if (!agentSessionId || !operation) return unchanged(state);\n const current = operation.runtimeAvailability;\n if (\n current.state === availability.state &&\n (current.state !== \"blocked\" ||\n (availability.state === \"blocked\" &&\n current.reason === availability.reason))\n ) {\n return unchanged(state);\n }\n const changed = updateOperation(state, agentSessionId, (value) => ({\n ...value,\n runtimeAvailability: availability\n }));\n return availability.state === \"available\"\n ? resumeSettingsUpdateWhenRuntimeAvailable(changed.state, agentSessionId)\n : changed;\n}\n\nfunction settleInteractionResponse(\n state: SessionLifecycleState,\n intent: Extract<EngineIntent, { type: \"engine/commandResult\" }>,\n validation: ScopedSessionResultValidation | null\n): EngineReducerResult<SessionLifecycleState> {\n const entry = Object.entries(state.interactionResponsesById).find(\n ([key, response]) =>\n response.commandId === intent.commandId &&\n key === (intent.correlationId?.trim() ?? \"\")\n );\n if (!entry) return unchanged(state);\n const [key, response] = entry;\n if (intent.outcome === \"failed\") {\n return result(\n replaceInteractionResponse(state, key, {\n ...response,\n errorCode: intent.errorCode ?? null,\n errorMessage: intent.errorMessage?.trim() || null,\n status: \"failed\"\n })\n );\n }\n return result(\n replaceInteractionResponse(state, key, {\n ...response,\n errorCode:\n intent.outcome === \"timedOut\"\n ? \"timeout\"\n : validation?.kind === \"invalid\"\n ? \"invalid_command_result\"\n : null,\n errorMessage: intent.errorMessage?.trim() || null,\n status: \"unknown\"\n })\n );\n}\n\nfunction reconcileInteractionResponse(\n state: SessionLifecycleState,\n interaction: AgentActivityInteraction\n): SessionLifecycleState {\n if (interaction.status === \"pending\") return state;\n const key = canonicalInteractionKey(\n interaction.agentSessionId,\n interaction.turnId,\n interaction.requestId\n );\n if (!state.interactionResponsesById[key]) return state;\n const responses = { ...state.interactionResponsesById };\n delete responses[key];\n return { ...state, interactionResponsesById: responses };\n}\n\nfunction reconcileInteractionResponses(\n previous: SessionLifecycleState,\n next: SessionLifecycleState\n): SessionLifecycleState {\n let responses: Record<\n string,\n import(\"./sessionLifecycle.types.ts\").InteractionResponseState\n > | null = null;\n for (const [key] of Object.entries(previous.interactionResponsesById)) {\n const interaction = next.interactionsById[key];\n const authoritativelyRemoved =\n !interaction && Boolean(previous.interactionsById[key]);\n if (interaction?.status !== \"pending\" || authoritativelyRemoved) {\n responses ??= { ...next.interactionResponsesById };\n delete responses[key];\n }\n }\n return responses ? { ...next, interactionResponsesById: responses } : next;\n}\n\nfunction replaceInteractionResponse(\n state: SessionLifecycleState,\n key: string,\n response: import(\"./sessionLifecycle.types.ts\").InteractionResponseState\n): SessionLifecycleState {\n return {\n ...state,\n interactionResponsesById: {\n ...state.interactionResponsesById,\n [key]: response\n }\n };\n}\n\nfunction patchSessionMetadata(\n state: SessionLifecycleState,\n rawId: string,\n patch: Extract<EngineIntent, { type: \"session/metadataPatched\" }>[\"patch\"]\n): EngineReducerResult<SessionLifecycleState> {\n const id = rawId.trim();\n const session = state.sessionsById[id];\n if (!session) return unchanged(state);\n const next = { ...session, ...patch };\n const changed = Object.entries(patch).some(\n ([key, value]) => session[key as keyof typeof session] !== value\n );\n return changed\n ? result({\n ...state,\n sessionsById: { ...state.sessionsById, [id]: next }\n })\n : unchanged(state);\n}\n\nfunction requestCancel(\n state: SessionLifecycleState,\n intent: Extract<\n EngineIntent,\n { type: \"session/cancelRequested\" | \"session/stopRequested\" }\n >\n): EngineReducerResult<SessionLifecycleState> {\n const id = intent.agentSessionId.trim();\n const session = state.sessionsById[id];\n const workspaceId = intent.workspaceId.trim();\n if (\n !id ||\n !workspaceId ||\n state.deletedSessionIds[id] ||\n (session && session.workspaceId !== workspaceId) ||\n state.operationBySessionId[id]?.runtimeAvailability.state === \"blocked\"\n ) {\n return unchanged(state);\n }\n let nextState = state;\n let operation = state.operationBySessionId[id];\n if (!operation) {\n operation = initialOperation();\n nextState = setOperation(state, id, operation);\n }\n if (cancelPending(operation.cancel)) return unchanged(nextState);\n const activeTurnId = session?.activeTurnId ?? null;\n const turn = activeTurnId\n ? state.turnsById[canonicalTurnKey(id, activeTurnId)]\n : null;\n if (turn && turn.phase !== \"settled\") {\n const next = setCancel(\n nextState,\n id,\n requestedCancel(intent.commandId, turn.turnId, workspaceId)\n );\n return {\n commands: [\n cancelCommand(workspaceId, id, turn, intent.commandId, intent.timeoutMs)\n ],\n state: next\n };\n }\n const expiryId = `cancel:awaiting-turn:${intent.commandId}`;\n const next = setCancel(nextState, id, {\n ...requestedCancel(intent.commandId, null, workspaceId),\n expiryId,\n requestedSessionVersion: session ? sessionVersion(session) : null,\n status: \"awaitingTurn\"\n });\n return {\n commands: [\n {\n type: \"engine/scheduleExpiry\",\n expiryId,\n dueAtUnixMs: intent.awaitingTurnExpiresAtUnixMs\n }\n ],\n state: next\n };\n}\n\nfunction reconcilePendingCancels(\n previous: SessionLifecycleState,\n next: SessionLifecycleState\n): EngineReducerResult<SessionLifecycleState> {\n const settings = reconcileSettingsUpdates(previous, next);\n const commands: EngineCommand[] = [...settings.commands];\n let state = settings.state;\n for (const [id, operation] of Object.entries(state.operationBySessionId)) {\n const session = state.sessionsById[id];\n const turn = session?.activeTurnId\n ? state.turnsById[canonicalTurnKey(id, session.activeTurnId)]\n : null;\n const reconciledOperation = state.operationBySessionId[id] ?? operation;\n if (\n reconciledOperation.cancel.status === \"awaitingTurn\" &&\n session &&\n turn &&\n turn.phase !== \"settled\" &&\n reconciledOperation.cancel.commandId\n ) {\n if (reconciledOperation.cancel.expiryId)\n commands.push({\n type: \"engine/cancelExpiry\",\n expiryId: reconciledOperation.cancel.expiryId\n });\n commands.push(\n cancelCommand(\n session.workspaceId,\n id,\n turn,\n reconciledOperation.cancel.commandId\n )\n );\n state = setCancel(state, id, {\n ...reconciledOperation.cancel,\n expiryId: null,\n status: \"requested\",\n turnId: turn.turnId\n });\n } else if (\n reconciledOperation.cancel.status !== \"idle\" &&\n reconciledOperation.cancel.status !== \"awaitingTurn\" &&\n (!turn || turn.phase === \"settled\")\n ) {\n state = setOperation(state, id, {\n ...reconciledOperation,\n cancel: initialCancel(),\n operationError: null\n });\n }\n }\n return state === previous && commands.length === 0\n ? unchanged(previous)\n : { commands, state };\n}\n\nfunction settleCancel(\n state: SessionLifecycleState,\n intent: Extract<EngineIntent, { type: \"engine/commandResult\" }>,\n validation: CancelResultValidation | null\n): EngineReducerResult<SessionLifecycleState> {\n const entry = Object.entries(state.operationBySessionId).find(\n ([, value]) => value.cancel.commandId === intent.commandId\n );\n if (!entry) return unchanged(state);\n const [id, operation] = entry;\n if (intent.outcome !== \"succeeded\") {\n const message = intent.errorMessage?.trim() || null;\n return result(\n setOperation(state, id, {\n ...operation,\n cancel: {\n ...operation.cancel,\n errorCode: intent.errorCode ?? null,\n errorMessage: message,\n status: \"failed\"\n },\n operationError: message\n })\n );\n }\n if (validation?.kind !== \"valid\") {\n const cancel = {\n ...operation.cancel,\n errorCode: \"invalid_command_result\",\n errorMessage: null,\n status: \"unknown\" as const\n };\n return {\n commands: [\n {\n type: \"engine/reconcileWorkspace\",\n commandId: `engine:reconcile:cancel:${intent.commandId}`,\n workspaceId: operation.cancel.requestedWorkspaceId ?? \"\"\n }\n ],\n state: setOperation(state, id, { ...operation, cancel })\n };\n }\n const response = validation.response;\n const targetId = operation.cancel.turnId;\n const responseTurn = response.turn ?? null;\n let next =\n responseTurn?.agentSessionId === id\n ? upsertCanonicalTurn(state, responseTurn)\n : state;\n const targetGone =\n response?.cancel.reason === \"not_found\" ||\n response?.cancel.reason === \"already_settled\";\n const cancelAccepted = response.cancel.reason === \"cancel_requested\";\n const target = targetId\n ? next.turnsById[canonicalTurnKey(id, targetId)]\n : null;\n if (targetId && (target?.phase === \"settled\" || targetGone)) {\n const session = next.sessionsById[id];\n if (session?.activeTurnId === targetId) {\n next = {\n ...next,\n sessionsById: {\n ...next.sessionsById,\n [id]: { ...session, activeTurnId: null }\n }\n };\n }\n }\n next = setOperation(next, id, {\n ...operation,\n cancel: cancelAccepted\n ? {\n ...operation.cancel,\n errorCode: null,\n errorMessage: null,\n status: \"accepted\"\n }\n : initialCancel(),\n operationError: null\n });\n const commands: EngineCommand[] =\n targetGone || (responseTurn !== null && responseTurn.agentSessionId !== id)\n ? [\n {\n type: \"engine/reconcileWorkspace\",\n commandId: `engine:reconcile:cancel:${intent.commandId}`,\n workspaceId: next.sessionsById[id]?.workspaceId ?? \"\"\n }\n ]\n : [];\n return { commands, state: next };\n}\n\nfunction removeSession(\n state: SessionLifecycleState,\n rawId: string\n): EngineReducerResult<SessionLifecycleState> {\n const id = rawId.trim();\n if (!id || state.deletedSessionIds[id]) return unchanged(state);\n const expiryId = state.operationBySessionId[id]?.cancel.expiryId;\n const removed = removeCanonicalSession(state, id);\n const interactionResponsesById = Object.fromEntries(\n Object.entries(removed.interactionResponsesById).filter(\n ([, response]) => response.agentSessionId !== id\n )\n );\n return {\n commands: expiryId\n ? [{ type: \"engine/cancelExpiry\", expiryId }]\n : NO_COMMANDS,\n state: {\n ...removed,\n deletedSessionIds: { ...removed.deletedSessionIds, [id]: true },\n interactionResponsesById\n }\n };\n}\n\nfunction expireCancel(\n state: SessionLifecycleState,\n expiryId: string\n): EngineReducerResult<SessionLifecycleState> {\n const entry = Object.entries(state.operationBySessionId).find(\n ([, value]) => value.cancel.expiryId === expiryId\n );\n return entry ? clearCancel(state, entry[0]) : unchanged(state);\n}\n\nfunction clearCancel(\n state: SessionLifecycleState,\n id: string\n): EngineReducerResult<SessionLifecycleState> {\n const operation = state.operationBySessionId[id];\n if (!operation || operation.cancel.status === \"idle\") return unchanged(state);\n const nextState = state.sessionsById[id]\n ? setCancel(state, id, initialCancel())\n : removeDetachedOperation(state, id);\n return {\n commands: operation.cancel.expiryId\n ? [{ type: \"engine/cancelExpiry\", expiryId: operation.cancel.expiryId }]\n : NO_COMMANDS,\n state: nextState\n };\n}\n\nfunction removeDetachedOperation(\n state: SessionLifecycleState,\n id: string\n): SessionLifecycleState {\n const operationBySessionId = { ...state.operationBySessionId };\n delete operationBySessionId[id];\n return { ...state, operationBySessionId };\n}\n\nfunction updateOperation(\n state: SessionLifecycleState,\n id: string,\n update: (value: SessionOperationState) => SessionOperationState\n): EngineReducerResult<SessionLifecycleState> {\n const current = state.operationBySessionId[id.trim()];\n return current\n ? result(setOperation(state, id.trim(), update(current)))\n : unchanged(state);\n}\nfunction setCancel(\n state: SessionLifecycleState,\n id: string,\n cancel: SessionCancelState\n): SessionLifecycleState {\n const operation = state.operationBySessionId[id];\n return operation ? setOperation(state, id, { ...operation, cancel }) : state;\n}\nfunction setOperation(\n state: SessionLifecycleState,\n id: string,\n operation: SessionOperationState\n): SessionLifecycleState {\n return {\n ...state,\n operationBySessionId: { ...state.operationBySessionId, [id]: operation }\n };\n}\nfunction initialOperation(): SessionOperationState {\n return {\n runtimeAvailability: { state: \"available\" },\n cancel: initialCancel(),\n operationError: null,\n settingsUpdate: createInitialSettingsUpdate()\n };\n}\nfunction initialCancel(): SessionCancelState {\n return {\n commandId: null,\n errorCode: null,\n errorMessage: null,\n expiryId: null,\n requestedSessionVersion: null,\n requestedWorkspaceId: null,\n status: \"idle\",\n turnId: null\n };\n}\nfunction requestedCancel(\n commandId: string,\n turnId: string | null,\n requestedWorkspaceId: string\n): SessionCancelState {\n return {\n ...initialCancel(),\n commandId,\n requestedWorkspaceId,\n status: \"requested\",\n turnId\n };\n}\nfunction cancelPending(cancel: SessionCancelState): boolean {\n return cancel.status === \"requested\" || cancel.status === \"awaitingTurn\";\n}\nfunction cancelCommand(\n workspaceId: string,\n agentSessionId: string,\n turn: AgentActivityTurn,\n commandId: string,\n timeoutMs = TURN_CANCEL_TIMEOUT_MS\n): EngineCommand {\n return {\n type: \"turn/cancel\",\n workspaceId,\n agentSessionId,\n turnId: turn.turnId,\n commandId,\n timeoutMs\n };\n}\nfunction sessionVersion(session: {\n updatedAtUnixMs?: number;\n lastEventUnixMs?: number;\n messageVersion?: number;\n createdAtUnixMs?: number;\n startedAtUnixMs?: number;\n}): number | null {\n return (\n session.updatedAtUnixMs ??\n session.lastEventUnixMs ??\n session.messageVersion ??\n session.createdAtUnixMs ??\n session.startedAtUnixMs ??\n null\n );\n}\nfunction result(\n state: SessionLifecycleState\n): EngineReducerResult<SessionLifecycleState> {\n return { commands: NO_COMMANDS, state };\n}\nfunction unchanged(\n state: SessionLifecycleState\n): EngineReducerResult<SessionLifecycleState> {\n return { commands: NO_COMMANDS, state };\n}\n","import type {\n EngineCommand,\n EngineCommandResultIntent,\n EngineIntent,\n EngineReducerResult\n} from \"./types.ts\";\nimport type {\n SessionReconcileRecord,\n SessionReconcileState\n} from \"./sessionReconcile.types.ts\";\nimport type { CanonicalAgentSession } from \"./sessionLifecycle.types.ts\";\n\nconst NO_COMMANDS: readonly EngineCommand[] = [];\n\nexport function createInitialSessionReconcileState(): SessionReconcileState {\n return { nextCommandSequence: 1, recordsBySessionId: {} };\n}\n\nexport function sessionReconcileReducer(\n state: SessionReconcileState,\n intent: EngineIntent,\n context: {\n deletedSessionIds: Readonly<Record<string, true>>;\n sessionsById: Readonly<Record<string, CanonicalAgentSession>>;\n workspaceReconcileCommandId: string | null;\n } = {\n deletedSessionIds: {},\n sessionsById: {},\n workspaceReconcileCommandId: null\n }\n): EngineReducerResult<SessionReconcileState> {\n switch (intent.type) {\n case \"session/activityObserved\":\n if (context.deletedSessionIds[intent.agentSessionId.trim()]) {\n return unchanged(state);\n }\n if (intent.inlineApplied) {\n return unchanged(state);\n }\n return requestReconcile(state, {\n agentSessionId: intent.agentSessionId,\n needsMessages:\n intent.eventType === \"message_update\" ||\n intent.eventType === \"session_audit\",\n needsState:\n !intent.hasCachedSession ||\n (intent.eventType !== \"message_update\" &&\n intent.eventType !== \"session_audit\") ||\n !intent.hasInlineMessages,\n workspaceId: intent.workspaceId\n });\n case \"session/reconcileRequested\":\n if (context.deletedSessionIds[intent.agentSessionId.trim()]) {\n return unchanged(state);\n }\n return requestReconcile(state, intent);\n case \"session/removed\":\n return removeRecord(state, intent.agentSessionId);\n case \"engine/commandResult\":\n if (\n intent.commandType === \"engine/reconcileWorkspace\" &&\n intent.outcome === \"succeeded\" &&\n intent.commandId === context.workspaceReconcileCommandId\n ) {\n return hydrateActiveRootSessions(state, context.sessionsById);\n }\n return intent.commandType === \"session/reconcile\"\n ? settleReconcile(state, intent)\n : unchanged(state);\n default:\n return unchanged(state);\n }\n}\n\nfunction hydrateActiveRootSessions(\n state: SessionReconcileState,\n sessionsById: Readonly<Record<string, CanonicalAgentSession>>\n): EngineReducerResult<SessionReconcileState> {\n let next = state;\n const commands: EngineCommand[] = [];\n const activeRoots = Object.values(sessionsById)\n .filter(\n (session) =>\n session.kind === \"root\" && Boolean(session.activeTurnId?.trim())\n )\n .sort((left, right) =>\n left.agentSessionId.localeCompare(right.agentSessionId)\n );\n\n for (const session of activeRoots) {\n const requested = requestReconcile(next, {\n agentSessionId: session.agentSessionId,\n needsMessages: false,\n needsState: true,\n workspaceId: session.workspaceId\n });\n next = requested.state;\n commands.push(...requested.commands);\n }\n\n return { commands, state: next };\n}\n\nfunction requestReconcile(\n state: SessionReconcileState,\n input: {\n agentSessionId: string;\n needsMessages: boolean;\n needsState: boolean;\n workspaceId: string;\n }\n): EngineReducerResult<SessionReconcileState> {\n const agentSessionId = input.agentSessionId.trim();\n const workspaceId = input.workspaceId.trim();\n if (\n !agentSessionId ||\n !workspaceId ||\n (!input.needsMessages && !input.needsState)\n ) {\n return unchanged(state);\n }\n const current = state.recordsBySessionId[agentSessionId] ?? {\n agentSessionId,\n errorMessage: null,\n inFlightCommandId: null,\n inFlightScope: null,\n messagesHydrated: false,\n pendingMessages: false,\n pendingState: false,\n workspaceId\n };\n const record = {\n ...current,\n errorMessage: null,\n pendingMessages: current.pendingMessages || input.needsMessages,\n pendingState: current.pendingState || input.needsState\n };\n const next = replaceRecord(state, record);\n return record.inFlightCommandId\n ? { commands: NO_COMMANDS, state: next }\n : startReconcile(next, record);\n}\n\nfunction settleReconcile(\n state: SessionReconcileState,\n intent: EngineCommandResultIntent\n): EngineReducerResult<SessionReconcileState> {\n const record = Object.values(state.recordsBySessionId).find(\n (candidate) => candidate.inFlightCommandId === intent.commandId\n );\n if (!record) {\n return unchanged(state);\n }\n const settled = {\n ...record,\n errorMessage:\n intent.outcome === \"succeeded\"\n ? null\n : intent.errorMessage?.trim() || null,\n inFlightCommandId: null,\n inFlightScope: null,\n messagesHydrated:\n record.messagesHydrated ||\n (intent.outcome === \"succeeded\" &&\n (record.inFlightScope === \"messages\" ||\n record.inFlightScope === \"state_and_messages\"))\n };\n const next = replaceRecord(state, settled);\n return settled.pendingMessages || settled.pendingState\n ? startReconcile(next, settled)\n : { commands: NO_COMMANDS, state: next };\n}\n\nfunction startReconcile(\n state: SessionReconcileState,\n record: SessionReconcileRecord\n): EngineReducerResult<SessionReconcileState> {\n const scope = record.pendingState\n ? record.pendingMessages\n ? \"state_and_messages\"\n : \"state\"\n : \"messages\";\n const commandId = `session:reconcile:${record.agentSessionId}:${state.nextCommandSequence}`;\n return {\n commands: [\n {\n agentSessionId: record.agentSessionId,\n commandId,\n scope,\n timeoutMs: 30_000,\n type: \"session/reconcile\",\n workspaceId: record.workspaceId\n }\n ],\n state: replaceRecord(\n { ...state, nextCommandSequence: state.nextCommandSequence + 1 },\n {\n ...record,\n inFlightCommandId: commandId,\n inFlightScope: scope,\n pendingMessages: false,\n pendingState: false\n }\n )\n };\n}\n\nfunction replaceRecord(\n state: SessionReconcileState,\n record: SessionReconcileRecord\n): SessionReconcileState {\n return {\n ...state,\n recordsBySessionId: {\n ...state.recordsBySessionId,\n [record.agentSessionId]: record\n }\n };\n}\n\nfunction removeRecord(\n state: SessionReconcileState,\n rawAgentSessionId: string\n): EngineReducerResult<SessionReconcileState> {\n const records = { ...state.recordsBySessionId };\n if (!records[rawAgentSessionId.trim()]) {\n return unchanged(state);\n }\n delete records[rawAgentSessionId.trim()];\n return {\n commands: NO_COMMANDS,\n state: { ...state, recordsBySessionId: records }\n };\n}\n\nfunction unchanged(\n state: SessionReconcileState\n): EngineReducerResult<SessionReconcileState> {\n return { commands: NO_COMMANDS, state };\n}\n","import type { AgentActivityTurn } from \"../types.ts\";\nimport type {\n EngineCommand,\n EngineIntent,\n EngineReducerResult\n} from \"./types.ts\";\nimport type {\n AttentionCompletionKind,\n AttentionReadRecord,\n AttentionReadPartition,\n AttentionReadState\n} from \"./attentionReadState.types.ts\";\n\nconst NO_COMMANDS: readonly EngineCommand[] = [];\n\nexport function createInitialAttentionReadState(): AttentionReadState {\n return { partitionsByUserId: {} };\n}\n\nexport function attentionReadStateReducer(\n state: AttentionReadState,\n intent: EngineIntent,\n context: {\n sessionsById: Readonly<Record<string, { userId?: string }>>;\n } = { sessionsById: {} }\n): EngineReducerResult<AttentionReadState> {\n switch (intent.type) {\n case \"attention/hydrateRequested\":\n return requestHydration(state, intent);\n case \"attention/readStateHydrated\":\n return hydrate(state, intent);\n case \"attention/read\":\n return setUnread(\n state,\n intent.userId,\n intent.agentSessionId,\n false,\n false\n );\n case \"attention/unreadRequested\":\n return setUnread(state, intent.userId, intent.agentSessionId, true, true);\n case \"attention/persistRetryRequested\":\n return retryPersistence(state, intent.userId);\n case \"engine/commandResult\":\n if (intent.commandType === \"attention/readState/read\") {\n return intent.outcome === \"succeeded\"\n ? hydrateFromCommandResult(state, intent)\n : recordPersistenceError(state, intent);\n }\n if (intent.commandType === \"attention/readState/write\") {\n return settlePersistenceWrite(state, intent);\n }\n return unchanged(state);\n case \"turn/upserted\":\n return observeTurn(\n state,\n context.sessionsById[intent.turn.agentSessionId]?.userId ?? \"\",\n intent.turn,\n true\n );\n case \"session/snapshotReceived\": {\n let next = state;\n for (const session of intent.sessions) {\n if (session.latestTurn?.phase === \"settled\") {\n next = observeTurn(\n next,\n session.userId?.trim() ?? \"\",\n session.latestTurn,\n false\n ).state;\n }\n }\n return next === state ? unchanged(state) : changed(next);\n }\n case \"session/removed\": {\n const id = intent.agentSessionId.trim();\n let next = state;\n for (const [userId, partition] of Object.entries(\n state.partitionsByUserId\n )) {\n if (!partition.recordsBySessionId[id]) continue;\n const recordsBySessionId = { ...partition.recordsBySessionId };\n delete recordsBySessionId[id];\n next = replacePartition(next, userId, {\n ...partition,\n recordsBySessionId\n });\n }\n return next === state ? unchanged(state) : changed(next);\n }\n default:\n return unchanged(state);\n }\n}\n\nfunction observeTurn(\n state: AttentionReadState,\n rawUserId: string,\n turn: AgentActivityTurn,\n live: boolean\n): EngineReducerResult<AttentionReadState> {\n const id = turn.agentSessionId.trim();\n const userId = rawUserId.trim();\n const turnId = turn.turnId.trim();\n const kind = completionKind(turn);\n if (!id || !userId || !turnId || !kind) return unchanged(state);\n const partition = partitionFor(state, userId);\n const completionKey = `turn:${id}:${turnId}:${kind}`;\n const current = partition.recordsBySessionId[id];\n if (current?.completionKey === completionKey) return unchanged(state);\n const isUnread = hydratedUnread(partition, completionKey, kind) ?? live;\n const durablePartition = updateDurableMarker(\n partition,\n id,\n completionKey,\n kind,\n isUnread\n );\n const nextPartition = {\n ...durablePartition,\n recordsBySessionId: {\n ...durablePartition.recordsBySessionId,\n [id]: { completionKey, isUnread, kind, markedUnreadByUser: false }\n }\n };\n const persistence = queuePersistence(nextPartition, userId);\n return changed(\n replacePartition(state, userId, persistence.partition),\n persistence.commands\n );\n}\n\nfunction completionKind(\n turn: AgentActivityTurn\n): AttentionCompletionKind | null {\n if (turn.phase !== \"settled\") return null;\n return turn.outcome === \"failed\"\n ? \"failed\"\n : turn.outcome === \"completed\"\n ? \"completed\"\n : null;\n}\n\nfunction hydratedUnread(\n state: AttentionReadPartition,\n completionKey: string,\n kind: AttentionCompletionKind\n): boolean | null {\n const hydrated = state.hydrated;\n if (!hydrated) return null;\n const unread =\n kind === \"completed\"\n ? hydrated.completedUnreadIds\n : hydrated.failedUnreadIds;\n const read =\n kind === \"completed\" ? hydrated.completedReadIds : hydrated.failedReadIds;\n if (unread.includes(completionKey)) return true;\n if (read.includes(completionKey)) return false;\n return null;\n}\n\nfunction setUnread(\n state: AttentionReadState,\n rawUserId: string,\n rawId: string,\n isUnread: boolean,\n markedUnreadByUser: boolean\n): EngineReducerResult<AttentionReadState> {\n const id = rawId.trim();\n const userId = rawUserId.trim();\n if (!id || !userId) return unchanged(state);\n const partition = partitionFor(state, userId);\n const current = partition.recordsBySessionId[id];\n if (!current) return unchanged(state);\n const next: AttentionReadRecord = current;\n if (\n current.isUnread === isUnread &&\n current.markedUnreadByUser === markedUnreadByUser\n ) {\n return unchanged(state);\n }\n const durablePartition = updateDurableMarker(\n partition,\n id,\n current.completionKey,\n current.kind,\n isUnread\n );\n const nextPartition = {\n ...durablePartition,\n recordsBySessionId: {\n ...durablePartition.recordsBySessionId,\n [id]: { ...next, isUnread, markedUnreadByUser }\n }\n };\n const persistence = queuePersistence(nextPartition, userId);\n return changed(\n replacePartition(state, userId, persistence.partition),\n persistence.commands\n );\n}\n\nfunction updateDurableMarker(\n partition: AttentionReadPartition,\n sessionId: string,\n completionKey: string,\n kind: AttentionCompletionKind,\n isUnread: boolean\n): AttentionReadPartition {\n if (!partition.hydrated) return partition;\n const completedReadIds = new Set(partition.hydrated.completedReadIds);\n const completedUnreadIds = new Set(partition.hydrated.completedUnreadIds);\n const failedReadIds = new Set(partition.hydrated.failedReadIds);\n const failedUnreadIds = new Set(partition.hydrated.failedUnreadIds);\n // Only the latest completion per session drives the lamp, so evict any prior\n // completion key for this session across every bucket before recording the new\n // one. This keeps the durable set bounded to one key per session (per kind)\n // while still keying on the exact completion so a new turn re-lights.\n evictSessionCompletionKeys(sessionId, [\n completedReadIds,\n completedUnreadIds,\n failedReadIds,\n failedUnreadIds\n ]);\n const read = kind === \"completed\" ? completedReadIds : failedReadIds;\n const unread = kind === \"completed\" ? completedUnreadIds : failedUnreadIds;\n (isUnread ? unread : read).add(completionKey);\n return {\n ...partition,\n hydrated: {\n completedReadIds: [...completedReadIds],\n completedUnreadIds: [...completedUnreadIds],\n failedReadIds: [...failedReadIds],\n failedUnreadIds: [...failedUnreadIds]\n }\n };\n}\n\nfunction evictSessionCompletionKeys(\n sessionId: string,\n buckets: readonly Set<string>[]\n): void {\n const prefix = `turn:${sessionId}:`;\n for (const bucket of buckets) {\n for (const key of bucket) {\n if (key.startsWith(prefix)) bucket.delete(key);\n }\n }\n}\n\nfunction sanitizeCompletionKeys(ids: readonly string[]): string[] {\n // Durable buckets hold completion keys (`turn:<session>:<turn>:<kind>`). Drop\n // any legacy per-session id left by older builds so it cannot linger; a stale\n // session id never matches a completion-key lookup anyway, and dropping it now\n // keeps the persisted set clean without a bespoke migration.\n return ids.filter((id) => id.startsWith(\"turn:\"));\n}\n\nfunction hydrate(\n state: AttentionReadState,\n intent: Extract<EngineIntent, { type: \"attention/readStateHydrated\" }>\n): EngineReducerResult<AttentionReadState> {\n const userId = intent.userId.trim();\n if (!userId) return unchanged(state);\n const partition = partitionFor(state, userId);\n const completedReadIds = new Set(\n sanitizeCompletionKeys(intent.completed.readIds)\n );\n const completedUnreadIds = new Set(\n sanitizeCompletionKeys(intent.completed.unreadIds)\n );\n const failedReadIds = new Set(sanitizeCompletionKeys(intent.failed.readIds));\n const failedUnreadIds = new Set(\n sanitizeCompletionKeys(intent.failed.unreadIds)\n );\n const recordsBySessionId = { ...partition.recordsBySessionId };\n let mergedObservedRecord = false;\n for (const [id, record] of Object.entries(recordsBySessionId)) {\n const key = record.completionKey;\n const unread =\n record.kind === \"completed\" ? completedUnreadIds : failedUnreadIds;\n const read = record.kind === \"completed\" ? completedReadIds : failedReadIds;\n if (unread.has(key)) {\n recordsBySessionId[id] = { ...record, isUnread: true };\n } else if (read.has(key)) {\n recordsBySessionId[id] = {\n ...record,\n isUnread: false,\n markedUnreadByUser: false\n };\n } else {\n // The durable store predates this session's current completion. Evict any\n // prior key for the session so the set stays bounded, then persist the\n // observed provenance on the next write.\n evictSessionCompletionKeys(id, [\n completedReadIds,\n completedUnreadIds,\n failedReadIds,\n failedUnreadIds\n ]);\n (record.isUnread ? unread : read).add(key);\n mergedObservedRecord = true;\n }\n }\n const nextPartition = {\n ...partition,\n hydrated: {\n completedReadIds: [...completedReadIds],\n completedUnreadIds: [...completedUnreadIds],\n failedReadIds: [...failedReadIds],\n failedUnreadIds: [...failedUnreadIds]\n },\n lastError: null,\n recordsBySessionId\n };\n const persistence = mergedObservedRecord\n ? queuePersistence(nextPartition, userId)\n : { commands: NO_COMMANDS, partition: nextPartition };\n return changed(\n replacePartition(state, userId, persistence.partition),\n persistence.commands\n );\n}\n\nfunction requestHydration(\n state: AttentionReadState,\n intent: Extract<EngineIntent, { type: \"attention/hydrateRequested\" }>\n): EngineReducerResult<AttentionReadState> {\n const userId = intent.userId.trim();\n const workspaceId = intent.workspaceId.trim();\n const commandId = intent.commandId.trim();\n if (!userId || !workspaceId || !commandId) return unchanged(state);\n const partition = partitionFor(state, userId);\n const next = replacePartition(state, userId, {\n ...partition,\n lastError: null,\n workspaceId\n });\n return {\n commands: [\n {\n type: \"attention/readState/read\",\n commandId,\n correlationId: userId,\n userId,\n workspaceId\n }\n ],\n state: next\n };\n}\n\nfunction recordPersistenceError(\n state: AttentionReadState,\n intent: Extract<EngineIntent, { type: \"engine/commandResult\" }>\n): EngineReducerResult<AttentionReadState> {\n const userId = intent.correlationId?.trim() ?? \"\";\n if (!userId) return unchanged(state);\n const partition = partitionFor(state, userId);\n const lastError =\n intent.errorMessage?.trim() ||\n (intent.outcome === \"timedOut\"\n ? `${intent.commandType} timed out`\n : `${intent.commandType} failed`);\n if (partition.lastError === lastError) return unchanged(state);\n return changed(replacePartition(state, userId, { ...partition, lastError }));\n}\n\nfunction settlePersistenceWrite(\n state: AttentionReadState,\n intent: Extract<EngineIntent, { type: \"engine/commandResult\" }>\n): EngineReducerResult<AttentionReadState> {\n const userId = intent.correlationId?.trim() ?? \"\";\n if (!userId) return unchanged(state);\n const partition = state.partitionsByUserId[userId];\n if (!partition || partition.writeInFlightCommandId !== intent.commandId) {\n return unchanged(state);\n }\n const dirty = partition.writeDirty;\n const nextPartition: AttentionReadPartition = {\n ...partition,\n lastError:\n intent.outcome === \"succeeded\"\n ? null\n : intent.errorMessage?.trim() ||\n (intent.outcome === \"timedOut\"\n ? `${intent.commandType} timed out`\n : `${intent.commandType} failed`),\n writeDirty: false,\n writeInFlightCommandId: null\n };\n const persistence = dirty\n ? queuePersistence(nextPartition, userId)\n : { commands: NO_COMMANDS, partition: nextPartition };\n return changed(\n replacePartition(state, userId, persistence.partition),\n persistence.commands\n );\n}\n\nfunction retryPersistence(\n state: AttentionReadState,\n rawUserId: string\n): EngineReducerResult<AttentionReadState> {\n const userId = rawUserId.trim();\n const partition = state.partitionsByUserId[userId];\n if (!partition?.lastError || partition.writeInFlightCommandId) {\n return unchanged(state);\n }\n const persistence = queuePersistence(partition, userId);\n return changed(\n replacePartition(state, userId, persistence.partition),\n persistence.commands\n );\n}\n\nfunction hydrateFromCommandResult(\n state: AttentionReadState,\n intent: Extract<EngineIntent, { type: \"engine/commandResult\" }>\n): EngineReducerResult<AttentionReadState> {\n const userId = intent.correlationId?.trim() ?? \"\";\n const snapshot = workspaceAgentReadStateSnapshot(intent.value);\n if (!userId || !snapshot) return unchanged(state);\n return hydrate(state, {\n type: \"attention/readStateHydrated\",\n userId,\n completed: snapshot.completed,\n failed: snapshot.failed\n });\n}\n\nfunction workspaceAgentReadStateSnapshot(value: unknown): {\n completed: { readIds: readonly string[]; unreadIds: readonly string[] };\n failed: { readIds: readonly string[]; unreadIds: readonly string[] };\n} | null {\n if (!value || typeof value !== \"object\") return null;\n const snapshot = value as Record<string, unknown>;\n const completed = readStateBucket(snapshot.completed);\n const failed = readStateBucket(snapshot.failed);\n return completed && failed ? { completed, failed } : null;\n}\n\nfunction readStateBucket(\n value: unknown\n): { readIds: readonly string[]; unreadIds: readonly string[] } | null {\n if (!value || typeof value !== \"object\") return null;\n const bucket = value as Record<string, unknown>;\n if (!Array.isArray(bucket.readIds) || !Array.isArray(bucket.unreadIds)) {\n return null;\n }\n if (\n !bucket.readIds.every((id) => typeof id === \"string\") ||\n !bucket.unreadIds.every((id) => typeof id === \"string\")\n ) {\n return null;\n }\n return { readIds: bucket.readIds, unreadIds: bucket.unreadIds };\n}\n\nfunction queuePersistence(\n partition: AttentionReadPartition,\n userId: string\n): {\n commands: readonly EngineCommand[];\n partition: AttentionReadPartition;\n} {\n if (!partition.hydrated || !partition.workspaceId) {\n return { commands: NO_COMMANDS, partition };\n }\n if (partition.writeInFlightCommandId) {\n return {\n commands: NO_COMMANDS,\n partition: partition.writeDirty\n ? partition\n : { ...partition, writeDirty: true }\n };\n }\n const writeRevision = partition.writeRevision + 1;\n const commandId = `attention-write:${userId}:${writeRevision}`;\n return {\n commands: [\n {\n type: \"attention/readState/write\",\n commandId,\n correlationId: userId,\n userId,\n workspaceId: partition.workspaceId,\n completed: {\n readIds: partition.hydrated.completedReadIds,\n unreadIds: partition.hydrated.completedUnreadIds\n },\n failed: {\n readIds: partition.hydrated.failedReadIds,\n unreadIds: partition.hydrated.failedUnreadIds\n }\n }\n ],\n partition: {\n ...partition,\n writeDirty: false,\n writeInFlightCommandId: commandId,\n writeRevision\n }\n };\n}\n\nfunction partitionFor(\n state: AttentionReadState,\n userId: string\n): AttentionReadPartition {\n return (\n state.partitionsByUserId[userId] ?? {\n hydrated: null,\n lastError: null,\n recordsBySessionId: {},\n workspaceId: null,\n writeDirty: false,\n writeInFlightCommandId: null,\n writeRevision: 0\n }\n );\n}\n\nfunction replacePartition(\n state: AttentionReadState,\n userId: string,\n partition: AttentionReadPartition\n): AttentionReadState {\n return {\n ...state,\n partitionsByUserId: {\n ...state.partitionsByUserId,\n [userId]: partition\n }\n };\n}\n\nfunction changed(\n state: AttentionReadState,\n commands: readonly EngineCommand[] = NO_COMMANDS\n): EngineReducerResult<AttentionReadState> {\n return { commands, state };\n}\nfunction unchanged(\n state: AttentionReadState\n): EngineReducerResult<AttentionReadState> {\n return { commands: NO_COMMANDS, state };\n}\n","import type { AgentActivitySendInputResult } from \"../types.ts\";\nimport type { AgentActivitySession } from \"../types.ts\";\nimport type {\n AgentActivityTurn,\n AgentActivityTurnCancelResponse\n} from \"../types.ts\";\nimport type { PendingSubmitIntentRecord } from \"./pendingIntents.types.ts\";\n\nexport type SendInputResultValidation =\n | { kind: \"valid\"; result: AgentActivitySendInputResult }\n | { kind: \"invalid\"; reason: string };\n\nexport type ScopedSessionResultValidation =\n | { kind: \"valid\"; session: AgentActivitySession }\n | { kind: \"invalid\"; reason: string };\n\nexport type CancelResultValidation =\n | { kind: \"valid\"; response: AgentActivityTurnCancelResponse }\n | { kind: \"invalid\"; reason: string };\n\nexport function validateCancelResult(\n value: unknown,\n expected:\n | {\n agentSessionId: string;\n currentTurn: AgentActivityTurn | null;\n turnId: string | null;\n workspaceMatches: boolean;\n }\n | undefined\n): CancelResultValidation {\n if (!expected || !expected.turnId || !expected.workspaceMatches) {\n return { kind: \"invalid\", reason: \"cancel_scope_missing\" };\n }\n if (!value || typeof value !== \"object\") {\n return { kind: \"invalid\", reason: \"cancel_result_missing\" };\n }\n const response = value as Partial<AgentActivityTurnCancelResponse>;\n const cancel = response.cancel;\n if (!cancel || typeof cancel.canceled !== \"boolean\") {\n return { kind: \"invalid\", reason: \"cancel_result_malformed\" };\n }\n const turn = response.turn;\n const exactTurn =\n turn?.agentSessionId === expected.agentSessionId &&\n turn.turnId === expected.turnId;\n const cancelRequested =\n cancel.canceled === false &&\n cancel.reason === \"cancel_requested\" &&\n exactTurn &&\n turn.phase === \"settling\" &&\n turn.outcome == null;\n const canceled =\n cancel.canceled === true &&\n cancel.reason === \"turn_canceled\" &&\n exactTurn &&\n turn.phase === \"settled\" &&\n turn.outcome === \"canceled\";\n const alreadySettled =\n cancel.canceled === false &&\n cancel.reason === \"already_settled\" &&\n ((exactTurn && turn.phase === \"settled\" && turn.outcome !== null) ||\n expected.currentTurn?.phase === \"settled\");\n const targetAbsent =\n cancel.canceled === false &&\n cancel.reason === \"not_found\" &&\n expected.currentTurn === null;\n return cancelRequested || canceled || alreadySettled || targetAbsent\n ? { kind: \"valid\", response: response as AgentActivityTurnCancelResponse }\n : { kind: \"invalid\", reason: \"cancel_target_mismatch\" };\n}\n\nexport function validateScopedSessionResult(\n value: unknown,\n expected: { agentSessionId: string; workspaceId: string } | undefined,\n requireTopLevelSessionId = false\n): ScopedSessionResultValidation {\n if (!expected || !value || typeof value !== \"object\") {\n return { kind: \"invalid\", reason: \"scoped_session_result_missing\" };\n }\n const result = value as {\n agentSessionId?: unknown;\n session?: Partial<AgentActivitySession>;\n };\n const session = result.session;\n if (\n !session ||\n typeof session.agentSessionId !== \"string\" ||\n typeof session.workspaceId !== \"string\" ||\n session.agentSessionId.trim() !== expected.agentSessionId ||\n session.workspaceId.trim() !== expected.workspaceId ||\n (requireTopLevelSessionId &&\n (typeof result.agentSessionId !== \"string\" ||\n result.agentSessionId.trim() !== expected.agentSessionId))\n ) {\n return { kind: \"invalid\", reason: \"scoped_session_result_mismatch\" };\n }\n return { kind: \"valid\", session: session as AgentActivitySession };\n}\n\nexport function validateSendInputResult(\n value: unknown,\n record: PendingSubmitIntentRecord | undefined\n): SendInputResultValidation {\n if (!record) {\n return { kind: \"invalid\", reason: \"submit_request_missing\" };\n }\n if (!isSendInputResult(value)) {\n return {\n kind: \"invalid\",\n reason: \"send_result_entities_missing\"\n };\n }\n const sessionId = value.session.agentSessionId.trim();\n const workspaceId = value.session.workspaceId.trim();\n if (sessionId !== record.agentSessionId) {\n return {\n kind: \"invalid\",\n reason: \"send_result_session_scope_mismatch\"\n };\n }\n if (workspaceId !== record.workspaceId) {\n return {\n kind: \"invalid\",\n reason: \"send_result_workspace_scope_mismatch\"\n };\n }\n if (value.kind === \"goalControl\") {\n return { kind: \"valid\", result: value };\n }\n const turnSessionId = value.turn.agentSessionId.trim();\n const turnId = value.turnId.trim();\n if (!turnId || value.turn.turnId.trim() !== turnId) {\n return { kind: \"invalid\", reason: \"send_result_turn_scope_mismatch\" };\n }\n if (turnSessionId !== record.agentSessionId) {\n return {\n kind: \"invalid\",\n reason: \"send_result_session_scope_mismatch\"\n };\n }\n return { kind: \"valid\", result: value };\n}\n\nfunction isSendInputResult(\n value: unknown\n): value is AgentActivitySendInputResult {\n if (!value || typeof value !== \"object\") return false;\n const result = value as {\n kind?: unknown;\n session?: Partial<AgentActivitySession>;\n turn?: Partial<AgentActivityTurn>;\n turnId?: unknown;\n };\n if (\n result.kind === \"goalControl\" &&\n result.session &&\n typeof result.session.agentSessionId === \"string\" &&\n typeof result.session.workspaceId === \"string\" &&\n Array.isArray(result.session.latestTurnInteractions) &&\n Array.isArray(result.session.pendingInteractions)\n ) {\n return true;\n }\n return Boolean(\n result.session &&\n result.turn &&\n typeof result.turnId === \"string\" &&\n typeof result.session.agentSessionId === \"string\" &&\n typeof result.session.workspaceId === \"string\" &&\n typeof result.turn.agentSessionId === \"string\" &&\n typeof result.turn.turnId === \"string\"\n );\n}\n","import { canonicalInteractionKey } from \"./sessionEntityKeys.ts\";\nimport type {\n PlanDecisionRecord,\n PlanDecisionState\n} from \"./planDecision.types.ts\";\nimport type {\n EngineCommand,\n EngineIntent,\n EngineReducerResult\n} from \"./types.ts\";\n\nconst NO_COMMANDS: readonly EngineCommand[] = [];\n\nexport function createInitialPlanDecisionState(): PlanDecisionState {\n return { byId: {}, dismissedByTurnKey: {} };\n}\n\nexport function planDecisionReducer(\n state: PlanDecisionState,\n intent: EngineIntent,\n context: { feedbackAccepted: boolean; planTurnValid: boolean } = {\n feedbackAccepted: false,\n planTurnValid: false\n }\n): EngineReducerResult<PlanDecisionState> {\n if (intent.type === \"session/removed\") {\n const sessionId = intent.agentSessionId.trim();\n const byId = Object.fromEntries(\n Object.entries(state.byId).filter(\n ([, record]) => record.agentSessionId !== sessionId\n )\n );\n const dismissedByTurnKey = Object.fromEntries(\n Object.entries(state.dismissedByTurnKey).filter(\n ([key]) => !key.startsWith(`${sessionId}\\0`)\n )\n );\n return Object.keys(byId).length === Object.keys(state.byId).length &&\n Object.keys(dismissedByTurnKey).length ===\n Object.keys(state.dismissedByTurnKey).length\n ? unchanged(state)\n : { commands: NO_COMMANDS, state: { byId, dismissedByTurnKey } };\n }\n if (\n intent.type === \"plan/feedbackRequested\" ||\n intent.type === \"plan/skipped\"\n ) {\n if (\n !context.planTurnValid ||\n (intent.type === \"plan/feedbackRequested\" && !context.feedbackAccepted)\n )\n return unchanged(state);\n const key = dismissedTurnKey(intent.agentSessionId, intent.turnId);\n return {\n commands: NO_COMMANDS,\n state: {\n ...state,\n dismissedByTurnKey: { ...state.dismissedByTurnKey, [key]: true }\n }\n };\n }\n if (intent.type === \"plan/decisionRequested\") {\n const record = recordFromIntent(intent);\n const key = decisionKey(\n record.agentSessionId,\n record.turnId,\n record.requestId\n );\n const existing = state.byId[key];\n if (\n !record.commandId ||\n !record.idempotencyKey ||\n !context.planTurnValid ||\n (existing &&\n (!intent.retry ||\n existing.idempotencyKey !== record.idempotencyKey ||\n (existing.status !== \"failed\" && existing.status !== \"unknown\")))\n ) {\n return unchanged(state);\n }\n return {\n commands: [\n { ...intent, type: \"plan/submitDecision\", correlationId: key }\n ],\n state: {\n ...state,\n byId: { ...state.byId, [key]: record }\n }\n };\n }\n if (\n intent.type === \"engine/commandResult\" &&\n intent.commandType === \"plan/submitDecision\"\n ) {\n const key = intent.correlationId?.trim() ?? \"\";\n const record = state.byId[key];\n if (!record || record.commandId !== intent.commandId)\n return unchanged(state);\n if (intent.outcome === \"succeeded\") {\n const validation = validateOperation(intent.value, record);\n if (validation.status === \"completed\") {\n const removed = remove(state, key);\n return {\n commands: NO_COMMANDS,\n state: {\n ...removed,\n dismissedByTurnKey: {\n ...removed.dismissedByTurnKey,\n [dismissedTurnKey(record.agentSessionId, record.turnId)]: true\n }\n }\n };\n }\n if (validation.status === \"failed\") {\n return replace(state, key, {\n ...record,\n errorCode: \"operation_failed\",\n errorMessage: null,\n operationId: validation.operationId,\n status: \"failed\"\n });\n }\n if (validation.status === \"invalid\") {\n return replace(state, key, {\n ...record,\n errorCode: \"invalid_command_result\",\n errorMessage: null,\n status: \"unknown\"\n });\n }\n return replace(state, key, {\n ...record,\n errorCode: null,\n errorMessage: null,\n operationId: validation.operationId,\n status: \"unknown\"\n });\n }\n return replace(state, key, {\n ...record,\n errorCode: intent.errorCode ?? null,\n errorMessage:\n intent.outcome === \"failed\"\n ? intent.errorMessage?.trim() || null\n : null,\n status: intent.outcome === \"failed\" ? \"failed\" : \"unknown\"\n });\n }\n if (intent.type === \"message/snapshotReceived\") {\n let next = state;\n for (const message of intent.messages) {\n if (message.payload.kind !== \"agent_system_notice\") continue;\n const noticeKind = message.payload.noticeKind;\n if (\n noticeKind !== \"plan_implementation_completed\" &&\n noticeKind !== \"plan_implementation_pending_confirmation\"\n )\n continue;\n const operationId = text(message.payload.operationId);\n const planTurnId = text(message.payload.planTurnId);\n if (!operationId || !planTurnId) continue;\n for (const [key, record] of Object.entries(next.byId)) {\n if (\n record.status !== \"unknown\" ||\n record.workspaceId !==\n (message.workspaceId?.trim() || intent.workspaceId?.trim()) ||\n record.agentSessionId !== message.agentSessionId.trim() ||\n record.turnId !== planTurnId ||\n record.operationId !== operationId\n )\n continue;\n if (noticeKind === \"plan_implementation_completed\") {\n const removed = remove(next, key);\n next = {\n ...removed,\n dismissedByTurnKey: {\n ...removed.dismissedByTurnKey,\n [dismissedTurnKey(record.agentSessionId, record.turnId)]: true\n }\n };\n }\n }\n }\n return next === state\n ? unchanged(state)\n : { commands: NO_COMMANDS, state: next };\n }\n if (\n intent.type === \"interaction/upserted\" &&\n intent.interaction.status !== \"pending\"\n ) {\n return removeMatching(\n state,\n intent.interaction.agentSessionId,\n intent.interaction.requestId\n );\n }\n return unchanged(state);\n}\n\nfunction recordFromIntent(\n intent: Extract<EngineIntent, { type: \"plan/decisionRequested\" }>\n): PlanDecisionRecord {\n return {\n action: intent.action,\n agentSessionId: intent.agentSessionId.trim(),\n commandId: intent.commandId.trim(),\n errorCode: null,\n errorMessage: null,\n idempotencyKey: intent.idempotencyKey.trim(),\n operationId: null,\n payload: intent.payload ? { ...intent.payload } : null,\n promptKind: intent.promptKind,\n requestId: intent.requestId.trim(),\n status: \"requested\",\n turnId: intent.turnId.trim(),\n workspaceId: intent.workspaceId.trim()\n };\n}\n\nfunction validateOperation(\n value: unknown,\n record: PlanDecisionRecord\n): {\n operationId: string | null;\n status: \"completed\" | \"pending\" | \"failed\" | \"invalid\";\n} {\n if (!value || typeof value !== \"object\")\n return { operationId: null, status: \"invalid\" };\n const operation = (value as { operation?: Record<string, unknown> })\n .operation;\n if (\n !operation ||\n operation.workspaceId !== record.workspaceId ||\n operation.agentSessionId !== record.agentSessionId ||\n operation.turnId !== record.turnId ||\n operation.requestId !== record.requestId ||\n operation.idempotencyKey !== record.idempotencyKey\n )\n return { operationId: null, status: \"invalid\" };\n const operationId = text(operation.operationId);\n if (!operationId) return { operationId: null, status: \"invalid\" };\n const status =\n operation.status === \"completed\"\n ? \"completed\"\n : operation.status === \"failed\"\n ? \"failed\"\n : operation.status === \"prepared\" || operation.status === \"leased\"\n ? \"pending\"\n : \"invalid\";\n return { operationId, status };\n}\n\nfunction text(value: unknown): string | null {\n return typeof value === \"string\" && value.trim() ? value.trim() : null;\n}\n\nfunction removeMatching(\n state: PlanDecisionState,\n sessionId: string,\n requestId: string\n) {\n let next = state;\n for (const [key, record] of Object.entries(state.byId)) {\n if (record.agentSessionId === sessionId && record.requestId === requestId) {\n next = remove(next, key);\n }\n }\n return next === state\n ? unchanged(state)\n : { commands: NO_COMMANDS, state: next };\n}\n\nfunction replace(\n state: PlanDecisionState,\n key: string,\n record: PlanDecisionRecord\n) {\n return {\n commands: NO_COMMANDS,\n state: { ...state, byId: { ...state.byId, [key]: record } }\n };\n}\n\nfunction remove(state: PlanDecisionState, key: string): PlanDecisionState {\n const byId = { ...state.byId };\n delete byId[key];\n return { ...state, byId };\n}\n\nfunction unchanged(\n state: PlanDecisionState\n): EngineReducerResult<PlanDecisionState> {\n return { commands: NO_COMMANDS, state };\n}\n\nfunction decisionKey(\n sessionId: string,\n turnId: string,\n requestId: string\n): string {\n return canonicalInteractionKey(sessionId, turnId, requestId);\n}\n\nfunction dismissedTurnKey(sessionId: string, turnId: string): string {\n return `${sessionId.trim()}\\0${turnId.trim()}`;\n}\n","import type { SessionCommandsState } from \"./sessionCommands.types.ts\";\nimport type {\n EngineCommand,\n EngineIntent,\n EngineReducerResult\n} from \"./types.ts\";\n\nconst NO_COMMANDS: readonly EngineCommand[] = [];\n\nexport function createInitialSessionCommandsState(): SessionCommandsState {\n return { bySessionId: {} };\n}\n\nexport function sessionCommandsReducer(\n state: SessionCommandsState,\n intent: EngineIntent,\n context: {\n deletedSessionIds: Readonly<Record<string, true>>;\n }\n): EngineReducerResult<SessionCommandsState> {\n if (intent.type === \"session/availableCommandsReceived\") {\n const id = intent.agentSessionId.trim();\n if (!id || context.deletedSessionIds[id] || !intent.workspaceId.trim())\n return unchanged(state);\n const commands = normalizeCommands(intent.commands);\n const current = state.bySessionId[id];\n if (\n current?.workspaceId === intent.workspaceId.trim() &&\n commandListsEqual(current.commands, commands)\n )\n return unchanged(state);\n return {\n commands: NO_COMMANDS,\n state: {\n bySessionId: {\n ...state.bySessionId,\n [id]: { commands, workspaceId: intent.workspaceId.trim() }\n }\n }\n };\n }\n if (intent.type === \"session/removed\") {\n const id = intent.agentSessionId.trim();\n if (!state.bySessionId[id]) return unchanged(state);\n const bySessionId = { ...state.bySessionId };\n delete bySessionId[id];\n return { commands: NO_COMMANDS, state: { bySessionId } };\n }\n return unchanged(state);\n}\n\nfunction normalizeCommands(values: readonly unknown[]) {\n const byName = new Map<\n string,\n import(\"./sessionCommands.types.ts\").AgentSessionAvailableCommand\n >();\n for (const value of values) {\n if (!value || typeof value !== \"object\") continue;\n const candidate = value as {\n name?: unknown;\n description?: unknown;\n inputHint?: unknown;\n };\n const name =\n typeof candidate.name === \"string\" ? candidate.name.trim() : \"\";\n if (!name || byName.has(name)) continue;\n byName.set(name, {\n name,\n ...(typeof candidate.description === \"string\" &&\n candidate.description.trim()\n ? { description: candidate.description.trim() }\n : {}),\n ...(typeof candidate.inputHint === \"string\" && candidate.inputHint.trim()\n ? { inputHint: candidate.inputHint.trim() }\n : {})\n });\n }\n return [...byName.values()];\n}\n\nfunction commandListsEqual(\n left: readonly import(\"./sessionCommands.types.ts\").AgentSessionAvailableCommand[],\n right: readonly import(\"./sessionCommands.types.ts\").AgentSessionAvailableCommand[]\n) {\n return (\n left.length === right.length &&\n left.every((value, index) => {\n const other = right[index];\n return (\n value.name === other?.name &&\n value.description === other.description &&\n value.inputHint === other.inputHint\n );\n })\n );\n}\n\nfunction unchanged(\n state: SessionCommandsState\n): EngineReducerResult<SessionCommandsState> {\n return { commands: NO_COMMANDS, state };\n}\n","import type { AgentActivitySessionMessageWindow } from \"../messageWindow.types.ts\";\nimport type { AgentActivityMessage } from \"../types.ts\";\nimport {\n areAgentActivityMessageArraysEqual,\n mergeAgentActivityMessages\n} from \"../merge.ts\";\nimport type { EngineIntent, EngineReducerResult } from \"./types.ts\";\nimport type { SessionMessagesState } from \"./sessionMessages.types.ts\";\n\nconst NO_COMMANDS = [] as const;\n\n/**\n * Minimal session identity the message store needs to resolve a provisional or\n * provider-scoped session id back to its canonical `agentSessionId`. Sourced\n * from the session lifecycle slice via reducer context so the message store\n * stays the single owner of message buckets without duplicating session state.\n */\nexport interface SessionMessagesSessionIdentity {\n agentSessionId: string;\n provider: string;\n providerSessionId?: string | null;\n}\n\nexport interface SessionMessagesReducerContext {\n previousSessionsById?: Readonly<\n Record<string, SessionMessagesSessionIdentity>\n >;\n sessionsById: Readonly<Record<string, SessionMessagesSessionIdentity>>;\n}\n\nexport function createInitialSessionMessagesState(): SessionMessagesState {\n return { messagesBySessionId: {}, windowsBySessionId: {} };\n}\n\nexport function sessionMessagesReducer(\n state: SessionMessagesState,\n intent: EngineIntent,\n context: SessionMessagesReducerContext = { sessionsById: {} }\n): EngineReducerResult<SessionMessagesState> {\n switch (intent.type) {\n case \"message/snapshotReceived\":\n return mergeIncomingMessages(\n state,\n context,\n intent.messages,\n intent.sessionMessageWindows ?? []\n );\n case \"session/snapshotReceived\":\n case \"session/upserted\":\n return canonicalizeSessionBuckets(state, context.sessionsById);\n case \"session/removed\":\n return dropSessionBuckets(\n state,\n context.previousSessionsById ?? context.sessionsById,\n intent.agentSessionId\n );\n default:\n return unchanged(state);\n }\n}\n\nfunction mergeIncomingMessages(\n state: SessionMessagesState,\n context: SessionMessagesReducerContext,\n messages: readonly AgentActivityMessage[],\n windows: readonly (AgentActivitySessionMessageWindow & {\n agentSessionId: string;\n })[]\n): EngineReducerResult<SessionMessagesState> {\n const bySessionId = new Map<string, AgentActivityMessage[]>();\n for (const message of messages) {\n const rawId = message.agentSessionId.trim();\n if (!rawId) continue;\n const bucket = bySessionId.get(rawId);\n if (bucket) bucket.push(message);\n else bySessionId.set(rawId, [message]);\n }\n let next = state.messagesBySessionId;\n for (const [rawId, sessionMessages] of bySessionId) {\n next = mergeSessionMessages(next, context, rawId, sessionMessages);\n }\n let nextWindows = state.windowsBySessionId;\n for (const window of windows) {\n nextWindows = mergeSessionMessageWindow(nextWindows, context, window);\n }\n return next === state.messagesBySessionId &&\n nextWindows === state.windowsBySessionId\n ? unchanged(state)\n : changed({\n messagesBySessionId: next,\n windowsBySessionId: nextWindows\n });\n}\n\nfunction mergeSessionMessageWindow(\n windowsBySessionId: Readonly<\n Record<string, Readonly<AgentActivitySessionMessageWindow>>\n >,\n context: SessionMessagesReducerContext,\n input: AgentActivitySessionMessageWindow & { agentSessionId: string }\n): Readonly<Record<string, Readonly<AgentActivitySessionMessageWindow>>> {\n const rawAgentSessionId = input.agentSessionId.trim();\n const canonicalAgentSessionId = resolveCanonicalAgentSessionId(\n context.sessionsById,\n rawAgentSessionId\n );\n if (!canonicalAgentSessionId) return windowsBySessionId;\n const nextWindow = {\n hasOlderMessages: input.hasOlderMessages,\n oldestLoadedVersion: input.oldestLoadedVersion\n };\n const current = windowsBySessionId[canonicalAgentSessionId];\n const hasAliasBucket =\n rawAgentSessionId !== canonicalAgentSessionId &&\n Object.prototype.hasOwnProperty.call(windowsBySessionId, rawAgentSessionId);\n if (\n current?.hasOlderMessages === nextWindow.hasOlderMessages &&\n current.oldestLoadedVersion === nextWindow.oldestLoadedVersion\n ) {\n return hasAliasBucket\n ? deleteBucket(windowsBySessionId, rawAgentSessionId)\n : windowsBySessionId;\n }\n const next = {\n ...windowsBySessionId,\n [canonicalAgentSessionId]: nextWindow\n };\n if (hasAliasBucket) delete next[rawAgentSessionId];\n return next;\n}\n\n/**\n * Merge a batch of one session's messages into its canonical bucket. Ports the\n * monotonic, alias-collapsing merge that previously lived in the controller\n * snapshot: a provisional-id bucket is folded into the canonical bucket and\n * removed once the session's canonical identity is known.\n */\nfunction mergeSessionMessages(\n messagesBySessionId: Readonly<\n Record<string, readonly AgentActivityMessage[]>\n >,\n context: SessionMessagesReducerContext,\n rawAgentSessionId: string,\n messages: readonly AgentActivityMessage[]\n): Readonly<Record<string, readonly AgentActivityMessage[]>> {\n const canonicalAgentSessionId = resolveCanonicalAgentSessionId(\n context.sessionsById,\n rawAgentSessionId\n );\n if (!canonicalAgentSessionId || messages.length === 0) {\n return messagesBySessionId;\n }\n const currentMessages = messagesBySessionId[canonicalAgentSessionId] ?? [];\n const hasAliasBucket =\n rawAgentSessionId !== \"\" &&\n rawAgentSessionId !== canonicalAgentSessionId &&\n Object.prototype.hasOwnProperty.call(\n messagesBySessionId,\n rawAgentSessionId\n );\n const aliasMessages = hasAliasBucket\n ? (messagesBySessionId[rawAgentSessionId] ?? [])\n : [];\n const currentCanonicalMessages =\n aliasMessages.length > 0\n ? mergeAgentActivityMessages(\n currentMessages,\n canonicalizeMessages(aliasMessages, canonicalAgentSessionId)\n )\n : currentMessages;\n const mergedMessages = mergeAgentActivityMessages(\n currentCanonicalMessages,\n canonicalizeMessages(messages, canonicalAgentSessionId)\n );\n if (areAgentActivityMessageArraysEqual(currentMessages, mergedMessages)) {\n return hasAliasBucket\n ? deleteBucket(messagesBySessionId, rawAgentSessionId)\n : messagesBySessionId;\n }\n const next = {\n ...messagesBySessionId,\n [canonicalAgentSessionId]: mergedMessages\n };\n if (hasAliasBucket) {\n delete next[rawAgentSessionId];\n }\n return next;\n}\n\nfunction canonicalizeSessionBuckets(\n state: SessionMessagesState,\n sessionsById: Readonly<Record<string, SessionMessagesSessionIdentity>>\n): EngineReducerResult<SessionMessagesState> {\n let nextMessages = state.messagesBySessionId;\n for (const [rawAgentSessionId, messages] of Object.entries(\n state.messagesBySessionId\n )) {\n const canonicalAgentSessionId = resolveCanonicalAgentSessionId(\n sessionsById,\n rawAgentSessionId\n );\n if (\n !canonicalAgentSessionId ||\n canonicalAgentSessionId === rawAgentSessionId\n ) {\n continue;\n }\n const merged = mergeAgentActivityMessages(\n nextMessages[canonicalAgentSessionId] ?? [],\n canonicalizeMessages(messages, canonicalAgentSessionId)\n );\n nextMessages = deleteBucket(\n {\n ...nextMessages,\n [canonicalAgentSessionId]: merged\n },\n rawAgentSessionId\n );\n }\n let nextWindows = state.windowsBySessionId;\n for (const [rawAgentSessionId, window] of Object.entries(\n state.windowsBySessionId\n )) {\n const canonicalAgentSessionId = resolveCanonicalAgentSessionId(\n sessionsById,\n rawAgentSessionId\n );\n if (\n !canonicalAgentSessionId ||\n canonicalAgentSessionId === rawAgentSessionId\n ) {\n continue;\n }\n nextWindows = deleteBucket(\n {\n ...nextWindows,\n [canonicalAgentSessionId]:\n nextWindows[canonicalAgentSessionId] ?? window\n },\n rawAgentSessionId\n );\n }\n return nextMessages === state.messagesBySessionId &&\n nextWindows === state.windowsBySessionId\n ? unchanged(state)\n : changed({\n messagesBySessionId: nextMessages,\n windowsBySessionId: nextWindows\n });\n}\n\nfunction dropSessionBuckets(\n state: SessionMessagesState,\n sessionsById: Readonly<Record<string, SessionMessagesSessionIdentity>>,\n rawAgentSessionId: string\n): EngineReducerResult<SessionMessagesState> {\n const id = rawAgentSessionId.trim();\n if (!id) {\n return unchanged(state);\n }\n const session = sessionsById[id];\n const removableIds = new Set([id]);\n const providerSessionId = session?.providerSessionId?.trim() ?? \"\";\n if (\n providerSessionId &&\n resolveCanonicalAgentSessionId(\n sessionsById,\n providerSessionId,\n session?.provider\n ) === id\n ) {\n removableIds.add(providerSessionId);\n }\n let nextMessages = state.messagesBySessionId;\n let nextWindows = state.windowsBySessionId;\n for (const removableId of removableIds) {\n if (Object.prototype.hasOwnProperty.call(nextMessages, removableId)) {\n nextMessages = deleteBucket(nextMessages, removableId);\n }\n if (Object.prototype.hasOwnProperty.call(nextWindows, removableId)) {\n nextWindows = deleteBucket(nextWindows, removableId);\n }\n }\n return nextMessages === state.messagesBySessionId &&\n nextWindows === state.windowsBySessionId\n ? unchanged(state)\n : changed({\n messagesBySessionId: nextMessages,\n windowsBySessionId: nextWindows\n });\n}\n\n/**\n * Resolve a raw session id (which may be a provisional id or a provider session\n * id) to its canonical `agentSessionId`. Falls back to the raw id when no\n * unambiguous canonical session is known yet.\n */\nexport function resolveCanonicalAgentSessionId(\n sessionsById: Readonly<Record<string, SessionMessagesSessionIdentity>>,\n rawAgentSessionId: string | null | undefined,\n provider?: string | null\n): string {\n const normalizedAgentSessionId = rawAgentSessionId?.trim() ?? \"\";\n if (!normalizedAgentSessionId) return \"\";\n if (sessionsById[normalizedAgentSessionId]) {\n return normalizedAgentSessionId;\n }\n const normalizedProvider = provider?.trim() ?? \"\";\n const candidates = Object.values(sessionsById).filter((session) => {\n if (session.providerSessionId?.trim() !== normalizedAgentSessionId) {\n return false;\n }\n return (\n !normalizedProvider || session.provider.trim() === normalizedProvider\n );\n });\n return candidates.length === 1\n ? candidates[0]!.agentSessionId.trim()\n : normalizedAgentSessionId;\n}\n\nfunction canonicalizeMessages(\n messages: readonly AgentActivityMessage[],\n agentSessionId: string\n): AgentActivityMessage[] {\n return messages.map((message) =>\n message.agentSessionId === agentSessionId\n ? message\n : { ...message, agentSessionId }\n );\n}\n\nfunction deleteBucket<T>(\n bucketsBySessionId: Readonly<Record<string, T>>,\n agentSessionId: string\n): Record<string, T> {\n const next = { ...bucketsBySessionId };\n delete next[agentSessionId];\n return next;\n}\n\nfunction changed(\n state: SessionMessagesState\n): EngineReducerResult<SessionMessagesState> {\n return { commands: NO_COMMANDS, state };\n}\n\nfunction unchanged(\n state: SessionMessagesState\n): EngineReducerResult<SessionMessagesState> {\n return { commands: NO_COMMANDS, state };\n}\n","import { cloneJSONValue } from \"../activityValueParsing.ts\";\nimport type {\n AgentActivityComposerOptions,\n AgentActivityComposerSettings\n} from \"../types.ts\";\n\nexport function cloneAgentActivityComposerOptions(\n options: AgentActivityComposerOptions\n): AgentActivityComposerOptions {\n return {\n provider: options.provider,\n capabilities: options.capabilities ? { ...options.capabilities } : null,\n models: options.models.map((option) => ({ ...option })),\n reasoningEfforts: options.reasoningEfforts.map((option) => ({ ...option })),\n reasoningOptionsByModel: options.reasoningOptionsByModel\n ? Object.fromEntries(\n Object.entries(options.reasoningOptionsByModel).map(\n ([model, profile]) => [\n model,\n {\n ...profile,\n options: profile.options.map((option) => ({ ...option }))\n }\n ]\n )\n )\n : undefined,\n speeds: (options.speeds ?? []).map((option) => ({ ...option })),\n modelConfigurable: options.modelConfigurable ?? false,\n reasoningConfigurable: options.reasoningConfigurable ?? false,\n speedConfigurable: options.speedConfigurable ?? false,\n effectiveSettings: options.effectiveSettings\n ? { ...options.effectiveSettings }\n : (options.effectiveSettings ?? null),\n permissionConfig: cloneJSONValue(\n options.permissionConfig ?? null\n ) as AgentActivityComposerOptions[\"permissionConfig\"],\n draftAgentSessionId: options.draftAgentSessionId ?? null,\n modelOptionsLoading: options.modelOptionsLoading,\n skills: options.skills.map((skill) => ({ ...skill })),\n capabilityCatalog: (options.capabilityCatalog ?? []).map((capability) => ({\n ...capability\n })),\n behavior: { ...options.behavior },\n slashCommandPolicy: cloneJSONValue(\n options.slashCommandPolicy ?? null\n ) as AgentActivityComposerOptions[\"slashCommandPolicy\"],\n loadedAtUnixMs: options.loadedAtUnixMs\n };\n}\n\nexport function areComposerOptionsEqual(\n left: AgentActivityComposerOptions,\n right: AgentActivityComposerOptions\n): boolean {\n const { loadedAtUnixMs: _leftLoadedAtUnixMs, ...leftComparable } = left;\n const { loadedAtUnixMs: _rightLoadedAtUnixMs, ...rightComparable } = right;\n return JSON.stringify(leftComparable) === JSON.stringify(rightComparable);\n}\n\n/**\n * Deterministic signature of a composer-options request. Two requests with the\n * same signature are interchangeable, so a settled result can satisfy a repeat\n * and an in-flight load can be deduplicated. Ported verbatim from the former\n * imperative cache coordinator.\n */\nexport function composerOptionsRequestSignature(input: {\n provider?: string;\n cwd?: string | null;\n settings?: AgentActivityComposerSettings | null;\n}): string {\n const settings = input.settings;\n const normalizedText = (value: string | null | undefined): string | null =>\n value?.trim() || null;\n return JSON.stringify({\n provider: input.provider?.trim() ?? \"\",\n cwd: input.cwd?.trim() ?? \"\",\n settings: {\n model: normalizedText(settings?.model),\n reasoningEffort: normalizedText(settings?.reasoningEffort),\n speed: normalizedText(settings?.speed),\n planMode:\n typeof settings?.planMode === \"boolean\" ? settings.planMode : null,\n permissionModeId: normalizedText(settings?.permissionModeId)\n }\n });\n}\n","import type { AgentActivityComposerOptions } from \"../types.ts\";\nimport type {\n EngineCommand,\n EngineIntent,\n EngineReducerResult\n} from \"./types.ts\";\nimport type {\n ComposerOptionsEntry,\n ComposerOptionsLoadRequestedIntent,\n ComposerOptionsState\n} from \"./composerOptions.types.ts\";\nimport {\n areComposerOptionsEqual,\n cloneAgentActivityComposerOptions,\n composerOptionsRequestSignature\n} from \"./composerOptions.helpers.ts\";\n\nconst NO_COMMANDS: readonly EngineCommand[] = [];\n\nexport function createInitialComposerOptionsState(): ComposerOptionsState {\n return { optionsByTargetKey: {}, entriesByTargetKey: {} };\n}\n\nexport function composerOptionsReducer(\n state: ComposerOptionsState,\n intent: EngineIntent\n): EngineReducerResult<ComposerOptionsState> {\n switch (intent.type) {\n case \"composerOptions/loadRequested\":\n return requestLoad(state, intent);\n case \"composerOptions/invalidated\":\n return invalidate(state, intent.providers, intent.targetKeys);\n case \"engine/commandResult\":\n return intent.commandType === \"composerOptions/load\"\n ? settleLoad(state, intent)\n : unchanged(state);\n default:\n return unchanged(state);\n }\n}\n\nfunction requestLoad(\n state: ComposerOptionsState,\n intent: ComposerOptionsLoadRequestedIntent\n): EngineReducerResult<ComposerOptionsState> {\n const targetKey = intent.targetKey.trim();\n const provider = intent.provider.trim();\n const workspaceId = intent.workspaceId.trim();\n const commandId = intent.commandId.trim();\n if (!targetKey || !provider || !workspaceId || !commandId) {\n return unchanged(state);\n }\n const signature = composerOptionsRequestSignature({\n provider,\n cwd: intent.cwd,\n settings: intent.settings\n });\n const current = state.entriesByTargetKey[targetKey];\n if (!intent.force && current) {\n const cacheHit =\n current.status === \"ready\" && current.settledSignature === signature;\n const inFlightDuplicate =\n current.status === \"loading\" && current.loadingSignature === signature;\n if (cacheHit || inFlightDuplicate) {\n return unchanged(state);\n }\n }\n const entry: ComposerOptionsEntry = {\n status: \"loading\",\n provider,\n loadingSignature: signature,\n settledSignature: current?.settledSignature ?? null,\n loadVersion: (current?.loadVersion ?? 0) + 1,\n inFlightCommandId: commandId\n };\n return {\n commands: [\n {\n type: \"composerOptions/load\",\n commandId,\n correlationId: targetKey,\n targetKey,\n provider,\n workspaceId,\n ...(intent.cwd !== undefined ? { cwd: intent.cwd } : {}),\n ...(intent.settings !== undefined ? { settings: intent.settings } : {})\n }\n ],\n state: replaceEntry(state, targetKey, entry)\n };\n}\n\nfunction settleLoad(\n state: ComposerOptionsState,\n intent: Extract<EngineIntent, { type: \"engine/commandResult\" }>\n): EngineReducerResult<ComposerOptionsState> {\n const targetKey = intent.correlationId?.trim() ?? \"\";\n const current = state.entriesByTargetKey[targetKey];\n // A superseded load carries a stale commandId; ignore it so a late result\n // never clobbers a newer request. Invalidation deliberately keeps the active\n // command attached so its caller still receives a terminal result.\n if (!current || current.inFlightCommandId !== intent.commandId) {\n return unchanged(state);\n }\n if (intent.outcome !== \"succeeded\") {\n return changed(\n replaceEntry(state, targetKey, {\n ...current,\n status: \"error\",\n loadingSignature: null,\n inFlightCommandId: null\n })\n );\n }\n const options = composerOptionsFromValue(intent.value);\n if (!options) {\n return changed(\n replaceEntry(state, targetKey, {\n ...current,\n status: \"error\",\n loadingSignature: null,\n inFlightCommandId: null\n })\n );\n }\n const settledEntry: ComposerOptionsEntry = {\n ...current,\n status: \"ready\",\n settledSignature: current.loadingSignature,\n loadingSignature: null,\n inFlightCommandId: null\n };\n const existing = state.optionsByTargetKey[targetKey];\n const optionsUnchanged = Boolean(\n existing && areComposerOptionsEqual(existing, options)\n );\n return changed({\n entriesByTargetKey: {\n ...state.entriesByTargetKey,\n [targetKey]: settledEntry\n },\n optionsByTargetKey: optionsUnchanged\n ? state.optionsByTargetKey\n : {\n ...state.optionsByTargetKey,\n [targetKey]: cloneAgentActivityComposerOptions(options)\n }\n });\n}\n\nfunction invalidate(\n state: ComposerOptionsState,\n providers: readonly string[] | undefined,\n targetKeys: readonly string[] | undefined\n): EngineReducerResult<ComposerOptionsState> {\n const providerSet = providers?.length ? new Set(providers) : null;\n const targetKeySet = targetKeys?.length\n ? new Set(targetKeys.map((value) => value.trim()).filter(Boolean))\n : null;\n let entriesByTargetKey: Record<string, ComposerOptionsEntry> | null = null;\n for (const [targetKey, entry] of Object.entries(state.entriesByTargetKey)) {\n const matches =\n (providerSet === null && targetKeySet === null) ||\n providerSet?.has(entry.provider) === true ||\n targetKeySet?.has(targetKey) === true;\n if (!matches) continue;\n entriesByTargetKey ??= { ...state.entriesByTargetKey };\n entriesByTargetKey[targetKey] = {\n ...entry,\n // Drop cache validity so a subsequent request refetches. Keep an active\n // command attached: its caller still needs a terminal result, while the\n // cleared loading signature prevents a post-invalidation dedupe.\n settledSignature: null,\n loadingSignature: null,\n loadVersion: entry.loadVersion + 1\n };\n }\n return entriesByTargetKey\n ? changed({ ...state, entriesByTargetKey })\n : unchanged(state);\n}\n\nfunction composerOptionsFromValue(\n value: unknown\n): AgentActivityComposerOptions | null {\n if (!value || typeof value !== \"object\") return null;\n const candidate = value as Partial<AgentActivityComposerOptions>;\n return typeof candidate[\"provider\"] === \"string\"\n ? (value as AgentActivityComposerOptions)\n : null;\n}\n\nfunction replaceEntry(\n state: ComposerOptionsState,\n targetKey: string,\n entry: ComposerOptionsEntry\n): ComposerOptionsState {\n return {\n ...state,\n entriesByTargetKey: { ...state.entriesByTargetKey, [targetKey]: entry }\n };\n}\n\nfunction changed(\n state: ComposerOptionsState\n): EngineReducerResult<ComposerOptionsState> {\n return { commands: NO_COMMANDS, state };\n}\n\nfunction unchanged(\n state: ComposerOptionsState\n): EngineReducerResult<ComposerOptionsState> {\n return { commands: NO_COMMANDS, state };\n}\n","import type { AgentActivitySession } from \"../types.ts\";\nimport type { CanonicalAgentSession } from \"./sessionLifecycle.types.ts\";\nimport type {\n EngineCommand,\n EngineIntent,\n EngineReducerResult\n} from \"./types.ts\";\nimport type {\n SessionDeleteMutationResult,\n SessionMutationRecord,\n SessionMutationsState\n} from \"./sessionMutations.types.ts\";\n\nconst NO_COMMANDS: readonly EngineCommand[] = [];\nconst MAX_SETTLED_SESSION_MUTATIONS = 128;\n\nexport function createInitialSessionMutationsState(): SessionMutationsState {\n return { byMutationId: {} };\n}\n\nexport function sessionMutationsReducer(\n state: SessionMutationsState,\n intent: EngineIntent,\n context: {\n deletedSessionIds: Readonly<Record<string, true>>;\n sessionsById: Readonly<Record<string, CanonicalAgentSession>>;\n }\n): EngineReducerResult<SessionMutationsState> {\n if (intent.type === \"session/pinRequested\") {\n return requestPin(state, intent, context);\n }\n if (intent.type === \"sessions/deleteRequested\") {\n return requestDelete(state, intent, context);\n }\n if (intent.type !== \"engine/commandResult\") return unchanged(state);\n if (\n intent.commandType !== \"session/setPinned\" &&\n intent.commandType !== \"sessions/delete\"\n ) {\n return unchanged(state);\n }\n const mutationId = intent.correlationId?.trim() ?? \"\";\n const record = state.byMutationId[mutationId];\n if (\n !record ||\n record.commandId !== intent.commandId ||\n record.status !== \"inFlight\" ||\n (record.kind === \"pin\" && intent.commandType !== \"session/setPinned\") ||\n (record.kind === \"delete\" && intent.commandType !== \"sessions/delete\")\n ) {\n return unchanged(state);\n }\n if (intent.outcome === \"failed\") {\n return replaceRecord(state, {\n ...record,\n errorCode: intent.errorCode ?? null,\n errorMessage: intent.errorMessage?.trim() || null,\n status: \"failed\"\n });\n }\n if (intent.outcome === \"timedOut\") {\n return replaceRecord(state, {\n ...record,\n errorCode: \"timeout\",\n errorMessage: intent.errorMessage?.trim() || null,\n status: \"unknown\"\n });\n }\n if (record.kind === \"pin\") {\n const session = validPinResult(intent.value, record);\n if (!session) return invalidResult(state, record);\n return {\n commands: NO_COMMANDS,\n followUpIntents: [{ session, type: \"session/upserted\" }],\n state: withRecord(state, { ...record, status: \"succeeded\" })\n };\n }\n const deleteResult = validDeleteResult(intent.value);\n if (!deleteResult) return invalidResult(state, record);\n const removedSessionIds = [\n ...new Set([...record.agentSessionIds, ...deleteResult.removedSessionIds])\n ];\n return {\n commands: NO_COMMANDS,\n followUpIntents: removedSessionIds.map((agentSessionId) => ({\n agentSessionId,\n type: \"session/removed\" as const\n })),\n state: withRecord(state, {\n ...record,\n deleteResult,\n status: \"succeeded\"\n })\n };\n}\n\nfunction requestPin(\n state: SessionMutationsState,\n intent: Extract<EngineIntent, { type: \"session/pinRequested\" }>,\n context: {\n deletedSessionIds: Readonly<Record<string, true>>;\n sessionsById: Readonly<Record<string, CanonicalAgentSession>>;\n }\n): EngineReducerResult<SessionMutationsState> {\n const mutationId = intent.mutationId.trim();\n const agentSessionId = intent.agentSessionId.trim();\n const workspaceId = intent.workspaceId.trim();\n const session = context.sessionsById[agentSessionId];\n if (\n !mutationId ||\n !agentSessionId ||\n !workspaceId ||\n state.byMutationId[mutationId] ||\n context.deletedSessionIds[agentSessionId] ||\n session?.workspaceId !== workspaceId ||\n hasInFlightOverlap(state, [agentSessionId])\n ) {\n return unchanged(state);\n }\n const record: Extract<SessionMutationRecord, { kind: \"pin\" }> = {\n agentSessionIds: [agentSessionId],\n commandId: mutationId,\n errorCode: null,\n errorMessage: null,\n kind: \"pin\",\n mutationId,\n pinned: intent.pinned,\n status: \"inFlight\",\n workspaceId\n };\n const currentlyPinned = session.pinnedAtUnixMs != null;\n if (currentlyPinned === intent.pinned) {\n return replaceRecord(state, { ...record, status: \"succeeded\" });\n }\n return {\n commands: [\n {\n agentSessionId,\n commandId: mutationId,\n correlationId: mutationId,\n pinned: intent.pinned,\n ...(intent.timeoutMs === undefined\n ? {}\n : { timeoutMs: intent.timeoutMs }),\n type: \"session/setPinned\",\n workspaceId\n }\n ],\n state: withRequestedRecord(state, record)\n };\n}\n\nfunction requestDelete(\n state: SessionMutationsState,\n intent: Extract<EngineIntent, { type: \"sessions/deleteRequested\" }>,\n context: {\n deletedSessionIds: Readonly<Record<string, true>>;\n sessionsById: Readonly<Record<string, CanonicalAgentSession>>;\n }\n): EngineReducerResult<SessionMutationsState> {\n const mutationId = intent.mutationId.trim();\n const workspaceId = intent.workspaceId.trim();\n const agentSessionIds: string[] = [\n ...new Set(intent.agentSessionIds.map((id) => id.trim()).filter(Boolean))\n ];\n if (\n !mutationId ||\n !workspaceId ||\n agentSessionIds.length === 0 ||\n state.byMutationId[mutationId] ||\n hasInFlightOverlap(state, agentSessionIds) ||\n agentSessionIds.some((id) => {\n const session = context.sessionsById[id];\n return session !== undefined && session.workspaceId !== workspaceId;\n })\n ) {\n return unchanged(state);\n }\n const liveSessionIds = agentSessionIds.filter(\n (id) => !context.deletedSessionIds[id]\n );\n const record: Extract<SessionMutationRecord, { kind: \"delete\" }> = {\n agentSessionIds,\n commandId: mutationId,\n deleteResult: null,\n errorCode: null,\n errorMessage: null,\n kind: \"delete\",\n mutationId,\n status: \"inFlight\",\n workspaceId\n };\n if (liveSessionIds.length === 0) {\n return replaceRecord(state, {\n ...record,\n deleteResult: {\n cleanupFailedSessionIds: [],\n removedMessages: 0,\n removedSessionIds: [],\n removedSessions: 0\n },\n status: \"succeeded\"\n });\n }\n return {\n commands: [\n {\n agentSessionIds: liveSessionIds,\n commandId: mutationId,\n correlationId: mutationId,\n ...(intent.timeoutMs === undefined\n ? {}\n : { timeoutMs: intent.timeoutMs }),\n type: \"sessions/delete\",\n workspaceId\n }\n ],\n state: withRequestedRecord(state, record)\n };\n}\n\nfunction hasInFlightOverlap(\n state: SessionMutationsState,\n agentSessionIds: readonly string[]\n): boolean {\n const ids = new Set(agentSessionIds);\n return Object.values(state.byMutationId).some(\n (record) =>\n record.status === \"inFlight\" &&\n record.agentSessionIds.some((id) => ids.has(id))\n );\n}\n\nfunction validPinResult(\n value: unknown,\n record: Extract<SessionMutationRecord, { kind: \"pin\" }>\n): AgentActivitySession | null {\n if (!value || typeof value !== \"object\") return null;\n const session = (value as { session?: Partial<AgentActivitySession> })\n .session;\n return session?.agentSessionId?.trim() === record.agentSessionIds[0] &&\n session.workspaceId?.trim() === record.workspaceId &&\n Array.isArray(session.latestTurnInteractions) &&\n Array.isArray(session.pendingInteractions)\n ? (session as AgentActivitySession)\n : null;\n}\n\nfunction validDeleteResult(value: unknown): SessionDeleteMutationResult | null {\n if (!value || typeof value !== \"object\") return null;\n const result = value as Partial<SessionDeleteMutationResult>;\n if (\n typeof result.removedMessages !== \"number\" ||\n typeof result.removedSessions !== \"number\" ||\n !Array.isArray(result.cleanupFailedSessionIds) ||\n !result.cleanupFailedSessionIds.every((id) => typeof id === \"string\") ||\n !Array.isArray(result.removedSessionIds) ||\n !result.removedSessionIds.every((id) => typeof id === \"string\")\n ) {\n return null;\n }\n return {\n cleanupFailedSessionIds: result.cleanupFailedSessionIds.map((id) =>\n id.trim()\n ),\n removedMessages: result.removedMessages,\n removedSessionIds: result.removedSessionIds.map((id) => id.trim()),\n removedSessions: result.removedSessions\n };\n}\n\nfunction invalidResult(\n state: SessionMutationsState,\n record: SessionMutationRecord\n): EngineReducerResult<SessionMutationsState> {\n return replaceRecord(state, {\n ...record,\n errorCode: \"invalid_command_result\",\n errorMessage: null,\n status: \"unknown\"\n });\n}\n\nfunction replaceRecord(\n state: SessionMutationsState,\n record: SessionMutationRecord\n): EngineReducerResult<SessionMutationsState> {\n return { commands: NO_COMMANDS, state: withRecord(state, record) };\n}\n\nfunction withRecord(\n state: SessionMutationsState,\n record: SessionMutationRecord\n): SessionMutationsState {\n return boundedMutationState(\n { ...state.byMutationId, [record.mutationId]: record },\n record.mutationId\n );\n}\n\nfunction withRequestedRecord(\n state: SessionMutationsState,\n record: SessionMutationRecord\n): SessionMutationsState {\n const ids = new Set(record.agentSessionIds);\n return boundedMutationState(\n {\n ...Object.fromEntries(\n Object.entries(state.byMutationId).filter(\n ([, current]) =>\n current.status === \"inFlight\" ||\n !current.agentSessionIds.some((id) => ids.has(id))\n )\n ),\n [record.mutationId]: record\n },\n record.mutationId\n );\n}\n\nfunction boundedMutationState(\n records: Readonly<Record<string, SessionMutationRecord>>,\n currentMutationId: string\n): SessionMutationsState {\n const entries = Object.entries(records);\n const settled = entries.filter(([, record]) => record.status !== \"inFlight\");\n const retainedSettledIds = new Set(\n settled\n .filter(([mutationId]) => mutationId !== currentMutationId)\n .slice(-(MAX_SETTLED_SESSION_MUTATIONS - 1))\n .map(([mutationId]) => mutationId)\n );\n retainedSettledIds.add(currentMutationId);\n return {\n byMutationId: Object.fromEntries(\n entries.filter(\n ([mutationId, record]) =>\n record.status === \"inFlight\" || retainedSettledIds.has(mutationId)\n )\n )\n };\n}\n\nfunction unchanged(\n state: SessionMutationsState\n): EngineReducerResult<SessionMutationsState> {\n return { commands: NO_COMMANDS, state };\n}\n","import type { AgentActivitySession } from \"../types.ts\";\nimport type {\n EngineCommand,\n EngineIntent,\n EngineReducerResult\n} from \"./types.ts\";\nimport type { CanonicalAgentSession } from \"./sessionLifecycle.types.ts\";\nimport type {\n TuttiModeActivationState,\n TuttiModeActivationUpdateRecord\n} from \"./tuttiModeActivation.types.ts\";\n\nconst NO_COMMANDS: readonly EngineCommand[] = [];\nconst UPDATE_TIMEOUT_MS = 15_000;\n\ninterface TuttiModeActivationReducerContext {\n sessionsById: Readonly<Record<string, CanonicalAgentSession>>;\n}\n\nexport function createInitialTuttiModeActivationState(): TuttiModeActivationState {\n return {\n activationsBySessionId: {},\n draftsByKey: {},\n pendingCreatesBySessionId: {},\n updatesBySessionId: {}\n };\n}\n\nexport function tuttiModeActivationReducer(\n state: TuttiModeActivationState,\n intent: EngineIntent,\n context: TuttiModeActivationReducerContext\n): EngineReducerResult<TuttiModeActivationState> {\n switch (intent.type) {\n case \"tuttiMode/draftSet\":\n return setDraft(state, intent);\n case \"tuttiMode/updateRequested\":\n return requestUpdate(state, intent, context.sessionsById);\n case \"activation/requested\":\n return trackPendingCreate(state, intent);\n case \"engine/commandResult\":\n if (intent.commandType === \"tuttiMode/update\") {\n return settleUpdate(state, intent);\n }\n if (intent.commandType === \"session/activate\") {\n return settlePendingCreate(state, intent);\n }\n if (intent.commandType === \"session/reconcile\") {\n return settleOwnedReconcile(state, intent, context.sessionsById);\n }\n return unchanged(state);\n case \"engine/intentExpired\":\n return expirePendingCreate(state, intent.expiryId);\n case \"session/snapshotReceived\":\n return hydrateSessions(\n state,\n intent.sessions.map((session) => session.agentSessionId),\n context.sessionsById\n );\n case \"session/upserted\":\n return hydrateSessions(\n state,\n [intent.session.agentSessionId],\n context.sessionsById\n );\n case \"session/removed\":\n return removeSession(state, intent.agentSessionId);\n default:\n return unchanged(state);\n }\n}\n\nfunction setDraft(\n state: TuttiModeActivationState,\n intent: Extract<EngineIntent, { type: \"tuttiMode/draftSet\" }>\n): EngineReducerResult<TuttiModeActivationState> {\n const draftKey = intent.draftKey.trim();\n if (!draftKey) return unchanged(state);\n if (!intent.active) {\n if (!state.draftsByKey[draftKey]) return unchanged(state);\n const draftsByKey = { ...state.draftsByKey };\n delete draftsByKey[draftKey];\n return { commands: NO_COMMANDS, state: { ...state, draftsByKey } };\n }\n const current = state.draftsByKey[draftKey];\n // undefined 保留既有强度;显式 null/非法值归一化为 null(daemon 默认)。\n const orchestrationIntensity =\n intent.orchestrationIntensity === undefined\n ? (current?.orchestrationIntensity ?? null)\n : normalizeOrchestrationIntensity(intent.orchestrationIntensity);\n if (\n current?.active &&\n current.orchestrationIntensity === orchestrationIntensity\n ) {\n return unchanged(state);\n }\n return {\n commands: NO_COMMANDS,\n state: {\n ...state,\n draftsByKey: {\n ...state.draftsByKey,\n [draftKey]: {\n active: true,\n draftKey,\n occurredAtUnixMs: intent.occurredAtUnixMs,\n orchestrationIntensity,\n source: \"slash_command\"\n }\n }\n }\n };\n}\n\nfunction trackPendingCreate(\n state: TuttiModeActivationState,\n intent: Extract<EngineIntent, { type: \"activation/requested\" }>\n): EngineReducerResult<TuttiModeActivationState> {\n if (\n intent.mode !== \"new\" ||\n !intent.initialTuttiModeActivation ||\n !intent.tuttiModeDraftKey?.trim()\n ) {\n return unchanged(state);\n }\n const agentSessionId = intent.agentSessionId.trim();\n const draftKey = intent.tuttiModeDraftKey.trim();\n const draft = state.draftsByKey[draftKey];\n if (!agentSessionId || !draft) return unchanged(state);\n // Intent 自带的强度优先;缺省时把 draft 上暂存的强度带进 create 意图。\n const orchestrationIntensity =\n normalizeOrchestrationIntensity(\n intent.initialTuttiModeActivation.orchestrationIntensity\n ) ?? draft.orchestrationIntensity;\n return {\n commands: NO_COMMANDS,\n state: {\n ...state,\n pendingCreatesBySessionId: {\n ...state.pendingCreatesBySessionId,\n [agentSessionId]: {\n agentSessionId,\n draftKey,\n initialActivation: {\n ...intent.initialTuttiModeActivation,\n orchestrationIntensity\n },\n reconcileCommandId: null,\n requestId: intent.requestId,\n workspaceId: intent.workspaceId\n }\n }\n }\n };\n}\n\nfunction settlePendingCreate(\n state: TuttiModeActivationState,\n intent: Extract<EngineIntent, { type: \"engine/commandResult\" }>\n): EngineReducerResult<TuttiModeActivationState> {\n const requestId = intent.correlationId?.trim() ?? \"\";\n const pending = Object.values(state.pendingCreatesBySessionId).find(\n (candidate) => candidate.requestId === requestId\n );\n if (!pending) return unchanged(state);\n if (intent.outcome === \"succeeded\") {\n const activation = activationFromCreateResult(intent.value, pending);\n if (activation) {\n const draftsByKey = { ...state.draftsByKey };\n const pendingCreatesBySessionId = { ...state.pendingCreatesBySessionId };\n delete draftsByKey[pending.draftKey];\n delete pendingCreatesBySessionId[pending.agentSessionId];\n return {\n commands: NO_COMMANDS,\n state: {\n ...state,\n activationsBySessionId: {\n ...state.activationsBySessionId,\n [pending.agentSessionId]: cloneActivation(activation)\n },\n draftsByKey,\n pendingCreatesBySessionId\n }\n };\n }\n }\n if (intent.outcome === \"timedOut\" || intent.outcome === \"succeeded\") {\n if (pending.reconcileCommandId) return unchanged(state);\n const reconcileCommandId = `tutti-mode-create-reconcile:${pending.requestId}`;\n return {\n commands: [\n {\n agentSessionId: pending.agentSessionId,\n commandId: reconcileCommandId,\n scope: \"state\",\n timeoutMs: UPDATE_TIMEOUT_MS,\n type: \"session/reconcile\",\n workspaceId: pending.workspaceId\n }\n ],\n state: {\n ...state,\n pendingCreatesBySessionId: {\n ...state.pendingCreatesBySessionId,\n [pending.agentSessionId]: { ...pending, reconcileCommandId }\n }\n }\n };\n }\n const pendingCreatesBySessionId = { ...state.pendingCreatesBySessionId };\n delete pendingCreatesBySessionId[pending.agentSessionId];\n return {\n commands: NO_COMMANDS,\n state: { ...state, pendingCreatesBySessionId }\n };\n}\n\nfunction requestUpdate(\n state: TuttiModeActivationState,\n intent: Extract<EngineIntent, { type: \"tuttiMode/updateRequested\" }>,\n sessionsById: Readonly<Record<string, CanonicalAgentSession>>\n): EngineReducerResult<TuttiModeActivationState> {\n const agentSessionId = intent.agentSessionId.trim();\n const workspaceId = intent.workspaceId.trim();\n const commandId = intent.commandId.trim();\n const session = sessionsById[agentSessionId];\n if (\n !agentSessionId ||\n !workspaceId ||\n !commandId ||\n session?.workspaceId !== workspaceId ||\n !validSourcePair(intent.status, intent.source) ||\n state.updatesBySessionId[agentSessionId]?.updateStatus === \"inFlight\"\n ) {\n return unchanged(state);\n }\n const activation = state.activationsBySessionId[agentSessionId] ?? null;\n const orchestrationIntensity = normalizeOrchestrationIntensity(\n intent.orchestrationIntensity\n );\n if (\n activation?.status === intent.status &&\n (orchestrationIntensity === null ||\n orchestrationIntensity ===\n activation.currentRevision.orchestrationIntensity)\n ) {\n return clearUpdate(state, agentSessionId);\n }\n const expectedRevision = activation?.currentRevision.revision ?? null;\n const record: TuttiModeActivationUpdateRecord = {\n agentSessionId,\n commandId,\n errorCode: null,\n errorMessage: null,\n expectedRevision,\n orchestrationIntensity,\n reconcileCommandId: null,\n requestedAtUnixMs: intent.requestedAtUnixMs,\n source: intent.source,\n status: intent.status,\n updateStatus: \"inFlight\",\n workspaceId\n };\n return {\n commands: [\n {\n agentSessionId,\n commandId,\n ...(expectedRevision === null ? {} : { expectedRevision }),\n ...(orchestrationIntensity === null ? {} : { orchestrationIntensity }),\n source: intent.source,\n status: intent.status,\n timeoutMs: UPDATE_TIMEOUT_MS,\n type: \"tuttiMode/update\",\n workspaceId\n }\n ],\n state: {\n ...state,\n updatesBySessionId: {\n ...state.updatesBySessionId,\n [agentSessionId]: record\n }\n }\n };\n}\n\nfunction settleUpdate(\n state: TuttiModeActivationState,\n intent: Extract<EngineIntent, { type: \"engine/commandResult\" }>\n): EngineReducerResult<TuttiModeActivationState> {\n const entry = Object.values(state.updatesBySessionId).find(\n (candidate) => candidate.commandId === intent.commandId\n );\n if (!entry) return unchanged(state);\n if (intent.outcome === \"succeeded\") {\n const value = validUpdateResult(intent.value, entry);\n if (value) {\n const updatesBySessionId = { ...state.updatesBySessionId };\n delete updatesBySessionId[entry.agentSessionId];\n return {\n commands: NO_COMMANDS,\n state: {\n ...state,\n activationsBySessionId: {\n ...state.activationsBySessionId,\n [entry.agentSessionId]: cloneActivation(value.activation)\n },\n updatesBySessionId\n }\n };\n }\n }\n const uncertain =\n intent.outcome === \"timedOut\" ||\n intent.outcome === \"succeeded\" ||\n isRevisionConflict(intent.errorCode);\n return {\n commands: uncertain\n ? [\n {\n agentSessionId: entry.agentSessionId,\n commandId: `tutti-mode-reconcile:${entry.commandId}`,\n scope: \"state\",\n timeoutMs: UPDATE_TIMEOUT_MS,\n type: \"session/reconcile\",\n workspaceId: entry.workspaceId\n }\n ]\n : NO_COMMANDS,\n state: {\n ...state,\n updatesBySessionId: {\n ...state.updatesBySessionId,\n [entry.agentSessionId]: {\n ...entry,\n errorCode:\n intent.outcome === \"succeeded\"\n ? \"invalid_command_result\"\n : (intent.errorCode ?? null),\n errorMessage: intent.errorMessage?.trim() || null,\n reconcileCommandId: uncertain\n ? `tutti-mode-reconcile:${entry.commandId}`\n : null,\n updateStatus: uncertain ? \"uncertain\" : \"failed\"\n }\n }\n }\n };\n}\n\nfunction isRevisionConflict(errorCode: string | undefined): boolean {\n const normalized = errorCode?.trim().toLowerCase() ?? \"\";\n return (\n normalized.includes(\"409\") ||\n normalized.includes(\"conflict\") ||\n normalized.includes(\"revision\")\n );\n}\n\nfunction hydrateSessions(\n state: TuttiModeActivationState,\n sessionIds: readonly string[],\n sessionsById: Readonly<Record<string, CanonicalAgentSession>>\n): EngineReducerResult<TuttiModeActivationState> {\n let changed = false;\n const activationsBySessionId = { ...state.activationsBySessionId };\n const draftsByKey = { ...state.draftsByKey };\n const pendingCreatesBySessionId = { ...state.pendingCreatesBySessionId };\n const updatesBySessionId = { ...state.updatesBySessionId };\n for (const rawId of sessionIds) {\n const agentSessionId = rawId.trim();\n const session = sessionsById[agentSessionId];\n if (!session) continue;\n const activation = session.tuttiModeActivation\n ? cloneActivation(session.tuttiModeActivation)\n : null;\n const current = activationsBySessionId[agentSessionId];\n if (!sameActivation(current, activation)) {\n activationsBySessionId[agentSessionId] = activation;\n changed = true;\n }\n const pending = pendingCreatesBySessionId[agentSessionId];\n if (\n pending &&\n activation?.status === pending.initialActivation.status &&\n activation.currentRevision.status === pending.initialActivation.status\n ) {\n delete draftsByKey[pending.draftKey];\n delete pendingCreatesBySessionId[agentSessionId];\n changed = true;\n }\n const update = updatesBySessionId[agentSessionId];\n if (update && updateSemanticallyApplied(update, activation)) {\n delete updatesBySessionId[agentSessionId];\n changed = true;\n }\n }\n return changed\n ? {\n commands: NO_COMMANDS,\n state: {\n activationsBySessionId,\n draftsByKey,\n pendingCreatesBySessionId,\n updatesBySessionId\n }\n }\n : unchanged(state);\n}\n\nfunction settleOwnedReconcile(\n state: TuttiModeActivationState,\n intent: Extract<EngineIntent, { type: \"engine/commandResult\" }>,\n sessionsById: Readonly<Record<string, CanonicalAgentSession>>\n): EngineReducerResult<TuttiModeActivationState> {\n const update = Object.values(state.updatesBySessionId).find(\n (candidate) => candidate.reconcileCommandId === intent.commandId\n );\n if (update) {\n const activation =\n sessionsById[update.agentSessionId]?.tuttiModeActivation ?? null;\n if (\n intent.outcome === \"succeeded\" &&\n updateSemanticallyApplied(update, activation)\n ) {\n return clearUpdate(state, update.agentSessionId);\n }\n return {\n commands: NO_COMMANDS,\n state: {\n ...state,\n updatesBySessionId: {\n ...state.updatesBySessionId,\n [update.agentSessionId]: {\n ...update,\n errorCode:\n intent.outcome === \"succeeded\"\n ? \"tutti_mode_update_not_applied\"\n : intent.errorCode?.trim() || \"tutti_mode_reconcile_failed\",\n errorMessage: intent.errorMessage?.trim() || null,\n reconcileCommandId: null,\n updateStatus: \"failed\"\n }\n }\n }\n };\n }\n const pending = Object.values(state.pendingCreatesBySessionId).find(\n (candidate) => candidate.reconcileCommandId === intent.commandId\n );\n if (!pending) return unchanged(state);\n if (intent.outcome !== \"succeeded\") {\n return {\n commands: NO_COMMANDS,\n state: {\n ...state,\n pendingCreatesBySessionId: {\n ...state.pendingCreatesBySessionId,\n [pending.agentSessionId]: {\n ...pending,\n reconcileCommandId: null\n }\n }\n }\n };\n }\n const activation =\n sessionsById[pending.agentSessionId]?.tuttiModeActivation ?? null;\n if (activation?.status === pending.initialActivation.status) {\n const draftsByKey = { ...state.draftsByKey };\n const pendingCreatesBySessionId = { ...state.pendingCreatesBySessionId };\n delete draftsByKey[pending.draftKey];\n delete pendingCreatesBySessionId[pending.agentSessionId];\n return {\n commands: NO_COMMANDS,\n state: {\n ...state,\n activationsBySessionId: {\n ...state.activationsBySessionId,\n [pending.agentSessionId]: cloneActivation(activation)\n },\n draftsByKey,\n pendingCreatesBySessionId\n }\n };\n }\n const pendingCreatesBySessionId = { ...state.pendingCreatesBySessionId };\n delete pendingCreatesBySessionId[pending.agentSessionId];\n return {\n commands: NO_COMMANDS,\n state: { ...state, pendingCreatesBySessionId }\n };\n}\n\nfunction expirePendingCreate(\n state: TuttiModeActivationState,\n expiryId: string\n): EngineReducerResult<TuttiModeActivationState> {\n if (!expiryId.startsWith(\"activation:\")) return unchanged(state);\n const requestId = expiryId.slice(\"activation:\".length);\n const pending = Object.values(state.pendingCreatesBySessionId).find(\n (candidate) => candidate.requestId === requestId\n );\n if (!pending) return unchanged(state);\n const pendingCreatesBySessionId = { ...state.pendingCreatesBySessionId };\n delete pendingCreatesBySessionId[pending.agentSessionId];\n return {\n commands: NO_COMMANDS,\n state: { ...state, pendingCreatesBySessionId }\n };\n}\n\nfunction updateSemanticallyApplied(\n update: TuttiModeActivationUpdateRecord,\n activation: AgentActivitySession[\"tuttiModeActivation\"]\n): boolean {\n return Boolean(\n activation &&\n activation.status === update.status &&\n activation.currentRevision.status === update.status &&\n activation.currentRevision.revision > (update.expectedRevision ?? 0) &&\n (update.orchestrationIntensity === null ||\n activation.currentRevision.orchestrationIntensity ===\n update.orchestrationIntensity)\n );\n}\n\nfunction removeSession(\n state: TuttiModeActivationState,\n agentSessionId: string\n): EngineReducerResult<TuttiModeActivationState> {\n const id = agentSessionId.trim();\n if (\n !(id in state.activationsBySessionId) &&\n !state.pendingCreatesBySessionId[id] &&\n !state.updatesBySessionId[id]\n ) {\n return unchanged(state);\n }\n const activationsBySessionId = { ...state.activationsBySessionId };\n const pendingCreatesBySessionId = { ...state.pendingCreatesBySessionId };\n const updatesBySessionId = { ...state.updatesBySessionId };\n delete activationsBySessionId[id];\n delete pendingCreatesBySessionId[id];\n delete updatesBySessionId[id];\n return {\n commands: NO_COMMANDS,\n state: {\n ...state,\n activationsBySessionId,\n pendingCreatesBySessionId,\n updatesBySessionId\n }\n };\n}\n\nfunction clearUpdate(\n state: TuttiModeActivationState,\n agentSessionId: string\n): EngineReducerResult<TuttiModeActivationState> {\n if (!state.updatesBySessionId[agentSessionId]) return unchanged(state);\n const updatesBySessionId = { ...state.updatesBySessionId };\n delete updatesBySessionId[agentSessionId];\n return { commands: NO_COMMANDS, state: { ...state, updatesBySessionId } };\n}\n\nfunction validSourcePair(status: string, source: string): boolean {\n return (\n (status === \"active\" && source === \"slash_command\") ||\n (status === \"inactive\" && source === \"badge_remove\")\n );\n}\n\nfunction validUpdateResult(\n value: unknown,\n entry: TuttiModeActivationUpdateRecord\n): {\n activation: NonNullable<AgentActivitySession[\"tuttiModeActivation\"]>;\n} | null {\n if (!value || typeof value !== \"object\") return null;\n const activation = (value as { activation?: unknown }).activation;\n if (!activation || typeof activation !== \"object\") return null;\n const candidate = activation as NonNullable<\n AgentActivitySession[\"tuttiModeActivation\"]\n >;\n return candidate.workspaceId === entry.workspaceId &&\n candidate.agentSessionId === entry.agentSessionId &&\n candidate.status === entry.status &&\n candidate.currentRevision?.status === entry.status &&\n Number.isInteger(candidate.currentRevision?.revision) &&\n (entry.orchestrationIntensity === null ||\n candidate.currentRevision?.orchestrationIntensity ===\n entry.orchestrationIntensity)\n ? { activation: candidate }\n : null;\n}\n\nfunction activationFromCreateResult(\n value: unknown,\n pending: TuttiModeActivationState[\"pendingCreatesBySessionId\"][string]\n): NonNullable<AgentActivitySession[\"tuttiModeActivation\"]> | null {\n if (!value || typeof value !== \"object\") return null;\n const session = (value as { session?: unknown }).session;\n if (!session || typeof session !== \"object\") return null;\n const candidate = session as Partial<AgentActivitySession>;\n const activation = candidate.tuttiModeActivation;\n return candidate.workspaceId === pending.workspaceId &&\n candidate.agentSessionId === pending.agentSessionId &&\n activation?.workspaceId === pending.workspaceId &&\n activation.agentSessionId === pending.agentSessionId &&\n activation.status === pending.initialActivation.status &&\n activation.currentRevision.status === pending.initialActivation.status\n ? activation\n : null;\n}\n\nfunction cloneActivation(\n activation: NonNullable<AgentActivitySession[\"tuttiModeActivation\"]>\n): NonNullable<AgentActivitySession[\"tuttiModeActivation\"]> {\n return {\n ...activation,\n currentRevision: { ...activation.currentRevision }\n };\n}\n\nfunction sameActivation(\n left: AgentActivitySession[\"tuttiModeActivation\"] | undefined,\n right: AgentActivitySession[\"tuttiModeActivation\"]\n): boolean {\n return (\n left === right ||\n (left?.id === right?.id &&\n left?.status === right?.status &&\n left?.currentRevision.revision === right?.currentRevision.revision)\n );\n}\n\nfunction normalizeOrchestrationIntensity(\n value: number | null | undefined\n): number | null {\n return typeof value === \"number\" &&\n Number.isInteger(value) &&\n value >= 0 &&\n value <= 100\n ? value\n : null;\n}\n\nfunction unchanged(\n state: TuttiModeActivationState\n): EngineReducerResult<TuttiModeActivationState> {\n return { commands: NO_COMMANDS, state };\n}\n","import {\n createInitialEngineRuntimeState,\n engineRuntimeReducer\n} from \"./engineRuntime.reducer.ts\";\nimport {\n createInitialPromptQueueState,\n promptQueueReducer\n} from \"./promptQueue.reducer.ts\";\nimport {\n resolvePromptSendNowStrategy,\n resolveQueuedPromptSendNowStrategy\n} from \"./promptQueue.sendNow.ts\";\nimport {\n canCancelQueuedSubmit,\n isQueuedSubmitDeliveryPending\n} from \"./promptQueue.lookup.ts\";\nimport {\n createInitialPendingIntentsState,\n pendingIntentsReducer\n} from \"./pendingIntents.reducer.ts\";\nimport {\n createInitialSessionLifecycleState,\n sessionLifecycleReducer\n} from \"./sessionLifecycle.reducer.ts\";\nimport {\n createInitialSessionReconcileState,\n sessionReconcileReducer\n} from \"./sessionReconcile.reducer.ts\";\nimport type {\n AgentSessionEngineState,\n EngineIntent,\n EngineReducerResult\n} from \"./types.ts\";\nimport {\n attentionReadStateReducer,\n createInitialAttentionReadState\n} from \"./attentionReadState.reducer.ts\";\nimport {\n validateScopedSessionResult,\n validateCancelResult,\n validateSendInputResult\n} from \"./commandResult.validation.ts\";\nimport {\n createInitialPlanDecisionState,\n planDecisionReducer\n} from \"./planDecision.reducer.ts\";\nimport {\n createInitialSessionCommandsState,\n sessionCommandsReducer\n} from \"./sessionCommands.reducer.ts\";\nimport {\n createInitialSessionMessagesState,\n sessionMessagesReducer\n} from \"./sessionMessages.reducer.ts\";\nimport {\n composerOptionsReducer,\n createInitialComposerOptionsState\n} from \"./composerOptions.reducer.ts\";\nimport { canonicalTurnKey } from \"./sessionEntityKeys.ts\";\nimport { deriveCanonicalSubmitAvailability } from \"./sessionLifecycle.availability.ts\";\nimport {\n createInitialSessionMutationsState,\n sessionMutationsReducer\n} from \"./sessionMutations.reducer.ts\";\nimport {\n createInitialTuttiModeActivationState,\n tuttiModeActivationReducer\n} from \"./tuttiModeActivation.reducer.ts\";\n\n// Root reducer: static composition of domain reducers, zero business logic.\n// Cross-domain read-only context is passed explicitly; domains still own all\n// decisions and state transitions in their own reducer.\n\nexport function createInitialAgentSessionEngineState(): AgentSessionEngineState {\n return {\n attentionReadState: createInitialAttentionReadState(),\n engineRuntime: createInitialEngineRuntimeState(),\n pendingIntents: createInitialPendingIntentsState(),\n planDecisions: createInitialPlanDecisionState(),\n promptQueue: createInitialPromptQueueState(),\n sessionReconcile: createInitialSessionReconcileState(),\n sessionMutations: createInitialSessionMutationsState(),\n sessionCommands: createInitialSessionCommandsState(),\n sessionLifecycle: createInitialSessionLifecycleState(),\n sessionMessages: createInitialSessionMessagesState(),\n composerOptions: createInitialComposerOptionsState(),\n tuttiModeActivation: createInitialTuttiModeActivationState()\n };\n}\n\nexport function rootEngineReducer(\n state: AgentSessionEngineState,\n intent: EngineIntent\n): EngineReducerResult<AgentSessionEngineState> {\n const sendResultValidation =\n intent.type === \"engine/commandResult\" &&\n intent.commandType === \"queue/sendPrompt\" &&\n intent.outcome === \"succeeded\"\n ? validateSendInputResult(\n intent.value,\n state.pendingIntents.submitsByClientSubmitId[\n intent.correlationId?.trim() ?? \"\"\n ]\n )\n : null;\n const interactionResponse =\n intent.type === \"engine/commandResult\" &&\n intent.commandType === \"interaction/respond\"\n ? Object.values(state.sessionLifecycle.interactionResponsesById).find(\n (response) => response.commandId === intent.commandId\n )\n : undefined;\n const interactionResultValidation =\n intent.type === \"engine/commandResult\" &&\n intent.commandType === \"interaction/respond\" &&\n intent.outcome === \"succeeded\"\n ? validateScopedSessionResult(intent.value, interactionResponse)\n : null;\n const settingsEntry =\n intent.type === \"engine/commandResult\" &&\n intent.commandType === \"session/updateSettings\"\n ? Object.entries(state.sessionLifecycle.operationBySessionId).find(\n ([, operation]) =>\n operation.settingsUpdate.commandId === intent.commandId\n )\n : undefined;\n const settingsResultValidation =\n intent.type === \"engine/commandResult\" &&\n intent.commandType === \"session/updateSettings\" &&\n intent.outcome === \"succeeded\"\n ? validateScopedSessionResult(\n intent.value,\n settingsEntry\n ? {\n agentSessionId: settingsEntry[0],\n workspaceId:\n state.sessionLifecycle.sessionsById[settingsEntry[0]]\n ?.workspaceId ?? \"\"\n }\n : (() => {\n const activation =\n state.pendingIntents.activationsByRequestId[\n intent.correlationId?.trim() ?? \"\"\n ];\n return activation\n ? {\n agentSessionId: activation.agentSessionId,\n workspaceId: activation.workspaceId\n }\n : undefined;\n })(),\n true\n )\n : null;\n const cancelEntry =\n intent.type === \"engine/commandResult\" &&\n intent.commandType === \"turn/cancel\"\n ? Object.entries(state.sessionLifecycle.operationBySessionId).find(\n ([, operation]) => operation.cancel.commandId === intent.commandId\n )\n : undefined;\n const cancelResultValidation =\n intent.type === \"engine/commandResult\" &&\n intent.commandType === \"turn/cancel\" &&\n intent.outcome === \"succeeded\"\n ? validateCancelResult(\n intent.value,\n cancelEntry\n ? {\n agentSessionId: cancelEntry[0],\n currentTurn: cancelEntry[1].cancel.turnId\n ? (state.sessionLifecycle.turnsById[\n canonicalTurnKey(\n cancelEntry[0],\n cancelEntry[1].cancel.turnId\n )\n ] ?? null)\n : null,\n turnId: cancelEntry[1].cancel.turnId,\n workspaceMatches:\n state.sessionLifecycle.sessionsById[cancelEntry[0]]\n ?.workspaceId === cancelEntry[1].cancel.requestedWorkspaceId\n }\n : undefined\n )\n : null;\n const engineRuntime = engineRuntimeReducer(state.engineRuntime, intent);\n const planIntent =\n intent.type === \"plan/decisionRequested\" ||\n intent.type === \"plan/feedbackRequested\" ||\n intent.type === \"plan/skipped\"\n ? intent\n : null;\n const planTurnValid = Boolean(\n planIntent &&\n !state.sessionLifecycle.deletedSessionIds[planIntent.agentSessionId] &&\n state.sessionLifecycle.sessionsById[planIntent.agentSessionId]\n ?.workspaceId === planIntent.workspaceId &&\n state.sessionLifecycle.turnsById[\n canonicalTurnKey(planIntent.agentSessionId, planIntent.turnId)\n ]?.phase === \"settled\" &&\n state.sessionLifecycle.turnsById[\n canonicalTurnKey(planIntent.agentSessionId, planIntent.turnId)\n ]?.outcome === \"completed\" &&\n state.sessionLifecycle.operationBySessionId[\n planIntent.agentSessionId.trim()\n ]?.runtimeAvailability.state !== \"blocked\"\n );\n const submitIntent =\n intent.type === \"submit/requested\" ||\n intent.type === \"plan/feedbackRequested\"\n ? intent\n : null;\n const submitId = submitIntent?.clientSubmitId.trim() ?? \"\";\n const submitSessionId = submitIntent?.agentSessionId.trim() ?? \"\";\n const submitWorkspaceId = submitIntent?.workspaceId.trim() ?? \"\";\n const submitSession = submitSessionId\n ? state.sessionLifecycle.sessionsById[submitSessionId]\n : undefined;\n const submitSendNowStrategy =\n submitIntent?.type === \"submit/requested\" &&\n submitIntent.routing === \"send_now\"\n ? resolvePromptSendNowStrategy(\n deriveCanonicalSubmitAvailability(\n state.sessionLifecycle,\n submitSessionId\n ),\n submitSession?.capabilities\n )\n : null;\n const queueRecord = submitIntent\n ? state.promptQueue.recordsBySessionId[submitSessionId]\n : undefined;\n // A session whose activation is still in flight is not in sessionsById yet.\n // Plain submits for it are accepted into the queue (they drain once the\n // session upserts) instead of being silently dropped; routings that dispatch\n // straight to the daemon still require the canonical session record.\n const submitSessionScopeValid =\n submitSession !== undefined\n ? submitSession.workspaceId === submitWorkspaceId\n : submitIntent?.type === \"submit/requested\" &&\n submitIntent.routing !== \"immediate\";\n const submitRequestAccepted = Boolean(\n submitIntent &&\n submitId &&\n submitSessionId &&\n submitWorkspaceId &&\n submitSessionScopeValid &&\n submitIntent.content.length > 0 &&\n (submitIntent.type !== \"submit/requested\" ||\n submitIntent.routing !== \"send_now\" ||\n submitSendNowStrategy !== null) &&\n !state.sessionLifecycle.deletedSessionIds[submitSessionId] &&\n !state.pendingIntents.submitsByClientSubmitId[submitId] &&\n !queueRecord?.prompts.some(\n (prompt) => prompt.id === submitId || prompt.clientSubmitId === submitId\n ) &&\n queueRecord?.inFlight?.promptId !== submitId &&\n queueRecord?.uncertainDelivery?.promptId !== submitId\n );\n const feedbackAccepted = Boolean(\n intent.type === \"plan/feedbackRequested\" &&\n planTurnValid &&\n submitRequestAccepted\n );\n const sendNowStrategy =\n intent.type === \"submit/requested\" && intent.routing === \"send_now\"\n ? submitSendNowStrategy\n : intent.type === \"queue/sendNowRequested\"\n ? resolveQueuedPromptSendNowStrategy(\n state.promptQueue,\n intent.agentSessionId,\n intent.promptId,\n deriveCanonicalSubmitAvailability(\n state.sessionLifecycle,\n intent.agentSessionId\n ),\n state.sessionLifecycle.sessionsById[intent.agentSessionId.trim()]\n ?.capabilities\n )\n : null;\n const expiringSubmitId =\n intent.type === \"engine/intentExpired\" &&\n intent.expiryId.startsWith(\"submit:\")\n ? intent.expiryId.slice(\"submit:\".length)\n : \"\";\n const expiringSubmit =\n state.pendingIntents.submitsByClientSubmitId[expiringSubmitId];\n const planDecisions = planDecisionReducer(state.planDecisions, intent, {\n feedbackAccepted,\n planTurnValid\n });\n const sessionCommands = sessionCommandsReducer(\n state.sessionCommands,\n intent,\n {\n deletedSessionIds: state.sessionLifecycle.deletedSessionIds\n }\n );\n const sessionMutations = sessionMutationsReducer(\n state.sessionMutations,\n intent,\n {\n deletedSessionIds: state.sessionLifecycle.deletedSessionIds,\n sessionsById: state.sessionLifecycle.sessionsById\n }\n );\n const sessionLifecycle = sessionLifecycleReducer(\n state.sessionLifecycle,\n intent,\n {\n queueSendNowRequiresCancel: sendNowStrategy === \"cancel_then_send\",\n sendNowSubmitRequiresCancel:\n intent.type === \"submit/requested\" &&\n submitRequestAccepted &&\n sendNowStrategy === \"cancel_then_send\",\n sendResultValidation,\n interactionResultValidation,\n settingsResultValidation,\n cancelResultValidation\n }\n );\n const promptQueue = promptQueueReducer(state.promptQueue, intent, {\n cancelResultValidation,\n deletedSessionIds: sessionLifecycle.state.deletedSessionIds,\n interactionResultValidation,\n lifecycle: sessionLifecycle.state,\n planFeedbackAccepted: feedbackAccepted,\n sendResultValidation,\n submitRequestAccepted,\n sendNowStrategy,\n settingsResultValidation\n });\n const attentionReadState = attentionReadStateReducer(\n state.attentionReadState,\n intent,\n { sessionsById: sessionLifecycle.state.sessionsById }\n );\n const pendingIntents = pendingIntentsReducer(state.pendingIntents, intent, {\n deletedSessionIds: sessionLifecycle.state.deletedSessionIds,\n turnsById: sessionLifecycle.state.turnsById,\n submitCancellationAccepted:\n intent.type === \"submit/canceled\" &&\n canCancelQueuedSubmit(\n state.promptQueue,\n intent.agentSessionId,\n intent.clientSubmitId\n ),\n planFeedbackAccepted: feedbackAccepted,\n submitRequestAccepted,\n submitDeliveryIsQueuePending: Boolean(\n expiringSubmit &&\n isQueuedSubmitDeliveryPending(\n state.promptQueue,\n expiringSubmit.agentSessionId,\n expiringSubmitId\n )\n ),\n sendResultValidation,\n settingsResultValidation\n });\n const sessionReconcile = sessionReconcileReducer(\n state.sessionReconcile,\n intent,\n {\n deletedSessionIds: state.sessionLifecycle.deletedSessionIds,\n sessionsById: sessionLifecycle.state.sessionsById,\n workspaceReconcileCommandId:\n state.engineRuntime.workspaceReconcile.commandId\n }\n );\n const sessionMessages = sessionMessagesReducer(\n state.sessionMessages,\n intent,\n {\n previousSessionsById: state.sessionLifecycle.sessionsById,\n sessionsById: sessionLifecycle.state.sessionsById\n }\n );\n const composerOptions = composerOptionsReducer(state.composerOptions, intent);\n const tuttiModeActivation = tuttiModeActivationReducer(\n state.tuttiModeActivation,\n intent,\n { sessionsById: sessionLifecycle.state.sessionsById }\n );\n const unchanged =\n attentionReadState.state === state.attentionReadState &&\n engineRuntime.state === state.engineRuntime &&\n pendingIntents.state === state.pendingIntents &&\n planDecisions.state === state.planDecisions &&\n promptQueue.state === state.promptQueue &&\n sessionReconcile.state === state.sessionReconcile &&\n sessionMutations.state === state.sessionMutations &&\n sessionCommands.state === state.sessionCommands &&\n sessionLifecycle.state === state.sessionLifecycle &&\n sessionMessages.state === state.sessionMessages &&\n composerOptions.state === state.composerOptions &&\n tuttiModeActivation.state === state.tuttiModeActivation;\n const nextState = unchanged\n ? state\n : {\n attentionReadState: attentionReadState.state,\n engineRuntime: engineRuntime.state,\n pendingIntents: pendingIntents.state,\n planDecisions: planDecisions.state,\n promptQueue: promptQueue.state,\n sessionReconcile: sessionReconcile.state,\n sessionMutations: sessionMutations.state,\n sessionCommands: sessionCommands.state,\n sessionLifecycle: sessionLifecycle.state,\n sessionMessages: sessionMessages.state,\n composerOptions: composerOptions.state,\n tuttiModeActivation: tuttiModeActivation.state\n };\n return {\n commands: [\n ...attentionReadState.commands,\n ...engineRuntime.commands,\n ...pendingIntents.commands,\n ...planDecisions.commands,\n ...sessionReconcile.commands,\n ...sessionMutations.commands,\n ...sessionCommands.commands,\n ...sessionLifecycle.commands,\n ...promptQueue.commands,\n ...composerOptions.commands,\n ...tuttiModeActivation.commands\n ],\n ...(sessionMutations.followUpIntents\n ? { followUpIntents: sessionMutations.followUpIntents }\n : {}),\n state: nextState\n };\n}\n","// Workspace session engine contract types\n// (docs/architecture/agent-gui-refactor-plan.md, sections 3.3 and 4.1).\n//\n// The engine is the single orchestration layer for agent activity: user\n// intents and runtime events enter one dispatch loop, pure reducers compute\n// the next state plus command descriptions, and an executor without decision\n// logic performs the commands and feeds results back as new intents.\n//\n// This file is the skeleton contract. Domain slices (turn lifecycle, queue,\n// optimistic intents) extend the intent/command unions and the state tree as\n// the refactor slices land.\n\n/**\n * Engine instances are identified by the workspace plus origin pair. Origin\n * distinguishes runtimes feeding the same workspace (for example a local\n * tuttid runtime versus an external shared-room runtime), and is a first-class\n * identity rather than a patch field. Hosts create one engine per pair and\n * inject it explicitly; module-level singletons are forbidden.\n */\nexport interface AgentSessionEngineIdentity {\n origin: string;\n workspaceId: string;\n}\n\nexport const AGENT_SESSION_ENGINE_LOCAL_ORIGIN =\n \"WORKSPACE_AGENT_SESSION_ORIGIN_RUNTIME\";\n\nexport type EngineConnectionStatus = \"connected\" | \"disconnected\" | \"unknown\";\n\n// ---------------------------------------------------------------------------\n// Intents: the only input of the engine. User intents, runtime events,\n// command results, and expiries all enter the same dispatch loop.\n// ---------------------------------------------------------------------------\n\nexport interface EngineConnectionChangedIntent {\n type: \"engine/connectionChanged\";\n status: EngineConnectionStatus;\n workspaceId?: string;\n}\n\nexport interface WorkspaceReconcileRequestedIntent {\n type: \"workspace/reconcileRequested\";\n workspaceId: string;\n retry?: boolean;\n}\n\n/** Requests a command-port round trip; exercises the executor feedback loop. */\nexport interface EngineProbeRequestedIntent {\n type: \"engine/probeRequested\";\n probeId: string;\n timeoutMs?: number;\n}\n\n/** Asks the host clock to deliver an expiry intent at the given deadline. */\nexport interface EngineExpiryRequestedIntent {\n type: \"engine/expiryRequested\";\n expiryId: string;\n dueAtUnixMs: number;\n}\n\nexport interface EngineExpiryCancelRequestedIntent {\n type: \"engine/expiryCancelRequested\";\n expiryId: string;\n}\n\nexport type EngineCommandOutcome = \"failed\" | \"succeeded\" | \"timedOut\";\n\n/**\n * Every command execution settles back into the loop as this intent, so\n * failure and timeout handling are explicit reducer transitions instead of\n * executor-side improvisation.\n */\nexport interface EngineCommandResultIntent {\n type: \"engine/commandResult\";\n commandId: string;\n commandType: EngineExternalCommand[\"type\"];\n correlationId?: string;\n outcome: EngineCommandOutcome;\n value?: unknown;\n errorCode?: string;\n errorReason?: string;\n errorMessage?: string;\n}\n\n/**\n * Delivered by the expiry clock when a scheduled deadline elapses. Reducers\n * never read the wall clock or set timers; tests dispatch this directly.\n */\nexport interface EngineIntentExpiredIntent {\n type: \"engine/intentExpired\";\n expiryId: string;\n dueAtUnixMs: number;\n}\n\nexport type EngineIntent =\n | AttentionReadIntent\n | EngineCommandResultIntent\n | EngineConnectionChangedIntent\n | EngineExpiryCancelRequestedIntent\n | EngineExpiryRequestedIntent\n | EngineIntentExpiredIntent\n | EngineProbeRequestedIntent\n | WorkspaceReconcileRequestedIntent\n | PendingIntentsIntent\n | PlanDecisionIntent\n | PromptQueueIntent\n | SessionReconcileIntent\n | SessionMutationsIntent\n | SessionCommandsIntent\n | SessionLifecycleIntent\n | ComposerOptionsIntent\n | TuttiModeActivationIntent;\n\n// ---------------------------------------------------------------------------\n// Commands: descriptions returned by reducers. Internal commands are handled\n// by the expiry clock; external commands go through the injected command port.\n// ---------------------------------------------------------------------------\n\nexport interface EngineScheduleExpiryCommand {\n type: \"engine/scheduleExpiry\";\n expiryId: string;\n dueAtUnixMs: number;\n}\n\nexport interface EngineCancelExpiryCommand {\n type: \"engine/cancelExpiry\";\n expiryId: string;\n}\n\n/** Cancels one in-flight external command without coupling reducers to I/O. */\nexport interface EngineAbortExternalCommand {\n type: \"engine/abortExternalCommand\";\n reason: string;\n targetCommandId: string;\n}\n\nexport interface EngineExternalCommandBase {\n commandId: string;\n timeoutMs?: number;\n}\n\n/** Round-trip health probe; domain slices add real runtime commands here. */\nexport interface EngineProbeCommand extends EngineExternalCommandBase {\n type: \"engine/probe\";\n}\n\nexport interface EngineReconcileWorkspaceCommand extends EngineExternalCommandBase {\n type: \"engine/reconcileWorkspace\";\n workspaceId: string;\n}\n\nexport type EngineExpiryCommand =\n | EngineCancelExpiryCommand\n | EngineScheduleExpiryCommand;\n\nexport type EngineInternalCommand =\n | EngineAbortExternalCommand\n | EngineExpiryCommand;\n\nexport type EngineExternalCommand =\n | AttentionReadCommand\n | EngineProbeCommand\n | EngineReconcileWorkspaceCommand\n | InteractionRespondCommand\n | PlanSubmitDecisionCommand\n | PromptQueueSendCommand\n | SessionActivateCommand\n | SessionUpdateSettingsCommand\n | SessionUnactivateCommand\n | SessionReconcileCommand\n | SessionMutationCommand\n | TurnCancelCommand\n | ComposerOptionsCommand\n | TuttiModeActivationCommand;\n\nexport type EngineCommand = EngineExternalCommand | EngineInternalCommand;\n\nexport function isEngineInternalCommand(\n command: EngineCommand\n): command is EngineInternalCommand {\n return (\n command.type === \"engine/abortExternalCommand\" ||\n command.type === \"engine/cancelExpiry\" ||\n command.type === \"engine/scheduleExpiry\"\n );\n}\n\n// ---------------------------------------------------------------------------\n// State tree and reducer contract.\n// ---------------------------------------------------------------------------\n\nexport interface EngineRuntimeCommandResultRecord {\n commandId: string;\n errorMessage?: string;\n outcome: EngineCommandOutcome;\n}\n\n/** Engine self state: the minimal skeleton domain driving interleaving tests. */\nexport interface EngineRuntimeState {\n connection: EngineConnectionStatus;\n lastCommandResult: EngineRuntimeCommandResultRecord | null;\n lastExpiredIntentId: string | null;\n processedIntentCount: number;\n workspaceReconcile: {\n commandId: string | null;\n errorCode: string | null;\n errorMessage: string | null;\n status: \"idle\" | \"loading\" | \"ready\" | \"failed\" | \"unknown\";\n };\n}\n\nexport interface AgentSessionEngineState {\n attentionReadState: AttentionReadState;\n engineRuntime: EngineRuntimeState;\n pendingIntents: PendingIntentsState;\n planDecisions: PlanDecisionState;\n promptQueue: PromptQueueState;\n sessionReconcile: SessionReconcileState;\n sessionMutations: SessionMutationsState;\n sessionCommands: SessionCommandsState;\n sessionLifecycle: SessionLifecycleState;\n sessionMessages: SessionMessagesState;\n composerOptions: ComposerOptionsState;\n tuttiModeActivation: TuttiModeActivationState;\n}\n\nexport interface EngineReducerResult<TState> {\n commands: readonly EngineCommand[];\n followUpIntents?: readonly EngineIntent[];\n state: TState;\n}\n\n/**\n * Domain reducers are pure: no timers, no clocks, no I/O. Timing enters as\n * expiry intents; side effects leave as command descriptions.\n */\nexport type EngineDomainReducer<TState> = (\n state: TState,\n intent: EngineIntent\n) => EngineReducerResult<TState>;\n\n// ---------------------------------------------------------------------------\n// Host-injected ports. The engine directory forbids setTimeout/setInterval;\n// all scheduling goes through these ports so tests can drive a manual clock.\n// ---------------------------------------------------------------------------\n\nexport interface EngineScheduledTask {\n cancel(): void;\n}\n\nexport interface EngineScheduler {\n schedule(delayMs: number, task: () => void): EngineScheduledTask;\n}\n\nexport interface EngineClock {\n nowUnixMs(): number;\n}\n\n/** Transport adapter surface: executes external command descriptions. */\nexport interface EngineCommandPort {\n execute(\n command: EngineExternalCommand,\n options?: { signal?: AbortSignal }\n ): Promise<unknown>;\n}\n\n// ---------------------------------------------------------------------------\n// Engine public surface.\n// ---------------------------------------------------------------------------\n\nexport interface EngineDispatchOptions {\n /**\n * Coalesce this intent with other batched intents inside the frame window\n * (high-frequency streaming events). Non-batched dispatches flush pending\n * batched intents first so cross-intent ordering is preserved.\n */\n batch?: boolean;\n}\n\nexport type AgentSessionEngineListener = (\n state: AgentSessionEngineState\n) => void;\n\nexport interface AgentSessionEngine {\n readonly identity: AgentSessionEngineIdentity;\n dispatch(intent: EngineIntent, options?: EngineDispatchOptions): void;\n dispose(): void;\n getSnapshot(): AgentSessionEngineState;\n subscribe(listener: AgentSessionEngineListener): () => void;\n}\nimport type {\n PromptQueueIntent,\n PromptQueueSendCommand,\n PromptQueueState\n} from \"./promptQueue.types.ts\";\nimport type {\n PendingIntentsIntent,\n PendingIntentsState,\n SessionActivateCommand,\n SessionUpdateSettingsCommand,\n SessionUnactivateCommand\n} from \"./pendingIntents.types.ts\";\nimport type {\n InteractionRespondCommand,\n SessionLifecycleIntent,\n SessionLifecycleState,\n TurnCancelCommand\n} from \"./sessionLifecycle.types.ts\";\nimport type {\n SessionReconcileCommand,\n SessionReconcileIntent,\n SessionReconcileState\n} from \"./sessionReconcile.types.ts\";\nimport type {\n AttentionReadCommand,\n AttentionReadIntent,\n AttentionReadState\n} from \"./attentionReadState.types.ts\";\nimport type {\n PlanDecisionIntent,\n PlanDecisionState,\n PlanSubmitDecisionCommand\n} from \"./planDecision.types.ts\";\nimport type {\n SessionCommandsIntent,\n SessionCommandsState\n} from \"./sessionCommands.types.ts\";\nimport type { SessionMessagesState } from \"./sessionMessages.types.ts\";\nimport type {\n ComposerOptionsCommand,\n ComposerOptionsIntent,\n ComposerOptionsState\n} from \"./composerOptions.types.ts\";\nimport type {\n SessionMutationCommand,\n SessionMutationsIntent,\n SessionMutationsState\n} from \"./sessionMutations.types.ts\";\nimport type {\n TuttiModeActivationCommand,\n TuttiModeActivationIntent,\n TuttiModeActivationState\n} from \"./tuttiModeActivation.types.ts\";\n","import type { EngineDiagnosticSink } from \"./diagnostics.ts\";\nimport { createEngineEffectExecutor } from \"./effectExecutor.ts\";\nimport { createEngineExpiryClock } from \"./expiryClock.ts\";\nimport {\n createInitialAgentSessionEngineState,\n rootEngineReducer\n} from \"./rootReducer.ts\";\nimport {\n isEngineInternalCommand,\n type AgentSessionEngine,\n type AgentSessionEngineIdentity,\n type AgentSessionEngineListener,\n type AgentSessionEngineState,\n type EngineClock,\n type EngineCommandPort,\n type EngineDispatchOptions,\n type EngineIntent,\n type EngineScheduledTask,\n type EngineScheduler\n} from \"./types.ts\";\n\n// Session engine factory (docs/architecture/agent-gui-refactor-plan.md,\n// sections 3.3 and 4.1, engine skeleton slice).\n//\n// All state lives inside this closure: one instance per workspace + origin\n// pair, injected explicitly by the host. The dispatch loop is serial — an\n// intent dispatched while a drain is running is queued and reduced within the\n// same drain — and subscribers are notified at most once per drain cycle.\n\n/**\n * Frame window for coalescing high-frequency intents (streaming message\n * updates). Migrated from the desktop activity service's 33ms event batching;\n * the engine owns this timing once event wiring moves over in later slices.\n */\nexport const ENGINE_INTENT_BATCH_DELAY_MS = 33;\n\nexport interface CreateAgentSessionEngineInput {\n batchDelayMs?: number;\n clock: EngineClock;\n commandPort: EngineCommandPort;\n diagnosticSink?: EngineDiagnosticSink;\n identity: AgentSessionEngineIdentity;\n scheduler: EngineScheduler;\n}\n\nexport function createAgentSessionEngine({\n batchDelayMs = ENGINE_INTENT_BATCH_DELAY_MS,\n clock,\n commandPort,\n diagnosticSink,\n identity,\n scheduler\n}: CreateAgentSessionEngineInput): AgentSessionEngine {\n if (identity.workspaceId.trim().length === 0) {\n throw new Error(\"agent session engine requires a non-empty workspaceId\");\n }\n if (identity.origin.trim().length === 0) {\n throw new Error(\"agent session engine requires a non-empty origin\");\n }\n const engineIdentity: AgentSessionEngineIdentity = Object.freeze({\n origin: identity.origin,\n workspaceId: identity.workspaceId\n });\n\n let state: AgentSessionEngineState = createInitialAgentSessionEngineState();\n const listeners = new Set<AgentSessionEngineListener>();\n const intentQueue: EngineIntent[] = [];\n const batchedIntents: EngineIntent[] = [];\n let batchFlushTask: EngineScheduledTask | null = null;\n let draining = false;\n let disposed = false;\n\n const expiryClock = createEngineExpiryClock({\n clock,\n onExpired: (intent) => {\n dispatch(intent);\n },\n scheduler\n });\n\n const effectExecutor = createEngineEffectExecutor({\n commandPort,\n onResult: (intent) => {\n dispatch(intent);\n },\n scheduler,\n ...(diagnosticSink === undefined ? {} : { diagnosticSink })\n });\n\n function notifyListeners(): void {\n for (const listener of listeners) {\n try {\n listener(state);\n } catch (error) {\n if (diagnosticSink) {\n diagnosticSink({ error, type: \"listenerError\" });\n } else {\n console.error(\n \"[agent-session-engine-diagnostic]\",\n JSON.stringify({\n event: \"listener_error\",\n error: error instanceof Error ? error.message : String(error),\n origin: engineIdentity.origin,\n workspaceId: engineIdentity.workspaceId\n })\n );\n }\n }\n }\n }\n\n function drainQueue(): void {\n if (draining || disposed) {\n return;\n }\n draining = true;\n const stateBeforeDrain = state;\n try {\n for (\n let intent = intentQueue.shift();\n intent !== undefined;\n intent = intentQueue.shift()\n ) {\n const result = rootEngineReducer(state, intent);\n state = result.state;\n if (result.followUpIntents?.length) {\n intentQueue.unshift(...result.followUpIntents);\n }\n for (const command of result.commands) {\n if (command.type === \"engine/abortExternalCommand\") {\n effectExecutor.abort(command.targetCommandId, command.reason);\n } else if (isEngineInternalCommand(command)) {\n expiryClock.apply(command);\n } else {\n effectExecutor.execute(command);\n }\n }\n }\n } finally {\n draining = false;\n }\n if (state !== stateBeforeDrain) {\n notifyListeners();\n }\n }\n\n function flushBatchedIntents(): void {\n if (batchFlushTask !== null) {\n batchFlushTask.cancel();\n batchFlushTask = null;\n }\n if (batchedIntents.length === 0) {\n return;\n }\n intentQueue.push(...batchedIntents);\n batchedIntents.length = 0;\n }\n\n function dispatch(\n intent: EngineIntent,\n options?: EngineDispatchOptions\n ): void {\n if (disposed) {\n diagnosticSink?.({\n intentType: intent.type,\n type: \"intentDroppedAfterDispose\"\n });\n return;\n }\n const scopedIntent = intentForEngineIdentity(intent, engineIdentity);\n if (!scopedIntent) {\n diagnosticSink?.({\n intentType: intent.type,\n type: \"intentDroppedForIdentityMismatch\"\n });\n return;\n }\n if (options?.batch === true) {\n batchedIntents.push(scopedIntent);\n if (batchFlushTask === null) {\n batchFlushTask = scheduler.schedule(batchDelayMs, () => {\n batchFlushTask = null;\n flushBatchedIntents();\n drainQueue();\n });\n }\n return;\n }\n // Non-batched dispatch flushes the pending frame first so cross-intent\n // ordering is preserved (a terminal event never overtakes the streaming\n // updates that preceded it).\n flushBatchedIntents();\n intentQueue.push(scopedIntent);\n drainQueue();\n }\n\n return {\n identity: engineIdentity,\n dispatch,\n dispose() {\n if (disposed) {\n return;\n }\n disposed = true;\n if (batchFlushTask !== null) {\n batchFlushTask.cancel();\n batchFlushTask = null;\n }\n batchedIntents.length = 0;\n intentQueue.length = 0;\n expiryClock.dispose();\n effectExecutor.dispose();\n listeners.clear();\n },\n getSnapshot() {\n return state;\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n }\n };\n}\n\nfunction intentForEngineIdentity(\n intent: EngineIntent,\n identity: AgentSessionEngineIdentity\n): EngineIntent | null {\n if (\"workspaceId\" in intent && intent.workspaceId !== undefined) {\n if (intent.workspaceId.trim() !== identity.workspaceId) {\n return null;\n }\n }\n if (intent.type === \"session/upserted\") {\n return intent.session.workspaceId === identity.workspaceId ? intent : null;\n }\n if (intent.type === \"session/snapshotReceived\") {\n const sessions = intent.sessions.filter(\n (session) => session.workspaceId === identity.workspaceId\n );\n return sessions.length === intent.sessions.length\n ? intent\n : { ...intent, sessions };\n }\n return intent;\n}\n","import type { AgentSessionEngineState } from \"./types.ts\";\n\nexport function selectWorkspaceReconcileState(state: AgentSessionEngineState) {\n return state.engineRuntime.workspaceReconcile;\n}\n","import type { AgentSessionEngineState } from \"./types.ts\";\n\nexport function selectSessionMutation(\n state: AgentSessionEngineState,\n mutationId: string\n) {\n return state.sessionMutations.byMutationId[mutationId.trim()] ?? null;\n}\n\nexport function selectSessionMutations(state: AgentSessionEngineState) {\n return Object.values(state.sessionMutations.byMutationId);\n}\n","import { selectSessionMutation } from \"./sessionMutations.selectors.ts\";\nimport type {\n SessionMutationRecord,\n SessionMutationsIntent\n} from \"./sessionMutations.types.ts\";\nimport type { AgentSessionEngine } from \"./types.ts\";\n\nexport function dispatchSessionMutation(\n engine: AgentSessionEngine,\n intent: SessionMutationsIntent\n): Promise<SessionMutationRecord> {\n const mutationId = intent.mutationId.trim();\n return new Promise((resolve, reject) => {\n let settled = false;\n let unsubscribe = (): void => {};\n const observe = (): void => {\n if (settled) return;\n const record = selectSessionMutation(engine.getSnapshot(), mutationId);\n if (!record || record.status === \"inFlight\") return;\n settled = true;\n unsubscribe();\n if (record.status === \"succeeded\") {\n resolve(record);\n return;\n }\n const error = new Error(\n record.errorMessage ?? `session mutation ${record.status}`\n ) as Error & { code?: string };\n if (record.errorCode) error.code = record.errorCode;\n reject(error);\n };\n unsubscribe = engine.subscribe(observe);\n engine.dispatch(intent);\n const accepted = selectSessionMutation(engine.getSnapshot(), mutationId);\n if (!accepted) {\n settled = true;\n unsubscribe();\n reject(new Error(\"session mutation was not accepted\"));\n return;\n }\n observe();\n });\n}\n","import type { AgentActivityTuttiModeActivation } from \"../types.ts\";\nimport type { AgentSessionEngineState } from \"./types.ts\";\n\nexport interface TuttiModeActivationPresentation {\n activation: AgentActivityTuttiModeActivation | null;\n active: boolean;\n errorCode: string | null;\n errorMessage: string | null;\n orchestrationIntensity: number;\n updateStatus: \"idle\" | \"pending_create\" | \"updating\" | \"failed\" | \"uncertain\";\n}\n\nconst DEFAULT_ORCHESTRATION_INTENSITY = 50;\n\nexport function selectTuttiModeDraftIsActive(\n state: AgentSessionEngineState,\n draftKey: string\n): boolean {\n return (\n state.tuttiModeActivation.draftsByKey[draftKey.trim()]?.active === true\n );\n}\n\nexport function selectTuttiModeDraftOrchestrationIntensity(\n state: AgentSessionEngineState,\n draftKey: string\n): number | null {\n return (\n state.tuttiModeActivation.draftsByKey[draftKey.trim()]\n ?.orchestrationIntensity ?? null\n );\n}\n\nexport function selectTuttiModeActivationPresentation(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined,\n draftKey: string\n): TuttiModeActivationPresentation {\n const sessionId = agentSessionId?.trim() ?? \"\";\n const draftIntensity = selectTuttiModeDraftOrchestrationIntensity(\n state,\n draftKey\n );\n if (!sessionId) {\n return {\n activation: null,\n active: selectTuttiModeDraftIsActive(state, draftKey),\n errorCode: null,\n errorMessage: null,\n orchestrationIntensity: draftIntensity ?? DEFAULT_ORCHESTRATION_INTENSITY,\n updateStatus: \"idle\"\n };\n }\n const update = state.tuttiModeActivation.updatesBySessionId[sessionId];\n const activation =\n state.tuttiModeActivation.activationsBySessionId[sessionId] ?? null;\n if (update) {\n return {\n activation,\n active:\n update.updateStatus === \"failed\"\n ? activation?.status === \"active\"\n : update.status === \"active\",\n errorCode: update.errorCode,\n errorMessage: update.errorMessage,\n orchestrationIntensity:\n update.orchestrationIntensity ??\n activation?.currentRevision.orchestrationIntensity ??\n draftIntensity ??\n DEFAULT_ORCHESTRATION_INTENSITY,\n updateStatus:\n update.updateStatus === \"inFlight\" ? \"updating\" : update.updateStatus\n };\n }\n const pending =\n state.tuttiModeActivation.pendingCreatesBySessionId[sessionId];\n if (pending) {\n return {\n activation,\n active: pending.initialActivation.status === \"active\",\n errorCode: null,\n errorMessage: null,\n orchestrationIntensity:\n pending.initialActivation.orchestrationIntensity ??\n activation?.currentRevision.orchestrationIntensity ??\n draftIntensity ??\n DEFAULT_ORCHESTRATION_INTENSITY,\n updateStatus: \"pending_create\"\n };\n }\n return {\n activation,\n active: activation?.status === \"active\",\n errorCode: null,\n errorMessage: null,\n orchestrationIntensity:\n activation?.currentRevision.orchestrationIntensity ??\n draftIntensity ??\n DEFAULT_ORCHESTRATION_INTENSITY,\n updateStatus: \"idle\"\n };\n}\n\nexport function tuttiModeActivationPresentationsEqual(\n left: TuttiModeActivationPresentation,\n right: TuttiModeActivationPresentation\n): boolean {\n return (\n left.active === right.active &&\n left.errorCode === right.errorCode &&\n left.errorMessage === right.errorMessage &&\n left.orchestrationIntensity === right.orchestrationIntensity &&\n left.updateStatus === right.updateStatus &&\n activationIdentity(left.activation) === activationIdentity(right.activation)\n );\n}\n\nfunction activationIdentity(\n activation: AgentActivityTuttiModeActivation | null\n): string {\n return activation\n ? `${activation.id}:${activation.currentRevision.revision}:${activation.status}`\n : \"\";\n}\n","import type { AgentSessionEngineState } from \"./types.ts\";\nimport type { AttentionReadPartition } from \"./attentionReadState.types.ts\";\n\nexport function selectSessionAttention(\n state: AgentSessionEngineState,\n userId: string | null | undefined,\n agentSessionId: string | null | undefined\n) {\n const id = agentSessionId?.trim() ?? \"\";\n const user = userId?.trim() ?? \"\";\n return (\n state.attentionReadState.partitionsByUserId[user]?.recordsBySessionId[id] ??\n null\n );\n}\n\nexport function selectAttentionReadState(\n state: AgentSessionEngineState,\n userId: string | null | undefined\n): AttentionReadPartition {\n const user = userId?.trim() ?? \"\";\n return (\n state.attentionReadState.partitionsByUserId[user] ?? {\n hydrated: null,\n lastError: null,\n recordsBySessionId: {},\n workspaceId: null,\n writeDirty: false,\n writeInFlightCommandId: null,\n writeRevision: 0\n }\n );\n}\n","import type { AgentActivityMessage } from \"../types.ts\";\nimport type { AgentSessionEngineState } from \"./types.ts\";\n\nconst EMPTY_MESSAGES: readonly AgentActivityMessage[] = [];\n\nexport function selectSessionMessagesById(\n state: AgentSessionEngineState\n): Readonly<Record<string, readonly AgentActivityMessage[]>> {\n return state.sessionMessages.messagesBySessionId;\n}\n\nexport function selectSessionMessages(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): readonly AgentActivityMessage[] {\n const id = agentSessionId?.trim() ?? \"\";\n if (!id) return EMPTY_MESSAGES;\n return state.sessionMessages.messagesBySessionId[id] ?? EMPTY_MESSAGES;\n}\n","import type {\n AgentActivityComposerOptions,\n AgentActivityComposerOptionsLoadStatus\n} from \"../types.ts\";\nimport type { AgentSessionEngineState } from \"./types.ts\";\n\nexport function selectComposerOptions(\n state: AgentSessionEngineState,\n targetKey: string | null | undefined\n): AgentActivityComposerOptions | null {\n const key = targetKey?.trim() ?? \"\";\n if (!key) return null;\n return state.composerOptions.optionsByTargetKey[key] ?? null;\n}\n\nexport function selectComposerOptionsLoadStatus(\n state: AgentSessionEngineState,\n targetKey: string | null | undefined\n): AgentActivityComposerOptionsLoadStatus | undefined {\n const key = targetKey?.trim() ?? \"\";\n if (!key) return undefined;\n return state.composerOptions.entriesByTargetKey[key]?.status;\n}\n","import type { SessionReconcileRecord } from \"./sessionReconcile.types.ts\";\nimport type { AgentSessionEngineState } from \"./types.ts\";\n\nexport function selectEngineSessionReconcile(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): SessionReconcileRecord | null {\n const id = agentSessionId?.trim() ?? \"\";\n return id ? (state.sessionReconcile.recordsBySessionId[id] ?? null) : null;\n}\n\nexport function selectEngineSessionDetailHydrated(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): boolean {\n const id = agentSessionId?.trim() ?? \"\";\n if (!id) return false;\n return (\n Object.prototype.hasOwnProperty.call(\n state.sessionMessages.messagesBySessionId,\n id\n ) ||\n state.sessionReconcile.recordsBySessionId[id]?.messagesHydrated === true\n );\n}\n\nexport function selectEngineSessionDetailLoading(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): boolean {\n const record = selectEngineSessionReconcile(state, agentSessionId);\n if (!record || selectEngineSessionDetailHydrated(state, agentSessionId)) {\n return false;\n }\n return (\n record.pendingMessages ||\n record.inFlightScope === \"messages\" ||\n record.inFlightScope === \"state_and_messages\"\n );\n}\n","import type { AgentSessionEngineState } from \"./types.ts\";\n\nexport function selectPlanDecisionForTurn(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined,\n turnId: string | null | undefined\n) {\n const sessionId = agentSessionId?.trim() ?? \"\";\n const id = turnId?.trim() ?? \"\";\n return (\n Object.values(state.planDecisions.byId).find(\n (record) => record.agentSessionId === sessionId && record.turnId === id\n ) ?? null\n );\n}\n\nexport function selectPlanTurnDismissed(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined,\n turnId: string | null | undefined\n): boolean {\n const sessionId = agentSessionId?.trim() ?? \"\";\n const id = turnId?.trim() ?? \"\";\n return state.planDecisions.dismissedByTurnKey[`${sessionId}\\0${id}`] === true;\n}\n","import type { AgentSessionEngineState } from \"./types.ts\";\n\nconst EMPTY_ENGINE_AVAILABLE_COMMANDS: never[] = [];\n\nexport function selectEngineAvailableCommands(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n) {\n const id = agentSessionId?.trim() ?? \"\";\n const entry = state.sessionCommands.bySessionId[id];\n const session = state.sessionLifecycle.sessionsById[id];\n return entry && session?.workspaceId === entry.workspaceId\n ? entry.commands\n : EMPTY_ENGINE_AVAILABLE_COMMANDS;\n}\n","import type { AgentSessionEngineState } from \"./types.ts\";\nimport type {\n EngineQueuedPrompt,\n PromptQueueRecord\n} from \"./promptQueue.types.ts\";\n\nexport function selectEnginePromptQueue(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): PromptQueueRecord | null {\n const id = agentSessionId?.trim() ?? \"\";\n return state.promptQueue.recordsBySessionId[id] ?? null;\n}\n\nexport function selectEngineQueuedPrompts(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): readonly EngineQueuedPrompt[] {\n return selectEnginePromptQueue(state, agentSessionId)?.prompts ?? [];\n}\n\nexport function selectEngineHasQueuedPrompts(\n state: AgentSessionEngineState\n): boolean {\n return Object.values(state.promptQueue.recordsBySessionId).some(\n (record) => record.prompts.length > 0\n );\n}\n\nexport function selectEngineQueuedPrompt(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined,\n promptId: string | null | undefined\n): EngineQueuedPrompt | null {\n const id = promptId?.trim() ?? \"\";\n return (\n selectEngineQueuedPrompts(state, agentSessionId).find(\n (prompt) => prompt.id === id\n ) ?? null\n );\n}\n\nexport function selectEnginePromptQueueError(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined\n): string | null {\n return selectEnginePromptQueue(state, agentSessionId)?.failureMessage ?? null;\n}\n\nexport function selectEngineHasVisibleQueuedSubmit(\n state: AgentSessionEngineState,\n agentSessionId: string | null | undefined,\n clientSubmitId: string | null | undefined\n): boolean {\n const id = clientSubmitId?.trim() ?? \"\";\n return selectEngineQueuedPrompts(state, agentSessionId).some(\n (prompt) => prompt.clientSubmitId === id && prompt.visibleInQueue !== false\n );\n}\n","import type { AgentActivityInteraction, AgentActivityTurn } from \"./types.ts\";\n\ninterface WorkspaceAgentSessionProjectionInput {\n activeTurn: AgentActivityTurn | null;\n latestTurn: AgentActivityTurn | null;\n pendingInteractions: readonly AgentActivityInteraction[];\n}\n\nexport type WorkspaceAgentSessionDerivedStatus =\n | \"working\"\n | \"waiting\"\n | \"completed\"\n | \"failed\"\n | \"canceled\"\n | \"unknown\";\n\nexport function workspaceAgentSessionStatus(\n session: Pick<\n WorkspaceAgentSessionProjectionInput,\n \"activeTurn\" | \"latestTurn\" | \"pendingInteractions\"\n >\n): WorkspaceAgentSessionDerivedStatus {\n if (session.pendingInteractions.length > 0) return \"waiting\";\n const activeTurn = session.activeTurn;\n if (activeTurn && activeTurn.phase !== \"settled\") {\n return activeTurn.phase === \"waiting\" ? \"waiting\" : \"working\";\n }\n switch (session.latestTurn?.outcome) {\n case \"failed\":\n return \"failed\";\n case \"canceled\":\n return \"canceled\";\n case \"completed\":\n return \"completed\";\n default:\n return \"unknown\";\n }\n}\n"],"mappings":"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","names":["recordValue","result","recordValue","text","recordValue","stringValue","recordValue","NO_COMMANDS","turnId","unchanged","NO_COMMANDS","unchanged","result","NO_COMMANDS","unchanged","record","result","NO_COMMANDS","unchanged","result","id","operation","changed","NO_COMMANDS","result","unchanged","changed","key","response","setOperation","next","sessionVersion","NO_COMMANDS","unchanged","replaceRecord","NO_COMMANDS","unchanged","result","NO_COMMANDS","unchanged","NO_COMMANDS","unchanged","NO_COMMANDS","unchanged","changed","NO_COMMANDS","unchanged","changed","NO_COMMANDS","unchanged","replaceRecord","result","NO_COMMANDS","unchanged","removeSession","pendingCreatesBySessionId","changed","activation","unchanged","result"]}
|