@codex-app-sdk/core 0.15.0 → 0.16.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surface-bridge-CUuIfmG5.js","names":[],"sources":["../../src/surface-state.ts","../../src/surface-bridge.ts"],"sourcesContent":["import type {\n CodexSurfaceSnapshot,\n CodexSurfaceStateChange,\n CodexSurfaceStatePatch,\n CodexVersionedSurfaceSnapshot,\n} from './surface';\n\ntype Awaitable<Value> = Value | Promise<Value>;\ntype KeyedItem = { id: string };\ntype SnapshotRecord = Record<string, unknown>;\n\n/**\n * A state source that can serve a versioned base snapshot and the patches that\n * follow it. `getVersionedSnapshot` resolves null when the other side of a\n * transport cannot stream patches; consumers then use `onStateChange`.\n */\nexport type CodexSurfaceStatePatchSource = {\n getVersionedSnapshot(): Awaitable<CodexVersionedSurfaceSnapshot | null>;\n onStatePatch(listener: (patch: CodexSurfaceStatePatch) => void): () => void;\n};\n\nexport type SubscribeCodexSurfaceStateOptions = {\n /**\n * Whether to notify with the base snapshot once it arrives. Defaults to\n * true. Turn it off when another channel already delivered that state.\n */\n emitInitialSnapshot?: boolean;\n};\n\nexport type CodexSurfaceStateSource =\n | CodexSurfaceStatePatchSource\n | (Partial<CodexSurfaceStatePatchSource> & {\n onStateChange(listener: (snapshot: CodexSurfaceSnapshot) => void): () => void;\n });\n\nexport type CodexSurfaceStateMirrorResult =\n | { status: 'applied'; snapshot: CodexSurfaceSnapshot }\n | { status: 'ignored' }\n | { status: 'resync' };\n\n/** Keeps a local snapshot current from a versioned base and sequential patches. */\nexport type CodexSurfaceStateMirror = {\n readonly snapshot: CodexSurfaceSnapshot | null;\n /** The state version of `snapshot`, or -1 before the first base. */\n readonly version: number;\n /** Adopts an authoritative base, then replays buffered patches that are newer than it. */\n reset(state: CodexVersionedSurfaceSnapshot): CodexSurfaceSnapshot;\n /** Applies the next patch, or buffers it and asks for a new base when the sequence is broken. */\n receive(patch: CodexSurfaceStatePatch): CodexSurfaceStateMirrorResult;\n};\n\nconst maximumBufferedPatches = 1_000;\n\nexport function isCodexSurfaceStatePatchSource(value: unknown): value is CodexSurfaceStatePatchSource {\n const candidate = value as Partial<CodexSurfaceStatePatchSource> | null;\n return typeof candidate?.getVersionedSnapshot === 'function' && typeof candidate.onStatePatch === 'function';\n}\n\n/**\n * Describes how `next` differs from `previous` by reference. Arrays whose items\n * all carry unique string ids become `list` changes that ship only the items\n * whose identity changed; everything else is replaced or deleted per key.\n */\nexport function diffCodexSurfaceState(\n previous: CodexSurfaceSnapshot,\n next: CodexSurfaceSnapshot,\n): CodexSurfaceStateChange[] {\n const before = previous as unknown as SnapshotRecord;\n const after = next as unknown as SnapshotRecord;\n const changes: CodexSurfaceStateChange[] = [];\n for (const key of new Set([...Object.keys(before), ...Object.keys(after)])) {\n const snapshotKey = key as keyof CodexSurfaceSnapshot;\n if (before[key] === after[key]) continue;\n if (!(key in after)) {\n changes.push({ type: 'delete', key: snapshotKey });\n continue;\n }\n changes.push(keyedListChange(snapshotKey, before[key], after[key]) ?? {\n type: 'set',\n key: snapshotKey,\n value: after[key],\n });\n }\n return changes;\n}\n\n/** Applies changes to a snapshot without mutating it; unchanged values keep their identity. */\nexport function applyCodexSurfaceStateChanges(\n snapshot: CodexSurfaceSnapshot,\n changes: readonly CodexSurfaceStateChange[],\n): CodexSurfaceSnapshot {\n const current = snapshot as unknown as SnapshotRecord;\n const next: SnapshotRecord = { ...current };\n for (const change of changes) {\n if (change.type === 'delete') {\n delete next[change.key];\n } else if (change.type === 'set') {\n next[change.key] = change.value;\n } else {\n const previous = current[change.key];\n if (!Array.isArray(previous)) throw new Error(`Cannot apply a list patch to non-list state '${change.key}'`);\n const itemsById = new Map((previous as KeyedItem[]).map((item) => [item.id, item]));\n for (const item of change.items) itemsById.set(item.id, item);\n next[change.key] = change.ids.map((id) => {\n const item = itemsById.get(id);\n if (!item) throw new Error(`State patch references unknown '${change.key}' item '${id}'`);\n return item;\n });\n }\n }\n return next as unknown as CodexSurfaceSnapshot;\n}\n\nexport function createCodexSurfaceStateMirror(): CodexSurfaceStateMirror {\n let snapshot: CodexSurfaceSnapshot | null = null;\n let version = -1;\n let stale = true;\n const pending: CodexSurfaceStatePatch[] = [];\n\n const buffer = (patch: CodexSurfaceStatePatch): CodexSurfaceStateMirrorResult => {\n stale = true;\n pending.push(patch);\n if (pending.length > maximumBufferedPatches) pending.shift();\n return { status: 'resync' };\n };\n\n const mirror: CodexSurfaceStateMirror = {\n get snapshot() {\n return snapshot;\n },\n get version() {\n return version;\n },\n reset(state) {\n snapshot = state.snapshot;\n version = state.version;\n stale = false;\n const replay = pending.splice(0).sort((left, right) => left.version - right.version);\n for (const patch of replay) {\n if (mirror.receive(patch).status === 'resync') break;\n }\n return snapshot;\n },\n receive(patch) {\n if (stale || !snapshot) return buffer(patch);\n if (patch.version <= version) return { status: 'ignored' };\n if (patch.version !== version + 1) return buffer(patch);\n try {\n snapshot = applyCodexSurfaceStateChanges(snapshot, patch.changes);\n } catch {\n return buffer(patch);\n }\n version = patch.version;\n return { status: 'applied', snapshot };\n },\n };\n return mirror;\n}\n\n/**\n * Subscribes to surface state, mirroring patches locally when the source\n * supports them. Unchanged messages, turns, and other keyed items keep their\n * object identity between notifications, so UI frameworks can skip them.\n * Falls back to full `onStateChange` snapshots when the source has no patch\n * members or reports that patches are unavailable.\n */\nexport function subscribeCodexSurfaceState(\n source: CodexSurfaceStateSource,\n listener: (snapshot: CodexSurfaceSnapshot) => void,\n options: SubscribeCodexSurfaceStateOptions = {},\n): () => void {\n const subscribeToSnapshots = () => (\n 'onStateChange' in source && typeof source.onStateChange === 'function'\n ? source.onStateChange(listener)\n : () => undefined\n );\n if (!isCodexSurfaceStatePatchSource(source)) return subscribeToSnapshots();\n const mirror = createCodexSurfaceStateMirror();\n let active = true;\n let initialized = false;\n let resyncing = false;\n let unsubscribe: () => void = () => undefined;\n const resync = () => {\n if (resyncing || !active) return;\n resyncing = true;\n void Promise.resolve()\n .then(() => source.getVersionedSnapshot())\n .then((state) => {\n resyncing = false;\n if (!active) return;\n if (!isVersionedSnapshot(state)) {\n if (initialized) return;\n unsubscribe();\n unsubscribe = subscribeToSnapshots();\n return;\n }\n const snapshot = mirror.reset(state);\n // Buffered patches replayed onto the base are changes even when the base itself is not reported.\n const notify = initialized || options.emitInitialSnapshot !== false || mirror.version > state.version;\n initialized = true;\n if (notify) listener(snapshot);\n }, () => {\n resyncing = false;\n });\n };\n unsubscribe = source.onStatePatch((patch) => {\n const result = mirror.receive(patch);\n if (result.status === 'applied') listener(result.snapshot);\n else if (result.status === 'resync') resync();\n });\n resync();\n return () => {\n active = false;\n unsubscribe();\n };\n}\n\nfunction keyedListChange(\n key: keyof CodexSurfaceSnapshot,\n before: unknown,\n after: unknown,\n): CodexSurfaceStateChange | null {\n if (!Array.isArray(before) || !Array.isArray(after)) return null;\n const previousById = new Map<string, unknown>();\n for (const item of before) {\n if (!isKeyedItem(item) || previousById.has(item.id)) return null;\n previousById.set(item.id, item);\n }\n const ids: string[] = [];\n const items: KeyedItem[] = [];\n const seen = new Set<string>();\n for (const item of after) {\n if (!isKeyedItem(item) || seen.has(item.id)) return null;\n seen.add(item.id);\n ids.push(item.id);\n if (previousById.get(item.id) !== item) items.push(item);\n }\n // Replacing the whole list is smaller when nothing can be reused.\n return items.length === after.length ? null : { type: 'list', key, ids, items };\n}\n\nfunction isVersionedSnapshot(value: unknown): value is CodexVersionedSurfaceSnapshot {\n const candidate = value as Partial<CodexVersionedSurfaceSnapshot> | null | undefined;\n return Number.isSafeInteger(candidate?.version)\n && Boolean(candidate?.snapshot)\n && typeof candidate?.snapshot === 'object';\n}\n\nfunction isKeyedItem(value: unknown): value is KeyedItem {\n return Boolean(value) && typeof value === 'object' && typeof (value as { id?: unknown }).id === 'string';\n}\n","import type {\n CodexConversationEvent,\n CodexConversationHistory,\n CodexConversationHistoryPage,\n CodexConversationPromptHistory,\n CodexConversationSnapshot,\n CodexSurfaceApi,\n CodexSurfaceApprovalDecision,\n CodexSurfaceApprovalScope,\n CodexSurfaceAskUserAnswers,\n CodexSurfaceClientRequestResponse,\n CodexSurfaceJsonValue,\n CodexRendererAttachment,\n CodexRendererSendMessageOptions,\n CodexSurfaceAttachment,\n CodexSurfaceRendererApi,\n CreateCodexRendererConversationOptions,\n ListCodexConversationsOptions,\n ListCodexModelsOptions,\n ReadCodexRateLimitsOptions,\n ConsumeCodexRateLimitResetCreditOptions,\n SendCodexMessageOptions,\n StartCodexReviewOptions,\n StartCodexLiveChatOptions,\n UpdateCodexConversationSettings,\n} from './surface';\n\ntype RequiredRendererApi = Required<CodexSurfaceRendererApi>;\nexport type CodexSurfaceBridgeOperation = Exclude<\n keyof RequiredRendererApi,\n 'onEvent' | 'onStateChange' | 'onStatePatch' | 'getVersionedSnapshot'\n>;\ntype OperationFunction<Name extends CodexSurfaceBridgeOperation> = Extract<\n RequiredRendererApi[Name],\n (...args: never[]) => unknown\n>;\nexport type CodexSurfaceBridgeOperationArguments<Name extends CodexSurfaceBridgeOperation> =\n Parameters<OperationFunction<Name>>;\nexport type CodexSurfaceBridgeOperationResult<Name extends CodexSurfaceBridgeOperation> =\n Awaited<ReturnType<OperationFunction<Name>>>;\ntype Awaitable<Value> = Value | Promise<Value>;\ntype SurfaceOperationFunction<Name extends CodexSurfaceBridgeOperation> = Name extends keyof Required<CodexSurfaceApi>\n ? Extract<Required<CodexSurfaceApi>[Name], (...args: never[]) => unknown>\n : never;\ntype OptionalAccountOperation = 'readRateLimits' | 'readAccountUsage' | 'consumeRateLimitResetCredit';\ntype BridgeOperationMethods = {\n [Name in CodexSurfaceBridgeOperation]: (\n ...args: Parameters<SurfaceOperationFunction<Name>>\n ) => Awaitable<Awaited<ReturnType<SurfaceOperationFunction<Name>>>>;\n};\nexport type CodexSurfaceBridgeTarget = Omit<BridgeOperationMethods, OptionalAccountOperation>\n & Partial<Pick<BridgeOperationMethods, OptionalAccountOperation>>\n & Pick<CodexSurfaceApi, 'onEvent' | 'onStateChange'>;\n\nexport type CodexSurfaceBridgeAttachmentResolver = (\n attachment: CodexRendererAttachment,\n) => Awaitable<CodexSurfaceAttachment>;\n\nexport type CodexSurfaceBridgeInvokeOptions = {\n operationLabel?: string;\n resolveAttachment?: CodexSurfaceBridgeAttachmentResolver;\n};\n\ntype CodexConversationBridgeOperationFunctions = {\n clearGoal(): Awaitable<CodexConversationSnapshot>;\n compactConversation(): Awaitable<CodexConversationSnapshot>;\n continueInterruptedTurn(): Awaitable<CodexConversationSnapshot>;\n deleteTurn(turnId: string): Awaitable<CodexConversationSnapshot>;\n deleteQueuedPrompt(promptId: string): Awaitable<CodexConversationSnapshot>;\n editTurn(turnId: string, content: string): Awaitable<CodexConversationSnapshot>;\n forkTurn(turnId: string): Awaitable<CodexConversationSnapshot>;\n getSnapshot(): Awaitable<CodexConversationSnapshot>;\n interrupt(): Awaitable<CodexConversationSnapshot>;\n loadOlderConversationHistory(): Awaitable<CodexConversationHistoryPage>;\n readConversationHistory(): Awaitable<CodexConversationHistory>;\n readConversationPromptHistory(): Awaitable<CodexConversationPromptHistory>;\n renameConversation(title: string): Awaitable<CodexConversationSnapshot>;\n respondToClientRequest(response: CodexSurfaceClientRequestResponse): Awaitable<CodexConversationSnapshot>;\n resolveApproval(\n approvalId: string,\n decision: CodexSurfaceApprovalDecision,\n scope?: CodexSurfaceApprovalScope,\n ): Awaitable<CodexConversationSnapshot>;\n retryTurn(turnId: string): Awaitable<CodexConversationSnapshot>;\n sendMessage(prompt: string, options?: CodexRendererSendMessageOptions): Awaitable<CodexConversationSnapshot>;\n setGoal(objective: string, tokenBudget?: number | null): Awaitable<CodexConversationSnapshot>;\n startReview(options?: StartCodexReviewOptions): Awaitable<CodexConversationSnapshot>;\n steerMessage(prompt: string, options?: CodexRendererSendMessageOptions): Awaitable<CodexConversationSnapshot>;\n steerQueuedPrompt(promptId: string, prompt?: string): Awaitable<CodexConversationSnapshot>;\n updateConversationSettings(settings: UpdateCodexConversationSettings): Awaitable<CodexConversationSnapshot>;\n updateQueuedPrompt(promptId: string, prompt: string): Awaitable<CodexConversationSnapshot>;\n};\n\nexport const codexConversationBridgeOperations = [\n 'clearGoal', 'compactConversation', 'continueInterruptedTurn', 'deleteTurn', 'deleteQueuedPrompt', 'editTurn',\n 'forkTurn', 'getSnapshot', 'interrupt', 'loadOlderConversationHistory',\n 'readConversationHistory', 'readConversationPromptHistory', 'renameConversation',\n 'respondToClientRequest', 'resolveApproval', 'retryTurn', 'sendMessage', 'setGoal',\n 'startReview', 'steerMessage', 'steerQueuedPrompt', 'updateConversationSettings',\n 'updateQueuedPrompt',\n] as const satisfies readonly (keyof CodexConversationBridgeOperationFunctions)[];\n\nexport type CodexConversationBridgeOperation = typeof codexConversationBridgeOperations[number];\nexport type CodexConversationBridgeOperationArguments<Name extends CodexConversationBridgeOperation> =\n Parameters<CodexConversationBridgeOperationFunctions[Name]>;\nexport type CodexConversationBridgeOperationResult<Name extends CodexConversationBridgeOperation> =\n Awaited<ReturnType<CodexConversationBridgeOperationFunctions[Name]>>;\n\nexport type CodexConversationBridgeHandle = {\n clearGoal(): Awaitable<CodexConversationSnapshot>;\n compact(): Awaitable<CodexConversationSnapshot>;\n continueInterruptedTurn(): Awaitable<CodexConversationSnapshot>;\n deleteTurn(turnId: string): Awaitable<CodexConversationSnapshot>;\n deleteQueuedPrompt(promptId: string): Awaitable<CodexConversationSnapshot>;\n editTurn(turnId: string, content: string): Awaitable<CodexConversationSnapshot>;\n forkTurn(turnId: string): Awaitable<{ snapshot: CodexConversationSnapshot }>;\n getSnapshot(): CodexConversationSnapshot;\n interrupt(): Awaitable<CodexConversationSnapshot>;\n loadOlderHistory(): Awaitable<CodexConversationHistoryPage>;\n onEvent(listener: (event: CodexConversationEvent) => void): () => void;\n onStateChange(listener: (snapshot: CodexConversationSnapshot) => void): () => void;\n readHistory(): Awaitable<CodexConversationHistory>;\n readPromptHistory(): Awaitable<CodexConversationPromptHistory>;\n rename(title: string): Awaitable<CodexConversationSnapshot>;\n respondToClientRequest(response: CodexSurfaceClientRequestResponse): Awaitable<CodexConversationSnapshot>;\n resolveApproval(\n approvalId: string,\n decision: CodexSurfaceApprovalDecision,\n scope?: CodexSurfaceApprovalScope,\n ): Awaitable<CodexConversationSnapshot>;\n retryTurn(turnId: string): Awaitable<CodexConversationSnapshot>;\n sendMessage(prompt: string, options?: SendCodexMessageOptions): Awaitable<CodexConversationSnapshot>;\n setGoal(objective: string, tokenBudget?: number | null): Awaitable<CodexConversationSnapshot>;\n startReview(options?: StartCodexReviewOptions): Awaitable<CodexConversationSnapshot>;\n steerMessage(prompt: string, options?: SendCodexMessageOptions): Awaitable<CodexConversationSnapshot>;\n steerQueuedPrompt(promptId: string, prompt?: string): Awaitable<CodexConversationSnapshot>;\n updateQueuedPrompt(promptId: string, prompt: string): Awaitable<CodexConversationSnapshot>;\n updateSettings(settings: UpdateCodexConversationSettings): Awaitable<CodexConversationSnapshot>;\n};\n\nexport type CodexConversationBridgeTarget = {\n conversation(conversationId: string): CodexConversationBridgeHandle;\n};\n\nexport type CodexConversationBridgeNotification =\n | {\n type: 'snapshot';\n conversationId: string;\n snapshot: CodexConversationSnapshot;\n }\n | {\n type: 'event';\n conversationId: string;\n event: CodexConversationEvent;\n };\n\nconst conversationOperationSet = new Set<string>(codexConversationBridgeOperations);\n\nexport function isCodexConversationBridgeOperation(value: unknown): value is CodexConversationBridgeOperation {\n return typeof value === 'string' && conversationOperationSet.has(value);\n}\n\nexport async function invokeCodexConversationBridgeOperation<Name extends CodexConversationBridgeOperation>(\n target: CodexConversationBridgeTarget,\n conversationId: string,\n operation: Name,\n args: readonly unknown[],\n options: CodexSurfaceBridgeInvokeOptions = {},\n): Promise<CodexConversationBridgeOperationResult<Name>> {\n const id = nonEmptyString(conversationId, 'Conversation id');\n const [minimum, maximum] = conversationArities[operation];\n if (args.length < minimum || args.length > maximum) {\n throw new TypeError(`${options.operationLabel ?? operation} received an invalid number of arguments`);\n }\n const conversation = target.conversation(id);\n const bridgeTarget = conversationOperationTarget(conversation);\n const result = await invokeCodexSurfaceBridgeOperation(bridgeTarget, operation, args, options);\n return result as CodexConversationBridgeOperationResult<Name>;\n}\n\nexport function subscribeCodexConversationBridge(\n target: CodexConversationBridgeTarget,\n conversationId: string,\n listener: (notification: CodexConversationBridgeNotification) => void,\n): () => void {\n const id = nonEmptyString(conversationId, 'Conversation id');\n const conversation = target.conversation(id);\n const emitSnapshot = (snapshot: CodexConversationSnapshot) => {\n if (snapshot.activeConversationId === id) {\n listener({ type: 'snapshot', conversationId: id, snapshot });\n }\n };\n const emitEvent = (event: CodexConversationEvent) => {\n if (event.conversationId === id) listener({ type: 'event', conversationId: id, event });\n };\n const unsubscribeState = conversation.onStateChange(emitSnapshot);\n let unsubscribeEvent: () => void;\n try {\n unsubscribeEvent = conversation.onEvent(emitEvent);\n } catch (error) {\n unsubscribeState();\n throw error;\n }\n return () => {\n unsubscribeEvent();\n unsubscribeState();\n };\n}\n\n/**\n * Emits exactly one targeted snapshot followed by semantic conversation events.\n * Events raised while the initial snapshot is captured are buffered so consumers\n * can always initialize a replica before applying deltas.\n */\nexport function subscribeCodexConversationReplicaBridge(\n target: CodexConversationBridgeTarget,\n conversationId: string,\n listener: (notification: CodexConversationBridgeNotification) => void,\n): () => void {\n const id = nonEmptyString(conversationId, 'Conversation id');\n const conversation = target.conversation(id);\n const pending: CodexConversationEvent[] = [];\n let initialized = false;\n const unsubscribe = conversation.onEvent((event) => {\n if (event.conversationId !== id) return;\n if (!initialized) pending.push(event);\n else listener({ type: 'event', conversationId: id, event });\n });\n try {\n const snapshot = conversation.getSnapshot();\n if (snapshot.activeConversationId !== id) {\n throw new Error(\n `Snapshot belongs to '${snapshot.activeConversationId}', not bridge conversation '${id}'`,\n );\n }\n listener({ type: 'snapshot', conversationId: id, snapshot });\n initialized = true;\n for (const event of pending) listener({ type: 'event', conversationId: id, event });\n pending.length = 0;\n } catch (error) {\n unsubscribe();\n throw error;\n }\n return unsubscribe;\n}\n\nexport const codexSurfaceBridgeOperations = [\n 'archiveConversation', 'cancelLogin', 'clearGoal', 'compactConversation', 'connect',\n 'continueInterruptedTurn', 'createConversation', 'deleteConversation', 'deleteTurn', 'deleteQueuedPrompt',\n 'editTurn', 'forkTurn', 'getSnapshot', 'interrupt', 'listConversations',\n 'listModels', 'loadOlderConversationHistory', 'logout', 'readConversationHistory',\n 'readConversationPromptHistory', 'refreshAccount', 'refreshConversations', 'renameConversation', 'respondToClientRequest',\n 'resolveApproval', 'retryTurn', 'selectConversation', 'sendMessage', 'setGoal',\n 'startChatGptDeviceCodeLogin', 'startChatGptLogin', 'startReview', 'steerMessage', 'steerQueuedPrompt',\n 'unarchiveConversation', 'updateConversationSettings', 'updateQueuedPrompt',\n 'startLiveChat', 'stopLiveChat',\n 'readRateLimits',\n 'readAccountUsage',\n 'consumeRateLimitResetCredit',\n] as const satisfies readonly CodexSurfaceBridgeOperation[];\n\nconst operationSet = new Set<string>(codexSurfaceBridgeOperations);\nexport const codexSurfaceBridgeArities: Readonly<\n Record<CodexSurfaceBridgeOperation, readonly [minimum: number, maximum: number]>\n> = {\n startLiveChat: [2, 2], stopLiveChat: [1, 1],\n archiveConversation: [1, 1], cancelLogin: [0, 1], clearGoal: [0, 0],\n compactConversation: [0, 0], connect: [0, 0], continueInterruptedTurn: [0, 0], createConversation: [0, 1],\n deleteConversation: [1, 1], deleteTurn: [1, 1], deleteQueuedPrompt: [1, 1],\n editTurn: [2, 2], forkTurn: [1, 1], getSnapshot: [0, 0], interrupt: [0, 0],\n listConversations: [0, 1], listModels: [0, 1], loadOlderConversationHistory: [0, 1],\n logout: [0, 0], readConversationHistory: [0, 1], readConversationPromptHistory: [0, 1],\n refreshAccount: [0, 0],\n readRateLimits: [0, 1],\n readAccountUsage: [0, 0],\n consumeRateLimitResetCredit: [1, 1],\n refreshConversations: [0, 0], renameConversation: [1, 1], respondToClientRequest: [1, 1],\n resolveApproval: [2, 3], retryTurn: [1, 1], selectConversation: [1, 1],\n sendMessage: [1, 2], setGoal: [1, 2], startChatGptDeviceCodeLogin: [0, 0],\n startChatGptLogin: [0, 0], startReview: [0, 1],\n steerMessage: [1, 2], steerQueuedPrompt: [1, 2], unarchiveConversation: [1, 1],\n updateConversationSettings: [1, 1], updateQueuedPrompt: [2, 2],\n};\n\nconst conversationArities: Readonly<\n Record<CodexConversationBridgeOperation, readonly [minimum: number, maximum: number]>\n> = {\n clearGoal: [0, 0], compactConversation: [0, 0], continueInterruptedTurn: [0, 0], deleteTurn: [1, 1],\n deleteQueuedPrompt: [1, 1], editTurn: [2, 2], forkTurn: [1, 1], getSnapshot: [0, 0],\n interrupt: [0, 0], loadOlderConversationHistory: [0, 0], readConversationHistory: [0, 0],\n readConversationPromptHistory: [0, 0], renameConversation: [1, 1], respondToClientRequest: [1, 1],\n resolveApproval: [2, 3], retryTurn: [1, 1], sendMessage: [1, 2], setGoal: [1, 2],\n startReview: [0, 1], steerMessage: [1, 2], steerQueuedPrompt: [1, 2],\n updateConversationSettings: [1, 1], updateQueuedPrompt: [2, 2],\n};\n\nexport function isCodexSurfaceBridgeOperation(value: unknown): value is CodexSurfaceBridgeOperation {\n return typeof value === 'string' && operationSet.has(value);\n}\n\nexport async function invokeCodexSurfaceBridgeOperation<Name extends CodexSurfaceBridgeOperation>(\n target: CodexSurfaceBridgeTarget,\n operation: Name,\n args: readonly unknown[],\n options: CodexSurfaceBridgeInvokeOptions = {},\n): Promise<CodexSurfaceBridgeOperationResult<Name>> {\n const [minimum, maximum] = codexSurfaceBridgeArities[operation];\n if (args.length < minimum || args.length > maximum) {\n throw new TypeError(`${options.operationLabel ?? operation} received an invalid number of arguments`);\n }\n const result = await invokeValidated(target, operation, args, options);\n return result as CodexSurfaceBridgeOperationResult<Name>;\n}\n\nfunction conversationOperationTarget(conversation: CodexConversationBridgeHandle): CodexSurfaceBridgeTarget {\n const target: Pick<CodexSurfaceBridgeTarget, CodexConversationBridgeOperation> = {\n clearGoal: () => conversation.clearGoal(),\n compactConversation: () => conversation.compact(),\n continueInterruptedTurn: () => conversation.continueInterruptedTurn(),\n deleteTurn: (turnId) => conversation.deleteTurn(turnId),\n deleteQueuedPrompt: (promptId) => conversation.deleteQueuedPrompt(promptId),\n editTurn: (turnId, content) => conversation.editTurn(turnId, content),\n forkTurn: async (turnId) => (await conversation.forkTurn(turnId)).snapshot,\n getSnapshot: () => conversation.getSnapshot(),\n interrupt: () => conversation.interrupt(),\n loadOlderConversationHistory: () => conversation.loadOlderHistory(),\n readConversationHistory: () => conversation.readHistory(),\n readConversationPromptHistory: () => conversation.readPromptHistory(),\n renameConversation: (title) => conversation.rename(title),\n respondToClientRequest: (response) => conversation.respondToClientRequest(response),\n resolveApproval: (approvalId, decision, scope) => conversation.resolveApproval(approvalId, decision, scope),\n retryTurn: (turnId) => conversation.retryTurn(turnId),\n sendMessage: (prompt, options) => conversation.sendMessage(prompt, options),\n setGoal: (objective, tokenBudget) => conversation.setGoal(objective, tokenBudget),\n startReview: (options) => conversation.startReview(options),\n steerMessage: (prompt, options) => conversation.steerMessage(prompt, options),\n steerQueuedPrompt: (promptId, prompt) => conversation.steerQueuedPrompt(promptId, prompt),\n updateConversationSettings: (settings) => conversation.updateSettings(settings),\n updateQueuedPrompt: (promptId, prompt) => conversation.updateQueuedPrompt(promptId, prompt),\n };\n return target as unknown as CodexSurfaceBridgeTarget;\n}\n\nasync function invokeValidated(\n target: CodexSurfaceBridgeTarget,\n operation: CodexSurfaceBridgeOperation,\n args: readonly unknown[],\n options: CodexSurfaceBridgeInvokeOptions,\n): Promise<unknown> {\n switch (operation) {\n case 'startLiveChat': return target.startLiveChat(\n nonEmptyString(args[0], 'Conversation id'), liveChatOptions(args[1]),\n );\n case 'stopLiveChat': return target.stopLiveChat(nonEmptyString(args[0], 'Conversation id'));\n case 'archiveConversation': return target.archiveConversation(nonEmptyString(args[0], 'Conversation id'));\n case 'cancelLogin': return target.cancelLogin(optionalString(args[0], 'Login id'));\n case 'clearGoal': return target.clearGoal();\n case 'compactConversation': return target.compactConversation();\n case 'connect': return target.connect();\n case 'continueInterruptedTurn': return target.continueInterruptedTurn();\n case 'createConversation': return target.createConversation(conversationOptions(args[0]));\n case 'deleteConversation': return target.deleteConversation(nonEmptyString(args[0], 'Conversation id'));\n case 'deleteTurn': return target.deleteTurn(nonEmptyString(args[0], 'Turn id'));\n case 'deleteQueuedPrompt': return target.deleteQueuedPrompt(nonEmptyString(args[0], 'Queued prompt id'));\n case 'editTurn': return target.editTurn(nonEmptyString(args[0], 'Turn id'), nonEmptyString(args[1], 'Turn content'));\n case 'forkTurn': return target.forkTurn(nonEmptyString(args[0], 'Turn id'));\n case 'getSnapshot': return target.getSnapshot();\n case 'interrupt': return target.interrupt();\n case 'listConversations': return target.listConversations(listConversationOptions(args[0]));\n case 'listModels': return target.listModels(listModelOptions(args[0]));\n case 'loadOlderConversationHistory': return target.loadOlderConversationHistory(optionalString(args[0], 'Conversation id'));\n case 'logout': return target.logout();\n case 'readConversationHistory': return target.readConversationHistory(optionalString(args[0], 'Conversation id'));\n case 'readConversationPromptHistory': return target.readConversationPromptHistory(\n optionalString(args[0], 'Conversation id'),\n );\n case 'refreshAccount': return target.refreshAccount();\n case 'readRateLimits': {\n const options = rateLimitsOptions(args[0]);\n if (!target.readRateLimits) throw new Error('Account rate-limit reads are not available.');\n return target.readRateLimits(options);\n }\n case 'readAccountUsage': {\n if (!target.readAccountUsage) throw new Error('Account usage reads are not available.');\n return target.readAccountUsage();\n }\n case 'consumeRateLimitResetCredit': {\n const options = resetCreditOptions(args[0]);\n if (!target.consumeRateLimitResetCredit) throw new Error('Rate-limit reset credits are not available.');\n return target.consumeRateLimitResetCredit(options);\n }\n case 'refreshConversations': return target.refreshConversations();\n case 'renameConversation': return target.renameConversation(nonEmptyString(args[0], 'Conversation title'));\n case 'respondToClientRequest': return target.respondToClientRequest(clientRequestResponse(args[0]));\n case 'resolveApproval': return target.resolveApproval(\n nonEmptyString(args[0], 'Approval id'), approvalDecision(args[1]), approvalScope(args[2]),\n );\n case 'retryTurn': return target.retryTurn(nonEmptyString(args[0], 'Turn id'));\n case 'selectConversation': return target.selectConversation(nonEmptyString(args[0], 'Conversation id'));\n case 'sendMessage': return target.sendMessage(\n nonEmptyString(args[0], 'Message prompt'),\n await sendOptions(args[1], options.resolveAttachment),\n );\n case 'setGoal': return target.setGoal(nonEmptyString(args[0], 'Goal objective'), tokenBudget(args[1]));\n case 'startChatGptDeviceCodeLogin': return target.startChatGptDeviceCodeLogin();\n case 'startChatGptLogin': return target.startChatGptLogin();\n case 'startReview': return target.startReview(reviewOptions(args[0]));\n case 'steerMessage': return target.steerMessage(\n nonEmptyString(args[0], 'Steer prompt'),\n await sendOptions(args[1], options.resolveAttachment),\n );\n case 'steerQueuedPrompt': return target.steerQueuedPrompt(\n nonEmptyString(args[0], 'Queued prompt id'),\n optionalString(args[1], 'Queued prompt'),\n );\n case 'unarchiveConversation': return target.unarchiveConversation(nonEmptyString(args[0], 'Conversation id'));\n case 'updateConversationSettings': return target.updateConversationSettings(settings(args[0]));\n case 'updateQueuedPrompt': return target.updateQueuedPrompt(\n nonEmptyString(args[0], 'Queued prompt id'), nonEmptyString(args[1], 'Queued prompt'),\n );\n }\n}\n\nfunction liveChatOptions(value: unknown): StartCodexLiveChatOptions {\n const record = plainObject(value, 'Live chat options');\n onlyKeys(record, ['sdp', 'version', 'voice', 'model', 'prompt', 'includeStartupContext', 'flushTranscriptTailOnSessionEnd'], 'Live chat options');\n const result: StartCodexLiveChatOptions = { sdp: nonEmptyString(record.sdp, 'SDP offer') };\n if (record.version !== undefined) {\n if (record.version !== 'v1' && record.version !== 'v2' && record.version !== 'v3') throw new TypeError('Invalid realtime version');\n result.version = record.version;\n }\n for (const key of ['voice', 'model'] as const) {\n if (record[key] !== undefined) result[key] = nonEmptyString(record[key], key);\n }\n if (record.prompt !== undefined) {\n if (record.prompt !== null && typeof record.prompt !== 'string') throw new TypeError('Prompt must be a string or null');\n result.prompt = record.prompt;\n }\n for (const key of ['includeStartupContext', 'flushTranscriptTailOnSessionEnd'] as const) {\n if (record[key] !== undefined) {\n if (typeof record[key] !== 'boolean') throw new TypeError(`${key} must be a boolean`);\n result[key] = record[key];\n }\n }\n return result;\n}\n\nfunction conversationOptions(value: unknown): CreateCodexRendererConversationOptions | undefined {\n if (value === undefined) return undefined;\n const record = plainObject(value, 'Conversation options');\n onlyKeys(record, ['model', 'reasoningEffort', 'serviceTier', 'approvalPreset'], 'Conversation options');\n return {\n ...(record.model === undefined ? {} : { model: nonEmptyString(record.model, 'Conversation model') }),\n ...(record.reasoningEffort === undefined ? {} : { reasoningEffort: nonEmptyString(record.reasoningEffort, 'Conversation reasoning effort') }),\n ...(record.serviceTier === undefined ? {} : { serviceTier: nullableString(record.serviceTier, 'Conversation service tier') }),\n ...(record.approvalPreset === undefined ? {} : { approvalPreset: approvalPreset(record.approvalPreset) }),\n };\n}\n\nfunction listConversationOptions(value: unknown): ListCodexConversationsOptions | undefined {\n if (value === undefined) return undefined;\n const record = plainObject(value, 'Conversation list options');\n onlyKeys(record, ['archived', 'cwd', 'limit', 'searchTerm'], 'Conversation list options');\n if (record.archived !== undefined && typeof record.archived !== 'boolean') {\n throw new TypeError('Conversation list archived flag must be a boolean');\n }\n if (record.limit !== undefined && (!Number.isInteger(record.limit) || (record.limit as number) < 0)) {\n throw new TypeError('Conversation list limit must be a non-negative integer');\n }\n const cwd = record.cwd === undefined ? undefined : Array.isArray(record.cwd)\n ? record.cwd.map((entry) => nonEmptyString(entry, 'Conversation list cwd'))\n : nonEmptyString(record.cwd, 'Conversation list cwd');\n return {\n ...(record.archived === undefined ? {} : { archived: record.archived }),\n ...(cwd === undefined ? {} : { cwd }),\n ...(record.limit === undefined ? {} : { limit: record.limit as number }),\n ...(record.searchTerm === undefined ? {} : { searchTerm: nonEmptyString(record.searchTerm, 'Conversation list search term') }),\n };\n}\n\nfunction rateLimitsOptions(value: unknown): ReadCodexRateLimitsOptions | undefined {\n if (value === undefined) return undefined;\n const record = plainObject(value, 'Rate-limit read options');\n onlyKeys(record, ['excludeResetCreditDetails'], 'Rate-limit read options');\n return record.excludeResetCreditDetails === undefined ? {} : {\n excludeResetCreditDetails: booleanValue(record.excludeResetCreditDetails, 'Exclude reset credit details'),\n };\n}\n\nfunction resetCreditOptions(value: unknown): ConsumeCodexRateLimitResetCreditOptions {\n const record = plainObject(value, 'Reset-credit options');\n onlyKeys(record, ['idempotencyKey', 'creditId'], 'Reset-credit options');\n return {\n idempotencyKey: nonEmptyString(record.idempotencyKey, 'Reset-credit idempotency key'),\n ...(record.creditId === undefined ? {} : { creditId: nonEmptyString(record.creditId, 'Reset credit id') }),\n };\n}\n\nfunction listModelOptions(value: unknown): ListCodexModelsOptions | undefined {\n if (value === undefined) return undefined;\n const record = plainObject(value, 'Model list options');\n onlyKeys(record, ['includeHidden', 'forceReload'], 'Model list options');\n return {\n ...(record.includeHidden === undefined ? {} : { includeHidden: booleanValue(record.includeHidden, 'Model list includeHidden') }),\n ...(record.forceReload === undefined ? {} : { forceReload: booleanValue(record.forceReload, 'Model list forceReload') }),\n };\n}\n\nfunction settings(value: unknown): UpdateCodexConversationSettings {\n const record = plainObject(value, 'Conversation settings');\n onlyKeys(record, ['modelId', 'reasoningEffort', 'serviceTier', 'approvalPreset', 'planMode'], 'Conversation settings');\n return {\n ...(record.modelId === undefined ? {} : { modelId: nonEmptyString(record.modelId, 'Conversation model id') }),\n ...(record.reasoningEffort === undefined ? {} : { reasoningEffort: nonEmptyString(record.reasoningEffort, 'Conversation reasoning effort') }),\n ...(record.serviceTier === undefined ? {} : { serviceTier: nullableString(record.serviceTier, 'Conversation service tier') }),\n ...(record.approvalPreset === undefined ? {} : { approvalPreset: approvalPreset(record.approvalPreset) }),\n ...(record.planMode === undefined ? {} : { planMode: booleanValue(record.planMode, 'Conversation plan mode') }),\n };\n}\n\nfunction clientRequestResponse(value: unknown): CodexSurfaceClientRequestResponse {\n const record = plainObject(value, 'Client request response');\n onlyKeys(record, ['id', 'payload'], 'Client request response');\n const id = nonEmptyString(record.id, 'Client request id');\n if (record.payload === undefined) return { id };\n const payload = plainObject(record.payload, 'Client request response payload');\n onlyKeys(payload, ['answers', 'cancelled', 'decision'], 'Client request response payload');\n const decision = payload.decision;\n const validDecisions = [null, 'allow', 'allow_conversation', 'always_allow', 'deny'];\n if (decision !== undefined && !validDecisions.includes(decision as string | null)) {\n throw new TypeError('Client request decision is invalid');\n }\n const answers = payload.answers === undefined ? undefined : askUserAnswers(payload.answers);\n return {\n id,\n payload: {\n ...(answers === undefined ? {} : { answers }),\n ...(payload.cancelled === undefined ? {} : { cancelled: booleanValue(payload.cancelled, 'Client request cancelled flag') }),\n ...(decision === undefined ? {} : { decision: decision as NonNullable<CodexSurfaceClientRequestResponse['payload']>['decision'] }),\n },\n };\n}\n\nfunction askUserAnswers(value: unknown): CodexSurfaceAskUserAnswers {\n const record = plainObject(value, 'Client request answers');\n const answers: CodexSurfaceAskUserAnswers = {};\n for (const [questionId, rawAnswer] of Object.entries(record)) {\n if (!questionId.trim()) throw new TypeError('Client request question id must be non-empty');\n const answer = plainObject(rawAnswer, 'Client request answer');\n onlyKeys(answer, ['answers'], 'Client request answer');\n if (!Array.isArray(answer.answers) || !answer.answers.every((item) => typeof item === 'string')) {\n throw new TypeError('Client request answer values must be an array of strings');\n }\n answers[questionId] = { answers: [...answer.answers] };\n }\n return answers;\n}\n\nasync function sendOptions(\n value: unknown,\n resolveAttachment: CodexSurfaceBridgeAttachmentResolver | undefined,\n): Promise<SendCodexMessageOptions | undefined> {\n if (value === undefined) return undefined;\n const record = plainObject(value, 'Message options');\n onlyKeys(record, ['attachments', 'model', 'reasoningEffort', 'serviceTier', 'planMode', 'skills', 'outputSchema'], 'Message options');\n const attachments = record.attachments === undefined\n ? undefined\n : await attachmentInputs(record.attachments, resolveAttachment);\n const skills = record.skills === undefined ? undefined : skillInputs(record.skills);\n if (record.outputSchema !== undefined && !isJsonValue(record.outputSchema)) {\n throw new TypeError('Message output schema must be JSON-serializable');\n }\n return {\n ...(attachments === undefined ? {} : { attachments }),\n ...(record.model === undefined ? {} : { model: nonEmptyString(record.model, 'Message model') }),\n ...(record.reasoningEffort === undefined ? {} : { reasoningEffort: nonEmptyString(record.reasoningEffort, 'Message reasoning effort') }),\n ...(record.serviceTier === undefined ? {} : { serviceTier: nullableString(record.serviceTier, 'Message service tier') }),\n ...(record.planMode === undefined ? {} : { planMode: booleanValue(record.planMode, 'Message plan mode') }),\n ...(skills === undefined ? {} : { skills }),\n ...(record.outputSchema === undefined ? {} : { outputSchema: record.outputSchema }),\n };\n}\n\nasync function attachmentInputs(\n value: unknown,\n resolveAttachment: CodexSurfaceBridgeAttachmentResolver | undefined,\n): Promise<NonNullable<SendCodexMessageOptions['attachments']>> {\n if (!Array.isArray(value)) throw new TypeError('Message attachments must be an array');\n if (value.length > 0 && !resolveAttachment) {\n throw new TypeError('Message attachment references are not supported by this host');\n }\n return Promise.all(value.map(async (rawAttachment) => {\n const attachment = plainObject(rawAttachment, 'Message attachment');\n if (attachment.type !== 'image' && attachment.type !== 'file') {\n throw new TypeError('Message attachment type is invalid');\n }\n const image = attachment.type === 'image';\n onlyKeys(\n attachment,\n image ? ['type', 'reference', 'detail'] : ['type', 'reference'],\n 'Message attachment',\n );\n if (image && attachment.detail !== undefined && !['auto', 'low', 'high', 'original'].includes(String(attachment.detail))) {\n throw new TypeError('Message image detail is invalid');\n }\n const rendererAttachment: CodexRendererAttachment = image ? {\n type: 'image' as const,\n reference: nonEmptyString(attachment.reference, 'Message attachment reference'),\n ...(attachment.detail === undefined ? {} : { detail: attachment.detail as 'auto' | 'low' | 'high' | 'original' }),\n } : {\n type: 'file' as const,\n reference: nonEmptyString(attachment.reference, 'Message attachment reference'),\n };\n const resolved = await resolveAttachment!(rendererAttachment);\n return resolvedAttachment(resolved, rendererAttachment);\n }));\n}\n\nfunction resolvedAttachment(\n value: CodexSurfaceAttachment,\n source: CodexRendererAttachment,\n): CodexSurfaceAttachment {\n const attachment = plainObject(value, 'Resolved message attachment');\n if (attachment.type !== source.type) throw new TypeError('Resolved message attachment type does not match');\n const common = {\n path: nonEmptyString(attachment.path, 'Resolved message attachment path'),\n ...(attachment.name === undefined ? {} : { name: displayString(attachment.name, 'Resolved message attachment name') }),\n ...(attachment.mimeType === undefined ? {} : { mimeType: displayString(attachment.mimeType, 'Resolved message attachment MIME type') }),\n };\n return source.type === 'image' ? {\n type: 'image',\n ...common,\n ...(source.detail === undefined ? {} : { detail: source.detail }),\n ...(attachment.previewUrl === undefined\n ? {}\n : { previewUrl: imagePreviewUrl(attachment.previewUrl) }),\n } : { type: 'file', ...common };\n}\n\nfunction skillInputs(value: unknown): NonNullable<SendCodexMessageOptions['skills']> {\n if (!Array.isArray(value)) throw new TypeError('Message skills must be an array');\n return value.map((rawSkill) => {\n const skill = plainObject(rawSkill, 'Message skill');\n onlyKeys(skill, ['name', 'path'], 'Message skill');\n return { name: nonEmptyString(skill.name, 'Message skill name'), path: nonEmptyString(skill.path, 'Message skill path') };\n });\n}\n\nfunction reviewOptions(value: unknown): StartCodexReviewOptions | undefined {\n if (value === undefined) return undefined;\n const record = plainObject(value, 'Review options');\n onlyKeys(record, ['target'], 'Review options');\n if (record.target === undefined) return {};\n const target = plainObject(record.target, 'Review target');\n if (target.type === 'uncommittedChanges') {\n onlyKeys(target, ['type'], 'Review target');\n return { target: { type: 'uncommittedChanges' } };\n }\n if (target.type === 'baseBranch') {\n onlyKeys(target, ['type', 'branch'], 'Review target');\n return { target: { type: 'baseBranch', branch: nonEmptyString(target.branch, 'Review branch') } };\n }\n if (target.type === 'commit') {\n onlyKeys(target, ['type', 'sha', 'title'], 'Review target');\n if (target.title !== undefined && target.title !== null && typeof target.title !== 'string') {\n throw new TypeError('Review commit title must be a string or null');\n }\n return { target: { type: 'commit', sha: nonEmptyString(target.sha, 'Review commit SHA'), ...(target.title === undefined ? {} : { title: target.title }) } };\n }\n if (target.type === 'custom') {\n onlyKeys(target, ['type', 'instructions'], 'Review target');\n return { target: { type: 'custom', instructions: nonEmptyString(target.instructions, 'Review instructions') } };\n }\n throw new TypeError('Review target type is invalid');\n}\n\nfunction plainObject(value: unknown, label: string): Record<string, unknown> {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) throw new TypeError(`${label} must be an object`);\n const prototype = Object.getPrototypeOf(value) as object | null;\n if (prototype !== Object.prototype && prototype !== null) throw new TypeError(`${label} must be a plain object`);\n if (Reflect.ownKeys(value).some((key) => typeof key === 'symbol')) throw new TypeError(`${label} must not contain symbol properties`);\n return value as Record<string, unknown>;\n}\n\nfunction onlyKeys(record: Record<string, unknown>, keys: readonly string[], label: string): void {\n const allowed = new Set(keys);\n const unknownKey = Object.getOwnPropertyNames(record).find((key) => !allowed.has(key));\n if (unknownKey) throw new TypeError(`${label} contains unsupported property \"${unknownKey}\"`);\n}\n\nfunction nonEmptyString(value: unknown, label: string): string {\n if (typeof value !== 'string' || !value.trim()) throw new TypeError(`${label} must be a non-empty string`);\n return value;\n}\nfunction optionalString(value: unknown, label: string): string | undefined {\n return value === undefined ? undefined : nonEmptyString(value, label);\n}\nfunction nullableString(value: unknown, label: string): string | null {\n return value === null ? null : nonEmptyString(value, label);\n}\nfunction booleanValue(value: unknown, label: string): boolean {\n if (typeof value !== 'boolean') throw new TypeError(`${label} must be a boolean`);\n return value;\n}\nfunction approvalDecision(value: unknown): CodexSurfaceApprovalDecision {\n if (value !== 'approve' && value !== 'deny') throw new TypeError('Approval decision is invalid');\n return value;\n}\nfunction approvalScope(value: unknown): CodexSurfaceApprovalScope | undefined {\n if (value === undefined) return undefined;\n if (value !== 'once' && value !== 'session') throw new TypeError('Approval scope is invalid');\n return value;\n}\nfunction approvalPreset(value: unknown): UpdateCodexConversationSettings['approvalPreset'] {\n if (!['ask-for-approval', 'approve-for-me', 'full-access'].includes(String(value))) {\n throw new TypeError('Conversation approval preset is invalid');\n }\n return value as UpdateCodexConversationSettings['approvalPreset'];\n}\nfunction tokenBudget(value: unknown): number | null | undefined {\n if (value === undefined || value === null) return value;\n if (typeof value !== 'number' || !Number.isFinite(value) || value <= 0) {\n throw new TypeError('Goal token budget must be a positive number or null');\n }\n return value;\n}\nfunction displayString(value: unknown, label: string): string {\n const result = nonEmptyString(value, label);\n if (result.length > 1_024) throw new RangeError(`${label} is too long`);\n return result;\n}\nfunction imagePreviewUrl(value: unknown): string {\n if (typeof value !== 'string'\n || value.length > 16 * 1024 * 1024\n || !/^data:image\\/(?:avif|bmp|gif|heic|heif|jpe?g|png|webp);base64,[a-z\\d+/]+={0,2}$/i.test(value)) {\n throw new TypeError('Resolved message attachment preview must be a bounded image data URL');\n }\n return value;\n}\nfunction isJsonValue(value: unknown, seen = new Set<object>()): value is CodexSurfaceJsonValue {\n if (value === null || typeof value === 'string' || typeof value === 'boolean') return true;\n if (typeof value === 'number') return Number.isFinite(value);\n if (typeof value !== 'object' || seen.has(value) || Reflect.ownKeys(value).some((key) => typeof key === 'symbol')) return false;\n if (Array.isArray(value)) {\n const keys = Object.keys(value);\n if (keys.length !== value.length || keys.some((key) => !/^(0|[1-9]\\d*)$/.test(key) || Number(key) >= value.length)) return false;\n } else {\n const prototype = Object.getPrototypeOf(value) as object | null;\n if ((prototype !== Object.prototype && prototype !== null) || Object.keys(value).length !== Object.getOwnPropertyNames(value).length) return false;\n }\n seen.add(value);\n const valid = Array.isArray(value)\n ? value.every((item) => isJsonValue(item, seen))\n : Object.values(value as Record<string, unknown>).every((item) => isJsonValue(item, seen));\n seen.delete(value);\n return valid;\n}\n\nexport {\n applyCodexSurfaceStateChanges,\n createCodexSurfaceStateMirror,\n diffCodexSurfaceState,\n isCodexSurfaceStatePatchSource,\n subscribeCodexSurfaceState,\n type CodexSurfaceStateMirror,\n type CodexSurfaceStateMirrorResult,\n type CodexSurfaceStatePatchSource,\n type CodexSurfaceStateSource,\n type SubscribeCodexSurfaceStateOptions,\n} from './surface-state';\n"],"mappings":"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"}
@@ -52,6 +52,13 @@ function t(e, t) {
52
52
  ...e,
53
53
  contextUsage: t.payload.contextUsage
54
54
  };
55
+ case "conversation.executionUsageChanged": return {
56
+ ...e,
57
+ turns: e.turns.map((e) => e.id === t.turnId ? {
58
+ ...e,
59
+ executionUsage: t.payload.usage
60
+ } : e)
61
+ };
55
62
  case "conversation.skillsChanged": return {
56
63
  ...e,
57
64
  skills: [...t.payload.skills],
@@ -112,6 +119,7 @@ function t(e, t) {
112
119
  error: t.payload.error.message,
113
120
  turnIds: i(e.turnIds, t.turnId),
114
121
  turns: a(e.turns, {
122
+ ...r,
115
123
  id: t.turnId,
116
124
  status: t.payload.willRetry ? "inProgress" : "failed",
117
125
  error: t.payload.error,
@@ -177,6 +185,7 @@ function t(e, t) {
177
185
  };
178
186
  case "clientRequest.resolved": return C(e, t);
179
187
  case "file.activity":
188
+ case "turn.modelRerouted":
180
189
  case "subagent.toolCallChanged":
181
190
  case "subagent.activity":
182
191
  case "realtime.started":
@@ -1 +1 @@
1
- {"version":3,"file":"conversation-replica.js","names":[],"sources":["../src/conversation-replica.ts"],"sourcesContent":["import type {\n CodexConversationEvent,\n CodexConversationSnapshot,\n CodexSurfaceTurn,\n SurfaceMessage,\n SurfaceMessageToolPart,\n SurfaceMessageToolPartUpdate,\n} from './surface';\n\n/**\n * A renderer-local projection initialized once from a conversation snapshot and\n * advanced with the much smaller semantic event stream.\n */\nexport type CodexConversationReplica = {\n readonly conversationId: string;\n apply(event: CodexConversationEvent): CodexConversationSnapshot;\n getSnapshot(): CodexConversationSnapshot;\n replace(snapshot: CodexConversationSnapshot): CodexConversationSnapshot;\n};\n\nexport function createCodexConversationReplica(\n initialSnapshot: CodexConversationSnapshot,\n): CodexConversationReplica {\n const conversationId = initialSnapshot.activeConversationId;\n let current = initialSnapshot;\n let lastSequence: number | null = null;\n\n return {\n conversationId,\n getSnapshot: () => current,\n apply: (event) => {\n assertConversation(conversationId, event.conversationId, 'Event');\n if (lastSequence !== null && event.seq <= lastSequence) return current;\n current = applyConversationEvent(current, event);\n lastSequence = event.seq;\n return current;\n },\n replace: (snapshot) => {\n assertConversation(conversationId, snapshot.activeConversationId, 'Snapshot');\n current = snapshot;\n lastSequence = null;\n return current;\n },\n };\n}\n\nfunction applyConversationEvent(\n snapshot: CodexConversationSnapshot,\n event: CodexConversationEvent,\n): CodexConversationSnapshot {\n switch (event.type) {\n case 'conversation.summaryUpserted':\n return {\n ...snapshot,\n conversations: upsertById(snapshot.conversations, event.payload.summary),\n };\n case 'conversation.summaryRemoved':\n return {\n ...snapshot,\n conversations: snapshot.conversations.filter((summary) => summary.id !== event.conversationId),\n };\n case 'conversation.historyReplaced':\n return {\n ...snapshot,\n ...(event.payload.state ?? {}),\n messages: [...event.payload.messages],\n threadStatus: event.payload.threadStatus,\n };\n case 'conversation.historyPrepended':\n return {\n ...snapshot,\n ...(event.payload.state ?? {}),\n messages: prependUniqueMessages(snapshot.messages, event.payload.messages),\n };\n case 'conversation.historyStateChanged':\n return { ...snapshot, ...event.payload };\n case 'conversation.activityChanged':\n return {\n ...snapshot,\n threadStatus: event.payload.threadStatus,\n busy: event.payload.busy,\n activeTurnId: event.payload.busy ? snapshot.activeTurnId : null,\n error: event.payload.error,\n };\n case 'conversation.settingsChanged':\n return { ...snapshot, ...event.payload };\n case 'conversation.goalChanged':\n return { ...snapshot, goal: event.payload.goal };\n case 'conversation.contextUsageChanged':\n return { ...snapshot, contextUsage: event.payload.contextUsage };\n case 'conversation.skillsChanged':\n return {\n ...snapshot,\n skills: [...event.payload.skills],\n skillCatalogStatus: event.payload.status,\n };\n case 'conversation.permissionsChanged':\n return {\n ...snapshot,\n permissionProfiles: [...event.payload.permissionProfiles],\n approvalPresets: [...event.payload.approvalPresets],\n };\n case 'conversation.diffUpdated':\n return { ...snapshot, turnGitDiff: event.payload.diff };\n case 'conversation.queueChanged':\n return { ...snapshot, queuedPrompts: [...event.payload.queuedPrompts] };\n case 'turn.started':\n return {\n ...snapshot,\n activeTurnId: event.turnId,\n busy: true,\n error: null,\n turnGitDiff: null,\n turnIds: addUnique(snapshot.turnIds, event.turnId),\n turns: upsertTurn(snapshot.turns, {\n id: event.turnId,\n status: 'inProgress',\n error: null,\n willRetry: false,\n startedAt: event.payload.startedAt,\n completedAt: null,\n durationMs: null,\n }),\n messages: ensureAssistantTurnMessage(\n snapshot.messages,\n event.conversationId,\n event.turnId,\n event.payload.startedAt,\n ),\n };\n case 'turn.completed': {\n const messageStatus = event.payload.status === 'failed' ? 'error' : 'complete';\n const messages = snapshot.messages\n .map((message) => messageTurnId(message) === event.turnId\n ? completeMessage(message, messageStatus)\n : message)\n .filter((message) => !isEmptyAssistantForTurn(message, event.turnId));\n return {\n ...snapshot,\n activeTurnId: snapshot.activeTurnId === event.turnId ? null : snapshot.activeTurnId,\n busy: snapshot.activeTurnId !== event.turnId && snapshot.busy,\n error: snapshot.activeTurnId === event.turnId || !snapshot.busy\n ? event.payload.error?.message ?? null : snapshot.error,\n turnIds: addUnique(snapshot.turnIds, event.turnId),\n turns: upsertTurn(snapshot.turns, { id: event.turnId, ...event.payload }),\n messages,\n };\n }\n case 'turn.error': {\n const terminal = !event.payload.willRetry && snapshot.activeTurnId === event.turnId;\n const previous = snapshot.turns.find((turn) => turn.id === event.turnId);\n return {\n ...snapshot,\n activeTurnId: terminal ? null : snapshot.activeTurnId,\n busy: terminal ? false : snapshot.busy,\n error: event.payload.error.message,\n turnIds: addUnique(snapshot.turnIds, event.turnId),\n turns: upsertTurn(snapshot.turns, {\n id: event.turnId,\n status: event.payload.willRetry ? 'inProgress' : 'failed',\n error: event.payload.error,\n willRetry: event.payload.willRetry,\n startedAt: previous?.startedAt ?? null,\n completedAt: previous?.completedAt ?? null,\n durationMs: previous?.durationMs ?? null,\n }),\n };\n }\n case 'message.appended':\n return {\n ...snapshot,\n messages: event.payload.message.kind === 'steer'\n ? appendSteerMessage(\n snapshot.messages,\n event.payload.message,\n event.conversationId,\n event.turnId,\n event.occurredAt,\n )\n : upsertMessage(snapshot.messages, event.payload.message),\n };\n case 'message.updated':\n return { ...snapshot, messages: upsertMessage(snapshot.messages, event.payload.message) };\n case 'message.delta':\n return {\n ...snapshot,\n messages: appendMessageDelta(snapshot.messages, event),\n };\n case 'tool.started':\n case 'tool.completed':\n return {\n ...snapshot,\n messages: upsertToolPart(\n snapshot.messages,\n event.payload.messageId,\n event.conversationId,\n event.turnId,\n event.payload.toolPart,\n ),\n };\n case 'tool.updated':\n return {\n ...snapshot,\n messages: updateToolPart(\n snapshot.messages,\n event.payload.messageId,\n event.conversationId,\n event.turnId,\n event.payload.update,\n ),\n };\n case 'plan.delta':\n return applyPlan(snapshot, event.conversationId, event.turnId, event.payload.markdown, 'running');\n case 'plan.updated': {\n const next = applyPlan(\n snapshot,\n event.conversationId,\n event.turnId,\n event.payload.markdown,\n event.payload.status === 'completed' ? 'completed' : 'running',\n );\n return {\n ...next,\n executionPlan: {\n turnId: event.turnId,\n explanation: event.payload.explanation,\n steps: event.payload.steps.map((step) => ({ ...step })),\n markdown: event.payload.markdown,\n updatedAt: event.occurredAt,\n },\n };\n }\n case 'plan.completed':\n return applyPlan(snapshot, event.conversationId, event.turnId, event.payload.markdown, 'completed');\n case 'context.compactionStarted':\n return { ...snapshot, messages: startCompaction(snapshot.messages, event) };\n case 'context.compactionCompleted':\n return { ...snapshot, messages: upsertMessage(snapshot.messages, event.payload.message) };\n case 'approval.requested':\n return { ...snapshot, approvals: upsertById(snapshot.approvals, event.payload.approval) };\n case 'approval.resolved':\n return {\n ...snapshot,\n approvals: snapshot.approvals.filter((approval) => approval.id !== event.payload.approval.id),\n };\n case 'clientRequest.requested':\n return { ...snapshot, clientRequests: upsertById(snapshot.clientRequests, event.payload.request) };\n case 'clientRequest.resolved':\n return resolveClientRequest(snapshot, event);\n case 'file.activity':\n case 'subagent.toolCallChanged':\n case 'subagent.activity':\n case 'realtime.started':\n case 'realtime.itemAdded':\n case 'realtime.itemStarted':\n case 'realtime.itemCompleted':\n case 'realtime.itemTranscriptDelta':\n case 'realtime.transcriptDelta':\n case 'realtime.transcriptCompleted':\n case 'realtime.audioDelta':\n case 'realtime.sdp':\n case 'realtime.error':\n case 'realtime.closed':\n return snapshot;\n }\n}\n\nfunction assertConversation(expected: string, actual: string, subject: string): void {\n if (actual !== expected) {\n throw new Error(`${subject} belongs to '${actual}', not replica conversation '${expected}'`);\n }\n}\n\nfunction upsertById<Value extends { id: string }>(values: readonly Value[], value: Value): Value[] {\n const index = values.findIndex((candidate) => candidate.id === value.id);\n if (index < 0) return [...values, value];\n const next = [...values];\n next.splice(index, 1, value);\n return next;\n}\n\nfunction addUnique(values: readonly string[], value: string): string[] {\n return values.includes(value) ? [...values] : [...values, value];\n}\n\nfunction upsertTurn(turns: readonly CodexSurfaceTurn[], turn: CodexSurfaceTurn): CodexSurfaceTurn[] {\n return upsertById(turns, turn);\n}\n\nfunction upsertMessage(messages: readonly SurfaceMessage[], message: SurfaceMessage): SurfaceMessage[] {\n return upsertById(messages, message);\n}\n\nfunction ensureAssistantTurnMessage(\n messages: readonly SurfaceMessage[],\n conversationId: string,\n turnId: string,\n createdAt: string,\n): SurfaceMessage[] {\n if (messages.some((message) => (\n message.role === 'assistant'\n && message.kind === undefined\n && message.status === 'streaming'\n && messageTurnId(message) === turnId\n ))) return [...messages];\n const segmentCount = messages.filter((message) => (\n message.role === 'assistant' && message.kind === undefined && messageTurnId(message) === turnId\n )).length;\n return [...messages, {\n id: segmentCount === 0 ? `assistant-${turnId}` : `assistant-${turnId}-segment-${segmentCount}`,\n role: 'assistant',\n status: 'streaming',\n turnId,\n parts: [],\n createdAt,\n metadata: { conversationId, turnId },\n }];\n}\n\nfunction appendSteerMessage(\n messages: readonly SurfaceMessage[],\n steer: SurfaceMessage,\n conversationId: string,\n eventTurnId: string | undefined,\n occurredAt: string,\n): SurfaceMessage[] {\n const turnId = eventTurnId ?? messageTurnId(steer);\n const appended = upsertMessage(messages, steer);\n if (!turnId) return appended;\n const previousIndex = findLastIndex(appended, (message) => (\n message.role === 'assistant' && message.kind === undefined && messageTurnId(message) === turnId\n ));\n const next = [...appended];\n const previous = previousIndex >= 0 ? next[previousIndex] : undefined;\n if (previous?.parts.length === 0) next.splice(previousIndex, 1);\n else if (previous) next.splice(previousIndex, 1, { ...previous, status: 'complete' });\n return ensureAssistantTurnMessage(\n next,\n conversationId,\n turnId,\n steer.createdAt ?? occurredAt,\n );\n}\n\nfunction prependUniqueMessages(\n current: readonly SurfaceMessage[],\n prepended: readonly SurfaceMessage[],\n): SurfaceMessage[] {\n const incomingIds = new Set(prepended.map((message) => message.id));\n return [...prepended, ...current.filter((message) => !incomingIds.has(message.id))];\n}\n\nfunction appendMessageDelta(\n messages: readonly SurfaceMessage[],\n event: Extract<CodexConversationEvent, { type: 'message.delta' }>,\n): SurfaceMessage[] {\n const index = messages.findIndex((message) => message.id === event.payload.messageId);\n const message = index >= 0 ? messages[index]! : {\n id: event.payload.messageId,\n role: 'assistant' as const,\n status: 'streaming' as const,\n turnId: event.turnId,\n parts: [],\n createdAt: event.occurredAt,\n metadata: { conversationId: event.conversationId, turnId: event.turnId },\n };\n const parts = [...message.parts];\n const lastPart = parts.at(-1);\n if (lastPart?.type === 'text' && lastPart.itemId === event.payload.itemId) {\n parts.splice(parts.length - 1, 1, {\n ...lastPart,\n text: `${lastPart.text}${event.payload.delta}`,\n ...(event.payload.phase ? { phase: event.payload.phase } : {}),\n });\n } else if (event.payload.delta) {\n parts.push({\n type: 'text', text: event.payload.delta, itemId: event.payload.itemId,\n ...(event.payload.phase ? { phase: event.payload.phase } : {}),\n });\n }\n const nextMessage: SurfaceMessage = { ...message, status: 'streaming', parts };\n if (index < 0) return [...messages, nextMessage];\n const next = [...messages];\n next.splice(index, 1, nextMessage);\n return next;\n}\n\nfunction completeMessage(\n message: SurfaceMessage,\n status: SurfaceMessage['status'],\n): SurfaceMessage {\n let changed = message.status !== status;\n const toolStatus: SurfaceMessageToolPart['status'] = status === 'complete' ? 'completed' : 'failed';\n const parts = message.parts.map((part) => {\n if (part.type !== 'tool' || part.status !== 'running') return part;\n changed = true;\n return {\n ...part,\n status: toolStatus,\n statusText: transitionedToolStatusText(part.statusText, toolStatus),\n };\n });\n return changed ? { ...message, status, parts } : message;\n}\n\nfunction isEmptyAssistantForTurn(message: SurfaceMessage, turnId: string): boolean {\n return message.role === 'assistant'\n && message.kind === undefined\n && messageTurnId(message) === turnId\n && message.parts.length === 0;\n}\n\nfunction messageTurnId(message: SurfaceMessage): string | null {\n return message.turnId\n ?? (typeof message.metadata?.turnId === 'string' ? message.metadata.turnId : null);\n}\n\nfunction findLastIndex<Value>(\n values: readonly Value[],\n predicate: (value: Value) => boolean,\n): number {\n for (let index = values.length - 1; index >= 0; index -= 1) {\n const value = values[index];\n if (value !== undefined && predicate(value)) return index;\n }\n return -1;\n}\n\nfunction upsertToolPart(\n messages: readonly SurfaceMessage[],\n messageId: string,\n conversationId: string,\n turnId: string,\n toolPart: SurfaceMessageToolPart,\n): SurfaceMessage[] {\n const index = messages.findIndex((message) => message.id === messageId);\n const message = index >= 0 ? messages[index]! : assistantMessage(messageId, conversationId, turnId);\n const parts = [...message.parts];\n const partIndex = parts.findIndex((part) => part.type === 'tool' && part.id === toolPart.id);\n if (partIndex < 0) parts.push(toolPart);\n else {\n const existing = parts[partIndex] as SurfaceMessageToolPart;\n parts.splice(partIndex, 1, mergeToolPart(existing, toolPart));\n }\n const nextMessage = { ...message, status: 'streaming' as const, parts };\n if (index < 0) return [...messages, nextMessage];\n const next = [...messages];\n next.splice(index, 1, nextMessage);\n return next;\n}\n\nfunction updateToolPart(\n messages: readonly SurfaceMessage[],\n messageId: string,\n conversationId: string,\n turnId: string,\n update: SurfaceMessageToolPartUpdate,\n): SurfaceMessage[] {\n let next = [...messages];\n let messageIndex = next.findIndex((message) => message.id === messageId);\n if (messageIndex < 0 && update.fallbackToolPart) {\n next = upsertToolPart(next, messageId, conversationId, turnId, update.fallbackToolPart);\n messageIndex = next.findIndex((message) => message.id === messageId);\n }\n const message = messageIndex >= 0 ? next[messageIndex] : undefined;\n if (!message) return next;\n const parts = [...message.parts];\n const partIndex = parts.findIndex((part) => part.type === 'tool' && part.id === update.itemId);\n if (partIndex < 0) return next;\n const existing = parts[partIndex] as SurfaceMessageToolPart;\n parts.splice(partIndex, 1, {\n ...existing,\n ...(update.title !== undefined ? { title: update.title } : {}),\n ...(update.status !== undefined ? { status: update.status } : {}),\n ...(update.statusText !== undefined ? { statusText: update.statusText ?? undefined } : {}),\n ...(update.body !== undefined ? { body: update.body } : {}),\n ...(update.bodyDelta !== undefined ? { body: `${existing.body ?? ''}${update.bodyDelta}` } : {}),\n ...(update.bodyAppend !== undefined\n ? { body: [existing.body, update.bodyAppend].filter(Boolean).join('\\n') }\n : {}),\n ...(update.input !== undefined ? { input: update.input } : {}),\n ...(update.output !== undefined ? { output: update.output } : {}),\n ...(update.metadata !== undefined\n ? { metadata: { ...(existing.metadata ?? {}), ...update.metadata } }\n : {}),\n });\n next.splice(messageIndex, 1, { ...message, parts });\n return next;\n}\n\nfunction mergeToolPart(\n existing: SurfaceMessageToolPart,\n incoming: SurfaceMessageToolPart,\n): SurfaceMessageToolPart {\n return {\n ...existing,\n ...incoming,\n body: incoming.body ?? existing.body,\n input: incoming.input ?? existing.input,\n output: incoming.output ?? existing.output,\n statusText: incoming.statusText ?? transitionedToolStatusText(existing.statusText, incoming.status),\n metadata: { ...(existing.metadata ?? {}), ...(incoming.metadata ?? {}) },\n };\n}\n\nfunction assistantMessage(messageId: string, conversationId: string, turnId: string): SurfaceMessage {\n return {\n id: messageId,\n role: 'assistant',\n status: 'streaming',\n turnId,\n parts: [],\n metadata: { ...(conversationId ? { conversationId } : {}), turnId },\n };\n}\n\nfunction applyPlan(\n snapshot: CodexConversationSnapshot,\n conversationId: string,\n turnId: string,\n markdown: string,\n status: SurfaceMessageToolPart['status'],\n): CodexConversationSnapshot {\n const message = [...snapshot.messages].reverse().find((candidate) => (\n candidate.role === 'assistant' && messageTurnId(candidate) === turnId\n ));\n const messageId = message?.id ?? `assistant-${turnId}`;\n return {\n ...snapshot,\n messages: upsertToolPart(snapshot.messages, messageId, conversationId, turnId, {\n type: 'tool',\n id: `plan-progress-${turnId}`,\n kind: 'generic',\n title: 'plan',\n status,\n body: markdown,\n statusText: JSON.stringify({\n source: 'codex',\n action: 'plan',\n phase: status,\n params: {\n addedLines: markdown.split('\\n').filter((line) => line.trim()).length,\n operation: 'write',\n target: 'plan',\n },\n }),\n metadata: { planProgress: true },\n }),\n };\n}\n\nfunction startCompaction(\n messages: readonly SurfaceMessage[],\n event: Extract<CodexConversationEvent, { type: 'context.compactionStarted' }>,\n): SurfaceMessage[] {\n if (messages.some((message) => message.kind === 'compaction' && messageTurnId(message) === event.turnId)) {\n return [...messages];\n }\n const next = [...messages];\n const activeAssistantIndex = findLastIndex(next, (message) => (\n message.role === 'assistant'\n && message.kind === undefined\n && messageTurnId(message) === event.turnId\n ));\n const activeAssistant = activeAssistantIndex >= 0 ? next[activeAssistantIndex] : undefined;\n if (activeAssistant?.parts.length === 0) next.splice(activeAssistantIndex, 1);\n else if (activeAssistant) next.splice(activeAssistantIndex, 1, { ...activeAssistant, status: 'complete' });\n return [...next, {\n id: `compaction-${event.turnId}`,\n kind: 'compaction',\n role: 'assistant',\n status: 'streaming',\n turnId: event.turnId,\n parts: [],\n createdAt: event.occurredAt,\n metadata: { conversationId: event.conversationId, turnId: event.turnId },\n }];\n}\n\nfunction transitionedToolStatusText(\n statusText: string | undefined,\n status: SurfaceMessageToolPart['status'],\n): string | undefined {\n if (status === 'running' || !statusText) return statusText;\n try {\n const parsed: unknown = JSON.parse(statusText);\n if (!isRecord(parsed)) return statusText;\n return JSON.stringify({ ...parsed, phase: status });\n } catch {\n return statusText;\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction resolveClientRequest(\n snapshot: CodexConversationSnapshot,\n event: Extract<CodexConversationEvent, { type: 'clientRequest.resolved' }>,\n): CodexConversationSnapshot {\n const response = event.payload.response;\n const output = event.payload.request.kind === 'ask_user'\n ? { answers: response?.payload?.answers ?? {} }\n : { decision: response?.payload?.decision ?? null };\n const request = event.payload.request;\n const turnId = event.turnId ?? request.turnId ?? '';\n const message = snapshot.messages.find((candidate) => (\n messageTurnId(candidate) === turnId\n && candidate.parts.some((part) => part.type === 'tool' && part.id === request.itemId)\n ));\n return {\n ...snapshot,\n answeredClientRequestIds: addUnique(snapshot.answeredClientRequestIds, request.id),\n clientRequests: snapshot.clientRequests.filter((candidate) => candidate.id !== request.id),\n messages: message\n ? updateToolPart(\n snapshot.messages,\n message.id,\n event.conversationId,\n turnId,\n { itemId: request.itemId, output },\n )\n : snapshot.messages,\n };\n}\n"],"mappings":";AAoBA,SAAgB,EACd,GAC0B;CAC1B,IAAM,IAAiB,EAAgB,sBACnC,IAAU,GACV,IAA8B;CAElC,OAAO;EACL;EACA,mBAAmB;EACnB,QAAQ,OACN,EAAmB,GAAgB,EAAM,gBAAgB,OAAO,GAC5D,MAAiB,QAAQ,EAAM,OAAO,IAAqB,KAC/D,IAAU,EAAuB,GAAS,CAAK,GAC/C,IAAe,EAAM,KACd;EAET,UAAU,OACR,EAAmB,GAAgB,EAAS,sBAAsB,UAAU,GAC5E,IAAU,GACV,IAAe,MACR;CAEX;AACF;AAEA,SAAS,EACP,GACA,GAC2B;CAC3B,QAAQ,EAAM,MAAd;EACE,KAAK,gCACH,OAAO;GACL,GAAG;GACH,eAAe,EAAW,EAAS,eAAe,EAAM,QAAQ,OAAO;EACzE;EACF,KAAK,+BACH,OAAO;GACL,GAAG;GACH,eAAe,EAAS,cAAc,QAAQ,MAAY,EAAQ,OAAO,EAAM,cAAc;EAC/F;EACF,KAAK,gCACH,OAAO;GACL,GAAG;GACH,GAAI,EAAM,QAAQ,SAAS,CAAC;GAC5B,UAAU,CAAC,GAAG,EAAM,QAAQ,QAAQ;GACpC,cAAc,EAAM,QAAQ;EAC9B;EACF,KAAK,iCACH,OAAO;GACL,GAAG;GACH,GAAI,EAAM,QAAQ,SAAS,CAAC;GAC5B,UAAU,EAAsB,EAAS,UAAU,EAAM,QAAQ,QAAQ;EAC3E;EACF,KAAK,oCACH,OAAO;GAAE,GAAG;GAAU,GAAG,EAAM;EAAQ;EACzC,KAAK,gCACH,OAAO;GACL,GAAG;GACH,cAAc,EAAM,QAAQ;GAC5B,MAAM,EAAM,QAAQ;GACpB,cAAc,EAAM,QAAQ,OAAO,EAAS,eAAe;GAC3D,OAAO,EAAM,QAAQ;EACvB;EACF,KAAK,gCACH,OAAO;GAAE,GAAG;GAAU,GAAG,EAAM;EAAQ;EACzC,KAAK,4BACH,OAAO;GAAE,GAAG;GAAU,MAAM,EAAM,QAAQ;EAAK;EACjD,KAAK,oCACH,OAAO;GAAE,GAAG;GAAU,cAAc,EAAM,QAAQ;EAAa;EACjE,KAAK,8BACH,OAAO;GACL,GAAG;GACH,QAAQ,CAAC,GAAG,EAAM,QAAQ,MAAM;GAChC,oBAAoB,EAAM,QAAQ;EACpC;EACF,KAAK,mCACH,OAAO;GACL,GAAG;GACH,oBAAoB,CAAC,GAAG,EAAM,QAAQ,kBAAkB;GACxD,iBAAiB,CAAC,GAAG,EAAM,QAAQ,eAAe;EACpD;EACF,KAAK,4BACH,OAAO;GAAE,GAAG;GAAU,aAAa,EAAM,QAAQ;EAAK;EACxD,KAAK,6BACH,OAAO;GAAE,GAAG;GAAU,eAAe,CAAC,GAAG,EAAM,QAAQ,aAAa;EAAE;EACxE,KAAK,gBACH,OAAO;GACL,GAAG;GACH,cAAc,EAAM;GACpB,MAAM;GACN,OAAO;GACP,aAAa;GACb,SAAS,EAAU,EAAS,SAAS,EAAM,MAAM;GACjD,OAAO,EAAW,EAAS,OAAO;IAChC,IAAI,EAAM;IACV,QAAQ;IACR,OAAO;IACP,WAAW;IACX,WAAW,EAAM,QAAQ;IACzB,aAAa;IACb,YAAY;GACd,CAAC;GACD,UAAU,EACR,EAAS,UACT,EAAM,gBACN,EAAM,QACN,EAAM,QAAQ,SAChB;EACF;EACF,KAAK,kBAAkB;GACrB,IAAM,IAAgB,EAAM,QAAQ,WAAW,WAAW,UAAU,YAC9D,IAAW,EAAS,SACvB,KAAK,MAAY,EAAc,CAAO,MAAM,EAAM,SAC/C,EAAgB,GAAS,CAAa,IACtC,CAAO,CAAC,CACX,QAAQ,MAAY,CAAC,EAAwB,GAAS,EAAM,MAAM,CAAC;GACtE,OAAO;IACL,GAAG;IACH,cAAc,EAAS,iBAAiB,EAAM,SAAS,OAAO,EAAS;IACvE,MAAM,EAAS,iBAAiB,EAAM,UAAU,EAAS;IACzD,OAAO,EAAS,iBAAiB,EAAM,UAAU,CAAC,EAAS,OACvD,EAAM,QAAQ,OAAO,WAAW,OAAO,EAAS;IACpD,SAAS,EAAU,EAAS,SAAS,EAAM,MAAM;IACjD,OAAO,EAAW,EAAS,OAAO;KAAE,IAAI,EAAM;KAAQ,GAAG,EAAM;IAAQ,CAAC;IACxE;GACF;EACF;EACA,KAAK,cAAc;GACjB,IAAM,IAAW,CAAC,EAAM,QAAQ,aAAa,EAAS,iBAAiB,EAAM,QACvE,IAAW,EAAS,MAAM,MAAM,MAAS,EAAK,OAAO,EAAM,MAAM;GACvE,OAAO;IACL,GAAG;IACH,cAAc,IAAW,OAAO,EAAS;IACzC,MAAM,MAAmB,EAAS;IAClC,OAAO,EAAM,QAAQ,MAAM;IAC3B,SAAS,EAAU,EAAS,SAAS,EAAM,MAAM;IACjD,OAAO,EAAW,EAAS,OAAO;KAChC,IAAI,EAAM;KACV,QAAQ,EAAM,QAAQ,YAAY,eAAe;KACjD,OAAO,EAAM,QAAQ;KACrB,WAAW,EAAM,QAAQ;KACzB,WAAW,GAAU,aAAa;KAClC,aAAa,GAAU,eAAe;KACtC,YAAY,GAAU,cAAc;IACtC,CAAC;GACH;EACF;EACA,KAAK,oBACH,OAAO;GACL,GAAG;GACH,UAAU,EAAM,QAAQ,QAAQ,SAAS,UACrC,EACA,EAAS,UACT,EAAM,QAAQ,SACd,EAAM,gBACN,EAAM,QACN,EAAM,UACR,IACE,EAAc,EAAS,UAAU,EAAM,QAAQ,OAAO;EAC5D;EACF,KAAK,mBACH,OAAO;GAAE,GAAG;GAAU,UAAU,EAAc,EAAS,UAAU,EAAM,QAAQ,OAAO;EAAE;EAC1F,KAAK,iBACH,OAAO;GACL,GAAG;GACH,UAAU,EAAmB,EAAS,UAAU,CAAK;EACvD;EACF,KAAK;EACL,KAAK,kBACH,OAAO;GACL,GAAG;GACH,UAAU,EACR,EAAS,UACT,EAAM,QAAQ,WACd,EAAM,gBACN,EAAM,QACN,EAAM,QAAQ,QAChB;EACF;EACF,KAAK,gBACH,OAAO;GACL,GAAG;GACH,UAAU,EACR,EAAS,UACT,EAAM,QAAQ,WACd,EAAM,gBACN,EAAM,QACN,EAAM,QAAQ,MAChB;EACF;EACF,KAAK,cACH,OAAO,EAAU,GAAU,EAAM,gBAAgB,EAAM,QAAQ,EAAM,QAAQ,UAAU,SAAS;EAClG,KAAK,gBAQH,OAAO;GACL,GARW,EACX,GACA,EAAM,gBACN,EAAM,QACN,EAAM,QAAQ,UACd,EAAM,QAAQ,WAAW,cAAc,cAAc,SAGlD;GACH,eAAe;IACb,QAAQ,EAAM;IACd,aAAa,EAAM,QAAQ;IAC3B,OAAO,EAAM,QAAQ,MAAM,KAAK,OAAU,EAAE,GAAG,EAAK,EAAE;IACtD,UAAU,EAAM,QAAQ;IACxB,WAAW,EAAM;GACnB;EACF;EAEF,KAAK,kBACH,OAAO,EAAU,GAAU,EAAM,gBAAgB,EAAM,QAAQ,EAAM,QAAQ,UAAU,WAAW;EACpG,KAAK,6BACH,OAAO;GAAE,GAAG;GAAU,UAAU,EAAgB,EAAS,UAAU,CAAK;EAAE;EAC5E,KAAK,+BACH,OAAO;GAAE,GAAG;GAAU,UAAU,EAAc,EAAS,UAAU,EAAM,QAAQ,OAAO;EAAE;EAC1F,KAAK,sBACH,OAAO;GAAE,GAAG;GAAU,WAAW,EAAW,EAAS,WAAW,EAAM,QAAQ,QAAQ;EAAE;EAC1F,KAAK,qBACH,OAAO;GACL,GAAG;GACH,WAAW,EAAS,UAAU,QAAQ,MAAa,EAAS,OAAO,EAAM,QAAQ,SAAS,EAAE;EAC9F;EACF,KAAK,2BACH,OAAO;GAAE,GAAG;GAAU,gBAAgB,EAAW,EAAS,gBAAgB,EAAM,QAAQ,OAAO;EAAE;EACnG,KAAK,0BACH,OAAO,EAAqB,GAAU,CAAK;EAC7C,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,mBACH,OAAO;CACX;AACF;AAEA,SAAS,EAAmB,GAAkB,GAAgB,GAAuB;CACnF,IAAI,MAAW,GACb,MAAU,MAAM,GAAG,EAAQ,eAAe,EAAO,+BAA+B,EAAS,EAAE;AAE/F;AAEA,SAAS,EAAyC,GAA0B,GAAuB;CACjG,IAAM,IAAQ,EAAO,WAAW,MAAc,EAAU,OAAO,EAAM,EAAE;CACvE,IAAI,IAAQ,GAAG,OAAO,CAAC,GAAG,GAAQ,CAAK;CACvC,IAAM,IAAO,CAAC,GAAG,CAAM;CAEvB,OADA,EAAK,OAAO,GAAO,GAAG,CAAK,GACpB;AACT;AAEA,SAAS,EAAU,GAA2B,GAAyB;CACrE,OAAO,EAAO,SAAS,CAAK,IAAI,CAAC,GAAG,CAAM,IAAI,CAAC,GAAG,GAAQ,CAAK;AACjE;AAEA,SAAS,EAAW,GAAoC,GAA4C;CAClG,OAAO,EAAW,GAAO,CAAI;AAC/B;AAEA,SAAS,EAAc,GAAqC,GAA2C;CACrG,OAAO,EAAW,GAAU,CAAO;AACrC;AAEA,SAAS,EACP,GACA,GACA,GACA,GACkB;CAClB,IAAI,EAAS,MAAM,MACjB,EAAQ,SAAS,eACd,EAAQ,SAAS,KAAA,KACjB,EAAQ,WAAW,eACnB,EAAc,CAAO,MAAM,CAC/B,GAAG,OAAO,CAAC,GAAG,CAAQ;CACvB,IAAM,IAAe,EAAS,QAAQ,MACpC,EAAQ,SAAS,eAAe,EAAQ,SAAS,KAAA,KAAa,EAAc,CAAO,MAAM,CAC1F,CAAC,CAAC;CACH,OAAO,CAAC,GAAG,GAAU;EACnB,IAAI,MAAiB,IAAI,aAAa,MAAW,aAAa,EAAO,WAAW;EAChF,MAAM;EACN,QAAQ;EACR;EACA,OAAO,CAAC;EACR;EACA,UAAU;GAAE;GAAgB;EAAO;CACrC,CAAC;AACH;AAEA,SAAS,EACP,GACA,GACA,GACA,GACA,GACkB;CAClB,IAAM,IAAS,KAAe,EAAc,CAAK,GAC3C,IAAW,EAAc,GAAU,CAAK;CAC9C,IAAI,CAAC,GAAQ,OAAO;CACpB,IAAM,IAAgB,EAAc,IAAW,MAC7C,EAAQ,SAAS,eAAe,EAAQ,SAAS,KAAA,KAAa,EAAc,CAAO,MAAM,CAC1F,GACK,IAAO,CAAC,GAAG,CAAQ,GACnB,IAAW,KAAiB,IAAI,EAAK,KAAiB,KAAA;CAG5D,OAFI,GAAU,MAAM,WAAW,IAAG,EAAK,OAAO,GAAe,CAAC,IACrD,KAAU,EAAK,OAAO,GAAe,GAAG;EAAE,GAAG;EAAU,QAAQ;CAAW,CAAC,GAC7E,EACL,GACA,GACA,GACA,EAAM,aAAa,CACrB;AACF;AAEA,SAAS,EACP,GACA,GACkB;CAClB,IAAM,IAAc,IAAI,IAAI,EAAU,KAAK,MAAY,EAAQ,EAAE,CAAC;CAClE,OAAO,CAAC,GAAG,GAAW,GAAG,EAAQ,QAAQ,MAAY,CAAC,EAAY,IAAI,EAAQ,EAAE,CAAC,CAAC;AACpF;AAEA,SAAS,EACP,GACA,GACkB;CAClB,IAAM,IAAQ,EAAS,WAAW,MAAY,EAAQ,OAAO,EAAM,QAAQ,SAAS,GAC9E,IAAU,KAAS,IAAI,EAAS,KAAU;EAC9C,IAAI,EAAM,QAAQ;EAClB,MAAM;EACN,QAAQ;EACR,QAAQ,EAAM;EACd,OAAO,CAAC;EACR,WAAW,EAAM;EACjB,UAAU;GAAE,gBAAgB,EAAM;GAAgB,QAAQ,EAAM;EAAO;CACzE,GACM,IAAQ,CAAC,GAAG,EAAQ,KAAK,GACzB,IAAW,EAAM,GAAG,EAAE;CAC5B,AAAI,GAAU,SAAS,UAAU,EAAS,WAAW,EAAM,QAAQ,SACjE,EAAM,OAAO,EAAM,SAAS,GAAG,GAAG;EAChC,GAAG;EACH,MAAM,GAAG,EAAS,OAAO,EAAM,QAAQ;EACvC,GAAI,EAAM,QAAQ,QAAQ,EAAE,OAAO,EAAM,QAAQ,MAAM,IAAI,CAAC;CAC9D,CAAC,IACQ,EAAM,QAAQ,SACvB,EAAM,KAAK;EACT,MAAM;EAAQ,MAAM,EAAM,QAAQ;EAAO,QAAQ,EAAM,QAAQ;EAC/D,GAAI,EAAM,QAAQ,QAAQ,EAAE,OAAO,EAAM,QAAQ,MAAM,IAAI,CAAC;CAC9D,CAAC;CAEH,IAAM,IAA8B;EAAE,GAAG;EAAS,QAAQ;EAAa;CAAM;CAC7E,IAAI,IAAQ,GAAG,OAAO,CAAC,GAAG,GAAU,CAAW;CAC/C,IAAM,IAAO,CAAC,GAAG,CAAQ;CAEzB,OADA,EAAK,OAAO,GAAO,GAAG,CAAW,GAC1B;AACT;AAEA,SAAS,EACP,GACA,GACgB;CAChB,IAAI,IAAU,EAAQ,WAAW,GAC3B,IAA+C,MAAW,aAAa,cAAc,UACrF,IAAQ,EAAQ,MAAM,KAAK,MAC3B,EAAK,SAAS,UAAU,EAAK,WAAW,YAAkB,KAC9D,IAAU,IACH;EACL,GAAG;EACH,QAAQ;EACR,YAAY,EAA2B,EAAK,YAAY,CAAU;CACpE,EACD;CACD,OAAO,IAAU;EAAE,GAAG;EAAS;EAAQ;CAAM,IAAI;AACnD;AAEA,SAAS,EAAwB,GAAyB,GAAyB;CACjF,OAAO,EAAQ,SAAS,eACnB,EAAQ,SAAS,KAAA,KACjB,EAAc,CAAO,MAAM,KAC3B,EAAQ,MAAM,WAAW;AAChC;AAEA,SAAS,EAAc,GAAwC;CAC7D,OAAO,EAAQ,WACT,OAAO,EAAQ,UAAU,UAAW,WAAW,EAAQ,SAAS,SAAS;AACjF;AAEA,SAAS,EACP,GACA,GACQ;CACR,KAAK,IAAI,IAAQ,EAAO,SAAS,GAAG,KAAS,GAAG,KAAY;EAC1D,IAAM,IAAQ,EAAO;EACrB,IAAI,MAAU,KAAA,KAAa,EAAU,CAAK,GAAG,OAAO;CACtD;CACA,OAAO;AACT;AAEA,SAAS,EACP,GACA,GACA,GACA,GACA,GACkB;CAClB,IAAM,IAAQ,EAAS,WAAW,MAAY,EAAQ,OAAO,CAAS,GAChE,IAAU,KAAS,IAAI,EAAS,KAAU,EAAiB,GAAW,GAAgB,CAAM,GAC5F,IAAQ,CAAC,GAAG,EAAQ,KAAK,GACzB,IAAY,EAAM,WAAW,MAAS,EAAK,SAAS,UAAU,EAAK,OAAO,EAAS,EAAE;CAC3F,IAAI,IAAY,GAAG,EAAM,KAAK,CAAQ;MACjC;EACH,IAAM,IAAW,EAAM;EACvB,EAAM,OAAO,GAAW,GAAG,EAAc,GAAU,CAAQ,CAAC;CAC9D;CACA,IAAM,IAAc;EAAE,GAAG;EAAS,QAAQ;EAAsB;CAAM;CACtE,IAAI,IAAQ,GAAG,OAAO,CAAC,GAAG,GAAU,CAAW;CAC/C,IAAM,IAAO,CAAC,GAAG,CAAQ;CAEzB,OADA,EAAK,OAAO,GAAO,GAAG,CAAW,GAC1B;AACT;AAEA,SAAS,EACP,GACA,GACA,GACA,GACA,GACkB;CAClB,IAAI,IAAO,CAAC,GAAG,CAAQ,GACnB,IAAe,EAAK,WAAW,MAAY,EAAQ,OAAO,CAAS;CACvE,AAAI,IAAe,KAAK,EAAO,qBAC7B,IAAO,EAAe,GAAM,GAAW,GAAgB,GAAQ,EAAO,gBAAgB,GACtF,IAAe,EAAK,WAAW,MAAY,EAAQ,OAAO,CAAS;CAErE,IAAM,IAAU,KAAgB,IAAI,EAAK,KAAgB,KAAA;CACzD,IAAI,CAAC,GAAS,OAAO;CACrB,IAAM,IAAQ,CAAC,GAAG,EAAQ,KAAK,GACzB,IAAY,EAAM,WAAW,MAAS,EAAK,SAAS,UAAU,EAAK,OAAO,EAAO,MAAM;CAC7F,IAAI,IAAY,GAAG,OAAO;CAC1B,IAAM,IAAW,EAAM;CAkBvB,OAjBA,EAAM,OAAO,GAAW,GAAG;EACzB,GAAG;EACH,GAAI,EAAO,UAAU,KAAA,IAAsC,CAAC,IAA3B,EAAE,OAAO,EAAO,MAAM;EACvD,GAAI,EAAO,WAAW,KAAA,IAAwC,CAAC,IAA7B,EAAE,QAAQ,EAAO,OAAO;EAC1D,GAAI,EAAO,eAAe,KAAA,IAA6D,CAAC,IAAlD,EAAE,YAAY,EAAO,cAAc,KAAA,EAAU;EACnF,GAAI,EAAO,SAAS,KAAA,IAAoC,CAAC,IAAzB,EAAE,MAAM,EAAO,KAAK;EACpD,GAAI,EAAO,cAAc,KAAA,IAAoE,CAAC,IAAzD,EAAE,MAAM,GAAG,EAAS,QAAQ,KAAK,EAAO,YAAY;EACzF,GAAI,EAAO,eAAe,KAAA,IAEtB,CAAC,IADD,EAAE,MAAM,CAAC,EAAS,MAAM,EAAO,UAAU,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE;EAE1E,GAAI,EAAO,UAAU,KAAA,IAAsC,CAAC,IAA3B,EAAE,OAAO,EAAO,MAAM;EACvD,GAAI,EAAO,WAAW,KAAA,IAAwC,CAAC,IAA7B,EAAE,QAAQ,EAAO,OAAO;EAC1D,GAAI,EAAO,aAAa,KAAA,IAEpB,CAAC,IADD,EAAE,UAAU;GAAE,GAAI,EAAS,YAAY,CAAC;GAAI,GAAG,EAAO;EAAS,EAAE;CAEvE,CAAC,GACD,EAAK,OAAO,GAAc,GAAG;EAAE,GAAG;EAAS;CAAM,CAAC,GAC3C;AACT;AAEA,SAAS,EACP,GACA,GACwB;CACxB,OAAO;EACL,GAAG;EACH,GAAG;EACH,MAAM,EAAS,QAAQ,EAAS;EAChC,OAAO,EAAS,SAAS,EAAS;EAClC,QAAQ,EAAS,UAAU,EAAS;EACpC,YAAY,EAAS,cAAc,EAA2B,EAAS,YAAY,EAAS,MAAM;EAClG,UAAU;GAAE,GAAI,EAAS,YAAY,CAAC;GAAI,GAAI,EAAS,YAAY,CAAC;EAAG;CACzE;AACF;AAEA,SAAS,EAAiB,GAAmB,GAAwB,GAAgC;CACnG,OAAO;EACL,IAAI;EACJ,MAAM;EACN,QAAQ;EACR;EACA,OAAO,CAAC;EACR,UAAU;GAAE,GAAI,IAAiB,EAAE,kBAAe,IAAI,CAAC;GAAI;EAAO;CACpE;AACF;AAEA,SAAS,EACP,GACA,GACA,GACA,GACA,GAC2B;CAI3B,IAAM,IAHU,CAAC,GAAG,EAAS,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,MACrD,EAAU,SAAS,eAAe,EAAc,CAAS,MAAM,CAE/C,CAAA,EAAS,MAAM,aAAa;CAC9C,OAAO;EACL,GAAG;EACH,UAAU,EAAe,EAAS,UAAU,GAAW,GAAgB,GAAQ;GAC7E,MAAM;GACN,IAAI,iBAAiB;GACrB,MAAM;GACN,OAAO;GACP;GACA,MAAM;GACN,YAAY,KAAK,UAAU;IACzB,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,QAAQ;KACN,YAAY,EAAS,MAAM,IAAI,CAAC,CAAC,QAAQ,MAAS,EAAK,KAAK,CAAC,CAAC,CAAC;KAC/D,WAAW;KACX,QAAQ;IACV;GACF,CAAC;GACD,UAAU,EAAE,cAAc,GAAK;EACjC,CAAC;CACH;AACF;AAEA,SAAS,EACP,GACA,GACkB;CAClB,IAAI,EAAS,MAAM,MAAY,EAAQ,SAAS,gBAAgB,EAAc,CAAO,MAAM,EAAM,MAAM,GACrG,OAAO,CAAC,GAAG,CAAQ;CAErB,IAAM,IAAO,CAAC,GAAG,CAAQ,GACnB,IAAuB,EAAc,IAAO,MAChD,EAAQ,SAAS,eACd,EAAQ,SAAS,KAAA,KACjB,EAAc,CAAO,MAAM,EAAM,MACrC,GACK,IAAkB,KAAwB,IAAI,EAAK,KAAwB,KAAA;CAGjF,OAFI,GAAiB,MAAM,WAAW,IAAG,EAAK,OAAO,GAAsB,CAAC,IACnE,KAAiB,EAAK,OAAO,GAAsB,GAAG;EAAE,GAAG;EAAiB,QAAQ;CAAW,CAAC,GAClG,CAAC,GAAG,GAAM;EACf,IAAI,cAAc,EAAM;EACxB,MAAM;EACN,MAAM;EACN,QAAQ;EACR,QAAQ,EAAM;EACd,OAAO,CAAC;EACR,WAAW,EAAM;EACjB,UAAU;GAAE,gBAAgB,EAAM;GAAgB,QAAQ,EAAM;EAAO;CACzE,CAAC;AACH;AAEA,SAAS,EACP,GACA,GACoB;CACpB,IAAI,MAAW,aAAa,CAAC,GAAY,OAAO;CAChD,IAAI;EACF,IAAM,IAAkB,KAAK,MAAM,CAAU;EAE7C,OADK,EAAS,CAAM,IACb,KAAK,UAAU;GAAE,GAAG;GAAQ,OAAO;EAAO,CAAC,IADpB;CAEhC,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAS,EAAS,GAAkD;CAClE,OAAO,OAAO,KAAU,cAAY;AACtC;AAEA,SAAS,EACP,GACA,GAC2B;CAC3B,IAAM,IAAW,EAAM,QAAQ,UACzB,IAAS,EAAM,QAAQ,QAAQ,SAAS,aAC1C,EAAE,SAAS,GAAU,SAAS,WAAW,CAAC,EAAE,IAC5C,EAAE,UAAU,GAAU,SAAS,YAAY,KAAK,GAC9C,IAAU,EAAM,QAAQ,SACxB,IAAS,EAAM,UAAU,EAAQ,UAAU,IAC3C,IAAU,EAAS,SAAS,MAAM,MACtC,EAAc,CAAS,MAAM,KAC1B,EAAU,MAAM,MAAM,MAAS,EAAK,SAAS,UAAU,EAAK,OAAO,EAAQ,MAAM,CACrF;CACD,OAAO;EACL,GAAG;EACH,0BAA0B,EAAU,EAAS,0BAA0B,EAAQ,EAAE;EACjF,gBAAgB,EAAS,eAAe,QAAQ,MAAc,EAAU,OAAO,EAAQ,EAAE;EACzF,UAAU,IACN,EACA,EAAS,UACT,EAAQ,IACR,EAAM,gBACN,GACA;GAAE,QAAQ,EAAQ;GAAQ;EAAO,CACnC,IACE,EAAS;CACf;AACF"}
1
+ {"version":3,"file":"conversation-replica.js","names":[],"sources":["../src/conversation-replica.ts"],"sourcesContent":["import type {\n CodexConversationEvent,\n CodexConversationSnapshot,\n CodexSurfaceTurn,\n SurfaceMessage,\n SurfaceMessageToolPart,\n SurfaceMessageToolPartUpdate,\n} from './surface';\n\n/**\n * A renderer-local projection initialized once from a conversation snapshot and\n * advanced with the much smaller semantic event stream.\n */\nexport type CodexConversationReplica = {\n readonly conversationId: string;\n apply(event: CodexConversationEvent): CodexConversationSnapshot;\n getSnapshot(): CodexConversationSnapshot;\n replace(snapshot: CodexConversationSnapshot): CodexConversationSnapshot;\n};\n\nexport function createCodexConversationReplica(\n initialSnapshot: CodexConversationSnapshot,\n): CodexConversationReplica {\n const conversationId = initialSnapshot.activeConversationId;\n let current = initialSnapshot;\n let lastSequence: number | null = null;\n\n return {\n conversationId,\n getSnapshot: () => current,\n apply: (event) => {\n assertConversation(conversationId, event.conversationId, 'Event');\n if (lastSequence !== null && event.seq <= lastSequence) return current;\n current = applyConversationEvent(current, event);\n lastSequence = event.seq;\n return current;\n },\n replace: (snapshot) => {\n assertConversation(conversationId, snapshot.activeConversationId, 'Snapshot');\n current = snapshot;\n lastSequence = null;\n return current;\n },\n };\n}\n\nfunction applyConversationEvent(\n snapshot: CodexConversationSnapshot,\n event: CodexConversationEvent,\n): CodexConversationSnapshot {\n switch (event.type) {\n case 'conversation.summaryUpserted':\n return {\n ...snapshot,\n conversations: upsertById(snapshot.conversations, event.payload.summary),\n };\n case 'conversation.summaryRemoved':\n return {\n ...snapshot,\n conversations: snapshot.conversations.filter((summary) => summary.id !== event.conversationId),\n };\n case 'conversation.historyReplaced':\n return {\n ...snapshot,\n ...(event.payload.state ?? {}),\n messages: [...event.payload.messages],\n threadStatus: event.payload.threadStatus,\n };\n case 'conversation.historyPrepended':\n return {\n ...snapshot,\n ...(event.payload.state ?? {}),\n messages: prependUniqueMessages(snapshot.messages, event.payload.messages),\n };\n case 'conversation.historyStateChanged':\n return { ...snapshot, ...event.payload };\n case 'conversation.activityChanged':\n return {\n ...snapshot,\n threadStatus: event.payload.threadStatus,\n busy: event.payload.busy,\n activeTurnId: event.payload.busy ? snapshot.activeTurnId : null,\n error: event.payload.error,\n };\n case 'conversation.settingsChanged':\n return { ...snapshot, ...event.payload };\n case 'conversation.goalChanged':\n return { ...snapshot, goal: event.payload.goal };\n case 'conversation.contextUsageChanged':\n return { ...snapshot, contextUsage: event.payload.contextUsage };\n case 'conversation.executionUsageChanged':\n return {\n ...snapshot,\n turns: snapshot.turns.map(turn => turn.id === event.turnId ? { ...turn, executionUsage: event.payload.usage } : turn),\n };\n case 'conversation.skillsChanged':\n return {\n ...snapshot,\n skills: [...event.payload.skills],\n skillCatalogStatus: event.payload.status,\n };\n case 'conversation.permissionsChanged':\n return {\n ...snapshot,\n permissionProfiles: [...event.payload.permissionProfiles],\n approvalPresets: [...event.payload.approvalPresets],\n };\n case 'conversation.diffUpdated':\n return { ...snapshot, turnGitDiff: event.payload.diff };\n case 'conversation.queueChanged':\n return { ...snapshot, queuedPrompts: [...event.payload.queuedPrompts] };\n case 'turn.started':\n return {\n ...snapshot,\n activeTurnId: event.turnId,\n busy: true,\n error: null,\n turnGitDiff: null,\n turnIds: addUnique(snapshot.turnIds, event.turnId),\n turns: upsertTurn(snapshot.turns, {\n id: event.turnId,\n status: 'inProgress',\n error: null,\n willRetry: false,\n startedAt: event.payload.startedAt,\n completedAt: null,\n durationMs: null,\n }),\n messages: ensureAssistantTurnMessage(\n snapshot.messages,\n event.conversationId,\n event.turnId,\n event.payload.startedAt,\n ),\n };\n case 'turn.completed': {\n const messageStatus = event.payload.status === 'failed' ? 'error' : 'complete';\n const messages = snapshot.messages\n .map((message) => messageTurnId(message) === event.turnId\n ? completeMessage(message, messageStatus)\n : message)\n .filter((message) => !isEmptyAssistantForTurn(message, event.turnId));\n return {\n ...snapshot,\n activeTurnId: snapshot.activeTurnId === event.turnId ? null : snapshot.activeTurnId,\n busy: snapshot.activeTurnId !== event.turnId && snapshot.busy,\n error: snapshot.activeTurnId === event.turnId || !snapshot.busy\n ? event.payload.error?.message ?? null : snapshot.error,\n turnIds: addUnique(snapshot.turnIds, event.turnId),\n turns: upsertTurn(snapshot.turns, { id: event.turnId, ...event.payload }),\n messages,\n };\n }\n case 'turn.error': {\n const terminal = !event.payload.willRetry && snapshot.activeTurnId === event.turnId;\n const previous = snapshot.turns.find((turn) => turn.id === event.turnId);\n return {\n ...snapshot,\n activeTurnId: terminal ? null : snapshot.activeTurnId,\n busy: terminal ? false : snapshot.busy,\n error: event.payload.error.message,\n turnIds: addUnique(snapshot.turnIds, event.turnId),\n turns: upsertTurn(snapshot.turns, {\n ...previous,\n id: event.turnId,\n status: event.payload.willRetry ? 'inProgress' : 'failed',\n error: event.payload.error,\n willRetry: event.payload.willRetry,\n startedAt: previous?.startedAt ?? null,\n completedAt: previous?.completedAt ?? null,\n durationMs: previous?.durationMs ?? null,\n }),\n };\n }\n case 'message.appended':\n return {\n ...snapshot,\n messages: event.payload.message.kind === 'steer'\n ? appendSteerMessage(\n snapshot.messages,\n event.payload.message,\n event.conversationId,\n event.turnId,\n event.occurredAt,\n )\n : upsertMessage(snapshot.messages, event.payload.message),\n };\n case 'message.updated':\n return { ...snapshot, messages: upsertMessage(snapshot.messages, event.payload.message) };\n case 'message.delta':\n return {\n ...snapshot,\n messages: appendMessageDelta(snapshot.messages, event),\n };\n case 'tool.started':\n case 'tool.completed':\n return {\n ...snapshot,\n messages: upsertToolPart(\n snapshot.messages,\n event.payload.messageId,\n event.conversationId,\n event.turnId,\n event.payload.toolPart,\n ),\n };\n case 'tool.updated':\n return {\n ...snapshot,\n messages: updateToolPart(\n snapshot.messages,\n event.payload.messageId,\n event.conversationId,\n event.turnId,\n event.payload.update,\n ),\n };\n case 'plan.delta':\n return applyPlan(snapshot, event.conversationId, event.turnId, event.payload.markdown, 'running');\n case 'plan.updated': {\n const next = applyPlan(\n snapshot,\n event.conversationId,\n event.turnId,\n event.payload.markdown,\n event.payload.status === 'completed' ? 'completed' : 'running',\n );\n return {\n ...next,\n executionPlan: {\n turnId: event.turnId,\n explanation: event.payload.explanation,\n steps: event.payload.steps.map((step) => ({ ...step })),\n markdown: event.payload.markdown,\n updatedAt: event.occurredAt,\n },\n };\n }\n case 'plan.completed':\n return applyPlan(snapshot, event.conversationId, event.turnId, event.payload.markdown, 'completed');\n case 'context.compactionStarted':\n return { ...snapshot, messages: startCompaction(snapshot.messages, event) };\n case 'context.compactionCompleted':\n return { ...snapshot, messages: upsertMessage(snapshot.messages, event.payload.message) };\n case 'approval.requested':\n return { ...snapshot, approvals: upsertById(snapshot.approvals, event.payload.approval) };\n case 'approval.resolved':\n return {\n ...snapshot,\n approvals: snapshot.approvals.filter((approval) => approval.id !== event.payload.approval.id),\n };\n case 'clientRequest.requested':\n return { ...snapshot, clientRequests: upsertById(snapshot.clientRequests, event.payload.request) };\n case 'clientRequest.resolved':\n return resolveClientRequest(snapshot, event);\n case 'file.activity':\n case 'turn.modelRerouted':\n case 'subagent.toolCallChanged':\n case 'subagent.activity':\n case 'realtime.started':\n case 'realtime.itemAdded':\n case 'realtime.itemStarted':\n case 'realtime.itemCompleted':\n case 'realtime.itemTranscriptDelta':\n case 'realtime.transcriptDelta':\n case 'realtime.transcriptCompleted':\n case 'realtime.audioDelta':\n case 'realtime.sdp':\n case 'realtime.error':\n case 'realtime.closed':\n return snapshot;\n }\n}\n\nfunction assertConversation(expected: string, actual: string, subject: string): void {\n if (actual !== expected) {\n throw new Error(`${subject} belongs to '${actual}', not replica conversation '${expected}'`);\n }\n}\n\nfunction upsertById<Value extends { id: string }>(values: readonly Value[], value: Value): Value[] {\n const index = values.findIndex((candidate) => candidate.id === value.id);\n if (index < 0) return [...values, value];\n const next = [...values];\n next.splice(index, 1, value);\n return next;\n}\n\nfunction addUnique(values: readonly string[], value: string): string[] {\n return values.includes(value) ? [...values] : [...values, value];\n}\n\nfunction upsertTurn(turns: readonly CodexSurfaceTurn[], turn: CodexSurfaceTurn): CodexSurfaceTurn[] {\n return upsertById(turns, turn);\n}\n\nfunction upsertMessage(messages: readonly SurfaceMessage[], message: SurfaceMessage): SurfaceMessage[] {\n return upsertById(messages, message);\n}\n\nfunction ensureAssistantTurnMessage(\n messages: readonly SurfaceMessage[],\n conversationId: string,\n turnId: string,\n createdAt: string,\n): SurfaceMessage[] {\n if (messages.some((message) => (\n message.role === 'assistant'\n && message.kind === undefined\n && message.status === 'streaming'\n && messageTurnId(message) === turnId\n ))) return [...messages];\n const segmentCount = messages.filter((message) => (\n message.role === 'assistant' && message.kind === undefined && messageTurnId(message) === turnId\n )).length;\n return [...messages, {\n id: segmentCount === 0 ? `assistant-${turnId}` : `assistant-${turnId}-segment-${segmentCount}`,\n role: 'assistant',\n status: 'streaming',\n turnId,\n parts: [],\n createdAt,\n metadata: { conversationId, turnId },\n }];\n}\n\nfunction appendSteerMessage(\n messages: readonly SurfaceMessage[],\n steer: SurfaceMessage,\n conversationId: string,\n eventTurnId: string | undefined,\n occurredAt: string,\n): SurfaceMessage[] {\n const turnId = eventTurnId ?? messageTurnId(steer);\n const appended = upsertMessage(messages, steer);\n if (!turnId) return appended;\n const previousIndex = findLastIndex(appended, (message) => (\n message.role === 'assistant' && message.kind === undefined && messageTurnId(message) === turnId\n ));\n const next = [...appended];\n const previous = previousIndex >= 0 ? next[previousIndex] : undefined;\n if (previous?.parts.length === 0) next.splice(previousIndex, 1);\n else if (previous) next.splice(previousIndex, 1, { ...previous, status: 'complete' });\n return ensureAssistantTurnMessage(\n next,\n conversationId,\n turnId,\n steer.createdAt ?? occurredAt,\n );\n}\n\nfunction prependUniqueMessages(\n current: readonly SurfaceMessage[],\n prepended: readonly SurfaceMessage[],\n): SurfaceMessage[] {\n const incomingIds = new Set(prepended.map((message) => message.id));\n return [...prepended, ...current.filter((message) => !incomingIds.has(message.id))];\n}\n\nfunction appendMessageDelta(\n messages: readonly SurfaceMessage[],\n event: Extract<CodexConversationEvent, { type: 'message.delta' }>,\n): SurfaceMessage[] {\n const index = messages.findIndex((message) => message.id === event.payload.messageId);\n const message = index >= 0 ? messages[index]! : {\n id: event.payload.messageId,\n role: 'assistant' as const,\n status: 'streaming' as const,\n turnId: event.turnId,\n parts: [],\n createdAt: event.occurredAt,\n metadata: { conversationId: event.conversationId, turnId: event.turnId },\n };\n const parts = [...message.parts];\n const lastPart = parts.at(-1);\n if (lastPart?.type === 'text' && lastPart.itemId === event.payload.itemId) {\n parts.splice(parts.length - 1, 1, {\n ...lastPart,\n text: `${lastPart.text}${event.payload.delta}`,\n ...(event.payload.phase ? { phase: event.payload.phase } : {}),\n });\n } else if (event.payload.delta) {\n parts.push({\n type: 'text', text: event.payload.delta, itemId: event.payload.itemId,\n ...(event.payload.phase ? { phase: event.payload.phase } : {}),\n });\n }\n const nextMessage: SurfaceMessage = { ...message, status: 'streaming', parts };\n if (index < 0) return [...messages, nextMessage];\n const next = [...messages];\n next.splice(index, 1, nextMessage);\n return next;\n}\n\nfunction completeMessage(\n message: SurfaceMessage,\n status: SurfaceMessage['status'],\n): SurfaceMessage {\n let changed = message.status !== status;\n const toolStatus: SurfaceMessageToolPart['status'] = status === 'complete' ? 'completed' : 'failed';\n const parts = message.parts.map((part) => {\n if (part.type !== 'tool' || part.status !== 'running') return part;\n changed = true;\n return {\n ...part,\n status: toolStatus,\n statusText: transitionedToolStatusText(part.statusText, toolStatus),\n };\n });\n return changed ? { ...message, status, parts } : message;\n}\n\nfunction isEmptyAssistantForTurn(message: SurfaceMessage, turnId: string): boolean {\n return message.role === 'assistant'\n && message.kind === undefined\n && messageTurnId(message) === turnId\n && message.parts.length === 0;\n}\n\nfunction messageTurnId(message: SurfaceMessage): string | null {\n return message.turnId\n ?? (typeof message.metadata?.turnId === 'string' ? message.metadata.turnId : null);\n}\n\nfunction findLastIndex<Value>(\n values: readonly Value[],\n predicate: (value: Value) => boolean,\n): number {\n for (let index = values.length - 1; index >= 0; index -= 1) {\n const value = values[index];\n if (value !== undefined && predicate(value)) return index;\n }\n return -1;\n}\n\nfunction upsertToolPart(\n messages: readonly SurfaceMessage[],\n messageId: string,\n conversationId: string,\n turnId: string,\n toolPart: SurfaceMessageToolPart,\n): SurfaceMessage[] {\n const index = messages.findIndex((message) => message.id === messageId);\n const message = index >= 0 ? messages[index]! : assistantMessage(messageId, conversationId, turnId);\n const parts = [...message.parts];\n const partIndex = parts.findIndex((part) => part.type === 'tool' && part.id === toolPart.id);\n if (partIndex < 0) parts.push(toolPart);\n else {\n const existing = parts[partIndex] as SurfaceMessageToolPart;\n parts.splice(partIndex, 1, mergeToolPart(existing, toolPart));\n }\n const nextMessage = { ...message, status: 'streaming' as const, parts };\n if (index < 0) return [...messages, nextMessage];\n const next = [...messages];\n next.splice(index, 1, nextMessage);\n return next;\n}\n\nfunction updateToolPart(\n messages: readonly SurfaceMessage[],\n messageId: string,\n conversationId: string,\n turnId: string,\n update: SurfaceMessageToolPartUpdate,\n): SurfaceMessage[] {\n let next = [...messages];\n let messageIndex = next.findIndex((message) => message.id === messageId);\n if (messageIndex < 0 && update.fallbackToolPart) {\n next = upsertToolPart(next, messageId, conversationId, turnId, update.fallbackToolPart);\n messageIndex = next.findIndex((message) => message.id === messageId);\n }\n const message = messageIndex >= 0 ? next[messageIndex] : undefined;\n if (!message) return next;\n const parts = [...message.parts];\n const partIndex = parts.findIndex((part) => part.type === 'tool' && part.id === update.itemId);\n if (partIndex < 0) return next;\n const existing = parts[partIndex] as SurfaceMessageToolPart;\n parts.splice(partIndex, 1, {\n ...existing,\n ...(update.title !== undefined ? { title: update.title } : {}),\n ...(update.status !== undefined ? { status: update.status } : {}),\n ...(update.statusText !== undefined ? { statusText: update.statusText ?? undefined } : {}),\n ...(update.body !== undefined ? { body: update.body } : {}),\n ...(update.bodyDelta !== undefined ? { body: `${existing.body ?? ''}${update.bodyDelta}` } : {}),\n ...(update.bodyAppend !== undefined\n ? { body: [existing.body, update.bodyAppend].filter(Boolean).join('\\n') }\n : {}),\n ...(update.input !== undefined ? { input: update.input } : {}),\n ...(update.output !== undefined ? { output: update.output } : {}),\n ...(update.metadata !== undefined\n ? { metadata: { ...(existing.metadata ?? {}), ...update.metadata } }\n : {}),\n });\n next.splice(messageIndex, 1, { ...message, parts });\n return next;\n}\n\nfunction mergeToolPart(\n existing: SurfaceMessageToolPart,\n incoming: SurfaceMessageToolPart,\n): SurfaceMessageToolPart {\n return {\n ...existing,\n ...incoming,\n body: incoming.body ?? existing.body,\n input: incoming.input ?? existing.input,\n output: incoming.output ?? existing.output,\n statusText: incoming.statusText ?? transitionedToolStatusText(existing.statusText, incoming.status),\n metadata: { ...(existing.metadata ?? {}), ...(incoming.metadata ?? {}) },\n };\n}\n\nfunction assistantMessage(messageId: string, conversationId: string, turnId: string): SurfaceMessage {\n return {\n id: messageId,\n role: 'assistant',\n status: 'streaming',\n turnId,\n parts: [],\n metadata: { ...(conversationId ? { conversationId } : {}), turnId },\n };\n}\n\nfunction applyPlan(\n snapshot: CodexConversationSnapshot,\n conversationId: string,\n turnId: string,\n markdown: string,\n status: SurfaceMessageToolPart['status'],\n): CodexConversationSnapshot {\n const message = [...snapshot.messages].reverse().find((candidate) => (\n candidate.role === 'assistant' && messageTurnId(candidate) === turnId\n ));\n const messageId = message?.id ?? `assistant-${turnId}`;\n return {\n ...snapshot,\n messages: upsertToolPart(snapshot.messages, messageId, conversationId, turnId, {\n type: 'tool',\n id: `plan-progress-${turnId}`,\n kind: 'generic',\n title: 'plan',\n status,\n body: markdown,\n statusText: JSON.stringify({\n source: 'codex',\n action: 'plan',\n phase: status,\n params: {\n addedLines: markdown.split('\\n').filter((line) => line.trim()).length,\n operation: 'write',\n target: 'plan',\n },\n }),\n metadata: { planProgress: true },\n }),\n };\n}\n\nfunction startCompaction(\n messages: readonly SurfaceMessage[],\n event: Extract<CodexConversationEvent, { type: 'context.compactionStarted' }>,\n): SurfaceMessage[] {\n if (messages.some((message) => message.kind === 'compaction' && messageTurnId(message) === event.turnId)) {\n return [...messages];\n }\n const next = [...messages];\n const activeAssistantIndex = findLastIndex(next, (message) => (\n message.role === 'assistant'\n && message.kind === undefined\n && messageTurnId(message) === event.turnId\n ));\n const activeAssistant = activeAssistantIndex >= 0 ? next[activeAssistantIndex] : undefined;\n if (activeAssistant?.parts.length === 0) next.splice(activeAssistantIndex, 1);\n else if (activeAssistant) next.splice(activeAssistantIndex, 1, { ...activeAssistant, status: 'complete' });\n return [...next, {\n id: `compaction-${event.turnId}`,\n kind: 'compaction',\n role: 'assistant',\n status: 'streaming',\n turnId: event.turnId,\n parts: [],\n createdAt: event.occurredAt,\n metadata: { conversationId: event.conversationId, turnId: event.turnId },\n }];\n}\n\nfunction transitionedToolStatusText(\n statusText: string | undefined,\n status: SurfaceMessageToolPart['status'],\n): string | undefined {\n if (status === 'running' || !statusText) return statusText;\n try {\n const parsed: unknown = JSON.parse(statusText);\n if (!isRecord(parsed)) return statusText;\n return JSON.stringify({ ...parsed, phase: status });\n } catch {\n return statusText;\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction resolveClientRequest(\n snapshot: CodexConversationSnapshot,\n event: Extract<CodexConversationEvent, { type: 'clientRequest.resolved' }>,\n): CodexConversationSnapshot {\n const response = event.payload.response;\n const output = event.payload.request.kind === 'ask_user'\n ? { answers: response?.payload?.answers ?? {} }\n : { decision: response?.payload?.decision ?? null };\n const request = event.payload.request;\n const turnId = event.turnId ?? request.turnId ?? '';\n const message = snapshot.messages.find((candidate) => (\n messageTurnId(candidate) === turnId\n && candidate.parts.some((part) => part.type === 'tool' && part.id === request.itemId)\n ));\n return {\n ...snapshot,\n answeredClientRequestIds: addUnique(snapshot.answeredClientRequestIds, request.id),\n clientRequests: snapshot.clientRequests.filter((candidate) => candidate.id !== request.id),\n messages: message\n ? updateToolPart(\n snapshot.messages,\n message.id,\n event.conversationId,\n turnId,\n { itemId: request.itemId, output },\n )\n : snapshot.messages,\n };\n}\n"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
1
  import { TypedEventBus as e } from "./events.js";
2
2
  import { createCodexConversationReplica as t } from "./conversation-replica.js";
3
- import { a as n, c as r, d as i, f as a, i as o, l as s, m as c, n as l, o as u, p as d, r as f, s as p, t as m, u as h } from "./chunks/surface-bridge-B2eH0shg.js";
3
+ import { a as n, c as r, d as i, f as a, i as o, l as s, m as c, n as l, o as u, p as d, r as f, s as p, t as m, u as h } from "./chunks/surface-bridge-CUuIfmG5.js";
4
4
  export { e as TypedEventBus, h as applyCodexSurfaceStateChanges, m as codexConversationBridgeOperations, l as codexSurfaceBridgeArities, f as codexSurfaceBridgeOperations, t as createCodexConversationReplica, i as createCodexSurfaceStateMirror, a as diffCodexSurfaceState, o as invokeCodexConversationBridgeOperation, n as invokeCodexSurfaceBridgeOperation, u as isCodexConversationBridgeOperation, p as isCodexSurfaceBridgeOperation, d as isCodexSurfaceStatePatchSource, r as subscribeCodexConversationBridge, s as subscribeCodexConversationReplicaBridge, c as subscribeCodexSurfaceState };
@@ -6,9 +6,11 @@ export type CodexSurfaceBridgeOperationArguments<Name extends CodexSurfaceBridge
6
6
  export type CodexSurfaceBridgeOperationResult<Name extends CodexSurfaceBridgeOperation> = Awaited<ReturnType<OperationFunction<Name>>>;
7
7
  type Awaitable<Value> = Value | Promise<Value>;
8
8
  type SurfaceOperationFunction<Name extends CodexSurfaceBridgeOperation> = Name extends keyof Required<CodexSurfaceApi> ? Extract<Required<CodexSurfaceApi>[Name], (...args: never[]) => unknown> : never;
9
- export type CodexSurfaceBridgeTarget = {
9
+ type OptionalAccountOperation = 'readRateLimits' | 'readAccountUsage' | 'consumeRateLimitResetCredit';
10
+ type BridgeOperationMethods = {
10
11
  [Name in CodexSurfaceBridgeOperation]: (...args: Parameters<SurfaceOperationFunction<Name>>) => Awaitable<Awaited<ReturnType<SurfaceOperationFunction<Name>>>>;
11
- } & Pick<CodexSurfaceApi, 'onEvent' | 'onStateChange'>;
12
+ };
13
+ export type CodexSurfaceBridgeTarget = Omit<BridgeOperationMethods, OptionalAccountOperation> & Partial<Pick<BridgeOperationMethods, OptionalAccountOperation>> & Pick<CodexSurfaceApi, 'onEvent' | 'onStateChange'>;
12
14
  export type CodexSurfaceBridgeAttachmentResolver = (attachment: CodexRendererAttachment) => Awaitable<CodexSurfaceAttachment>;
13
15
  export type CodexSurfaceBridgeInvokeOptions = {
14
16
  operationLabel?: string;
@@ -93,7 +95,7 @@ export declare function subscribeCodexConversationBridge(target: CodexConversati
93
95
  * can always initialize a replica before applying deltas.
94
96
  */
95
97
  export declare function subscribeCodexConversationReplicaBridge(target: CodexConversationBridgeTarget, conversationId: string, listener: (notification: CodexConversationBridgeNotification) => void): () => void;
96
- export declare const codexSurfaceBridgeOperations: readonly ["archiveConversation", "cancelLogin", "clearGoal", "compactConversation", "connect", "continueInterruptedTurn", "createConversation", "deleteConversation", "deleteTurn", "deleteQueuedPrompt", "editTurn", "forkTurn", "getSnapshot", "interrupt", "listConversations", "listModels", "loadOlderConversationHistory", "logout", "readConversationHistory", "readConversationPromptHistory", "refreshAccount", "refreshConversations", "renameConversation", "respondToClientRequest", "resolveApproval", "retryTurn", "selectConversation", "sendMessage", "setGoal", "startChatGptDeviceCodeLogin", "startChatGptLogin", "startReview", "steerMessage", "steerQueuedPrompt", "unarchiveConversation", "updateConversationSettings", "updateQueuedPrompt", "startLiveChat", "stopLiveChat"];
98
+ export declare const codexSurfaceBridgeOperations: readonly ["archiveConversation", "cancelLogin", "clearGoal", "compactConversation", "connect", "continueInterruptedTurn", "createConversation", "deleteConversation", "deleteTurn", "deleteQueuedPrompt", "editTurn", "forkTurn", "getSnapshot", "interrupt", "listConversations", "listModels", "loadOlderConversationHistory", "logout", "readConversationHistory", "readConversationPromptHistory", "refreshAccount", "refreshConversations", "renameConversation", "respondToClientRequest", "resolveApproval", "retryTurn", "selectConversation", "sendMessage", "setGoal", "startChatGptDeviceCodeLogin", "startChatGptLogin", "startReview", "steerMessage", "steerQueuedPrompt", "unarchiveConversation", "updateConversationSettings", "updateQueuedPrompt", "startLiveChat", "stopLiveChat", "readRateLimits", "readAccountUsage", "consumeRateLimitResetCredit"];
97
99
  export declare const codexSurfaceBridgeArities: Readonly<Record<CodexSurfaceBridgeOperation, readonly [minimum: number, maximum: number]>>;
98
100
  export declare function isCodexSurfaceBridgeOperation(value: unknown): value is CodexSurfaceBridgeOperation;
99
101
  export declare function invokeCodexSurfaceBridgeOperation<Name extends CodexSurfaceBridgeOperation>(target: CodexSurfaceBridgeTarget, operation: Name, args: readonly unknown[], options?: CodexSurfaceBridgeInvokeOptions): Promise<CodexSurfaceBridgeOperationResult<Name>>;
@@ -1 +1 @@
1
- {"version":3,"file":"surface-bridge.d.ts","sourceRoot":"","sources":["../src/surface-bridge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"surface-bridge.d.ts","sourceRoot":"","sources":["../src/surface-bridge.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import { a as e, c as t, d as n, f as r, i, l as a, m as o, n as s, o as c, p as l, r as u, s as d, t as f, u as p } from "./chunks/surface-bridge-B2eH0shg.js";
1
+ import { a as e, c as t, d as n, f as r, i, l as a, m as o, n as s, o as c, p as l, r as u, s as d, t as f, u as p } from "./chunks/surface-bridge-CUuIfmG5.js";
2
2
  export { p as applyCodexSurfaceStateChanges, f as codexConversationBridgeOperations, s as codexSurfaceBridgeArities, u as codexSurfaceBridgeOperations, n as createCodexSurfaceStateMirror, r as diffCodexSurfaceState, i as invokeCodexConversationBridgeOperation, e as invokeCodexSurfaceBridgeOperation, c as isCodexConversationBridgeOperation, d as isCodexSurfaceBridgeOperation, l as isCodexSurfaceStatePatchSource, t as subscribeCodexConversationBridge, a as subscribeCodexConversationReplicaBridge, o as subscribeCodexSurfaceState };
package/dist/surface.d.ts CHANGED
@@ -262,6 +262,28 @@ export type CodexSurfaceContextUsage = {
262
262
  modelContextWindow: number | null;
263
263
  usedPercent: number | null;
264
264
  };
265
+ /** Provider counts: cached input is part of input, and reasoning is part of output. */
266
+ export type CodexSurfaceTokenUsage = {
267
+ totalTokens: number;
268
+ inputTokens: number;
269
+ cachedInputTokens: number;
270
+ /** Null when absent. Its relationship to input is not guaranteed by app-server. */
271
+ cacheWriteInputTokens: number | null;
272
+ outputTokens: number;
273
+ reasoningOutputTokens: number;
274
+ };
275
+ export type CodexSurfaceExecutionUsage = {
276
+ /** This surface instance observed the turn start, rather than only its replayed counters. */
277
+ observedStart: boolean;
278
+ /** Latest provider request, not the complete turn. */
279
+ last: CodexSurfaceTokenUsage;
280
+ /** Provider thread counters; may be replayed or reset. */
281
+ total: CodexSurfaceTokenUsage;
282
+ /** Cumulative replacement since an observed start with a known baseline. */
283
+ execution: CodexSurfaceTokenUsage | null;
284
+ /** Unknown unless the provider supplies authoritative whole-execution evidence. */
285
+ model: string | null;
286
+ };
265
287
  export type CodexSurfaceGoal = {
266
288
  threadId: string;
267
289
  objective: string;
@@ -313,6 +335,29 @@ export type CodexSurfaceRateLimitSnapshot = {
313
335
  planType: string | null;
314
336
  rateLimitReachedType: string | null;
315
337
  };
338
+ export type ReadCodexRateLimitsOptions = {
339
+ excludeResetCreditDetails?: boolean;
340
+ };
341
+ export type CodexSurfaceAccountUsage = {
342
+ summary: {
343
+ lifetimeTokens: string | null;
344
+ peakDailyTokens: string | null;
345
+ longestRunningTurnSec: string | null;
346
+ currentStreakDays: string | null;
347
+ longestStreakDays: string | null;
348
+ };
349
+ dailyUsageBuckets: readonly {
350
+ startDate: string;
351
+ tokens: string;
352
+ }[] | null;
353
+ };
354
+ export type ConsumeCodexRateLimitResetCreditOptions = {
355
+ idempotencyKey: string;
356
+ creditId?: string;
357
+ };
358
+ export type CodexSurfaceRateLimitResetCreditResult = {
359
+ outcome: 'reset' | 'alreadyRedeemed' | 'nothingToReset' | 'noCredit';
360
+ };
316
361
  export type CodexSurfaceRateLimits = {
317
362
  rateLimits: CodexSurfaceRateLimitSnapshot;
318
363
  rateLimitsByLimitId: Record<string, CodexSurfaceRateLimitSnapshot> | null;
@@ -494,6 +539,7 @@ export type CodexSurfaceTurn = {
494
539
  startedAt: string | null;
495
540
  completedAt: string | null;
496
541
  durationMs: number | null;
542
+ executionUsage?: CodexSurfaceExecutionUsage | null;
497
543
  };
498
544
  /**
499
545
  * Signed 16-bit little-endian PCM carried by a Codex realtime session.
@@ -622,6 +668,12 @@ export type CodexSurfaceEvent = CodexSurfaceEventEnvelope<'surface.statusChanged
622
668
  readonly turnId?: string;
623
669
  } | CodexTurnEventEnvelope<'conversation.contextUsageChanged', {
624
670
  contextUsage: CodexSurfaceContextUsage | null;
671
+ }> | CodexTurnEventEnvelope<'conversation.executionUsageChanged', {
672
+ usage: CodexSurfaceExecutionUsage;
673
+ }> | CodexTurnEventEnvelope<'turn.modelRerouted', {
674
+ fromModel: string;
675
+ toModel: string;
676
+ reason: string;
625
677
  }> | CodexConversationEventEnvelope<'conversation.skillsChanged', {
626
678
  cwd: string | null;
627
679
  skills: readonly CodexSurfaceSkill[];
@@ -669,6 +721,7 @@ export type CodexSurfaceEvent = CodexSurfaceEventEnvelope<'surface.statusChanged
669
721
  startedAt: string | null;
670
722
  completedAt: string | null;
671
723
  durationMs: number | null;
724
+ executionUsage?: CodexSurfaceExecutionUsage | null;
672
725
  }> | CodexTurnEventEnvelope<'turn.error', {
673
726
  error: CodexSurfaceTurnError;
674
727
  willRetry: boolean;
@@ -840,6 +893,9 @@ export type UpdateCodexConversationSettings = {
840
893
  planMode?: boolean;
841
894
  };
842
895
  export type CodexSurfaceApi = {
896
+ readRateLimits?(options?: ReadCodexRateLimitsOptions): Promise<CodexSurfaceRateLimits>;
897
+ readAccountUsage?(): Promise<CodexSurfaceAccountUsage>;
898
+ consumeRateLimitResetCredit?(options: ConsumeCodexRateLimitResetCreditOptions): Promise<CodexSurfaceRateLimitResetCreditResult>;
843
899
  startLiveChat?(conversationId: string, options: StartCodexLiveChatOptions): Promise<{
844
900
  sdp: string;
845
901
  }>;